diff options
3 files changed, 21 insertions, 6 deletions
diff --git a/packages/SystemUI/plugin/bcsmartspace/src/com/android/systemui/plugins/BcSmartspaceDataPlugin.java b/packages/SystemUI/plugin/bcsmartspace/src/com/android/systemui/plugins/BcSmartspaceDataPlugin.java index a16f5cd5d930..da9a92a1f6b4 100644 --- a/packages/SystemUI/plugin/bcsmartspace/src/com/android/systemui/plugins/BcSmartspaceDataPlugin.java +++ b/packages/SystemUI/plugin/bcsmartspace/src/com/android/systemui/plugins/BcSmartspaceDataPlugin.java @@ -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); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt index 4e5bc8e7d099..6c4051ee18f0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt @@ -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") } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt index ff91978c54bb..7869b594c62b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt @@ -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 |