OSDN Git Service

9d49d2dc4940944c019fa5792a247ddbeea4a027
[gokigen/PKRemote.git] / app / src / main / java / net / osdn / gokigen / pkremote / preference / olympuspen / OlympusPenPreferenceFragment.java
1 package net.osdn.gokigen.pkremote.preference.olympuspen;
2
3 import android.content.Context;
4 import android.content.SharedPreferences;
5 import android.os.Bundle;
6 import android.util.Log;
7
8 import java.util.Map;
9
10 import androidx.annotation.NonNull;
11 import androidx.appcompat.app.AppCompatActivity;
12 import androidx.fragment.app.FragmentActivity;
13 import androidx.preference.CheckBoxPreference;
14 import androidx.preference.ListPreference;
15 import androidx.preference.Preference;
16 import androidx.preference.PreferenceFragmentCompat;
17 import androidx.preference.PreferenceManager;
18
19 import net.osdn.gokigen.pkremote.R;
20 import net.osdn.gokigen.pkremote.camera.vendor.olympuspen.operation.OlympusPenCameraPowerOff;
21 import net.osdn.gokigen.pkremote.logcat.LogCatViewer;
22 import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor;
23 import net.osdn.gokigen.pkremote.scene.IChangeScene;
24
25 /**
26  *
27  *
28  */
29 public class OlympusPenPreferenceFragment  extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener
30 {
31     private final String TAG = toString();
32     private SharedPreferences preferences = null;
33     private OlympusPenCameraPowerOff powerOffController = null;
34     private LogCatViewer logCatViewer = null;
35
36     /**
37      *
38      *
39      */
40     public static OlympusPenPreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
41     {
42         OlympusPenPreferenceFragment instance = new OlympusPenPreferenceFragment();
43         instance.prepare(context, changeScene);
44
45         // パラメータはBundleにまとめておく
46         Bundle arguments = new Bundle();
47         //arguments.putString("title", title);
48         //arguments.putString("message", message);
49         instance.setArguments(arguments);
50
51         return (instance);
52     }
53
54     /**
55      *
56      *
57      */
58     private void prepare(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
59     {
60         try
61         {
62             powerOffController = new OlympusPenCameraPowerOff(context, changeScene);
63             powerOffController.prepare();
64
65             logCatViewer = new LogCatViewer(changeScene);
66             logCatViewer.prepare();
67         }
68         catch (Exception e)
69         {
70             e.printStackTrace();
71         }
72     }
73
74     /**
75      *
76      *
77      */
78     @Override
79     public void onAttach(Context activity)
80     {
81         super.onAttach(activity);
82         Log.v(TAG, "onAttach()");
83
84         try
85         {
86             // Preference をつかまえる
87             preferences = PreferenceManager.getDefaultSharedPreferences(activity);
88
89             // Preference を初期設定する
90             initializePreferences();
91
92             preferences.registerOnSharedPreferenceChangeListener(this);
93         }
94         catch (Exception e)
95         {
96             e.printStackTrace();
97         }
98     }
99
100     /**
101      * Preferenceの初期化...
102      *
103      */
104     private void initializePreferences()
105     {
106         try
107         {
108             Map<String, ?> items = preferences.getAll();
109             SharedPreferences.Editor editor = preferences.edit();
110
111             if (!items.containsKey(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA)) {
112                 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
113             }
114             if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW)) {
115                 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
116             }
117             if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD)) {
118                 editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
119             }
120             if (!items.containsKey(IPreferencePropertyAccessor.PEN_SMALL_PICTURE_SIZE)) {
121                 editor.putString(IPreferencePropertyAccessor.PEN_SMALL_PICTURE_SIZE, IPreferencePropertyAccessor.PEN_SMALL_PICTURE_SIZE_DEFAULT_VALUE);
122             }
123             if (!items.containsKey(IPreferencePropertyAccessor.OLYMPUS_USE_SCREENNAIL_AS_SMALL)) {
124                 editor.putBoolean(IPreferencePropertyAccessor.OLYMPUS_USE_SCREENNAIL_AS_SMALL, false);
125             }
126             editor.apply();
127         }
128         catch (Exception e)
129         {
130             e.printStackTrace();
131         }
132     }
133
134     /**
135      *
136      *
137      */
138     @Override
139     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
140     {
141         Log.v(TAG, "onSharedPreferenceChanged() : " + key);
142         boolean value;
143         if (key != null)
144         {
145             switch (key)
146             {
147                 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
148                     value = preferences.getBoolean(key, true);
149                     Log.v(TAG, " " + key + " , " + value);
150                     break;
151
152                 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
153                     value = preferences.getBoolean(key, true);
154                     Log.v(TAG, " " + key + " , " + value);
155                     break;
156
157                 case IPreferencePropertyAccessor.OLYMPUS_USE_SCREENNAIL_AS_SMALL:
158                     value = preferences.getBoolean(key, true);
159                     Log.v(TAG, " " + key + " , " + value);
160                     break;
161
162                 default:
163                     String strValue = preferences.getString(key, "");
164                     setListPreference(key, key, strValue);
165                     break;
166             }
167         }
168     }
169
170     /**
171      *
172      *
173      */
174     @Override
175     public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
176     {
177         Log.v(TAG, "onCreatePreferences()");
178         try
179         {
180             //super.onCreate(savedInstanceState);
181             addPreferencesFromResource(R.xml.preferences_olympus);
182
183             ListPreference connectionMethod = findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
184             connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
185                 @Override
186                 public boolean onPreferenceChange(Preference preference, Object newValue) {
187                     preference.setSummary(newValue + " ");
188                     return (true);
189                 }
190             });
191             connectionMethod.setSummary(connectionMethod.getValue() + " ");
192
193             ListPreference smallPictureSize = findPreference(IPreferencePropertyAccessor.PEN_SMALL_PICTURE_SIZE);
194             smallPictureSize.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
195                 @Override
196                 public boolean onPreferenceChange(Preference preference, Object newValue) {
197                     preference.setSummary(newValue + " ");
198                     return (true);
199                 }
200             });
201             smallPictureSize.setSummary(smallPictureSize.getValue() + " ");
202
203             findPreference("exit_application").setOnPreferenceClickListener(powerOffController);
204             findPreference("debug_info").setOnPreferenceClickListener(logCatViewer);
205         }
206         catch (Exception e)
207         {
208             e.printStackTrace();
209         }
210     }
211
212     /**
213      *
214      *
215      */
216     @Override
217     public void onResume()
218     {
219         super.onResume();
220         Log.v(TAG, "onResume() Start");
221
222         try
223         {
224             synchronizedProperty();
225         }
226         catch (Exception e)
227         {
228             e.printStackTrace();
229         }
230
231         Log.v(TAG, "onResume() End");
232
233     }
234
235     /**
236      *
237      *
238      */
239     @Override
240     public void onPause()
241     {
242         super.onPause();
243         Log.v(TAG, "onPause() Start");
244
245         try
246         {
247             // Preference変更のリスナを解除
248             preferences.unregisterOnSharedPreferenceChangeListener(this);
249         }
250         catch (Exception e)
251         {
252             e.printStackTrace();
253         }
254
255         Log.v(TAG, "onPause() End");
256     }
257
258     /**
259      * ListPreference の表示データを設定
260      *
261      * @param pref_key     Preference(表示)のキー
262      * @param key          Preference(データ)のキー
263      * @param defaultValue Preferenceのデフォルト値
264      */
265     private void setListPreference(String pref_key, String key, String defaultValue)
266     {
267         try
268         {
269             ListPreference pref;
270             pref = findPreference(pref_key);
271             String value = preferences.getString(key, defaultValue);
272             if (pref != null)
273             {
274                 pref.setValue(value);
275                 pref.setSummary(value);
276             }
277         }
278         catch (Exception e)
279         {
280             e.printStackTrace();
281         }
282     }
283
284     /**
285      * BooleanPreference の表示データを設定
286      *
287      * @param pref_key     Preference(表示)のキー
288      * @param key          Preference(データ)のキー
289      * @param defaultValue Preferenceのデフォルト値
290      */
291     private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
292     {
293         try
294         {
295             CheckBoxPreference pref = findPreference(pref_key);
296             if (pref != null) {
297                 boolean value = preferences.getBoolean(key, defaultValue);
298                 pref.setChecked(value);
299             }
300         }
301         catch (Exception e)
302         {
303             e.printStackTrace();
304         }
305     }
306
307     /**
308      *
309      *
310      */
311     private void synchronizedProperty()
312     {
313         final FragmentActivity activity = getActivity();
314         if (activity != null)
315         {
316             activity.runOnUiThread(new Runnable() {
317                 @Override
318                 public void run() {
319                     try
320                     {
321                         // Preferenceの画面に反映させる
322                         setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
323                         setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
324                         setBooleanPreference(IPreferencePropertyAccessor.OLYMPUS_USE_SCREENNAIL_AS_SMALL, IPreferencePropertyAccessor.OLYMPUS_USE_SCREENNAIL_AS_SMALL, false);
325                     }
326                     catch (Exception e)
327                     {
328                         e.printStackTrace();
329                     }
330                 }
331             });
332         }
333     }
334
335 }