OSDN Git Service

274aa31c70b2bb593b2f0af3f830d126241675f0
[gokigen/A01c.git] / wear / src / main / java / jp / sfjp / gokigen / a01c / liveview / OlyCameraLiveViewOnTouchListener.java
1 package jp.sfjp.gokigen.a01c.liveview;
2
3
4 import android.content.Context;
5 import android.content.SharedPreferences;
6 import android.support.v7.preference.PreferenceManager;
7 import android.util.Log;
8 import android.view.MotionEvent;
9 import android.view.View;
10 import android.widget.Toast;
11
12 import java.util.List;
13
14 import jp.sfjp.gokigen.a01c.IShowInformation;
15 import jp.sfjp.gokigen.a01c.R;
16 import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraCoordinator;
17 import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraProperty;
18 import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraPropertyProvider;
19
20 import static jp.sfjp.gokigen.a01c.liveview.ICameraFeatureDispatcher.ACTION_SECOND_CHOICE;
21
22
23 /**
24  *
25  *
26  */
27 public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener, View.OnTouchListener, View.OnLongClickListener
28 {
29     private final String TAG = toString();
30     private final Context context;
31     private IOlyCameraCoordinator camera = null;
32     private IShowInformation statusDrawer = null;
33     private ILiveImageStatusNotify liveImageView = null;
34     private final SharedPreferences preferences;
35
36     private boolean prohibitOperation = true;
37
38     /**
39      *
40      */
41     public OlyCameraLiveViewOnTouchListener(Context context)
42     {
43         this.context = context;
44         preferences = PreferenceManager.getDefaultSharedPreferences(context);
45     }
46
47     /**
48      *
49      */
50     public void prepareInterfaces(IOlyCameraCoordinator cameraCoordinator, IShowInformation statusDrawer, ILiveImageStatusNotify liveImageView)
51     {
52         this.camera = cameraCoordinator;
53         this.statusDrawer = statusDrawer;
54         this.liveImageView = liveImageView;
55     }
56
57     /**
58      *   ボタン(オブジェクト)をクリックしたときの処理
59      *
60      */
61     @Override
62     public void onClick(View v)
63     {
64         int id = v.getId();
65         Log.v(TAG, "onClick() : " + id);
66         if (prohibitOperation)
67         {
68             // 操作禁止の指示がされていた場合は何もしない
69             Log.v(TAG, "onClick() : prohibit operation");
70             return;
71         }
72         switch (id)
73         {
74             case R.id.btn_1:
75                 pushedButton1(false);
76                 break;
77             case R.id.btn_2:
78                 pushedButton2(false);
79                 break;
80             case R.id.btn_3:
81                 pushedButton3(false);
82                 break;
83             case R.id.btn_4:
84                 pushedButton4(false);
85                 break;
86             case R.id.btn_5:
87                 pushedButton5(false);
88                 break;
89             case R.id.btn_6:
90                 pushedButton6(false);
91                 break;
92             case R.id.text_1:
93                 pushedArea1(false);
94                 break;
95             case R.id.text_2:
96                 pushedArea2(false);
97                 break;
98             case R.id.text_3:
99                 pushedArea3(false);
100                 break;
101             case R.id.text_4:
102                 pushedArea4(false);
103                 break;
104             default:
105                 // その他...何もしない
106                 break;
107         }
108     }
109
110     /**
111      *   長押しされたとき...
112      *
113      *
114      */
115     @Override
116     public boolean onLongClick(View v)
117     {
118         boolean ret = false;
119         int id = v.getId();
120         Log.v(TAG, "onLongClick() : " + id);
121         if (prohibitOperation)
122         {
123             // 操作禁止の指示がされていた場合は何もしない
124             Log.v(TAG, "onClick() : prohibit operation");
125             return (false);
126         }
127         switch (id)
128         {
129             case R.id.btn_1:
130                 ret = pushedButton1(true);
131                 break;
132             case R.id.btn_2:
133                 ret = pushedButton2(true);
134                 break;
135             case R.id.btn_3:
136                 ret = pushedButton3(true);
137                 break;
138             case R.id.btn_4:
139                 ret = pushedButton4(true);
140                 break;
141             case R.id.btn_5:
142                 ret = pushedButton5(true);
143                 break;
144             case R.id.btn_6:
145                 ret = pushedButton6(true);
146                 break;
147             case R.id.text_1:
148                 ret = pushedArea1(true);
149                 break;
150             case R.id.text_2:
151                 ret = pushedArea2(true);
152                 break;
153             case R.id.text_3:
154                 ret = pushedArea3(true);
155                 break;
156             case R.id.text_4:
157                 ret = pushedArea4(true);
158                 break;
159             default:
160                 // その他...何もしない
161                 break;
162         }
163         return (ret);
164     }
165
166     /**
167      *   画面(ライブビュー部分)をタッチした時の処理
168      *
169      */
170     @Override
171     public boolean onTouch(View v, MotionEvent event)
172     {
173         int id = v.getId();
174         Log.v(TAG, "onTouch() : " + id);
175         if (prohibitOperation)
176         {
177             // 操作禁止の指示がされていた場合は何もしない
178             Log.v(TAG, "onTouch() : prohibit operation");
179
180             // 実験... WIFIステート
181             //Intent intent = new Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS");
182             //context.startActivity(intent);
183             return (false);
184         }
185         return ((id == R.id.liveview)&&(touchedLiveViewArea(event)));
186     }
187
188     /**
189      *   操作の可否を設定する。
190      *
191      *    @param operation  true: 操作可能, false: 操作不可
192      *
193      */
194     public void setEnableOperation(boolean operation)
195     {
196         prohibitOperation = !operation;
197     }
198
199
200     /***************************************************************
201      *   以下、ボタンが押された時の処理... あとで切り離す。
202      *   (撮影モードごとに処理を変えたい)
203      ***************************************************************/
204
205     private boolean touchedLiveViewArea(MotionEvent event)
206     {
207         return (camera.driveAutoFocus(event));
208     }
209
210     /**
211      *   ボタン1が押された時の機能を引き当て実行する
212      *
213      */
214     private boolean pushedButton1(boolean isLongClick)
215     {
216         int defaultAction = ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_GRID;
217         String preference_action_id = ICameraFeatureDispatcher.ACTION_BUTTON1;
218         if (isLongClick)
219         {
220             preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
221             defaultAction = ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_LEVEL_GAUGE;
222         }
223         String takeMode = getTakeMode();
224         switch (takeMode)
225         {
226             case "P":
227                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_P;
228                 break;
229
230             case "A":
231                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_A;
232                 break;
233
234             case "S":
235                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_S;
236                 break;
237
238             case "M":
239                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_M;
240                 break;
241
242             case "ART":
243                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_ART;
244                 break;
245
246             case "iAuto":
247                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_IAUTO;
248                 break;
249
250             case "movie":
251                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_MOVIE;
252                 break;
253
254             default:
255                 break;
256         }
257         return (dispatchAction(IShowInformation.BUTTON_1, preferences.getInt(preference_action_id, defaultAction)));
258     }
259
260
261     /**
262      *   ボタン2が押された時の機能を引き当て実行する
263      *
264      */
265     private boolean pushedButton2(boolean isLongClick)
266     {
267         int defaultAction = ICameraFeatureDispatcher.FEATURE_ACTION_NONE;
268         String preference_action_id = ICameraFeatureDispatcher.ACTION_BUTTON2;
269         if (isLongClick)
270         {
271             preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
272         }
273         String takeMode = getTakeMode();
274         switch (takeMode)
275         {
276             case "P":
277                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_P;
278                 defaultAction = (isLongClick) ? ICameraFeatureDispatcher.FEATURE_COLORTONE_DOWN : ICameraFeatureDispatcher.FEATURE_COLORTONE_DOWN;
279                 break;
280
281             case "A":
282                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_A;
283                 defaultAction = (isLongClick) ? ICameraFeatureDispatcher.FEATURE_APERTURE_DOWN : ICameraFeatureDispatcher.FEATURE_APERTURE_DOWN;
284                 break;
285
286             case "S":
287                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_S;
288                 defaultAction = (isLongClick) ?  ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_DOWN : ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_DOWN;
289                 break;
290
291             case "M":
292                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_M;
293                 defaultAction = (isLongClick) ?  ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_DOWN : ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_DOWN;
294                 break;
295
296             case "ART":
297                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_ART;
298                 defaultAction = (isLongClick) ?  ICameraFeatureDispatcher.FEATURE_ART_FILTER_DOWN : ICameraFeatureDispatcher.FEATURE_ART_FILTER_DOWN;
299                 break;
300
301             case "iAuto":
302                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_IAUTO;
303                 break;
304
305             case "movie":
306                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_MOVIE;
307                 break;
308
309             default:
310                 break;
311         }
312         return (dispatchAction(IShowInformation.BUTTON_2, preferences.getInt(preference_action_id, defaultAction)));
313     }
314
315     /**
316      *   ボタン3が押された時の機能を引き当て実行する
317      *
318      */
319     private boolean pushedButton3(boolean isLongClick)
320     {
321         int defaultAction = ICameraFeatureDispatcher.FEATURE_ACTION_NONE;
322         String preference_action_id = ICameraFeatureDispatcher.ACTION_BUTTON3;
323         if (isLongClick)
324         {
325             preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
326         }
327         String takeMode = getTakeMode();
328         switch (takeMode)
329         {
330             case "P":
331                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_P;
332                 defaultAction = (isLongClick) ? ICameraFeatureDispatcher.FEATURE_COLORTONE_UP : ICameraFeatureDispatcher.FEATURE_COLORTONE_UP;
333                 break;
334
335             case "A":
336                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_A;
337                 defaultAction = (isLongClick) ? ICameraFeatureDispatcher.FEATURE_APERTURE_UP : ICameraFeatureDispatcher.FEATURE_APERTURE_UP;
338                 break;
339
340             case "S":
341                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_S;
342                 defaultAction = (isLongClick) ? ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_UP : ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_UP;
343                 break;
344
345             case "M":
346                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_M;
347                 defaultAction =  (isLongClick) ? ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_UP :  ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_UP;
348                 break;
349
350             case "ART":
351                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_ART;
352                 defaultAction =  (isLongClick) ? ICameraFeatureDispatcher.FEATURE_ART_FILTER_UP : ICameraFeatureDispatcher.FEATURE_ART_FILTER_UP;
353                 break;
354
355             case "iAuto":
356                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_IAUTO;
357                 break;
358
359             case "movie":
360                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_MOVIE;
361                 break;
362
363             default:
364                 break;
365         }
366         return (dispatchAction(IShowInformation.BUTTON_3, preferences.getInt(preference_action_id, defaultAction)));
367     }
368
369     /**
370      *   ボタン4が押された時の機能を引き当て実行する
371      *
372      */
373     private boolean pushedButton4(boolean isLongClick)
374     {
375         int defaultAction = ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN;
376         String preference_action_id = ICameraFeatureDispatcher.ACTION_BUTTON4;
377         if (isLongClick)
378         {
379             preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
380         }
381         String takeMode = getTakeMode();
382         switch (takeMode)
383         {
384             case "P":
385                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_P;
386                 defaultAction =  (isLongClick) ? ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN : ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN;
387                 break;
388
389             case "A":
390                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_A;
391                 defaultAction =  (isLongClick) ? ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN : ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN;
392                 break;
393
394             case "S":
395                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_S;
396                 defaultAction =  (isLongClick) ? ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN : ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN;
397                 break;
398
399             case "M":
400                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_M;
401                 defaultAction =  (isLongClick) ? ICameraFeatureDispatcher.FEATURE_APERTURE_DOWN : ICameraFeatureDispatcher.FEATURE_APERTURE_DOWN;
402                 break;
403
404             case "ART":
405                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_ART;
406                 defaultAction =  (isLongClick) ? ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN : ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN;
407                 break;
408
409             case "iAuto":
410                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_IAUTO;
411                 defaultAction = ICameraFeatureDispatcher.FEATURE_ACTION_NONE;
412                 break;
413
414             case "movie":
415                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_MOVIE;
416                 defaultAction =  (isLongClick) ? ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN : ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN;
417                 break;
418
419             default:
420                 break;
421         }
422         return (dispatchAction(IShowInformation.BUTTON_4, preferences.getInt(preference_action_id, defaultAction)));
423     }
424
425     /**
426      *   ボタン5が押された時の機能を引き当て実行する
427      *
428      */
429     private boolean pushedButton5(boolean isLongClick)
430     {
431         int defaultAction = ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP;
432         String preference_action_id = ICameraFeatureDispatcher.ACTION_BUTTON5;
433         if (isLongClick)
434         {
435             preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
436         }
437         String takeMode = getTakeMode();
438         switch (takeMode)
439         {
440             case "P":
441                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_P;
442                 defaultAction =  (isLongClick) ? ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP : ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP;
443                 break;
444
445             case "A":
446                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_A;
447                 defaultAction =  (isLongClick) ? ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP : ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP;
448                 break;
449
450             case "S":
451                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_S;
452                 defaultAction =  (isLongClick) ? ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP : ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP;
453                 break;
454
455             case "M":
456                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_M;
457                 defaultAction = (isLongClick) ? ICameraFeatureDispatcher.FEATURE_APERTURE_UP : ICameraFeatureDispatcher.FEATURE_APERTURE_UP;
458                 break;
459
460             case "ART":
461                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_ART;
462                 defaultAction =  (isLongClick) ? ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP : ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP;
463                 break;
464
465             case "iAuto":
466                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_IAUTO;
467                 defaultAction = ICameraFeatureDispatcher.FEATURE_ACTION_NONE;
468                 break;
469
470             case "movie":
471                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_MOVIE;
472                 defaultAction =  (isLongClick) ? ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP : ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP;
473                 break;
474
475             default:
476                 break;
477         }
478         return (dispatchAction(IShowInformation.BUTTON_5, preferences.getInt(preference_action_id, defaultAction)));
479     }
480
481     /**
482      *   ボタン6が押された時の機能を引き当て実行する
483      *
484      */
485     private boolean pushedButton6(boolean isLongClick)
486     {
487         int defaultAction = ICameraFeatureDispatcher.FEATURE_SHUTTER_SINGLESHOT;
488         String preference_action_id = ICameraFeatureDispatcher.ACTION_BUTTON6;
489         if (isLongClick)
490         {
491             preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
492         }
493         String takeMode = getTakeMode();
494         switch (takeMode)
495         {
496             case "P":
497                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_P;
498                 break;
499
500             case "A":
501                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_A;
502                 break;
503
504             case "S":
505                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_S;
506                 break;
507
508             case "M":
509                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_M;
510                 break;
511
512             case "ART":
513                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_ART;
514                 break;
515
516             case "iAuto":
517                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_IAUTO;
518                 break;
519
520             case "movie":
521                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_MOVIE;
522                 break;
523
524             default:
525                 break;
526         }
527         return (dispatchAction(IShowInformation.BUTTON_6, preferences.getInt(preference_action_id, defaultAction)));
528     }
529
530
531     /**
532      *   表示エリア1が押された時の機能を引き当て実行する
533      *
534      */
535     private boolean pushedArea1(boolean isLongClick)
536     {
537         int defaultAction = ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE;
538         String preference_action_id = ICameraFeatureDispatcher.ACTION_AREA1;
539         if (isLongClick)
540         {
541             preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
542             defaultAction = ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE_REVERSE;
543         }
544         String takeMode = getTakeMode();
545         switch (takeMode)
546         {
547             case "P":
548                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_P;
549                 break;
550
551             case "A":
552                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_A;
553                 break;
554
555             case "S":
556                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_S;
557                 break;
558
559             case "M":
560                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_M;
561                 break;
562
563             case "ART":
564                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_ART;
565                 break;
566
567             case "iAuto":
568                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_IAUTO;
569                 break;
570
571             case "movie":
572                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_MOVIE;
573                 break;
574
575             default:
576                 break;
577         }
578         return (dispatchAction(IShowInformation.AREA_1, preferences.getInt(preference_action_id, defaultAction)));
579     }
580
581     /**
582      *   表示エリア2が押された時の機能を引き当て実行する
583      *
584      */
585     private boolean pushedArea2(boolean isLongClick)
586     {
587         int defaultAction = ICameraFeatureDispatcher.FEATURE_ACTION_NONE;
588         String preference_action_id = ICameraFeatureDispatcher.ACTION_AREA2;
589         if (isLongClick)
590         {
591             preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
592         }
593         String takeMode = getTakeMode();
594         switch (takeMode)
595         {
596             case "P":
597                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_P;
598                 break;
599
600             case "A":
601                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_A;
602                 break;
603
604             case "S":
605                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_S;
606                 break;
607
608             case "M":
609                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_M;
610                 break;
611
612             case "ART":
613                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_ART;
614                 break;
615
616             case "iAuto":
617                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_IAUTO;
618                 break;
619
620             case "movie":
621                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_MOVIE;
622                 break;
623
624             default:
625                 break;
626         }
627         return (dispatchAction(IShowInformation.AREA_2, preferences.getInt(preference_action_id, defaultAction)));
628     }
629
630     /**
631      *   表示エリア3が押された時の機能を引き当て実行する
632      *
633      */
634     private boolean pushedArea3(boolean isLongClick)
635     {
636         int defaultAction = ICameraFeatureDispatcher.FEATURE_CHAGE_AE_LOCK_MODE;
637         String preference_action_id = ICameraFeatureDispatcher.ACTION_AREA3;
638         if (isLongClick)
639         {
640             preference_action_id = preference_action_id + ACTION_SECOND_CHOICE;
641         }
642         String takeMode = getTakeMode();
643         switch (takeMode)
644         {
645             case "P":
646                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_P;
647                 break;
648
649             case "A":
650                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_A;
651                 break;
652
653             case "S":
654                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_S;
655                 break;
656
657             case "M":
658                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_M;
659                 break;
660
661             case "ART":
662                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_ART;
663                 break;
664
665             case "iAuto":
666                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_IAUTO;
667                 break;
668
669             case "movie":
670                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_MOVIE;
671                 break;
672
673             default:
674                 break;
675         }
676         return (dispatchAction(IShowInformation.AREA_3, preferences.getInt(preference_action_id, defaultAction)));
677     }
678
679     /**
680      *   テキスト表示エリア4(機能は「設定画面を開く」で固定)
681      */
682     private boolean pushedArea4(boolean isLongClick)
683     {
684         if (isLongClick)
685         {
686             // 設定画面を開く
687             return (dispatchAction(IShowInformation.AREA_4, ICameraFeatureDispatcher.FEATURE_SETTINGS));
688         }
689
690         // 設定画面を開く
691         return (dispatchAction(IShowInformation.AREA_4, ICameraFeatureDispatcher.FEATURE_SETTINGS));
692     }
693
694     /***************************************************************
695      *   以下、具体的な機能の実行... ここから下は、あとで切り離す。
696      *
697      ***************************************************************/
698
699     private String getTakeMode()
700     {
701         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
702         return (propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE)));
703     }
704
705
706     /**
707      *   撮影モードの変更指示
708      *   (P > A > S > M > ART > iAuto > ...)
709      */
710     private void changeTakeMode()
711     {
712         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
713         String propetyValue = propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE));
714         if (propetyValue == null)
715         {
716             // データ取得失敗
717             return;
718         }
719         String targetMode = "<" + IOlyCameraProperty.TAKE_MODE;  // 変更先モード
720         switch (propetyValue)
721         {
722             case "P":
723                 targetMode = targetMode + "/A>";
724                 break;
725
726             case "A":
727                     targetMode =  targetMode + "/S>";
728                 break;
729
730             case "S":
731                 targetMode =  targetMode + "/M>";
732                 break;
733
734             case "M":
735                 targetMode =  targetMode + "/ART>";
736                 break;
737
738             case "ART":
739                 targetMode =  targetMode + "/iAuto>";
740                 break;
741
742             case "iAuto":
743             case "movie":
744             default:
745                 targetMode =  targetMode + "/P>";
746                 break;
747         }
748         Log.v(TAG, "changeTakeMode() " + targetMode);
749         propertyProxy.setCameraPropertyValue(IOlyCameraProperty.TAKE_MODE, targetMode);
750         camera.unlockAutoFocus();
751
752         //  撮影モードの更新
753         //camera.updateTakeMode();
754     }
755
756
757     /**
758      *   撮影モードの変更指示
759      *   (iAuto < P < A < S < M < ART < iAuto < ...)
760      */
761     private void changeTakeModeReverse()
762     {
763         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
764         String propetyValue = propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE));
765         if (propetyValue == null)
766         {
767             // データ取得失敗
768             return;
769         }
770         String targetMode = "<" + IOlyCameraProperty.TAKE_MODE;  // 変更先モード
771         switch (propetyValue)
772         {
773             case "P":
774                 targetMode = targetMode + "/iAuto>";
775                 break;
776
777             case "A":
778                 targetMode =  targetMode + "/P>";
779                 break;
780
781             case "S":
782                 targetMode =  targetMode + "/A>";
783                 break;
784
785             case "M":
786                 targetMode =  targetMode + "/S>";
787                 break;
788
789             case "ART":
790                 targetMode =  targetMode + "/M>";
791                 break;
792
793             case "iAuto":
794             case "movie":
795             default:
796                 targetMode =  targetMode + "/ART>";
797                 break;
798         }
799         Log.v(TAG, "changeTakeMode() " + targetMode);
800         propertyProxy.setCameraPropertyValue(IOlyCameraProperty.TAKE_MODE, targetMode);
801         camera.unlockAutoFocus();
802
803         //  撮影モードの更新
804         //camera.updateTakeMode();
805     }
806
807
808     /**
809      *   シャッターボタンが押された!
810      *   (現在は、連続撮影モードやムービー撮影についてはまだ非対応)
811      */
812     private void pushShutterButton()
813     {
814         // カメラ側のシャッターを押す
815         camera.singleShot();
816         {
817             // パラメータが ON (ONLY CAMERA)の時は、スマートフォン側の撮影は行わない。
818             // (本体カメラのシャッターを切らない時だけ、Toastで通知する。)
819             Toast.makeText(context, R.string.shoot_camera, Toast.LENGTH_SHORT).show();
820         }
821     }
822
823     /**
824      *   グリッド表示の ON/OFFを切り替える
825      *
826      */
827     private void changeShowGrid(int objectId)
828     {
829         liveImageView.toggleShowGridFrame();
830         updateGridStatusButton(objectId);
831     }
832
833
834     /**
835      *  デジタル水準器の ON/OFFを切り替える
836      *
837      */
838     private void changeShowLevelGauge()
839     {
840         liveImageView.toggleShowLevelGauge();
841     }
842
843     /**
844      *   AE-Lock/Lock解除を行う
845      *
846      */
847     private void changeAeLockMode()
848     {
849         camera.toggleAutoExposure();
850     }
851
852     /**
853      *  グリッドフレームの表示・非表示ボタンを更新する
854      *
855      */
856     private void updateGridStatusButton(int buttonId)
857     {
858         int btnResId;
859         if (liveImageView.isShowGrid())
860         {
861             // グリッドがON状態、グリッドをOFFにするボタンを出す
862             btnResId = R.drawable.btn_ic_grid_off;
863         }
864         else
865         {
866             //  グリッドがOFF状態、グリッドをONにするボタンを出す
867             btnResId = R.drawable.btn_ic_grid_on;
868         }
869         statusDrawer.setButtonDrawable(buttonId, btnResId);
870     }
871
872     /**
873      *   露出補正を1段階下げる
874      */
875     private void changeExposureBiasValueDown()
876     {
877         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
878         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.EXPOSURE_COMPENSATION);
879     }
880
881     /**
882      *   露出補正を1段階あげる
883      *
884      */
885     private void changeExposureBiasValueUp()
886     {
887         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
888         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.EXPOSURE_COMPENSATION);
889     }
890
891     /**
892      *   絞り値を1段階下げる
893      */
894     private void changeApertureValueDown()
895     {
896         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
897         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.APERTURE);
898     }
899
900     /**
901      *   絞り値を1段階あげる
902      *
903      */
904     private void changeApertureValueUp()
905     {
906         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
907         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.APERTURE);
908     }
909
910     /**
911      *   シャッター速度を1段階下げる
912      */
913     private void changeShutterSpeedDown()
914     {
915         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
916         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.SHUTTER_SPEED);
917     }
918
919     /**
920      *   シャッター速度を1段階あげる
921      *
922      */
923     private void changeShutterSpeedUp()
924     {
925         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
926         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.SHUTTER_SPEED);
927     }
928
929
930     /**
931      *   仕上がり・ピクチャーモードを1段階下げる
932      */
933     private void changeColorToneDown()
934     {
935         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
936         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.COLOR_TONE);
937     }
938
939     /**
940      *   仕上がり・ピクチャーモードを1段階あげる
941      *
942      */
943     private void changeColorToneUp()
944     {
945         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
946         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.COLOR_TONE);
947     }
948
949     /**
950      *   アートフィルターを1段階さげる
951      *
952      */
953     private void changeArtFilterDown()
954     {
955         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
956         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.ART_FILTER);
957     }
958
959     /**
960      *   アートフィルターを1段階あげる
961      *
962      */
963     private void changeArtFilterUp()
964     {
965         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
966         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.ART_FILTER);
967     }
968
969
970     /**
971      *   設定画面を開く
972      *
973      */
974     private void showSettingsScreen()
975     {
976         // TBD...
977     }
978
979     /**
980      *   指定した機能を実行する
981      *
982      * @param objectId     操作したオブジェクト
983      * @param featureNumber  操作する機能
984      */
985     private boolean dispatchAction(int objectId, int featureNumber)
986     {
987         if (featureNumber <= ICameraFeatureDispatcher.FEATURE_ACTION_NONE)
988         {
989             // 何もしない
990             return (false);
991         }
992
993         // 機能実行の割り当て...
994         int duration = IShowInformation.VIBRATE_PATTERN_SIMPLE_SHORT;
995         switch (featureNumber)
996         {
997             case ICameraFeatureDispatcher.FEATURE_SETTINGS:
998                 // 設定画面を開く
999                 showSettingsScreen();
1000                 duration =IShowInformation.VIBRATE_PATTERN_NONE;
1001                 break;
1002             case ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_GRID:
1003                 // グリッド標示ON/OFF
1004                 changeShowGrid(objectId);
1005                 break;
1006             case ICameraFeatureDispatcher.FEATURE_SHUTTER_SINGLESHOT:
1007                 // シャッター
1008                 pushShutterButton();
1009                 duration =IShowInformation.VIBRATE_PATTERN_SIMPLE_MIDDLE;
1010                 break;
1011             case ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE:
1012                 // 撮影モードの変更
1013                 changeTakeMode();
1014                 break;
1015             case ICameraFeatureDispatcher.FEATURE_CHAGE_AE_LOCK_MODE:
1016                 // AE LOCKのON/OFF切り替え
1017                 changeAeLockMode();
1018                 break;
1019             case ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN:
1020                 // 露出補正を1段階下げる
1021                 changeExposureBiasValueDown();
1022                 break;
1023             case ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP:
1024                 // 露出補正を1段階上げる
1025                 changeExposureBiasValueUp();
1026                 break;
1027             case ICameraFeatureDispatcher.FEATURE_APERTURE_DOWN:
1028                 // 絞り値を1段階下げる
1029                 changeApertureValueDown();
1030                 break;
1031             case ICameraFeatureDispatcher.FEATURE_APERTURE_UP:
1032                 // 絞り値を1段階上げる
1033                 changeApertureValueUp();
1034                 break;
1035             case ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_DOWN:
1036                 // シャッター速度を1段階下げる
1037                 changeShutterSpeedDown();
1038                 break;
1039             case ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_UP:
1040                 // シャッター速度を1段階上げる
1041                 changeShutterSpeedUp();
1042                 break;
1043             case ICameraFeatureDispatcher.FEATURE_COLORTONE_DOWN:
1044                 // 仕上がり・ピクチャーモードを選択
1045                 changeColorToneDown();
1046                 break;
1047             case ICameraFeatureDispatcher.FEATURE_COLORTONE_UP:
1048                 // 仕上がり・ピクチャーモードを選択
1049                 changeColorToneUp();
1050                 break;
1051             case ICameraFeatureDispatcher.FEATURE_ART_FILTER_DOWN:
1052                 // アートフィルターを選択
1053                 changeArtFilterDown();
1054                 break;
1055             case ICameraFeatureDispatcher.FEATURE_ART_FILTER_UP:
1056                 // アートフィルターを選択
1057                 changeArtFilterUp();
1058                 break;
1059             case ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_LEVEL_GAUGE:
1060                 // デジタル水準器の表示・非表示
1061                 changeShowLevelGauge();
1062                 break;
1063             case ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE_REVERSE:
1064                 // 撮影モードの変更(逆順)
1065                 changeTakeModeReverse();
1066                 break;
1067         }
1068
1069         // コマンド実行完了後、ぶるぶるさせる
1070         statusDrawer.vibrate(duration);
1071         return (true);
1072     }
1073 }