OSDN Git Service

データ読み込み詰まりを抑止したつもり。
[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.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.ptpip.operation.PtpIpCameraPowerOff;
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 CanonPreferenceFragment  extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener
30 {
31     private final String TAG = toString();
32     private SharedPreferences preferences = null;
33     private PtpIpCameraPowerOff powerOffController = null;
34     private LogCatViewer logCatViewer = null;
35
36     /**
37      *
38      *
39      */
40     public static CanonPreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
41     {
42         CanonPreferenceFragment instance = new CanonPreferenceFragment();
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 PtpIpCameraPowerOff(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.CANON_RAW_SUFFIX)) {
121                 editor.putString(IPreferencePropertyAccessor.CANON_RAW_SUFFIX, IPreferencePropertyAccessor.CANON_RAW_SUFFIX_DEFAULT_VALUE);
122             }
123             editor.apply();
124         }
125         catch (Exception e)
126         {
127             e.printStackTrace();
128         }
129     }
130
131     /**
132      *
133      *
134      */
135     @Override
136     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
137     {
138         Log.v(TAG, "onSharedPreferenceChanged() : " + key);
139         boolean value;
140         if (key != null)
141         {
142             switch (key)
143             {
144                 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
145                     value = preferences.getBoolean(key, true);
146                     Log.v(TAG, " " + key + " , " + value);
147                     break;
148
149                 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
150                     value = preferences.getBoolean(key, true);
151                     Log.v(TAG, " " + key + " , " + value);
152                     break;
153
154                 default:
155                     String strValue = preferences.getString(key, "");
156                     setListPreference(key, key, strValue);
157                     break;
158             }
159         }
160     }
161
162     /**
163      *
164      *
165      */
166     @Override
167     public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
168     {
169         Log.v(TAG, "onCreatePreferences()");
170         try
171         {
172             //super.onCreate(savedInstanceState);
173             addPreferencesFromResource(R.xml.preferences_canon);
174
175             ListPreference connectionMethod = (ListPreference) findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
176             connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
177                 @Override
178                 public boolean onPreferenceChange(Preference preference, Object newValue) {
179                     preference.setSummary(newValue + " ");
180                     return (true);
181                 }
182             });
183             connectionMethod.setSummary(connectionMethod.getValue() + " ");
184
185             findPreference("exit_application").setOnPreferenceClickListener(powerOffController);
186             findPreference("debug_info").setOnPreferenceClickListener(logCatViewer);
187         }
188         catch (Exception e)
189         {
190             e.printStackTrace();
191         }
192     }
193
194     /**
195      *
196      *
197      */
198     @Override
199     public void onResume()
200     {
201         super.onResume();
202         Log.v(TAG, "onResume() Start");
203
204         try
205         {
206             synchronizedProperty();
207         }
208         catch (Exception e)
209         {
210             e.printStackTrace();
211         }
212
213         Log.v(TAG, "onResume() End");
214
215     }
216
217     /**
218      *
219      *
220      */
221     @Override
222     public void onPause()
223     {
224         super.onPause();
225         Log.v(TAG, "onPause() Start");
226
227         try
228         {
229             // Preference変更のリスナを解除
230             preferences.unregisterOnSharedPreferenceChangeListener(this);
231         }
232         catch (Exception e)
233         {
234             e.printStackTrace();
235         }
236
237         Log.v(TAG, "onPause() End");
238     }
239
240     /**
241      * ListPreference の表示データを設定
242      *
243      * @param pref_key     Preference(表示)のキー
244      * @param key          Preference(データ)のキー
245      * @param defaultValue Preferenceのデフォルト値
246      */
247     private void setListPreference(String pref_key, String key, String defaultValue)
248     {
249         try
250         {
251             ListPreference pref;
252             pref = (ListPreference) findPreference(pref_key);
253             String value = preferences.getString(key, defaultValue);
254             if (pref != null)
255             {
256                 pref.setValue(value);
257                 pref.setSummary(value);
258             }
259         }
260         catch (Exception e)
261         {
262             e.printStackTrace();
263         }
264     }
265
266     /**
267      * BooleanPreference の表示データを設定
268      *
269      * @param pref_key     Preference(表示)のキー
270      * @param key          Preference(データ)のキー
271      * @param defaultValue Preferenceのデフォルト値
272      */
273     private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
274     {
275         try
276         {
277             CheckBoxPreference pref = (CheckBoxPreference) findPreference(pref_key);
278             if (pref != null) {
279                 boolean value = preferences.getBoolean(key, defaultValue);
280                 pref.setChecked(value);
281             }
282         }
283         catch (Exception e)
284         {
285             e.printStackTrace();
286         }
287     }
288
289     /**
290      *
291      *
292      */
293     private void synchronizedProperty()
294     {
295         final FragmentActivity activity = getActivity();
296         if (activity != null)
297         {
298             activity.runOnUiThread(new Runnable() {
299                 @Override
300                 public void run() {
301                     try
302                     {
303                         // Preferenceの画面に反映させる
304                         setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
305                         setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
306                     }
307                     catch (Exception e)
308                     {
309                         e.printStackTrace();
310                     }
311                 }
312             });
313         }
314     }
315
316 }