1 package net.osdn.gokigen.a01d.preference.canon;
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;
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;
19 import net.osdn.gokigen.a01d.IChangeScene;
20 import net.osdn.gokigen.a01d.R;
21 import net.osdn.gokigen.a01d.camera.ptpip.operation.PtpIpCameraPowerOff;
22 import net.osdn.gokigen.a01d.logcat.LogCatViewer;
23 import net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor;
27 import static net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor.WIFI_SETTINGS;
33 public class CanonPreferenceFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener
35 private final String TAG = toString();
36 private AppCompatActivity context = null;
37 private SharedPreferences preferences = null;
38 private PtpIpCameraPowerOff powerOffController = null;
39 private LogCatViewer logCatViewer = null;
45 public static CanonPreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
47 CanonPreferenceFragment instance = new CanonPreferenceFragment();
48 instance.prepare(context, changeScene);
50 // パラメータはBundleにまとめておく
51 Bundle arguments = new Bundle();
52 //arguments.putString("title", title);
53 //arguments.putString("message", message);
54 instance.setArguments(arguments);
63 private void prepare(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
67 powerOffController = new PtpIpCameraPowerOff(context, changeScene);
68 powerOffController.prepare();
70 logCatViewer = new LogCatViewer(changeScene);
71 logCatViewer.prepare();
73 //cameraApiListViewer = new PanasonicCameraApiListViewer(changeScene);
74 //cameraApiListViewer.prepare();
76 this.context = context;
89 public void onAttach(@NonNull Context activity)
91 super.onAttach(activity);
92 Log.v(TAG, "onAttach()");
97 preferences = PreferenceManager.getDefaultSharedPreferences(activity);
100 initializePreferences();
102 preferences.registerOnSharedPreferenceChangeListener(this);
114 private void initializePreferences()
118 Map<String, ?> items = preferences.getAll();
119 SharedPreferences.Editor editor = preferences.edit();
121 if (!items.containsKey(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA)) {
122 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
124 if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW)) {
125 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
127 if (!items.containsKey(IPreferencePropertyAccessor.CANON_FOCUS_XY)) {
128 editor.putString(IPreferencePropertyAccessor.CANON_FOCUS_XY, IPreferencePropertyAccessor.CANON_FOCUS_XY_DEFAULT_VALUE);
130 if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD)) {
131 editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
146 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
148 Log.v(TAG, "onSharedPreferenceChanged() : " + key);
154 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
155 value = preferences.getBoolean(key, true);
156 Log.v(TAG, " " + key + " , " + value);
159 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
160 value = preferences.getBoolean(key, true);
161 Log.v(TAG, " " + key + " , " + value);
165 String strValue = preferences.getString(key, "");
166 setListPreference(key, key, strValue);
177 public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
179 Log.v(TAG, "onCreatePreferences()");
182 //super.onCreate(savedInstanceState);
183 addPreferencesFromResource(R.xml.preferences_olympuspen);
185 ListPreference connectionMethod = findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
186 connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
188 public boolean onPreferenceChange(Preference preference, Object newValue) {
189 preference.setSummary(newValue + " ");
193 connectionMethod.setSummary(connectionMethod.getValue() + " ");
195 findPreference("exit_application").setOnPreferenceClickListener(powerOffController);
196 findPreference("debug_info").setOnPreferenceClickListener(logCatViewer);
197 //findPreference("panasonic_api_list").setOnPreferenceClickListener(cameraApiListViewer);
198 findPreference(WIFI_SETTINGS).setOnPreferenceClickListener(this);
211 public void onResume()
214 Log.v(TAG, "onResume() Start");
218 synchronizedProperty();
225 Log.v(TAG, "onResume() End");
234 public void onPause()
237 Log.v(TAG, "onPause() Start");
241 // Preference変更のリスナを解除
242 preferences.unregisterOnSharedPreferenceChangeListener(this);
249 Log.v(TAG, "onPause() End");
253 * ListPreference の表示データを設定
255 * @param pref_key Preference(表示)のキー
256 * @param key Preference(データ)のキー
257 * @param defaultValue Preferenceのデフォルト値
259 private void setListPreference(String pref_key, String key, String defaultValue)
263 ListPreference pref = findPreference(pref_key);
264 String value = preferences.getString(key, defaultValue);
267 pref.setValue(value);
268 pref.setSummary(value);
278 * BooleanPreference の表示データを設定
280 * @param pref_key Preference(表示)のキー
281 * @param key Preference(データ)のキー
282 * @param defaultValue Preferenceのデフォルト値
284 private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
288 CheckBoxPreference pref = findPreference(pref_key);
290 boolean value = preferences.getBoolean(key, defaultValue);
291 pref.setChecked(value);
304 private void synchronizedProperty()
306 final FragmentActivity activity = getActivity();
307 final boolean defaultValue = true;
308 if (activity != null)
310 activity.runOnUiThread(new Runnable() {
315 // Preferenceの画面に反映させる
316 setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, defaultValue);
317 setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, defaultValue);
329 public boolean onPreferenceClick(Preference preference)
333 String preferenceKey = preference.getKey();
334 if (preferenceKey.contains(WIFI_SETTINGS))
337 Log.v(TAG, " onPreferenceClick : " + preferenceKey);
340 context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));