OSDN Git Service

Visionkids で、カメラIPアドレスを自動で設定できるようにした。
authorMRSa <mrsa@myad.jp>
Sun, 30 Jul 2023 11:17:01 +0000 (20:17 +0900)
committerMRSa <mrsa@myad.jp>
Sun, 30 Jul 2023 11:17:01 +0000 (20:17 +0900)
17 files changed:
app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/visionkids/wrapper/playback/VisionKidsCameraContentProvider.kt
app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/visionkids/wrapper/playback/VisionKidsPlaybackControl.kt
app/src/main/java/net/osdn/gokigen/pkremote/preference/IPreferencePropertyAccessor.java
app/src/main/java/net/osdn/gokigen/pkremote/preference/canon/CanonPreferenceFragment.java
app/src/main/java/net/osdn/gokigen/pkremote/preference/fujix/FujiXPreferenceFragment.java
app/src/main/java/net/osdn/gokigen/pkremote/preference/nikon/NikonPreferenceFragment.java
app/src/main/java/net/osdn/gokigen/pkremote/preference/olympus/OpcPreferenceFragment.java
app/src/main/java/net/osdn/gokigen/pkremote/preference/olympuspen/OlympusPenPreferenceFragment.java
app/src/main/java/net/osdn/gokigen/pkremote/preference/panasonic/PanasonicPreferenceFragment.java
app/src/main/java/net/osdn/gokigen/pkremote/preference/pixpro/PixproPreferenceFragment.java
app/src/main/java/net/osdn/gokigen/pkremote/preference/ricohgr2/RicohGr2PreferenceFragment.java
app/src/main/java/net/osdn/gokigen/pkremote/preference/sony/SonyPreferenceFragment.java
app/src/main/java/net/osdn/gokigen/pkremote/preference/theta/ThetaPreferenceFragment.java
app/src/main/java/net/osdn/gokigen/pkremote/preference/visionkids/VisionKidsPreferenceFragment.kt
app/src/main/res/values-ja/strings.xml
app/src/main/res/values/strings.xml
app/src/main/res/xml/preferences_visionkids.xml

index 5af4496..9c6814b 100644 (file)
@@ -1,13 +1,18 @@
 package net.osdn.gokigen.pkremote.camera.vendor.visionkids.wrapper.playback
 
+import android.content.Context
+import android.net.ConnectivityManager
+import android.net.RouteInfo
+import android.os.Build
 import android.util.Log
 import androidx.appcompat.app.AppCompatActivity
 import androidx.preference.PreferenceManager
 import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraContent
 import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraContentListCallback
 import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor
+import java.net.Inet6Address
 
-class VisionKidsCameraContentProvider(context: AppCompatActivity) : IFtpServiceCallback
+class VisionKidsCameraContentProvider(private val context: AppCompatActivity) : IFtpServiceCallback
 {
     private val ftpClient = MyFtpClient(this)
     private val preferences = PreferenceManager.getDefaultSharedPreferences(context)
@@ -54,12 +59,41 @@ class VisionKidsCameraContentProvider(context: AppCompatActivity) : IFtpServiceC
         }
     }
 
