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
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()
{
{
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)
optionSet.setOptions("\"captureMode\" : \"_video\"", apiV21)
// API Level 1 の対応機種では、Videoモードでライブビューが動かないので止める
- waitMs(200);
+ waitMs(200)
stopLiveView()
}
}
movieShot.movieControl(sessionIdHolder.isApiLevelV21())
}
+ override fun bracketingControl()
+ {
+ bracketShot.bracketingControl(sessionIdHolder.isApiLevelV21())
+ }
+
override fun bracketingShot(bracketingStyle: Int, bracketingCount: Int, durationSeconds: Int)
{
// TODO("Not yet implemented")
// なにもしない
}
+ override fun getStatusWatcher(): ICameraStatusWatcher
+ {
+ return (statusWatcher)
+ }
+
override fun getCameraPropertyProvider(): IOlyCameraPropertyProvider
{
return (dummyOperation)
{
if (!(::featureDispatcher.isInitialized))
{
- featureDispatcher = ThetaFeatureDispatcher(context, statusDrawer, camera, accessWrapper, liveImageView)
+ featureDispatcher = ThetaFeatureDispatcher(context, statusDrawer, camera, accessWrapper, liveImageView, optionSet, this, this)
}
return (featureDispatcher)
}
{
private val TAG = ThetaCameraController::class.java.simpleName
}
+
+ override fun getSessionId(): String
+ {
+ return (sessionIdHolder.sessionId)
+ }
}