summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamSentinel.java27
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/media/dream/MediaDreamSentinelTest.java42
2 files changed, 64 insertions, 5 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamSentinel.java b/packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamSentinel.java
index acd04f216a98..dc1488eefc4e 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamSentinel.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamSentinel.java
@@ -19,6 +19,7 @@ package com.android.systemui.media.dream;
import static com.android.systemui.flags.Flags.MEDIA_DREAM_COMPLICATION;
import android.content.Context;
+import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -38,6 +39,9 @@ import javax.inject.Inject;
* the media complication as appropriate
*/
public class MediaDreamSentinel extends CoreStartable {
+ private static final String TAG = "MediaDreamSentinel";
+ private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
private final MediaDataManager.Listener mListener = new MediaDataManager.Listener() {
private boolean mAdded;
@Override
@@ -46,11 +50,17 @@ public class MediaDreamSentinel extends CoreStartable {
@Override
public void onMediaDataRemoved(@NonNull String key) {
+ final boolean hasActiveMedia = mMediaDataManager.hasActiveMedia();
+ if (DEBUG) {
+ Log.d(TAG, "onMediaDataRemoved(" + key + "), mAdded=" + mAdded + ", hasActiveMedia="
+ + hasActiveMedia);
+ }
+
if (!mAdded) {
return;
}
- if (mMediaDataManager.hasActiveMedia()) {
+ if (hasActiveMedia) {
return;
}
@@ -71,11 +81,24 @@ public class MediaDreamSentinel extends CoreStartable {
return;
}
+ final boolean hasActiveMedia = mMediaDataManager.hasActiveMedia();
+ if (DEBUG) {
+ Log.d(TAG, "onMediaDataLoaded(" + key + "), mAdded=" + mAdded + ", hasActiveMedia="
+ + hasActiveMedia);
+ }
+
+ // Media data can become inactive without triggering onMediaDataRemoved.
+ if (mAdded && !hasActiveMedia) {
+ mAdded = false;
+ mDreamOverlayStateController.removeComplication(mMediaEntryComplication);
+ return;
+ }
+
if (mAdded) {
return;
}
- if (!mMediaDataManager.hasActiveMedia()) {
+ if (!hasActiveMedia) {
return;
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dream/MediaDreamSentinelTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dream/MediaDreamSentinelTest.java
index 2e864dc2cda8..0bfc0344b521 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dream/MediaDreamSentinelTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/dream/MediaDreamSentinelTest.java
@@ -72,13 +72,13 @@ public class MediaDreamSentinelTest extends SysuiTestCase {
}
@Test
- public void testComplicationAddition() {
+ public void testOnMediaDataLoaded_complicationAddition() {
final MediaDreamSentinel sentinel = new MediaDreamSentinel(mContext, mMediaDataManager,
mDreamOverlayStateController, mMediaEntryComplication, mFeatureFlags);
-
sentinel.start();
final MediaDataManager.Listener listener = captureMediaDataListener();
+
when(mMediaDataManager.hasActiveMedia()).thenReturn(false);
listener.onMediaDataLoaded(mKey, mOldKey, mData, /* immediately= */ true,
/* receivedSmartspaceCardLatency= */ 0, /* isSsReactived= */ false);
@@ -90,6 +90,19 @@ public class MediaDreamSentinelTest extends SysuiTestCase {
verify(mDreamOverlayStateController).addComplication(eq(mMediaEntryComplication));
verify(mDreamOverlayStateController, never()).addComplication(
not(eq(mMediaEntryComplication)));
+ }
+
+ @Test
+ public void testOnMediaDataRemoved_complicationRemoval() {
+ final MediaDreamSentinel sentinel = new MediaDreamSentinel(mContext, mMediaDataManager,
+ mDreamOverlayStateController, mMediaEntryComplication, mFeatureFlags);
+ sentinel.start();
+
+ final MediaDataManager.Listener listener = captureMediaDataListener();
+
+ when(mMediaDataManager.hasActiveMedia()).thenReturn(true);
+ listener.onMediaDataLoaded(mKey, mOldKey, mData, /* immediately= */true,
+ /* receivedSmartspaceCardLatency= */0, /* isSsReactived= */ false);
listener.onMediaDataRemoved(mKey);
verify(mDreamOverlayStateController, never()).removeComplication(any());
@@ -100,7 +113,30 @@ public class MediaDreamSentinelTest extends SysuiTestCase {
}
@Test
- public void testMediaDreamSentinel_mediaComplicationDisabled_doNotAddComplication() {
+ public void testOnMediaDataLoaded_complicationRemoval() {
+ final MediaDreamSentinel sentinel = new MediaDreamSentinel(mContext, mMediaDataManager,
+ mDreamOverlayStateController, mMediaEntryComplication, mFeatureFlags);
+ sentinel.start();
+
+ final MediaDataManager.Listener listener = captureMediaDataListener();
+
+ when(mMediaDataManager.hasActiveMedia()).thenReturn(true);
+ listener.onMediaDataLoaded(mKey, mOldKey, mData, /* immediately= */true,
+ /* receivedSmartspaceCardLatency= */0, /* isSsReactived= */ false);
+ verify(mDreamOverlayStateController, never()).removeComplication(any());
+
+ listener.onMediaDataLoaded(mKey, mOldKey, mData, /* immediately= */true,
+ /* receivedSmartspaceCardLatency= */0, /* isSsReactived= */ false);
+ verify(mDreamOverlayStateController, never()).removeComplication(any());
+
+ when(mMediaDataManager.hasActiveMedia()).thenReturn(false);
+ listener.onMediaDataLoaded(mKey, mOldKey, mData, /* immediately= */true,
+ /* receivedSmartspaceCardLatency= */0, /* isSsReactived= */ false);
+ verify(mDreamOverlayStateController).removeComplication(eq(mMediaEntryComplication));
+ }
+
+ @Test
+ public void testOnMediaDataLoaded_mediaComplicationDisabled_doesNotAddComplication() {
when(mFeatureFlags.isEnabled(MEDIA_DREAM_COMPLICATION)).thenReturn(false);
final MediaDreamSentinel sentinel = new MediaDreamSentinel(mContext, mMediaDataManager,