OSDN Git Service

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