From fd4f48c65ebce91225da331e8ad704e9d0ced98e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Fri, 31 Dec 2021 08:17:20 -0500
Subject: [PATCH] tv: cleanup about fragment, handle null state

Change-Id: Idc48663ab3e6cb5f5453eebcda5234caa053f067
---
 .../cx/ring/tv/settings/TVAboutFragment.kt    | 43 +++----------
 .../cx/ring/tv/settings/TVSettingsFragment.kt | 61 +++++++------------
 .../app/src/main/res/xml/tv_about_pref.xml    |  3 +-
 3 files changed, 32 insertions(+), 75 deletions(-)

diff --git a/ring-android/app/src/main/java/cx/ring/tv/settings/TVAboutFragment.kt b/ring-android/app/src/main/java/cx/ring/tv/settings/TVAboutFragment.kt
index da91a94e1..6f4a5f318 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/settings/TVAboutFragment.kt
+++ b/ring-android/app/src/main/java/cx/ring/tv/settings/TVAboutFragment.kt
@@ -27,54 +27,25 @@ import androidx.leanback.preference.LeanbackPreferenceFragmentCompat
 import androidx.preference.Preference
 import cx.ring.BuildConfig
 import cx.ring.R
-import net.jami.model.ConfigKey
 
 class TVAboutFragment : LeanbackPreferenceFragmentCompat() {
-    override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) {
+    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
         setPreferencesFromResource(R.xml.tv_about_pref, rootKey)
-        findPreference<Preference>("About.version")?.title = version
-        findPreference<Preference>("About.license")?.title = license
-        findPreference<Preference>("About.rights")?.title = rights
+        findPreference<Preference>("About.version")?.title = getString(R.string.app_release, BuildConfig.VERSION_NAME)
+        findPreference<Preference>("About.license")?.title = getString(R.string.license)
+        findPreference<Preference>("About.rights")?.title = getString(R.string.copyright)
         findPreference<Preference>("About.credits")?.title = credits
     }
 
-    override fun onPreferenceTreeClick(preference: Preference): Boolean {
-        if (preference.key == ConfigKey.ACCOUNT_AUTOANSWER.key()) {
-        } else if (preference.key == ConfigKey.ACCOUNT_ISRENDEZVOUS.key()) {
-        }
-        return super.onPreferenceTreeClick(preference)
-    }
-
-    private val version: CharSequence
-        get() {
-            val version = SpannableString(requireContext().resources.getString(R.string.version_section))
-            version.setSpan(UnderlineSpan(), 0, version.length, 0)
-            return requireContext().resources.getString(R.string.app_release, BuildConfig.VERSION_NAME)
-        }
-    private val license: CharSequence
-        get() {
-            val licence = SpannableString(requireContext().resources.getString(R.string.section_license))
-            licence.setSpan(UnderlineSpan(), 0, licence.length, 0)
-            return requireContext().resources.getString(R.string.license)
-        }
-    private val rights: CharSequence
-        get() {
-            val licence = SpannableString(requireContext().resources.getString(R.string.copyright_section))
-            licence.setSpan(UnderlineSpan(), 0, licence.length, 0)
-            return requireContext().resources.getString(R.string.copyright)
-        }
     private val credits: CharSequence
         get() {
-            val developedby = SpannableString(requireContext().resources.getString(R.string.developed_by))
+            val developedby = SpannableString(getText(R.string.developed_by))
             developedby.setSpan(UnderlineSpan(), 0, developedby.length, 0)
-            val developed: CharSequence =
-                requireContext().resources.getString(R.string.credits_developer).replace("\n".toRegex(), "<br/>")
+            val developed = getString(R.string.credits_developer).replace("\n", "<br/>")
             return Html.fromHtml("<b><u>$developedby</u></b><br/>$developed")
         }
 
     companion object {
-        fun newInstance(): TVAboutFragment {
-            return TVAboutFragment()
-        }
+        fun newInstance() = TVAboutFragment()
     }
 }
