OSDN Git Service

バッテリー状態を監視。
[gokigen/A01c.git] / wear / src / main / java / jp / sfjp / gokigen / a01c / thetacamerawrapper / status / ThetaCameraStatusWatcher.kt
1 package jp.sfjp.gokigen.a01c.thetacamerawrapper.status
2
3 import android.util.Log
4 import jp.sfjp.gokigen.a01c.ICameraStatusUpdateNotify
5 import jp.sfjp.gokigen.a01c.ICameraStatusWatcher
6 import jp.sfjp.gokigen.a01c.thetacamerawrapper.status.ICameraStatus.*
7 import jp.sfjp.gokigen.a01c.utils.SimpleHttpClient
8 import org.json.JSONObject
9
10 class ThetaCameraStatusWatcher : ICameraStatus, ICameraStatusWatcher
11 {
12     private val httpClient = SimpleHttpClient()
13     private var whileFetching = false
14     private var currentBatteryLevel : Double = 0.0
15     private var currentCaptureStatus : String = ""
16     private var currentBatteryStatus : String = ""
17
18
19     override fun getStatusList(key: String): List<String>
20     {
21         return (ArrayList<String>())
22     }
23
24     override fun getStatus(key: String): String
25     {
26         return ("")
27     }
28
29     override fun startStatusWatch(notifier: ICameraStatusUpdateNotify)
30     {
31         if (whileFetching)
32         {
33             Log.v(TAG, "startStatusWatch() already starting.")
34             return
35         }
36         whileFetching = true
37         try
38         {
39             val thread = Thread {
40                 try
41                 {
42                     val getStateUrl = "http://192.168.1.1/osc/state"
43                     Log.v(TAG, " >>>>> START STATUS WATCH : $getStateUrl")
44                     while (whileFetching)
45                     {
46                         val response: String? = httpClient.httpPostWithHeader(getStateUrl, "", null, "application/json;charset=utf-8", timeoutMs)
47                         if (!(response.isNullOrEmpty()))
48                         {
49                             // ステータスデータ受信
50                             checkStatus(response, notifier)
51                         }
52                         try
53                         {
54                             Thread.sleep(300)
55                         }
56                         catch (e: Exception)
57                         {
58                             e.printStackTrace()
59                         }
60                     }
61                 }
62                 catch (e: Exception)
63                 {
64                     e.printStackTrace()
65                 }
66             }
67             thread.start()
68         }
69         catch (e: Exception)
70         {
71             e.printStackTrace()
72         }
73     }
74
75     private fun checkStatus(response : String, notifier: ICameraStatusUpdateNotify)
76     {
77         try
78         {
79             //Log.v(TAG, " STATUS : $response")
80             val stateObject = JSONObject(response).getJSONObject("state")
81             try
82             {
83                 val batteryLevel = stateObject.getDouble(THETA_BATTERY_LEVEL)
84                 if (batteryLevel != currentBatteryLevel)
85                 {
86                     Log.v(TAG, " BATTERY : $currentBatteryLevel => $batteryLevel")
87                     currentBatteryLevel = batteryLevel
88                     notifier.updateRemainBattery(currentBatteryLevel)
89                 }
90             }
91             catch (e : Exception)
92             {
93                 e.printStackTrace()
94             }
95
96             try
97             {
98                 val batteryStatus = stateObject.getString(THETA_CAPTURE_STATUS)
99                 if (batteryStatus != currentBatteryStatus)
100                 {
101                     Log.v(TAG, " BATTERY STATUS : $currentBatteryStatus => $batteryStatus")
102                     currentBatteryStatus = batteryStatus
103                 }
104             }
105             catch (e : Exception)
106             {
107                 e.printStackTrace()
108             }
109
110             try
111             {
112                 val captureStatus = stateObject.getString(THETA_CAPTURE_STATUS)
113                 if (captureStatus != currentCaptureStatus)
114                 {
115                     Log.v(TAG, " CAPTURE STATUS : $currentCaptureStatus -> $captureStatus")
116                     if (captureStatus != "idle")
117                     {
118                         notifier.updateCameraStatus(captureStatus)
119                     }
120                     currentCaptureStatus = captureStatus
121                 }
122             }
123             catch (e : Exception)
124             {
125                 e.printStackTrace()
126             }
127         }
128         catch (ee : Exception)
129         {
130             ee.printStackTrace()
131         }
132     }
133
134     override fun stopStatusWatch()
135     {
136         whileFetching = false
137     }
138
139     companion object
140     {
141         private val TAG = ThetaCameraStatusWatcher::class.java.simpleName
142         private const val timeoutMs = 1500
143     }
144
145 }