OSDN Git Service

Panasonicの一覧表示を入れてみた。
[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.SharedPreferences;
5 import android.os.Bundle;
6 import android.util.Log;
7
8 import androidx.annotation.NonNull;
9 import androidx.appcompat.app.AppCompatActivity;
10 import androidx.fragment.app.FragmentActivity;
11 import androidx.preference.CheckBoxPreference;
12 import androidx.preference.ListPreference;
13 import androidx.preference.Preference;
14 import androidx.preference.PreferenceFragmentCompat;
15 import androidx.preference.PreferenceManager;
16
17 import net.osdn.gokigen.pkremote.R;
18 import net.osdn.gokigen.pkremote.camera.vendor.panasonic.operation.CameraPowerOffPanasonic;
19 import net.osdn.gokigen.pkremote.logcat.LogCatViewer;
20 import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor;
21 import net.osdn.gokigen.pkremote.scene.IChangeScene;
22
23 import java.util.Map;
24
25 /**
26  *
27  *
28  */
29 public class PanasonicPreferenceFragment  extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener
30 {
31     private final String TAG = toString();
32     private SharedPreferences preferences = null;
33     private CameraPowerOffPanasonic powerOffController = null;
34     private LogCatViewer logCatViewer = null;
35     //private PanasonicCameraApiListViewer cameraApiListViewer = null;
36
37     /**
38      *
39      *
40      */
41     public static PanasonicPreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
42     {
43         PanasonicPreferenceFragment instance = new PanasonicPreferenceFragment();
44         instance.prepare(context, changeScene);
45
46         // パラメータはBundleにまとめておく
47         Bundle arguments = new Bundle();
48         //arguments.putString("title", title);
49         //arguments.putString("message", message);
50         instance.setArguments(arguments);
51
52         return (instance);
53     }
54
55     /**
56      *
57      *
58      */
59     private void prepare(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
60     {
61         try
62         {
63             powerOffController = new CameraPowerOffPanasonic(context, changeScene);
64             powerOffController.prepare();
65
66             logCatViewer = new LogCatViewer(changeScene);
67             logCatViewer.prepare();
68
69             //cameraApiListViewer = new PanasonicCameraApiListViewer(changeScene);
70             //cameraApiListViewer.prepare();
71         }
72         catch (Exception e)
73         {
74             e.printStackTrace();
75         }
76     }
77
78     /**
79      *
80      *
81      */
82     @Override
83     public void onAttach(Context activity)
84     {
85         super.onAttach(activity);
86         Log.v(TAG, "onAttach()");
87
88         try
89         {
90             // Preference をつかまえる
91             preferences = PreferenceManager.getDefaultSharedPreferences(activity);
92
93             // Preference を初期設定する
94             initializePreferences();
95
96             preferences.registerOnSharedPreferenceChangeListener(this);
97         }
98         catch (Exception e)
99         {
100             e.printStackTrace();
101         }
102     }
103
104     /**
105      * Preferenceの初期化...
106      *
107      */
108     private void initializePreferences()
109     {
110         try
111         {
112             Map<String, ?> items = preferences.getAll();
113             SharedPreferences.Editor editor = preferences.edit();
114
115             if (!items.containsKey(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA)) {
116                 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
117             }
118             if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW)) {
119                 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
120             }
121             if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD)) {
122                 editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
123             }
124             editor.apply();
125         }
126         catch (Exception e)
127         {
128             e.printStackTrace();
129         }
130     }
131
132     /**
133      *
134      *
135      */
136     @Override
137     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
138     {
139         Log.v(TAG, "onSharedPreferenceChanged() : " + key);
140         boolean value;
141         if (key != null)
142         {
143             switch (key)
144             {
145                 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
146                     value = preferences.getBoolean(key, true);
147                     Log.v(TAG, " " + key + " , " + value);
148                     break;
149
150                 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
151                     value = preferences.getBoolean(key, true);
152                     Log.v(TAG, " " + key + " , " + value);
153                     break;
154
155                 default:
156                     String strValue = preferences.getString(key, "");
157                     setListPreference(key, key, strValue);
158                     break;
159             }
160         }
161     }
162
163     /**
164      *
165      *
166      */
167     @Override
168     public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
169     {
170         Log.v(TAG, "onCreatePreferences()");
171         try
172         {
173             //super.onCreate(savedInstanceState);
174             addPreferencesFromResource(R.xml.preferences_panasonic);
175
176             ListPreference connectionMethod = (ListPreference) findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
177             connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
178                 @Override
179                 public boolean onPreferenceChange(Preference preference, Object newValue) {
180                     preference.setSummary(newValue + " ");
181                     return (true);
182                 }
183             });
184             connectionMethod.setSummary(connectionMethod.getValue() + " ");
185
186             findPreference("exit_application").setOnPreferenceClickListener(powerOffController);
187             findPreference("debug_info").setOnPreferenceClickListener(logCatViewer);
188             //findPreference("panasonic_api_list").setOnPreferenceClickListener(cameraApiListViewer);
189         }
190         catch (Exception e)
191         {
192             e.printStackTrace();
193         }
194     }
195
196     /**
197      *
198      *
199      */
200     @Override
201     public void onResume()
202     {
203         super.onResume();
204         Log.v(TAG, "onResume() Start");
205
206         try
207         {
208             synchronizedProperty();
209         }
210         catch (Exception e)
211         {
212             e.printStackTrace();
213         }
214
215         Log.v(TAG, "onResume() End");
216
217     }
218
219     /**
220      *
221      *
222      */
223     @Override
224     public void onPause()
225     {
226         super.onPause();
227         Log.v(TAG, "onPause() Start");
228
229         try
230         {
231             // Preference変更のリスナを解除
232             preferences.unregisterOnSharedPreferenceChangeListener(this);
233         }
234         catch (Exception e)
235         {
236             e.printStackTrace();
237         }
238
239         Log.v(TAG, "onPause() End");
240     }
241
242     /**
243      * ListPreference の表示データを設定
244      *
245      * @param pref_key     Preference(表示)のキー
246      * @param key          Preference(データ)のキー
247      * @param defaultValue Preferenceのデフォルト値
248      */
249     private void setListPreference(String pref_key, String key, String defaultValue)
250     {
251         try
252         {
253             ListPreference pref;
254             pref = (ListPreference) findPreference(pref_key);
255             String value = preferences.getString(key, defaultValue);
256             if (pref != null)
257             {
258                 pref.setValue(value);
259                 pref.setSummary(value);
260             }
261         }
262         catch (Exception e)
263         {
264             e.printStackTrace();
265         }
266     }
267
268     /**
269      * BooleanPreference の表示データを設定
270      *
271      * @param pref_key     Preference(表示)のキー
272      * @param key          Preference(データ)のキー
273      * @param defaultValue Preferenceのデフォルト値
274      */
275     private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
276     {
277         try
278         {
279             CheckBoxPreference pref = (CheckBoxPreference) findPreference(pref_key);
280             if (pref != null) {
281                 boolean value = preferences.getBoolean(key, defaultValue);
282                 pref.setChecked(value);
283             }
284         }
285         catch (Exception e)
286         {
287             e.printStackTrace();
288         }
289     }
290
291     /**
292      *
293      *
294      */
295     private void synchronizedProperty()
296     {
297         final FragmentActivity activity = getActivity();
298         final boolean defaultValue = true;
299         if (activity != null)
300         {
301             activity.runOnUiThread(new Runnable() {
302                 @Override
303                 public void run() {
304                     try
305                     {
306                         // Preferenceの画面に反映させる
307                         setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, defaultValue);
308                         setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, defaultValue);
309                     }
310                     catch (Exception e)
311                     {
312                         e.printStackTrace();
313                     }
314                 }
315             });
316         }
317     }
318
319 }