Avoid onDestroy content in test

Even though `Activity.finish` is called by the @Rule before the teardown
happens, `onDestroy` may not be called synchronously and therefore may
happen after mocks have been nulled.

To prevent NPE, do not call `BroadcastDispatcher.unregisterReceiver` in
the test.

Test: atest com.android.systemui.controls
Fixes: 280020640
Change-Id: I992befeac6588116da03ed7869730f5b14b4e091
This commit is contained in:
Fabian Kozynski
2023-05-10 14:25:30 +00:00
parent c51e252589
commit a65f509f4d
2 changed files with 11 additions and 1 deletions

View File

@@ -158,6 +158,10 @@ open class ControlsActivity @Inject constructor(
override fun onDestroy() {
super.onDestroy()
unregisterReceiver()
}
protected open fun unregisterReceiver() {
broadcastDispatcher.unregisterReceiver(broadcastReceiver)
}

View File

@@ -22,6 +22,8 @@ import com.android.systemui.controls.settings.ControlsSettingsDialogManager
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.statusbar.policy.KeyguardStateController
// IMPORTANT: onDestroy may be called outside of bounds of the test. That means that the mocks
// may have been nulled before onDestroy happens.
class TestableControlsActivity(
uiController: ControlsUiController,
broadcastDispatcher: BroadcastDispatcher,
@@ -37,4 +39,8 @@ class TestableControlsActivity(
featureFlags,
controlsSettingsDialogManager,
keyguardStateController
)
) {
override fun unregisterReceiver() {
// Do nothing. This will be called in `onDestroy`
}
}