OSDN Git Service

タイムアウト値を伸ばす。
[gokigen/PKRemote.git] / app / src / main / java / net / osdn / gokigen / pkremote / MainActivity.java
1 package net.osdn.gokigen.pkremote;
2
3 import android.Manifest;
4 import android.content.SharedPreferences;
5 import android.content.pm.PackageManager;
6 import android.graphics.Color;
7 import android.graphics.Typeface;
8 import android.os.Bundle;
9
10 import androidx.annotation.NonNull;
11
12 import com.google.android.material.bottomnavigation.BottomNavigationView;
13
14 import androidx.annotation.Nullable;
15 import androidx.appcompat.app.ActionBar;
16 import androidx.appcompat.app.AppCompatActivity;
17 import androidx.core.app.ActivityCompat;
18 import androidx.core.content.ContextCompat;
19 import androidx.preference.PreferenceManager;
20
21 import android.os.Vibrator;
22 import android.util.Log;
23 import android.view.MenuItem;
24 import android.view.View;
25 import android.view.WindowManager;
26 import android.widget.AdapterView;
27 import android.widget.ArrayAdapter;
28 import android.widget.ImageButton;
29 import android.widget.Spinner;
30 import android.widget.TextView;
31
32 import net.osdn.gokigen.pkremote.camera.CameraInterfaceProvider;
33 import net.osdn.gokigen.pkremote.camera.interfaces.IInterfaceProvider;
34 import net.osdn.gokigen.pkremote.camera.interfaces.control.ICameraConnection;
35 import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor;
36 import net.osdn.gokigen.pkremote.scene.CameraSceneUpdater;
37
38 /**
39  *
40  *
41  */
42 public class MainActivity extends AppCompatActivity implements View.OnClickListener, IInformationReceiver, ICardSlotSelector, AdapterView.OnItemSelectedListener
43 {
44     private final String TAG = toString();
45     private IInterfaceProvider interfaceProvider = null;
46     private CameraSceneUpdater scenceUpdater = null;
47
48     private ImageButton mImageConnectButton = null;
49     private ImageButton mReloadButton = null;
50     private Spinner mCardSlotSelection = null;
51     private ICardSlotSelectionReceiver slotSelectionReceiver = null;
52     //private TextView mTextMessage = null;
53
54     private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
55             = new BottomNavigationView.OnNavigationItemSelectedListener() {
56
57         @Override
58         public boolean onNavigationItemSelected(@NonNull MenuItem item) {
59             switch (item.getItemId()) {
60                 case R.id.navigation_photo_library:
61                     scenceUpdater.changeScenceToImageList();
62                     return (true);
63                 case R.id.navigation_calendar:
64                     scenceUpdater.changeSceneToCalendar();
65                     return (true);
66                 case R.id.navigation_auto_transfer:
67                     scenceUpdater.changeSceneToAutoTransfer();
68                     return (true);
69                 case R.id.navigation_settings:
70                     scenceUpdater.changeSceneToConfiguration();
71                     return (true);
72             }
73             return (false);
74         }
75     };
76
77     /**
78      *
79      *
80      */
81     @Override
82     public void onBackPressed()
83     {
84         //Log.v(TAG, "onBackPressed()");
85         super.onBackPressed();
86         runOnUiThread(new Runnable() {
87             @Override
88             public void run()
89             {
90                 if (scenceUpdater != null)
91                 {
92                     scenceUpdater.updateBottomNavigationMenu();
93                 }
94             }
95         });
96     }
97
98     /**
99      *
100      *
101      */
102     @Override
103     protected void onCreate(Bundle savedInstanceState)
104     {
105         super.onCreate(savedInstanceState);
106         setContentView(R.layout.activity_main);
107         try
108         {
109             ActionBar bar = getSupportActionBar();
110             if (bar != null)
111             {
112                 // タイトルバーは表示しない
113                 bar.hide();
114             }
115         }
116         catch (Exception e)
117         {
118             e.printStackTrace();
119         }
120         getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
121
122         //mTextMessage = findViewById(R.id.message);
123         mImageConnectButton = findViewById(R.id.button_wifi_connect);
124         mReloadButton = findViewById(R.id.button_reload);
125         mCardSlotSelection = findViewById(R.id.card_slot_selection);
126
127         BottomNavigationView navigation = findViewById(R.id.navigation);
128         navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
129
130         // パーミッション群のオプトイン
131         final int REQUEST_NEED_PERMISSIONS = 1010;
132
133         if ((ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) ||
134                 (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) ||
135                 (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_MEDIA_LOCATION) != PackageManager.PERMISSION_GRANTED) ||
136                 (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED) ||
137                 (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_WIFI_STATE) != PackageManager.PERMISSION_GRANTED) ||
138                 (ContextCompat.checkSelfPermission(this, Manifest.permission.VIBRATE) != PackageManager.PERMISSION_GRANTED) ||
139                 (ContextCompat.checkSelfPermission(this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED)) {
140             ActivityCompat.requestPermissions(this,
141                     new String[]{
142                             Manifest.permission.WRITE_EXTERNAL_STORAGE,
143                             Manifest.permission.READ_EXTERNAL_STORAGE,
144                             Manifest.permission.ACCESS_MEDIA_LOCATION,
145                             Manifest.permission.ACCESS_NETWORK_STATE,
146                             Manifest.permission.ACCESS_WIFI_STATE,
147                             Manifest.permission.VIBRATE,
148                             Manifest.permission.INTERNET,
149                     },
150                     REQUEST_NEED_PERMISSIONS);
151         }
152         initializeClass();
153         prepareClass();
154         onReadyClass();
155     }
156
157     /**
158      * パーミッション設定が終わった後...
159      */
160     @Override
161     public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults)
162     {
163         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
164         prepareClass();
165         onReadyClass();
166     }
167
168     /**
169      *
170      */
171     @Override
172     protected void onPause()
173     {
174         super.onPause();
175         try
176         {
177             ICameraConnection connection = interfaceProvider.getCameraConnection();
178             if (connection != null)
179             {
180                 connection.stopWatchWifiStatus(this);
181             }
182         }
183         catch (Exception e)
184         {
185             e.printStackTrace();
186         }
187     }
188
189     /**
190      * クラスの初期化 (instantiate)
191      */
192     private void initializeClass()
193     {
194         try
195         {
196             scenceUpdater = CameraSceneUpdater.newInstance(this);
197             interfaceProvider = CameraInterfaceProvider.newInstance(this, scenceUpdater, this, this);
198             scenceUpdater.changeFirstFragment(interfaceProvider);
199         }
200         catch (Exception e)
201         {
202             e.printStackTrace();
203         }
204     }
205
206     /**
207      * 本クラスの準備
208      */
209     private void prepareClass()
210     {
211         try
212         {
213             mImageConnectButton.setOnClickListener(this);
214             mReloadButton.setOnClickListener(this);
215             setupCardSlotSelection(interfaceProvider.getCammeraConnectionMethod() == ICameraConnection.CameraConnectionMethod.PANASONIC);
216         }
217         catch (Exception e)
218         {
219             e.printStackTrace();
220         }
221     }
222
223     private void setupCardSlotSelection(boolean isEnabled)
224     {
225         try
226         {
227             if (mCardSlotSelection == null)
228             {
229                 mCardSlotSelection = findViewById(R.id.card_slot_selection);
230             }
231             if (isEnabled)
232             {
233                 // 接続モードが Panasonic の時だけ、SD Card 選択を出せるようにする
234                 mCardSlotSelection.setVisibility(View.VISIBLE);
235                 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.sd_card_slot, android.R.layout.simple_spinner_item);
236                 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
237                 mCardSlotSelection.setAdapter(adapter);
238                 mCardSlotSelection.setOnItemSelectedListener(this);
239             }
240             else
241             {
242                 mCardSlotSelection.setVisibility(View.GONE);
243             }
244         }
245         catch (Exception e)
246         {
247             e.printStackTrace();
248         }
249     }
250
251
252
253     /**
254      * 初期化終了時の処理 (カメラへの自動接続)
255      */
256     private void onReadyClass()
257     {
258         try
259         {
260             // カメラに自動接続するかどうか確認
261             SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
262             boolean isAutoConnectCamera = preferences.getBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
263             Log.v(TAG, "isAutoConnectCamera() : " + isAutoConnectCamera);
264
265             // カメラに接続する
266             if (isAutoConnectCamera)
267             {
268                 // 自動接続の指示があったとき
269                 scenceUpdater.changeCameraConnection();
270             }
271         }
272         catch (Exception e)
273         {
274             e.printStackTrace();
275         }
276     }
277
278     @Override
279     public void onClick(View v)
280     {
281         try
282         {
283             int id = v.getId();
284             switch (id)
285             {
286                 case R.id.button_wifi_connect:
287                     // カメラとの接続を行う
288                     scenceUpdater.changeCameraConnection();
289                     vibrate();
290                     break;
291
292                 case R.id.button_reload:
293                     // 画像一覧情報をリロードする
294                     scenceUpdater.reloadRemoteImageContents();
295                     vibrate();
296                     break;
297
298                 default:
299                     break;
300             }
301         }
302         catch (Exception e)
303         {
304             e.printStackTrace();
305         }
306     }
307
308     /**
309      *
310      *
311      */
312     private void vibrate()
313     {
314         try {
315             Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
316             if (vibrator != null)
317             {
318                 vibrator.vibrate(50);
319             }
320         }
321         catch (Exception e)
322         {
323             e.printStackTrace();
324         }
325     }
326
327
328     @Override
329     public void updateMessage(final String message, final boolean isBold, final boolean isColor,  final int color)
330     {
331         try {
332             final TextView messageArea = findViewById(R.id.message);
333             runOnUiThread(new Runnable() {
334                 @Override
335                 public void run() {
336                     try {
337                         if ((messageArea != null) && (message != null))
338                         {
339                             messageArea.setText(message);
340                             if (isBold)
341                             {
342                                 messageArea.setTypeface(Typeface.DEFAULT_BOLD);
343                             }
344                             if (isColor)
345                             {
346                                 messageArea.setTextColor(color);
347                             }
348                             else
349                             {
350                                 messageArea.setTextColor(Color.DKGRAY);
351                             }
352                             messageArea.invalidate();
353                         }
354                     }
355                     catch (Exception e)
356                     {
357                         e.printStackTrace();
358                     }
359                 }
360             });
361         }
362         catch (Exception e)
363         {
364             e.printStackTrace();
365         }
366     }
367
368     @Override
369     public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
370     {
371         try
372         {
373             String item = (String) parent.getItemAtPosition(position);
374             Log.v(TAG, " onItemSelected : " +  item);
375             if ((slotSelectionReceiver != null)&&(item != null))
376             {
377                 slotSelectionReceiver.slotSelected(item);
378             }
379             // vibrate();
380             // scenceUpdater.reloadRemoteImageContents();
381         }
382         catch (Exception e)
383         {
384             e.printStackTrace();
385         }
386     }
387
388     @Override
389     public void onNothingSelected(AdapterView<?> parent)
390     {
391         // 何もしない
392     }
393
394     @Override
395     public void setupSlotSelector(final boolean isEnable, @Nullable ICardSlotSelectionReceiver slotSelectionReceiver)
396     {
397         try
398         {
399             Log.v(TAG, "  ------- setupSlotSelector " + isEnable);
400             this.slotSelectionReceiver = slotSelectionReceiver;
401             runOnUiThread(new Runnable() {
402                 @Override
403                 public void run()
404                 {
405                     setupCardSlotSelection(isEnable);
406                 }
407             });
408         }
409         catch (Exception e)
410         {
411             e.printStackTrace();
412         }
413     }
414
415     @Override
416     public void selectSlot(@NonNull String slotId)
417     {
418         try
419         {
420             Log.v(TAG, " selectSlot : " + slotId);
421
422         }
423         catch (Exception e)
424         {
425             e.printStackTrace();
426         }
427     }
428
429     @Override
430     public void changedCardSlot(@NonNull String slotId)
431     {
432         try
433         {
434             Log.v(TAG, " changedCardSlot : " + slotId);
435             scenceUpdater.reloadRemoteImageContents();
436             vibrate();
437         }
438         catch (Exception e)
439         {
440             e.printStackTrace();
441         }
442     }
443 }