OSDN Git Service

a9ebc30b9fe97e190e55541e731c90ed3a8e290d
[gokigen/A01c.git] / wear / src / main / java / jp / sfjp / gokigen / a01c / olycamerawrapper / dispatcher / FeatureDispatcher.java
1 package jp.sfjp.gokigen.a01c.olycamerawrapper.dispatcher;
2
3 import android.util.Log;
4 import android.view.MotionEvent;
5
6 import androidx.annotation.NonNull;
7 import androidx.appcompat.app.AppCompatActivity;
8
9 import jp.sfjp.gokigen.a01c.ConfirmationDialog;
10 import jp.sfjp.gokigen.a01c.ICameraFeatureDispatcher;
11 import jp.sfjp.gokigen.a01c.IShowInformation;
12 import jp.sfjp.gokigen.a01c.R;
13 import jp.sfjp.gokigen.a01c.liveview.ILiveImageStatusNotify;
14 import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraCoordinator;
15 import jp.sfjp.gokigen.a01c.olycamerawrapper.IZoomLensHolder;
16 import jp.sfjp.gokigen.a01c.olycamerawrapper.property.IOlyCameraProperty;
17 import jp.sfjp.gokigen.a01c.olycamerawrapper.property.IOlyCameraPropertyProvider;
18 import jp.sfjp.gokigen.a01c.olycamerawrapper.takepicture.IBracketingShotStyle;
19 import jp.sfjp.gokigen.a01c.preference.PreferenceAccessWrapper;
20
21
22 /**
23  *   カメラ機能の実行
24  *
25  */
26 public class FeatureDispatcher implements ICameraFeatureDispatcher
27 {
28     private final String TAG = toString();
29
30     private final AppCompatActivity activity;
31     private final IShowInformation statusDrawer;
32     private final IOlyCameraCoordinator camera;
33     private final ILiveImageStatusNotify liveImageView;
34     private final PreferenceAccessWrapper preferences;
35
36     public FeatureDispatcher(@NonNull AppCompatActivity context, @NonNull IShowInformation statusDrawer, @NonNull IOlyCameraCoordinator camera, ILiveImageStatusNotify liveImageView)
37     {
38         this.activity = context;
39         this.statusDrawer = statusDrawer;
40         this.camera = camera;
41         this.liveImageView = liveImageView;
42         this.preferences = new PreferenceAccessWrapper(context);
43     }
44
45     /**
46      *   指定した機能を実行する
47      *
48      * @param objectId     操作したオブジェクト
49      * @param key            操作する機能
50      * @param defaultAction   標準機能
51      */
52     @Override
53     public boolean dispatchAction(int objectId, @NonNull String key, int defaultAction)
54     {
55         int featureNumber = preferences.getInt(key, defaultAction);
56         if (featureNumber <= ICameraFeatureDispatcher.FEATURE_ACTION_NONE)
57         {
58             // 何もしない
59             return (false);
60         }
61
62         // 機能実行の割り当て...
63         int duration = IShowInformation.VIBRATE_PATTERN_SIMPLE_SHORT;
64         switch (featureNumber)
65         {
66             case ICameraFeatureDispatcher.FEATURE_SETTINGS:
67                 // 設定画面を開く
68                 showSettingsScreen();
69                 duration =IShowInformation.VIBRATE_PATTERN_NONE;
70                 break;
71             case ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_GRID:
72                 // グリッド標示ON/OFF
73                 changeShowGrid(objectId);
74                 break;
75             case ICameraFeatureDispatcher.FEATURE_SHUTTER_SINGLESHOT:
76                 // シャッター
77                 pushShutterButton();
78                 //duration =IShowInformation.VIBRATE_PATTERN_NONE;
79                 break;
80             case ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE:
81                 // 撮影モードの変更
82                 changeTakeMode();
83                 break;
84             case ICameraFeatureDispatcher.FEATURE_CHAGE_AE_LOCK_MODE:
85                 // AE LOCKのON/OFF切り替え
86                 changeAeLockMode();
87                 break;
88             case ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN:
89                 // 露出補正を1段階下げる
90                 changeExposureBiasValueDown();
91                 break;
92             case ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP:
93                 // 露出補正を1段階上げる
94                 changeExposureBiasValueUp();
95                 break;
96             case ICameraFeatureDispatcher.FEATURE_APERTURE_DOWN:
97                 // 絞り値を1段階下げる
98                 changeApertureValueDown();
99                 break;
100             case ICameraFeatureDispatcher.FEATURE_APERTURE_UP:
101                 // 絞り値を1段階上げる
102                 changeApertureValueUp();
103                 break;
104             case ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_DOWN:
105                 // シャッター速度を1段階下げる
106                 changeShutterSpeedDown();
107                 break;
108             case ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_UP:
109                 // シャッター速度を1段階上げる
110                 changeShutterSpeedUp();
111                 break;
112             case ICameraFeatureDispatcher.FEATURE_COLORTONE_DOWN:
113                 // 仕上がり・ピクチャーモードを選択
114                 changeColorToneDown();
115                 break;
116             case ICameraFeatureDispatcher.FEATURE_COLORTONE_UP:
117                 // 仕上がり・ピクチャーモードを選択
118                 changeColorToneUp();
119                 break;
120             case ICameraFeatureDispatcher.FEATURE_ART_FILTER_DOWN:
121                 // アートフィルターを選択
122                 changeArtFilterDown();
123                 break;
124             case ICameraFeatureDispatcher.FEATURE_ART_FILTER_UP:
125                 // アートフィルターを選択
126                 changeArtFilterUp();
127                 break;
128             case ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_LEVEL_GAUGE:
129                 // デジタル水準器の表示・非表示
130                 changeShowLevelGauge();
131                 break;
132             case ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE_REVERSE:
133                 // 撮影モードの変更(逆順)
134                 changeTakeModeReverse();
135                 break;
136             case ICameraFeatureDispatcher.FEATURE_CONTROL_MOVIE:
137                 // 動画の撮影・撮影終了
138                 movieControl();
139                 break;
140             case ICameraFeatureDispatcher.FEATURE_AE_DOWN:
141                 // AE(測光方式)を選択
142                 changeAEModeDown();
143                 break;
144             case ICameraFeatureDispatcher.FEATURE_AE_UP:
145                 // AE(測光方式)を選択
146                 changeAEModeUp();
147                 break;
148             case ICameraFeatureDispatcher.FEATURE_ISO_DOWN:
149                 // ISO感度を選択
150                 changeIsoSensitivityDown();
151                 break;
152             case ICameraFeatureDispatcher.FEATURE_ISO_UP:
153                 // ISO感度を選択
154                 changeIsoSensitivityUp();
155                 break;
156             case ICameraFeatureDispatcher.FEATURE_WB_DOWN:
157                 // ホワイトバランスを選択
158                 changeWhiteBalanceDown();
159                 break;
160             case ICameraFeatureDispatcher.FEATURE_WB_UP:
161                 // ホワイトバランスを選択
162                 changeWhiteBalanceUp();
163                 break;
164             case ICameraFeatureDispatcher.FEATURE_QUALITY_MOVIE_DOWN:
165                 // 動画撮影クオリティを選択
166                 changeMovieQualityModeDown();
167                 break;
168             case ICameraFeatureDispatcher.FEATURE_QUALITY_MOVIE_UP:
169                 // 動画撮影クオリティを選択
170                 changeMovieQualityModeUp();
171                 break;
172             case ICameraFeatureDispatcher.FEATURE_SHORT_MOVIE_RECORD_TIME_DOWN:
173                 // ショートムービー時の撮影時間を選択
174                 changeShortMovieRecordLengthDown();
175                 break;
176             case ICameraFeatureDispatcher.FEATURE_SHORT_MOVIE_RECORD_TIME_UP:
177                 // ショートムービー時の撮影時間を選択
178                 changeShortMovieRecordLengthUp();
179                 break;
180             case ICameraFeatureDispatcher.FEATURE_EXPOSE_MOVIE_SELECT_DOWN:
181                 // 動画の撮影モードを選択
182                 changeMovieTakeModeDown();
183                 break;
184             case ICameraFeatureDispatcher.FEATURE_EXPOSE_MOVIE_SELECT_UP:
185                 // 動画の撮影モードを選択
186                 changeMovieTakeModeUp();
187                 break;
188             case FEATURE_CHANGE_AF_MF:
189                 // AF/MFの切り替えを行う
190                 toggleAfMf();
191                 break;
192             case FEATURE_CHANGE_AE:
193                 // AE(測光方式)を選択
194                 changeAEMode(1);
195                 break;
196             case FEATURE_CHANGE_AE_REVERSE:
197                 // AE(測光方式)を選択
198                 changeAEMode(-1);
199                 break;
200
201             case FEATURE_SHOT_INTERVAL_3SEC:
202                 // 3秒待ってから1枚撮影する
203                 intervalOneShot(3);
204                 break;
205
206             case FEATURE_SHOT_INTERVAL_5SEC:
207                 // 5秒待ってから1枚撮影する
208                 intervalOneShot(5);
209                 break;
210
211             case FEATURE_SHOT_INTERVAL_10SEC:
212                 // 10秒待ってから1枚撮影する
213                 intervalOneShot(10);
214                 break;
215             case FEATURE_SHOT_BRACKET_EXPOSURE:
216                 // 露出ブラケット撮影を行う (5枚)
217                 bracketingShot(IBracketingShotStyle.BRACKET_EXPREV, 5);
218                 break;
219
220             case FEATURE_SHOT_BRACKET_APERATURE:
221                 // 絞りブラケット撮影を行う
222                 bracketingShot(IBracketingShotStyle.BRACKET_APERTURE, 5);
223                 break;
224
225             case FEATURE_SHOT_BRACKET_SHUTTER:
226                 // シャッターブラケット撮影を行う
227                 bracketingShot(IBracketingShotStyle.BRACKET_SHUTTER, 5);
228                 break;
229
230             case FEATURE_SHOT_BRACKET_COLORTONE:
231                 // カラートーンブラケット撮影を行う
232                 bracketingShot(IBracketingShotStyle.BRACKET_COLOR_TONE, 11);
233                 break;
234
235             case FEATURE_SHOT_BRACKET_WB:
236                 // ホワイトバランスブラケット撮影を行う
237                 bracketingShot(IBracketingShotStyle.BRACKET_WB, 7);
238                 break;
239
240             case FEATURE_SHOT_BRACKET_ART_FILTER:
241                 // アートフィルターブラケット撮影を行う
242                 bracketingShot(IBracketingShotStyle.BRACKET_ART_FILTER, 5);
243                 break;
244
245             case FEATURE_SHOT_BRACKET_ISO:
246                 // ブラケット撮影を行う
247                 bracketingShot(IBracketingShotStyle.BRACKET_ISO, 3);
248                 break;
249
250             case FEATURE_SHOW_FAVORITE_DIALOG:
251                 // お気に入りのダイアログ表示を行う
252                 showFavoriteDialog();
253                 break;
254
255             case FEATURE_LENS_ZOOMIN:
256                 // ズームイン(パワーズームレンズ装着時)
257                 if (!driveZoomLens(1))
258                 {
259                     duration =IShowInformation.VIBRATE_PATTERN_NONE;
260                 }
261                 break;
262
263             case FEATURE_LENS_ZOOMOUT:
264                 // ズームアウト(パワーズームレンズ装着時)
265                 if (!driveZoomLens(-1))
266                 {
267                     duration =IShowInformation.VIBRATE_PATTERN_NONE;
268                 }
269                 break;
270
271             case FEATURE_LENS_ZOOMIN_2X:
272                 // ズームイン(パワーズームレンズ装着時)
273                 if (!driveZoomLens(2))
274                 {
275                     duration =IShowInformation.VIBRATE_PATTERN_NONE;
276                 }
277                 break;
278
279             case FEATURE_LENS_ZOOMOUT_2X:
280                 // ズームアウト(パワーズームレンズ装着時)
281                 if (!driveZoomLens(-2))
282                 {
283                     duration =IShowInformation.VIBRATE_PATTERN_NONE;
284                 }
285                 break;
286
287             case FEATURE_DIGITAL_ZOOM_RESET:
288                 // デジタルズームのリセット
289                 resetDigitalZoom();
290                 break;
291
292             case FEATURE_DIGITAL_ZOOM_CHANGE:
293                 // デジタルズームの設定 (繰り返し)
294                 if (!driveDigitalZoom(0))
295                 {
296                     duration =IShowInformation.VIBRATE_PATTERN_NONE;
297                 }
298                 break;
299             case FEATURE_DIGITAL_ZOOMIN:
300                 // デジタルズーム ズームイン
301                 if (!driveDigitalZoom(1))
302                 {
303                     duration =IShowInformation.VIBRATE_PATTERN_NONE;
304                 }
305                 break;
306
307             case FEATURE_DIGITAL_ZOOMOUT:
308                 // デジタルズーム ズームアウト
309                 if (!driveDigitalZoom(-1))
310                 {
311                     duration =IShowInformation.VIBRATE_PATTERN_NONE;
312                 }
313                 break;
314
315             case FEATURE_CHANGE_LIVEVIEW_MAGNIFY_X5:
316                 // ライブビュー拡大(5倍)
317                 if (!changeLiveViewMagnify(5))
318                 {
319                     duration =IShowInformation.VIBRATE_PATTERN_NONE;
320                 }
321                 break;
322
323             case FEATURE_CHANGE_LIVEVIEW_MAGNIFY_X7:
324                 // ライブビュー拡大(7倍)
325                 if (!changeLiveViewMagnify(7))
326                 {
327                     duration =IShowInformation.VIBRATE_PATTERN_NONE;
328                 }
329                 break;
330
331             case FEATURE_CHANGE_LIVEVIEW_MAGNIFY_X10:
332                 // ライブビュー拡大(10倍)
333                 if (!changeLiveViewMagnify(10))
334                 {
335                     duration =IShowInformation.VIBRATE_PATTERN_NONE;
336                 }
337                 break;
338
339             case FEATURE_CHANGE_LIVEVIEW_MAGNIFY_X14:
340                 // ライブビュー拡大(14倍)
341                 if (!changeLiveViewMagnify(14))
342                 {
343                     duration =IShowInformation.VIBRATE_PATTERN_NONE;
344                 }
345                 break;
346
347             default:
348                 // 上記以外...なにもしない
349                 duration =IShowInformation.VIBRATE_PATTERN_NONE;
350                 break;
351         }
352
353         // コマンド実行完了後、ぶるぶるさせる
354         statusDrawer.vibrate(duration);
355         return (true);
356     }
357
358     @Override
359     public boolean dispatchAreaAction(MotionEvent event, int areaFeatureNumber)
360     {
361         boolean ret = false;
362         switch (areaFeatureNumber)
363         {
364             case ICameraFeatureDispatcher.FEATURE_AREA_ACTION_DRIVE_AUTOFOCUS:
365                 ret = camera.driveAutoFocus(event);
366                 break;
367
368             case ICameraFeatureDispatcher.FEATURE_AREA_ACTION_NOT_CONNECTED:
369                 /*
370                 try
371                 {
372                     // 実験... WIFIステート設定画面を開く
373                     //Intent intent = new Intent(ACTION_ADD_NETWORK_SETTINGS);
374                     Intent intent = new Intent(ACTION_NETWORK_SETTINGS);
375                     context.startActivity(intent);
376                 }
377                 catch (Exception e)
378                 {
379                     e.printStackTrace();
380                 }
381                 */
382                 break;
383
384             case ICameraFeatureDispatcher.FEATURE_AREA_ACTION_CHECK_CONTAINS_AUTOFOCUS_AREA:
385                 // AUTOFOCUS エリアに含まれているかどうかチェックする
386                 ret = camera.isContainsAutoFocusPoint(event);
387                 break;
388
389             case FEATURE_AREA_ACTION_NONE:
390             default:
391                 // 何もしない
392                 ret = false;
393                 break;
394         }
395         return (ret);
396     }
397
398     /**
399      *   撮影モードの取得
400      *
401      */
402     @Override
403     public String getTakeMode()
404     {
405         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
406         return (propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE)));
407     }
408
409     /**
410      *   撮影モードの変更指示
411      *   (P > A > S > M > ART > movie > iAuto > ...)
412      */
413     private void changeTakeMode()
414     {
415         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
416         String propetyValue = propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE));
417         if (propetyValue == null)
418         {
419             // データ取得失敗
420             return;
421         }
422         String targetMode = "<" + IOlyCameraProperty.TAKE_MODE;  // 変更先モード
423         switch (propetyValue)
424         {
425             case "P":
426                 targetMode = targetMode + "/A>";
427                 break;
428
429             case "A":
430                 targetMode =  targetMode + "/S>";
431                 break;
432
433             case "S":
434                 targetMode =  targetMode + "/M>";
435                 break;
436
437             case "M":
438                 targetMode =  targetMode + "/ART>";
439                 break;
440
441             case "ART":
442                 targetMode =  targetMode + "/movie>";
443                 break;
444
445             case "Movie":
446                 targetMode =  targetMode + "/iAuto>";
447                 break;
448
449             case "iAuto":
450             default:
451                 targetMode =  targetMode + "/P>";
452                 break;
453         }
454         Log.v(TAG, "changeTakeMode() " + targetMode);
455         propertyProxy.setCameraPropertyValue(IOlyCameraProperty.TAKE_MODE, targetMode);
456         camera.unlockAutoFocus();
457
458         //  撮影モードの更新
459         //camera.updateTakeMode();
460     }
461
462     /**
463      *   撮影モードの変更指示
464      *   (iAuto < P < A < S < M < ART < movie < iAuto < ...)
465      */
466     private void changeTakeModeReverse()
467     {
468         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
469         String propetyValue = propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE));
470         if (propetyValue == null)
471         {
472             // データ取得失敗
473             return;
474         }
475         String targetMode = "<" + IOlyCameraProperty.TAKE_MODE;  // 変更先モード
476         switch (propetyValue)
477         {
478             case "P":
479                 targetMode = targetMode + "/iAuto>";
480                 break;
481
482             case "A":
483                 targetMode =  targetMode + "/P>";
484                 break;
485
486             case "S":
487                 targetMode =  targetMode + "/A>";
488                 break;
489
490             case "M":
491                 targetMode =  targetMode + "/S>";
492                 break;
493
494             case "ART":
495                 targetMode =  targetMode + "/M>";
496                 break;
497             case "Movie":
498                 targetMode =  targetMode + "/ART>";
499                 break;
500             case "iAuto":
501             default:
502                 targetMode =  targetMode + "/movie>";
503                 break;
504         }
505         Log.v(TAG, "changeTakeMode() " + targetMode);
506         propertyProxy.setCameraPropertyValue(IOlyCameraProperty.TAKE_MODE, targetMode);
507         camera.unlockAutoFocus();
508
509         //  撮影モードの更新
510         //camera.updateTakeMode();
511     }
512
513     /**
514      *   シャッターボタンが押された!
515      *   (現在は、連続撮影モードについてはまだ非対応)
516      */
517     private void pushShutterButton()
518     {
519         // カメラ側のシャッターを押す
520         camera.singleShot();
521     }
522
523     /**
524      *   動画の撮影・停止を行う
525      *
526      */
527     private void movieControl()
528     {
529         camera.movieControl();
530     }
531
532     /**
533      *   AF/MFの切り替えを行う
534      */
535     private void toggleAfMf()
536     {
537         camera.toggleManualFocus();
538     }
539
540     /**
541      *   グリッド表示の ON/OFFを切り替える
542      *
543      */
544     private void changeShowGrid(int objectId)
545     {
546         liveImageView.toggleShowGridFrame();
547         updateGridStatusButton(objectId);
548     }
549
550     /**
551      *  デジタル水準器の ON/OFFを切り替える
552      *
553      */
554     private void changeShowLevelGauge()
555     {
556         liveImageView.toggleShowLevelGauge();
557     }
558
559     /**
560      *   AE-Lock/Lock解除を行う
561      *
562      */
563     private void changeAeLockMode()
564     {
565         camera.toggleAutoExposure();
566     }
567
568     /**
569      *  グリッドフレームの表示・非表示ボタンを更新する
570      *
571      */
572     private void updateGridStatusButton(int buttonId)
573     {
574         int btnResId;
575         if (liveImageView.isShowGrid())
576         {
577             // グリッドがON状態、グリッドをOFFにするボタンを出す
578             btnResId = R.drawable.btn_ic_grid_off;
579         }
580         else
581         {
582             //  グリッドがOFF状態、グリッドをONにするボタンを出す
583             btnResId = R.drawable.btn_ic_grid_on;
584         }
585         statusDrawer.setButtonDrawable(buttonId, btnResId);
586     }
587
588     /**
589      *   露出補正を1段階下げる
590      */
591     private void changeExposureBiasValueDown()
592     {
593         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
594         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.EXPOSURE_COMPENSATION);
595     }
596
597     /**
598      *   露出補正を1段階あげる
599      *
600      */
601     private void changeExposureBiasValueUp()
602     {
603         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
604         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.EXPOSURE_COMPENSATION);
605     }
606
607     /**
608      *   絞り値を1段階下げる
609      */
610     private void changeApertureValueDown()
611     {
612         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
613         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.APERTURE);
614     }
615
616     /**
617      *   絞り値を1段階あげる
618      *
619      */
620     private void changeApertureValueUp()
621     {
622         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
623         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.APERTURE);
624     }
625
626     /**
627      *   シャッター速度を1段階下げる
628      */
629     private void changeShutterSpeedDown()
630     {
631         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
632         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.SHUTTER_SPEED);
633     }
634
635     /**
636      *   シャッター速度を1段階あげる
637      *
638      */
639     private void changeShutterSpeedUp()
640     {
641         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
642         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.SHUTTER_SPEED);
643     }
644
645
646     /**
647      *   仕上がり・ピクチャーモードを1段階下げる
648      */
649     private void changeColorToneDown()
650     {
651         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
652         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.COLOR_TONE);
653     }
654
655     /**
656      *   仕上がり・ピクチャーモードを1段階あげる
657      *
658      */
659     private void changeColorToneUp()
660     {
661         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
662         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.COLOR_TONE);
663     }
664
665     /**
666      *   アートフィルターを1段階さげる
667      *
668      */
669     private void changeArtFilterDown()
670     {
671         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
672         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.ART_FILTER);
673     }
674
675     /**
676      *   アートフィルターを1段階あげる
677      *
678      */
679     private void changeArtFilterUp()
680     {
681         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
682         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.ART_FILTER);
683     }
684
685
686     /**
687      *   測光方式を1段階さげる
688      *
689      */
690     private void changeAEModeDown()
691     {
692         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
693         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.AE_MODE);
694     }
695
696     /**
697      *   測光方式を1段階あげる
698      *
699      */
700     private void changeAEModeUp()
701     {
702         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
703         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.AE_MODE);
704     }
705
706     /**
707      *   測光方式を更新する
708      *
709      */
710     private void changeAEMode(int direction)
711     {
712         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
713         propertyProxy.changeCameraProperty(IOlyCameraProperty.AE_MODE, direction);
714     }
715
716     /**
717      *   ISO感度を1段階さげる
718      *
719      */
720     private void changeIsoSensitivityDown()
721     {
722         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
723         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.ISO_SENSITIVITY);
724     }
725
726     /**
727      *   ISO感度を1段階あげる
728      *
729      */
730     private void changeIsoSensitivityUp()
731     {
732         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
733         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.ISO_SENSITIVITY);
734     }
735
736
737     /**
738      *   ホワイトバランスを1段階さげる
739      *
740      */
741     private void changeWhiteBalanceDown()
742     {
743         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
744         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.WB_MODE);
745     }
746
747     /**
748      *   ホワイトバランスを1段階あげる
749      *
750      */
751     private void changeWhiteBalanceUp()
752     {
753         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
754         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.WB_MODE);
755     }
756
757     /**
758      *   動画撮影モードを1段階さげる
759      *
760      */
761     private void changeMovieQualityModeDown()
762     {
763         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
764         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.QUALITY_MOVIE);
765     }
766
767     /**
768      *    動画撮影モードを1段階あげる
769      *
770      */
771     private void changeMovieQualityModeUp()
772     {
773         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
774         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.QUALITY_MOVIE);
775     }
776
777
778     /**
779      *   動画撮影モードがショートムービーのときの撮影時間を1段階さげる
780      *
781      */
782     private void changeShortMovieRecordLengthDown()
783     {
784         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
785         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.SHORT_MOVIE_RECORD_TIME);
786     }
787
788     /**
789      *    動画撮影モードがショートムービーのときの撮影時間を1段階あげる
790      *
791      */
792     private void changeShortMovieRecordLengthUp()
793     {
794         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
795         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.SHORT_MOVIE_RECORD_TIME);
796     }
797
798
799     /**
800      *   動画撮影モードを1段階さげる
801      *
802      */
803     private void changeMovieTakeModeDown()
804     {
805         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
806         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.TAKE_MODE_MOVIE);
807     }
808
809     /**
810      *    動画撮影モードを1段階あげる
811      *
812      */
813     private void changeMovieTakeModeUp()
814     {
815         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
816         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.TAKE_MODE_MOVIE);
817     }
818
819     /**
820      *   インターバル撮影(1枚)を行う
821      *
822      * @param waitSeconds  撮影待ち時間(単位:秒)
823      */
824     private void intervalOneShot(int waitSeconds)
825     {
826         camera.bracketingShot(IBracketingShotStyle.BRACKET_NONE, 1, waitSeconds);
827     }
828
829     /**
830      *   ブラケット撮影を行う
831      *
832      * @param style  撮影スタイル
833      * @param count  撮影枚数
834      */
835     private void bracketingShot(int style, int count)
836     {
837         camera.bracketingShot(style, count, 0);
838     }
839
840
841     /**
842      *   「お気に入り設定」表示画面を開く
843      *
844      */
845     private void showFavoriteDialog()
846     {
847         // お気に入り設定表示画面を開く
848         statusDrawer.showFavoriteSettingsDialog();
849     }
850
851     /**
852      *    ズームイン・ズームアウト操作を行う
853      *
854      * @param direction ズーム操作の方向
855      *
856      */
857     private boolean driveZoomLens(int direction)
858     {
859         boolean isExecute = false;
860         IZoomLensHolder zoom = camera.getZoomLensHolder();
861         if (zoom != null)
862         {
863             zoom.updateStatus();
864             if (zoom.canZoom())
865             {
866                 // ズーム操作を行う
867                 try
868                 {
869                     zoom.driveZoomLens(direction);
870                     isExecute = true;
871                 }
872                 catch (Exception e)
873                 {
874                     e.printStackTrace();
875                 }
876             }
877         }
878         return (isExecute);
879     }
880
881     private void resetDigitalZoom()
882     {
883         IZoomLensHolder zoom = camera.getZoomLensHolder();
884         if (zoom != null)
885         {
886             zoom.updateStatus();
887             zoom.changeDigitalZoomScale(1.0f, false);
888         }
889     }
890
891     private boolean driveDigitalZoom(int zoomType)
892     {
893         boolean isExecute = false;
894         IZoomLensHolder zoom = camera.getZoomLensHolder();
895         if (zoom != null)
896         {
897             zoom.updateStatus();
898
899             float magnify = zoomType;
900             if (zoomType == 0)
901             {
902                 magnify = 1.0f;
903             }
904
905             float currentScale = zoom.getCurrentDigitalZoomScale();
906             float targetScale = currentScale + magnify * 0.5f;
907             zoom.changeDigitalZoomScale(targetScale, (zoomType == 0));
908             isExecute = true;
909         }
910         return (isExecute);
911     }
912
913
914     /**
915      *   ライブビューのサイズを指定した倍率に拡大する(拡大中の場合にはもとに戻す。)
916      *
917      * @param scale  拡大倍率
918      * @return  実行した場合true, 実行しなかった場合はfalse
919      */
920     private boolean changeLiveViewMagnify(int scale)
921     {
922         boolean isExecute = false;
923         IZoomLensHolder zoom = camera.getZoomLensHolder();
924         if (zoom != null)
925         {
926             isExecute = zoom.magnifyLiveView(scale);
927         }
928         return (isExecute);
929     }
930
931     /**
932      *   設定画面を開く
933      *
934      */
935     private void showSettingsScreen()
936     {
937         try
938         {
939             Log.v(TAG, " --- showSettingsScreen() ---");
940             ConfirmationDialog confirmation = new ConfirmationDialog(activity);
941             confirmation.show(R.string.change_title_from_opc_to_theta, R.string.change_message_from_opc_to_theta, new ConfirmationDialog.Callback() {
942                 @Override
943                 public void confirm() {
944                     Log.v(TAG, " --- CONFIRMED! --- ");
945                 }
946             });
947         }
948         catch (Exception e)
949         {
950             e.printStackTrace();
951         }
952     }
953 }