OSDN Git Service

0760e0fdf45939dd5ba6593d09a4ef007b471189
[gokigen/A01d.git] / app / src / main / java / net / osdn / gokigen / a01d / camera / ricohgr2 / wrapper / connection / RicohGr2Connection.java
1 package net.osdn.gokigen.a01d.camera.ricohgr2.wrapper.connection;
2
3 import android.app.Activity;
4 import android.content.BroadcastReceiver;
5 import android.content.Context;
6 import android.content.DialogInterface;
7 import android.content.Intent;
8 import android.content.IntentFilter;
9 import android.net.ConnectivityManager;
10 import android.net.wifi.WifiInfo;
11 import android.net.wifi.WifiManager;
12 import android.provider.Settings;
13 import android.util.Log;
14
15 import net.osdn.gokigen.a01d.R;
16 import net.osdn.gokigen.a01d.camera.ICameraConnection;
17 import net.osdn.gokigen.a01d.camera.ICameraStatusReceiver;
18
19 import java.util.concurrent.Executor;
20 import java.util.concurrent.Executors;
21
22 import androidx.annotation.NonNull;
23 import androidx.appcompat.app.AlertDialog;
24
25
26 /**
27  *
28  *
29  */
30 public class RicohGr2Connection implements ICameraConnection
31 {
32     private final String TAG = toString();
33     private final Activity context;
34     private final ICameraStatusReceiver statusReceiver;
35     private final BroadcastReceiver connectionReceiver;
36     //private final ConnectivityManager connectivityManager;
37     private final Executor cameraExecutor = Executors.newFixedThreadPool(1);
38     //private final Handler networkConnectionTimeoutHandler;
39     //private static final int MESSAGE_CONNECTIVITY_TIMEOUT = 1;
40     private CameraConnectionStatus connectionStatus = CameraConnectionStatus.UNKNOWN;
41
42
43     /**
44      *
45      *
46      */
47     public RicohGr2Connection(@NonNull final Activity context, @NonNull final ICameraStatusReceiver statusReceiver)
48     {
49         Log.v(TAG, "RicohGr2Connection()");
50         this.context = context;
51         this.statusReceiver = statusReceiver;
52         connectionReceiver = new BroadcastReceiver()
53         {
54             @Override
55             public void onReceive(Context context, Intent intent)
56             {
57                 onReceiveBroadcastOfConnection(context, intent);
58             }
59         };
60     }
61
62     /**
63      *
64      *
65      */
66     private void onReceiveBroadcastOfConnection(Context context, Intent intent)
67     {
68         statusReceiver.onStatusNotify(context.getString(R.string.connect_check_wifi));
69         Log.v(TAG,context.getString(R.string.connect_check_wifi));
70
71         String action = intent.getAction();
72         if (action == null)
73         {
74             //
75             Log.v(TAG, "intent.getAction() : null");
76             return;
77         }
78
79         try
80         {
81             if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION))
82             {
83                 Log.v(TAG, "onReceiveBroadcastOfConnection() : CONNECTIVITY_ACTION");
84
85                 WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
86                 if (wifiManager != null) {
87                     WifiInfo info = wifiManager.getConnectionInfo();
88                     if (wifiManager.isWifiEnabled() && info != null)
89                     {
90                         if (info.getNetworkId() != -1)
91                         {
92                             Log.v(TAG, "Network ID is -1, there is no currently connected network.");
93                         }
94                         // 自動接続が指示されていた場合は、カメラとの接続処理を行う
95                         connectToCamera();
96                     } else {
97                         if (info == null)
98                         {
99                             Log.v(TAG, "NETWORK INFO IS NULL.");
100                         } else {
101                             Log.v(TAG, "isWifiEnabled : " + wifiManager.isWifiEnabled() + " NetworkId : " + info.getNetworkId());
102                         }
103                     }
104                 }
105             }
106         }
107         catch (Exception e)
108         {
109             Log.w(TAG, "onReceiveBroadcastOfConnection() EXCEPTION" + e.getMessage());
110             e.printStackTrace();
111         }
112     }
113
114     /**
115      *
116      *
117      */
118     @Override
119     public void startWatchWifiStatus(Context context)
120     {
121         Log.v(TAG, "startWatchWifiStatus()");
122         statusReceiver.onStatusNotify("prepare");
123
124         IntentFilter filter = new IntentFilter();
125         filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
126         filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
127         context.registerReceiver(connectionReceiver, filter);
128     }
129
130     /**
131      *
132      *
133      */
134     @Override
135     public void stopWatchWifiStatus(Context context)
136     {
137         Log.v(TAG, "stopWatchWifiStatus()");
138         context.unregisterReceiver(connectionReceiver);
139         disconnect(false);
140     }
141
142     /**
143      *
144      *
145      */
146     @Override
147     public void disconnect(boolean powerOff)
148     {
149         Log.v(TAG, "disconnect()");
150         disconnectFromCamera(powerOff);
151         connectionStatus = CameraConnectionStatus.DISCONNECTED;
152         statusReceiver.onCameraDisconnected();
153     }
154
155
156     /**
157      *
158      *
159      */
160     @Override
161     public void connect()
162     {
163         Log.v(TAG, "connect()");
164         connectToCamera();
165     }
166
167
168     /**
169      *
170      *
171      */
172     @Override
173     public void alertConnectingFailed(String message)
174     {
175         Log.v(TAG, "alertConnectingFailed() : " + message);
176         final AlertDialog.Builder builder = new AlertDialog.Builder(context)
177                 .setTitle(context.getString(R.string.dialog_title_connect_failed_ricoh))
178                 .setMessage(message)
179                 .setPositiveButton(context.getString(R.string.dialog_title_button_retry), new DialogInterface.OnClickListener() {
180                     @Override
181                     public void onClick(DialogInterface dialog, int which)
182                     {
183                         connect();
184                     }
185                 })
186                 .setNeutralButton(R.string.dialog_title_button_network_settings, new DialogInterface.OnClickListener() {
187                     @Override
188                     public void onClick(DialogInterface dialog, int which)
189                     {
190                         try
191                         {
192                             // Wifi 設定画面を表示する
193                             context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
194                         }
195                         catch (android.content.ActivityNotFoundException ex)
196                         {
197                             // Activity が存在しなかった...設定画面が起動できなかった
198                             Log.v(TAG, "android.content.ActivityNotFoundException...");
199
200                             // この場合は、再試行と等価な動きとする
201                             connect();
202                         }
203                         catch (Exception e)
204                         {
205                             e.printStackTrace();
206                         }
207                     }
208                 });
209         context.runOnUiThread(new Runnable()
210         {
211             @Override
212             public void run()
213             {
214                 builder.show();
215             }
216         });
217     }
218
219     @Override
220     public CameraConnectionStatus getConnectionStatus()
221     {
222         Log.v(TAG, "getConnectionStatus()");
223         return (connectionStatus);
224     }
225
226     /**
227      *
228      *
229      */
230     @Override
231     public void forceUpdateConnectionStatus(CameraConnectionStatus status)
232     {
233         Log.v(TAG, "forceUpdateConnectionStatus()");
234         connectionStatus = status;
235     }
236
237     /**
238      * カメラとの切断処理
239      */
240     private void disconnectFromCamera(final boolean powerOff)
241     {
242         Log.v(TAG, "disconnectFromCamera()");
243         try
244         {
245             cameraExecutor.execute(new RicohGr2CameraDisconnectSequence(context, powerOff));
246         }
247         catch (Exception e)
248         {
249             e.printStackTrace();
250         }
251     }
252
253     /**
254      * カメラとの接続処理
255      */
256     private void connectToCamera()
257     {
258         Log.v(TAG, "connectToCamera()");
259         connectionStatus = CameraConnectionStatus.CONNECTING;
260         try
261         {
262             cameraExecutor.execute(new RicohGr2CameraConnectSequence(context, statusReceiver, this));
263         }
264         catch (Exception e)
265         {
266             Log.v(TAG, "connectToCamera() EXCEPTION : " + e.getMessage());
267             e.printStackTrace();
268         }
269     }
270 }