OSDN Git Service

caf99920ec5717553475a8fcbae5f14c681a58ae
[gokigen/PKRemote.git] / app / src / main / java / net / osdn / gokigen / pkremote / preference / nikon / NikonPreferenceFragment.java
1 package net.osdn.gokigen.pkremote.preference.nikon;
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 NikonPreferenceFragment  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 NikonPreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
41     {
42         NikonPreferenceFragment instance = new NikonPreferenceFragment();
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(@NonNull 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.NIKON_CAMERA_IP_ADDRESS)) {
121                 editor.putString(IPreferencePropertyAccessor.NIKON_CAMERA_IP_ADDRESS, IPreferencePropertyAccessor.NIKON_CAMERA_IP_ADDRESS_DEFAULT_VALUE);
122             }
123             if (!items.containsKey(IPreferencePropertyAccessor.BLE_WIFI_ON)) {
124                 editor.putBoolean(IPreferencePropertyAccessor.BLE_WIFI_ON, 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.BLE_WIFI_ON:
158                     value = preferences.getBoolean(key, false);
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_nikon);
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             findPreference("exit_application").setOnPreferenceClickListener(powerOffController);
194             findPreference("debug_info").setOnPreferenceClickListener(logCatViewer);
195         }
196         catch (Exception e)
197         {
198             e.printStackTrace();
199         }
200     }
201
202     /**
203      *
204      *
205      */
206     @Override
207     public void onResume()
208     {
209         super.onResume();
210         Log.v(TAG, "onResume() Start");
211
212         try
213         {
214             synchronizedProperty();
215         }
216         catch (Exception e)
217         {
218             e.printStackTrace();
219         }
220
221         Log.v(TAG, "onResume() End");
222
223     }
224
225     /**
226      *
227      *
228      */
229     @Override
230     public void onPause()
231     {
232         super.onPause();
233         Log.v(TAG, "onPause() Start");
234
235         try
236         {
237             // Preference変更のリスナを解除
238             preferences.unregisterOnSharedPreferenceChangeListener(this);
239         }
240         catch (Exception e)
241         {
242             e.printStackTrace();
243         }
244
245         Log.v(TAG, "onPause() End");
246     }
247
248     /**
249      * ListPreference の表示データを設定
250      *
251      * @param pref_key     Preference(表示)のキー
252      * @param key          Preference(データ)のキー
253      * @param defaultValue Preferenceのデフォルト値
254      */
255     private void setListPreference(String pref_key, String key, String defaultValue)
256     {
257         try
258         {
259             ListPreference pref;
260             pref = findPreference(pref_key);
261             String value = preferences.getString(key, defaultValue);
262             if (pref != null)
263             {
264                 pref.setValue(value);
265                 pref.setSummary(value);
266             }
267         }
268         catch (Exception e)
269         {
270             e.printStackTrace();
271         }
272     }
273
274     /**
275      * BooleanPreference の表示データを設定
276      *
277      * @param pref_key     Preference(表示)のキー
278      * @param key          Preference(データ)のキー
279      * @param defaultValue Preferenceのデフォルト値
280      */
281     private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
282     {
283         try
284         {
285             CheckBoxPreference pref = findPreference(pref_key);
286             if (pref != null) {
287                 boolean value = preferences.getBoolean(key, defaultValue);
288                 pref.setChecked(value);
289             }
290         }
291         catch (Exception e)
292         {
293             e.printStackTrace();
294         }
295     }
296
297     /**
298      *
299      *
300      */
301     private void synchronizedProperty()
302     {
303         final FragmentActivity activity = getActivity();
304         if (activity != null)
305         {
306             activity.runOnUiThread(new Runnable() {
307                 @Override
308                 public void run() {
309                     try
310                     {
311                         // Preferenceの画面に反映させる
312                         setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
313                         setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
314
315                         setBooleanPreference(IPreferencePropertyAccessor.BLE_WIFI_ON, IPreferencePropertyAccessor.BLE_WIFI_ON, false);
316                     }
317                     catch (Exception e)
318                     {
319                         e.printStackTrace();
320                     }
321                 }
322             });
323         }
324     }
325
326 }