Merge "Merge "Prevent bad intents from crashing sysui" into sc-v2-dev am: 08d6bcbd19" into sc-v2-dev-plus-aosp
This commit is contained in:
committed by
Android (Google) Code Review
commit
4413f9d635
@@ -20,9 +20,11 @@ import android.app.PendingIntent;
|
|||||||
import android.app.smartspace.SmartspaceAction;
|
import android.app.smartspace.SmartspaceAction;
|
||||||
import android.app.smartspace.SmartspaceTarget;
|
import android.app.smartspace.SmartspaceTarget;
|
||||||
import android.app.smartspace.SmartspaceTargetEvent;
|
import android.app.smartspace.SmartspaceTargetEvent;
|
||||||
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
@@ -39,6 +41,7 @@ import java.util.List;
|
|||||||
public interface BcSmartspaceDataPlugin extends Plugin {
|
public interface BcSmartspaceDataPlugin extends Plugin {
|
||||||
String ACTION = "com.android.systemui.action.PLUGIN_BC_SMARTSPACE_DATA";
|
String ACTION = "com.android.systemui.action.PLUGIN_BC_SMARTSPACE_DATA";
|
||||||
int VERSION = 1;
|
int VERSION = 1;
|
||||||
|
String TAG = "BcSmartspaceDataPlugin";
|
||||||
|
|
||||||
/** Register a listener to get Smartspace data. */
|
/** Register a listener to get Smartspace data. */
|
||||||
void registerListener(SmartspaceTargetListener listener);
|
void registerListener(SmartspaceTargetListener listener);
|
||||||
@@ -124,10 +127,14 @@ public interface BcSmartspaceDataPlugin extends Plugin {
|
|||||||
/** Interface for launching Intents, which can differ on the lockscreen */
|
/** Interface for launching Intents, which can differ on the lockscreen */
|
||||||
interface IntentStarter {
|
interface IntentStarter {
|
||||||
default void startFromAction(SmartspaceAction action, View v, boolean showOnLockscreen) {
|
default void startFromAction(SmartspaceAction action, View v, boolean showOnLockscreen) {
|
||||||
if (action.getIntent() != null) {
|
try {
|
||||||
startIntent(v, action.getIntent(), showOnLockscreen);
|
if (action.getIntent() != null) {
|
||||||
} else if (action.getPendingIntent() != null) {
|
startIntent(v, action.getIntent(), showOnLockscreen);
|
||||||
startPendingIntent(action.getPendingIntent(), 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)
|
configurationController.addCallback(configChangeListener)
|
||||||
statusBarStateController.addCallback(statusBarStateListener)
|
statusBarStateController.addCallback(statusBarStateListener)
|
||||||
|
|
||||||
|
plugin.registerSmartspaceEventNotifier {
|
||||||
|
e -> session?.notifySmartspaceEvent(e)
|
||||||
|
}
|
||||||
|
|
||||||
reloadSmartspace()
|
reloadSmartspace()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,6 +269,7 @@ class LockscreenSmartspaceController @Inject constructor(
|
|||||||
statusBarStateController.removeCallback(statusBarStateListener)
|
statusBarStateController.removeCallback(statusBarStateListener)
|
||||||
session = null
|
session = null
|
||||||
|
|
||||||
|
plugin?.registerSmartspaceEventNotifier(null)
|
||||||
plugin?.onTargetsAvailable(emptyList())
|
plugin?.onTargetsAvailable(emptyList())
|
||||||
Log.d(TAG, "Ending smartspace session for lockscreen")
|
Log.d(TAG, "Ending smartspace session for lockscreen")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -213,6 +213,8 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
|
|||||||
|
|
||||||
// THEN the session is created
|
// THEN the session is created
|
||||||
verify(smartspaceManager).createSmartspaceSession(any())
|
verify(smartspaceManager).createSmartspaceSession(any())
|
||||||
|
// THEN an event notifier is registered
|
||||||
|
verify(plugin).registerSmartspaceEventNotifier(any())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -240,7 +242,7 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testEmptyListIsEmittedAfterDisconnect() {
|
fun testEmptyListIsEmittedAndNotifierRemovedAfterDisconnect() {
|
||||||
// GIVEN a registered listener on an active session
|
// GIVEN a registered listener on an active session
|
||||||
connectSession()
|
connectSession()
|
||||||
clearInvocations(plugin)
|
clearInvocations(plugin)
|
||||||
@@ -249,8 +251,9 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
|
|||||||
controller.stateChangeListener.onViewDetachedFromWindow(smartspaceView as View)
|
controller.stateChangeListener.onViewDetachedFromWindow(smartspaceView as View)
|
||||||
controller.disconnect()
|
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).onTargetsAvailable(emptyList())
|
||||||
|
verify(plugin).registerSmartspaceEventNotifier(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user