From b6b88351b6f0d85d4ef059f42761123e2c7acce1 Mon Sep 17 00:00:00 2001 From: Sumedh Sen Date: Tue, 4 Feb 2025 14:16:24 -0800 Subject: [PATCH] Skip checking if a broadcastreceiver was already registered If AppRestoreButton decides to dispose DisposableBroadcastReceiverAsUser while recomposition, the broadcast receiver will be unregistered. If this happens, there will be no visual feedback while restoring the app. Thus, always render the DisposableBroadcastReceiverAsUser composable at each recomposition of AppRestoreButton. Since DisposableBroadcastReceiverAsUser uses `LaunchedEffect`, it wont register a broadcast receiver at every recomposition. Bug: 391744608 Test: atest SettingsSpaUnitTests Flag: EXEMPT. Bug fix only Change-Id: I420f95da363cf4da1a48150d32aec763c9159a1c --- .../settings/spa/app/appinfo/AppRestoreButton.kt | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/com/android/settings/spa/app/appinfo/AppRestoreButton.kt b/src/com/android/settings/spa/app/appinfo/AppRestoreButton.kt index bf46e958e3e..d1db10241b9 100644 --- a/src/com/android/settings/spa/app/appinfo/AppRestoreButton.kt +++ b/src/com/android/settings/spa/app/appinfo/AppRestoreButton.kt @@ -51,7 +51,6 @@ class AppRestoreButton(packageInfoPresenter: PackageInfoPresenter) { private val packageInstaller = userPackageManager.packageInstaller private val packageName = packageInfoPresenter.packageName private val userHandle = UserHandle.of(packageInfoPresenter.userId) - private var broadcastReceiverIsCreated = false private lateinit var coroutineScope: CoroutineScope private lateinit var updateButtonTextJob: Job private val buttonTexts = intArrayOf( @@ -65,15 +64,13 @@ class AppRestoreButton(packageInfoPresenter: PackageInfoPresenter) { @Composable fun getActionButton(app: ApplicationInfo): ActionButton { - if (!broadcastReceiverIsCreated) { - val intentFilter = IntentFilter(INTENT_ACTION) - DisposableBroadcastReceiverAsUser(intentFilter, userHandle) { intent -> - if (app.packageName == intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME)) { - onReceive(intent, app) - } + val intentFilter = IntentFilter(INTENT_ACTION) + DisposableBroadcastReceiverAsUser(intentFilter, userHandle) { intent -> + if (app.packageName == intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME)) { + onReceive(intent, app) } - broadcastReceiverIsCreated = true } + coroutineScope = rememberCoroutineScope() if (app.isArchived && ::updateButtonTextJob.isInitialized && !updateButtonTextJob.isActive) { buttonTextIndexStateFlow.value = 0