Loading packages/SystemUI/src/com/android/systemui/flags/Flags.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -179,6 +179,7 @@ public class Flags { public static final UnreleasedFlag MEDIA_SESSION_ACTIONS = new UnreleasedFlag(901); public static final UnreleasedFlag MEDIA_SESSION_ACTIONS = new UnreleasedFlag(901); public static final ReleasedFlag MEDIA_NEARBY_DEVICES = new ReleasedFlag(903); public static final ReleasedFlag MEDIA_NEARBY_DEVICES = new ReleasedFlag(903); public static final ReleasedFlag MEDIA_MUTE_AWAIT = new ReleasedFlag(904); public static final ReleasedFlag MEDIA_MUTE_AWAIT = new ReleasedFlag(904); public static final UnreleasedFlag MEDIA_DREAM_COMPLICATION = new UnreleasedFlag(905); // 1000 - dock // 1000 - dock public static final ReleasedFlag SIMULATE_DOCK_THROUGH_CHARGING = public static final ReleasedFlag SIMULATE_DOCK_THROUGH_CHARGING = Loading packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamSentinel.java +12 −2 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.media.dream; package com.android.systemui.media.dream; import static com.android.systemui.flags.Flags.MEDIA_DREAM_COMPLICATION; import android.content.Context; import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.NonNull; Loading @@ -23,6 +25,7 @@ import androidx.annotation.Nullable; import com.android.systemui.CoreStartable; import com.android.systemui.CoreStartable; import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.media.MediaData; import com.android.systemui.media.MediaData; import com.android.systemui.media.MediaDataManager; import com.android.systemui.media.MediaDataManager; import com.android.systemui.media.SmartspaceMediaData; import com.android.systemui.media.SmartspaceMediaData; Loading @@ -34,7 +37,7 @@ import javax.inject.Inject; * the media complication as appropriate * the media complication as appropriate */ */ public class MediaDreamSentinel extends CoreStartable { public class MediaDreamSentinel extends CoreStartable { private MediaDataManager.Listener mListener = new MediaDataManager.Listener() { private final MediaDataManager.Listener mListener = new MediaDataManager.Listener() { private boolean mAdded; private boolean mAdded; @Override @Override public void onSmartspaceMediaDataRemoved(@NonNull String key, boolean immediately) { public void onSmartspaceMediaDataRemoved(@NonNull String key, boolean immediately) { Loading Loading @@ -63,6 +66,10 @@ public class MediaDreamSentinel extends CoreStartable { public void onMediaDataLoaded(@NonNull String key, @Nullable String oldKey, public void onMediaDataLoaded(@NonNull String key, @Nullable String oldKey, @NonNull MediaData data, boolean immediately, int receivedSmartspaceCardLatency, @NonNull MediaData data, boolean immediately, int receivedSmartspaceCardLatency, boolean isSsReactivated) { boolean isSsReactivated) { if (!mFeatureFlags.isEnabled(MEDIA_DREAM_COMPLICATION)) { return; } if (mAdded) { if (mAdded) { return; return; } } Loading @@ -79,15 +86,18 @@ public class MediaDreamSentinel extends CoreStartable { private final MediaDataManager mMediaDataManager; private final MediaDataManager mMediaDataManager; private final DreamOverlayStateController mDreamOverlayStateController; private final DreamOverlayStateController mDreamOverlayStateController; private final MediaDreamComplication mComplication; private final MediaDreamComplication mComplication; private final FeatureFlags mFeatureFlags; @Inject @Inject public MediaDreamSentinel(Context context, MediaDataManager mediaDataManager, public MediaDreamSentinel(Context context, MediaDataManager mediaDataManager, DreamOverlayStateController dreamOverlayStateController, DreamOverlayStateController dreamOverlayStateController, MediaDreamComplication complication) { MediaDreamComplication complication, FeatureFlags featureFlags) { super(context); super(context); mMediaDataManager = mediaDataManager; mMediaDataManager = mediaDataManager; mDreamOverlayStateController = dreamOverlayStateController; mDreamOverlayStateController = dreamOverlayStateController; mComplication = complication; mComplication = complication; mFeatureFlags = featureFlags; } } @Override @Override Loading packages/SystemUI/tests/src/com/android/systemui/media/dream/MediaDreamSentinelTest.java +33 −7 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.media.dream; package com.android.systemui.media.dream; import static com.android.systemui.flags.Flags.MEDIA_DREAM_COMPLICATION; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.never; Loading @@ -28,6 +30,7 @@ import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase; import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.media.MediaData; import com.android.systemui.media.MediaData; import com.android.systemui.media.MediaDataManager; import com.android.systemui.media.MediaDataManager; Loading @@ -50,6 +53,9 @@ public class MediaDreamSentinelTest extends SysuiTestCase { @Mock @Mock MediaDreamComplication mComplication; MediaDreamComplication mComplication; @Mock FeatureFlags mFeatureFlags; final String mKey = "key"; final String mKey = "key"; final String mOldKey = "old_key"; final String mOldKey = "old_key"; Loading @@ -59,21 +65,18 @@ public class MediaDreamSentinelTest extends SysuiTestCase { @Before @Before public void setup() { public void setup() { MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this); when(mFeatureFlags.isEnabled(MEDIA_DREAM_COMPLICATION)).thenReturn(true); } } @Test @Test public void testComplicationAddition() { public void testComplicationAddition() { final MediaDreamSentinel sentinel = new MediaDreamSentinel(mContext, mMediaDataManager, final MediaDreamSentinel sentinel = new MediaDreamSentinel(mContext, mMediaDataManager, mDreamOverlayStateController, mComplication); mDreamOverlayStateController, mComplication, mFeatureFlags); sentinel.start(); sentinel.start(); ArgumentCaptor<MediaDataManager.Listener> listenerCaptor = final MediaDataManager.Listener listener = captureMediaDataListener(); ArgumentCaptor.forClass(MediaDataManager.Listener.class); verify(mMediaDataManager).addListener(listenerCaptor.capture()); final MediaDataManager.Listener listener = listenerCaptor.getValue(); when(mMediaDataManager.hasActiveMedia()).thenReturn(false); when(mMediaDataManager.hasActiveMedia()).thenReturn(false); listener.onMediaDataLoaded(mKey, mOldKey, mData, /* immediately= */ true, listener.onMediaDataLoaded(mKey, mOldKey, mData, /* immediately= */ true, /* receivedSmartspaceCardLatency= */ 0, /* isSsReactived= */ false); /* receivedSmartspaceCardLatency= */ 0, /* isSsReactived= */ false); Loading @@ -92,4 +95,27 @@ public class MediaDreamSentinelTest extends SysuiTestCase { verify(mDreamOverlayStateController).removeComplication(eq(mComplication)); verify(mDreamOverlayStateController).removeComplication(eq(mComplication)); } } @Test public void testMediaDreamSentinel_mediaComplicationDisabled_doNotAddComplication() { when(mFeatureFlags.isEnabled(MEDIA_DREAM_COMPLICATION)).thenReturn(false); final MediaDreamSentinel sentinel = new MediaDreamSentinel(mContext, mMediaDataManager, mDreamOverlayStateController, mComplication, 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()).addComplication(any()); } private MediaDataManager.Listener captureMediaDataListener() { final ArgumentCaptor<MediaDataManager.Listener> listenerCaptor = ArgumentCaptor.forClass(MediaDataManager.Listener.class); verify(mMediaDataManager).addListener(listenerCaptor.capture()); return listenerCaptor.getValue(); } } } Loading
packages/SystemUI/src/com/android/systemui/flags/Flags.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -179,6 +179,7 @@ public class Flags { public static final UnreleasedFlag MEDIA_SESSION_ACTIONS = new UnreleasedFlag(901); public static final UnreleasedFlag MEDIA_SESSION_ACTIONS = new UnreleasedFlag(901); public static final ReleasedFlag MEDIA_NEARBY_DEVICES = new ReleasedFlag(903); public static final ReleasedFlag MEDIA_NEARBY_DEVICES = new ReleasedFlag(903); public static final ReleasedFlag MEDIA_MUTE_AWAIT = new ReleasedFlag(904); public static final ReleasedFlag MEDIA_MUTE_AWAIT = new ReleasedFlag(904); public static final UnreleasedFlag MEDIA_DREAM_COMPLICATION = new UnreleasedFlag(905); // 1000 - dock // 1000 - dock public static final ReleasedFlag SIMULATE_DOCK_THROUGH_CHARGING = public static final ReleasedFlag SIMULATE_DOCK_THROUGH_CHARGING = Loading
packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamSentinel.java +12 −2 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.media.dream; package com.android.systemui.media.dream; import static com.android.systemui.flags.Flags.MEDIA_DREAM_COMPLICATION; import android.content.Context; import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.NonNull; Loading @@ -23,6 +25,7 @@ import androidx.annotation.Nullable; import com.android.systemui.CoreStartable; import com.android.systemui.CoreStartable; import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.media.MediaData; import com.android.systemui.media.MediaData; import com.android.systemui.media.MediaDataManager; import com.android.systemui.media.MediaDataManager; import com.android.systemui.media.SmartspaceMediaData; import com.android.systemui.media.SmartspaceMediaData; Loading @@ -34,7 +37,7 @@ import javax.inject.Inject; * the media complication as appropriate * the media complication as appropriate */ */ public class MediaDreamSentinel extends CoreStartable { public class MediaDreamSentinel extends CoreStartable { private MediaDataManager.Listener mListener = new MediaDataManager.Listener() { private final MediaDataManager.Listener mListener = new MediaDataManager.Listener() { private boolean mAdded; private boolean mAdded; @Override @Override public void onSmartspaceMediaDataRemoved(@NonNull String key, boolean immediately) { public void onSmartspaceMediaDataRemoved(@NonNull String key, boolean immediately) { Loading Loading @@ -63,6 +66,10 @@ public class MediaDreamSentinel extends CoreStartable { public void onMediaDataLoaded(@NonNull String key, @Nullable String oldKey, public void onMediaDataLoaded(@NonNull String key, @Nullable String oldKey, @NonNull MediaData data, boolean immediately, int receivedSmartspaceCardLatency, @NonNull MediaData data, boolean immediately, int receivedSmartspaceCardLatency, boolean isSsReactivated) { boolean isSsReactivated) { if (!mFeatureFlags.isEnabled(MEDIA_DREAM_COMPLICATION)) { return; } if (mAdded) { if (mAdded) { return; return; } } Loading @@ -79,15 +86,18 @@ public class MediaDreamSentinel extends CoreStartable { private final MediaDataManager mMediaDataManager; private final MediaDataManager mMediaDataManager; private final DreamOverlayStateController mDreamOverlayStateController; private final DreamOverlayStateController mDreamOverlayStateController; private final MediaDreamComplication mComplication; private final MediaDreamComplication mComplication; private final FeatureFlags mFeatureFlags; @Inject @Inject public MediaDreamSentinel(Context context, MediaDataManager mediaDataManager, public MediaDreamSentinel(Context context, MediaDataManager mediaDataManager, DreamOverlayStateController dreamOverlayStateController, DreamOverlayStateController dreamOverlayStateController, MediaDreamComplication complication) { MediaDreamComplication complication, FeatureFlags featureFlags) { super(context); super(context); mMediaDataManager = mediaDataManager; mMediaDataManager = mediaDataManager; mDreamOverlayStateController = dreamOverlayStateController; mDreamOverlayStateController = dreamOverlayStateController; mComplication = complication; mComplication = complication; mFeatureFlags = featureFlags; } } @Override @Override Loading
packages/SystemUI/tests/src/com/android/systemui/media/dream/MediaDreamSentinelTest.java +33 −7 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.media.dream; package com.android.systemui.media.dream; import static com.android.systemui.flags.Flags.MEDIA_DREAM_COMPLICATION; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.never; Loading @@ -28,6 +30,7 @@ import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase; import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.media.MediaData; import com.android.systemui.media.MediaData; import com.android.systemui.media.MediaDataManager; import com.android.systemui.media.MediaDataManager; Loading @@ -50,6 +53,9 @@ public class MediaDreamSentinelTest extends SysuiTestCase { @Mock @Mock MediaDreamComplication mComplication; MediaDreamComplication mComplication; @Mock FeatureFlags mFeatureFlags; final String mKey = "key"; final String mKey = "key"; final String mOldKey = "old_key"; final String mOldKey = "old_key"; Loading @@ -59,21 +65,18 @@ public class MediaDreamSentinelTest extends SysuiTestCase { @Before @Before public void setup() { public void setup() { MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this); when(mFeatureFlags.isEnabled(MEDIA_DREAM_COMPLICATION)).thenReturn(true); } } @Test @Test public void testComplicationAddition() { public void testComplicationAddition() { final MediaDreamSentinel sentinel = new MediaDreamSentinel(mContext, mMediaDataManager, final MediaDreamSentinel sentinel = new MediaDreamSentinel(mContext, mMediaDataManager, mDreamOverlayStateController, mComplication); mDreamOverlayStateController, mComplication, mFeatureFlags); sentinel.start(); sentinel.start(); ArgumentCaptor<MediaDataManager.Listener> listenerCaptor = final MediaDataManager.Listener listener = captureMediaDataListener(); ArgumentCaptor.forClass(MediaDataManager.Listener.class); verify(mMediaDataManager).addListener(listenerCaptor.capture()); final MediaDataManager.Listener listener = listenerCaptor.getValue(); when(mMediaDataManager.hasActiveMedia()).thenReturn(false); when(mMediaDataManager.hasActiveMedia()).thenReturn(false); listener.onMediaDataLoaded(mKey, mOldKey, mData, /* immediately= */ true, listener.onMediaDataLoaded(mKey, mOldKey, mData, /* immediately= */ true, /* receivedSmartspaceCardLatency= */ 0, /* isSsReactived= */ false); /* receivedSmartspaceCardLatency= */ 0, /* isSsReactived= */ false); Loading @@ -92,4 +95,27 @@ public class MediaDreamSentinelTest extends SysuiTestCase { verify(mDreamOverlayStateController).removeComplication(eq(mComplication)); verify(mDreamOverlayStateController).removeComplication(eq(mComplication)); } } @Test public void testMediaDreamSentinel_mediaComplicationDisabled_doNotAddComplication() { when(mFeatureFlags.isEnabled(MEDIA_DREAM_COMPLICATION)).thenReturn(false); final MediaDreamSentinel sentinel = new MediaDreamSentinel(mContext, mMediaDataManager, mDreamOverlayStateController, mComplication, 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()).addComplication(any()); } private MediaDataManager.Listener captureMediaDataListener() { final ArgumentCaptor<MediaDataManager.Listener> listenerCaptor = ArgumentCaptor.forClass(MediaDataManager.Listener.class); verify(mMediaDataManager).addListener(listenerCaptor.capture()); return listenerCaptor.getValue(); } } }