1 package net.osdn.gokigen.pkremote.preference.visionkids
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
9 import androidx.appcompat.app.AppCompatActivity
10 import androidx.preference.CheckBoxPreference
11 import androidx.preference.ListPreference
12 import androidx.preference.Preference
13 import androidx.preference.PreferenceFragmentCompat
14 import androidx.preference.PreferenceManager
15 import net.osdn.gokigen.pkremote.R
16 import net.osdn.gokigen.pkremote.camera.vendor.visionkids.wrapper.connection.VisionKidsCameraPowerOff
17 import net.osdn.gokigen.pkremote.logcat.LogCatViewer
18 import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor
19 import net.osdn.gokigen.pkremote.scene.IChangeScene
21 class VisionKidsPreferenceFragment: PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener
23 private var context: AppCompatActivity? = null
24 private var preferences: SharedPreferences? = null
25 private var logCatViewer: LogCatViewer? = null
26 private var powerOffController : VisionKidsCameraPowerOff? = null
32 private fun prepare(context: AppCompatActivity, changeScene: IChangeScene)
36 logCatViewer = LogCatViewer(changeScene)
37 logCatViewer?.prepare()
38 this.powerOffController = VisionKidsCameraPowerOff(context, changeScene)
39 this.powerOffController?.prepare()
40 this.context = context
52 override fun onAttach(activity: Context)
54 super.onAttach(activity)
55 Log.v(TAG, "onAttach()")
59 preferences = PreferenceManager.getDefaultSharedPreferences(activity)
62 initializePreferences()
63 preferences?.registerOnSharedPreferenceChangeListener(this)
75 private fun initializePreferences() {
77 val items = preferences!!.all
78 val editor = preferences?.edit()
79 if (!items.containsKey(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA)) {
80 editor?.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true)
82 if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW)) {
84 IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW,
88 if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD)) {
90 IPreferencePropertyAccessor.CONNECTION_METHOD,
91 IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE
94 if (!items.containsKey(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA)) {
95 editor?.putBoolean(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA, false)
97 if (!items.containsKey(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE)) {
98 editor?.putBoolean(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE, false)
100 if (!items.containsKey(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT)) {
102 IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT,
103 IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE
106 if (!items.containsKey(IPreferencePropertyAccessor.USE_OSC_THETA_V21)) {
107 editor?.putBoolean(IPreferencePropertyAccessor.USE_OSC_THETA_V21, false)
109 if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_HOST_IP)) {
111 IPreferencePropertyAccessor.PIXPRO_HOST_IP,
112 IPreferencePropertyAccessor.PIXPRO_HOST_IP_DEFAULT_VALUE
115 if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT)) {
117 IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT,
118 IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT_DEFAULT_VALUE
121 if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT)) {
123 IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT,
124 IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE
127 if (!items.containsKey(IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE)) {
129 IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE,
130 IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE_DEFAULT_VALUE
133 if (!items.containsKey(IPreferencePropertyAccessor.CANON_HOST_IP)) {
135 IPreferencePropertyAccessor.CANON_HOST_IP,
136 IPreferencePropertyAccessor.CANON_HOST_IP_DEFAULT_VALUE
139 if (!items.containsKey(IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE)) {
141 IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE,
142 IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE_DEFAULT_VALUE
145 if (!items.containsKey(IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE)) {
147 IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE,
148 IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE_DEFAULT_VALUE
151 if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_HOST_IP)) {
153 IPreferencePropertyAccessor.VISIONKIDS_HOST_IP,
154 IPreferencePropertyAccessor.VISIONKIDS_HOST_IP_DEFAULT_VALUE
157 if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_FTP_USER)) {
159 IPreferencePropertyAccessor.VISIONKIDS_FTP_USER,
160 IPreferencePropertyAccessor.VISIONKIDS_FTP_USER_DEFAULT_VALUE
163 if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS)) {
165 IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS,
166 IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS_DEFAULT_VALUE
169 if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
171 IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT,
172 IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE
175 if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP)) {
176 editor?.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true)
190 override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?)
192 Log.v(TAG, "onSharedPreferenceChanged() : $key")
198 IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA -> {
199 value = preferences?.getBoolean(key, true)?: true
200 Log.v(TAG, " $key , $value")
203 IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW -> {
204 value = preferences?.getBoolean(key, true)?: true
205 Log.v(TAG, " $key , $value")
208 IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP -> {
209 value = preferences?.getBoolean(key, true)?: true
210 Log.v(TAG, " $key , $value")
214 val strValue = preferences?.getString(key, "")?: ""
215 setListPreference(key, key, strValue)
225 override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?)
227 Log.v(TAG, "onCreatePreferences()")
230 //super.onCreate(savedInstanceState);
231 addPreferencesFromResource(R.xml.preferences_visionkids)
232 val connectionMethod =
233 findPreference<ListPreference>(IPreferencePropertyAccessor.CONNECTION_METHOD)
234 if (connectionMethod != null)
236 connectionMethod.onPreferenceChangeListener =
237 Preference.OnPreferenceChangeListener { preference, newValue ->
238 preference.summary = "$newValue "
241 connectionMethod.summary = connectionMethod.value + " "
243 setOnPreferenceClickListener(
244 IPreferencePropertyAccessor.EXIT_APPLICATION,
247 setOnPreferenceClickListener(IPreferencePropertyAccessor.DEBUG_INFO, logCatViewer)
248 setOnPreferenceClickListener(IPreferencePropertyAccessor.WIFI_SETTINGS, this)
256 private fun setOnPreferenceClickListener(key: String, listener: Preference.OnPreferenceClickListener?)
258 val preference = findPreference<Preference>(key)
259 if (preference != null)
261 preference.onPreferenceClickListener = listener
269 override fun onResume() {
271 Log.v(TAG, "onResume() Start")
273 synchronizedProperty()
274 } catch (e: Exception) {
277 Log.v(TAG, "onResume() End")
284 override fun onPause()
287 Log.v(TAG, "onPause() Start")
290 // Preference変更のリスナを解除
291 preferences!!.unregisterOnSharedPreferenceChangeListener(this)
297 Log.v(TAG, "onPause() End")
301 * ListPreference の表示データを設定
303 * @param pref_key Preference(表示)のキー
304 * @param key Preference(データ)のキー
305 * @param defaultValue Preferenceのデフォルト値
307 private fun setListPreference(pref_key: String, key: String, defaultValue: String?)
311 val pref: ListPreference? = findPreference(pref_key)
312 val value = preferences?.getString(key, defaultValue)
326 * BooleanPreference の表示データを設定
329 private fun setBooleanPreference(prefKey: String, key: String, defaultValue: Boolean)
333 val pref = findPreference<CheckBoxPreference>(prefKey)
336 val value = preferences?.getBoolean(key, defaultValue)?: defaultValue
337 pref.isChecked = value
350 private fun synchronizedProperty()
352 val activity = activity
353 val defaultValue = true
354 activity?.runOnUiThread {
357 // Preferenceの画面に反映させる
358 setBooleanPreference(
359 IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA,
360 IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA,
363 setBooleanPreference(
364 IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP,
365 IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP,
376 override fun onPreferenceClick(preference: Preference): Boolean
380 val preferenceKey = preference.key
381 Log.v(TAG, " onPreferenceClick : $preferenceKey")
382 if (preferenceKey.contains(IPreferencePropertyAccessor.WIFI_SETTINGS))
387 context?.startActivity(Intent(Settings.ACTION_WIFI_SETTINGS))
401 private val TAG = VisionKidsPreferenceFragment::class.java.simpleName
407 @JvmStatic fun newInstance(context: AppCompatActivity, changeScene: IChangeScene): VisionKidsPreferenceFragment
409 val instance = VisionKidsPreferenceFragment()
410 instance.prepare(context, changeScene)
412 // パラメータはBundleにまとめておく
413 val arguments = Bundle()
414 instance.arguments = arguments