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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user