Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32438ace authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Prevent ClassCastException" into sc-v2-dev

parents 94f42cee c18a153f
Loading
Loading
Loading
Loading
+18 −8
Original line number Diff line number Diff line
@@ -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)
+22 −0
Original line number Diff line number Diff line
@@ -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