OSDN Git Service

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