1 package jp.sfjp.gokigen.a01c.liveview;
3 import android.util.Log;
4 import android.view.MotionEvent;
6 import jp.sfjp.gokigen.a01c.IShowInformation;
7 import jp.sfjp.gokigen.a01c.R;
8 import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraCoordinator;
9 import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraProperty;
10 import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraPropertyProvider;
17 public class FeatureDispatcher implements ICameraFeatureDispatcher
19 private final String TAG = toString();
20 private final IShowInformation statusDrawer;
21 private final IOlyCameraCoordinator camera;
22 private final ILiveImageStatusNotify liveImageView;
24 public FeatureDispatcher(IShowInformation statusDrawer, IOlyCameraCoordinator camera, ILiveImageStatusNotify liveImageView)
26 this.statusDrawer = statusDrawer;
28 this.liveImageView = liveImageView;
34 * @param objectId 操作したオブジェクト
35 * @param featureNumber 操作する機能
38 public boolean dispatchAction(int objectId, int featureNumber)
40 if (featureNumber <= ICameraFeatureDispatcher.FEATURE_ACTION_NONE)
47 int duration = IShowInformation.VIBRATE_PATTERN_SIMPLE_SHORT;
48 switch (featureNumber)
50 case ICameraFeatureDispatcher.FEATURE_SETTINGS:
53 duration =IShowInformation.VIBRATE_PATTERN_NONE;
55 case ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_GRID:
57 changeShowGrid(objectId);
59 case ICameraFeatureDispatcher.FEATURE_SHUTTER_SINGLESHOT:
62 //duration =IShowInformation.VIBRATE_PATTERN_NONE;
64 case ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE:
68 case ICameraFeatureDispatcher.FEATURE_CHAGE_AE_LOCK_MODE:
72 case ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_DOWN:
74 changeExposureBiasValueDown();
76 case ICameraFeatureDispatcher.FEATURE_EXPOSURE_BIAS_UP:
78 changeExposureBiasValueUp();
80 case ICameraFeatureDispatcher.FEATURE_APERTURE_DOWN:
82 changeApertureValueDown();
84 case ICameraFeatureDispatcher.FEATURE_APERTURE_UP:
86 changeApertureValueUp();
88 case ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_DOWN:
90 changeShutterSpeedDown();
92 case ICameraFeatureDispatcher.FEATURE_SHUTTER_SPEED_UP:
94 changeShutterSpeedUp();
96 case ICameraFeatureDispatcher.FEATURE_COLORTONE_DOWN:
98 changeColorToneDown();
100 case ICameraFeatureDispatcher.FEATURE_COLORTONE_UP:
104 case ICameraFeatureDispatcher.FEATURE_ART_FILTER_DOWN:
106 changeArtFilterDown();
108 case ICameraFeatureDispatcher.FEATURE_ART_FILTER_UP:
112 case ICameraFeatureDispatcher.FEATURE_TOGGLE_SHOW_LEVEL_GAUGE:
114 changeShowLevelGauge();
116 case ICameraFeatureDispatcher.FEATURE_CHANGE_TAKEMODE_REVERSE:
118 changeTakeModeReverse();
123 statusDrawer.vibrate(duration);
128 public boolean dispatchAreaAction(MotionEvent event, int areaFeatureNumber)
131 switch (areaFeatureNumber)
133 case ICameraFeatureDispatcher.FEATURE_AREA_ACTION_DRIVE_AUTOFOCUS:
134 ret = camera.driveAutoFocus(event);
137 case ICameraFeatureDispatcher.FEATURE_AREA_ACTION_NOT_CONNECTED:
142 //Intent intent = new Intent(ACTION_ADD_NETWORK_SETTINGS);
143 Intent intent = new Intent(ACTION_NETWORK_SETTINGS);
144 context.startActivity(intent);
153 case FEATURE_AREA_ACTION_NONE:
168 public String getTakeMode()
170 IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
171 return (propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE)));
177 * (P > A > S > M > ART > iAuto > ...)
179 private void changeTakeMode()
181 IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
182 String propetyValue = propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE));
183 if (propetyValue == null)
188 String targetMode = "<" + IOlyCameraProperty.TAKE_MODE; // 変更先モード
189 switch (propetyValue)
192 targetMode = targetMode + "/A>";
196 targetMode = targetMode + "/S>";
200 targetMode = targetMode + "/M>";
204 targetMode = targetMode + "/ART>";
208 targetMode = targetMode + "/iAuto>";
214 targetMode = targetMode + "/P>";
217 Log.v(TAG, "changeTakeMode() " + targetMode);
218 propertyProxy.setCameraPropertyValue(IOlyCameraProperty.TAKE_MODE, targetMode);
219 camera.unlockAutoFocus();
222 //camera.updateTakeMode();
228 * (iAuto < P < A < S < M < ART < iAuto < ...)
230 private void changeTakeModeReverse()
232 IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
233 String propetyValue = propertyProxy.getCameraPropertyValueTitle(propertyProxy.getCameraPropertyValue(IOlyCameraProperty.TAKE_MODE));
234 if (propetyValue == null)
239 String targetMode = "<" + IOlyCameraProperty.TAKE_MODE; // 変更先モード
240 switch (propetyValue)
243 targetMode = targetMode + "/iAuto>";
247 targetMode = targetMode + "/P>";
251 targetMode = targetMode + "/A>";
255 targetMode = targetMode + "/S>";
259 targetMode = targetMode + "/M>";
265 targetMode = targetMode + "/ART>";
268 Log.v(TAG, "changeTakeMode() " + targetMode);
269 propertyProxy.setCameraPropertyValue(IOlyCameraProperty.TAKE_MODE, targetMode);
270 camera.unlockAutoFocus();
273 //camera.updateTakeMode();
279 * (現在は、連続撮影モードやムービー撮影についてはまだ非対応)
281 private void pushShutterButton()
288 * グリッド表示の ON/OFFを切り替える
291 private void changeShowGrid(int objectId)
293 liveImageView.toggleShowGridFrame();
294 updateGridStatusButton(objectId);
299 * デジタル水準器の ON/OFFを切り替える
302 private void changeShowLevelGauge()
304 liveImageView.toggleShowLevelGauge();
311 private void changeAeLockMode()
313 camera.toggleAutoExposure();
317 * グリッドフレームの表示・非表示ボタンを更新する
320 private void updateGridStatusButton(int buttonId)
323 if (liveImageView.isShowGrid())
325 // グリッドがON状態、グリッドをOFFにするボタンを出す
326 btnResId = R.drawable.btn_ic_grid_off;
330 // グリッドがOFF状態、グリッドをONにするボタンを出す
331 btnResId = R.drawable.btn_ic_grid_on;
333 statusDrawer.setButtonDrawable(buttonId, btnResId);
339 private void changeExposureBiasValueDown()
341 IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
342 propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.EXPOSURE_COMPENSATION);
349 private void changeExposureBiasValueUp()
351 IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
352 propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.EXPOSURE_COMPENSATION);
358 private void changeApertureValueDown()
360 IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
361 propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.APERTURE);
368 private void changeApertureValueUp()
370 IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
371 propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.APERTURE);
377 private void changeShutterSpeedDown()
379 IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
380 propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.SHUTTER_SPEED);
387 private void changeShutterSpeedUp()
389 IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
390 propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.SHUTTER_SPEED);
395 * 仕上がり・ピクチャーモードを1段階下げる
397 private void changeColorToneDown()
399 IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
400 propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.COLOR_TONE);
404 * 仕上がり・ピクチャーモードを1段階あげる
407 private void changeColorToneUp()
409 IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
410 propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.COLOR_TONE);
417 private void changeArtFilterDown()
419 IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
420 propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.ART_FILTER);
427 private void changeArtFilterUp()
429 IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
430 propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.ART_FILTER);
438 private void showSettingsScreen()