OSDN Git Service

設定画面を表示するようにした。
[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.SharedPreferences;
5 import android.os.Bundle;
6 import android.support.annotation.NonNull;
7 import android.support.v4.app.FragmentActivity;
8 import android.support.v7.app.AppCompatActivity;
9 import android.support.v7.preference.CheckBoxPreference;
10 import android.support.v7.preference.ListPreference;
11 import android.support.v7.preference.Preference;
12 import android.support.v7.preference.PreferenceFragmentCompat;
13 import android.support.v7.preference.PreferenceManager;
14 import android.util.Log;
15
16 import net.osdn.gokigen.gr2control.R;
17 import net.osdn.gokigen.gr2control.camera.ricohgr2.operation.CameraPowerOffRicohGr2;
18 import net.osdn.gokigen.gr2control.logcat.LogCatViewer;
19 import net.osdn.gokigen.gr2control.preference.IPreferencePropertyAccessor;
20 import net.osdn.gokigen.gr2control.scene.IChangeScene;
21
22 import java.util.Map;
23
24 public class RicohGr2PreferenceFragment  extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener
25 {
26     private final String TAG = toString();
27     private SharedPreferences preferences = null;
28     private CameraPowerOffRicohGr2 powerOffController = null;
29     private LogCatViewer logCatViewer = null;
30
31     /**
32      *
33      *
34      */
35     public static RicohGr2PreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
36     {
37         RicohGr2PreferenceFragment instance = new RicohGr2PreferenceFragment();
38         instance.prepare(context, changeScene);
39
40         // パラメータはBundleにまとめておく
41         Bundle arguments = new Bundle();
42         //arguments.putString("title", title);
43         //arguments.putString("message", message);
44         instance.setArguments(arguments);
45
46         return (instance);
47     }
48
49     /**
50      *
51      *
52      */
53     private void prepare(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
54     {
55         try
56         {
57             powerOffController = new CameraPowerOffRicohGr2(context, changeScene);
58             powerOffController.prepare();
59
60             logCatViewer = new LogCatViewer(changeScene);
61             logCatViewer.prepare();
62         }
63         catch (Exception e)
64         {
65             e.printStackTrace();
66         }
67     }
68
69     /**
70      *
71      *
72      */
73     @Override
74     public void onAttach(Context activity)
75     {
76         super.onAttach(activity);
77         Log.v(TAG, "onAttach()");
78         try
79         {
80             // Preference をつかまえる
81             preferences = PreferenceManager.getDefaultSharedPreferences(activity);
82
83             // Preference を初期設定する
84             initializePreferences();
85
86             preferences.registerOnSharedPreferenceChangeListener(this);
87         }
88         catch (Exception e)
89         {
90             e.printStackTrace();
91         }
92     }
93
94     /**
95      * Preferenceの初期化...
96      *
97      */
98     private void initializePreferences()
99     {
100         try
101         {
102             Map<String, ?> items = preferences.getAll();
103             SharedPreferences.Editor editor = preferences.edit();
104
105             if (!items.containsKey(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA)) {
106                 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
107             }
108             if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW)) {
109                 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
110             }
111             if (!items.containsKey(IPreferencePropertyAccessor.USE_PLAYBACK_MENU)) {
112                 editor.putBoolean(IPreferencePropertyAccessor.USE_PLAYBACK_MENU, false);
113             }
114             if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD)) {
115                 editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
116             }
117             if (!items.containsKey(IPreferencePropertyAccessor.GR2_LCD_SLEEP)) {
118                 editor.putBoolean(IPreferencePropertyAccessor.GR2_LCD_SLEEP, false);
119             }
120             if (!items.containsKey(IPreferencePropertyAccessor.GR2_DISPLAY_MODE)) {
121                 editor.putString(IPreferencePropertyAccessor.GR2_DISPLAY_MODE, IPreferencePropertyAccessor.GR2_DISPLAY_MODE_DEFAULT_VALUE);
122             }
123             editor.apply();
124         }
125         catch (Exception e)
126         {
127             e.printStackTrace();
128         }
129     }
130
131     /**
132      *
133      *
134      */
135     @Override
136     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
137     {
138         Log.v(TAG, "onSharedPreferenceChanged() : " + key);
139         boolean value;
140         if (key != null)
141         {
142             switch (key)
143             {
144                 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
145                     value = preferences.getBoolean(key, true);
146                     Log.v(TAG, " " + key + " , " + value);
147                     break;
148
149                 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
150                     value = preferences.getBoolean(key, true);
151                     Log.v(TAG, " " + key + " , " + value);
152                     break;
153
154                 case IPreferencePropertyAccessor.USE_PLAYBACK_MENU:
155                     value = preferences.getBoolean(key, false);
156                     Log.v(TAG, " " + key + " , " + value);
157                     break;
158
159                 case IPreferencePropertyAccessor.GR2_LCD_SLEEP:
160                     value = preferences.getBoolean(key, false);
161                     Log.v(TAG, " " + key + " , " + value);
162                     break;
163
164                 default:
165                     String strValue = preferences.getString(key, "");
166                     setListPreference(key, key, strValue);
167                     break;
168             }
169         }
170     }
171
172     /**
173      *
174      *
175      */
176     @Override
177     public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
178     {
179         Log.v(TAG, "onCreatePreferences()");
180         try
181         {
182             //super.onCreate(savedInstanceState);
183             addPreferencesFromResource(R.xml.preferences_ricoh_gr2);
184
185             ListPreference connectionMethod = (ListPreference) findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
186             connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
187                 @Override
188                 public boolean onPreferenceChange(Preference preference, Object newValue) {
189                     preference.setSummary(newValue + " ");
190                     return (true);
191                 }
192             });
193             connectionMethod.setSummary(connectionMethod.getValue() + " ");
194
195             ListPreference displayMode = (ListPreference) findPreference(IPreferencePropertyAccessor.GR2_DISPLAY_MODE);
196             displayMode.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
197                 @Override
198                 public boolean onPreferenceChange(Preference preference, Object newValue) {
199                     preference.setSummary(newValue + " ");
200                     return (true);
201                 }
202             });
203             displayMode.setSummary(displayMode.getValue() + " ");
204
205             findPreference("exit_application").setOnPreferenceClickListener(powerOffController);
206             findPreference("debug_info").setOnPreferenceClickListener(logCatViewer);
207         }
208         catch (Exception e)
209         {
210             e.printStackTrace();
211         }
212     }
213
214     /**
215      *
216      *
217      */
218     @Override
219     public void onResume()
220     {
221         super.onResume();
222         Log.v(TAG, "onResume() Start");
223         try
224         {
225             synchronizedProperty();
226         }
227         catch (Exception e)
228         {
229             e.printStackTrace();
230         }
231
232         Log.v(TAG, "onResume() End");
233     }
234
235     /**
236      *
237      *
238      */
239     @Override
240     public void onPause()
241     {
242         super.onPause();
243         Log.v(TAG, "onPause() Start");
244         try
245         {
246             // Preference変更のリスナを解除
247             preferences.unregisterOnSharedPreferenceChangeListener(this);
248         }
249         catch (Exception e)
250         {
251             e.printStackTrace();
252         }
253
254         Log.v(TAG, "onPause() End");
255     }
256
257     /**
258      * ListPreference の表示データを設定
259      *
260      * @param pref_key     Preference(表示)のキー
261      * @param key          Preference(データ)のキー
262      * @param defaultValue Preferenceのデフォルト値
263      */
264     private void setListPreference(String pref_key, String key, String defaultValue)
265     {
266         try
267         {
268             ListPreference pref;
269             pref = (ListPreference) findPreference(pref_key);
270             String value = preferences.getString(key, defaultValue);
271             if (pref != null)
272             {
273                 pref.setValue(value);
274                 pref.setSummary(value);
275             }
276         }
277         catch (Exception e)
278         {
279             e.printStackTrace();
280         }
281     }
282
283     /**
284      * BooleanPreference の表示データを設定
285      *
286      * @param pref_key     Preference(表示)のキー
287      * @param key          Preference(データ)のキー
288      * @param defaultValue Preferenceのデフォルト値
289      */
290     private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
291     {
292         try
293         {
294             CheckBoxPreference pref = (CheckBoxPreference) findPreference(pref_key);
295             if (pref != null) {
296                 boolean value = preferences.getBoolean(key, defaultValue);
297                 pref.setChecked(value);
298             }
299         }
300         catch (Exception e)
301         {
302             e.printStackTrace();
303         }
304     }
305
306     /**
307      *
308      *
309      */
310     private void synchronizedProperty()
311     {
312         final FragmentActivity activity = getActivity();
313         final boolean defaultValue = true;
314         if (activity != null)
315         {
316             activity.runOnUiThread(new Runnable() {
317                 @Override
318                 public void run() {
319                     try
320                     {
321                         // Preferenceの画面に反映させる
322                         setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, defaultValue);
323                         setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, defaultValue);
324                         setBooleanPreference(IPreferencePropertyAccessor.USE_PLAYBACK_MENU, IPreferencePropertyAccessor.USE_PLAYBACK_MENU, defaultValue);
325                         setBooleanPreference(IPreferencePropertyAccessor.GR2_LCD_SLEEP, IPreferencePropertyAccessor.GR2_LCD_SLEEP, defaultValue);
326                     }
327                     catch (Exception e)
328                     {
329                         e.printStackTrace();
330                     }
331                 }
332             });
333         }
334     }
335 }