1 package net.osdn.gokigen.gr2control.preference;
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 net.osdn.gokigen.gr2control.R;
11 import net.osdn.gokigen.gr2control.camera.ICameraConnection;
12 import net.osdn.gokigen.gr2control.logcat.LogCatViewer;
13 import net.osdn.gokigen.gr2control.scene.IChangeScene;
17 import androidx.annotation.NonNull;
18 import androidx.appcompat.app.AppCompatActivity;
19 import androidx.fragment.app.FragmentActivity;
20 import androidx.preference.CheckBoxPreference;
21 import androidx.preference.ListPreference;
22 import androidx.preference.Preference;
23 import androidx.preference.PreferenceFragmentCompat;
24 import androidx.preference.PreferenceManager;
26 public class Gr2ControlPreferenceFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener
28 private final String TAG = toString();
29 private IChangeScene changeScene = null;
30 private AppCompatActivity context = null;
31 private SharedPreferences preferences = null;
32 private LogCatViewer logCatViewer = null;
38 public static Gr2ControlPreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
40 Gr2ControlPreferenceFragment instance = new Gr2ControlPreferenceFragment();
41 instance.prepare(context, changeScene);
43 // パラメータはBundleにまとめておく
44 Bundle arguments = new Bundle();
45 //arguments.putString("title", title);
46 //arguments.putString("message", message);
47 instance.setArguments(arguments);
56 private void prepare(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
60 logCatViewer = new LogCatViewer(changeScene);
61 logCatViewer.prepare();
62 this.changeScene = changeScene;
63 this.context = context;
76 public void onAttach(@NonNull Context activity)
78 super.onAttach(activity);
79 Log.v(TAG, " onAttach()");
83 preferences = PreferenceManager.getDefaultSharedPreferences(activity);
86 initializePreferences();
88 preferences.registerOnSharedPreferenceChangeListener(this);
100 private void initializePreferences()
104 Map<String, ?> items = preferences.getAll();
105 SharedPreferences.Editor editor = preferences.edit();
107 if (!items.containsKey(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT))
109 editor.putString(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT, IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE);
111 if (!items.containsKey(IPreferencePropertyAccessor.LIVE_VIEW_QUALITY))
113 editor.putString(IPreferencePropertyAccessor.LIVE_VIEW_QUALITY, IPreferencePropertyAccessor.LIVE_VIEW_QUALITY_DEFAULT_VALUE);
115 if (!items.containsKey(IPreferencePropertyAccessor.SOUND_VOLUME_LEVEL))
117 editor.putString(IPreferencePropertyAccessor.SOUND_VOLUME_LEVEL, IPreferencePropertyAccessor.SOUND_VOLUME_LEVEL_DEFAULT_VALUE);
119 if (!items.containsKey(IPreferencePropertyAccessor.RAW))
121 editor.putBoolean(IPreferencePropertyAccessor.RAW, true);
123 if (!items.containsKey(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA))
125 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
127 if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW))
129 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, false);
131 if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD))
133 editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
135 if (!items.containsKey(IPreferencePropertyAccessor.SHARE_AFTER_SAVE)) {
136 editor.putBoolean(IPreferencePropertyAccessor.SHARE_AFTER_SAVE, false);
138 if (!items.containsKey(IPreferencePropertyAccessor.USE_PLAYBACK_MENU)) {
139 editor.putBoolean(IPreferencePropertyAccessor.USE_PLAYBACK_MENU, true);
141 if (!items.containsKey(IPreferencePropertyAccessor.GR2_DISPLAY_CAMERA_VIEW)) {
142 editor.putBoolean(IPreferencePropertyAccessor.GR2_DISPLAY_CAMERA_VIEW, true);
144 if (!items.containsKey(IPreferencePropertyAccessor.GR2_LCD_SLEEP)) {
145 editor.putBoolean(IPreferencePropertyAccessor.GR2_LCD_SLEEP, false);
147 if (!items.containsKey(IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND)) {
148 editor.putBoolean(IPreferencePropertyAccessor.USE_GR2_SPECIAL_COMMAND, true);
150 if (!items.containsKey(IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF)) {
151 editor.putBoolean(IPreferencePropertyAccessor.PENTAX_CAPTURE_AFTER_AF, false);
153 if (!items.containsKey(IPreferencePropertyAccessor.FUJI_X_DISPLAY_CAMERA_VIEW)) {
154 editor.putBoolean(IPreferencePropertyAccessor.FUJI_X_DISPLAY_CAMERA_VIEW, false);
156 if (!items.containsKey(IPreferencePropertyAccessor.FUJI_X_FOCUS_XY)) {
157 editor.putString(IPreferencePropertyAccessor.FUJI_X_FOCUS_XY, IPreferencePropertyAccessor.FUJI_X_FOCUS_XY_DEFAULT_VALUE);
159 if (!items.containsKey(IPreferencePropertyAccessor.FUJI_X_LIVEVIEW_WAIT)) {
160 editor.putString(IPreferencePropertyAccessor.FUJI_X_LIVEVIEW_WAIT, IPreferencePropertyAccessor.FUJI_X_LIVEVIEW_WAIT_DEFAULT_VALUE);
162 if (!items.containsKey(IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT)) {
163 editor.putString(IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT, IPreferencePropertyAccessor.FUJI_X_COMMAND_POLLING_WAIT_DEFAULT_VALUE);
178 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
180 Log.v(TAG, " onSharedPreferenceChanged() : " + key);
186 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
187 value = preferences.getBoolean(key, true);
188 Log.v(TAG, " " + key + " , " + value);
191 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
192 value = preferences.getBoolean(key, false);
193 Log.v(TAG, " BOTH LV : " + key + " , " + value);
196 case IPreferencePropertyAccessor.USE_PLAYBACK_MENU:
197 value = preferences.getBoolean(key, true);
198 Log.v(TAG, " PLAYBACK MENU : " + key + " , " + value);
201 case IPreferencePropertyAccessor.SHARE_AFTER_SAVE:
202 value = preferences.getBoolean(key, false);
203 Log.v(TAG, " SHARE : " + key + " , " + value);
207 String strValue = preferences.getString(key, "");
208 setListPreference(key, key, strValue);
219 public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
221 Log.v(TAG, " onCreatePreferences()");
224 //super.onCreate(savedInstanceState);
225 addPreferencesFromResource(R.xml.preferences_summary);
227 ListPreference connectionMethod = findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
228 if (connectionMethod != null)
230 connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
232 public boolean onPreferenceChange(Preference preference, Object newValue) {
233 preference.setSummary(newValue + " ");
237 connectionMethod.setSummary(connectionMethod.getValue() + " ");
240 Preference opcPreference = findPreference("opc_settings");
241 if (opcPreference != null)
243 opcPreference.setOnPreferenceClickListener(this);
245 Preference gr2Preference = findPreference("ricoh_settings");
246 if (gr2Preference != null)
248 gr2Preference.setOnPreferenceClickListener(this);
250 Preference fujiXPreference = findPreference("fuji_x_settings");
251 if (fujiXPreference != null)
253 fujiXPreference.setOnPreferenceClickListener(this);
256 Preference debug = findPreference("debug_info");
259 debug.setOnPreferenceClickListener(logCatViewer);
262 Preference wifi = findPreference("wifi_settings");
265 wifi.setOnPreferenceClickListener(this);
279 public void onResume()
282 Log.v(TAG, " onResume() Start");
285 synchronizedProperty();
292 Log.v(TAG, " onResume() End");
300 public void onPause()
303 Log.v(TAG, " onPause() Start");
306 // Preference変更のリスナを解除
307 preferences.unregisterOnSharedPreferenceChangeListener(this);
314 Log.v(TAG, " onPause() End");
318 * ListPreference の表示データを設定
320 * @param pref_key Preference(表示)のキー
321 * @param key Preference(データ)のキー
322 * @param defaultValue Preferenceのデフォルト値
324 private void setListPreference(String pref_key, String key, String defaultValue)
329 pref = findPreference(pref_key);
330 String value = preferences.getString(key, defaultValue);
333 pref.setValue(value);
334 pref.setSummary(value);
344 * BooleanPreference の表示データを設定
346 * @param pref_key Preference(表示)のキー
347 * @param key Preference(データ)のキー
348 * @param defaultValue Preferenceのデフォルト値
350 private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
354 CheckBoxPreference pref = findPreference(pref_key);
357 boolean value = preferences.getBoolean(key, defaultValue);
358 pref.setChecked(value);
371 private void synchronizedProperty()
373 final FragmentActivity activity = getActivity();
374 if (activity != null)
376 activity.runOnUiThread(new Runnable() {
381 // Preferenceの画面に反映させる
382 setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
383 setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, false);
384 setBooleanPreference(IPreferencePropertyAccessor.USE_PLAYBACK_MENU, IPreferencePropertyAccessor.USE_PLAYBACK_MENU, true);
385 setBooleanPreference(IPreferencePropertyAccessor.SHARE_AFTER_SAVE, IPreferencePropertyAccessor.SHARE_AFTER_SAVE, false);
398 public boolean onPreferenceClick(Preference preference)
402 String preferenceKey = preference.getKey();
403 Log.v(TAG, " onPreferenceClick() : " + preferenceKey);
404 if (preferenceKey.contains("wifi_settings"))
407 Log.v(TAG, " onPreferenceClick : " + preferenceKey);
410 context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
413 else if (preferenceKey.contains("ricoh_settings"))
415 changeScene.changeSceneToConfiguration(ICameraConnection.CameraConnectionMethod.RICOH_GR2);
417 else if (preferenceKey.contains("fuji_x_settings"))
419 changeScene.changeSceneToConfiguration(ICameraConnection.CameraConnectionMethod.FUJI_X);
421 else if (preferenceKey.contains("opc_settings"))
423 changeScene.changeSceneToConfiguration(ICameraConnection.CameraConnectionMethod.OPC);