From 87d5631d1d7bf9d1848de292965548da5763d240 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Mon, 13 Feb 2023 13:55:44 +0800 Subject: [PATCH] Fix App List pages flickers When there is a package change event happens on the device, the page is auto refreshed, which caused the flickers. Before this change, the app list item will be re-create for every app list refresh, because System.identityHashCode(this) is part of item key. System.identityHashCode(this) is added to fix an issue in the AppListSwitchItem. To fix this issue, removed remember in the AppListSwitchItem to make sure TwoTargetSwitchPreference always has the latest values, so System.identityHashCode(this) no loner need to be part of item key. By removing System.identityHashCode(this) from the item key, the flicker issue is fixed. Fix: 267699436 Test: Manually with Settings Change-Id: Iabf0c56271c5486272c921a4b4020f9e3d2b984b --- .../spaprivileged/template/app/AppList.kt | 2 +- .../template/app/AppListSwitchItem.kt | 15 ++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt index 4a8c00e68433f..f4a6b59d4c4b8 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt @@ -159,7 +159,7 @@ private fun AppListModel.AppListWidget( } private fun T.itemKey(option: Int) = - listOf(option, app.packageName, app.userId, System.identityHashCode(this)) + listOf(option, app.packageName, app.userId) /** Returns group title if this is the first item of the group. */ private fun AppListModel.getGroupTitleIfFirst( diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt index 452971b44a99a..ebd82d9d216af 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt @@ -2,7 +2,6 @@ package com.android.settingslib.spaprivileged.template.app import androidx.compose.runtime.Composable import androidx.compose.runtime.State -import androidx.compose.runtime.remember import com.android.settingslib.spa.framework.theme.SettingsDimension import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel import com.android.settingslib.spa.widget.preference.TwoTargetSwitchPreference @@ -16,14 +15,12 @@ fun AppListItemModel.AppListSwitchItem( onCheckedChange: ((newChecked: Boolean) -> Unit)?, ) { TwoTargetSwitchPreference( - model = remember { - object : SwitchPreferenceModel { - override val title = label - override val summary = this@AppListSwitchItem.summary - override val checked = checked - override val changeable = changeable - override val onCheckedChange = onCheckedChange - } + model = object : SwitchPreferenceModel { + override val title = label + override val summary = this@AppListSwitchItem.summary + override val checked = checked + override val changeable = changeable + override val onCheckedChange = onCheckedChange }, icon = { AppIcon(record.app, SettingsDimension.appIconItemSize) }, onClick = onClick,