OSDN Git Service

Wifi設定をPreferenceから出せるようにした。Nikonの接続シーケンスまで確認。
[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             editor.apply();
145         }
146         catch (Exception e)
147         {
148             e.printStackTrace();
149         }
150     }
151
152     /**
153      *
154      *
155      */
156     @Override
157     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
158     {
159         Log.v(TAG, "onSharedPreferenceChanged() : " + key);
160         boolean value;
161         if (key != null)
162         {
163             switch (key)
164             {
165                 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
166                     value = preferences.getBoolean(key, true);
167                     Log.v(TAG, " " + key + " , " + value);
168                     break;
169
170                 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
171                     value = preferences.getBoolean(key, true);
172                     Log.v(TAG, " " + key + " , " + value);
173                     break;
174
175                 case IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW:
176                     value = preferences.getBoolean(key, false);
177                     Log.v(TAG, " " + key + " , " + value);
178                     break;
179
180                 case IPreferencePropertyAccessor.FUJIX_CONNECTION_FOR_READ:
181                     value = preferences.getBoolean(key, false);
182                     Log.v(TAG, " " + key + " , " + value);
183                     break;
184
185                 default:
186                     String strValue = preferences.getString(key, "");
187                     setListPreference(key, key, strValue);
188                     break;
189             }
190         }
191     }
192
193     /**
194      *
195      *
196      */
197     @Override
198     public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
199     {
200         Log.v(TAG, "onCreatePreferences()");
201         try
202         {
203             //super.onCreate(savedInstanceState);
204             addPreferencesFromResource(R.xml.preferences_fuji_x);
205
206             ListPreference connectionMethod = (ListPreference) findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
207             connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
208                 @Override
209                 public boolean onPreferenceChange(Preference preference, Object newValue) {
210                     preference.setSummary(newValue + " ");
211                     return (true);
212                 }
213             });
214             connectionMethod.setSummary(connectionMethod.getValue() + " ");
215
216             findPreference(EXIT_APPLICATION).setOnPreferenceClickListener(powerOffController);
217             findPreference(DEBUG_INFO).setOnPreferenceClickListener(logCatViewer);
218             findPreference(WIFI_SETTINGS).setOnPreferenceClickListener(this);
219         }
220         catch (Exception e)
221         {
222             e.printStackTrace();
223         }
224     }
225
226     /**
227      *
228      *
229      */
230     @Override
231     public void onResume()
232     {
233         super.onResume();
234         Log.v(TAG, "onResume() Start");
235
236         try
237         {
238             synchronizedProperty();
239         }
240         catch (Exception e)
241         {
242             e.printStackTrace();
243         }
244
245         Log.v(TAG, "onResume() End");
246
247     }
248
249     /**
250      *
251      *
252      */
253     @Override
254     public void onPause()
255     {
256         super.onPause();
257         Log.v(TAG, "onPause() Start");
258
259         try
260         {
261             // Preference変更のリスナを解除
262             preferences.unregisterOnSharedPreferenceChangeListener(this);
263         }
264         catch (Exception e)
265         {
266             e.printStackTrace();
267         }
268
269         Log.v(TAG, "onPause() End");
270     }
271
272     /**
273      * ListPreference の表示データを設定
274      *
275      * @param pref_key     Preference(表示)のキー
276      * @param key          Preference(データ)のキー
277      * @param defaultValue Preferenceのデフォルト値
278      */
279     private void setListPreference(String pref_key, String key, String defaultValue)
280     {
281         try
282         {
283             ListPreference pref;
284             pref = (ListPreference) findPreference(pref_key);
285             String value = preferences.getString(key, defaultValue);
286             if (pref != null)
287             {
288                 pref.setValue(value);
289                 pref.setSummary(value);
290             }
291         }
292         catch (Exception e)
293         {
294             e.printStackTrace();
295         }
296     }
297
298     /**
299      * BooleanPreference の表示データを設定
300      *
301      * @param pref_key     Preference(表示)のキー
302      * @param key          Preference(データ)のキー
303      * @param defaultValue Preferenceのデフォルト値
304      */
305     private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
306     {
307         try
308         {
309             CheckBoxPreference pref = (CheckBoxPreference) findPreference(pref_key);
310             if (pref != null) {
311                 boolean value = preferences.getBoolean(key, defaultValue);
312                 pref.setChecked(value);
313             }
314         }
315         catch (Exception e)
316         {
317             e.printStackTrace();
318         }
319     }
320
321     /**
322      *
323      *
324      */
325     private void synchronizedProperty()
326     {
327         final FragmentActivity activity = getActivity();
328         if (activity != null)
329         {
330             activity.runOnUiThread(new Runnable() {
331                 @Override
332                 public void run() {
333                     try
334                     {
335                         // Preferenceの画面に反映させる
336                         setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
337                         setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
338                         setBooleanPreference(IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW, IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW, false);
339                         setBooleanPreference(IPreferencePropertyAccessor.FUJIX_CONNECTION_FOR_READ, IPreferencePropertyAccessor.FUJIX_CONNECTION_FOR_READ, false);
340                     }
341                     catch (Exception e)
342                     {
343                         e.printStackTrace();
344                     }
345                 }
346             });
347         }
348     }
349
350     @Override
351     public boolean onPreferenceClick(Preference preference)
352     {
353         try
354         {
355             String preferenceKey = preference.getKey();
356             if (preferenceKey.contains(WIFI_SETTINGS))
357             {
358                 // Wifi 設定画面を表示する
359                 Log.v(TAG, " onPreferenceClick : " + preferenceKey);
360                 if (context != null)
361                 {
362                     context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
363                 }
364             }
365             return (true);
366         }
367         catch (Exception e)
368         {
369             e.printStackTrace();
370         }
371         return (false);
372     }
373 }