OSDN Git Service

preferenceで落ちる箇所を抑止つづき。
[gokigen/A01d.git] / app / src / main / java / net / osdn / gokigen / a01d / preference / fujix / FujiXPreferenceFragment.java
1 package net.osdn.gokigen.a01d.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 net.osdn.gokigen.a01d.IChangeScene;
11 import net.osdn.gokigen.a01d.R;
12 import net.osdn.gokigen.a01d.camera.ICameraConnection;
13 import net.osdn.gokigen.a01d.camera.fujix.operation.CameraPowerOffFujiX;
14 import net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor;
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 import static net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor.EXIT_APPLICATION;
28 import static net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor.SEND_MESSAGE_DIALOG;
29 import static net.osdn.gokigen.a01d.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 IChangeScene changeScene = null;
40     private SharedPreferences preferences = null;
41     private CameraPowerOffFujiX powerOffController = 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             this.context = context;
73             this.changeScene = changeScene;
74         }
75         catch (Exception e)
76         {
77             e.printStackTrace();
78         }
79     }
80
81     /**
82      *
83      *
84      */
85     @Override
86     public void onAttach(@NonNull Context activity)
87     {
88         super.onAttach(activity);
89         Log.v(TAG, "onAttach()");
90
91         try
92         {
93             // Preference をつかまえる
94             preferences = PreferenceManager.getDefaultSharedPreferences(activity);
95
96             // Preference を初期設定する
97             initializePreferences();
98
99             preferences.registerOnSharedPreferenceChangeListener(this);
100         }
101         catch (Exception e)
102         {
103             e.printStackTrace();
104         }
105     }
106
107     /**
108      * Preferenceの初期化...
109      *
110      */
111     private void initializePreferences()
112     {
113         try
114         {
115             Map<String, ?> items = preferences.getAll();
116             SharedPreferences.Editor editor = preferences.edit();
117
118             if (!items.containsKey(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA)) {
119                 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
120             }
121             if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW)) {
122                 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
123             }
124             if (!items.containsKey(IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW)) {
125                 editor.putBoolean(IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW, false);
126             }
127             if (!items.containsKey(IPreferencePropertyAccessor.FUJIX_FOCUS_XY)) {
128                 editor.putString(IPreferencePropertyAccessor.FUJIX_FOCUS_XY, IPreferencePropertyAccessor.FUJIX_FOCUS_XY_DEFAULT_VALUE);
129             }
130             if (!items.containsKey(IPreferencePropertyAccessor.FUJIX_LIVEVIEW_WAIT)) {
131                 editor.putString(IPreferencePropertyAccessor.FUJIX_LIVEVIEW_WAIT, IPreferencePropertyAccessor.FUJIX_LIVEVIEW_WAIT_DEFAULT_VALUE);
132             }
133             if (!items.containsKey(IPreferencePropertyAccessor.FUJIX_COMMAND_POLLING_WAIT)) {
134                 editor.putString(IPreferencePropertyAccessor.FUJIX_COMMAND_POLLING_WAIT, IPreferencePropertyAccessor.FUJIX_COMMAND_POLLING_WAIT_DEFAULT_VALUE);
135             }
136             if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD)) {
137                 editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
138             }
139             if (!items.containsKey(IPreferencePropertyAccessor.FUJIX_CONNECTION_FOR_READ)) {
140                 editor.putBoolean(IPreferencePropertyAccessor.FUJIX_CONNECTION_FOR_READ, false);
141             }
142             editor.apply();
143         }
144         catch (Exception e)
145         {
146             e.printStackTrace();
147         }
148     }
149
150     /**
151      *
152      *
153      */
154     @Override
155     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
156     {
157         Log.v(TAG, "onSharedPreferenceChanged() : " + key);
158         boolean value;
159         try
160         {
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         catch (Exception e)
193         {
194             e.printStackTrace();
195         }
196     }
197
198     /**
199      *
200      *
201      */
202     @Override
203     public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
204     {
205         Log.v(TAG, "onCreatePreferences()");
206         try
207         {
208             //super.onCreate(savedInstanceState);
209             addPreferencesFromResource(R.xml.preferences_fuji_x);
210
211             ListPreference connectionMethod = findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
212             if (connectionMethod != null)
213             {
214                 connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
215                     @Override
216                     public boolean onPreferenceChange(Preference preference, Object newValue) {
217                         preference.setSummary(newValue + " ");
218                         return (true);
219                     }
220                 });
221                 connectionMethod.setSummary(connectionMethod.getValue() + " ");
222             }
223
224             Preference exitApplication = findPreference(EXIT_APPLICATION);
225             if (exitApplication != null)
226             {
227                 exitApplication.setOnPreferenceClickListener(powerOffController);
228             }
229
230             Preference httpDialog = findPreference(SEND_MESSAGE_DIALOG);
231             if (httpDialog != null)
232             {
233                 httpDialog.setOnPreferenceClickListener(this);
234             }
235         }
236         catch (Exception e)
237         {
238             e.printStackTrace();
239         }
240     }
241
242     /**
243      *
244      *
245      */
246     @Override
247     public void onResume()
248     {
249         super.onResume();
250         Log.v(TAG, "onResume() Start");
251
252         try
253         {
254             synchronizedProperty();
255         }
256         catch (Exception e)
257         {
258             e.printStackTrace();
259         }
260
261         Log.v(TAG, "onResume() End");
262
263     }
264
265     /**
266      *
267      *
268      */
269     @Override
270     public void onPause()
271     {
272         super.onPause();
273         Log.v(TAG, "onPause() Start");
274
275         try
276         {
277             // Preference変更のリスナを解除
278             preferences.unregisterOnSharedPreferenceChangeListener(this);
279         }
280         catch (Exception e)
281         {
282             e.printStackTrace();
283         }
284
285         Log.v(TAG, "onPause() End");
286     }
287
288     /**
289      * ListPreference の表示データを設定
290      *
291      * @param pref_key     Preference(表示)のキー
292      * @param key          Preference(データ)のキー
293      * @param defaultValue Preferenceのデフォルト値
294      */
295     private void setListPreference(String pref_key, String key, String defaultValue)
296     {
297         try
298         {
299             String value = preferences.getString(key, defaultValue);
300             ListPreference pref = findPreference(pref_key);
301             if (pref != null)
302             {
303                 pref.setValue(value);
304                 pref.setSummary(value);
305             }
306         }
307         catch (Exception e)
308         {
309             e.printStackTrace();
310         }
311     }
312
313     /**
314      * BooleanPreference の表示データを設定
315      *
316      * @param pref_key     Preference(表示)のキー
317      * @param key          Preference(データ)のキー
318      * @param defaultValue Preferenceのデフォルト値
319      */
320     private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
321     {
322         try
323         {
324             CheckBoxPreference pref = findPreference(pref_key);
325             if (pref != null) {
326                 boolean value = preferences.getBoolean(key, defaultValue);
327                 pref.setChecked(value);
328             }
329         }
330         catch (Exception e)
331         {
332             e.printStackTrace();
333         }
334     }
335
336     /**
337      *
338      *
339      */
340     private void synchronizedProperty()
341     {
342         final FragmentActivity activity = getActivity();
343         if (activity != null)
344         {
345             activity.runOnUiThread(new Runnable() {
346                 @Override
347                 public void run() {
348                     try
349                     {
350                         // Preferenceの画面に反映させる
351                         setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
352                         setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
353                         setBooleanPreference(IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW, IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW, false);
354                         setBooleanPreference(IPreferencePropertyAccessor.FUJIX_CONNECTION_FOR_READ, IPreferencePropertyAccessor.FUJIX_CONNECTION_FOR_READ, false);
355                     }
356                     catch (Exception e)
357                     {
358                         e.printStackTrace();
359                     }
360                 }
361             });
362         }
363     }
364
365     @Override
366     public boolean onPreferenceClick(Preference preference)
367     {
368         try
369         {
370             String preferenceKey = preference.getKey();
371             if (preferenceKey.contains(WIFI_SETTINGS))
372             {
373                 // Wifi 設定画面を表示する
374                 Log.v(TAG, " onPreferenceClick : " + preferenceKey);
375                 if (context != null)
376                 {
377                     context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
378                 }
379             }
380             else if (preferenceKey.contains(SEND_MESSAGE_DIALOG))
381             {
382                 // コマンド送信ダイアログを表示する
383                 if (changeScene != null)
384                 {
385                     changeScene.changeSceneToCameraPropertyList(ICameraConnection.CameraConnectionMethod.FUJI_X);
386                 }
387             }
388             return (true);
389         }
390         catch (Exception e)
391         {
392             e.printStackTrace();
393         }
394         return (false);
395     }
396 }