OSDN Git Service

SONY系ステータス表示実装(途中)、設定の変更選択肢を表示できるようにする。
authorMRSa <mrsa@myad.jp>
Sun, 15 Aug 2021 05:47:35 +0000 (14:47 +0900)
committerMRSa <mrsa@myad.jp>
Sun, 15 Aug 2021 05:47:35 +0000 (14:47 +0900)
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/SonyCameraControl.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/ISonyCameraApi.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/SonyCameraApi.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/ReplyJsonParser.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyCameraEventObserver.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyStatus.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyStatusCandidates.kt [new file with mode: 0644]

index 2560daa..fda70a4 100644 (file)
@@ -69,6 +69,7 @@ class SonyCameraControl(private val context: AppCompatActivity, private val vibr
                 eventObserver = SonyCameraEventObserver.newInstance(context, sonyCameraApi, sonyCameraStatus)
                 liveViewControl = SonyLiveViewControl(context, informationNotify, liveViewListener, sonyCameraApi)
                 zoomControl.setCameraApi(sonyCameraApi)
+                sonyCameraStatus.setCameraApi(sonyCameraApi)
                 if (::focusControl.isInitialized)
                 {
                     focusControl.setCameraApi(sonyCameraApi)
index 8dad6f8..79d42bb 100644 (file)
@@ -3,7 +3,6 @@ package jp.osdn.gokigen.gokigenassets.camera.sony.wrapper
 import org.json.JSONArray
 import org.json.JSONObject
 
-
 interface ISonyCameraApi
 {
     fun getAvailableApiList(): JSONObject?
@@ -52,7 +51,8 @@ interface ISonyCameraApi
         service: String,
         method: String,
         params: JSONArray,
-        version: String
+        version: String,
+        timeoutMs: Int = -1
     ): JSONObject?
 
     fun getDdUrl(): String?
index ed97125..a3e60b3 100644 (file)
@@ -479,14 +479,9 @@ class SonyCameraApi(private val sonyCamera: ISonyCamera) : ISonyCameraApi
         return null
     }
 
-    override fun callGenericSonyApiMethod(
-        service: String,
-        method: String,
-        params: JSONArray,
-        version: String
-    ): JSONObject
+    override fun callGenericSonyApiMethod(service: String, method: String, params: JSONArray, version: String, timeoutMs: Int): JSONObject
     {
-        return communicateJSON(service, method, params, version, -1)
+        return communicateJSON(service, method, params, version, timeoutMs)
     }
 
     override fun getDdUrl(): String
@@ -526,6 +521,6 @@ class SonyCameraApi(private val sonyCamera: ISonyCamera) : ISonyCameraApi
     companion object
     {
         private val TAG = SonyCameraApi::class.java.simpleName
-        private const val FULL_LOG = true
+        private const val FULL_LOG = false
     }
 }
index 3cd67b5..d7416bc 100644 (file)
@@ -9,7 +9,6 @@ import java.lang.Exception
 import java.util.*
 import kotlin.collections.ArrayList
 
