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