+    fun getHostAddress() : String
+    {
+        val autoHost = preferences.getBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true)
+        var address = preferences.getString(IPreferencePropertyAccessor.VISIONKIDS_HOST_IP, IPreferencePropertyAccessor.VISIONKIDS_HOST_IP_DEFAULT_VALUE)?: IPreferencePropertyAccessor.VISIONKIDS_HOST_IP_DEFAULT_VALUE
+        try
+        {
+            if ((autoHost)&&(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M))
+            {
+                val connectivityManager = context.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+                val activeNetwork = connectivityManager.activeNetwork?: return (address)
+                val routes: List<RouteInfo> = connectivityManager.getLinkProperties(activeNetwork)?.routes ?: return (address)
+                for (route in routes)
+                {
+                    val gateway = route.gateway
+                    if ((route.isDefaultRoute) && (!(gateway is Inet6Address))&&(gateway != null))
+                    {
+                        address = gateway.toString().replace("/","")
+                        Log.v(TAG, " --------- default Gateway : $address  --------- ")
+                        break
+                    }
+                }
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+        return (address)
+    }
 
     fun getContentList(callback: ICameraContentListCallback)
     {
         try
         {
-            val address = preferences.getString(IPreferencePropertyAccessor.VISIONKIDS_HOST_IP, IPreferencePropertyAccessor.VISIONKIDS_HOST_IP_DEFAULT_VALUE)?: IPreferencePropertyAccessor.VISIONKIDS_HOST_IP_DEFAULT_VALUE
+            val address = getHostAddress()
             this.callback = callback
             ftpClient.connect(address)
         }
index 1c5dc70..794f94b 100644 (file)
@@ -16,13 +16,11 @@ import net.osdn.gokigen.pkremote.camera.playback.ProgressEvent
 import net.osdn.gokigen.pkremote.camera.utils.SimpleHttpClient
 import net.osdn.gokigen.pkremote.camera.utils.SimpleHttpClient.IReceivedMessageCallback
 import net.osdn.gokigen.pkremote.camera.vendor.visionkids.wrapper.connection.IVisionKidsConnection
-import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor
 import java.util.Date
 
 class VisionKidsPlaybackControl(activity: AppCompatActivity, private val provider: ICameraStatusReceiver, private val informationReceiver: IInformationReceiver, timeoutMs: Int = DEFAULT_TIMEOUT): IPlaybackControl, IVisionKidsConnection
 {
     private val contentProvider = VisionKidsCameraContentProvider(activity)
-    private val preferences = PreferenceManager.getDefaultSharedPreferences(activity)
     private val timeoutValue = Math.max(DEFAULT_TIMEOUT, timeoutMs)
 
     override fun getRawFileSuffix(): String
@@ -77,7 +75,7 @@ class VisionKidsPlaybackControl(activity: AppCompatActivity, private val provide
     {
         try
         {
-            val address = preferences.getString(IPreferencePropertyAccessor.VISIONKIDS_HOST_IP, IPreferencePropertyAccessor.VISIONKIDS_HOST_IP_DEFAULT_VALUE)?: IPreferencePropertyAccessor.VISIONKIDS_HOST_IP_DEFAULT_VALUE
+            val address = contentProvider.getHostAddress()
             val urlToGet = "http://$address/DCIM/T/$path".replace("//","/")
             Log.v(TAG, "downloadContentThumbnail($path) : $urlToGet")
 
@@ -99,7 +97,7 @@ class VisionKidsPlaybackControl(activity: AppCompatActivity, private val provide
         {
             // 取得先URLを特定する
             val dataType = if (isSmallSize) { "T" } else { "O" }
-            val address = preferences.getString(IPreferencePropertyAccessor.VISIONKIDS_HOST_IP, IPreferencePropertyAccessor.VISIONKIDS_HOST_IP_DEFAULT_VALUE)?: IPreferencePropertyAccessor.VISIONKIDS_HOST_IP_DEFAULT_VALUE
+            val address = contentProvider.getHostAddress()
             val urlToGet = "http://$address/DCIM/$dataType/$path".replace("//","/")
             Log.v(TAG, "downloadContent($path, $isSmallSize) : $urlToGet")
 
index df0b786..5213867 100644 (file)
@@ -152,7 +152,7 @@ public interface IPreferencePropertyAccessor
     String VISIONKIDS_LIST_TIMEOUT = "visionkids_get_pics_list_timeout";
     String VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE = "30";
 
-
+    String VISIONKIDS_AUTO_SET_HOST_IP = "visionkids_auto_detect_ip_host";
 
 /*
     //String GR2_DISPLAY_MODE = "gr2_display_mode";
index 2ff9c84..bc635e3 100644 (file)
@@ -194,6 +194,10 @@ public class CanonPreferenceFragment  extends PreferenceFragmentCompat implement
             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT, IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE);
             }
+            if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP))
+            {
+                editor.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true);
+            }
             editor.apply();
         }
         catch (Exception e)
index fefb09a..c9ca243 100644 (file)
@@ -194,6 +194,10 @@ public class FujiXPreferenceFragment  extends PreferenceFragmentCompat implement
             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT, IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE);
             }
+            if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP))
+            {
+                editor.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true);
+            }
             editor.apply();
         }
         catch (Exception e)
index 486329a..93f0c12 100644 (file)
@@ -191,6 +191,10 @@ public class NikonPreferenceFragment  extends PreferenceFragmentCompat implement
             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT, IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE);
             }
+            if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP))
+            {
+                editor.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true);
+            }
             editor.apply();
         }
         catch (Exception e)
index bf37731..acb1e97 100644 (file)
@@ -220,6 +220,10 @@ public class OpcPreferenceFragment extends PreferenceFragmentCompat implements S
         if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
             editor.putString(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT, IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE);
         }
+        if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP))
+        {
+            editor.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true);
+        }
         editor.apply();
     }
 
index da27f45..c4249fd 100644 (file)
@@ -185,6 +185,10 @@ public class OlympusPenPreferenceFragment  extends PreferenceFragmentCompat impl
             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT, IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE);
             }
+            if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP))
+            {
+                editor.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true);
+            }
             editor.apply();
         }
         catch (Exception e)
index 77426f0..be8a276 100644 (file)
@@ -183,6 +183,10 @@ public class PanasonicPreferenceFragment  extends PreferenceFragmentCompat imple
             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT, IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE);
             }
+            if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP))
+            {
+                editor.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true);
+            }
             editor.apply();
         }
         catch (Exception e)
index f439089..e364bba 100644 (file)
@@ -182,6 +182,10 @@ public class PixproPreferenceFragment  extends PreferenceFragmentCompat implemen
             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT, IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE);
             }
+            if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP))
+            {
+                editor.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true);
+            }
             editor.apply();
         }
         catch (Exception e)
index a85e00a..06cd0dd 100644 (file)
@@ -198,6 +198,10 @@ public class RicohGr2PreferenceFragment  extends PreferenceFragmentCompat implem
             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT, IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE);
             }
+            if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP))
+            {
+                editor.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true);
+            }
             editor.apply();
         }
         catch (Exception e)
index 54b7311..4a2bb5e 100644 (file)
@@ -180,6 +180,10 @@ public class SonyPreferenceFragment  extends PreferenceFragmentCompat implements
             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT, IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE);
             }
+            if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP))
+            {
+                editor.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true);
+            }
             editor.apply();
         }
         catch (Exception e)
index ce0ae17..dcf12c5 100644 (file)
@@ -182,6 +182,10 @@ public class ThetaPreferenceFragment  extends PreferenceFragmentCompat implement
             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
                 editor.putString(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT, IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE);
             }
+            if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP))
+            {
+                editor.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true);
+            }
             editor.apply();
         }
         catch (Exception e)
index 1efa88c..caf247a 100644 (file)
@@ -75,104 +75,107 @@ class VisionKidsPreferenceFragment: PreferenceFragmentCompat(), SharedPreference
     private fun initializePreferences() {
         try {
             val items = preferences!!.all
-            val editor = preferences!!.edit()
+            val editor = preferences?.edit()
             if (!items.containsKey(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA)) {
-                editor.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true)
+                editor?.putBoolean(IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA, true)
             }
             if (!items.containsKey(IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW)) {
-                editor.putBoolean(
+                editor?.putBoolean(
                     IPreferencePropertyAccessor.CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW,
                     true
                 )
             }
             if (!items.containsKey(IPreferencePropertyAccessor.CONNECTION_METHOD)) {
-                editor.putString(
+                editor?.putString(
                     IPreferencePropertyAccessor.CONNECTION_METHOD,
                     IPreferencePropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE
                 )
             }
             if (!items.containsKey(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA)) {
-                editor.putBoolean(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA, false)
+                editor?.putBoolean(IPreferencePropertyAccessor.GET_SMALL_PICTURE_AS_VGA, false)
             }
             if (!items.containsKey(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE)) {
-                editor.putBoolean(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE, false)
+                editor?.putBoolean(IPreferencePropertyAccessor.USE_SMARTPHONE_TRANSFER_MODE, false)
             }
             if (!items.containsKey(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT)) {
-                editor.putString(
+                editor?.putString(
                     IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT,
                     IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE
                 )
             }
             if (!items.containsKey(IPreferencePropertyAccessor.USE_OSC_THETA_V21)) {
-                editor.putBoolean(IPreferencePropertyAccessor.USE_OSC_THETA_V21, false)
+                editor?.putBoolean(IPreferencePropertyAccessor.USE_OSC_THETA_V21, false)
             }
             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_HOST_IP)) {
-                editor.putString(
+                editor?.putString(
                     IPreferencePropertyAccessor.PIXPRO_HOST_IP,
                     IPreferencePropertyAccessor.PIXPRO_HOST_IP_DEFAULT_VALUE
                 )
             }
             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT)) {
-                editor.putString(
+                editor?.putString(
                     IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT,
                     IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT_DEFAULT_VALUE
                 )
             }
             if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT)) {
-                editor.putString(
+                editor?.putString(
                     IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT,
                     IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE
                 )
             }
             if (!items.containsKey(IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE)) {
-                editor.putString(
+                editor?.putString(
                     IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE,
                     IPreferencePropertyAccessor.THUMBNAIL_IMAGE_CACHE_SIZE_DEFAULT_VALUE
                 )
             }
             if (!items.containsKey(IPreferencePropertyAccessor.CANON_HOST_IP)) {
-                editor.putString(
+                editor?.putString(
                     IPreferencePropertyAccessor.CANON_HOST_IP,
                     IPreferencePropertyAccessor.CANON_HOST_IP_DEFAULT_VALUE
                 )
             }
             if (!items.containsKey(IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE)) {
-                editor.putString(
+                editor?.putString(
                     IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE,
                     IPreferencePropertyAccessor.CANON_CONNECTION_SEQUENCE_DEFAULT_VALUE
                 )
             }
             if (!items.containsKey(IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE)) {
-                editor.putString(
+                editor?.putString(
                     IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE,
                     IPreferencePropertyAccessor.CANON_SMALL_PICTURE_TYPE_DEFAULT_VALUE
                 )
             }
             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_HOST_IP)) {
-                editor.putString(
+                editor?.putString(
                     IPreferencePropertyAccessor.VISIONKIDS_HOST_IP,
                     IPreferencePropertyAccessor.VISIONKIDS_HOST_IP_DEFAULT_VALUE
                 )
             }
             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_FTP_USER)) {
-                editor.putString(
+                editor?.putString(
                     IPreferencePropertyAccessor.VISIONKIDS_FTP_USER,
                     IPreferencePropertyAccessor.VISIONKIDS_FTP_USER_DEFAULT_VALUE
                 )
             }
             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS)) {
-                editor.putString(
+                editor?.putString(
                     IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS,
                     IPreferencePropertyAccessor.VISIONKIDS_FTP_PASS_DEFAULT_VALUE
                 )
             }
             if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT)) {
-                editor.putString(
+                editor?.putString(
                     IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT,
                     IPreferencePropertyAccessor.VISIONKIDS_LIST_TIMEOUT_DEFAULT_VALUE
                 )
             }
-            editor.apply()
+            if (!items.containsKey(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP)) {
+                editor?.putBoolean(IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP, true)
+            }
+            editor?.apply()
         }
         catch (e: Exception)
         {
@@ -202,8 +205,8 @@ class VisionKidsPreferenceFragment: PreferenceFragmentCompat(), SharedPreference
                     Log.v(TAG, " $key , $value")
                 }
 
-                IPreferencePropertyAccessor.USE_OSC_THETA_V21 -> {
-                    value = preferences?.getBoolean(key, false)?: false
+                IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP -> {
+                    value = preferences?.getBoolean(key, true)?: true
                     Log.v(TAG, " $key , $value")
                 }
 
@@ -322,15 +325,12 @@ class VisionKidsPreferenceFragment: PreferenceFragmentCompat(), SharedPreference
     /**
      * BooleanPreference の表示データを設定
      *
-     * @param pref_key     Preference(表示)のキー
-     * @param key          Preference(データ)のキー
-     * @param defaultValue Preferenceのデフォルト値
      */
-    private fun setBooleanPreference(pref_key: String, key: String, defaultValue: Boolean)
+    private fun setBooleanPreference(prefKey: String, key: String, defaultValue: Boolean)
     {
         try
         {
-            val pref = findPreference<CheckBoxPreference>(pref_key)
+            val pref = findPreference<CheckBoxPreference>(prefKey)
             if (pref != null)
             {
                 val value = preferences?.getBoolean(key, defaultValue)?: defaultValue
@@ -360,6 +360,11 @@ class VisionKidsPreferenceFragment: PreferenceFragmentCompat(), SharedPreference
                     IPreferencePropertyAccessor.AUTO_CONNECT_TO_CAMERA,
                     defaultValue
                 )
+                setBooleanPreference(
+                    IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP,
+                    IPreferencePropertyAccessor.VISIONKIDS_AUTO_SET_HOST_IP,
+                    defaultValue
+                )
             }
             catch (e: Exception)
             {
index 2eeaa8d..9883603 100644 (file)
     <string name="pref_summary_canon_small_picture_type">スモール画像がうまく取得できない場合、設定を変更してみてください。 (初期値: TYPE0)</string>
 
     <string name="pref_visionkids_host_ip">カメラIP(初期値:192.168.4.100)</string>
-    <string name="pref_summary_visionkids_host_ip">VisionKids:192.168.4.100, myFirst:192.168.1.1 </string>
+    <string name="pref_summary_visionkids_host_ip">カメラIPを設定するときのアドレス\nVisionKids:192.168.4.100, myFirst:192.168.1.1 </string>
 
     <string name="pref_visionkids_ftp_user">カメラアクセス用設定(User)</string>
     <string name="pref_summary_visionkids_ftp_user">通常、変更は不要です (初期値:ftp)</string>
     <string name="pref_visionkids_get_pics_list_timeout">撮影画像一覧取得時のタイムアウト(単位:秒)</string>
     <string name="pref_summary_visionkids_get_pics_list_timeout">通常、変更は不要です (初期値:30)</string>
 
+    <string name="pref_visionkids_auto_detect_ip_host">カメラIPアドレスを自動設定</string>
+    <string name="pref_summary_visionkids_auto_detect_ip_host">通常、ONのままでご使用ください。</string>
+
 </resources>
index e86e9f0..f01e4a2 100644 (file)
     <string name="pref_visionkids_get_pics_list_timeout">Get Pics List Timeout(unit: sec.)</string>
     <string name="pref_summary_visionkids_get_pics_list_timeout">If the camera has many number of Pics, increase number.</string>
 
+    <string name="pref_visionkids_auto_detect_ip_host">Set camera ip automatically.</string>
+    <string name="pref_summary_visionkids_auto_detect_ip_host">Normally to keep ON.</string>
 </resources>
index 8c1a7ca..bbfe932 100644 (file)
     <PreferenceCategory
         android:title="@string/pref_cat_camera">
 
+        <CheckBoxPreference
+            android:key="visionkids_auto_detect_ip_host"
+            android:title="@string/pref_visionkids_auto_detect_ip_host"
+            android:summary="@string/pref_summary_visionkids_auto_detect_ip_host" />
+
         <EditTextPreference
             android:key="visionkids_host_ip"
             android:title="@string/pref_visionkids_host_ip"