1 package jp.sfjp.gokigen.a01c.olycamerawrapper;
3 import android.app.Activity;
4 import android.graphics.PointF;
5 import android.util.Log;
6 import android.view.MotionEvent;
7 import android.widget.Toast;
9 import jp.co.olympus.camerakit.OLYCamera;
10 import jp.co.olympus.camerakit.OLYCameraLiveViewListener;
11 import jp.co.olympus.camerakit.OLYCameraStatusListener;
13 import jp.sfjp.gokigen.a01c.IShowInformation;
14 import jp.sfjp.gokigen.a01c.R;
15 import jp.sfjp.gokigen.a01c.liveview.IAutoFocusFrameDisplay;
16 import jp.sfjp.gokigen.a01c.liveview.ICameraStatusReceiver;
17 import jp.sfjp.gokigen.a01c.olycamerawrapper.takepicture.AutoFocusControl;
18 import jp.sfjp.gokigen.a01c.olycamerawrapper.takepicture.MovieRecordingControl;
19 import jp.sfjp.gokigen.a01c.olycamerawrapper.takepicture.SingleShotControl;
20 import jp.sfjp.gokigen.a01c.preference.ICameraPropertyAccessor;
23 * OlyCameraCoordinator : Olympus Air との接続、切断の間をとりもつクラス。
24 * (OLYCameraクラスの実体を保持する)
27 * 2. connectWifi() でカメラと接続する
28 * 3. disconnect() でカメラと切断する
30 * X. onDisconnectedByError() でカメラの通信状態が変更されたことを受信する
31 * o. CameraInteractionCoordinator.ICameraCallback でカメラとの接続状態を通知する
34 public class OlyCameraCoordinator implements IOlyCameraCoordinator, IIndicatorControl, ICameraRunMode, IOLYCameraObjectProvider
36 private final String TAG = toString();
37 private final IAutoFocusFrameDisplay focusFrameDisplay;
38 private final OLYCamera camera;
39 private final Activity context;
42 private final AutoFocusControl autoFocus;
43 private final SingleShotControl singleShot;
44 private final MovieRecordingControl movieControl;
45 private final OlyCameraPropertyProxy propertyProxy;
46 private final LoadSaveCameraProperties loadSaveCameraProperties;
47 private final OlyCameraConnection cameraConnection;
48 private final ICameraStatusDisplay cameraStatusDisplay;
49 private final LevelMeterHolder levelMeter;
51 private boolean isManualFocus = false;
52 private boolean isAutoFocusLocked = false;
53 private boolean isExposureLocked = false;
58 public OlyCameraCoordinator(Activity context, IAutoFocusFrameDisplay focusFrameDisplay, IShowInformation showInformation, ICameraStatusReceiver receiver)
60 this.context = context;
61 this.focusFrameDisplay = focusFrameDisplay;
63 // OLYMPUS CAMERA クラスの初期化、リスナの設定
64 camera = new OLYCamera();
65 camera.setContext(context.getApplicationContext());
67 this.cameraConnection = new OlyCameraConnection(context, camera, receiver);
68 camera.setConnectionListener(cameraConnection);
70 // 本クラスの配下のカメラ制御クラス群の設定
71 autoFocus = new AutoFocusControl(camera, focusFrameDisplay, this); // AF制御
72 singleShot = new SingleShotControl(camera, focusFrameDisplay, this, showInformation); // 1枚撮影
73 movieControl = new MovieRecordingControl(context, camera, showInformation); // ムービー撮影
74 propertyProxy = new OlyCameraPropertyProxy(camera); // カメラプロパティ
75 cameraStatusDisplay = new CameraStatusDisplay(propertyProxy, showInformation); // 画面表示
76 this.levelMeter = new LevelMeterHolder(showInformation, android.support.v7.preference.PreferenceManager.getDefaultSharedPreferences(context).getBoolean(ICameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, false)); // デジタル水準器
77 setCameraStatusListener(new CameraStatusListenerImpl(context, cameraStatusDisplay, levelMeter));
78 camera.setCameraPropertyListener(new CameraPropertyListenerImpl(cameraStatusDisplay));
79 loadSaveCameraProperties = new LoadSaveCameraProperties(context, propertyProxy, this);
85 public void setLiveViewListener(OLYCameraLiveViewListener listener)
87 Log.v(TAG, "setLiveViewListener()");
90 camera.setLiveViewListener(listener);
103 public void changeLiveViewSize(String size)
105 Log.v(TAG, "changeLiveViewSize() : " + size);
108 camera.changeLiveViewSize(CameraPropertyUtilities.toLiveViewSizeType(size));
121 public void startLiveView()
123 Log.v(TAG, "startLiveView()");
126 camera.startLiveView();
139 public void stopLiveView()
141 Log.v(TAG, "stopLiveView()");
144 camera.stopLiveView();
157 public void updateTakeMode()
159 cameraStatusDisplay.updateTakeMode();
165 public boolean driveAutoFocus(MotionEvent event)
167 if (event.getAction() != MotionEvent.ACTION_DOWN)
171 PointF point = focusFrameDisplay.getPointWithEvent(event);
172 return ((focusFrameDisplay.isContainsPoint(point)) && autoFocus.lockAutoFocus(point));
178 public void unlockAutoFocus()
180 autoFocus.unlockAutoFocus();
181 focusFrameDisplay.hideFocusFrame();
182 isAutoFocusLocked = false;
189 public void singleShot()
191 singleShot.singleShot();
193 // 撮影の表示をToastで行う (成功とか失敗とか言っていない)
194 Toast.makeText(context, R.string.shoot_camera, Toast.LENGTH_SHORT).show();
202 public void movieControl()
204 movieControl.movieControl();
212 public void setRecViewMode(boolean isRecViewMode)
216 String value = "<" + IOlyCameraProperty.REC_PREVIEW + "/";
219 value = value + "ON>";
223 value = value + "OFF>";
225 propertyProxy.setCameraPropertyValue(IOlyCameraProperty.REC_PREVIEW, value);
235 public void toggleAutoExposure()
241 Log.v(TAG, "toggleAutoExposure() : unlockAutoExposure()");
242 camera.unlockAutoExposure();
246 Log.v(TAG, "toggleAutoExposure() : lockAutoExposure()");
247 camera.lockAutoExposure();
249 updateIndicatorScreen(false);
255 cameraStatusDisplay.updateAeLockState();
263 public void toggleManualFocus()
267 boolean isHideFocusFrame = false;
268 String property_name = IOlyCameraProperty.FOCUS_STILL;
269 String poverty_value = "<" + IOlyCameraProperty.FOCUS_STILL + "/";
274 // AF -> MF : オートフォーカスを解除して設定する
275 Log.v(TAG, "toggleManualFocus() : to " + IOlyCameraProperty.FOCUS_MF);
276 poverty_value = poverty_value + IOlyCameraProperty.FOCUS_MF + ">";
277 camera.unlockAutoFocus();
278 camera.setCameraPropertyValue(property_name, poverty_value);
279 isHideFocusFrame = true;
284 Log.v(TAG, "toggleManualFocus() : to " + IOlyCameraProperty.FOCUS_SAF);
285 poverty_value = poverty_value + IOlyCameraProperty.FOCUS_SAF + ">";
286 camera.setCameraPropertyValue(property_name, poverty_value);
288 updateIndicatorScreen(isHideFocusFrame);
296 private void updateIndicatorScreen(boolean isHideFocusFrame)
299 if (isHideFocusFrame)
301 isAutoFocusLocked = false;
302 focusFrameDisplay.hideFocusFrame();
304 cameraStatusDisplay.updateCameraStatus();
308 public boolean isManualFocus()
310 isManualFocus = propertyProxy.isManualFocus();
311 return (isManualFocus);
315 public boolean isAFLock()
317 return (isAutoFocusLocked);
321 public boolean isAELock()
323 isExposureLocked = propertyProxy.isExposureLocked();
324 return (isExposureLocked);
328 public void setCameraStatusListener(OLYCameraStatusListener listener)
330 camera.setCameraStatusListener(listener);
334 public String getCameraStatusSummary(ICameraStatusSummary decoder)
336 return (decoder.getCameraStatusMessage(camera, ""));
344 public void updateStatusAll()
346 cameraStatusDisplay.updateCameraStatusAll();
350 public void changeRunMode(boolean isRecording)
352 OLYCamera.RunMode runMode = (isRecording) ? OLYCamera.RunMode.Recording : OLYCamera.RunMode.Playback;
353 Log.v(TAG, "changeRunMode() : " + runMode);
356 camera.changeRunMode(runMode);
365 public boolean isRecordingMode()
367 boolean isRecordingMode = false;
370 OLYCamera.RunMode runMode = camera.getRunMode();
371 isRecordingMode = (runMode == OLYCamera.RunMode.Recording);
378 return (isRecordingMode);
382 public IOlyCameraPropertyProvider getCameraPropertyProvider()
384 return (propertyProxy);
388 public ILoadSaveCameraProperties getLoadSaveCameraProperties()
390 return (loadSaveCameraProperties);
394 public ICameraRunMode getChangeRunModeExecutor()
400 public IOlyCameraConnection getConnectionInterface()
402 return (cameraConnection);
406 public ILevelGauge getLevelGauge()
412 public void onAfLockUpdate(boolean isAfLocked)
414 isAutoFocusLocked = isAfLocked;
415 updateIndicatorScreen(false);
419 public OLYCamera getOLYCamera()