1 package jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.connection
3 import android.content.*
4 import android.net.ConnectivityManager
5 import android.net.wifi.WifiManager
6 import android.provider.Settings
7 import android.util.Log
8 import androidx.appcompat.app.AlertDialog
9 import androidx.appcompat.app.AppCompatActivity
10 import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraConnection
11 import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraConnectionStatus
12 import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraStatusReceiver
13 import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.IPixproInternalInterfaces
14 import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.status.PixproStatusChecker
15 import jp.osdn.gokigen.gokigenassets.constants.IStringResourceConstantConvert
16 import java.lang.Exception
17 import java.util.concurrent.Executor
18 import java.util.concurrent.Executors
20 class PixproCameraConnection(private val context: AppCompatActivity, private val statusReceiver: ICameraStatusReceiver, private val interfaceProvider : IPixproInternalInterfaces, private val statusChecker: PixproStatusChecker) : ICameraConnection
24 private val TAG = PixproCameraConnection::class.java.simpleName
26 private val connectionReceiver: BroadcastReceiver
27 private val cameraExecutor: Executor = Executors.newFixedThreadPool(1)
28 private var connectionStatus: ICameraConnectionStatus.CameraConnectionStatus = ICameraConnectionStatus.CameraConnectionStatus.UNKNOWN
31 Log.v(TAG, "PixproConnection()")
32 connectionReceiver = object : BroadcastReceiver() {
33 override fun onReceive(context: Context, intent: Intent)
35 onReceiveBroadcastOfConnection(context, intent)
44 private fun onReceiveBroadcastOfConnection(context: Context, intent: Intent)
46 statusReceiver.onStatusNotify(context.getString(IStringResourceConstantConvert.ID_STRING_CONNECT_CHECK_WIFI))
47 Log.v(TAG, context.getString(IStringResourceConstantConvert.ID_STRING_CONNECT_CHECK_WIFI))
50 val action = intent.action
53 Log.v(TAG, "intent.getAction() : null")
57 @Suppress("DEPRECATION")
58 if (action == ConnectivityManager.CONNECTIVITY_ACTION)
60 Log.v(TAG, "onReceiveBroadcastOfConnection() : CONNECTIVITY_ACTION")
61 val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
62 val info = wifiManager.connectionInfo
63 if (wifiManager.isWifiEnabled && info != null)
65 Log.v(TAG, "Network ID is " + info.networkId)
66 // 自動接続が指示されていた場合は、カメラとの接続処理を行う
73 Log.v(TAG, "NETWORK INFO IS NULL.")
77 Log.v(TAG, "isWifiEnabled : " + wifiManager.isWifiEnabled + " NetworkId : " + info.networkId)
84 Log.w(TAG, "onReceiveBroadcastOfConnection() EXCEPTION" + e.message)
89 fun startWatchWifiStatus(context: Context)
91 Log.v(TAG, "startWatchWifiStatus()")
92 statusReceiver.onStatusNotify("prepare")
93 val filter = IntentFilter()
94 filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION)
95 @Suppress("DEPRECATION")
96 filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION)
97 context.registerReceiver(connectionReceiver, filter)
100 fun stopWatchWifiStatus(context: Context)
102 Log.v(TAG, "stopWatchWifiStatus()")
103 context.unregisterReceiver(connectionReceiver)
107 fun disconnect(powerOff: Boolean)
109 Log.v(TAG, "disconnect()")
110 disconnectFromCamera(powerOff)
111 connectionStatus = ICameraConnectionStatus.CameraConnectionStatus.DISCONNECTED
112 statusReceiver.onCameraDisconnected()
117 Log.v(TAG, "connect()")
121 override fun alertConnectingFailed(message: String?)
123 Log.v(TAG, "alertConnectingFailed() : $message")
126 val builder: AlertDialog.Builder = AlertDialog.Builder(context)
127 .setTitle(context.getString(IStringResourceConstantConvert.ID_STRING_DIALOG_TITLE_CONNECT_FAILED))
129 .setPositiveButton(context.getString(IStringResourceConstantConvert.ID_STRING_DIALOG_BUTTON_RETRY)) { _, _ -> connect() }
130 .setNeutralButton(IStringResourceConstantConvert.ID_STRING_DIALOG_BUTTON_NETWORK_SETTINGS) { _, _ ->
134 context.startActivity(Intent(Settings.ACTION_WIFI_SETTINGS))
136 catch (ex: ActivityNotFoundException)
138 // Activity が存在しなかった...設定画面が起動できなかった
139 Log.v(TAG, "android.content.ActivityNotFoundException...")
141 // この場合は、再試行と等価な動きとする
149 context.runOnUiThread { builder.show() }
151 catch (e : Exception)
157 fun getConnectionStatus(): ICameraConnectionStatus.CameraConnectionStatus
159 Log.v(TAG, "getConnectionStatus()")
160 return connectionStatus
163 override fun forceUpdateConnectionStatus(status: ICameraConnectionStatus.CameraConnectionStatus)
165 Log.v(TAG, "forceUpdateConnectionStatus()")
166 connectionStatus = status
169 private fun disconnectFromCamera(powerOff: Boolean)
171 Log.v(TAG, "disconnectFromCamera()")
174 cameraExecutor.execute(PixproCameraDisconnectSequence(context, powerOff, interfaceProvider, statusChecker))
182 private fun connectToCamera()
184 Log.v(TAG, "connectToCamera()")
185 connectionStatus = ICameraConnectionStatus.CameraConnectionStatus.CONNECTING
188 cameraExecutor.execute(PixproCameraConnectSequence(context, statusReceiver, this, interfaceProvider, statusChecker))
192 Log.v(TAG, "connectToCamera() EXCEPTION : " + e.message)