OSDN Git Service

pixpro実装。サムネイル画像をキャッシュするサイズを変更できるようにした。(メモリが少ない端末への対策)
[gokigen/PKRemote.git] / app / src / main / java / net / osdn / gokigen / pkremote / preference / sony / SonyPreferenceFragment.java
1 package net.osdn.gokigen.pkremote.preference.sony;
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.sony.cameraproperty.SonyCameraApiListViewer;
23 import net.osdn.gokigen.pkremote.camera.vendor.sony.operation.CameraPowerOffSony;
24 import net.osdn.gokigen.pkremote.logcat.LogCatViewer;
25 import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor;
26 import net.osdn.gokigen.pkremote.scene.IChangeScene;
27
28 import static net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor.DEBUG_INFO;
29 import static net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor.EXIT_APPLICATION;
30 import static net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor.WIFI_SETTINGS;
31
32 /**
33  *
34  *
35  */
36 public class SonyPreferenceFragment  extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener
37 {
38     private final String TAG = toString();
39     private AppCompatActivity context = null;
40     private SharedPreferences preferences = null;
41     private CameraPowerOffSony powerOffController = null;
42     private LogCatViewer logCatViewer = null;
43     private SonyCameraApiListViewer cameraApiListViewer = null;
44
45     /**
46      *
47      *
48      */
49     //public static SonyPreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IInterfaceProvider factory, @NonNull IChangeScene changeScene)
50     public static SonyPreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
51     {
52         SonyPreferenceFragment instance = new SonyPreferenceFragment();
53         instance.prepare(context, changeScene);
54
55         // パラメータはBundleにまとめておく
56         Bundle arguments = new Bundle();
57         //arguments.putString("title", title);
58         //arguments.putString("message", message);
59         instance.setArguments(arguments);
60
61         return (instance);
62     }
63
64     /**
65      *
66      *
67      */
68     private void prepare(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
69     {
70         try
71         {
72             powerOffController = new CameraPowerOffSony(context, changeScene);
73             powerOffController.prepare();
74
75             logCatViewer = new LogCatViewer(changeScene);
76             logCatViewer.prepare();
77
78             cameraApiListViewer = new SonyCameraApiListViewer(changeScene);
79             cameraApiListViewer.prepare();
80
81             this.context = context;
82         }
83         catch (Exception e)
84         {
85             e.printStackTrace();
86         }
87     }
88
89     /**
90      *
91      *
92      */
93     @Override
94     public void onAttach(Context activity)
95     {
96         super.onAttach(activity);
97         Log.v(TAG, "onAttach()");
98
99         try
100         {
101             // Preference をつかまえる
102             preferences = PreferenceManager.getDefaultSharedPreferences(activity);
103
104             // Preference を初期設定する
105             initializePreferences();
106
107             preferences.registerOnSharedPreferenceChangeListener(this);
108         }
109         catch (Exception e)
110         {
111             e.printStackTrace();
112         }
113     }
114
115     /**
116      * Preferenceの初期化...
117      *
118      */
119     private void initializePreferences()
120     {
121         try
122         {
123             Map<String, ?> items = preferences.getAll();
124             SharedPreferences.Editor editor = preferences.edit();
125
126             if (!items.containsKey(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA))
127             {
128                 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
129             }
130             if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW))
131             {
132                 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
133             }
134             if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD))
135             {
136                 editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
137             }
138             if (!items.containsKey(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA))
139             {
140                 editor.putBoolean(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA, false);
141             }
142             if (!items.containsKey(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE))
143             {
144                 editor.putBoolean(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE, false);
145             }
146             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_HOST_IP))
147             {
148                 editor.putString(IPreferencePropertyAccessor.PIXPRO_HOST_IP, IPreferencePropertyAccessor.PIXPRO_HOST_IP_DEFAULT_VALUE);
149             }
150             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT))
151             {
152                 editor.putString(IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT, IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT_DEFAULT_VALUE);
153             }
154             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT))
155             {
156                 editor.putString(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT, IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE);
157             }
158             if (!items.containsKey(IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE))
159             {
160                 editor.putString(IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE, IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE_DEFAULT_VALUE);
161             }
162             editor.apply();
163         }
164         catch (Exception e)
165         {
166             e.printStackTrace();
167         }
168     }
169
170     /**
171      *
172      *
173      */
174     @Override
175     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
176     {
177         Log.v(TAG, "onSharedPreferenceChanged() : " + key);
178         boolean value;
179         if (key != null)
180         {
181             switch (key)
182             {
183                 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
184                     value = preferences.getBoolean(key, true);
185                     Log.v(TAG, " " + key + " , " + value);
186                     break;
187
188                 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
189                     value = preferences.getBoolean(key, true);
190                     Log.v(TAG, " " + key + " , " + value);
191                     break;
192
193                 case IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA:
194                     value = preferences.getBoolean(key, false);
195                     Log.v(TAG, " " + key + " , " + value);
196                     break;
197
198                 case IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE:
199                     value = preferences.getBoolean(key, false);
200                     Log.v(TAG, " " + key + " , " + value);
201                     break;
202
203                 default:
204                     String strValue = preferences.getString(key, "");
205                     setListPreference(key, key, strValue);
206                     break;
207             }
208         }
209     }
210
211     /**
212      *
213      *
214      */
215     @Override
216     public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
217     {
218         Log.v(TAG, "onCreatePreferences()");
219         try
220         {
221             //super.onCreate(savedInstanceState);
222             addPreferencesFromResource(R.xml.preferences_sony);
223
224             ListPreference connectionMethod = (ListPreference) findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
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             findPreference(EXIT_APPLICATION).setOnPreferenceClickListener(powerOffController);
235             findPreference(DEBUG_INFO).setOnPreferenceClickListener(logCatViewer);
236             findPreference(WIFI_SETTINGS).setOnPreferenceClickListener(this);
237             findPreference("sony_api_list").setOnPreferenceClickListener(cameraApiListViewer);
238         }
239         catch (Exception e)
240         {
241             e.printStackTrace();
242         }
243     }
244
245     /**
246      *
247      *
248      */
249     @Override
250     public void onResume()
251     {
252         super.onResume();
253         Log.v(TAG, "onResume() Start");
254
255         try
256         {
257             synchronizedProperty();
258         }
259         catch (Exception e)
260         {
261             e.printStackTrace();
262         }
263
264         Log.v(TAG, "onResume() End");
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                         setBooleanPreference(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA, IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA, false);
358                         setBooleanPreference(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE, IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE, false);
359                     }
360                     catch (Exception e)
361                     {
362                         e.printStackTrace();
363                     }
364                 }
365             });
366         }
367     }
368
369     @Override
370     public boolean onPreferenceClick(Preference preference)
371     {
372         try
373         {
374             String preferenceKey = preference.getKey();
375             if (preferenceKey.contains(WIFI_SETTINGS))
376             {
377                 // Wifi 設定画面を表示する
378                 Log.v(TAG, " onPreferenceClick : " + preferenceKey);
379                 if (context != null)
380                 {
381                     context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
382                 }
383             }
384             return (true);
385         }
386         catch (Exception e)
387         {
388             e.printStackTrace();
389         }
390         return (false);
391     }
392 }