Loading packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java +1 −5 Original line number Diff line number Diff line Loading @@ -126,11 +126,7 @@ public class MediaControlPanel { @Override public void onPlaybackStateChanged(PlaybackState state) { final int s = state != null ? state.getState() : PlaybackState.STATE_NONE; // When the playback state is NONE or CONNECTING, transition the player to the // resumption state. State CONNECTING needs to be considered for Cast sessions. Ending // a cast session in YT results in the CONNECTING state, which makes sense if you // thinking of the session as waiting to connect to another cast device. if (s == PlaybackState.STATE_NONE || s == PlaybackState.STATE_CONNECTING) { if (s == PlaybackState.STATE_NONE) { Log.d(TAG, "playback state change will trigger resumption, state=" + state); clearControls(); makeInactive(); Loading packages/SystemUI/src/com/android/systemui/qs/QSMediaBrowser.java +1 −1 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ public class QSMediaBrowser { public void onChildrenLoaded(String parentId, List<MediaBrowser.MediaItem> children) { if (children.size() == 0) { Log.e(TAG, "No children found"); Log.e(TAG, "No children found for " + mComponentName); return; } // We ask apps to return a playable item as the first child when sending Loading packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +40 −1 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ import android.widget.LinearLayout; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.statusbar.NotificationVisibility; import com.android.settingslib.Utils; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.media.InfoMediaManager; Loading @@ -75,6 +76,9 @@ import com.android.systemui.qs.external.CustomTile; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.settings.BrightnessController; import com.android.systemui.settings.ToggleSliderView; import com.android.systemui.statusbar.notification.NotificationEntryListener; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.policy.BrightnessMirrorController; import com.android.systemui.statusbar.policy.BrightnessMirrorController.BrightnessMirrorListener; import com.android.systemui.tuner.TunerService; Loading Loading @@ -116,6 +120,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne private final DelayableExecutor mBackgroundExecutor; private boolean mUpdateCarousel = false; private ActivityStarter mActivityStarter; private NotificationEntryManager mNotificationEntryManager; protected boolean mExpanded; protected boolean mListening; Loading Loading @@ -151,6 +156,15 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne } }; private final NotificationEntryListener mNotificationEntryListener = new NotificationEntryListener() { @Override public void onEntryRemoved(NotificationEntry entry, NotificationVisibility visibility, boolean removedByUser, int reason) { checkToRemoveMediaNotification(entry); } }; @Inject public QSPanel( @Named(VIEW_CONTEXT) Context context, Loading @@ -161,7 +175,8 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne @Main Executor foregroundExecutor, @Background DelayableExecutor backgroundExecutor, @Nullable LocalBluetoothManager localBluetoothManager, ActivityStarter activityStarter ActivityStarter activityStarter, NotificationEntryManager entryManager ) { super(context, attrs); mContext = context; Loading @@ -172,6 +187,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne mLocalBluetoothManager = localBluetoothManager; mBroadcastDispatcher = broadcastDispatcher; mActivityStarter = activityStarter; mNotificationEntryManager = entryManager; setOrientation(VERTICAL); Loading Loading @@ -407,6 +423,27 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne mHasLoadedMediaControls = true; } private void checkToRemoveMediaNotification(NotificationEntry entry) { if (!useQsMediaPlayer(mContext)) { return; } if (!entry.isMediaNotification()) { return; } // If this entry corresponds to an existing set of controls, clear the controls // This will handle apps that use an action to clear their notification for (QSMediaPlayer p : mMediaPlayers) { if (p.getKey() != null && p.getKey().equals(entry.getKey())) { Log.d(TAG, "Clearing controls since notification removed " + entry.getKey()); p.clearControls(); return; } } Log.d(TAG, "Media notification removed but no player found " + entry.getKey()); } protected void addDivider() { mDivider = LayoutInflater.from(mContext).inflate(R.layout.qs_divider, this, false); mDivider.setBackgroundColor(Utils.applyAlpha(mDivider.getAlpha(), Loading Loading @@ -473,6 +510,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne loadMediaResumptionControls(); } } mNotificationEntryManager.addNotificationEntryListener(mNotificationEntryListener); } @Override Loading @@ -489,6 +527,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne } mDumpManager.unregisterDumpable(getDumpableTag()); mBroadcastDispatcher.unregisterReceiver(mUserChangeReceiver); mNotificationEntryManager.removeNotificationEntryListener(mNotificationEntryListener); super.onDetachedFromWindow(); } Loading packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java +5 −2 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import com.android.systemui.plugins.qs.QSTile.SignalState; import com.android.systemui.plugins.qs.QSTile.State; import com.android.systemui.qs.customize.QSCustomizer; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; import com.android.systemui.util.Utils; Loading Loading @@ -86,10 +87,12 @@ public class QuickQSPanel extends QSPanel { @Main Executor foregroundExecutor, @Background DelayableExecutor backgroundExecutor, @Nullable LocalBluetoothManager localBluetoothManager, ActivityStarter activityStarter ActivityStarter activityStarter, NotificationEntryManager entryManager ) { super(context, attrs, dumpManager, broadcastDispatcher, qsLogger, foregroundExecutor, backgroundExecutor, localBluetoothManager, activityStarter); foregroundExecutor, backgroundExecutor, localBluetoothManager, activityStarter, entryManager); if (mFooter != null) { removeView(mFooter.getView()); } Loading packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import com.android.systemui.plugins.qs.QSTileView; import com.android.systemui.qs.customize.QSCustomizer; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.util.concurrency.DelayableExecutor; import org.junit.Before; Loading Loading @@ -91,6 +92,8 @@ public class QSPanelTest extends SysuiTestCase { private LocalBluetoothManager mLocalBluetoothManager; @Mock private ActivityStarter mActivityStarter; @Mock private NotificationEntryManager mEntryManager; @Before public void setup() throws Exception { Loading @@ -101,7 +104,7 @@ public class QSPanelTest extends SysuiTestCase { mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class); mQsPanel = new QSPanel(mContext, null, mDumpManager, mBroadcastDispatcher, mQSLogger, mForegroundExecutor, mBackgroundExecutor, mLocalBluetoothManager, mActivityStarter); mLocalBluetoothManager, mActivityStarter, mEntryManager); // Provides a parent with non-zero size for QSPanel mParentView = new FrameLayout(mContext); mParentView.addView(mQsPanel); Loading Loading
packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java +1 −5 Original line number Diff line number Diff line Loading @@ -126,11 +126,7 @@ public class MediaControlPanel { @Override public void onPlaybackStateChanged(PlaybackState state) { final int s = state != null ? state.getState() : PlaybackState.STATE_NONE; // When the playback state is NONE or CONNECTING, transition the player to the // resumption state. State CONNECTING needs to be considered for Cast sessions. Ending // a cast session in YT results in the CONNECTING state, which makes sense if you // thinking of the session as waiting to connect to another cast device. if (s == PlaybackState.STATE_NONE || s == PlaybackState.STATE_CONNECTING) { if (s == PlaybackState.STATE_NONE) { Log.d(TAG, "playback state change will trigger resumption, state=" + state); clearControls(); makeInactive(); Loading
packages/SystemUI/src/com/android/systemui/qs/QSMediaBrowser.java +1 −1 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ public class QSMediaBrowser { public void onChildrenLoaded(String parentId, List<MediaBrowser.MediaItem> children) { if (children.size() == 0) { Log.e(TAG, "No children found"); Log.e(TAG, "No children found for " + mComponentName); return; } // We ask apps to return a playable item as the first child when sending Loading
packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +40 −1 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ import android.widget.LinearLayout; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.statusbar.NotificationVisibility; import com.android.settingslib.Utils; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.media.InfoMediaManager; Loading @@ -75,6 +76,9 @@ import com.android.systemui.qs.external.CustomTile; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.settings.BrightnessController; import com.android.systemui.settings.ToggleSliderView; import com.android.systemui.statusbar.notification.NotificationEntryListener; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.policy.BrightnessMirrorController; import com.android.systemui.statusbar.policy.BrightnessMirrorController.BrightnessMirrorListener; import com.android.systemui.tuner.TunerService; Loading Loading @@ -116,6 +120,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne private final DelayableExecutor mBackgroundExecutor; private boolean mUpdateCarousel = false; private ActivityStarter mActivityStarter; private NotificationEntryManager mNotificationEntryManager; protected boolean mExpanded; protected boolean mListening; Loading Loading @@ -151,6 +156,15 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne } }; private final NotificationEntryListener mNotificationEntryListener = new NotificationEntryListener() { @Override public void onEntryRemoved(NotificationEntry entry, NotificationVisibility visibility, boolean removedByUser, int reason) { checkToRemoveMediaNotification(entry); } }; @Inject public QSPanel( @Named(VIEW_CONTEXT) Context context, Loading @@ -161,7 +175,8 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne @Main Executor foregroundExecutor, @Background DelayableExecutor backgroundExecutor, @Nullable LocalBluetoothManager localBluetoothManager, ActivityStarter activityStarter ActivityStarter activityStarter, NotificationEntryManager entryManager ) { super(context, attrs); mContext = context; Loading @@ -172,6 +187,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne mLocalBluetoothManager = localBluetoothManager; mBroadcastDispatcher = broadcastDispatcher; mActivityStarter = activityStarter; mNotificationEntryManager = entryManager; setOrientation(VERTICAL); Loading Loading @@ -407,6 +423,27 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne mHasLoadedMediaControls = true; } private void checkToRemoveMediaNotification(NotificationEntry entry) { if (!useQsMediaPlayer(mContext)) { return; } if (!entry.isMediaNotification()) { return; } // If this entry corresponds to an existing set of controls, clear the controls // This will handle apps that use an action to clear their notification for (QSMediaPlayer p : mMediaPlayers) { if (p.getKey() != null && p.getKey().equals(entry.getKey())) { Log.d(TAG, "Clearing controls since notification removed " + entry.getKey()); p.clearControls(); return; } } Log.d(TAG, "Media notification removed but no player found " + entry.getKey()); } protected void addDivider() { mDivider = LayoutInflater.from(mContext).inflate(R.layout.qs_divider, this, false); mDivider.setBackgroundColor(Utils.applyAlpha(mDivider.getAlpha(), Loading Loading @@ -473,6 +510,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne loadMediaResumptionControls(); } } mNotificationEntryManager.addNotificationEntryListener(mNotificationEntryListener); } @Override Loading @@ -489,6 +527,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne } mDumpManager.unregisterDumpable(getDumpableTag()); mBroadcastDispatcher.unregisterReceiver(mUserChangeReceiver); mNotificationEntryManager.removeNotificationEntryListener(mNotificationEntryListener); super.onDetachedFromWindow(); } Loading
packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java +5 −2 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import com.android.systemui.plugins.qs.QSTile.SignalState; import com.android.systemui.plugins.qs.QSTile.State; import com.android.systemui.qs.customize.QSCustomizer; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; import com.android.systemui.util.Utils; Loading Loading @@ -86,10 +87,12 @@ public class QuickQSPanel extends QSPanel { @Main Executor foregroundExecutor, @Background DelayableExecutor backgroundExecutor, @Nullable LocalBluetoothManager localBluetoothManager, ActivityStarter activityStarter ActivityStarter activityStarter, NotificationEntryManager entryManager ) { super(context, attrs, dumpManager, broadcastDispatcher, qsLogger, foregroundExecutor, backgroundExecutor, localBluetoothManager, activityStarter); foregroundExecutor, backgroundExecutor, localBluetoothManager, activityStarter, entryManager); if (mFooter != null) { removeView(mFooter.getView()); } Loading
packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import com.android.systemui.plugins.qs.QSTileView; import com.android.systemui.qs.customize.QSCustomizer; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.util.concurrency.DelayableExecutor; import org.junit.Before; Loading Loading @@ -91,6 +92,8 @@ public class QSPanelTest extends SysuiTestCase { private LocalBluetoothManager mLocalBluetoothManager; @Mock private ActivityStarter mActivityStarter; @Mock private NotificationEntryManager mEntryManager; @Before public void setup() throws Exception { Loading @@ -101,7 +104,7 @@ public class QSPanelTest extends SysuiTestCase { mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class); mQsPanel = new QSPanel(mContext, null, mDumpManager, mBroadcastDispatcher, mQSLogger, mForegroundExecutor, mBackgroundExecutor, mLocalBluetoothManager, mActivityStarter); mLocalBluetoothManager, mActivityStarter, mEntryManager); // Provides a parent with non-zero size for QSPanel mParentView = new FrameLayout(mContext); mParentView.addView(mQsPanel); Loading