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