OSDN Git Service

a82a1f802891921e2584c872403b500ed1aba7e9
[gokigen/PKRemote.git] / app / src / main / java / net / osdn / gokigen / pkremote / preference / canon / CanonPreferenceFragment.java
1 package net.osdn.gokigen.pkremote.preference.canon;
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.ptpip.operation.PtpIpCameraPowerOff;
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 CanonPreferenceFragment  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 PtpIpCameraPowerOff powerOffController = null;
41     private LogCatViewer logCatViewer = null;
42
43     /**
44      *
45      *
46      */
47     public static CanonPreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
48     {
49         CanonPreferenceFragment instance = new CanonPreferenceFragment();
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 PtpIpCameraPowerOff(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(@NonNull 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             {
122                 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
123             }
124             if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW))
125             {
126                 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, 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.CANON_RAW_SUFFIX))
133             {
134                 editor.putString(IPreferencePropertyAccessor.CANON_RAW_SUFFIX, IPreferencePropertyAccessor.CANON_RAW_SUFFIX_DEFAULT_VALUE);
135             }
136             if (!items.containsKey(IPreferencePropertyAccessor.CANON_RECEIVE_WAIT))
137             {
138                 editor.putString(IPreferencePropertyAccessor.CANON_RECEIVE_WAIT, IPreferencePropertyAccessor.CANON_RECEIVE_WAIT_DEFAULT_VALUE);
139             }
140             if (!items.containsKey(IPreferencePropertyAccessor.CANON_USE_SCREENNAIL_AS_SMALL))
141             {
142                 editor.putBoolean(IPreferencePropertyAccessor.CANON_USE_SCREENNAIL_AS_SMALL, 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             if (!items.containsKey(IPreferencePropertyAccessor.CANON_HOST_IP)) {
177                 editor.putString(IPreferencePropertyAccessor.CANON_HOST_IP, IPreferencePropertyAccessor.CANON_HOST_IP_DEFAULT_VALUE);
178             }
179             if (!items.containsKey(IPreferencePropertyAccessor.CANON_AUTO_DETECT_HOST_IP)) {
180                 editor.putBoolean(IPreferencePropertyAccessor.CANON_AUTO_DETECT_HOST_IP, true);
181             }
182             if (!items.containsKey(IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE)) {
183                 editor.putString(IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE, IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE_DEFAULT_VALUE);
184             }
185             if (!items.containsKey(IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE)) {
186                 editor.putString(IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE, IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE_DEFAULT_VALUE);
187             }
188             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_HOST_IP)) {
189                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_HOST_IP, IPreferencePropertyAccessor.VISIONKIDS_HOST_IP_DEFAULT_VALUE);
190             }
191             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_FTP_USER)) {
192                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_FTP_USER, IPreferencePropertyAccessor.VISIONKIDS_FTP_USER_DEFAULT_VALUE);
193             }
194             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS)) {
195                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS, IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS_DEFAULT_VALUE);
196             }
197             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
198                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT, IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE);
199             }
200             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP))
201             {
202                 editor.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true);
203             }
204             editor.apply();
205         }
206         catch (Exception e)
207         {
208             e.printStackTrace();
209         }
210     }
211
212     /**
213      *
214      *
215      */
216     @Override
217     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
218     {
219         Log.v(TAG, "onSharedPreferenceChanged() : " + key);
220         boolean value;
221         if (key != null)
222         {
223             switch (key)
224             {
225                 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
226                 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
227                     value = preferences.getBoolean(key, true);
228                     Log.v(TAG, " " + key + " , " + value);
229                     break;
230
231                 case IPreferencePropertyAccessor.CANON_USE_SCREENNAIL_AS_SMALL:
232                     value = preferences.getBoolean(key, false);
233                     Log.v(TAG, " " + key + " , " + value);
234                     break;
235
236                 default:
237                     String strValue = preferences.getString(key, "");
238                     setListPreference(key, key, strValue);
239                     break;
240             }
241         }
242     }
243
244     /**
245      *
246      *
247      */
248     @Override
249     public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
250     {
251         Log.v(TAG, "onCreatePreferences()");
252         try
253         {
254             //super.onCreate(savedInstanceState);
255             addPreferencesFromResource(R.xml.preferences_canon);
256
257             ListPreference connectionMethod = findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
258             if (connectionMethod != null)
259             {
260                 connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
261                     @Override
262                     public boolean onPreferenceChange(Preference preference, Object newValue) {
263                         preference.setSummary(newValue + " ");
264                         return (true);
265                     }
266                 });
267                 connectionMethod.setSummary(connectionMethod.getValue() + " ");
268             }
269             findPreference(EXIT_APPLICATION).setOnPreferenceClickListener(powerOffController);
270             findPreference(DEBUG_INFO).setOnPreferenceClickListener(logCatViewer);
271             findPreference(WIFI_SETTINGS).setOnPreferenceClickListener(this);
272         }
273         catch (Exception e)
274         {
275             e.printStackTrace();
276         }
277     }
278
279     /**
280      *
281      *
282      */
283     @Override
284     public void onResume()
285     {
286         super.onResume();
287         Log.v(TAG, "onResume() Start");
288         try
289         {
290             synchronizedProperty();
291         }
292         catch (Exception e)
293         {
294             e.printStackTrace();
295         }
296         Log.v(TAG, "onResume() End");
297     }
298
299     /**
300      *
301      *
302      */
303     @Override
304     public void onPause()
305     {
306         super.onPause();
307         Log.v(TAG, "onPause() Start");
308
309         try
310         {
311             // Preference変更のリスナを解除
312             preferences.unregisterOnSharedPreferenceChangeListener(this);
313         }
314         catch (Exception e)
315         {
316             e.printStackTrace();
317         }
318
319         Log.v(TAG, "onPause() End");
320     }
321
322     /**
323      * ListPreference の表示データを設定
324      *
325      * @param pref_key     Preference(表示)のキー
326      * @param key          Preference(データ)のキー
327      * @param defaultValue Preferenceのデフォルト値
328      */
329     private void setListPreference(String pref_key, String key, String defaultValue)
330     {
331         try
332         {
333             ListPreference pref = findPreference(pref_key);
334             String value = preferences.getString(key, defaultValue);
335             if (pref != null)
336             {
337                 pref.setValue(value);
338                 pref.setSummary(value);
339             }
340         }
341         catch (Exception e)
342         {
343             e.printStackTrace();
344         }
345     }
346
347     /**
348      * BooleanPreference の表示データを設定
349      *
350      * @param pref_key     Preference(表示)のキー
351      * @param key          Preference(データ)のキー
352      * @param defaultValue Preferenceのデフォルト値
353      */
354     private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
355     {
356         try
357         {
358             CheckBoxPreference pref = findPreference(pref_key);
359             if (pref != null) {
360                 boolean value = preferences.getBoolean(key, defaultValue);
361                 pref.setChecked(value);
362             }
363         }
364         catch (Exception e)
365         {
366             e.printStackTrace();
367         }
368     }
369
370     /**
371      *
372      *
373      */
374     private void synchronizedProperty()
375     {
376         final FragmentActivity activity = getActivity();
377         if (activity != null)
378         {
379             activity.runOnUiThread(new Runnable() {
380                 @Override
381                 public void run() {
382                     try
383                     {
384                         // Preferenceの画面に反映させる
385                         setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
386                         setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
387                         setBooleanPreference(IPreferencePropertyAccessor.CANON_USE_SCREENNAIL_AS_SMALL, IPreferencePropertyAccessor.CANON_USE_SCREENNAIL_AS_SMALL, false);
388                     }
389                     catch (Exception e)
390                     {
391                         e.printStackTrace();
392                     }
393                 }
394             });
395         }
396     }
397
398     @Override
399     public boolean onPreferenceClick(Preference preference)
400     {
401         try
402         {
403             String preferenceKey = preference.getKey();
404             if (preferenceKey.contains(WIFI_SETTINGS))
405             {
406                 // Wifi 設定画面を表示する
407                 Log.v(TAG, " onPreferenceClick : " + preferenceKey);
408                 if (context != null)
409                 {
410                     context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
411                 }
412             }
413             return (true);
414         }
415         catch (Exception e)
416         {
417             e.printStackTrace();
418         }
419         return (false);
420     }
421 }