OSDN Git Service

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