1 package net.osdn.gokigen.pkremote.preference.pixpro;
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.pkremote.R;
20 import net.osdn.gokigen.pkremote.camera.vendor.pixpro.operation.CameraPowerOffPixpro;
21 import net.osdn.gokigen.pkremote.logcat.LogCatViewer;
22 import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor;
23 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 PixproPreferenceFragment 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 CameraPowerOffPixpro powerOffController = null;
41 private LogCatViewer logCatViewer = null;
47 public static PixproPreferenceFragment newInstance(@NonNull AppCompatActivity context, @NonNull IChangeScene changeScene)
49 PixproPreferenceFragment instance = new PixproPreferenceFragment();
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 CameraPowerOffPixpro(context, changeScene);
70 powerOffController.prepare();
72 logCatViewer = new LogCatViewer(changeScene);
73 logCatViewer.prepare();
75 this.context = context;
88 public void onAttach(@NonNull 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))
122 editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
124 if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW))
126 editor.putBoolean(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, true);
128 if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD))
130 editor.putString(IPreferencePropertyAccessor.CONNECTION_METHOD, IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE);
132 if (!items.containsKey(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA))
134 editor.putBoolean(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA, false);
136 if (!items.containsKey(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE))
138 editor.putBoolean(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE, false);
140 if (!items.containsKey(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT))
142 editor.putString(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT, IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE);
144 if (!items.containsKey(IPreferencePropertyAccessor.USE_OSC_THETA_V21))
146 editor.putBoolean(IPreferencePropertyAccessor.USE_OSC_THETA_V21, false);
148 if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_HOST_IP))
150 editor.putString(IPreferencePropertyAccessor.PIXPRO_HOST_IP, IPreferencePropertyAccessor.PIXPRO_HOST_IP_DEFAULT_VALUE);
152 if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT))
154 editor.putString(IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT, IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT_DEFAULT_VALUE);
156 if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT))
158 editor.putString(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT, IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE);
160 if (!items.containsKey(IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE))
162 editor.putString(IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE, IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE_DEFAULT_VALUE);
164 if (!items.containsKey(IPreferencePropertyAccessor.CANON_HOST_IP)) {
165 editor.putString(IPreferencePropertyAccessor.CANON_HOST_IP, IPreferencePropertyAccessor.CANON_HOST_IP_DEFAULT_VALUE);
167 if (!items.containsKey(IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE)) {
168 editor.putString(IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE, IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE_DEFAULT_VALUE);
183 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
185 Log.v(TAG, "onSharedPreferenceChanged() : " + key);
191 case IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA:
192 value = preferences.getBoolean(key, true);
193 Log.v(TAG, " " + key + " , " + value);
196 case IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW:
197 value = preferences.getBoolean(key, true);
198 Log.v(TAG, " " + key + " , " + value);
202 String strValue = preferences.getString(key, "");
203 setListPreference(key, key, strValue);
214 public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
216 Log.v(TAG, "onCreatePreferences()");
219 //super.onCreate(savedInstanceState);
220 addPreferencesFromResource(R.xml.preferences_pixpro);
222 ListPreference connectionMethod = findPreference(IPreferencePropertyAccessor.CONNECTION_METHOD);
223 if (connectionMethod != null)
225 connectionMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
227 public boolean onPreferenceChange(Preference preference, Object newValue) {
228 preference.setSummary(newValue + " ");
232 connectionMethod.setSummary(connectionMethod.getValue() + " ");
234 setOnPreferenceClickListener(findPreference(EXIT_APPLICATION), powerOffController);
235 setOnPreferenceClickListener(findPreference(DEBUG_INFO), logCatViewer);
236 setOnPreferenceClickListener(findPreference(WIFI_SETTINGS), this);
248 private void setOnPreferenceClickListener(Preference preference, Preference.OnPreferenceClickListener listener)
252 if (preference == null)
256 preference.setOnPreferenceClickListener(listener);
269 public void onResume()
272 Log.v(TAG, "onResume() Start");
276 synchronizedProperty();
283 Log.v(TAG, "onResume() End");
292 public void onPause()
295 Log.v(TAG, "onPause() Start");
299 // Preference変更のリスナを解除
300 preferences.unregisterOnSharedPreferenceChangeListener(this);
307 Log.v(TAG, "onPause() End");
311 * ListPreference の表示データを設定
313 * @param pref_key Preference(表示)のキー
314 * @param key Preference(データ)のキー
315 * @param defaultValue Preferenceのデフォルト値
317 private void setListPreference(String pref_key, String key, String defaultValue)
321 ListPreference pref = findPreference(pref_key);
322 String value = preferences.getString(key, defaultValue);
325 pref.setValue(value);
326 pref.setSummary(value);
336 * BooleanPreference の表示データを設定
338 * @param pref_key Preference(表示)のキー
339 * @param key Preference(データ)のキー
340 * @param defaultValue Preferenceのデフォルト値
342 private void setBooleanPreference(String pref_key, String key, boolean defaultValue)
346 CheckBoxPreference pref = findPreference(pref_key);
349 boolean value = preferences.getBoolean(key, defaultValue);
350 pref.setChecked(value);
363 private void synchronizedProperty()
365 final FragmentActivity activity = getActivity();
366 if (activity != null)
368 activity.runOnUiThread(new Runnable() {
373 // Preferenceの画面に反映させる
374 setBooleanPreference(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true);
375 setBooleanPreference(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, false);
387 public boolean onPreferenceClick(Preference preference)
391 String preferenceKey = preference.getKey();
392 if (preferenceKey.contains(WIFI_SETTINGS))
395 Log.v(TAG, " onPreferenceClick : " + preferenceKey);
398 context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));