OSDN Git Service

3c3cc274afa6b39b1513b0b5cceb4089af5f2054
[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             // 撮影の表示をToastで行う (成功とか失敗とか言っていない)
818             Toast.makeText(context, R.string.shoot_camera, Toast.LENGTH_SHORT).show();
819         }
820     }
821
822     /**
823      *   グリッド表示の ON/OFFを切り替える
824      *
825      */
826     private void changeShowGrid(int objectId)
827     {
828         liveImageView.toggleShowGridFrame();
829         updateGridStatusButton(objectId);
830     }
831
832
833     /**
834      *  デジタル水準器の ON/OFFを切り替える
835      *
836      */
837     private void changeShowLevelGauge()
838     {
839         liveImageView.toggleShowLevelGauge();
840     }
841
842     /**
843      *   AE-Lock/Lock解除を行う
844      *
845      */
846     private void changeAeLockMode()
847     {
848         camera.toggleAutoExposure();
849     }
850
851     /**
852      *  グリッドフレームの表示・非表示ボタンを更新する
853      *
854      */
855     private void updateGridStatusButton(int buttonId)
856     {
857         int btnResId;
858         if (liveImageView.isShowGrid())
859         {
860             // グリッドがON状態、グリッドをOFFにするボタンを出す
861             btnResId = R.drawable.btn_ic_grid_off;
862         }
863         else
864         {
865             //  グリッドがOFF状態、グリッドをONにするボタンを出す
866             btnResId = R.drawable.btn_ic_grid_on;
867         }
868         statusDrawer.setButtonDrawable(buttonId, btnResId);
869     }
870
871     /**
872      *   露出補正を1段階下げる
873      */
874     private void changeExposureBiasValueDown()
875     {
876         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
877         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.EXPOSURE_COMPENSATION);
878     }
879
880     /**
881      *   露出補正を1段階あげる
882      *
883      */
884     private void changeExposureBiasValueUp()
885     {
886         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
887         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.EXPOSURE_COMPENSATION);
888     }
889
890     /**
891      *   絞り値を1段階下げる
892      */
893     private void changeApertureValueDown()
894     {
895         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
896         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.APERTURE);
897     }
898
899     /**
900      *   絞り値を1段階あげる
901      *
902      */
903     private void changeApertureValueUp()
904     {
905         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
906         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.APERTURE);
907     }
908
909     /**
910      *   シャッター速度を1段階下げる
911      */
912     private void changeShutterSpeedDown()
913     {
914         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
915         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.SHUTTER_SPEED);
916     }
917
918     /**
919      *   シャッター速度を1段階あげる
920      *
921      */
922     private void changeShutterSpeedUp()
923     {
924         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
925         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.SHUTTER_SPEED);
926     }
927
928
929     /**
930      *   仕上がり・ピクチャーモードを1段階下げる
931      */
932     private void changeColorToneDown()
933     {
934         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
935         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.COLOR_TONE);
936     }
937
938     /**
939      *   仕上がり・ピクチャーモードを1段階あげる
940      *
941      */
942     private void changeColorToneUp()
943     {
944         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
945         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.COLOR_TONE);
946     }
947
948     /**
949      *   アートフィルターを1段階さげる
950      *
951      */
952     private void changeArtFilterDown()
953     {
954         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
955         propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.ART_FILTER);
956     }
957
958     /**
959      *   アートフィルターを1段階あげる
960      *
961      */
962     private void changeArtFilterUp()
963     {
964         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
965         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.ART_FILTER);
966     }
967
968
969     /**
970      *   設定画面を開く
971      *
972      */
973     private void showSettingsScreen()
974     {
975         // TBD...
976     }
977
978     /**
979      *   指定した機能を実行する
980      *
981      * @param objectId     操作したオブジェクト
982      * @param featureNumber  操作する機能
983      */
984     private boolean dispatchAction(int objectId, int featureNumber)
985     {
986         if (featureNumber <= ICameraFeatureDispatcher.FEATURE_ACTION_NONE)
987         {
988             // 何もしない
989             return (false);
990         }
991
992         // 機能実行の割り当て...
993         int duration = IShowInformation.VIBRATE_PATTERN_SIMPLE_SHORT;
994         switch (featureNumber)
995         {
996             case ICameraFeatureDispatcher.FEATURE_SETTINGS:
997                 // 設定画面を開く
998                 showSettingsScreen();
999                 duration =IShowInformation.VIBRATE_PATTERN_NONE;
1000                 break;
1001             case ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_GRID:
1002                 // グリッド標示ON/OFF
1003                 changeShowGrid(objectId);
1004                 break;
1005             case ICameraFeatureDispatcher.FEATURE_SHUTTER_SINGLESHOT:
1006                 // シャッター
1007                 pushShutterButton();
1008                 //duration =IShowInformation.VIBRATE_PATTERN_NONE;
1009                 break;
1010             case ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE:
1011                 // 撮影モードの変更
1012                 changeTakeMode();
1013                 break;
1014             case ICameraFeatureDispatcher.FEATURE_CHAGE_AE_LOCK_MODE:
1015                 // AE LOCKのON/OFF切り替え
1016                 changeAeLockMode();
1017                 break;
1018             case ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN:
1019                 // 露出補正を1段階下げる
1020                 changeExposureBiasValueDown();
1021                 break;
1022             case ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP:
1023                 // 露出補正を1段階上げる
1024                 changeExposureBiasValueUp();
1025                 break;
1026             case ICameraFeatureDispatcher.FEATURE_APERTURE_DOWN:
1027                 // 絞り値を1段階下げる
1028                 changeApertureValueDown();
1029                 break;
1030             case ICameraFeatureDispatcher.FEATURE_APERTURE_UP:
1031                 // 絞り値を1段階上げる
1032                 changeApertureValueUp();
1033                 break;
1034             case ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_DOWN:
1035                 // シャッター速度を1段階下げる
1036                 changeShutterSpeedDown();
1037                 break;
1038             case ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_UP:
1039                 // シャッター速度を1段階上げる
1040                 changeShutterSpeedUp();
1041                 break;
1042             case ICameraFeatureDispatcher.FEATURE_COLORTONE_DOWN:
1043                 // 仕上がり・ピクチャーモードを選択
1044                 changeColorToneDown();
1045                 break;
1046             case ICameraFeatureDispatcher.FEATURE_COLORTONE_UP:
1047                 // 仕上がり・ピクチャーモードを選択
1048                 changeColorToneUp();
1049                 break;
1050             case ICameraFeatureDispatcher.FEATURE_ART_FILTER_DOWN:
1051                 // アートフィルターを選択
1052                 changeArtFilterDown();
1053                 break;
1054             case ICameraFeatureDispatcher.FEATURE_ART_FILTER_UP:
1055                 // アートフィルターを選択
1056                 changeArtFilterUp();
1057                 break;
1058             case ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_LEVEL_GAUGE:
1059                 // デジタル水準器の表示・非表示
1060                 changeShowLevelGauge();
1061                 break;
1062             case ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE_REVERSE:
1063                 // 撮影モードの変更(逆順)
1064                 changeTakeModeReverse();
1065                 break;
1066         }
1067
1068         // コマンド実行完了後、ぶるぶるさせる
1069         statusDrawer.vibrate(duration);
1070         return (true);
1071     }
1072 }