Merge "Allow for dismissing resumable players" into rvc-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
8d8c8aaf3c
@@ -250,13 +250,13 @@ class MediaCarouselController @Inject constructor(
|
|||||||
val lp = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
|
val lp = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT)
|
ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||||
newPlayer.view?.player?.setLayoutParams(lp)
|
newPlayer.view?.player?.setLayoutParams(lp)
|
||||||
newPlayer.bind(data)
|
newPlayer.bind(data, key)
|
||||||
newPlayer.setListening(currentlyExpanded)
|
newPlayer.setListening(currentlyExpanded)
|
||||||
MediaPlayerData.addMediaPlayer(key, data, newPlayer)
|
MediaPlayerData.addMediaPlayer(key, data, newPlayer)
|
||||||
updatePlayerToState(newPlayer, noAnimation = true)
|
updatePlayerToState(newPlayer, noAnimation = true)
|
||||||
reorderAllPlayers()
|
reorderAllPlayers()
|
||||||
} else {
|
} else {
|
||||||
existingPlayer.bind(data)
|
existingPlayer.bind(data, key)
|
||||||
MediaPlayerData.addMediaPlayer(key, data, existingPlayer)
|
MediaPlayerData.addMediaPlayer(key, data, existingPlayer)
|
||||||
if (visualStabilityManager.isReorderingAllowed) {
|
if (visualStabilityManager.isReorderingAllowed) {
|
||||||
reorderAllPlayers()
|
reorderAllPlayers()
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ public class MediaControlPanel {
|
|||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private PlayerViewHolder mViewHolder;
|
private PlayerViewHolder mViewHolder;
|
||||||
|
private String mKey;
|
||||||
private MediaViewController mMediaViewController;
|
private MediaViewController mMediaViewController;
|
||||||
private MediaSession.Token mToken;
|
private MediaSession.Token mToken;
|
||||||
private MediaController mController;
|
private MediaController mController;
|
||||||
@@ -206,10 +207,11 @@ public class MediaControlPanel {
|
|||||||
/**
|
/**
|
||||||
* Bind this view based on the data given
|
* Bind this view based on the data given
|
||||||
*/
|
*/
|
||||||
public void bind(@NonNull MediaData data) {
|
public void bind(@NonNull MediaData data, String key) {
|
||||||
if (mViewHolder == null) {
|
if (mViewHolder == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
mKey = key;
|
||||||
MediaSession.Token token = data.getToken();
|
MediaSession.Token token = data.getToken();
|
||||||
mBackgroundColor = data.getBackgroundColor();
|
mBackgroundColor = data.getBackgroundColor();
|
||||||
if (mToken == null || !mToken.equals(token)) {
|
if (mToken == null || !mToken.equals(token)) {
|
||||||
@@ -359,10 +361,10 @@ public class MediaControlPanel {
|
|||||||
|
|
||||||
// Dismiss
|
// Dismiss
|
||||||
mViewHolder.getDismiss().setOnClickListener(v -> {
|
mViewHolder.getDismiss().setOnClickListener(v -> {
|
||||||
if (data.getNotificationKey() != null) {
|
if (mKey != null) {
|
||||||
closeGuts();
|
closeGuts();
|
||||||
mKeyguardDismissUtil.executeWhenUnlocked(() -> {
|
mKeyguardDismissUtil.executeWhenUnlocked(() -> {
|
||||||
mMediaDataManagerLazy.get().dismissMediaData(data.getNotificationKey(),
|
mMediaDataManagerLazy.get().dismissMediaData(mKey,
|
||||||
MediaViewController.GUTS_ANIMATION_DURATION + 100);
|
MediaViewController.GUTS_ANIMATION_DURATION + 100);
|
||||||
return true;
|
return true;
|
||||||
}, /* requiresShadeOpen */ true);
|
}, /* requiresShadeOpen */ true);
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ import com.android.systemui.statusbar.phone.KeyguardDismissUtil
|
|||||||
import com.android.systemui.util.animation.TransitionLayout
|
import com.android.systemui.util.animation.TransitionLayout
|
||||||
import com.android.systemui.util.concurrency.FakeExecutor
|
import com.android.systemui.util.concurrency.FakeExecutor
|
||||||
import com.android.systemui.util.mockito.eq
|
import com.android.systemui.util.mockito.eq
|
||||||
import com.android.systemui.util.mockito.any
|
|
||||||
import com.android.systemui.util.time.FakeSystemClock
|
import com.android.systemui.util.time.FakeSystemClock
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import dagger.Lazy
|
import dagger.Lazy
|
||||||
@@ -53,7 +52,6 @@ import org.junit.Rule
|
|||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
import org.mockito.ArgumentCaptor
|
import org.mockito.ArgumentCaptor
|
||||||
import org.mockito.ArgumentMatchers
|
|
||||||
import org.mockito.ArgumentMatchers.anyLong
|
import org.mockito.ArgumentMatchers.anyLong
|
||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
import org.mockito.Mockito.anyBoolean
|
import org.mockito.Mockito.anyBoolean
|
||||||
@@ -203,7 +201,7 @@ public class MediaControlPanelTest : SysuiTestCase() {
|
|||||||
fun bindWhenUnattached() {
|
fun bindWhenUnattached() {
|
||||||
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
||||||
emptyList(), PACKAGE, null, null, device, true, null)
|
emptyList(), PACKAGE, null, null, device, true, null)
|
||||||
player.bind(state)
|
player.bind(state, PACKAGE)
|
||||||
assertThat(player.isPlaying()).isFalse()
|
assertThat(player.isPlaying()).isFalse()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,7 +210,7 @@ public class MediaControlPanelTest : SysuiTestCase() {
|
|||||||
player.attach(holder)
|
player.attach(holder)
|
||||||
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
||||||
emptyList(), PACKAGE, session.getSessionToken(), null, device, true, null)
|
emptyList(), PACKAGE, session.getSessionToken(), null, device, true, null)
|
||||||
player.bind(state)
|
player.bind(state, PACKAGE)
|
||||||
assertThat(appName.getText()).isEqualTo(APP)
|
assertThat(appName.getText()).isEqualTo(APP)
|
||||||
assertThat(titleText.getText()).isEqualTo(TITLE)
|
assertThat(titleText.getText()).isEqualTo(TITLE)
|
||||||
assertThat(artistText.getText()).isEqualTo(ARTIST)
|
assertThat(artistText.getText()).isEqualTo(ARTIST)
|
||||||
@@ -223,7 +221,7 @@ public class MediaControlPanelTest : SysuiTestCase() {
|
|||||||
player.attach(holder)
|
player.attach(holder)
|
||||||
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
||||||
emptyList(), PACKAGE, session.getSessionToken(), null, device, true, null)
|
emptyList(), PACKAGE, session.getSessionToken(), null, device, true, null)
|
||||||
player.bind(state)
|
player.bind(state, PACKAGE)
|
||||||
val list = ArgumentCaptor.forClass(ColorStateList::class.java)
|
val list = ArgumentCaptor.forClass(ColorStateList::class.java)
|
||||||
verify(view).setBackgroundTintList(list.capture())
|
verify(view).setBackgroundTintList(list.capture())
|
||||||
assertThat(list.value).isEqualTo(ColorStateList.valueOf(BG_COLOR))
|
assertThat(list.value).isEqualTo(ColorStateList.valueOf(BG_COLOR))
|
||||||
@@ -234,7 +232,7 @@ public class MediaControlPanelTest : SysuiTestCase() {
|
|||||||
player.attach(holder)
|
player.attach(holder)
|
||||||
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
||||||
emptyList(), PACKAGE, session.getSessionToken(), null, device, true, null)
|
emptyList(), PACKAGE, session.getSessionToken(), null, device, true, null)
|
||||||
player.bind(state)
|
player.bind(state, PACKAGE)
|
||||||
assertThat(seamlessText.getText()).isEqualTo(DEVICE_NAME)
|
assertThat(seamlessText.getText()).isEqualTo(DEVICE_NAME)
|
||||||
assertThat(seamless.isEnabled()).isTrue()
|
assertThat(seamless.isEnabled()).isTrue()
|
||||||
}
|
}
|
||||||
@@ -246,7 +244,7 @@ public class MediaControlPanelTest : SysuiTestCase() {
|
|||||||
player.attach(holder)
|
player.attach(holder)
|
||||||
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
||||||
emptyList(), PACKAGE, session.getSessionToken(), null, disabledDevice, true, null)
|
emptyList(), PACKAGE, session.getSessionToken(), null, disabledDevice, true, null)
|
||||||
player.bind(state)
|
player.bind(state, PACKAGE)
|
||||||
verify(expandedSet).setVisibility(seamless.id, View.GONE)
|
verify(expandedSet).setVisibility(seamless.id, View.GONE)
|
||||||
verify(expandedSet).setVisibility(seamlessFallback.id, View.VISIBLE)
|
verify(expandedSet).setVisibility(seamlessFallback.id, View.VISIBLE)
|
||||||
verify(collapsedSet).setVisibility(seamless.id, View.GONE)
|
verify(collapsedSet).setVisibility(seamless.id, View.GONE)
|
||||||
@@ -258,7 +256,7 @@ public class MediaControlPanelTest : SysuiTestCase() {
|
|||||||
player.attach(holder)
|
player.attach(holder)
|
||||||
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
||||||
emptyList(), PACKAGE, session.getSessionToken(), null, null, true, null)
|
emptyList(), PACKAGE, session.getSessionToken(), null, null, true, null)
|
||||||
player.bind(state)
|
player.bind(state, PACKAGE)
|
||||||
assertThat(seamless.isEnabled()).isTrue()
|
assertThat(seamless.isEnabled()).isTrue()
|
||||||
assertThat(seamlessText.getText()).isEqualTo(context.getResources().getString(
|
assertThat(seamlessText.getText()).isEqualTo(context.getResources().getString(
|
||||||
com.android.internal.R.string.ext_media_seamless_action))
|
com.android.internal.R.string.ext_media_seamless_action))
|
||||||
@@ -270,7 +268,7 @@ public class MediaControlPanelTest : SysuiTestCase() {
|
|||||||
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
||||||
emptyList(), PACKAGE, session.getSessionToken(), null, device, true, null,
|
emptyList(), PACKAGE, session.getSessionToken(), null, device, true, null,
|
||||||
resumption = true)
|
resumption = true)
|
||||||
player.bind(state)
|
player.bind(state, PACKAGE)
|
||||||
assertThat(seamlessText.getText()).isEqualTo(DEVICE_NAME)
|
assertThat(seamlessText.getText()).isEqualTo(DEVICE_NAME)
|
||||||
assertThat(seamless.isEnabled()).isFalse()
|
assertThat(seamless.isEnabled()).isFalse()
|
||||||
}
|
}
|
||||||
@@ -322,31 +320,18 @@ public class MediaControlPanelTest : SysuiTestCase() {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun dismissButtonClick() {
|
fun dismissButtonClick() {
|
||||||
|
val mediaKey = "key for dismissal"
|
||||||
player.attach(holder)
|
player.attach(holder)
|
||||||
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
||||||
emptyList(), PACKAGE, session.getSessionToken(), null, null, true, null,
|
emptyList(), PACKAGE, session.getSessionToken(), null, null, true, null,
|
||||||
notificationKey = KEY)
|
notificationKey = KEY)
|
||||||
player.bind(state)
|
player.bind(state, mediaKey)
|
||||||
|
|
||||||
dismiss.callOnClick()
|
dismiss.callOnClick()
|
||||||
val captor = ArgumentCaptor.forClass(ActivityStarter.OnDismissAction::class.java)
|
val captor = ArgumentCaptor.forClass(ActivityStarter.OnDismissAction::class.java)
|
||||||
verify(keyguardDismissUtil).executeWhenUnlocked(captor.capture(), anyBoolean())
|
verify(keyguardDismissUtil).executeWhenUnlocked(captor.capture(), anyBoolean())
|
||||||
|
|
||||||
captor.value.onDismiss()
|
captor.value.onDismiss()
|
||||||
verify(mediaDataManager).dismissMediaData(eq(KEY), anyLong())
|
verify(mediaDataManager).dismissMediaData(eq(mediaKey), anyLong())
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun dismissButtonClick_nullNotificationKey() {
|
|
||||||
player.attach(holder)
|
|
||||||
val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
|
|
||||||
emptyList(), PACKAGE, session.getSessionToken(), null, null, true, null)
|
|
||||||
player.bind(state)
|
|
||||||
|
|
||||||
verify(keyguardDismissUtil, never())
|
|
||||||
.executeWhenUnlocked(
|
|
||||||
any(ActivityStarter.OnDismissAction::class.java),
|
|
||||||
ArgumentMatchers.anyBoolean()
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user