summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestReceiver.kt26
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestReceiverTest.kt22
2 files changed, 40 insertions, 8 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestReceiver.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestReceiver.kt
index bf84d77224b1..7e5b26732e00 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestReceiver.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestReceiver.kt
@@ -28,6 +28,7 @@ import android.os.UserHandle
import android.service.controls.Control
import android.service.controls.ControlsProviderService
import android.util.Log
+import java.lang.ClassCastException
/**
* Proxy to launch in user 0
@@ -59,20 +60,29 @@ class ControlsRequestReceiver : BroadcastReceiver() {
return
}
- val packageName = intent.getParcelableExtra<ComponentName>(Intent.EXTRA_COMPONENT_NAME)
- ?.packageName
+ val targetComponent = try {
+ intent.getParcelableExtra<ComponentName>(Intent.EXTRA_COMPONENT_NAME)
+ } catch (e: ClassCastException) {
+ Log.e(TAG, "Malformed intent extra ComponentName", e)
+ return
+ }
+
+ val control = try {
+ intent.getParcelableExtra<Control>(ControlsProviderService.EXTRA_CONTROL)
+ } catch (e: ClassCastException) {
+ Log.e(TAG, "Malformed intent extra Control", e)
+ return
+ }
+
+ val packageName = targetComponent?.packageName
if (packageName == null || !isPackageInForeground(context, packageName)) {
return
}
val activityIntent = Intent(context, ControlsRequestDialog::class.java).apply {
- Intent.EXTRA_COMPONENT_NAME.let {
- putExtra(it, intent.getParcelableExtra<ComponentName>(it))
- }
- ControlsProviderService.EXTRA_CONTROL.let {
- putExtra(it, intent.getParcelableExtra<Control>(it))
- }
+ putExtra(Intent.EXTRA_COMPONENT_NAME, targetComponent)
+ putExtra(ControlsProviderService.EXTRA_CONTROL, control)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
}
activityIntent.putExtra(Intent.EXTRA_USER_ID, context.userId)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestReceiverTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestReceiverTest.kt
index ee1cc7b1ab71..890b9aec69bf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestReceiverTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestReceiverTest.kt
@@ -154,6 +154,28 @@ class ControlsRequestReceiverTest : SysuiTestCase() {
assertNull(wrapper.intent)
}
+ @Test
+ fun testClassCastExceptionComponentName_noCrash() {
+ val badIntent = Intent(ControlsProviderService.ACTION_ADD_CONTROL).apply {
+ putExtra(Intent.EXTRA_COMPONENT_NAME, Intent())
+ putExtra(ControlsProviderService.EXTRA_CONTROL, control)
+ }
+ receiver.onReceive(wrapper, badIntent)
+
+ assertNull(wrapper.intent)
+ }
+
+ @Test
+ fun testClassCastExceptionControl_noCrash() {
+ val badIntent = Intent(ControlsProviderService.ACTION_ADD_CONTROL).apply {
+ putExtra(Intent.EXTRA_COMPONENT_NAME, componentName)
+ putExtra(ControlsProviderService.EXTRA_CONTROL, Intent())
+ }
+ receiver.onReceive(wrapper, badIntent)
+
+ assertNull(wrapper.intent)
+ }
+
class MyWrapper(context: Context) : ContextWrapper(context) {
var intent: Intent? = null