Disable player's "Dismiss" button when notification is not dismissible.
Bug: 169271494 Test: manual Change-Id: I3c2a73e4885642965ec553387b5e91f0cb16ff2f Merged-In: I3c2a73e4885642965ec553387b5e91f0cb16ff2f
This commit is contained in:
@@ -2820,6 +2820,8 @@
|
|||||||
<string name="controls_media_title">Media</string>
|
<string name="controls_media_title">Media</string>
|
||||||
<!-- Explanation for closing controls associated with a specific media session [CHAR_LIMIT=NONE] -->
|
<!-- Explanation for closing controls associated with a specific media session [CHAR_LIMIT=NONE] -->
|
||||||
<string name="controls_media_close_session">Hide the current session.</string>
|
<string name="controls_media_close_session">Hide the current session.</string>
|
||||||
|
<!-- Explanation that controls associated with a specific media session are active [CHAR_LIMIT=NONE] -->
|
||||||
|
<string name="controls_media_active_session">Current session cannot be hidden.</string>
|
||||||
<!-- Label for a button that will hide media controls [CHAR_LIMIT=30] -->
|
<!-- Label for a button that will hide media controls [CHAR_LIMIT=30] -->
|
||||||
<string name="controls_media_dismiss_button">Dismiss</string>
|
<string name="controls_media_dismiss_button">Dismiss</string>
|
||||||
<!-- Label for button to resume media playback [CHAR_LIMIT=NONE] -->
|
<!-- Label for button to resume media playback [CHAR_LIMIT=NONE] -->
|
||||||
|
|||||||
@@ -359,7 +359,15 @@ public class MediaControlPanel {
|
|||||||
final MediaController controller = getController();
|
final MediaController controller = getController();
|
||||||
mBackgroundExecutor.execute(() -> mSeekBarViewModel.updateController(controller));
|
mBackgroundExecutor.execute(() -> mSeekBarViewModel.updateController(controller));
|
||||||
|
|
||||||
|
// Guts label
|
||||||
|
boolean isDismissible = data.isClearable();
|
||||||
|
mViewHolder.getSettingsText().setText(isDismissible
|
||||||
|
? R.string.controls_media_close_session
|
||||||
|
: R.string.controls_media_active_session);
|
||||||
|
|
||||||
// Dismiss
|
// Dismiss
|
||||||
|
mViewHolder.getDismissLabel().setAlpha(isDismissible ? 1 : DISABLED_ALPHA);
|
||||||
|
mViewHolder.getDismiss().setEnabled(isDismissible);
|
||||||
mViewHolder.getDismiss().setOnClickListener(v -> {
|
mViewHolder.getDismiss().setOnClickListener(v -> {
|
||||||
if (mKey != null) {
|
if (mKey != null) {
|
||||||
closeGuts();
|
closeGuts();
|
||||||
|
|||||||
@@ -60,8 +60,10 @@ class PlayerViewHolder private constructor(itemView: View) {
|
|||||||
val action4 = itemView.requireViewById<ImageButton>(R.id.action4)
|
val action4 = itemView.requireViewById<ImageButton>(R.id.action4)
|
||||||
|
|
||||||
// Settings screen
|
// Settings screen
|
||||||
|
val settingsText = itemView.requireViewById<TextView>(R.id.remove_text)
|
||||||
val cancel = itemView.requireViewById<View>(R.id.cancel)
|
val cancel = itemView.requireViewById<View>(R.id.cancel)
|
||||||
val dismiss = itemView.requireViewById<View>(R.id.dismiss)
|
val dismiss = itemView.requireViewById<ViewGroup>(R.id.dismiss)
|
||||||
|
val dismissLabel = dismiss.getChildAt(0)
|
||||||
val settings = itemView.requireViewById<View>(R.id.settings)
|
val settings = itemView.requireViewById<View>(R.id.settings)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
|||||||
@@ -109,9 +109,11 @@ public class MediaControlPanelTest : SysuiTestCase() {
|
|||||||
private lateinit var action2: ImageButton
|
private lateinit var action2: ImageButton
|
||||||
private lateinit var action3: ImageButton
|
private lateinit var action3: ImageButton
|
||||||
private lateinit var action4: ImageButton
|
private lateinit var action4: ImageButton
|
||||||
|
private lateinit var settingsText: TextView
|
||||||
private lateinit var settings: View
|
private lateinit var settings: View
|
||||||
private lateinit var cancel: View
|
private lateinit var cancel: View
|
||||||
private lateinit var dismiss: View
|
private lateinit var dismiss: FrameLayout
|
||||||
|
private lateinit var dismissLabel: View
|
||||||
|
|
||||||
private lateinit var session: MediaSession
|
private lateinit var session: MediaSession
|
||||||
private val device = MediaDeviceData(true, null, DEVICE_NAME)
|
private val device = MediaDeviceData(true, null, DEVICE_NAME)
|
||||||
@@ -168,12 +170,16 @@ public class MediaControlPanelTest : SysuiTestCase() {
|
|||||||
whenever(holder.action3).thenReturn(action3)
|
whenever(holder.action3).thenReturn(action3)
|
||||||
action4 = ImageButton(context)
|
action4 = ImageButton(context)
|
||||||
whenever(holder.action4).thenReturn(action4)
|
whenever(holder.action4).thenReturn(action4)
|
||||||
|
settingsText = TextView(context)
|
||||||
|
whenever(holder.settingsText).thenReturn(settingsText)
|
||||||
settings = View(context)
|
settings = View(context)
|
||||||
whenever(holder.settings).thenReturn(settings)
|
whenever(holder.settings).thenReturn(settings)
|
||||||
cancel = View(context)
|
cancel = View(context)
|
||||||
whenever(holder.cancel).thenReturn(cancel)
|
whenever(holder.cancel).thenReturn(cancel)
|
||||||
dismiss = View(context)
|
dismiss = FrameLayout(context)
|
||||||
whenever(holder.dismiss).thenReturn(dismiss)
|
whenever(holder.dismiss).thenReturn(dismiss)
|
||||||
|
dismissLabel = View(context)
|
||||||
|
whenever(holder.dismissLabel).thenReturn(dismissLabel)
|
||||||
|
|
||||||
// Create media session
|
// Create media session
|
||||||
val metadataBuilder = MediaMetadata.Builder().apply {
|
val metadataBuilder = MediaMetadata.Builder().apply {
|
||||||
@@ -327,6 +333,7 @@ public class MediaControlPanelTest : SysuiTestCase() {
|
|||||||
notificationKey = KEY)
|
notificationKey = KEY)
|
||||||
player.bind(state, mediaKey)
|
player.bind(state, mediaKey)
|
||||||
|
|
||||||
|
assertThat(dismiss.isEnabled).isEqualTo(true)
|
||||||
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())
|
||||||
@@ -334,4 +341,16 @@ public class MediaControlPanelTest : SysuiTestCase() {
|
|||||||
captor.value.onDismiss()
|
captor.value.onDismiss()
|
||||||
verify(mediaDataManager).dismissMediaData(eq(mediaKey), anyLong())
|
verify(mediaDataManager).dismissMediaData(eq(mediaKey), anyLong())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun dismissButtonDisabled() {
|
||||||
|
val mediaKey = "key for dismissal"
|
||||||
|
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,
|
||||||
|
isClearable = false, notificationKey = KEY)
|
||||||
|
player.bind(state, mediaKey)
|
||||||
|
|
||||||
|
assertThat(dismiss.isEnabled).isEqualTo(false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user