OSDN Git Service

ソースコード整理と微修正。
[gokigen/A01c.git] / wear / src / main / java / jp / sfjp / gokigen / a01c / thetacamerawrapper / ThetaCameraController.kt
index af038af..09d7090 100644 (file)
@@ -4,12 +4,8 @@ import android.util.Log
 import android.view.MotionEvent
 import androidx.appcompat.app.AppCompatActivity
 import androidx.preference.PreferenceDataStore
-import jp.sfjp.gokigen.a01c.ICameraConnection
-import jp.sfjp.gokigen.a01c.ICameraController
-import jp.sfjp.gokigen.a01c.ICameraFeatureDispatcher
-import jp.sfjp.gokigen.a01c.IShowInformation
+import jp.sfjp.gokigen.a01c.*
 import jp.sfjp.gokigen.a01c.liveview.CameraLiveViewListenerImpl
-import jp.sfjp.gokigen.a01c.liveview.IAutoFocusFrameDisplay
 import jp.sfjp.gokigen.a01c.liveview.ICameraStatusReceiver
 import jp.sfjp.gokigen.a01c.liveview.ILiveImageStatusNotify
 import jp.sfjp.gokigen.a01c.olycamerawrapper.ICameraRunMode
@@ -19,24 +15,24 @@ import jp.sfjp.gokigen.a01c.olycamerawrapper.IZoomLensHolder
 import jp.sfjp.gokigen.a01c.olycamerawrapper.property.ICameraPropertyLoadSaveOperations
 import jp.sfjp.gokigen.a01c.olycamerawrapper.property.ILoadSaveCameraProperties
 import jp.sfjp.gokigen.a01c.olycamerawrapper.property.IOlyCameraPropertyProvider
-import jp.sfjp.gokigen.a01c.preference.PreferenceAccessWrapper
 import jp.sfjp.gokigen.a01c.thetacamerawrapper.connection.ThetaCameraConnection
 import jp.sfjp.gokigen.a01c.thetacamerawrapper.liveview.ThetaLiveViewControl
-import jp.sfjp.gokigen.a01c.thetacamerawrapper.operation.ThetaDummyOperation
-import jp.sfjp.gokigen.a01c.thetacamerawrapper.operation.ThetaMovieRecordingControl
-import jp.sfjp.gokigen.a01c.thetacamerawrapper.operation.ThetaOptionUpdateControl
-import jp.sfjp.gokigen.a01c.thetacamerawrapper.operation.ThetaSingleShotControl
+import jp.sfjp.gokigen.a01c.thetacamerawrapper.operation.*
+import jp.sfjp.gokigen.a01c.thetacamerawrapper.status.ThetaCameraStatusWatcher
 
