OSDN Git Service

Pentax DSLR機で、AFを動作後シャッターを切る設定ができるよう変更する。(でも、再起動必要...)
[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_DISPLAY_CAMERA_VIEW)) {
118                 editor.putBoolean(IPreferencePropertyAccessor.GR2_DISPLAY_CAMERA_VIEW, true);
119             }
120             if (!items.containsKey(IPreferencePropertyAccessor.GR2_LCD_SLEEP)) {
121                 editor.putBoolean(IPreferencePropertyAccessor.GR2_LCD_SLEEP, false);
122             }
123             if (!items.containsKey(IPreferencePropertyAccessor.SHARE_AFTER_SAVE)) {
124                 editor.putBoolean(IPreferencePropertyAccessor.SHARE_AFTER_SAVE, false);
125             }
126             if (!items.containsKey(IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND)) {
127                 editor.putBoolean(IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND, true);
128             }
129             if (!items.containsKey(IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF)) {
130                 editor.putBoolean(IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF, false);
131             }
132             editor.apply();
133         }
134         catch (Exception e)
135         {
136             e.printStackTrace();
137         }
138     }
139
140     /**
141      *
142      *
143      */
144     @Override
145     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
146     {
147         Log.v(TAG, "onSharedPreferenceChanged() : " + key);
148         boolean value;
149         if (key != null)
150         {
151             switch (key)
152             {
153                 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
154                     value = preferences.getBoolean(key, true);
155                     Log.v(TAG, " " + key + " , " + value);
156                     break;
157
158                 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
159                     value = preferences.getBoolean(key, true);
160                     Log.v(TAG, " " + key + " , " + value);
161                     break;
162
163                 case IPreferencePropertyAccessor.USE_PLAYBACK_MENU:
164                     value = preferences.getBoolean(key, false);
165                     Log.v(TAG, " " + key + " , " + value);
166                     break;
167
168                 case IPreferencePropertyAccessor.GR2_DISPLAY_CAMERA_VIEW:
169                     value = preferences.getBoolean(key, true);
170                     Log.v(TAG, " " + key + " , " + value);
171                     break;
172
173                 case IPreferencePropertyAccessor.GR2_LCD_SLEEP:
174                     value = preferences.getBoolean(key, false);
175                     Log.v(TAG, " " + key + " , " + value);
176                     break;
177
178                 case IPreferencePropertyAccessor.SHARE_AFTER_SAVE:
179                     value = preferences.getBoolean(key, false);
180                     Log.v(TAG, " " + key + " , " + value);
181                     break;
182
183                 case IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND:
184                     value = preferences.getBoolean(key, true);
185                     Log.v(TAG, " " + key + " , " + value);
186                     break;
187
188                 case IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF:
189                     value = preferences.getBoolean(key, false);
190                     Log.v(TAG, " " + key + " , " + value);
191                     break;
192
193                 default:
194                     String strValue = preferences.getString(key, "");
195                     setListPreference(key, key, strValue);
196                     break;
197             }
198         }
199     }
200
201     /**
202      *
203      *
204      */
205     @Override
206     public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
207     {
208         Log.v(TAG, "onCreatePreferences()");
209         try
210         {
211             //super.onCreate(savedInstanceState);
212             addPreferencesFromResource(R.xml.preferences_ricoh_gr2);
213
214             ListPreference connectionMethod = (ListPreference) findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
215             connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
216                 @Override
217                 public boolean onPreferenceChange(Preference preference, Object newValue) {
218                     preference.setSummary(newValue + " ");
219                     return (true);
220                 }
221             });
222             connectionMethod.setSummary(connectionMethod.getValue() + " ");
223
224             findPreference("exit_application").setOnPreferenceClickListener(powerOffController);
225             findPreference("debug_info").setOnPreferenceClickListener(logCatViewer);
226         }
227         catch (Exception e)
228         {
229             e.printStackTrace();
230         }
231     }
232
233     /**
234      *
235      *
236      */
237     @Override
238     public void onResume()
239     {
240         super.onResume();
241         Log.v(TAG, "onResume() Start");
242         try
243         {
244             synchronizedProperty();
245         }
246         catch (Exception e)
247         {
248             e.printStackTrace();
249         }
250
251         Log.v(TAG, "onResume() End");
252     }
253
254     /**
255      *
256      *
257      */
258     @Override
259     public void onPause()
260     {
261         super.onPause();
262         Log.v(TAG, "onPause() Start");
263         try
264         {
265             // Preference変更のリスナを解除
266             preferences.unregisterOnSharedPreferenceChangeListener(this);
267         }
268         catch (Exception e)
269         {
270             e.printStackTrace();
271         }
272
273         Log.v(TAG, "onPause() End");
274     }
275
276     /**
277      * ListPreference の表示データを設定
278      *
279      * @param pref_key     Preference(表示)のキー
280      * @param key          Preference(データ)のキー
281      * @param defaultValue Preferenceのデフォルト値
282      */
283     private void setListPreference(String pref_key, String key, String defaultValue)
284     {
285         try
286         {
287             ListPreference pref;
288             pref = (ListPreference) findPreference(pref_key);
289             String value = preferences.getString(key, defaultValue);
290             if (pref != null)
291             {
292                 pref.setValue(value);
293                 pref.setSummary(value);
294             }
295         }
296         catch (Exception e)
297         {
298             e.printStackTrace();
299         }
300     }
301
302     /**
303      * BooleanPreference の表示データを設定
304      *
305      * @param pref_key     Preference(表示)のキー
306      * @param key          Preference(データ)のキー
307      * @param defaultValue Preferenceのデフォルト値
308      */
309     private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
310     {
311         try
312         {
313             CheckBoxPreference pref = (CheckBoxPreference) findPreference(pref_key);
314             if (pref != null) {
315                 boolean value = preferences.getBoolean(key, defaultValue);
316                 pref.setChecked(value);
317             }
318         }
319         catch (Exception e)
320         {
321             e.printStackTrace();
322         }
323     }
324
325     /**
326      *
327      *
328      */
329     private void synchronizedProperty()
330     {
331         final FragmentActivity activity = getActivity();
332         final boolean defaultValue = true;
333         if (activity != null)
334         {
335             activity.runOnUiThread(new Runnable() {
336                 @Override
337                 public void run() {
338                     try
339                     {
340                         // Preferenceの画面に反映させる
341                         setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, defaultValue);
342                         setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, defaultValue);
343                         setBooleanPreference(IPreferencePropertyAccessor.USE_PLAYBACK_MENU, IPreferencePropertyAccessor.USE_PLAYBACK_MENU, defaultValue);
344                         setBooleanPreference(IPreferencePropertyAccessor.GR2_DISPLAY_CAMERA_VIEW, IPreferencePropertyAccessor.GR2_DISPLAY_CAMERA_VIEW, defaultValue);
345                         setBooleanPreference(IPreferencePropertyAccessor.GR2_LCD_SLEEP, IPreferencePropertyAccessor.GR2_LCD_SLEEP, defaultValue);
346                         setBooleanPreference(IPreferencePropertyAccessor.SHARE_AFTER_SAVE, IPreferencePropertyAccessor.SHARE_AFTER_SAVE, defaultValue);
347                         setBooleanPreference(IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND, IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND, defaultValue);
348                         setBooleanPreference(IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF, IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF, false);
349                     }
350                     catch (Exception e)
351                     {
352                         e.printStackTrace();
353                     }
354                 }
355             });
356         }
357     }
358 }