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

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

Merge "Dismiss media if paused for more than 10min" into rvc-dev am: d1b50a9c

Change-Id: I34f8e61147cc8798bb99ec4c4b3fc69707425018
parents 927f8305 d1b50a9c
Loading
Loading
Loading
Loading
+1 −2
Original line number Original line Diff line number Diff line
@@ -68,4 +68,3 @@ class KeyguardMediaController @Inject constructor(
        view?.visibility = if (shouldBeVisible) View.VISIBLE else View.GONE
        view?.visibility = if (shouldBeVisible) View.VISIBLE else View.GONE
    }
    }
}
}
+3 −3
Original line number Original line Diff line number Diff line
@@ -65,7 +65,7 @@ class MediaDataManager @Inject constructor(
    private val context: Context,
    private val context: Context,
    private val mediaControllerFactory: MediaControllerFactory,
    private val mediaControllerFactory: MediaControllerFactory,
    @Background private val backgroundExecutor: Executor,
    @Background private val backgroundExecutor: Executor,
    @Main private val foregroundExcecutor: Executor
    @Main private val foregroundExecutor: Executor
) {
) {


    private val listeners: MutableSet<Listener> = mutableSetOf()
    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,
            onMediaDataLoaded(key, MediaData(true, bgColor, app, smallIconDrawable, artist, song,
                    artWorkIcon, actionIcons, actionsToShowCollapsed, sbn.packageName, token,
                    artWorkIcon, actionIcons, actionsToShowCollapsed, sbn.packageName, token,
                    notif.contentIntent))
                    notif.contentIntent))
@@ -288,7 +288,7 @@ class MediaDataManager @Inject constructor(
    /**
    /**
     * Are there any media notifications active?
     * Are there any media notifications active?
     */
     */
    fun hasActiveMedia() = mediaEntries.size > 0
    fun hasActiveMedia() = mediaEntries.isNotEmpty()


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


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


import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
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.DEBUG_MEDIA_FAKE_ARTWORK;
import static com.android.systemui.statusbar.phone.StatusBar.ENABLE_LOCKSCREEN_WALLPAPER;
import static com.android.systemui.statusbar.phone.StatusBar.ENABLE_LOCKSCREEN_WALLPAPER;
import static com.android.systemui.statusbar.phone.StatusBar.SHOW_LOCKSCREEN_MEDIA_ARTWORK;
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.view.View;
import android.widget.ImageView;
import android.widget.ImageView;


import androidx.annotation.NonNull;

import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.internal.statusbar.NotificationVisibility;
import com.android.internal.statusbar.NotificationVisibility;
import com.android.systemui.Dependency;
import com.android.systemui.Dependency;
@@ -53,7 +52,6 @@ import com.android.systemui.Dumpable;
import com.android.systemui.Interpolators;
import com.android.systemui.Interpolators;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.media.MediaData;
import com.android.systemui.media.MediaDataManager;
import com.android.systemui.media.MediaDataManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.dagger.StatusBarModule;
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.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.Utils;
import com.android.systemui.util.Utils;
import com.android.systemui.util.concurrency.DelayableExecutor;


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


import dagger.Lazy;
import dagger.Lazy;


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


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


    private final NotificationEntryManager mEntryManager;
    private final NotificationEntryManager mEntryManager;
    private final MediaDataManager mMediaDataManager;


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


    private final Executor mMainExecutor;
    private final DelayableExecutor mMainExecutor;


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


    private BackDropView mBackdrop;
    private BackDropView mBackdrop;
    private ImageView mBackdropFront;
    private ImageView mBackdropFront;
@@ -159,11 +161,36 @@ public class NotificationMediaManager implements Dumpable {
            if (DEBUG_MEDIA) {
            if (DEBUG_MEDIA) {
                Log.v(TAG, "DEBUG_MEDIA: onPlaybackStateChanged: " + state);
                Log.v(TAG, "DEBUG_MEDIA: onPlaybackStateChanged: " + state);
            }
            }
            if (mMediaTimeoutCancellation != null) {
                mMediaTimeoutCancellation.run();
                mMediaTimeoutCancellation = null;
            }
            if (state != null) {
            if (state != null) {
                if (!isPlaybackActive(state.getState())) {
                if (!isPlaybackActive(state.getState())) {
                    clearCurrentMediaNotification();
                    clearCurrentMediaNotification();
                }
                }
                findAndUpdateMediaNotifications();
                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,
            NotificationEntryManager notificationEntryManager,
            MediaArtworkProcessor mediaArtworkProcessor,
            MediaArtworkProcessor mediaArtworkProcessor,
            KeyguardBypassController keyguardBypassController,
            KeyguardBypassController keyguardBypassController,
            @Main Executor mainExecutor,
            @Main DelayableExecutor mainExecutor,
            DeviceConfigProxy deviceConfig,
            DeviceConfigProxy deviceConfig,
            MediaDataManager mediaDataManager) {
            MediaDataManager mediaDataManager) {
        mContext = context;
        mContext = context;
@@ -205,6 +232,7 @@ public class NotificationMediaManager implements Dumpable {
        mNotificationShadeWindowController = notificationShadeWindowController;
        mNotificationShadeWindowController = notificationShadeWindowController;
        mEntryManager = notificationEntryManager;
        mEntryManager = notificationEntryManager;
        mMainExecutor = mainExecutor;
        mMainExecutor = mainExecutor;
        mMediaDataManager = mediaDataManager;


        notificationEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
        notificationEntryManager.addNotificationEntryListener(new NotificationEntryListener() {


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


import java.util.concurrent.Executor;
import java.util.concurrent.Executor;


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