1 package net.osdn.gokigen.pkremote.preference.panasonic;
3 import android.content.Context;
4 import android.content.SharedPreferences;
5 import android.os.Bundle;
6 import android.util.Log;
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;
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;
29 public class PanasonicPreferenceFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener
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;
41 public static PanasonicPreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
43 PanasonicPreferenceFragment instance = new PanasonicPreferenceFragment();
44 instance.prepare(context, changeScene);
46 // パラメータはBundleにまとめておく
47 Bundle arguments = new Bundle();
48 //arguments.putString("title", title);
49 //arguments.putString("message", message);
50 instance.setArguments(arguments);
59 private void prepare(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
63 powerOffController = new CameraPowerOffPanasonic(context, changeScene);
64 powerOffController.prepare();
66 logCatViewer = new LogCatViewer(changeScene);
67 logCatViewer.prepare();
69 //cameraApiListViewer = new PanasonicCameraApiListViewer(changeScene);
70 //cameraApiListViewer.prepare();
83 public void onAttach(Context activity)
85 super.onAttach(activity);
86 Log.v(TAG, "onAttach()");
91 preferences = PreferenceManager.getDefaultSharedPreferences(activity);
94 initializePreferences();
96 preferences.registerOnSharedPreferenceChangeListener(this);
108 private void initializePreferences()
112 Map<String, ?> items = preferences.getAll();
113 SharedPreferences.Editor editor = preferences.edit();
115 if (!items.containsKey(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA)) {
116 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
118 if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW)) {
119 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
121 if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD)) {
122 editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
137 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
139 Log.v(TAG, "onSharedPreferenceChanged() : " + key);
145 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
146 value = preferences.getBoolean(key, true);
147 Log.v(TAG, " " + key + " , " + value);
150 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
151 value = preferences.getBoolean(key, true);
152 Log.v(TAG, " " + key + " , " + value);
156 String strValue = preferences.getString(key, "");
157 setListPreference(key, key, strValue);
168 public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
170 Log.v(TAG, "onCreatePreferences()");
173 //super.onCreate(savedInstanceState);
174 addPreferencesFromResource(R.xml.preferences_panasonic);
176 ListPreference connectionMethod = (ListPreference) findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
177 connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
179 public boolean onPreferenceChange(Preference preference, Object newValue) {
180 preference.setSummary(newValue + " ");
184 connectionMethod.setSummary(connectionMethod.getValue() + " ");
186 findPreference("exit_application").setOnPreferenceClickListener(powerOffController);
187 findPreference("debug_info").setOnPreferenceClickListener(logCatViewer);
188 //findPreference("panasonic_api_list").setOnPreferenceClickListener(cameraApiListViewer);
201 public void onResume()
204 Log.v(TAG, "onResume() Start");
208 synchronizedProperty();
215 Log.v(TAG, "onResume() End");
224 public void onPause()
227 Log.v(TAG, "onPause() Start");
231 // Preference変更のリスナを解除
232 preferences.unregisterOnSharedPreferenceChangeListener(this);
239 Log.v(TAG, "onPause() End");
243 * ListPreference の表示データを設定
245 * @param pref_key Preference(表示)のキー
246 * @param key Preference(データ)のキー
247 * @param defaultValue Preferenceのデフォルト値
249 private void setListPreference(String pref_key, String key, String defaultValue)
254 pref = (ListPreference) findPreference(pref_key);
255 String value = preferences.getString(key, defaultValue);
258 pref.setValue(value);
259 pref.setSummary(value);
269 * BooleanPreference の表示データを設定
271 * @param pref_key Preference(表示)のキー
272 * @param key Preference(データ)のキー
273 * @param defaultValue Preferenceのデフォルト値
275 private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
279 CheckBoxPreference pref = (CheckBoxPreference) findPreference(pref_key);
281 boolean value = preferences.getBoolean(key, defaultValue);
282 pref.setChecked(value);
295 private void synchronizedProperty()
297 final FragmentActivity activity = getActivity();
298 final boolean defaultValue = true;
299 if (activity != null)
301 activity.runOnUiThread(new Runnable() {
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);