OSDN Git Service

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