1 package net.osdn.gokigen.gr2control.preference.ricohgr2;
3 import android.content.Context;
4 import android.content.SharedPreferences;
5 import android.os.Bundle;
6 import android.support.annotation.NonNull;
7 import android.support.v4.app.FragmentActivity;
8 import android.support.v7.app.AppCompatActivity;
9 import android.support.v7.preference.CheckBoxPreference;
10 import android.support.v7.preference.ListPreference;
11 import android.support.v7.preference.Preference;
12 import android.support.v7.preference.PreferenceFragmentCompat;
13 import android.support.v7.preference.PreferenceManager;
14 import android.util.Log;
16 import net.osdn.gokigen.gr2control.R;
17 import net.osdn.gokigen.gr2control.camera.ricohgr2.operation.CameraPowerOffRicohGr2;
18 import net.osdn.gokigen.gr2control.logcat.LogCatViewer;
19 import net.osdn.gokigen.gr2control.preference.IPreferencePropertyAccessor;
20 import net.osdn.gokigen.gr2control.scene.IChangeScene;
24 public class RicohGr2PreferenceFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener
26 private final String TAG = toString();
27 private SharedPreferences preferences = null;
28 private CameraPowerOffRicohGr2 powerOffController = null;
29 private LogCatViewer logCatViewer = null;
35 public static RicohGr2PreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
37 RicohGr2PreferenceFragment instance = new RicohGr2PreferenceFragment();
38 instance.prepare(context, changeScene);
40 // パラメータはBundleにまとめておく
41 Bundle arguments = new Bundle();
42 //arguments.putString("title", title);
43 //arguments.putString("message", message);
44 instance.setArguments(arguments);
53 private void prepare(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
57 powerOffController = new CameraPowerOffRicohGr2(context, changeScene);
58 powerOffController.prepare();
60 logCatViewer = new LogCatViewer(changeScene);
61 logCatViewer.prepare();
74 public void onAttach(Context activity)
76 super.onAttach(activity);
77 Log.v(TAG, "onAttach()");
81 preferences = PreferenceManager.getDefaultSharedPreferences(activity);
84 initializePreferences();
86 preferences.registerOnSharedPreferenceChangeListener(this);
98 private void initializePreferences()
102 Map<String, ?> items = preferences.getAll();
103 SharedPreferences.Editor editor = preferences.edit();
105 if (!items.containsKey(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA)) {
106 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
108 if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW)) {
109 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
111 if (!items.containsKey(IPreferencePropertyAccessor.USE_PLAYBACK_MENU)) {
112 editor.putBoolean(IPreferencePropertyAccessor.USE_PLAYBACK_MENU, false);
114 if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD)) {
115 editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
117 if (!items.containsKey(IPreferencePropertyAccessor.GR2_LCD_SLEEP)) {
118 editor.putBoolean(IPreferencePropertyAccessor.GR2_LCD_SLEEP, false);
120 if (!items.containsKey(IPreferencePropertyAccessor.GR2_DISPLAY_MODE)) {
121 editor.putString(IPreferencePropertyAccessor.GR2_DISPLAY_MODE, IPreferencePropertyAccessor.GR2_DISPLAY_MODE_DEFAULT_VALUE);
136 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
138 Log.v(TAG, "onSharedPreferenceChanged() : " + key);
144 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
145 value = preferences.getBoolean(key, true);
146 Log.v(TAG, " " + key + " , " + value);
149 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
150 value = preferences.getBoolean(key, true);
151 Log.v(TAG, " " + key + " , " + value);
154 case IPreferencePropertyAccessor.USE_PLAYBACK_MENU:
155 value = preferences.getBoolean(key, false);
156 Log.v(TAG, " " + key + " , " + value);
159 case IPreferencePropertyAccessor.GR2_LCD_SLEEP:
160 value = preferences.getBoolean(key, false);
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_ricoh_gr2);
185 ListPreference connectionMethod = (ListPreference) 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 ListPreference displayMode = (ListPreference) findPreference(IPreferencePropertyAccessor.GR2_DISPLAY_MODE);
196 displayMode.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
198 public boolean onPreferenceChange(Preference preference, Object newValue) {
199 preference.setSummary(newValue + " ");
203 displayMode.setSummary(displayMode.getValue() + " ");
205 findPreference("exit_application").setOnPreferenceClickListener(powerOffController);
206 findPreference("debug_info").setOnPreferenceClickListener(logCatViewer);
219 public void onResume()
222 Log.v(TAG, "onResume() Start");
225 synchronizedProperty();
232 Log.v(TAG, "onResume() End");
240 public void onPause()
243 Log.v(TAG, "onPause() Start");
246 // Preference変更のリスナを解除
247 preferences.unregisterOnSharedPreferenceChangeListener(this);
254 Log.v(TAG, "onPause() End");
258 * ListPreference の表示データを設定
260 * @param pref_key Preference(表示)のキー
261 * @param key Preference(データ)のキー
262 * @param defaultValue Preferenceのデフォルト値
264 private void setListPreference(String pref_key, String key, String defaultValue)
269 pref = (ListPreference) findPreference(pref_key);
270 String value = preferences.getString(key, defaultValue);
273 pref.setValue(value);
274 pref.setSummary(value);
284 * BooleanPreference の表示データを設定
286 * @param pref_key Preference(表示)のキー
287 * @param key Preference(データ)のキー
288 * @param defaultValue Preferenceのデフォルト値
290 private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
294 CheckBoxPreference pref = (CheckBoxPreference) findPreference(pref_key);
296 boolean value = preferences.getBoolean(key, defaultValue);
297 pref.setChecked(value);
310 private void synchronizedProperty()
312 final FragmentActivity activity = getActivity();
313 final boolean defaultValue = true;
314 if (activity != null)
316 activity.runOnUiThread(new Runnable() {
321 // Preferenceの画面に反映させる
322 setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, defaultValue);
323 setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, defaultValue);
324 setBooleanPreference(IPreferencePropertyAccessor.USE_PLAYBACK_MENU, IPreferencePropertyAccessor.USE_PLAYBACK_MENU, defaultValue);
325 setBooleanPreference(IPreferencePropertyAccessor.GR2_LCD_SLEEP, IPreferencePropertyAccessor.GR2_LCD_SLEEP, defaultValue);