Merge "Prevent bad intents from crashing sysui" into sc-v2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
08d6bcbd19
@@ -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,10 +127,14 @@ 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) {
|
||||
if (action.getIntent() != null) {
|
||||
startIntent(v, action.getIntent(), showOnLockscreen);
|
||||
} else if (action.getPendingIntent() != null) {
|
||||
startPendingIntent(action.getPendingIntent(), 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user