-class ThetaCameraController(val context: AppCompatActivity, private val focusFrameDisplay: IAutoFocusFrameDisplay, private val showInformation: IShowInformation, private val receiver: ICameraStatusReceiver, private val preferences: PreferenceAccessWrapper) : ICameraController, IIndicatorControl
+class ThetaCameraController(val context: AppCompatActivity, showInformation: IShowInformation, receiver: ICameraStatusReceiver) : ICameraController, IIndicatorControl, IThetaSessionIdProvider, IThetaStatusHolder
 {
     private lateinit var featureDispatcher : ThetaFeatureDispatcher
     private lateinit var liveViewControl : ThetaLiveViewControl
     private val dummyOperation = ThetaDummyOperation()
     private val sessionIdHolder = ThetaSessionHolder()
     private val cameraConnection = ThetaCameraConnection(context, receiver, sessionIdHolder)
-    private val singleShot = ThetaSingleShotControl(sessionIdHolder, this, this)
-    private val movieShot = ThetaMovieRecordingControl(context, sessionIdHolder, this, showInformation, this)
-    private val optionSet = ThetaOptionUpdateControl(sessionIdHolder, this, this)
+    private val singleShot = ThetaSingleShotControl(sessionIdHolder, showInformation, this)
+    private val movieShot = ThetaMovieRecordingControl(context, sessionIdHolder, showInformation, this)
+    private val bracketShot = ThetaBracketingControl(context, sessionIdHolder, showInformation, this)
+    private val optionSet = ThetaOptionUpdateControl(sessionIdHolder)
+    private val statusWatcher = ThetaCameraStatusWatcher(this, this, showInformation)
+    private var takeMode = "P"
 
     override fun connectFinished()
     {
@@ -91,20 +87,35 @@ class ThetaCameraController(val context: AppCompatActivity, private val focusFra
     {
         if (::featureDispatcher.isInitialized)
         {
-            when (featureDispatcher.takeMode)
+            Log.v(TAG, " MODE CHANGE FROM $takeMode")
+            when (takeMode)
             {
-                "P" -> changeCaptureImageMode(sessionIdHolder.isApiLevelV21())
-                "Movie" -> changeCaptureVideoMode(sessionIdHolder.isApiLevelV21())
+                "Movie" -> changeCaptureImageMode(sessionIdHolder.isApiLevelV21())
+                "P" -> changeCaptureVideoMode(sessionIdHolder.isApiLevelV21())
             }
         }
     }
 
+    override fun getCaptureMode() : String
+    {
+        return (takeMode)
+    }
+
+    override fun setCaptureMode(captureMode : String)
+    {
+        when (captureMode) {
+            "image" -> takeMode = "P"
+            "video" -> takeMode = "Movie"
+            "_video" -> takeMode = "Movie"
+        }
+    }
+
     private fun changeCaptureImageMode(apiV21 : Boolean)
     {
         try
         {
             optionSet.setOptions("\"captureMode\" : \"image\"", apiV21)
-            waitMs(200);
+            waitMs(200)
             startLiveView()
         }
         catch (e : Exception)
@@ -126,7 +137,7 @@ class ThetaCameraController(val context: AppCompatActivity, private val focusFra
                 optionSet.setOptions("\"captureMode\" : \"_video\"", apiV21)
 
                 // API Level 1 の対応機種では、Videoモードでライブビューが動かないので止める
-                waitMs(200);
+                waitMs(200)
                 stopLiveView()
             }
         }
@@ -161,6 +172,11 @@ class ThetaCameraController(val context: AppCompatActivity, private val focusFra
         movieShot.movieControl(sessionIdHolder.isApiLevelV21())
     }
 
+    override fun bracketingControl()
+    {
+        bracketShot.bracketingControl(sessionIdHolder.isApiLevelV21())
+    }
+
     override fun bracketingShot(bracketingStyle: Int, bracketingCount: Int, durationSeconds: Int)
     {
         // TODO("Not yet implemented")
@@ -201,6 +217,11 @@ class ThetaCameraController(val context: AppCompatActivity, private val focusFra
         // なにもしない
     }
 
+    override fun getStatusWatcher(): ICameraStatusWatcher
+    {
+        return (statusWatcher)
+    }
+
     override fun getCameraPropertyProvider(): IOlyCameraPropertyProvider
     {
         return (dummyOperation)
@@ -240,7 +261,7 @@ class ThetaCameraController(val context: AppCompatActivity, private val focusFra
     {
         if (!(::featureDispatcher.isInitialized))
         {
-            featureDispatcher = ThetaFeatureDispatcher(context, statusDrawer, camera, accessWrapper, liveImageView)
+            featureDispatcher = ThetaFeatureDispatcher(context, statusDrawer, camera, accessWrapper, liveImageView, optionSet, this, this)
         }
         return (featureDispatcher)
     }
@@ -271,4 +292,9 @@ class ThetaCameraController(val context: AppCompatActivity, private val focusFra
     {
         private val TAG = ThetaCameraController::class.java.simpleName
     }
+
+    override fun getSessionId(): String
+    {
+        return (sessionIdHolder.sessionId)
+    }
 }