1 package net.osdn.gokigen.pkremote.preference.fujix;
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;
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;
21 import net.osdn.gokigen.pkremote.R;
22 import net.osdn.gokigen.pkremote.camera.vendor.fujix.operation.CameraPowerOffFujiX;
23 import net.osdn.gokigen.pkremote.logcat.LogCatViewer;
24 import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor;
25 import net.osdn.gokigen.pkremote.scene.IChangeScene;
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;
35 public class FujiXPreferenceFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener
37 private final String TAG = toString();
38 private AppCompatActivity context = null;
39 private SharedPreferences preferences = null;
40 private CameraPowerOffFujiX powerOffController = null;
41 private LogCatViewer logCatViewer = null;
47 public static FujiXPreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
49 FujiXPreferenceFragment instance = new FujiXPreferenceFragment();
50 instance.prepare(context, changeScene);
52 // パラメータはBundleにまとめておく
53 Bundle arguments = new Bundle();
54 //arguments.putString("title", title);
55 //arguments.putString("message", message);
56 instance.setArguments(arguments);
65 private void prepare(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
69 powerOffController = new CameraPowerOffFujiX(context, changeScene);
70 powerOffController.prepare();
72 logCatViewer = new LogCatViewer(changeScene);
73 logCatViewer.prepare();
75 this.context = context;
88 public void onAttach(Context activity)
90 super.onAttach(activity);
91 Log.v(TAG, "onAttach()");
96 preferences = PreferenceManager.getDefaultSharedPreferences(activity);
99 initializePreferences();
101 preferences.registerOnSharedPreferenceChangeListener(this);
113 private void initializePreferences()
117 Map<String, ?> items = preferences.getAll();
118 SharedPreferences.Editor editor = preferences.edit();
120 if (!items.containsKey(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA)) {
121 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
123 if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW)) {
124 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
126 if (!items.containsKey(IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW)) {
127 editor.putBoolean(IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW, false);
129 if (!items.containsKey(IPreferencePropertyAccessor.FUJIX_FOCUS_XY)) {
130 editor.putString(IPreferencePropertyAccessor.FUJIX_FOCUS_XY, IPreferencePropertyAccessor.FUJIX_FOCUS_XY_DEFAULT_VALUE);
132 if (!items.containsKey(IPreferencePropertyAccessor.FUJIX_LIVEVIEW_WAIT)) {
133 editor.putString(IPreferencePropertyAccessor.FUJIX_LIVEVIEW_WAIT, IPreferencePropertyAccessor.FUJIX_LIVEVIEW_WAIT_DEFAULT_VALUE);
135 if (!items.containsKey(IPreferencePropertyAccessor.FUJIX_COMMAND_POLLING_WAIT)) {
136 editor.putString(IPreferencePropertyAccessor.FUJIX_COMMAND_POLLING_WAIT, IPreferencePropertyAccessor.FUJIX_COMMAND_POLLING_WAIT_DEFAULT_VALUE);
138 if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD)) {
139 editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
141 if (!items.containsKey(IPreferencePropertyAccessor.FUJIX_CONNECTION_FOR_READ)) {
142 editor.putBoolean(IPreferencePropertyAccessor.FUJIX_CONNECTION_FOR_READ, false);
157 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
159 Log.v(TAG, "onSharedPreferenceChanged() : " + key);
165 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
166 value = preferences.getBoolean(key, true);
167 Log.v(TAG, " " + key + " , " + value);
170 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
171 value = preferences.getBoolean(key, true);
172 Log.v(TAG, " " + key + " , " + value);
175 case IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW:
176 value = preferences.getBoolean(key, false);
177 Log.v(TAG, " " + key + " , " + value);
180 case IPreferencePropertyAccessor.FUJIX_CONNECTION_FOR_READ:
181 value = preferences.getBoolean(key, false);
182 Log.v(TAG, " " + key + " , " + value);
186 String strValue = preferences.getString(key, "");
187 setListPreference(key, key, strValue);
198 public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
200 Log.v(TAG, "onCreatePreferences()");
203 //super.onCreate(savedInstanceState);
204 addPreferencesFromResource(R.xml.preferences_fuji_x);
206 ListPreference connectionMethod = (ListPreference) findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
207 connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
209 public boolean onPreferenceChange(Preference preference, Object newValue) {
210 preference.setSummary(newValue + " ");
214 connectionMethod.setSummary(connectionMethod.getValue() + " ");
216 findPreference(EXIT_APPLICATION).setOnPreferenceClickListener(powerOffController);
217 findPreference(DEBUG_INFO).setOnPreferenceClickListener(logCatViewer);
218 findPreference(WIFI_SETTINGS).setOnPreferenceClickListener(this);
231 public void onResume()
234 Log.v(TAG, "onResume() Start");
238 synchronizedProperty();
245 Log.v(TAG, "onResume() End");
254 public void onPause()
257 Log.v(TAG, "onPause() Start");
261 // Preference変更のリスナを解除
262 preferences.unregisterOnSharedPreferenceChangeListener(this);
269 Log.v(TAG, "onPause() End");
273 * ListPreference の表示データを設定
275 * @param pref_key Preference(表示)のキー
276 * @param key Preference(データ)のキー
277 * @param defaultValue Preferenceのデフォルト値
279 private void setListPreference(String pref_key, String key, String defaultValue)
284 pref = (ListPreference) findPreference(pref_key);
285 String value = preferences.getString(key, defaultValue);
288 pref.setValue(value);
289 pref.setSummary(value);
299 * BooleanPreference の表示データを設定
301 * @param pref_key Preference(表示)のキー
302 * @param key Preference(データ)のキー
303 * @param defaultValue Preferenceのデフォルト値
305 private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
309 CheckBoxPreference pref = (CheckBoxPreference) findPreference(pref_key);
311 boolean value = preferences.getBoolean(key, defaultValue);
312 pref.setChecked(value);
325 private void synchronizedProperty()
327 final FragmentActivity activity = getActivity();
328 if (activity != null)
330 activity.runOnUiThread(new Runnable() {
335 // Preferenceの画面に反映させる
336 setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
337 setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
338 setBooleanPreference(IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW, IPreferencePropertyAccessor.FUJIX_DISPLAY_CAMERA_VIEW, false);
339 setBooleanPreference(IPreferencePropertyAccessor.FUJIX_CONNECTION_FOR_READ, IPreferencePropertyAccessor.FUJIX_CONNECTION_FOR_READ, false);
351 public boolean onPreferenceClick(Preference preference)
355 String preferenceKey = preference.getKey();
356 if (preferenceKey.contains(WIFI_SETTINGS))
359 Log.v(TAG, " onPreferenceClick : " + preferenceKey);
362 context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));