summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author shaoweishen <shaoweishen@google.com> 2022-08-24 09:01:51 +0000
committer Shaowei Shen <shaoweishen@google.com> 2022-09-13 15:51:59 +0000
commiteebc3a56bdadabfcb87f2f740e68dc302b04025f (patch)
treebf5525fc5c892b96c3c0b1840e9bcefc3f28d407
parent4c318891765c374c8a098fa69031af36f8d09baa (diff)
[Output Switcher] Improvement for seekbar volume control
1. dispatchDataChanged will not build devices again, we need to do that to update volume quicker. 2. dismiss dialog only when Media change to pause or stop. Bug: 243759774 Test: verified on device Change-Id: I9b93c7e21c899f011418ee51cec3be08c30004fa
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java8
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java14
3 files changed, 28 insertions, 8 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
index a72f311e55ed..58c15eb8073c 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
@@ -422,7 +422,7 @@ public class InfoMediaManager extends MediaManager {
|| sessionInfo.getSelectedRoutes().size() <= 1;
}
- private void refreshDevices() {
+ private synchronized void refreshDevices() {
mMediaDevices.clear();
mCurrentConnectedDevice = null;
if (TextUtils.isEmpty(mPackageName)) {
@@ -452,7 +452,7 @@ public class InfoMediaManager extends MediaManager {
return infos;
}
- private void buildAvailableRoutes() {
+ private synchronized void buildAvailableRoutes() {
for (MediaRoute2Info route : getAvailableRoutes(mPackageName)) {
if (DEBUG) {
Log.d(TAG, "buildAvailableRoutes() route : " + route.getName() + ", volume : "
@@ -462,7 +462,7 @@ public class InfoMediaManager extends MediaManager {
}
}
- private List<MediaRoute2Info> getAvailableRoutes(String packageName) {
+ private synchronized List<MediaRoute2Info> getAvailableRoutes(String packageName) {
final List<MediaRoute2Info> infos = new ArrayList<>();
RoutingSessionInfo routingSessionInfo = getRoutingSessionInfo(packageName);
if (routingSessionInfo != null) {
@@ -596,7 +596,7 @@ public class InfoMediaManager extends MediaManager {
@Override
public void onSessionUpdated(RoutingSessionInfo sessionInfo) {
- dispatchDataChanged();
+ refreshDevices();
}
}
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java
index ee7b7d6b180f..d04d85a70858 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java
@@ -666,12 +666,22 @@ public class InfoMediaManagerTest {
}
@Test
- public void onSessionUpdated_shouldDispatchDataChanged() {
+ public void onSessionUpdated_shouldDispatchDeviceListAdded() {
+ final MediaRoute2Info info = mock(MediaRoute2Info.class);
+ when(info.getId()).thenReturn(TEST_ID);
+ when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+ when(info.isSystemRoute()).thenReturn(true);
+
+ final List<MediaRoute2Info> routes = new ArrayList<>();
+ routes.add(info);
+ mShadowRouter2Manager.setAllRoutes(routes);
+
+ mInfoMediaManager.mPackageName = "";
mInfoMediaManager.registerCallback(mCallback);
mInfoMediaManager.mMediaRouterCallback.onSessionUpdated(mock(RoutingSessionInfo.class));
- verify(mCallback).onDeviceAttributesChanged();
+ verify(mCallback).onDeviceListAdded(any());
}
@Test
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
index 8dd843a6f921..6b8a9997edcd 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
@@ -133,6 +133,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
@VisibleForTesting
LocalMediaManager mLocalMediaManager;
private MediaOutputMetricLogger mMetricLogger;
+ private int mCurrentState;
private int mColorItemContent;
private int mColorSeekbarProgress;
@@ -204,6 +205,9 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
if (TextUtils.equals(controller.getPackageName(), mPackageName)) {
mMediaController = controller;
mMediaController.unregisterCallback(mCb);
+ if (mMediaController.getPlaybackState() != null) {
+ mCurrentState = mMediaController.getPlaybackState().getState();
+ }
mMediaController.registerCallback(mCb);
break;
}
@@ -994,10 +998,16 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
@Override
public void onPlaybackStateChanged(PlaybackState playbackState) {
- final int state = playbackState.getState();
- if (state == PlaybackState.STATE_STOPPED || state == PlaybackState.STATE_PAUSED) {
+ final int newState =
+ playbackState == null ? PlaybackState.STATE_STOPPED : playbackState.getState();
+ if (mCurrentState == newState) {
+ return;
+ }
+
+ if (newState == PlaybackState.STATE_STOPPED || newState == PlaybackState.STATE_PAUSED) {
mCallback.onMediaStoppedOrPaused();
}
+ mCurrentState = newState;
}
};