diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamSentinel.java | 27 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/media/dream/MediaDreamSentinelTest.java | 42 |
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, |