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

Commit d4659de4 authored by Jeff DeCew's avatar Jeff DeCew Committed by Android (Google) Code Review
Browse files

Merge changes from topic "media_delete_intent_rvc_qpr2" into rvc-qpr-dev

* changes:
  Notifications starting paused shall still be subject to timeout.
  Disable player's "Dismiss" button when notification is not dismissible.
  Media player attempts to dismiss notifications when players removed.
parents f068a1c6 fb21535b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2820,6 +2820,8 @@
    <string name="controls_media_title">Media</string>
    <!-- Explanation for closing controls associated with a specific media session [CHAR_LIMIT=NONE] -->
    <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] -->
    <string name="controls_media_dismiss_button">Dismiss</string>
    <!-- Label for button to resume media playback [CHAR_LIMIT=NONE] -->
+8 −0
Original line number Diff line number Diff line
@@ -359,7 +359,15 @@ public class MediaControlPanel {
        final MediaController controller = getController();
        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
        mViewHolder.getDismissLabel().setAlpha(isDismissible ? 1 : DISABLED_ALPHA);
        mViewHolder.getDismiss().setEnabled(isDismissible);
        mViewHolder.getDismiss().setOnClickListener(v -> {
            if (mKey != null) {
                closeGuts();
+4 −6
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ class MediaTimeoutListener @Inject constructor(
    /**
     * Callback representing that a media object is now expired:
     * @param token Media session unique identifier
     * @param pauseTimeuot True when expired for {@code PAUSED_MEDIA_TIMEOUT}
     * @param pauseTimeout True when expired for {@code PAUSED_MEDIA_TIMEOUT}
     */
    lateinit var timeoutCallback: (String, Boolean) -> Unit

@@ -57,11 +57,10 @@ class MediaTimeoutListener @Inject constructor(
        // Having an old key means that we're migrating from/to resumption. We should update
        // the old listener to make sure that events will be dispatched to the new location.
        val migrating = oldKey != null && key != oldKey
        var wasPlaying = false
        if (migrating) {
            val reusedListener = mediaListeners.remove(oldKey)
            if (reusedListener != null) {
                wasPlaying = reusedListener.playing ?: false
                val wasPlaying = reusedListener.playing ?: false
                if (DEBUG) Log.d(TAG, "migrating key $oldKey to $key, for resumption")
                reusedListener.mediaData = data
                reusedListener.key = key
@@ -159,9 +158,8 @@ class MediaTimeoutListener @Inject constructor(
                        Log.v(TAG, "Execute timeout for $key")
                    }
                    timedOut = true
                    if (dispatchEvents) {
                    // this event is async, so it's safe even when `dispatchEvents` is false
                    timeoutCallback(key, timedOut)
                    }
                }, PAUSED_MEDIA_TIMEOUT)
            } else {
                expireMediaTimeout(key, "playback started - $state, $key")
+3 −1
Original line number Diff line number Diff line
@@ -60,8 +60,10 @@ class PlayerViewHolder private constructor(itemView: View) {
    val action4 = itemView.requireViewById<ImageButton>(R.id.action4)

    // Settings screen
    val settingsText = itemView.requireViewById<TextView>(R.id.remove_text)
    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)

    init {
+20 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import android.os.Trace;
import android.os.UserHandle;
import android.provider.DeviceConfig;
import android.provider.DeviceConfig.Properties;
import android.service.notification.NotificationListenerService;
import android.util.ArraySet;
import android.util.Log;
import android.view.View;
@@ -52,6 +53,7 @@ import com.android.systemui.Dumpable;
import com.android.systemui.Interpolators;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.media.MediaData;
import com.android.systemui.media.MediaDataManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.dagger.StatusBarModule;
@@ -250,6 +252,24 @@ public class NotificationMediaManager implements Dumpable {
            }
        });

        mMediaDataManager.addListener(new MediaDataManager.Listener() {
            @Override
            public void onMediaDataLoaded(@NonNull String key,
                    @Nullable String oldKey, @NonNull MediaData data) {
            }

            @Override
            public void onMediaDataRemoved(@NonNull String key) {
                NotificationEntry entry = mEntryManager.getPendingOrActiveNotif(key);
                if (entry != null) {
                    // TODO(b/160713608): "removing" this notification won't happen and
                    //  won't send the 'deleteIntent' if the notification is ongoing.
                    mEntryManager.performRemoveNotification(entry.getSbn(),
                            NotificationListenerService.REASON_CANCEL);
                }
            }
        });

        mShowCompactMediaSeekbar = "true".equals(
                DeviceConfig.getProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
                    SystemUiDeviceConfigFlags.COMPACT_MEDIA_SEEKBAR_ENABLED));
Loading