OSDN Git Service

9cd2347db6a6fcf02f4389a2a2cf9ccff959f6a2
[gokigen/PKRemote.git] / app / src / main / java / net / osdn / gokigen / pkremote / preference / ricohgr2 / RicohGr2PreferenceFragment.java
1 package net.osdn.gokigen.pkremote.preference.ricohgr2;
2
3 import android.content.Context;
4 import android.content.Intent;
5 import android.content.SharedPreferences;
6 import android.os.Bundle;
7
8 import android.provider.Settings;
9 import android.util.Log;
10
11 import net.osdn.gokigen.pkremote.R;
12 import net.osdn.gokigen.pkremote.camera.vendor.ricoh.operation.CameraPowerOffRicohGr2;
13 import net.osdn.gokigen.pkremote.logcat.LogCatViewer;
14 import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor;
15 import net.osdn.gokigen.pkremote.scene.IChangeScene;
16
17 import java.util.Map;
18
19 import androidx.annotation.NonNull;
20 import androidx.appcompat.app.AppCompatActivity;
21 import androidx.fragment.app.FragmentActivity;
22 import androidx.preference.CheckBoxPreference;
23 import androidx.preference.ListPreference;
24 import androidx.preference.Preference;
25 import androidx.preference.PreferenceFragmentCompat;
26 import androidx.preference.PreferenceManager;
27
28 import static net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor.DEBUG_INFO;
29 import static net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor.EXIT_APPLICATION;
30 import static net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor.WIFI_SETTINGS;
31
32 public class RicohGr2PreferenceFragment  extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener
33 {
34     private final String TAG = toString();
35     private AppCompatActivity context = null;
36     private SharedPreferences preferences = null;
37     private CameraPowerOffRicohGr2 powerOffController = null;
38     private LogCatViewer logCatViewer = null;
39
40     /**
41      *
42      *
43      */
44     public static RicohGr2PreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
45     {
46         RicohGr2PreferenceFragment instance = new RicohGr2PreferenceFragment();
47         instance.prepare(context, changeScene);
48
49         // パラメータはBundleにまとめておく
50         Bundle arguments = new Bundle();
51         //arguments.putString("title", title);
52         //arguments.putString("message", message);
53         instance.setArguments(arguments);
54
55         return (instance);
56     }
57
58     /**
59      *
60      *
61      */
62     private void prepare(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
63     {
64         try
65         {
66             powerOffController = new CameraPowerOffRicohGr2(context, changeScene);
67             powerOffController.prepare();
68
69             logCatViewer = new LogCatViewer(changeScene);
70             logCatViewer.prepare();
71
72             this.context = context;
73         }
74         catch (Exception e)
75         {
76             e.printStackTrace();
77         }
78     }
79
80     /**
81      *
82      *
83      */
84     @Override
85     public void onAttach(Context activity)
86     {
87         super.onAttach(activity);
88         Log.v(TAG, "onAttach()");
89         try
90         {
91             // Preference をつかまえる
92             preferences = PreferenceManager.getDefaultSharedPreferences(activity);
93
94             // Preference を初期設定する
95             initializePreferences();
96
97             preferences.registerOnSharedPreferenceChangeListener(this);
98         }
99         catch (Exception e)
100         {
101             e.printStackTrace();
102         }
103     }
104
105     /**
106      * Preferenceの初期化...
107      *
108      */
109     private void initializePreferences()
110     {
111         try
112         {
113             Map<String, ?> items = preferences.getAll();
114             SharedPreferences.Editor editor = preferences.edit();
115
116             if (!items.containsKey(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA))
117             {
118                 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
119             }
120             if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW))
121             {
122                 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
123             }
124             if (!items.containsKey(IPreferencePropertyAccessor.USE_PLAYBACK_MENU))
125             {
126                 editor.putBoolean(IPreferencePropertyAccessor.USE_PLAYBACK_MENU, true);
127             }
128             if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD))
129             {
130                 editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
131             }
132             if (!items.containsKey(IPreferencePropertyAccessor.GR2_DISPLAY_CAMERA_VIEW))
133             {
134                 editor.putBoolean(IPreferencePropertyAccessor.GR2_DISPLAY_CAMERA_VIEW, true);
135             }
136             if (!items.containsKey(IPreferencePropertyAccessor.GR2_LCD_SLEEP))
137             {
138                 editor.putBoolean(IPreferencePropertyAccessor.GR2_LCD_SLEEP, false);
139             }
140             if (!items.containsKey(IPreferencePropertyAccessor.SHARE_AFTER_SAVE))
141             {
142                 editor.putBoolean(IPreferencePropertyAccessor.SHARE_AFTER_SAVE, false);
143             }
144             if (!items.containsKey(IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND))
145             {
146                 editor.putBoolean(IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND, true);
147             }
148             if (!items.containsKey(IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF))
149             {
150                 editor.putBoolean(IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF, false);
151             }
152             if (!items.containsKey(IPreferencePropertyAccessor.SMALL_PICTURE_SIZE))
153             {
154                 editor.putString(IPreferencePropertyAccessor.SMALL_PICTURE_SIZE, IPreferencePropertyAccessor.SMALL_PICTURE_SIZE_DEFAULT_VALUE);
155             }
156             if (!items.containsKey(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT))
157             {
158                 editor.putString(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT, IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE);
159             }
160             if (!items.containsKey(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_MAX_COUNT))
161             {
162                 editor.putString(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_MAX_COUNT, IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_MAX_COUNT_DEFAULT_VALUE);
163             }
164             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_HOST_IP))
165             {
166                 editor.putString(IPreferencePropertyAccessor.PIXPRO_HOST_IP, IPreferencePropertyAccessor.PIXPRO_HOST_IP_DEFAULT_VALUE);
167             }
168             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT))
169             {
170                 editor.putString(IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT, IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT_DEFAULT_VALUE);
171             }
172             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT))
173             {
174                 editor.putString(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT, IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE);
175             }
176             if (!items.containsKey(IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE))
177             {
178                 editor.putString(IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE, IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE_DEFAULT_VALUE);
179             }
180             if (!items.containsKey(IPreferencePropertyAccessor.CANON_HOST_IP)) {
181                 editor.putString(IPreferencePropertyAccessor.CANON_HOST_IP, IPreferencePropertyAccessor.CANON_HOST_IP_DEFAULT_VALUE);
182             }
183             if (!items.containsKey(IPreferencePropertyAccessor.CANON_AUTO_DETECT_HOST_IP)) {
184                 editor.putBoolean(IPreferencePropertyAccessor.CANON_AUTO_DETECT_HOST_IP, true);
185             }
186             if (!items.containsKey(IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE)) {
187                 editor.putString(IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE, IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE_DEFAULT_VALUE);
188             }
189             if (!items.containsKey(IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE)) {
190                 editor.putString(IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE, IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE_DEFAULT_VALUE);
191             }
192             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_HOST_IP)) {
193                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_HOST_IP, IPreferencePropertyAccessor.VISIONKIDS_HOST_IP_DEFAULT_VALUE);
194             }
195             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_FTP_USER)) {
196                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_FTP_USER, IPreferencePropertyAccessor.VISIONKIDS_FTP_USER_DEFAULT_VALUE);
197             }
198             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS)) {
199                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS, IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS_DEFAULT_VALUE);
200             }
201             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
202                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT, IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE);
203             }
204             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP))
205             {
206                 editor.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true);
207             }
208             editor.apply();
209         }
210         catch (Exception e)
211         {
212             e.printStackTrace();
213         }
214     }
215
216     /**
217      *
218      *
219      */
220     @Override
221     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
222     {
223         Log.v(TAG, "onSharedPreferenceChanged() : " + key);
224         boolean value;
225         if (key != null)
226         {
227             switch (key)
228             {
229                 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
230                     value = preferences.getBoolean(key, true);
231                     Log.v(TAG, " " + key + " , " + value);
232                     break;
233
234                 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
235                     value = preferences.getBoolean(key, true);
236                     Log.v(TAG, " " + key + " , " + value);
237                     break;
238
239                 case IPreferencePropertyAccessor.USE_PLAYBACK_MENU:
240                     value = preferences.getBoolean(key, true);
241                     Log.v(TAG, " " + key + " , " + value);
242                     break;
243
244                 case IPreferencePropertyAccessor.GR2_DISPLAY_CAMERA_VIEW:
245                     value = preferences.getBoolean(key, true);
246                     Log.v(TAG, " " + key + " , " + value);
247                     break;
248
249                 case IPreferencePropertyAccessor.GR2_LCD_SLEEP:
250                     value = preferences.getBoolean(key, false);
251                     Log.v(TAG, " " + key + " , " + value);
252                     break;
253
254                 case IPreferencePropertyAccessor.SHARE_AFTER_SAVE:
255                     value = preferences.getBoolean(key, false);
256                     Log.v(TAG, " " + key + " , " + value);
257                     break;
258
259                 case IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND:
260                     value = preferences.getBoolean(key, true);
261                     Log.v(TAG, " " + key + " , " + value);
262                     break;
263
264                 case IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF:
265                     value = preferences.getBoolean(key, false);
266                     Log.v(TAG, " " + key + " , " + value);
267                     break;
268
269                 default:
270                     String strValue = preferences.getString(key, "");
271                     setListPreference(key, key, strValue);
272                     break;
273             }
274         }
275     }
276
277     /**
278      *
279      *
280      */
281     @Override
282     public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
283     {
284         Log.v(TAG, "onCreatePreferences()");
285         try
286         {
287             //super.onCreate(savedInstanceState);
288             addPreferencesFromResource(R.xml.preferences_ricoh_gr2);
289
290             ListPreference connectionMethod = (ListPreference) findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
291             connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
292                 @Override
293                 public boolean onPreferenceChange(Preference preference, Object newValue) {
294                     preference.setSummary(newValue + " ");
295                     return (true);
296                 }
297             });
298             connectionMethod.setSummary(connectionMethod.getValue() + " ");
299 /*
300             ListPreference smallPictureSize = (ListPreference) findPreference(IPreferencePropertyAccessor.SMALL_PICTURE_SIZE);
301             smallPictureSize.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
302                 @Override
303                 public boolean onPreferenceChange(Preference preference, Object newValue) {
304                     preference.setSummary(newValue + " ");
305                     return (true);
306                 }
307             });
308             smallPictureSize.setSummary(smallPictureSize.getValue() + " ");
309 */
310             findPreference(EXIT_APPLICATION).setOnPreferenceClickListener(powerOffController);
311             findPreference(DEBUG_INFO).setOnPreferenceClickListener(logCatViewer);
312             findPreference(WIFI_SETTINGS).setOnPreferenceClickListener(this);
313         }
314         catch (Exception e)
315         {
316             e.printStackTrace();
317         }
318     }
319
320     /**
321      *
322      *
323      */
324     @Override
325     public void onResume()
326     {
327         super.onResume();
328         Log.v(TAG, "onResume() Start");
329         try
330         {
331             synchronizedProperty();
332         }
333         catch (Exception e)
334         {
335             e.printStackTrace();
336         }
337
338         Log.v(TAG, "onResume() End");
339     }
340
341     /**
342      *
343      *
344      */
345     @Override
346     public void onPause()
347     {
348         super.onPause();
349         Log.v(TAG, "onPause() Start");
350         try
351         {
352             // Preference変更のリスナを解除
353             preferences.unregisterOnSharedPreferenceChangeListener(this);
354         }
355         catch (Exception e)
356         {
357             e.printStackTrace();
358         }
359
360         Log.v(TAG, "onPause() End");
361     }
362
363     /**
364      * ListPreference の表示データを設定
365      *
366      * @param pref_key     Preference(表示)のキー
367      * @param key          Preference(データ)のキー
368      * @param defaultValue Preferenceのデフォルト値
369      */
370     private void setListPreference(String pref_key, String key, String defaultValue)
371     {
372         try
373         {
374             ListPreference pref;
375             pref = (ListPreference) findPreference(pref_key);
376             String value = preferences.getString(key, defaultValue);
377             if (pref != null)
378             {
379                 pref.setValue(value);
380                 pref.setSummary(value);
381             }
382         }
383         catch (Exception e)
384         {
385             e.printStackTrace();
386         }
387     }
388
389     /**
390      * BooleanPreference の表示データを設定
391      *
392      * @param pref_key     Preference(表示)のキー
393      * @param key          Preference(データ)のキー
394      * @param defaultValue Preferenceのデフォルト値
395      */
396     private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
397     {
398         try
399         {
400             CheckBoxPreference pref = (CheckBoxPreference) findPreference(pref_key);
401             if (pref != null) {
402                 boolean value = preferences.getBoolean(key, defaultValue);
403                 pref.setChecked(value);
404             }
405         }
406         catch (Exception e)
407         {
408             e.printStackTrace();
409         }
410     }
411
412     /**
413      *
414      *
415      */
416     private void synchronizedProperty()
417     {
418         final FragmentActivity activity = getActivity();
419         final boolean defaultValue = true;
420         if (activity != null)
421         {
422             activity.runOnUiThread(new Runnable() {
423                 @Override
424                 public void run() {
425                     try
426                     {
427                         // Preferenceの画面に反映させる
428                         setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, defaultValue);
429                         setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, defaultValue);
430                         setBooleanPreference(IPreferencePropertyAccessor.USE_PLAYBACK_MENU, IPreferencePropertyAccessor.USE_PLAYBACK_MENU, defaultValue);
431                         setBooleanPreference(IPreferencePropertyAccessor.GR2_DISPLAY_CAMERA_VIEW, IPreferencePropertyAccessor.GR2_DISPLAY_CAMERA_VIEW, defaultValue);
432                         setBooleanPreference(IPreferencePropertyAccessor.GR2_LCD_SLEEP, IPreferencePropertyAccessor.GR2_LCD_SLEEP, defaultValue);
433                         setBooleanPreference(IPreferencePropertyAccessor.SHARE_AFTER_SAVE, IPreferencePropertyAccessor.SHARE_AFTER_SAVE, defaultValue);
434                         setBooleanPreference(IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND, IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND, defaultValue);
435                         setBooleanPreference(IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF, IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF, false);
436                     }
437                     catch (Exception e)
438                     {
439                         e.printStackTrace();
440                     }
441                 }
442             });
443         }
444     }
445
446     @Override
447     public boolean onPreferenceClick(Preference preference)
448     {
449         try
450         {
451             String preferenceKey = preference.getKey();
452             if (preferenceKey.contains(WIFI_SETTINGS))
453             {
454                 // Wifi 設定画面を表示する
455                 Log.v(TAG, " onPreferenceClick : " + preferenceKey);
456                 if (context != null)
457                 {
458                     context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
459                 }
460             }
461             return (true);
462         }
463         catch (Exception e)
464         {
465             e.printStackTrace();
466         }
467         return (false);
468     }
469 }