OSDN Git Service

とりあえず、Power Shot Zoomから画像をダウンロードできるところまで。
[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.Intent;
5 import android.content.SharedPreferences;
6 import android.os.Bundle;
7 import android.provider.Settings;
8 import android.util.Log;
9
10 import java.util.Map;
11
12 import androidx.annotation.NonNull;
13 import androidx.appcompat.app.AppCompatActivity;
14 import androidx.fragment.app.FragmentActivity;
15 import androidx.preference.CheckBoxPreference;
16 import androidx.preference.ListPreference;
17 import androidx.preference.Preference;
18 import androidx.preference.PreferenceFragmentCompat;
19 import androidx.preference.PreferenceManager;
20
21 import net.osdn.gokigen.pkremote.R;
22 import net.osdn.gokigen.pkremote.camera.vendor.ptpip.operation.PtpIpCameraPowerOff;
23 import net.osdn.gokigen.pkremote.logcat.LogCatViewer;
24 import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor;
25 import net.osdn.gokigen.pkremote.scene.IChangeScene;
26
27 import static net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor.DEBUG_INFO;
28 import static net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor.EXIT_APPLICATION;
29 import static net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor.WIFI_SETTINGS;
30
31 /**
32  *
33  *
34  */
35 public class NikonPreferenceFragment  extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener
36 {
37     private final String TAG = toString();
38     private AppCompatActivity context = null;
39     private SharedPreferences preferences = null;
40     private PtpIpCameraPowerOff powerOffController = null;
41     private LogCatViewer logCatViewer = null;
42
43     /**
44      *
45      *
46      */
47     public static NikonPreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
48     {
49         NikonPreferenceFragment instance = new NikonPreferenceFragment();
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 PtpIpCameraPowerOff(context, changeScene);
70             powerOffController.prepare();
71
72             logCatViewer = new LogCatViewer(changeScene);
73             logCatViewer.prepare();
74
75             this.context = context;
76         }
77         catch (Exception e)
78         {
79             e.printStackTrace();
80         }
81     }
82
83     /**
84      *
85      *
86      */
87     @Override
88     public void onAttach(@NonNull Context activity)
89     {
90         super.onAttach(activity);
91         Log.v(TAG, "onAttach()");
92
93         try
94         {
95             // Preference をつかまえる
96             preferences = PreferenceManager.getDefaultSharedPreferences(activity);
97
98             // Preference を初期設定する
99             initializePreferences();
100
101             preferences.registerOnSharedPreferenceChangeListener(this);
102         }
103         catch (Exception e)
104         {
105             e.printStackTrace();
106         }
107     }
108
109     /**
110      * Preferenceの初期化...
111      *
112      */
113     private void initializePreferences()
114     {
115         try
116         {
117             Map<String, ?> items = preferences.getAll();
118             SharedPreferences.Editor editor = preferences.edit();
119
120             if (!items.containsKey(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA)) {
121                 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
122             }
123             if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW)) {
124                 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
125             }
126             if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD)) {
127                 editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
128             }
129             if (!items.containsKey(IPreferencePropertyAccessor.NIKON_CAMERA_IP_ADDRESS)) {
130                 editor.putString(IPreferencePropertyAccessor.NIKON_CAMERA_IP_ADDRESS, IPreferencePropertyAccessor.NIKON_CAMERA_IP_ADDRESS_DEFAULT_VALUE);
131             }
132             if (!items.containsKey(IPreferencePropertyAccessor.NIKON_RECEIVE_WAIT)) {
133                 editor.putString(IPreferencePropertyAccessor.NIKON_RECEIVE_WAIT, IPreferencePropertyAccessor.NIKON_RECEIVE_WAIT_DEFAULT_VALUE);
134             }
135             if (!items.containsKey(IPreferencePropertyAccessor.NIKON_USE_SCREENNAIL_AS_SMALL)) {
136                 editor.putBoolean(IPreferencePropertyAccessor.NIKON_USE_SCREENNAIL_AS_SMALL, false);
137             }
138             if (!items.containsKey(IPreferencePropertyAccessor.BLE_WIFI_ON)) {
139                 editor.putBoolean(IPreferencePropertyAccessor.BLE_WIFI_ON, false);
140             }
141             if (!items.containsKey(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA))
142             {
143                 editor.putBoolean(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA, false);
144             }
145             if (!items.containsKey(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE))
146             {
147                 editor.putBoolean(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE, false);
148             }
149             if (!items.containsKey(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT))
150             {
151                 editor.putString(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT, IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE);
152             }
153             if (!items.containsKey(IPreferencePropertyAccessor.USE_OSC_THETA_V21))
154             {
155                 editor.putBoolean(IPreferencePropertyAccessor.USE_OSC_THETA_V21, false);
156             }
157             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_HOST_IP))
158             {
159                 editor.putString(IPreferencePropertyAccessor.PIXPRO_HOST_IP, IPreferencePropertyAccessor.PIXPRO_HOST_IP_DEFAULT_VALUE);
160             }
161             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT))
162             {
163                 editor.putString(IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT, IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT_DEFAULT_VALUE);
164             }
165             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT))
166             {
167                 editor.putString(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT, IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE);
168             }
169             if (!items.containsKey(IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE))
170             {
171                 editor.putString(IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE, IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE_DEFAULT_VALUE);
172             }
173             if (!items.containsKey(IPreferencePropertyAccessor.CANON_HOST_IP)) {
174                 editor.putString(IPreferencePropertyAccessor.CANON_HOST_IP, IPreferencePropertyAccessor.CANON_HOST_IP_DEFAULT_VALUE);
175             }
176             if (!items.containsKey(IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE)) {
177                 editor.putString(IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE, IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE_DEFAULT_VALUE);
178             }
179             editor.apply();
180         }
181         catch (Exception e)
182         {
183             e.printStackTrace();
184         }
185     }
186
187     /**
188      *
189      *
190      */
191     @Override
192     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
193     {
194         Log.v(TAG, "onSharedPreferenceChanged() : " + key);
195         boolean value;
196         if (key != null)
197         {
198             switch (key)
199             {
200                 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
201                     value = preferences.getBoolean(key, true);
202                     Log.v(TAG, " " + key + " , " + value);
203                     break;
204
205                 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
206                     value = preferences.getBoolean(key, true);
207                     Log.v(TAG, " " + key + " , " + value);
208                     break;
209
210                 case IPreferencePropertyAccessor.NIKON_USE_SCREENNAIL_AS_SMALL:
211                     value = preferences.getBoolean(key, false);
212                     Log.v(TAG, " " + key + " , " + value);
213                     break;
214
215                 case IPreferencePropertyAccessor.BLE_WIFI_ON:
216                     value = preferences.getBoolean(key, false);
217                     Log.v(TAG, " " + key + " , " + value);
218                     break;
219
220                 default:
221                     String strValue = preferences.getString(key, "");
222                     setListPreference(key, key, strValue);
223                     break;
224             }
225         }
226     }
227
228     /**
229      *
230      *
231      */
232     @Override
233     public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
234     {
235         Log.v(TAG, "onCreatePreferences()");
236         try
237         {
238             //super.onCreate(savedInstanceState);
239             addPreferencesFromResource(R.xml.preferences_nikon);
240
241             ListPreference connectionMethod = findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
242             connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
243                 @Override
244                 public boolean onPreferenceChange(Preference preference, Object newValue) {
245                     preference.setSummary(newValue + " ");
246                     return (true);
247                 }
248             });
249             connectionMethod.setSummary(connectionMethod.getValue() + " ");
250
251             findPreference(EXIT_APPLICATION).setOnPreferenceClickListener(powerOffController);
252             findPreference(DEBUG_INFO).setOnPreferenceClickListener(logCatViewer);
253             findPreference(WIFI_SETTINGS).setOnPreferenceClickListener(this);
254         }
255         catch (Exception e)
256         {
257             e.printStackTrace();
258         }
259     }
260
261     /**
262      *
263      *
264      */
265     @Override
266     public void onResume()
267     {
268         super.onResume();
269         Log.v(TAG, "onResume() Start");
270
271         try
272         {
273             synchronizedProperty();
274         }
275         catch (Exception e)
276         {
277             e.printStackTrace();
278         }
279
280         Log.v(TAG, "onResume() End");
281
282     }
283
284     /**
285      *
286      *
287      */
288     @Override
289     public void onPause()
290     {
291         super.onPause();
292         Log.v(TAG, "onPause() Start");
293
294         try
295         {
296             // Preference変更のリスナを解除
297             preferences.unregisterOnSharedPreferenceChangeListener(this);
298         }
299         catch (Exception e)
300         {
301             e.printStackTrace();
302         }
303
304         Log.v(TAG, "onPause() End");
305     }
306
307     /**
308      * ListPreference の表示データを設定
309      *
310      * @param pref_key     Preference(表示)のキー
311      * @param key          Preference(データ)のキー
312      * @param defaultValue Preferenceのデフォルト値
313      */
314     private void setListPreference(String pref_key, String key, String defaultValue)
315     {
316         try
317         {
318             ListPreference pref;
319             pref = findPreference(pref_key);
320             String value = preferences.getString(key, defaultValue);
321             if (pref != null)
322             {
323                 pref.setValue(value);
324                 pref.setSummary(value);
325             }
326         }
327         catch (Exception e)
328         {
329             e.printStackTrace();
330         }
331     }
332
333     /**
334      * BooleanPreference の表示データを設定
335      *
336      * @param pref_key     Preference(表示)のキー
337      * @param key          Preference(データ)のキー
338      * @param defaultValue Preferenceのデフォルト値
339      */
340     private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
341     {
342         try
343         {
344             CheckBoxPreference pref = findPreference(pref_key);
345             if (pref != null) {
346                 boolean value = preferences.getBoolean(key, defaultValue);
347                 pref.setChecked(value);
348             }
349         }
350         catch (Exception e)
351         {
352             e.printStackTrace();
353         }
354     }
355
356     /**
357      *
358      *
359      */
360     private void synchronizedProperty()
361     {
362         final FragmentActivity activity = getActivity();
363         if (activity != null)
364         {
365             activity.runOnUiThread(new Runnable() {
366                 @Override
367                 public void run() {
368                     try
369                     {
370                         // Preferenceの画面に反映させる
371                         setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
372                         setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
373                         setBooleanPreference(IPreferencePropertyAccessor.NIKON_USE_SCREENNAIL_AS_SMALL, IPreferencePropertyAccessor.NIKON_USE_SCREENNAIL_AS_SMALL, false);
374                         setBooleanPreference(IPreferencePropertyAccessor.BLE_WIFI_ON, IPreferencePropertyAccessor.BLE_WIFI_ON, false);
375                     }
376                     catch (Exception e)
377                     {
378                         e.printStackTrace();
379                     }
380                 }
381             });
382         }
383     }
384
385     @Override
386     public boolean onPreferenceClick(Preference preference)
387     {
388         try
389         {
390             String preferenceKey = preference.getKey();
391             if (preferenceKey.contains(WIFI_SETTINGS))
392             {
393                 // Wifi 設定画面を表示する
394                 Log.v(TAG, " onPreferenceClick : " + preferenceKey);
395                 if (context != null)
396                 {
397                     context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
398                 }
399             }
400             return (true);
401         }
402         catch (Exception e)
403         {
404             e.printStackTrace();
405         }
406         return (false);
407     }
408 }