OSDN Git Service

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