Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6c96953 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Allow for dismissing resumable players" into rvc-qpr-dev am: 8d8c8aaf am: f69c09e9

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12687156

Change-Id: I100ba2783af20f8737e4d7923c66330416a3b4b0
parents 10de4d60 f69c09e9
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -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()
+5 −3
Original line number Original line Diff line number Diff line
@@ -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);
+10 −25
Original line number Original line Diff line number Diff line
@@ -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()
                )
    }
    }
}
}