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

Commit 5c3320d7 authored by Lucas Dupin's avatar Lucas Dupin Committed by Android (Google) Code Review
Browse files

Merge "Hide media on AOD when not playing" into qt-dev

parents 8be2c7de 6b40d5ed
Loading
Loading
Loading
Loading
+37 −21
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.graphics.drawable.Icon;
import android.icu.text.DateFormat;
import android.icu.text.DisplayContext;
import android.media.MediaMetadata;
import android.media.session.PlaybackState;
import android.net.Uri;
import android.os.Handler;
import android.os.Trace;
@@ -57,6 +58,7 @@ import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.policy.ZenModeControllerImpl;

import java.util.Date;
import java.util.HashSet;
import java.util.Locale;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
@@ -98,6 +100,7 @@ public class KeyguardSliceProvider extends SliceProvider implements
    private final Date mCurrentTime = new Date();
    private final Handler mHandler;
    private final AlarmManager.OnAlarmListener mUpdateNextAlarm = this::updateNextAlarm;
    private final HashSet<Integer> mMediaInvisibleStates;
    private ZenModeController mZenModeController;
    private String mDatePattern;
    private DateFormat mDateFormat;
@@ -113,6 +116,7 @@ public class KeyguardSliceProvider extends SliceProvider implements
    private StatusBarStateController mStatusBarStateController;
    protected MediaMetadata mMediaMetaData;
    protected boolean mDozing;
    private boolean mMediaIsVisible;

    /**
     * Receiver responsible for time ticking and updating the date format.
@@ -169,6 +173,11 @@ public class KeyguardSliceProvider extends SliceProvider implements
        mAlarmUri = Uri.parse(KEYGUARD_NEXT_ALARM_URI);
        mDndUri = Uri.parse(KEYGUARD_DND_URI);
        mMediaUri = Uri.parse(KEYGUARD_MEDIA_URI);

        mMediaInvisibleStates = new HashSet<>();
        mMediaInvisibleStates.add(PlaybackState.STATE_NONE);
        mMediaInvisibleStates.add(PlaybackState.STATE_STOPPED);
        mMediaInvisibleStates.add(PlaybackState.STATE_PAUSED);
    }

    /**
@@ -209,11 +218,14 @@ public class KeyguardSliceProvider extends SliceProvider implements
    }

    protected boolean needsMediaLocked() {
        return mMediaMetaData != null && mDozing;
        return mMediaMetaData != null && mMediaIsVisible && mDozing;
    }

    protected void addMediaLocked(ListBuilder listBuilder) {
        if (mMediaMetaData != null) {
        if (mMediaMetaData == null) {
            return;
        }

        CharSequence title = mMediaMetaData.getText(MediaMetadata.METADATA_KEY_TITLE);
        if (TextUtils.isEmpty(title)) {
            title = getContext().getResources().getString(R.string.music_controls_no_title);
@@ -235,7 +247,6 @@ public class KeyguardSliceProvider extends SliceProvider implements
            listBuilder.addRow(albumBuilder);
        }
    }
    }

    protected void addPrimaryActionLocked(ListBuilder builder) {
        // Add simple action because API requires it; Keyguard handles presenting
@@ -411,9 +422,14 @@ public class KeyguardSliceProvider extends SliceProvider implements
     * @param metadata New metadata.
     */
    @Override
    public void onMetadataChanged(MediaMetadata metadata) {
    public void onMetadataOrStateChanged(MediaMetadata metadata, @PlaybackState.State int state) {
        synchronized (this) {
            boolean nextVisible = !mMediaInvisibleStates.contains(state);
            if (nextVisible == mMediaIsVisible && metadata == mMediaMetaData) {
                return;
            }
            mMediaMetaData = metadata;
            mMediaIsVisible = nextVisible;
        }
        notifyChange();
    }
+12 −4
Original line number Diff line number Diff line
@@ -150,8 +150,8 @@ public class NotificationMediaManager implements Dumpable {
            if (state != null) {
                if (!isPlaybackActive(state.getState())) {
                    clearCurrentMediaNotification();
                    dispatchUpdateMediaMetaData(true /* changed */, true /* allowAnimation */);
                }
                dispatchUpdateMediaMetaData(true /* changed */, true /* allowAnimation */);
            }
        }

@@ -242,7 +242,8 @@ public class NotificationMediaManager implements Dumpable {

    public void addCallback(MediaListener callback) {
        mMediaListeners.add(callback);
        callback.onMetadataChanged(mMediaMetadata);
        callback.onMetadataOrStateChanged(mMediaMetadata,
                getMediaControllerPlaybackState(mMediaController));
    }

    public void removeCallback(MediaListener callback) {
@@ -357,9 +358,10 @@ public class NotificationMediaManager implements Dumpable {
        if (mPresenter != null) {
            mPresenter.updateMediaMetaData(changed, allowEnterAnimation);
        }
        @PlaybackState.State int state = getMediaControllerPlaybackState(mMediaController);
        ArrayList<MediaListener> callbacks = new ArrayList<>(mMediaListeners);
        for (int i = 0; i < callbacks.size(); i++) {
            callbacks.get(i).onMetadataChanged(mMediaMetadata);
            callbacks.get(i).onMetadataOrStateChanged(mMediaMetadata, state);
        }
    }

@@ -698,6 +700,12 @@ public class NotificationMediaManager implements Dumpable {
    }

    public interface MediaListener {
        void onMetadataChanged(MediaMetadata metadata);
        /**
         * Called whenever there's new metadata or playback state.
         * @param metadata Current metadata.
         * @param state Current playback state
         * @see PlaybackState.State
         */
        void onMetadataOrStateChanged(MediaMetadata metadata, @PlaybackState.State int state);
    }
}
+4 −3
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import static org.mockito.Mockito.when;
import android.app.AlarmManager;
import android.content.ContentResolver;
import android.media.MediaMetadata;
import android.media.session.PlaybackState;
import android.net.Uri;
import android.provider.Settings;
import android.testing.AndroidTestingRunner;
@@ -105,7 +106,7 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
        MediaMetadata metadata = mock(MediaMetadata.class);
        when(metadata.getText(any())).thenReturn("metadata");
        mProvider.onDozingChanged(true);
        mProvider.onMetadataChanged(metadata);
        mProvider.onMetadataOrStateChanged(metadata, PlaybackState.STATE_PLAYING);
        mProvider.onBindSlice(mProvider.getUri());
        verify(metadata).getText(eq(MediaMetadata.METADATA_KEY_TITLE));
        verify(metadata).getText(eq(MediaMetadata.METADATA_KEY_ARTIST));
@@ -170,7 +171,7 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
    public void onMetadataChanged_updatesSlice() {
        mProvider.onDozingChanged(true);
        reset(mContentResolver);
        mProvider.onMetadataChanged(mock(MediaMetadata.class));
        mProvider.onMetadataOrStateChanged(mock(MediaMetadata.class), PlaybackState.STATE_PLAYING);
        verify(mContentResolver).notifyChange(eq(mProvider.getUri()), eq(null));

        // Hides after waking up
@@ -181,7 +182,7 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {

    @Test
    public void onDozingChanged_updatesSliceIfMedia() {
        mProvider.onMetadataChanged(mock(MediaMetadata.class));
        mProvider.onMetadataOrStateChanged(mock(MediaMetadata.class), PlaybackState.STATE_PLAYING);
        reset(mContentResolver);
        // Show media when dozing
        mProvider.onDozingChanged(true);