Merge "Empty state for unused apps screen on Auto" into sc-v2-dev
diff --git a/PermissionController/res/values/strings.xml b/PermissionController/res/values/strings.xml
index ba03cbf..7a08681 100644
--- a/PermissionController/res/values/strings.xml
+++ b/PermissionController/res/values/strings.xml
@@ -136,6 +136,9 @@
     <!-- Label when there are no unused apps [CHAR LIMIT=30] -->
     <string name="no_unused_apps">No unused apps</string>
 
+    <!-- Label when there are zero unused apps [CHAR LIMIT=30] -->
+    <string name="zero_unused_apps">0 unused apps</string>
+
     <!-- [CHAR LIMIT=30] Manage applications, label for option to disable app -->
     <string name="app_disable_dlg_positive">Disable app</string>
 
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/UnusedAppsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/UnusedAppsFragment.kt
index c1d26dd..e1af9d6 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/UnusedAppsFragment.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/UnusedAppsFragment.kt
@@ -56,14 +56,13 @@
     where PF : PreferenceFragmentCompat, PF : UnusedAppsFragment.Parent<UnusedAppPref>,
           UnusedAppPref : Preference, UnusedAppPref : RemovablePref {
 
-    private val INFO_MSG_CATEGORY = "info_msg_category"
-
     private lateinit var viewModel: UnusedAppsViewModel
     private lateinit var collator: Collator
     private var sessionId: Long = 0L
     private var isFirstLoad = false
 
     companion object {
+        public const val INFO_MSG_CATEGORY = "info_msg_category"
         private const val SHOW_LOAD_DELAY_MS = 200L
         private const val INFO_MSG_KEY = "info_msg"
         private const val ELEVATION_HIGH = 8f
@@ -253,9 +252,7 @@
             }
         }
 
-        val infoMsgCategory =
-            preferenceScreen.findPreference<PreferenceCategory>(INFO_MSG_CATEGORY)!!
-        infoMsgCategory.isVisible = !allCategoriesEmpty
+        preferenceFragment.setEmptyState(allCategoriesEmpty)
 
         if (isFirstLoad) {
             if (categorizedPackages[Months.SIX]!!.isNotEmpty() ||
@@ -377,5 +374,12 @@
             user: UserHandle,
             context: Context
         ): UnusedAppPref
+
+        /**
+         * Updates the state based on whether the content is empty.
+         *
+         * @param empty whether the content is empty
+         */
+        fun setEmptyState(empty: Boolean)
     }
 }
\ No newline at end of file
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoUnusedAppsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoUnusedAppsFragment.kt
index 2a62d22..11d5b7e 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoUnusedAppsFragment.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoUnusedAppsFragment.kt
@@ -20,10 +20,12 @@
 import android.os.Bundle
 import android.os.UserHandle
 import androidx.preference.Preference
+import androidx.preference.PreferenceCategory
 import com.android.permissioncontroller.R
 import com.android.permissioncontroller.auto.AutoSettingsFrameFragment
 import com.android.permissioncontroller.hibernation.isHibernationEnabled
 import com.android.permissioncontroller.permission.ui.UnusedAppsFragment
+import com.android.permissioncontroller.permission.ui.UnusedAppsFragment.Companion.INFO_MSG_CATEGORY
 import com.android.car.ui.utils.ViewUtils
 import com.android.car.ui.utils.ViewUtils.LazyLayoutView
 
@@ -34,6 +36,8 @@
     UnusedAppsFragment.Parent<AutoUnusedAppsPreference> {
 
     companion object {
+        private const val UNUSED_PREFERENCE_KEY = "unused_pref_row_key"
+
         /** Create a new instance of this fragment.  */
         @JvmStatic
         fun newInstance(): AutoUnusedAppsFragment {
@@ -97,4 +101,25 @@
     override fun setTitle(title: CharSequence) {
         headerLabel = title
     }
+
+    override fun setEmptyState(empty: Boolean) {
+        val infoMsgCategory =
+                preferenceScreen.findPreference<PreferenceCategory>(INFO_MSG_CATEGORY)!!
+        val noUnusedAppsPreference: Preference? =
+                infoMsgCategory.findPreference<Preference>(UNUSED_PREFERENCE_KEY)
+        if (empty && noUnusedAppsPreference == null) {
+            infoMsgCategory.addPreference(createNoUnusedAppsPreference())
+        } else if (noUnusedAppsPreference != null) {
+            noUnusedAppsPreference.setVisible(empty)
+        }
+    }
+
+    private fun createNoUnusedAppsPreference(): Preference {
+        val preference = Preference(context)
+        preference.title = getString(R.string.zero_unused_apps)
+        preference.key = UNUSED_PREFERENCE_KEY
+        preference.isSelectable = false
+        preference.order = 0
+        return preference
+    }
 }
\ No newline at end of file
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/HandheldUnusedAppsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/HandheldUnusedAppsFragment.kt
index 55686cf..eaf90de 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/HandheldUnusedAppsFragment.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/HandheldUnusedAppsFragment.kt
@@ -22,9 +22,11 @@
 import android.os.UserHandle
 import android.view.MenuItem
 import androidx.preference.Preference
+import androidx.preference.PreferenceCategory
 import com.android.permissioncontroller.R
 import com.android.permissioncontroller.hibernation.isHibernationEnabled
 import com.android.permissioncontroller.permission.ui.UnusedAppsFragment
+import com.android.permissioncontroller.permission.ui.UnusedAppsFragment.Companion.INFO_MSG_CATEGORY
 
 /**
  * Handheld wrapper, with customizations, around [UnusedAppsFragment].
@@ -109,4 +111,10 @@
     override fun setTitle(title: CharSequence) {
         requireActivity().setTitle(title)
     }
+
+    override fun setEmptyState(empty: Boolean) {
+        val infoMsgCategory =
+                preferenceScreen.findPreference<PreferenceCategory>(INFO_MSG_CATEGORY)!!
+        infoMsgCategory.isVisible = !empty
+    }
 }
\ No newline at end of file