\ No newline at end of file
diff --git a/ring-android/app/src/main/java/cx/ring/tv/settings/TVSettingsFragment.kt b/ring-android/app/src/main/java/cx/ring/tv/settings/TVSettingsFragment.kt
index f02352004..205c1660c 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/settings/TVSettingsFragment.kt
+++ b/ring-android/app/src/main/java/cx/ring/tv/settings/TVSettingsFragment.kt
@@ -43,9 +43,10 @@ class TVSettingsFragment : LeanbackSettingsFragmentCompat() {
 
     override fun onPreferenceStartFragment(preferenceFragment: PreferenceFragmentCompat, preference: Preference): Boolean {
         val args = preference.extras
-        val f = childFragmentManager.fragmentFactory.instantiate(requireContext().classLoader, preference.fragment)
-        f.arguments = args
-        f.setTargetFragment(preferenceFragment, 0)
+        val f = childFragmentManager.fragmentFactory.instantiate(requireContext().classLoader, preference.fragment).apply {
+            arguments = args
+            setTargetFragment(preferenceFragment, 0)
+        }
         if (f is PreferenceFragmentCompat
             || f is PreferenceDialogFragmentCompat
         ) {
@@ -57,18 +58,16 @@ class TVSettingsFragment : LeanbackSettingsFragmentCompat() {
     }
 
     override fun onPreferenceStartScreen(caller: PreferenceFragmentCompat, pref: PreferenceScreen): Boolean {
-        val prefsFragment: Fragment = PrefsFragment.newInstance()
-        val args = Bundle()
-        args.putString(PreferenceFragmentCompat.ARG_PREFERENCE_ROOT, pref.key)
-        prefsFragment.arguments = args
-        startPreferenceFragment(prefsFragment)
+        startPreferenceFragment(PrefsFragment.newInstance().apply {
+            arguments = Bundle().apply {
+                putString(PreferenceFragmentCompat.ARG_PREFERENCE_ROOT, pref.key)
+            }
+        })
         return true
     }
 
     @AndroidEntryPoint
     class PrefsFragment : JamiPreferenceFragment<GeneralAccountPresenter>(), GeneralAccountView {
-        private var autoAnswer = false
-        private var rendezvousMode = false
         override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
             super.onViewCreated(view, savedInstanceState)
             presenter.init()
@@ -77,13 +76,8 @@ class TVSettingsFragment : LeanbackSettingsFragmentCompat() {
         override fun addJamiPreferences(accountId: String) {}
         override fun addSipPreferences() {}
         override fun accountChanged(account: Account) {
-            // load information from account to ui
-            autoAnswer = account.config.getBool(ConfigKey.ACCOUNT_AUTOANSWER)
-            rendezvousMode = account.config.getBool(ConfigKey.ACCOUNT_ISRENDEZVOUS)
-            val pref = findPreference<SwitchPreference>(ConfigKey.ACCOUNT_AUTOANSWER.key())
-            if (pref != null) pref.isChecked = autoAnswer
-            val prefRdv = findPreference<SwitchPreference>(ConfigKey.ACCOUNT_ISRENDEZVOUS.key())
-            if (prefRdv != null) prefRdv.isChecked = rendezvousMode
+            findPreference<SwitchPreference>(ConfigKey.ACCOUNT_AUTOANSWER.key())?.isChecked = account.config.getBool(ConfigKey.ACCOUNT_AUTOANSWER)
+            findPreference<SwitchPreference>(ConfigKey.ACCOUNT_ISRENDEZVOUS.key())?.isChecked = account.config.getBool(ConfigKey.ACCOUNT_ISRENDEZVOUS)
         }
 
         override fun finish() {
@@ -94,17 +88,17 @@ class TVSettingsFragment : LeanbackSettingsFragmentCompat() {
             val videoResolutionsNames = resources.getStringArray(R.array.video_resolutionStrings)
             val videoResolutionsValues =
                 filterResolutions(resources.getStringArray(R.array.video_resolutions), currentResolution, maxResolution)
-            val lpVideoResolution = findPreference<ListPreference>(SharedPreferencesServiceImpl.PREF_RESOLUTION)
-            if (lpVideoResolution != null) {
-                lpVideoResolution.entries = videoResolutionsNames.copyOfRange(0, videoResolutionsValues.size)
-                lpVideoResolution.entryValues = videoResolutionsValues
+            findPreference<ListPreference>(SharedPreferencesServiceImpl.PREF_RESOLUTION)?.apply {
+                entries = videoResolutionsNames.copyOfRange(0, videoResolutionsValues.size)
+                entryValues = videoResolutionsValues
             }
         }
 
         override fun onCreatePreferences(bundle: Bundle?, rootKey: String?) {
-            val pm = preferenceManager
-            pm.sharedPreferencesMode = Context.MODE_PRIVATE
-            pm.sharedPreferencesName = SharedPreferencesServiceImpl.PREFS_VIDEO
+            preferenceManager?.apply {
+                sharedPreferencesMode = Context.MODE_PRIVATE
+                sharedPreferencesName = SharedPreferencesServiceImpl.PREFS_VIDEO
+            }
             setPreferencesFromResource(R.xml.tv_account_general_pref, rootKey)
         }
 
@@ -117,30 +111,21 @@ class TVSettingsFragment : LeanbackSettingsFragmentCompat() {
             if (currentResolution > maxResolution.second) return videoResolutionsValues
             val resolutions = ArrayList<String>()
             for (videoResolutionsValue in videoResolutionsValues) {
-                val resolutionValueInt = videoResolutionsValue.toInt()
-                if (resolutionValueInt <= maxResolution.second) {
+                if (videoResolutionsValue.toInt() <= maxResolution.second)
                     resolutions.add(videoResolutionsValue)
-                }
             }
             return resolutions.toTypedArray()
         }
 
         override fun onPreferenceTreeClick(preference: Preference): Boolean {
-            if (preference.key == "Account.about") {
-            } else if (preference.key == ConfigKey.ACCOUNT_AUTOANSWER.key()) {
-                presenter.twoStatePreferenceChanged(ConfigKey.ACCOUNT_AUTOANSWER, !autoAnswer)
-                autoAnswer = !autoAnswer
-            } else if (preference.key == ConfigKey.ACCOUNT_ISRENDEZVOUS.key()) {
-                presenter.twoStatePreferenceChanged(ConfigKey.ACCOUNT_ISRENDEZVOUS, !rendezvousMode)
-                rendezvousMode = !rendezvousMode
-            }
+            val key = ConfigKey.fromString(preference.key)
+            if (key != null && key.isTwoState)
+                presenter.twoStatePreferenceChanged(key, (preference as SwitchPreference).isChecked)
             return super.onPreferenceTreeClick(preference)
         }
 
         companion object {
-            fun newInstance(): PrefsFragment {
-                return PrefsFragment()
-            }
+            fun newInstance(): PrefsFragment = PrefsFragment()
         }
     }
 }
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/xml/tv_about_pref.xml b/ring-android/app/src/main/res/xml/tv_about_pref.xml
index f7688fbfd..05be37a00 100644
--- a/ring-android/app/src/main/res/xml/tv_about_pref.xml
+++ b/ring-android/app/src/main/res/xml/tv_about_pref.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-    android:title="@string/about">
+    android:title="@string/about"
+    android:persistent="false">
 
     <PreferenceCategory android:title="@string/tv_about_version">
         <Preference
-- 
GitLab