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

Commit 5b27cbc0 authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Dismiss media if paused for more than 10min

Test: manual
Fixes: 153897770
Change-Id: I2aeba1b53c3b70408d3ff95b4b987f13fc889210
parent 7a7fd761
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -68,4 +68,3 @@ class KeyguardMediaController @Inject constructor(
        view?.visibility = if (shouldBeVisible) View.VISIBLE else View.GONE
    }
}
 No newline at end of file
+3 −3
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ class MediaDataManager @Inject constructor(
    private val context: Context,
    private val mediaControllerFactory: MediaControllerFactory,
    @Background private val backgroundExecutor: Executor,
    @Main private val foregroundExcecutor: Executor
    @Main private val foregroundExecutor: Executor
) {

    private val listeners: MutableSet<Listener> = mutableSetOf()
@@ -201,7 +201,7 @@ class MediaDataManager @Inject constructor(
            }
        }

        foregroundExcecutor.execute {
        foregroundExecutor.execute {
            onMediaDataLoaded(key, MediaData(true, bgColor, app, smallIconDrawable, artist, song,
                    artWorkIcon, actionIcons, actionsToShowCollapsed, sbn.packageName, token,
                    notif.contentIntent))
@@ -288,7 +288,7 @@ class MediaDataManager @Inject constructor(
    /**
     * Are there any media notifications active?
     */
    fun hasActiveMedia() = mediaEntries.size > 0
    fun hasActiveMedia() = mediaEntries.isNotEmpty()

    fun hasAnyMedia(): Boolean {
        // TODO: implement this when we implemented resumption
+14 −14
Original line number Diff line number Diff line
@@ -37,11 +37,11 @@ class MediaHost @Inject constructor(
            // the above could return negative widths, which is wrong
            if (right < left) {
                left = 0
                right = 0;
                right = 0
            }
            if (bottom < top) {
                bottom = 0
                top = 0;
                top = 0
            }
            state.boundsOnScreen.set(left, top, right, bottom)
            return state
@@ -64,7 +64,7 @@ class MediaHost @Inject constructor(
     *                 transitions.
     */
    fun init(@MediaLocation location: Int) {
        this.location = location;
        this.location = location
        hostView = mediaHierarchyManager.register(this)
        hostView.addOnAttachStateChangeListener(object : OnAttachStateChangeListener {
            override fun onViewAttachedToWindow(v: View?) {
@@ -147,7 +147,8 @@ interface MediaState {
 */
data class MediaMeasurementInput(
    private val viewInput: MeasurementInput,
    val expansion: Float) : MeasurementInput by viewInput {
    val expansion: Float
) : MeasurementInput by viewInput {

    override fun sameAs(input: MeasurementInput?): Boolean {
        if (!(input is MediaMeasurementInput)) {
@@ -156,4 +157,3 @@ data class MediaMeasurementInput(
        return width == input.width && expansion == input.expansion
    }
}
 No newline at end of file
+34 −6
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar;

import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
import static com.android.systemui.statusbar.notification.NotificationEntryManager.UNDEFINED_DISMISS_REASON;
import static com.android.systemui.statusbar.phone.StatusBar.DEBUG_MEDIA_FAKE_ARTWORK;
import static com.android.systemui.statusbar.phone.StatusBar.ENABLE_LOCKSCREEN_WALLPAPER;
import static com.android.systemui.statusbar.phone.StatusBar.SHOW_LOCKSCREEN_MEDIA_ARTWORK;
@@ -44,8 +45,6 @@ import android.util.Log;
import android.view.View;
import android.widget.ImageView;

import androidx.annotation.NonNull;

import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.internal.statusbar.NotificationVisibility;
import com.android.systemui.Dependency;
@@ -53,7 +52,6 @@ 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;
@@ -70,6 +68,7 @@ import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.Utils;
import com.android.systemui.util.concurrency.DelayableExecutor;

import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -79,7 +78,7 @@ import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;

import dagger.Lazy;

@@ -90,6 +89,7 @@ import dagger.Lazy;
public class NotificationMediaManager implements Dumpable {
    private static final String TAG = "NotificationMediaManager";
    public static final boolean DEBUG_MEDIA = false;
    private static final long PAUSED_MEDIA_TIMEOUT = TimeUnit.MINUTES.toMillis(10);

    private final StatusBarStateController mStatusBarStateController
            = Dependency.get(StatusBarStateController.class);
@@ -106,6 +106,7 @@ public class NotificationMediaManager implements Dumpable {
    }

    private final NotificationEntryManager mEntryManager;
    private final MediaDataManager mMediaDataManager;

    @Nullable
    private Lazy<NotificationShadeWindowController> mNotificationShadeWindowController;
@@ -117,7 +118,7 @@ public class NotificationMediaManager implements Dumpable {
    @Nullable
    private LockscreenWallpaper mLockscreenWallpaper;

    private final Executor mMainExecutor;
    private final DelayableExecutor mMainExecutor;

    private final Context mContext;
    private final MediaSessionManager mMediaSessionManager;
@@ -130,6 +131,7 @@ public class NotificationMediaManager implements Dumpable {
    private MediaController mMediaController;
    private String mMediaNotificationKey;
    private MediaMetadata mMediaMetadata;
    private Runnable mMediaTimeoutCancellation;

    private BackDropView mBackdrop;
    private ImageView mBackdropFront;
@@ -159,11 +161,36 @@ public class NotificationMediaManager implements Dumpable {
            if (DEBUG_MEDIA) {
                Log.v(TAG, "DEBUG_MEDIA: onPlaybackStateChanged: " + state);
            }
            if (mMediaTimeoutCancellation != null) {
                mMediaTimeoutCancellation.run();
                mMediaTimeoutCancellation = null;
            }
            if (state != null) {
                if (!isPlaybackActive(state.getState())) {
                    clearCurrentMediaNotification();
                }
                findAndUpdateMediaNotifications();
                scheduleMediaTimeout(state);
            }
        }

        private void scheduleMediaTimeout(PlaybackState state) {
            final NotificationEntry entry;
            synchronized (mEntryManager) {
                entry = mEntryManager.getActiveNotificationUnfiltered(mMediaNotificationKey);
            }
            if (entry != null) {
                if (!isPlayingState(state.getState())) {
                    mMediaTimeoutCancellation = mMainExecutor.executeDelayed(() -> {
                        synchronized (mEntryManager) {
                            if (mMediaNotificationKey == null) {
                                return;
                            }
                            mEntryManager.removeNotification(mMediaNotificationKey, null,
                                    UNDEFINED_DISMISS_REASON);
                        }
                    }, PAUSED_MEDIA_TIMEOUT);
                }
            }
        }

@@ -189,7 +216,7 @@ public class NotificationMediaManager implements Dumpable {
            NotificationEntryManager notificationEntryManager,
            MediaArtworkProcessor mediaArtworkProcessor,
            KeyguardBypassController keyguardBypassController,
            @Main Executor mainExecutor,
            @Main DelayableExecutor mainExecutor,
            DeviceConfigProxy deviceConfig,
            MediaDataManager mediaDataManager) {
        mContext = context;
@@ -205,6 +232,7 @@ public class NotificationMediaManager implements Dumpable {
        mNotificationShadeWindowController = notificationShadeWindowController;
        mEntryManager = notificationEntryManager;
        mMainExecutor = mainExecutor;
        mMediaDataManager = mediaDataManager;

        notificationEntryManager.addNotificationEntryListener(new NotificationEntryListener() {

+2 −1
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.policy.RemoteInputUriController;
import com.android.systemui.tracing.ProtoTracer;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.concurrency.DelayableExecutor;

import java.util.concurrent.Executor;

@@ -95,7 +96,7 @@ public interface StatusBarDependenciesModule {
            NotificationEntryManager notificationEntryManager,
            MediaArtworkProcessor mediaArtworkProcessor,
            KeyguardBypassController keyguardBypassController,
            @Main Executor mainExecutor,
            @Main DelayableExecutor mainExecutor,
            DeviceConfigProxy deviceConfigProxy,
            MediaDataManager mediaDataManager) {
        return new NotificationMediaManager(