OSDN Git Service

モード表示など更新。
[gokigen/A01c.git] / app / 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 jp.sfjp.gokigen.a01c.IShowInformation;
13 import jp.sfjp.gokigen.a01c.R;
14 import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraCoordinator;
15 import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraProperty;
16 import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraPropertyProvider;
17
18
19 /**
20  *
21  *
22  */
23 public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener, View.OnTouchListener
24 {
25     private final String TAG = toString();
26     private final Context context;
27     private IOlyCameraCoordinator camera = null;
28     private IShowInformation statusDrawer = null;
29     private ILiveImageStatusNotify liveImageView = null;
30     private final SharedPreferences preferences;
31
32     private boolean prohibitOperation = true;
33
34     /**
35      *
36      */
37     public OlyCameraLiveViewOnTouchListener(Context context)
38     {
39         this.context = context;
40         preferences = PreferenceManager.getDefaultSharedPreferences(context);
41     }
42
43     /**
44      *
45      */
46     public void prepareInterfaces(IOlyCameraCoordinator cameraCoordinator, IShowInformation statusDrawer, ILiveImageStatusNotify liveImageView)
47     {
48         this.camera = cameraCoordinator;
49         this.statusDrawer = statusDrawer;
50         this.liveImageView = liveImageView;
51     }
52
53     /**
54      *   ボタン(オブジェクト)をクリックしたときの処理
55      *
56      */
57     @Override
58     public void onClick(View v)
59     {
60         int id = v.getId();
61         Log.v(TAG, "onClick() : " + id);
62         if (prohibitOperation)
63         {
64             // 操作禁止の指示がされていた場合は何もしない
65             Log.v(TAG, "onClick() : prohibit operation");
66             return;
67         }
68         switch (id)
69         {
70             case R.id.btn_1:
71                 pushedButton1();
72                 break;
73             case R.id.btn_2:
74                 pushedButton2();
75                 break;
76             case R.id.btn_3:
77                 pushedButton3();
78                 break;
79             case R.id.btn_4:
80                 pushedButton4();
81                 break;
82             case R.id.btn_5:
83                 pushedButton5();
84                 break;
85             case R.id.btn_6:
86                 pushedButton6();
87                 break;
88             case R.id.text_1:
89                 pushedArea1();
90                 break;
91             case R.id.text_2:
92                 pushedArea2();
93                 break;
94             case R.id.text_3:
95                 pushedArea3();
96                 break;
97             case R.id.text_4:
98                 pushedArea4();
99                 break;
100             default:
101                 // その他...何もしない
102                 break;
103         }
104     }
105
106     /**
107      *   画面(ライブビュー部分)をタッチした時の処理
108      *
109      */
110     @Override
111     public boolean onTouch(View v, MotionEvent event)
112     {
113         int id = v.getId();
114         Log.v(TAG, "onTouch() : " + id);
115         if (prohibitOperation)
116         {
117             // 操作禁止の指示がされていた場合は何もしない
118             Log.v(TAG, "onTouch() : prohibit operation");
119             return (false);
120         }
121         return ((id == R.id.liveview)&&(touchedLiveViewArea(event)));
122     }
123
124     /**
125      *   操作の可否を設定する。
126      *
127      *    @param operation  true: 操作可能, false: 操作不可
128      *
129      */
130     public void setEnableOperation(boolean operation)
131     {
132         prohibitOperation = !operation;
133     }
134
135
136     /***************************************************************
137      *   以下、ボタンが押された時の処理... あとで切り離す。
138      *   (撮影モードごとに処理を変えたい)
139      ***************************************************************/
140
141     private boolean touchedLiveViewArea(MotionEvent event)
142     {
143         return (camera.driveAutoFocus(event));
144     }
145
146
147     private void pushedButton1()
148     {
149         String takeMode = getTakeMode();
150         switch (takeMode)
151         {
152             case "P":
153                 //
154                 break;
155
156             case "A":
157                 //
158                 break;
159
160             case "S":
161                 //
162                 break;
163
164             case "M":
165                 //
166                 break;
167
168             case "ART":
169                 //
170                 break;
171
172             case "iAuto":
173             case "movie":
174             default:
175                 //
176                 break;
177         }
178         // グリッドの表示 / 非表示
179         changeShowGrid();
180     }
181
182
183     private void pushedButton2()
184     {
185         String takeMode = getTakeMode();
186         switch (takeMode)
187         {
188             case "P":
189                 //
190                 break;
191
192             case "A":
193                 //
194                 break;
195
196             case "S":
197                 //
198                 break;
199
200             case "M":
201                 //
202                 break;
203
204             case "ART":
205                 //
206                 break;
207
208             case "iAuto":
209             case "movie":
210             default:
211                 //
212                 break;
213         }
214     }
215
216
217
218     private void pushedButton3()
219     {
220         String takeMode = getTakeMode();
221         switch (takeMode)
222         {
223             case "P":
224                 //
225                 break;
226
227             case "A":
228                 //
229                 break;
230
231             case "S":
232                 //
233                 break;
234
235             case "M":
236                 //
237                 break;
238
239             case "ART":
240                 //
241                 break;
242
243             case "iAuto":
244             case "movie":
245             default:
246                 //
247                 break;
248         }
249     }
250
251
252     private void pushedButton4()
253     {
254         String takeMode = getTakeMode();
255         switch (takeMode)
256         {
257             case "P":
258                 //
259                 break;
260
261             case "A":
262                 //
263                 break;
264
265             case "S":
266                 //
267                 break;
268
269             case "M":
270                 //
271                 break;
272
273             case "ART":
274                 //
275                 break;
276
277             case "iAuto":
278             case "movie":
279             default:
280                 //
281                 break;
282         }
283     }
284
285
286     private void pushedButton5()
287     {
288         String takeMode = getTakeMode();
289         switch (takeMode)
290         {
291             case "P":
292                 //
293                 break;
294
295             case "A":
296                 //
297                 break;
298
299             case "S":
300                 //
301                 break;
302
303             case "M":
304                 //
305                 break;
306
307             case "ART":
308                 //
309                 break;
310
311             case "iAuto":
312             case "movie":
313             default:
314                 //
315                 break;
316         }
317     }
318
319
320     private void pushedButton6()
321     {
322         String takeMode = getTakeMode();
323         switch (takeMode)
324         {
325             case "P":
326                 //
327                 break;
328
329             case "A":
330                 //
331                 break;
332
333             case "S":
334                 //
335                 break;
336
337             case "M":
338                 //
339                 break;
340
341             case "ART":
342                 //
343                 break;
344
345             case "iAuto":
346             case "movie":
347             default:
348                 //
349                 break;
350         }
351         pushShutterButton();
352     }
353
354
355     private void pushedArea1()
356     {
357         // 撮影モードの変更
358         changeTakeMode();
359     }
360
361     private void pushedArea2()
362     {
363         String takeMode = getTakeMode();
364         switch (takeMode)
365         {
366             case "P":
367                 //
368                 break;
369
370             case "A":
371                 //
372                 break;
373
374             case "S":
375                 //
376                 break;
377
378             case "M":
379                 //
380                 break;
381
382             case "ART":
383                 //
384                 break;
385
386             case "iAuto":
387             case "movie":
388             default:
389                 //
390                 break;
391         }
392     }
393
394     private void pushedArea3()
395     {
396         String takeMode = getTakeMode();
397         switch (takeMode)
398         {
399             case "P":
400                 //
401                 break;
402
403             case "A":
404                 //
405                 break;
406
407             case "S":
408                 //
409                 break;
410
411             case "M":
412                 //
413                 break;
414
415             case "ART":
416                 //
417                 break;
418
419             case "iAuto":
420             case "movie":
421             default:
422                 //
423                 break;
424         }
425         changeAeLockMode();
426     }
427
428     /**
429      *   テキスト表示エリア(設定画面を開くで固定)
430      */
431     private void pushedArea4()
432     {
433         showSettingsScreen();
434     }
435
436     /***************************************************************
437      *   以下、具体的な機能の実行... あとで切り離す。
438      *
439      ***************************************************************/
440
441     private String getTakeMode()
442     {
443         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
444         return (propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE)));
445     }
446
447
448     /**
449      *   撮影モードの変更指示
450      *   (P > A > S > S > ART > iAuto > ...)
451      */
452     private void changeTakeMode()
453     {
454         IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
455         String propetyValue = propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE));
456         if (propetyValue == null)
457         {
458             // データ取得失敗
459             return;
460         }
461         String targetMode = "<" + IOlyCameraProperty.TAKE_MODE;  // 変更先モード
462         switch (propetyValue)
463         {
464             case "P":
465                 targetMode = targetMode + "/A>";
466                 break;
467
468             case "A":
469                     targetMode =  targetMode + "/S>";
470                 break;
471
472             case "S":
473                 targetMode =  targetMode + "/M>";
474                 break;
475
476             case "M":
477                 targetMode =  targetMode + "/ART>";
478                 break;
479
480             case "ART":
481                 targetMode =  targetMode + "/iAuto>";
482                 break;
483
484             case "iAuto":
485             case "movie":
486             default:
487                 targetMode =  targetMode + "/P>";
488                 break;
489         }
490         propertyProxy.setCameraPropertyValue(IOlyCameraProperty.TAKE_MODE, targetMode);
491         camera.unlockAutoFocus();
492
493         //  撮影モードの更新
494         camera.updateTakeMode();
495     }
496
497
498     /**
499      *   シャッターボタンが押された!
500      *   (現在は、連続撮影モードやムービー撮影についてはまだ非対応)
501      */
502     private void pushShutterButton()
503     {
504         // カメラ側のシャッターを押す
505         camera.singleShot();
506         {
507             // パラメータが ON (ONLY CAMERA)の時は、スマートフォン側の撮影は行わない。
508             // (本体カメラのシャッターを切らない時だけ、Toastで通知する。)
509             Toast.makeText(context, R.string.shoot_camera, Toast.LENGTH_SHORT).show();
510         }
511     }
512
513     /**
514      *   グリッド表示の ON/OFFを切り替える
515      *
516      */
517     private void changeShowGrid()
518     {
519         liveImageView.toggleShowGridFrame();
520         updateGridStatusButton(IShowInformation.BUTTON_1);
521     }
522
523     /**
524      *   AE-Lock/Lock解除を行う
525      *
526      */
527     private void changeAeLockMode()
528     {
529         camera.toggleAutoExposure();
530     }
531
532     /**
533      *  グリッドフレームの表示・非表示ボタンを更新する
534      *
535      */
536     private void updateGridStatusButton(int buttonId)
537     {
538         int btnResId;
539         if (liveImageView.isShowGrid())
540         {
541             // グリッドがON状態、グリッドをOFFにするボタンを出す
542             btnResId = R.drawable.btn_ic_grid_off;
543         }
544         else
545         {
546             //  グリッドがOFF状態、グリッドをONにするボタンを出す
547             btnResId = R.drawable.btn_ic_grid_on;
548         }
549         statusDrawer.setButtonDrawable(buttonId, btnResId);
550     }
551
552     /**
553      *   設定画面を開く
554      *
555      */
556     private void showSettingsScreen()
557     {
558         // TBD...
559     }
560 }