Loading packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestReceiver.kt +18 −8 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) Loading packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestReceiverTest.kt +22 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading
packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestReceiver.kt +18 −8 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) Loading
packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestReceiverTest.kt +22 −0 Original line number Diff line number Diff line Loading @@ -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 Loading