OSDN Git Service

撮影画像自動転送機能のいったん登録。
[gokigen/PKRemote.git] / app / src / main / java / net / osdn / gokigen / pkremote / scene / CameraSceneUpdater.java
1 package net.osdn.gokigen.pkremote.scene;
2
3 import android.util.Log;
4 import android.widget.ImageButton;
5 import android.widget.TextView;
6
7 import com.google.android.material.bottomnavigation.BottomNavigationView;
8
9 import net.osdn.gokigen.pkremote.R;
10 import net.osdn.gokigen.pkremote.calendar.CalendarFragment;
11 import net.osdn.gokigen.pkremote.camera.interfaces.control.ICameraConnection;
12 import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraContentsRecognizer;
13 import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraStatusReceiver;
14 import net.osdn.gokigen.pkremote.camera.interfaces.IInterfaceProvider;
15 import net.osdn.gokigen.pkremote.logcat.LogCatFragment;
16 import net.osdn.gokigen.pkremote.playback.ImageGridViewFragment;
17 import net.osdn.gokigen.pkremote.preference.olympus.OpcPreferenceFragment;
18 import net.osdn.gokigen.pkremote.preference.ricohgr2.RicohGr2PreferenceFragment;
19 import net.osdn.gokigen.pkremote.transfer.AutoTransferFragment;
20
21 import androidx.annotation.NonNull;
22 import androidx.appcompat.app.AppCompatActivity;
23 import androidx.core.content.res.ResourcesCompat;
24 import androidx.fragment.app.FragmentTransaction;
25 import androidx.preference.PreferenceFragmentCompat;
26
27 /**
28  *
29  *
30  */
31 public class CameraSceneUpdater implements ICameraStatusReceiver, IChangeScene, ICameraContentsRecognizer.ICameraContentsListCallback
32 {
33     private final String TAG = toString();
34     private final AppCompatActivity activity;
35     private final BottomNavigationView bottomNavigationView;
36     private IInterfaceProvider interfaceProvider;
37     //private IStatusViewDrawer statusViewDrawer;
38     private ICameraStatusReceiver anotherStatusReceiver = null;
39     private PreferenceFragmentCompat preferenceFragment = null;
40     private LogCatFragment logCatFragment = null;
41     private CalendarFragment calendarFragment = null;
42     private ImageGridViewFragment gridViewFragment = null;
43     private AutoTransferFragment autoTransferFragment = null;
44
45     public static CameraSceneUpdater newInstance(@NonNull AppCompatActivity activity)
46     {
47         return (new CameraSceneUpdater(activity));
48     }
49
50     /**
51      * コンストラクタ
52      */
53     private CameraSceneUpdater(@NonNull AppCompatActivity activity)
54     {
55         this.activity = activity;
56         this.bottomNavigationView = activity.findViewById(R.id.navigation);
57     }
58
59     /**
60      * 一番最初のフラグメントを表示する
61      */
62     public void changeFirstFragment(@NonNull IInterfaceProvider interfaceProvider)
63     {
64         this.interfaceProvider = interfaceProvider;
65         try
66         {
67             bottomNavigationView.setSelectedItemId(R.id.navigation_calendar);
68         }
69         catch (Exception e)
70         {
71             e.printStackTrace();
72         }
73
74         // 初期画面(カレンダー画面)へ遷移
75         changeSceneToCalendar();
76     }
77
78 /*
79     //  CameraSceneUpdater
80     public void registerInterface(@NonNull IStatusViewDrawer statusViewDrawer, @NonNull IInterfaceProvider interfaceProvider)
81     {
82         Log.v(TAG, "registerInterface()");
83         this.statusViewDrawer = statusViewDrawer;
84         this.interfaceProvider = interfaceProvider;
85     }
86 */
87
88     // ICameraStatusReceiver
89     @Override
90     public void onStatusNotify(String message)
91     {
92         Log.v(TAG, " CONNECTION MESSAGE : " + message);
93         try {
94 /*
95             if (statusViewDrawer != null)
96             {
97                 statusViewDrawer.updateStatusView(message);
98                 ICameraConnection connection = getCameraConnection(interfaceProvider.getCammeraConnectionMethod());
99                 if (connection != null) {
100                     statusViewDrawer.updateConnectionStatus(connection.getConnectionStatus());
101                 }
102             }
103 */
104             if (anotherStatusReceiver != null)
105             {
106                 anotherStatusReceiver.onStatusNotify(message);
107             }
108         } catch (Exception e) {
109             e.printStackTrace();
110         }
111     }
112
113     // ICameraStatusReceiver
114     @Override
115     public void onCameraConnected() {
116         Log.v(TAG, "onCameraConnected()");
117         updateConnectionStatus(activity.getString(R.string.connect_connected), ICameraConnection.CameraConnectionStatus.CONNECTED);
118         try {
119             ICameraConnection connection = getCameraConnection(interfaceProvider.getCammeraConnectionMethod());
120             if (connection != null) {
121                 connection.forceUpdateConnectionStatus(ICameraConnection.CameraConnectionStatus.CONNECTED);
122             }
123 /*
124             if (statusViewDrawer != null)
125             {
126                 statusViewDrawer.updateConnectionStatus(ICameraConnection.CameraConnectionStatus.CONNECTED);
127
128                 // ライブビューの開始... 今回は手動化。
129                 //statusViewDrawer.startLiveView();
130             }
131 */
132             if (anotherStatusReceiver != null) {
133                 anotherStatusReceiver.onCameraConnected();
134             }
135             ICameraContentsRecognizer recognizer = interfaceProvider.getCameraContentsRecognizer();
136             if (recognizer != null) {
137                 // カメラ内のコンテンツ一覧を作成するように指示する
138                 recognizer.getRemoteCameraContentsList(true, this);
139             }
140         } catch (Exception e) {
141             e.printStackTrace();
142         }
143     }
144
145     // ICameraStatusReceiver
146     @Override
147     public void onCameraDisconnected() {
148         Log.v(TAG, "onCameraDisconnected()");
149         String message = activity.getString(R.string.camera_disconnected);
150         updateConnectionStatus(message, ICameraConnection.CameraConnectionStatus.DISCONNECTED);
151         try {
152 /*
153             if (statusViewDrawer != null) {
154                 statusViewDrawer.updateStatusView(activity.getString(R.string.camera_disconnected));
155                 statusViewDrawer.updateConnectionStatus(ICameraConnection.CameraConnectionStatus.DISCONNECTED);
156             }
157 */
158             if (anotherStatusReceiver != null) {
159                 anotherStatusReceiver.onCameraDisconnected();
160             }
161         } catch (Exception e) {
162             e.printStackTrace();
163         }
164     }
165
166     // ICameraStatusReceiver
167     @Override
168     public void onCameraOccursException(String message, Exception e) {
169         Log.v(TAG, "onCameraOccursException() " + message);
170         try {
171             ICameraConnection.CameraConnectionStatus connectionStatus;  // = ICameraConnection.CameraConnectionStatus.UNKNOWN;
172
173             e.printStackTrace();
174             ICameraConnection connection = getCameraConnection(interfaceProvider.getCammeraConnectionMethod());
175             if (connection != null) {
176                 connectionStatus = connection.getConnectionStatus();
177                 connection.alertConnectingFailed(message + " " + e.getLocalizedMessage());
178                 updateConnectionStatus(message, connectionStatus);
179             }
180 /*
181             if (statusViewDrawer != null) {
182                 statusViewDrawer.updateStatusView(message);
183                 if (connection != null) {
184                     statusViewDrawer.updateConnectionStatus(connectionStatus);
185                 }
186             }
187 */
188             if (anotherStatusReceiver != null) {
189                 anotherStatusReceiver.onCameraOccursException(message, e);
190             }
191         } catch (Exception ee) {
192             ee.printStackTrace();
193         }
194     }
195
196     /**
197      * カメラとの接続状態を表示更新する
198      */
199     private void updateConnectionStatus(final String message, final ICameraConnection.CameraConnectionStatus status) {
200         try {
201             final int resId;
202             switch (status) {
203                 case CONNECTED:
204                     resId = R.drawable.ic_cloud_done_black_24dp;
205                     break;
206                 case CONNECTING:
207                     resId = R.drawable.ic_cloud_queue_black_24dp;
208                     break;
209                 case DISCONNECTED:
210                     resId = R.drawable.ic_cloud_off_black_24dp;
211                     break;
212                 case UNKNOWN:
213                 default:
214                     resId = R.drawable.ic_cloud_queue_grey_24dp;
215                     break;
216             }
217             final TextView messageArea = activity.findViewById(R.id.message);
218             final ImageButton buttonArea = activity.findViewById(R.id.button_wifi_connect);
219             activity.runOnUiThread(new Runnable() {
220                 @Override
221                 public void run() {
222                     try {
223                         if (buttonArea != null) {
224                             buttonArea.setImageDrawable(ResourcesCompat.getDrawable(activity.getResources(), resId, null));
225                             buttonArea.invalidate();
226                         }
227                         if ((messageArea != null) && (message != null)) {
228                             messageArea.setText(message);
229                             messageArea.invalidate();
230                         }
231                     } catch (Exception e) {
232                         e.printStackTrace();
233                     }
234                 }
235             });
236         } catch (Exception e) {
237             e.printStackTrace();
238         }
239     }
240
241     //  IChangeScene
242     @Override
243     public void changeSceneToCameraPropertyList()
244     {
245 /*
246         try
247         {
248             ICameraConnection.CameraConnectionMethod method = interfaceProvider.getCammeraConnectionMethod();
249             ICameraConnection connection = getCameraConnection(method);
250             if (method == ICameraConnection.CameraConnectionMethod.RICOH)
251             {
252                 // OPCカメラでない場合には、「OPCカメラのみ有効です」表示をして画面遷移させない
253                 Toast.makeText(getApplicationContext(), getText(R.string.only_opc_feature), Toast.LENGTH_SHORT).show();
254             }
255             else if (method == ICameraConnection.CameraConnectionMethod.SONY)
256             {
257                 // OPCカメラでない場合には、「OPCカメラのみ有効です」表示をして画面遷移させない
258                 Toast.makeText(getApplicationContext(), getText(R.string.only_opc_feature), Toast.LENGTH_SHORT).show();
259             }
260             else
261             {
262                 // OPC カメラの場合...
263                 if (connection != null)
264                 {
265                     ICameraConnection.CameraConnectionStatus status = connection.getConnectionStatus();
266                     if (status == ICameraConnection.CameraConnectionStatus.CONNECTED)
267                     {
268                         if (propertyListFragment == null)
269                         {
270                             propertyListFragment = OlyCameraPropertyListFragment.newInstance(this, interfaceProvider.getOlympusInterface().getCameraPropertyProvider());
271                         }
272                         FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
273                         transaction.replace(R.id.fragment1, propertyListFragment);
274                         // backstackに追加
275                         transaction.addToBackStack(null);
276                         transaction.commit();
277                     }
278                 }
279             }
280         }
281         catch (Exception e)
282         {
283             e.printStackTrace();
284         }
285 */
286     }
287
288     //  IChangeScene
289     @Override
290     public void changeSceneToConfiguration()
291     {
292         try {
293             if (preferenceFragment == null) {
294                 try {
295                     preferenceFragment = RicohGr2PreferenceFragment.newInstance(activity, this);
296                     ICameraConnection.CameraConnectionMethod connectionMethod = interfaceProvider.getCammeraConnectionMethod();
297                     if (connectionMethod == ICameraConnection.CameraConnectionMethod.RICOH) {
298                         preferenceFragment = RicohGr2PreferenceFragment.newInstance(activity, this);
299                         //} else if (connectionMethod == ICameraConnection.CameraConnectionMethod.SONY) {
300                         //    preferenceFragment = SonyPreferenceFragment.newInstance(this, this);
301                     } else //  if (connectionMethod == ICameraConnection.CameraConnectionMethod.OPC)
302                     {
303                         preferenceFragment = OpcPreferenceFragment.newInstance(activity, interfaceProvider, this);
304                     }
305                 } catch (Exception e) {
306                     e.printStackTrace();
307                     //preferenceFragment = SonyPreferenceFragment.newInstance(this, this);
308                 }
309             }
310
311             FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction();
312             transaction.replace(R.id.fragment1, preferenceFragment);
313             // backstackに追加
314             transaction.addToBackStack(null);
315             transaction.commit();
316         } catch (Exception e) {
317             e.printStackTrace();
318         }
319     }
320
321     //  IChangeScene
322     @Override
323     public void changeCameraConnection()
324     {
325         if (interfaceProvider == null) {
326             Log.v(TAG, "changeCameraConnection() : interfaceProvider is NULL");
327             return;
328         }
329         try {
330             interfaceProvider.resetCameraConnectionMethod();
331             ICameraConnection connection = interfaceProvider.getCameraConnection();
332             if (connection != null) {
333                 ICameraConnection.CameraConnectionStatus status = connection.getConnectionStatus();
334                 if (status == ICameraConnection.CameraConnectionStatus.CONNECTED) {
335                     // 接続中のときには切断する
336                     connection.disconnect(false);
337                     return;
338                 }
339                 // 接続中でない時は、接続中にする
340                 connection.startWatchWifiStatus(activity);
341             }
342         } catch (Exception e) {
343             e.printStackTrace();
344         }
345     }
346
347     //  IChangeScene
348     @Override
349     public void reloadRemoteImageContents()
350     {
351         try
352         {
353             ICameraContentsRecognizer recognizer = interfaceProvider.getCameraContentsRecognizer();
354             if (recognizer != null) {
355                 // カメラ内のコンテンツ一覧を作成するように指示する
356                 recognizer.getRemoteCameraContentsList(true, this);
357             }
358         } catch (Exception e) {
359             e.printStackTrace();
360         }
361     }
362
363     //  IChangeScene
364     @Override
365     public void changeSceneToDebugInformation()
366     {
367         if (logCatFragment == null) {
368             logCatFragment = LogCatFragment.newInstance();
369         }
370         FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction();
371         transaction.replace(R.id.fragment1, logCatFragment);
372         // backstackに追加
373         transaction.addToBackStack(null);
374         transaction.commit();
375     }
376
377     //  IChangeScene
378     @Override
379     public void changeSceneToApiList()
380     {
381 /*
382         if (sonyApiListFragmentSony == null)
383         {
384             sonyApiListFragmentSony = SonyCameraApiListFragment.newInstance(interfaceProvider);
385         }
386         FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
387         transaction.replace(R.id.fragment1, sonyApiListFragmentSony);
388         // backstackに追加
389         transaction.addToBackStack(null);
390         transaction.commit();
391 */
392     }
393
394     //  IChangeScene
395     @Override
396     public void changeSceneToAutoTransfer()
397     {
398         if (autoTransferFragment == null)
399         {
400             autoTransferFragment = AutoTransferFragment.newInstance(activity, interfaceProvider);
401         }
402         FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction();
403         transaction.replace(R.id.fragment1, autoTransferFragment);
404         // backstackに追加
405         transaction.addToBackStack(null);
406         transaction.commit();
407     }
408
409     //  IChangeScene
410     @Override
411     public void changeSceneToCalendar()
412     {
413         if (calendarFragment == null)
414         {
415             calendarFragment = CalendarFragment.newInstance(activity, this, interfaceProvider);
416         }
417         FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction();
418         transaction.replace(R.id.fragment1, calendarFragment);
419         // backstackに追加
420         transaction.addToBackStack(null);
421         transaction.commit();
422     }
423
424     //  IChangeScene
425     @Override
426     public void changeScenceDateSelected(String filterLabel)
427     {
428         Log.v(TAG, "changeScenceDateSelected()");
429
430         bottomNavigationView.setSelectedItemId(R.id.navigation_photo_library);
431         changeScenceToImageList(filterLabel);
432     }
433
434     /**
435      * 画像一覧画面を開く
436      */
437     //  IChangeScene
438     @Override
439     public void changeScenceToImageList()
440     {
441         changeScenceToImageList(null);
442     }
443
444     /**
445      *
446      *
447      */
448     private void changeScenceToImageList(String filterLabel)
449     {
450         Log.v(TAG, "changeScenceToImageList() : " + filterLabel);
451         try
452         {
453             if (gridViewFragment == null)
454             {
455                 gridViewFragment = ImageGridViewFragment.newInstance(interfaceProvider);
456             }
457             gridViewFragment.setFilterLabel(filterLabel);
458             FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction();
459             transaction.replace(R.id.fragment1, gridViewFragment);
460             // backstackに追加
461             transaction.addToBackStack(null);
462             transaction.commit();
463         }
464         catch (Exception e)
465         {
466             e.printStackTrace();
467         }
468     }
469
470     //  IChangeScene
471     @Override
472     public void exitApplication()
473     {
474         Log.v(TAG, "exitApplication()");
475         try
476         {
477             ICameraConnection connection = getCameraConnection(interfaceProvider.getCammeraConnectionMethod());
478             if (connection != null)
479             {
480                 connection.disconnect(true);
481             }
482             activity.finish();
483         }
484         catch (Exception e)
485         {
486             e.printStackTrace();
487         }
488     }
489
490     @Override
491     public void updateBottomNavigationMenu()
492     {
493         try
494         {
495             // ナビゲーション部分の選択状態をしたい...
496             int changeId = 0;
497             if (calendarFragment.isFragmentActive())
498             {
499                 changeId = R.id.navigation_calendar;
500             }
501             else if (gridViewFragment.isFragmentActive())
502             {
503                 changeId = R.id.navigation_photo_library;
504             }
505             if ((bottomNavigationView != null)&&(changeId != 0))
506             {
507                 bottomNavigationView.setSelectedItemId(changeId);
508             }
509         }
510         catch (Exception e)
511         {
512             e.printStackTrace();
513         }
514     }
515
516     @Override
517     public void setAnotherStatusReceiver(ICameraStatusReceiver statusReceiver)
518     {
519         this.anotherStatusReceiver = statusReceiver;
520     }
521
522     private ICameraConnection getCameraConnection(ICameraConnection.CameraConnectionMethod method)
523     {
524         Log.v(TAG, "method : " + method);
525         return (interfaceProvider.getCameraConnection());
526     }
527
528     @Override
529     public void contentsListCreated(int nofContents)
530     {
531         Log.v(TAG, "contentsListCreated() : " + nofContents);
532
533         // カレンダー画面のリフレッシュを行いたい (かなり無理やり...)
534         if ((calendarFragment != null)&&(calendarFragment.isFragmentActive()))
535         {
536             calendarFragment.contentsListCreated(nofContents);
537         }
538     }
539 }