OSDN Git Service

Visionkids で、カメラIPアドレスを自動で設定できるようにした。
[gokigen/PKRemote.git] / app / src / main / java / net / osdn / gokigen / pkremote / preference / visionkids / VisionKidsPreferenceFragment.kt
1 package net.osdn.gokigen.pkremote.preference.visionkids
2
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
20
21 class VisionKidsPreferenceFragment: PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener
22 {
23     private var context: AppCompatActivity? = null
24     private var preferences: SharedPreferences? = null
25     private var logCatViewer: LogCatViewer? = null
26     private var powerOffController : VisionKidsCameraPowerOff? = null
27
28     /**
29      *
30      *
31      */
32     private fun prepare(context: AppCompatActivity, changeScene: IChangeScene)
33     {
34         try
35         {
36             logCatViewer = LogCatViewer(changeScene)
37             logCatViewer?.prepare()
38             this.powerOffController = VisionKidsCameraPowerOff(context, changeScene)
39             this.powerOffController?.prepare()
40             this.context = context
41         }
42         catch (e: Exception)
43         {
44             e.printStackTrace()
45         }
46     }
47
48     /**
49      *
50      *
51      */
52     override fun onAttach(activity: Context)
53     {
54         super.onAttach(activity)
55         Log.v(TAG, "onAttach()")
56         try
57         {
58             // Preference をつかまえる
59             preferences = PreferenceManager.getDefaultSharedPreferences(activity)
60
61             // Preference を初期設定する
62             initializePreferences()
63             preferences?.registerOnSharedPreferenceChangeListener(this)
64         }
65         catch (e: Exception)
66         {
67             e.printStackTrace()
68         }
69     }
70
71     /**
72      * Preferenceの初期化...
73      *
74      */
75     private fun initializePreferences() {
76         try {
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)
81             }
82             if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW)) {
83                 editor?.putBoolean(
84                     IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW,
85                     true
86                 )
87             }
88             if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD)) {
89                 editor?.putString(
90                     IPreferencePropertyAccessor.CONNECTION_METHOD,
91                     IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE
92                 )
93             }
94             if (!items.containsKey(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA)) {
95                 editor?.putBoolean(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA, false)
96             }
97             if (!items.containsKey(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE)) {
98                 editor?.putBoolean(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE, false)
99             }
100             if (!items.containsKey(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT)) {
101                 editor?.putString(
102                     IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT,
103                     IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE
104                 )
105             }
106             if (!items.containsKey(IPreferencePropertyAccessor.USE_OSC_THETA_V21)) {
107                 editor?.putBoolean(IPreferencePropertyAccessor.USE_OSC_THETA_V21, false)
108             }
109             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_HOST_IP)) {
110                 editor?.putString(
111                     IPreferencePropertyAccessor.PIXPRO_HOST_IP,
112                     IPreferencePropertyAccessor.PIXPRO_HOST_IP_DEFAULT_VALUE
113                 )
114             }
115             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT)) {
116                 editor?.putString(
117                     IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT,
118                     IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT_DEFAULT_VALUE
119                 )
120             }
121             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT)) {
122                 editor?.putString(
123                     IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT,
124                     IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE
125                 )
126             }
127             if (!items.containsKey(IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE)) {
128                 editor?.putString(
129                     IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE,
130                     IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE_DEFAULT_VALUE
131                 )
132             }
133             if (!items.containsKey(IPreferencePropertyAccessor.CANON_HOST_IP)) {
134                 editor?.putString(
135                     IPreferencePropertyAccessor.CANON_HOST_IP,
136                     IPreferencePropertyAccessor.CANON_HOST_IP_DEFAULT_VALUE
137                 )
138             }
139             if (!items.containsKey(IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE)) {
140                 editor?.putString(
141                     IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE,
142                     IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE_DEFAULT_VALUE
143                 )
144             }
145             if (!items.containsKey(IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE)) {
146                 editor?.putString(
147                     IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE,
148                     IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE_DEFAULT_VALUE
149                 )
150             }
151             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_HOST_IP)) {
152                 editor?.putString(
153                     IPreferencePropertyAccessor.VISIONKIDS_HOST_IP,
154                     IPreferencePropertyAccessor.VISIONKIDS_HOST_IP_DEFAULT_VALUE
155                 )
156             }
157             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_FTP_USER)) {
158                 editor?.putString(
159                     IPreferencePropertyAccessor.VISIONKIDS_FTP_USER,
160                     IPreferencePropertyAccessor.VISIONKIDS_FTP_USER_DEFAULT_VALUE
161                 )
162             }
163             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS)) {
164                 editor?.putString(
165                     IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS,
166                     IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS_DEFAULT_VALUE
167                 )
168             }
169             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
170                 editor?.putString(
171                     IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT,
172                     IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE
173                 )
174             }
175             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP)) {
176                 editor?.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true)
177             }
178             editor?.apply()
179         }
180         catch (e: Exception)
181         {
182             e.printStackTrace()
183         }
184     }
185
186     /**
187      *
188      *
189      */
190     override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?)
191     {
192         Log.v(TAG, "onSharedPreferenceChanged() : $key")
193         val value: Boolean
194         if (key != null)
195         {
196             when (key)
197             {
198                 IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA -> {
199                     value = preferences?.getBoolean(key, true)?: true
200                     Log.v(TAG, " $key , $value")
201                 }
202
203                 IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW -> {
204                     value = preferences?.getBoolean(key, true)?: true
205                     Log.v(TAG, " $key , $value")
206                 }
207
208                 IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP -> {
209                     value = preferences?.getBoolean(key, true)?: true
210                     Log.v(TAG, " $key , $value")
211                 }
212
213                 else -> {
214                     val strValue = preferences?.getString(key, "")?: ""
215                     setListPreference(key, key, strValue)
216                 }
217             }
218         }
219     }
220
221     /**
222      *
223      *
224      */
225     override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?)
226     {
227         Log.v(TAG, "onCreatePreferences()")
228         try
229         {
230             //super.onCreate(savedInstanceState);
231             addPreferencesFromResource(R.xml.preferences_visionkids)
232             val connectionMethod =
233                 findPreference<ListPreference>(IPreferencePropertyAccessor.CONNECTION_METHOD)
234             if (connectionMethod != null)
235             {
236                 connectionMethod.onPreferenceChangeListener =
237                     Preference.OnPreferenceChangeListener { preference, newValue ->
238                         preference.summary = "$newValue "
239                         true
240                     }
241                 connectionMethod.summary = connectionMethod.value + " "
242             }
243             setOnPreferenceClickListener(
244                 IPreferencePropertyAccessor.EXIT_APPLICATION,
245                 powerOffController
246             )
247             setOnPreferenceClickListener(IPreferencePropertyAccessor.DEBUG_INFO, logCatViewer)
248             setOnPreferenceClickListener(IPreferencePropertyAccessor.WIFI_SETTINGS, this)
249         }
250         catch (e: Exception)
251         {
252             e.printStackTrace()
253         }
254     }
255
256     private fun setOnPreferenceClickListener(key: String, listener: Preference.OnPreferenceClickListener?)
257     {
258         val preference = findPreference<Preference>(key)
259         if (preference != null)
260         {
261             preference.onPreferenceClickListener = listener
262         }
263     }
264
265     /**
266      *
267      *
268      */
269     override fun onResume() {
270         super.onResume()
271         Log.v(TAG, "onResume() Start")
272         try {
273             synchronizedProperty()
274         } catch (e: Exception) {
275             e.printStackTrace()
276         }
277         Log.v(TAG, "onResume() End")
278     }
279
280     /**
281      *
282      *
283      */
284     override fun onPause()
285     {
286         super.onPause()
287         Log.v(TAG, "onPause() Start")
288         try
289         {
290             // Preference変更のリスナを解除
291             preferences!!.unregisterOnSharedPreferenceChangeListener(this)
292         }
293         catch (e: Exception)
294         {
295             e.printStackTrace()
296         }
297         Log.v(TAG, "onPause() End")
298     }
299
300     /**
301      * ListPreference の表示データを設定
302      *
303      * @param pref_key     Preference(表示)のキー
304      * @param key          Preference(データ)のキー
305      * @param defaultValue Preferenceのデフォルト値
306      */
307     private fun setListPreference(pref_key: String, key: String, defaultValue: String?)
308     {
309         try
310         {
311             val pref: ListPreference? = findPreference(pref_key)
312             val value = preferences?.getString(key, defaultValue)
313             if (pref != null)
314             {
315                 pref.value = value
316                 pref.summary = value
317             }
318         }
319         catch (e: Exception)
320         {
321             e.printStackTrace()
322         }
323     }
324
325     /**
326      * BooleanPreference の表示データを設定
327      *
328      */
329     private fun setBooleanPreference(prefKey: String, key: String, defaultValue: Boolean)
330     {
331         try
332         {
333             val pref = findPreference<CheckBoxPreference>(prefKey)
334             if (pref != null)
335             {
336                 val value = preferences?.getBoolean(key, defaultValue)?: defaultValue
337                 pref.isChecked = value
338             }
339         }
340         catch (e: Exception)
341         {
342             e.printStackTrace()
343         }
344     }
345
346     /**
347      *
348      *
349      */
350     private fun synchronizedProperty()
351     {
352         val activity = activity
353         val defaultValue = true
354         activity?.runOnUiThread {
355             try
356             {
357                 // Preferenceの画面に反映させる
358                 setBooleanPreference(
359                     IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA,
360                     IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA,
361                     defaultValue
362                 )
363                 setBooleanPreference(
364                     IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP,
365                     IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP,
366                     defaultValue
367                 )
368             }
369             catch (e: Exception)
370             {
371                 e.printStackTrace()
372             }
373         }
374     }
375
376     override fun onPreferenceClick(preference: Preference): Boolean
377     {
378         try
379         {
380             val preferenceKey = preference.key
381             Log.v(TAG, " onPreferenceClick : $preferenceKey")
382             if (preferenceKey.contains(IPreferencePropertyAccessor.WIFI_SETTINGS))
383             {
384                 // Wifi 設定画面を表示する
385                 if (context != null)
386                 {
387                     context?.startActivity(Intent(Settings.ACTION_WIFI_SETTINGS))
388                 }
389             }
390             return (true)
391         }
392         catch (e: Exception)
393         {
394             e.printStackTrace()
395         }
396         return (false)
397     }
398
399     companion object
400     {
401         private val TAG = VisionKidsPreferenceFragment::class.java.simpleName
402
403         /**
404          *
405          *
406          */
407         @JvmStatic fun newInstance(context: AppCompatActivity, changeScene: IChangeScene): VisionKidsPreferenceFragment
408         {
409             val instance = VisionKidsPreferenceFragment()
410             instance.prepare(context, changeScene)
411
412             // パラメータはBundleにまとめておく
413             val arguments = Bundle()
414             instance.arguments = arguments
415             return (instance)
416         }
417     }
418 }