OSDN Git Service

FUJIFILM用画像詳細画面で、タイミングによってはスモールイメージを使用できるようにした。
[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             if (!items.containsKey(IPreferencePropertyAccessor.FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE)) {
170                 editor.putBoolean(IPreferencePropertyAccessor.FUJI_X_GET_SCREENNAIL_AS_SMALL_PICTURE, false);
171             }
172             editor.apply();
173         }
174         catch (Exception e)
175         {
176             e.printStackTrace();
177         }
178     }
179
180     /**
181      *
182      *
183      */
184     @Override
185     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
186     {
187         Log.v(TAG, "onSharedPreferenceChanged() : " + key);
188         boolean value;
189         if (key != null)
190         {
191             switch (key)
192             {
193                 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
194                     value = preferences.getBoolean(key, true);
195                     Log.v(TAG, " " + key + " , " + value);
196                     break;
197
198                 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
199                     value = preferences.getBoolean(key, true);
200                     Log.v(TAG, " BOTH LV : " + key + " , " + value);
201                     break;
202
203                 case IPreferencePropertyAccessor.USE_PLAYBACK_MENU:
204                     value = preferences.getBoolean(key, false);
205                     Log.v(TAG, " " + key + " , " + value);
206                     break;
207
208                 case IPreferencePropertyAccessor.GR2_DISPLAY_CAMERA_VIEW:
209                     value = preferences.getBoolean(key, true);
210                     Log.v(TAG, " GR2 DISPLAY : " + key + " , " + value);
211                     break;
212
213                 case IPreferencePropertyAccessor.GR2_LCD_SLEEP:
214                     value = preferences.getBoolean(key, false);
215                     Log.v(TAG, " GR2 LCD : " + key + " , " + value);
216                     break;
217
218                 case IPreferencePropertyAccessor.SHARE_AFTER_SAVE:
219                     value = preferences.getBoolean(key, false);
220                     Log.v(TAG, " SHARE : " + key + " , " + value);
221                     break;
222
223                 case IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND:
224                     value = preferences.getBoolean(key, true);
225                     Log.v(TAG, " GR2 SPECIAL : " + key + " , " + value);
226                     break;
227
228                 case IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF:
229                     value = preferences.getBoolean(key, false);
230                     Log.v(TAG, " PENTAX AFTER AF : " + key + " , " + value);
231                     break;
232
233                 default:
234                     String strValue = preferences.getString(key, "");
235                     setListPreference(key, key, strValue);
236                     break;
237             }
238         }
239     }
240
241     /**
242      *
243      *
244      */
245     @Override
246     public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
247     {
248         Log.v(TAG, "onCreatePreferences()");
249         try
250         {
251             //super.onCreate(savedInstanceState);
252             addPreferencesFromResource(R.xml.preferences_ricoh_gr2);
253
254             ListPreference connectionMethod = findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
255             if (connectionMethod != null)
256             {
257                 connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
258                     @Override
259                     public boolean onPreferenceChange(Preference preference, Object newValue) {
260                         preference.setSummary(newValue + " ");
261                         return (true);
262                     }
263                 });
264                 connectionMethod.setSummary(connectionMethod.getValue() + " ");
265             }
266
267             Preference exitApplication = findPreference("exit_application");
268             if (exitApplication != null)
269             {
270                 exitApplication.setOnPreferenceClickListener(powerOffController);
271             }
272
273             Preference debug = findPreference("debug_info");
274             if (debug != null)
275             {
276                 debug.setOnPreferenceClickListener(logCatViewer);
277             }
278
279             Preference wifi = findPreference("wifi_settings");
280             if (wifi != null)
281             {
282                 wifi.setOnPreferenceClickListener(this);
283             }
284         }
285         catch (Exception e)
286         {
287             e.printStackTrace();
288         }
289     }
290
291     /**
292      *
293      *
294      */
295     @Override
296     public void onResume()
297     {
298         super.onResume();
299         Log.v(TAG, "onResume() Start");
300         try
301         {
302             synchronizedProperty();
303         }
304         catch (Exception e)
305         {
306             e.printStackTrace();
307         }
308
309         Log.v(TAG, "onResume() End");
310     }
311
312     /**
313      *
314      *
315      */
316     @Override
317     public void onPause()
318     {
319         super.onPause();
320         Log.v(TAG, "onPause() Start");
321         try
322         {
323             // Preference変更のリスナを解除
324             preferences.unregisterOnSharedPreferenceChangeListener(this);
325         }
326         catch (Exception e)
327         {
328             e.printStackTrace();
329         }
330
331         Log.v(TAG, "onPause() End");
332     }
333
334     /**
335      * ListPreference の表示データを設定
336      *
337      * @param pref_key     Preference(表示)のキー
338      * @param key          Preference(データ)のキー
339      * @param defaultValue Preferenceのデフォルト値
340      */
341     private void setListPreference(String pref_key, String key, String defaultValue)
342     {
343         try
344         {
345             ListPreference pref;
346             pref = findPreference(pref_key);
347             String value = preferences.getString(key, defaultValue);
348             if (pref != null)
349             {
350                 pref.setValue(value);
351                 pref.setSummary(value);
352             }
353         }
354         catch (Exception e)
355         {
356             e.printStackTrace();
357         }
358     }
359
360     /**
361      * BooleanPreference の表示データを設定
362      *
363      * @param pref_key     Preference(表示)のキー
364      * @param key          Preference(データ)のキー
365      * @param defaultValue Preferenceのデフォルト値
366      */
367     private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
368     {
369         try
370         {
371             CheckBoxPreference pref = findPreference(pref_key);
372             if (pref != null)
373             {
374                 boolean value = preferences.getBoolean(key, defaultValue);
375                 pref.setChecked(value);
376             }
377         }
378         catch (Exception e)
379         {
380             e.printStackTrace();
381         }
382     }
383
384     /**
385      *
386      *
387      */
388     private void synchronizedProperty()
389     {
390         final FragmentActivity activity = getActivity();
391         final boolean defaultValue = true;
392         if (activity != null)
393         {
394             activity.runOnUiThread(new Runnable() {
395                 @Override
396                 public void run() {
397                     try
398                     {
399                         // Preferenceの画面に反映させる
400                         setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, defaultValue);
401                         setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, defaultValue);
402                         setBooleanPreference(IPreferencePropertyAccessor.USE_PLAYBACK_MENU, IPreferencePropertyAccessor.USE_PLAYBACK_MENU, defaultValue);
403                         setBooleanPreference(IPreferencePropertyAccessor.GR2_DISPLAY_CAMERA_VIEW, IPreferencePropertyAccessor.GR2_DISPLAY_CAMERA_VIEW, defaultValue);
404                         setBooleanPreference(IPreferencePropertyAccessor.GR2_LCD_SLEEP, IPreferencePropertyAccessor.GR2_LCD_SLEEP, defaultValue);
405                         setBooleanPreference(IPreferencePropertyAccessor.SHARE_AFTER_SAVE, IPreferencePropertyAccessor.SHARE_AFTER_SAVE, defaultValue);
406                         setBooleanPreference(IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND, IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND, defaultValue);
407                         setBooleanPreference(IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF, IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF, false);
408                     }
409                     catch (Exception e)
410                     {
411                         e.printStackTrace();
412                     }
413                 }
414             });
415         }
416     }
417
418
419     @Override
420     public boolean onPreferenceClick(Preference preference)
421     {
422         try
423         {
424             String preferenceKey = preference.getKey();
425             if (preferenceKey.contains("wifi_settings"))
426             {
427                 // Wifi 設定画面を表示する
428                 Log.v(TAG, " onPreferenceClick : " + preferenceKey);
429                 if (context != null)
430                 {
431                     context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
432                 }
433             }
434             return (true);
435         }
436         catch (Exception e)
437         {
438             e.printStackTrace();
439         }
440         return (false);
441     }
442 }