OSDN Git Service

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