OSDN Git Service

とりあえず、Power Shot Zoomから画像をダウンロードできるところまで。
[gokigen/PKRemote.git] / app / src / main / java / net / osdn / gokigen / pkremote / preference / pixpro / PixproPreferenceFragment.java
1 package net.osdn.gokigen.pkremote.preference.pixpro;
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 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.pixpro.operation.CameraPowerOffPixpro;
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 import java.util.Map;
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 PixproPreferenceFragment  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 CameraPowerOffPixpro powerOffController = null;
41     private LogCatViewer logCatViewer = null;
42
43     /**
44      *
45      *
46      */
47     public static PixproPreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
48     {
49         PixproPreferenceFragment instance = new PixproPreferenceFragment();
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 CameraPowerOffPixpro(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             {
122                 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
123             }
124             if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW))
125             {
126                 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
127             }
128             if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD))
129             {
130                 editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
131             }
132             if (!items.containsKey(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA))
133             {
134                 editor.putBoolean(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA, false);
135             }
136             if (!items.containsKey(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE))
137             {
138                 editor.putBoolean(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE, false);
139             }
140             if (!items.containsKey(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT))
141             {
142                 editor.putString(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT, IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE);
143             }
144             if (!items.containsKey(IPreferencePropertyAccessor.USE_OSC_THETA_V21))
145             {
146                 editor.putBoolean(IPreferencePropertyAccessor.USE_OSC_THETA_V21, false);
147             }
148             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_HOST_IP))
149             {
150                 editor.putString(IPreferencePropertyAccessor.PIXPRO_HOST_IP, IPreferencePropertyAccessor.PIXPRO_HOST_IP_DEFAULT_VALUE);
151             }
152             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT))
153             {
154                 editor.putString(IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT, IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT_DEFAULT_VALUE);
155             }
156             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT))
157             {
158                 editor.putString(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT, IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE);
159             }
160             if (!items.containsKey(IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE))
161             {
162                 editor.putString(IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE, IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE_DEFAULT_VALUE);
163             }
164             if (!items.containsKey(IPreferencePropertyAccessor.CANON_HOST_IP)) {
165                 editor.putString(IPreferencePropertyAccessor.CANON_HOST_IP, IPreferencePropertyAccessor.CANON_HOST_IP_DEFAULT_VALUE);
166             }
167             if (!items.containsKey(IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE)) {
168                 editor.putString(IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE, IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE_DEFAULT_VALUE);
169             }
170             editor.apply();
171         }
172         catch (Exception e)
173         {
174             e.printStackTrace();
175         }
176     }
177
178     /**
179      *
180      *
181      */
182     @Override
183     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
184     {
185         Log.v(TAG, "onSharedPreferenceChanged() : " + key);
186         boolean value;
187         if (key != null)
188         {
189             switch (key)
190             {
191                 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
192                     value = preferences.getBoolean(key, true);
193                     Log.v(TAG, " " + key + " , " + value);
194                     break;
195
196                 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
197                     value = preferences.getBoolean(key, true);
198                     Log.v(TAG, "  " + key + " , " + value);
199                     break;
200
201                 default:
202                     String strValue = preferences.getString(key, "");
203                     setListPreference(key, key, strValue);
204                     break;
205             }
206         }
207     }
208
209     /**
210      *
211      *
212      */
213     @Override
214     public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
215     {
216         Log.v(TAG, "onCreatePreferences()");
217         try
218         {
219             //super.onCreate(savedInstanceState);
220             addPreferencesFromResource(R.xml.preferences_pixpro);
221
222             ListPreference connectionMethod = findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
223             if (connectionMethod != null)
224             {
225                 connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
226                     @Override
227                     public boolean onPreferenceChange(Preference preference, Object newValue) {
228                         preference.setSummary(newValue + " ");
229                         return (true);
230                     }
231                 });
232                 connectionMethod.setSummary(connectionMethod.getValue() + " ");
233             }
234             setOnPreferenceClickListener(findPreference(EXIT_APPLICATION), powerOffController);
235             setOnPreferenceClickListener(findPreference(DEBUG_INFO), logCatViewer);
236             setOnPreferenceClickListener(findPreference(WIFI_SETTINGS), this);
237         }
238         catch (Exception e)
239         {
240             e.printStackTrace();
241         }
242     }
243
244     /**
245      *
246      *
247      */
248     private void setOnPreferenceClickListener(Preference preference, Preference.OnPreferenceClickListener listener)
249     {
250         try
251         {
252             if (preference == null)
253             {
254                 return;
255             }
256             preference.setOnPreferenceClickListener(listener);
257         }
258         catch (Exception e)
259         {
260             e.printStackTrace();
261         }
262     }
263
264     /**
265      *
266      *
267      */
268     @Override
269     public void onResume()
270     {
271         super.onResume();
272         Log.v(TAG, "onResume() Start");
273
274         try
275         {
276             synchronizedProperty();
277         }
278         catch (Exception e)
279         {
280             e.printStackTrace();
281         }
282
283         Log.v(TAG, "onResume() End");
284
285     }
286
287     /**
288      *
289      *
290      */
291     @Override
292     public void onPause()
293     {
294         super.onPause();
295         Log.v(TAG, "onPause() Start");
296
297         try
298         {
299             // Preference変更のリスナを解除
300             preferences.unregisterOnSharedPreferenceChangeListener(this);
301         }
302         catch (Exception e)
303         {
304             e.printStackTrace();
305         }
306
307         Log.v(TAG, "onPause() End");
308     }
309
310     /**
311      * ListPreference の表示データを設定
312      *
313      * @param pref_key     Preference(表示)のキー
314      * @param key          Preference(データ)のキー
315      * @param defaultValue Preferenceのデフォルト値
316      */
317     private void setListPreference(String pref_key, String key, String defaultValue)
318     {
319         try
320         {
321             ListPreference pref = findPreference(pref_key);
322             String value = preferences.getString(key, defaultValue);
323             if (pref != null)
324             {
325                 pref.setValue(value);
326                 pref.setSummary(value);
327             }
328         }
329         catch (Exception e)
330         {
331             e.printStackTrace();
332         }
333     }
334
335     /**
336      * BooleanPreference の表示データを設定
337      *
338      * @param pref_key     Preference(表示)のキー
339      * @param key          Preference(データ)のキー
340      * @param defaultValue Preferenceのデフォルト値
341      */
342     private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
343     {
344         try
345         {
346             CheckBoxPreference pref = findPreference(pref_key);
347             if (pref != null)
348             {
349                 boolean value = preferences.getBoolean(key, defaultValue);
350                 pref.setChecked(value);
351             }
352         }
353         catch (Exception e)
354         {
355             e.printStackTrace();
356         }
357     }
358
359     /**
360      *
361      *
362      */
363     private void synchronizedProperty()
364     {
365         final FragmentActivity activity = getActivity();
366         if (activity != null)
367         {
368             activity.runOnUiThread(new Runnable() {
369                 @Override
370                 public void run() {
371                     try
372                     {
373                         // Preferenceの画面に反映させる
374                         setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
375                         setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, false);
376                     }
377                     catch (Exception e)
378                     {
379                         e.printStackTrace();
380                     }
381                 }
382             });
383         }
384     }
385
386     @Override
387     public boolean onPreferenceClick(Preference preference)
388     {
389         try
390         {
391             String preferenceKey = preference.getKey();
392             if (preferenceKey.contains(WIFI_SETTINGS))
393             {
394                 // Wifi 設定画面を表示する
395                 Log.v(TAG, " onPreferenceClick : " + preferenceKey);
396                 if (context != null)
397                 {
398                     context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
399                 }
400             }
401             return (true);
402         }
403         catch (Exception e)
404         {
405             e.printStackTrace();
406         }
407         return (false);
408     }
409 }