-
 class ReplyJsonParser(private val uiHandler: Handler) : ICameraStatusHolder
 {
     private var cameraStatus = ""
index 51b2664..6f0e621 100644 (file)
@@ -43,7 +43,10 @@ class SonyCameraEventObserver(context: Context, private val remoteApi: ISonyCame
                     {
                         val replyJson = remoteApi.getEvent(eventVersion, longPolling) ?: JSONObject()
                         val errorCode = findErrorCode(replyJson)
-                        Log.d(TAG, "getEvent errorCode: $errorCode")
+                        if (errorCode != 0)
+                        {
+                            Log.d(TAG, "getEvent errorCode: $errorCode")
+                        }
                         when (errorCode)
                         {
                             0 -> { }
index 90d5e02..0fe6504 100644 (file)
@@ -3,11 +3,14 @@ package jp.osdn.gokigen.gokigenassets.camera.sony.wrapper.eventlistener
 import android.graphics.Color
 import android.util.Log
 import jp.osdn.gokigen.gokigenassets.camera.interfaces.*
+import jp.osdn.gokigen.gokigenassets.camera.sony.wrapper.ISonyCameraApi
 import org.json.JSONObject
 import java.lang.Exception
 
 class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener, ISonyStatusReceiver
 {
+    private val statusCandidates = SonyStatusCandidates()
+
     private var currentExposureMode = ""
     private var currentShootMode = ""
     private var currentExposureCompensation = ""
@@ -19,6 +22,10 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener
     private var currentWhiteBalanceMode = ""
     private var currentCameraStatus = ""
 
+    fun setCameraApi(sonyCameraApi: ISonyCameraApi)
+    {
+        statusCandidates.setCameraApi(sonyCameraApi)
+    }
 
     private var jsonObject : JSONObject
     init
@@ -28,12 +35,39 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener
 
     override fun setStatus(key: String, value: String)
     {
-
+         when (key) {
+            ICameraStatus.TAKE_MODE -> statusCandidates.setTakeMode(value)
+            ICameraStatus.SHUTTER_SPEED -> statusCandidates.setShutterSpeed(value)
+            ICameraStatus.APERTURE -> statusCandidates.setAperture(value)
+            ICameraStatus.EXPREV -> statusCandidates.setExpRev(value)
+            ICameraStatus.CAPTURE_MODE -> statusCandidates.setCaptureMode(value)
+            ICameraStatus.ISO_SENSITIVITY -> statusCandidates.setIsoSensitivity(value)
+            ICameraStatus.WHITE_BALANCE -> statusCandidates.setWhiteBalance(value)
+            ICameraStatus.AE -> statusCandidates.setMeteringMode(value)
+            ICameraStatus.EFFECT -> statusCandidates.setPictureEffect(value)
+            ICameraStatus.BATTERY -> statusCandidates.setRemainBattery(value)
+            ICameraStatus.TORCH_MODE -> statusCandidates.setTorchMode(value)
+            else -> { return }
+        }
     }
 
     override fun getStatusList(key: String): List<String?>
     {
-        return (ArrayList())
+        val statusList : List<String?> = (when (key) {
+            ICameraStatus.TAKE_MODE -> statusCandidates.getAvailableTakeMode()
+            ICameraStatus.SHUTTER_SPEED -> statusCandidates.getAvailableShutterSpeed()
+            ICameraStatus.APERTURE -> statusCandidates.getAvailableAperture()
+            ICameraStatus.EXPREV -> statusCandidates.getAvailableExpRev()
+            ICameraStatus.CAPTURE_MODE -> statusCandidates.getAvailableCaptureMode()
+            ICameraStatus.ISO_SENSITIVITY -> statusCandidates.getAvailableIsoSensitivity()
+            ICameraStatus.WHITE_BALANCE -> statusCandidates.getAvailableWhiteBalance()
+            ICameraStatus.AE -> statusCandidates.getAvailableMeteringMode()
+            ICameraStatus.EFFECT -> statusCandidates.getAvailablePictureEffect()
+            ICameraStatus.BATTERY -> statusCandidates.getAvailableRemainBattery()
+            ICameraStatus.TORCH_MODE -> statusCandidates.getAvailableTorchMode()
+            else -> { ArrayList() }
+        })
+        return (statusList)
     }
 
     override fun getStatus(key: String): String
@@ -157,24 +191,23 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener
     {
         this.jsonObject = jsonObject
 
-        currentCameraStatus = parseEventStatus(jsonObject, "cameraStatus", "cameraStatus", 1)
-        currentExposureMode = parseEventStatus(jsonObject, "exposureMode", "currentExposureMode", 18)
-        currentShootMode = parseEventStatus(jsonObject, "shootMode", "currentShootMode",21)
-        currentExposureCompensation = parseEventStatus(jsonObject, "exposureCompensation", "currentExposureCompensation",25)
-
-        currentFlashMode = parseEventStatus(jsonObject, "flashMode", "currentFlashMode",26)
-        currentFNumber = parseEventStatus(jsonObject, "fNumber", "currentFNumber",27)
-        currentFocusMode = parseEventStatus(jsonObject, "focusMode", "currentFocusMode",28)
+        currentCameraStatus = parseEventStatus(currentCameraStatus, jsonObject, "cameraStatus", "cameraStatus", 1)
+        currentExposureMode = parseEventStatus(currentExposureMode, jsonObject, "exposureMode", "currentExposureMode", 18)
+        currentShootMode = parseEventStatus(currentShootMode, jsonObject, "shootMode", "currentShootMode",21)
+        currentExposureCompensation = parseEventStatus(currentExposureCompensation, jsonObject, "exposureCompensation", "currentExposureCompensation",25)
 
-        currentIsoSpeedRate = parseEventStatus(jsonObject, "isoSpeedRate", "currentIsoSpeedRate", 29)
-        currentShutterSpeed = parseEventStatus(jsonObject, "shutterSpeed", "currentShutterSpeed", 32)
-        currentWhiteBalanceMode = parseEventStatus(jsonObject, "whiteBalanceMode", "currentWhiteBalanceMode", 33)
+        currentFlashMode = parseEventStatus(currentFlashMode, jsonObject, "flashMode", "currentFlashMode",26)
+        currentFNumber = parseEventStatus(currentFNumber, jsonObject, "fNumber", "currentFNumber",27)
+        currentFocusMode = parseEventStatus(currentFocusMode, jsonObject, "focusMode", "currentFocusMode",28)
 
+        currentIsoSpeedRate = parseEventStatus(currentIsoSpeedRate, jsonObject, "isoSpeedRate", "currentIsoSpeedRate", 29)
+        currentShutterSpeed = parseEventStatus(currentShutterSpeed, jsonObject, "shutterSpeed", "currentShutterSpeed", 32)
+        currentWhiteBalanceMode = parseEventStatus(currentWhiteBalanceMode, jsonObject, "whiteBalance", "currentWhiteBalanceMode", 33)
     }
 
-    private fun parseEventStatus(replyJson: JSONObject, item: String, key: String, indexOfCameraStatus: Int): String
+    private fun parseEventStatus(currentStatus: String, replyJson: JSONObject, item: String, key: String, indexOfCameraStatus: Int): String
     {
-        var eventStatus = ""
+        var eventStatus = currentStatus
         try
         {
             val resultsObj = replyJson.getJSONArray("result")
@@ -188,7 +221,7 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener
                 }
                 else
                 {
-                    Log.w(TAG, "Event reply: Illegal Index ($indexOfCameraStatus: $key) $type")
+                    Log.w(TAG, "Event reply: Illegal Index ($indexOfCameraStatus: $key) $type : $cameraStatusObj")
                 }
             }
         }
diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyStatusCandidates.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyStatusCandidates.kt
new file mode 100644 (file)
index 0000000..431a5c8
--- /dev/null
@@ -0,0 +1,245 @@
+package jp.osdn.gokigen.gokigenassets.camera.sony.wrapper.eventlistener
+
+import jp.osdn.gokigen.gokigenassets.camera.sony.wrapper.ISonyCameraApi
+import org.json.JSONArray
+
+class SonyStatusCandidates()
+{
+    private lateinit var cameraApi: ISonyCameraApi
+    fun setCameraApi(sonyCameraApi: ISonyCameraApi)
+    {
+        cameraApi = sonyCameraApi
+    }
+
+    fun getAvailableTakeMode(): List<String?>
+    {
+        val takeModeList : ArrayList<String> = ArrayList()
+        try
+        {
+            if (::cameraApi.isInitialized)
+            {
+                val replyJson = cameraApi.callGenericSonyApiMethod("camera", "getAvailableExposureMode", JSONArray(), "1.0")
+                val resultsObj = replyJson?.getJSONArray("result")
+                if (resultsObj?.isNull(1) == false)
+                {
+                    val takeModeArray = resultsObj.getJSONArray(1)
+                    //Log.v(TAG, " getAvailableTakeMode() : $takeModeArray")
+                    for (index in 0 until takeModeArray.length())
+                    {
+                        val itemString = takeModeArray.getString(index)
+                        takeModeList.add(itemString)
+                        //Log.v(TAG, "  --- $itemString ($index) ---")
+                    }
+                }
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+        return (takeModeList)
+    }
+
+    fun getAvailableShutterSpeed(): List<String?>
+    {
+        val shutterSpeedList : ArrayList<String> = ArrayList()
+        try
+        {
+            if (::cameraApi.isInitialized)
+            {
+                val replyJson = cameraApi.callGenericSonyApiMethod("camera", "getAvailableShutterSpeed", JSONArray(), "1.0")
+                val resultsObj = replyJson?.getJSONArray("result")
+                if (resultsObj?.isNull(1) == false)
+                {
+                    val availableItemArray = resultsObj.getJSONArray(1)
+                    for (index in 0 until availableItemArray.length())
+                    {
+                        val itemString = availableItemArray.getString(index)
+                        shutterSpeedList.add(itemString)
+                    }
+                }
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+        return (shutterSpeedList)
+    }
+
+    fun getAvailableAperture(): List<String?>
+    {
+        val apertureList : ArrayList<String> = ArrayList()
+        try
+        {
+            if (::cameraApi.isInitialized)
+            {
+                val replyJson = cameraApi.callGenericSonyApiMethod("camera",  "getAvailableFNumber", JSONArray(), "1.0")
+                val resultsObj = replyJson?.getJSONArray("result")
+                if (resultsObj?.isNull(1) == false)
+                {
+                    val availableItemArray = resultsObj.getJSONArray(1)
+                    for (index in 0 until availableItemArray.length())
+                    {
+                        val itemString = availableItemArray.getString(index)
+                        apertureList.add(itemString)
+                    }
+                }
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+        return (apertureList)
+    }
+
+    fun getAvailableExpRev(): List<String?>
+    {
+/*
+        val apertureList : ArrayList<String> = ArrayList()
+        try
+        {
+            if (::cameraApi.isInitialized)
+            {
+                val replyJson = cameraApi.callGenericSonyApiMethod("camera",  "getAvailableExposureCompensation", JSONArray(), "1.0")
+                val resultsObj = replyJson?.getJSONArray("result")
+                if (resultsObj?.isNull(1) == false)
+                {
+                    val availableItemArray = resultsObj.getJSONArray(1)
+                    for (index in 0 until availableItemArray.length())
+                    {
+                        val itemString = availableItemArray.getString(index)
+                        apertureList.add(itemString)
+                    }
+                }
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+*/
+        return (ArrayList())
+    }
+
+    fun getAvailableCaptureMode(): List<String?>
+    {
+        val shootModeList : ArrayList<String> = ArrayList()
+        try
+        {
+            if (::cameraApi.isInitialized)
+            {
+                val replyJson = cameraApi.callGenericSonyApiMethod("camera",  "getAvailableShootMode", JSONArray(), "1.0")
+                val resultsObj = replyJson?.getJSONArray("result")
+                if (resultsObj?.isNull(1) == false)
+                {
+                    val availableItemArray = resultsObj.getJSONArray(1)
+                    for (index in 0 until availableItemArray.length())
+                    {
+                        val itemString = availableItemArray.getString(index)
+                        shootModeList.add(itemString)
+                    }
+                }
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+        return (shootModeList)
+    }
+
+    fun getAvailableIsoSensitivity(): List<String?>
+    {
+        val isoList : ArrayList<String> = ArrayList()
+        try
+        {
+            if (::cameraApi.isInitialized)
+            {
+                val replyJson = cameraApi.callGenericSonyApiMethod("camera",  "getAvailableIsoSpeedRate", JSONArray(), "1.0")
+                val resultsObj = replyJson?.getJSONArray("result")
+                if (resultsObj?.isNull(1) == false)
+                {
+                    val availableItemArray = resultsObj.getJSONArray(1)
+                    for (index in 0 until availableItemArray.length())
+                    {
+                        val itemString = availableItemArray.getString(index)
+                        isoList.add(itemString)
+                    }
+                }
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+        return (isoList)
+    }
+
+    fun getAvailableWhiteBalance(): List<String?>
+    {
+        val whiteBalanceList : ArrayList<String> = ArrayList()
+/*
+        try
+        {
+            if (::cameraApi.isInitialized)
+            {
+                val replyJson = cameraApi.callGenericSonyApiMethod("camera",  "getAvailableWhiteBalance", JSONArray(), "1.0")
+                val resultsObj = replyJson?.getJSONArray("result")
+                if (resultsObj?.isNull(1) == false)
+                {
+                    val availableItemArray = resultsObj.getJSONArray(1)
+                    for (index in 0 until availableItemArray.length())
+                    {
+                        val itemString = availableItemArray.getString(index)
+                        whiteBalanceList.add(itemString)
+                    }
+                }
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+*/
+        return (whiteBalanceList)
+    }
+
+    fun getAvailableMeteringMode(): List<String?>
+    {
+        return (ArrayList())
+    }
+
+    fun getAvailablePictureEffect(): List<String?>
+    {
+        return (ArrayList())
+    }
+
+    fun getAvailableRemainBattery(): List<String?>
+    {
+        return (ArrayList())
+    }
+
+    fun getAvailableTorchMode(): List<String?>
+    {
+        return (ArrayList())
+    }
+
+    fun setTakeMode(value: String) { }
+    fun setShutterSpeed(value: String) { }
+    fun setAperture(value: String) { }
+    fun setExpRev(value: String) { }
+    fun setCaptureMode(value: String) { }
+    fun setIsoSensitivity(value: String) { }
+    fun setWhiteBalance(value: String) { }
+    fun setMeteringMode(value: String) { }
+    fun setPictureEffect(value: String) { }
+    fun setRemainBattery(value: String) { }
+    fun setTorchMode(value: String) { }
+
+    companion object
+    {
+        private val TAG = SonyStatusCandidates::class.java.simpleName
+    }
+}