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
This commit is contained in:
Sumedh Sen
2025-02-04 14:16:24 -08:00
parent 574ba31dd3
commit b6b88351b6

View File

@@ -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