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

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

Merge "Prevent bad intents from crashing sysui" into sc-v2-dev

parents 55487ff5 51f8e62e
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -20,9 +20,11 @@ import android.app.PendingIntent;
import android.app.smartspace.SmartspaceAction;
import android.app.smartspace.SmartspaceTarget;
import android.app.smartspace.SmartspaceTargetEvent;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Parcelable;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;

@@ -39,6 +41,7 @@ import java.util.List;
public interface BcSmartspaceDataPlugin extends Plugin {
    String ACTION = "com.android.systemui.action.PLUGIN_BC_SMARTSPACE_DATA";
    int VERSION = 1;
    String TAG = "BcSmartspaceDataPlugin";

    /** Register a listener to get Smartspace data. */
    void registerListener(SmartspaceTargetListener listener);
@@ -124,11 +127,15 @@ public interface BcSmartspaceDataPlugin extends Plugin {
    /** Interface for launching Intents, which can differ on the lockscreen */
    interface IntentStarter {
        default void startFromAction(SmartspaceAction action, View v, boolean showOnLockscreen) {
            try {
                if (action.getIntent() != null) {
                    startIntent(v, action.getIntent(), showOnLockscreen);
                } else if (action.getPendingIntent() != null) {
                    startPendingIntent(action.getPendingIntent(), showOnLockscreen);
                }
            } catch (ActivityNotFoundException e) {
                Log.w(TAG, "Could not launch intent for action: " + action, e);
            }
        }

        /** Start the intent */
+5 −0
Original line number Diff line number Diff line
@@ -240,6 +240,10 @@ class LockscreenSmartspaceController @Inject constructor(
        configurationController.addCallback(configChangeListener)
        statusBarStateController.addCallback(statusBarStateListener)

        plugin.registerSmartspaceEventNotifier {
                e -> session?.notifySmartspaceEvent(e)
        }

        reloadSmartspace()
    }

@@ -265,6 +269,7 @@ class LockscreenSmartspaceController @Inject constructor(
        statusBarStateController.removeCallback(statusBarStateListener)
        session = null

        plugin?.registerSmartspaceEventNotifier(null)
        plugin?.onTargetsAvailable(emptyList())
        Log.d(TAG, "Ending smartspace session for lockscreen")
    }
+5 −2
Original line number Diff line number Diff line
@@ -213,6 +213,8 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {

        // THEN the session is created
        verify(smartspaceManager).createSmartspaceSession(any())
        // THEN an event notifier is registered
        verify(plugin).registerSmartspaceEventNotifier(any())
    }

    @Test
@@ -240,7 +242,7 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
    }

    @Test
    fun testEmptyListIsEmittedAfterDisconnect() {
    fun testEmptyListIsEmittedAndNotifierRemovedAfterDisconnect() {
        // GIVEN a registered listener on an active session
        connectSession()
        clearInvocations(plugin)
@@ -249,8 +251,9 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
        controller.stateChangeListener.onViewDetachedFromWindow(smartspaceView as View)
        controller.disconnect()

        // THEN the listener receives an empty list of targets
        // THEN the listener receives an empty list of targets and unregisters the notifier
        verify(plugin).onTargetsAvailable(emptyList())
        verify(plugin).registerSmartspaceEventNotifier(null)
    }

    @Test