Merge "Add flag for remote streams" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
f9343c8baf
@@ -1894,6 +1894,9 @@
|
|||||||
STREAM_MUSIC as if it's on TV platform. -->
|
STREAM_MUSIC as if it's on TV platform. -->
|
||||||
<bool name="config_single_volume">false</bool>
|
<bool name="config_single_volume">false</bool>
|
||||||
|
|
||||||
|
<!-- Flag indicating whether the volume panel should show remote sessions. -->
|
||||||
|
<bool name="config_volumeShowRemoteSessions">true</bool>
|
||||||
|
|
||||||
<!-- Flag indicating that an outbound call must have a call capable phone account
|
<!-- Flag indicating that an outbound call must have a call capable phone account
|
||||||
that has declared it can process the call's handle. -->
|
that has declared it can process the call's handle. -->
|
||||||
<bool name="config_requireCallCapableAccountForHandle">false</bool>
|
<bool name="config_requireCallCapableAccountForHandle">false</bool>
|
||||||
|
|||||||
@@ -4408,4 +4408,6 @@
|
|||||||
<java-symbol type="integer" name="config_hotwordDetectedResultMaxBundleSize" />
|
<java-symbol type="integer" name="config_hotwordDetectedResultMaxBundleSize" />
|
||||||
|
|
||||||
<java-symbol type="dimen" name="config_wallpaperDimAmount" />
|
<java-symbol type="dimen" name="config_wallpaperDimAmount" />
|
||||||
|
|
||||||
|
<java-symbol type="bool" name="config_volumeShowRemoteSessions" />
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
|
|||||||
private final MediaSessions mMediaSessions;
|
private final MediaSessions mMediaSessions;
|
||||||
protected C mCallbacks = new C();
|
protected C mCallbacks = new C();
|
||||||
private final State mState = new State();
|
private final State mState = new State();
|
||||||
protected final MediaSessionsCallbacks mMediaSessionsCallbacksW = new MediaSessionsCallbacks();
|
protected final MediaSessionsCallbacks mMediaSessionsCallbacksW;
|
||||||
private final Optional<Vibrator> mVibrator;
|
private final Optional<Vibrator> mVibrator;
|
||||||
private final boolean mHasVibrator;
|
private final boolean mHasVibrator;
|
||||||
private boolean mShowA11yStream;
|
private boolean mShowA11yStream;
|
||||||
@@ -179,6 +179,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
|
|||||||
mWorkerLooper = theadFactory.buildLooperOnNewThread(
|
mWorkerLooper = theadFactory.buildLooperOnNewThread(
|
||||||
VolumeDialogControllerImpl.class.getSimpleName());
|
VolumeDialogControllerImpl.class.getSimpleName());
|
||||||
mWorker = new W(mWorkerLooper);
|
mWorker = new W(mWorkerLooper);
|
||||||
|
mMediaSessionsCallbacksW = new MediaSessionsCallbacks(mContext);
|
||||||
mMediaSessions = createMediaSessions(mContext, mWorkerLooper, mMediaSessionsCallbacksW);
|
mMediaSessions = createMediaSessions(mContext, mWorkerLooper, mMediaSessionsCallbacksW);
|
||||||
mAudio = audioManager;
|
mAudio = audioManager;
|
||||||
mNoMan = notificationManager;
|
mNoMan = notificationManager;
|
||||||
@@ -1148,83 +1149,98 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
|
|||||||
private final HashMap<Token, Integer> mRemoteStreams = new HashMap<>();
|
private final HashMap<Token, Integer> mRemoteStreams = new HashMap<>();
|
||||||
|
|
||||||
private int mNextStream = DYNAMIC_STREAM_START_INDEX;
|
private int mNextStream = DYNAMIC_STREAM_START_INDEX;
|
||||||
|
private final boolean mShowRemoteSessions;
|
||||||
|
|
||||||
|
public MediaSessionsCallbacks(Context context) {
|
||||||
|
mShowRemoteSessions = context.getResources().getBoolean(
|
||||||
|
com.android.internal.R.bool.config_volumeShowRemoteSessions);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRemoteUpdate(Token token, String name, PlaybackInfo pi) {
|
public void onRemoteUpdate(Token token, String name, PlaybackInfo pi) {
|
||||||
addStream(token, "onRemoteUpdate");
|
if (mShowRemoteSessions) {
|
||||||
|
addStream(token, "onRemoteUpdate");
|
||||||
|
|
||||||
int stream = 0;
|
int stream = 0;
|
||||||
synchronized (mRemoteStreams) {
|
synchronized (mRemoteStreams) {
|
||||||
stream = mRemoteStreams.get(token);
|
stream = mRemoteStreams.get(token);
|
||||||
}
|
}
|
||||||
Slog.d(TAG, "onRemoteUpdate: stream: " + stream + " volume: " + pi.getCurrentVolume());
|
Slog.d(TAG,
|
||||||
boolean changed = mState.states.indexOfKey(stream) < 0;
|
"onRemoteUpdate: stream: " + stream + " volume: " + pi.getCurrentVolume());
|
||||||
final StreamState ss = streamStateW(stream);
|
boolean changed = mState.states.indexOfKey(stream) < 0;
|
||||||
ss.dynamic = true;
|
final StreamState ss = streamStateW(stream);
|
||||||
ss.levelMin = 0;
|
ss.dynamic = true;
|
||||||
ss.levelMax = pi.getMaxVolume();
|
ss.levelMin = 0;
|
||||||
if (ss.level != pi.getCurrentVolume()) {
|
ss.levelMax = pi.getMaxVolume();
|
||||||
ss.level = pi.getCurrentVolume();
|
if (ss.level != pi.getCurrentVolume()) {
|
||||||
changed = true;
|
ss.level = pi.getCurrentVolume();
|
||||||
}
|
changed = true;
|
||||||
if (!Objects.equals(ss.remoteLabel, name)) {
|
}
|
||||||
ss.name = -1;
|
if (!Objects.equals(ss.remoteLabel, name)) {
|
||||||
ss.remoteLabel = name;
|
ss.name = -1;
|
||||||
changed = true;
|
ss.remoteLabel = name;
|
||||||
}
|
changed = true;
|
||||||
if (changed) {
|
}
|
||||||
Log.d(TAG, "onRemoteUpdate: " + name + ": " + ss.level + " of " + ss.levelMax);
|
if (changed) {
|
||||||
mCallbacks.onStateChanged(mState);
|
Log.d(TAG, "onRemoteUpdate: " + name + ": " + ss.level + " of " + ss.levelMax);
|
||||||
|
mCallbacks.onStateChanged(mState);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRemoteVolumeChanged(Token token, int flags) {
|
public void onRemoteVolumeChanged(Token token, int flags) {
|
||||||
addStream(token, "onRemoteVolumeChanged");
|
if (mShowRemoteSessions) {
|
||||||
int stream = 0;
|
addStream(token, "onRemoteVolumeChanged");
|
||||||
synchronized (mRemoteStreams) {
|
int stream = 0;
|
||||||
stream = mRemoteStreams.get(token);
|
synchronized (mRemoteStreams) {
|
||||||
}
|
stream = mRemoteStreams.get(token);
|
||||||
final boolean showUI = shouldShowUI(flags);
|
}
|
||||||
Slog.d(TAG, "onRemoteVolumeChanged: stream: " + stream + " showui? " + showUI);
|
final boolean showUI = shouldShowUI(flags);
|
||||||
boolean changed = updateActiveStreamW(stream);
|
Slog.d(TAG, "onRemoteVolumeChanged: stream: " + stream + " showui? " + showUI);
|
||||||
if (showUI) {
|
boolean changed = updateActiveStreamW(stream);
|
||||||
changed |= checkRoutedToBluetoothW(AudioManager.STREAM_MUSIC);
|
if (showUI) {
|
||||||
}
|
changed |= checkRoutedToBluetoothW(AudioManager.STREAM_MUSIC);
|
||||||
if (changed) {
|
}
|
||||||
Slog.d(TAG, "onRemoteChanged: updatingState");
|
if (changed) {
|
||||||
mCallbacks.onStateChanged(mState);
|
Slog.d(TAG, "onRemoteChanged: updatingState");
|
||||||
}
|
mCallbacks.onStateChanged(mState);
|
||||||
if (showUI) {
|
}
|
||||||
mCallbacks.onShowRequested(Events.SHOW_REASON_REMOTE_VOLUME_CHANGED);
|
if (showUI) {
|
||||||
|
mCallbacks.onShowRequested(Events.SHOW_REASON_REMOTE_VOLUME_CHANGED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRemoteRemoved(Token token) {
|
public void onRemoteRemoved(Token token) {
|
||||||
int stream = 0;
|
if (mShowRemoteSessions) {
|
||||||
synchronized (mRemoteStreams) {
|
int stream = 0;
|
||||||
if (!mRemoteStreams.containsKey(token)) {
|
synchronized (mRemoteStreams) {
|
||||||
Log.d(TAG, "onRemoteRemoved: stream doesn't exist, "
|
if (!mRemoteStreams.containsKey(token)) {
|
||||||
+ "aborting remote removed for token:" + token.toString());
|
Log.d(TAG, "onRemoteRemoved: stream doesn't exist, "
|
||||||
return;
|
+ "aborting remote removed for token:" + token.toString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
stream = mRemoteStreams.get(token);
|
||||||
}
|
}
|
||||||
stream = mRemoteStreams.get(token);
|
mState.states.remove(stream);
|
||||||
|
if (mState.activeStream == stream) {
|
||||||
|
updateActiveStreamW(-1);
|
||||||
|
}
|
||||||
|
mCallbacks.onStateChanged(mState);
|
||||||
}
|
}
|
||||||
mState.states.remove(stream);
|
|
||||||
if (mState.activeStream == stream) {
|
|
||||||
updateActiveStreamW(-1);
|
|
||||||
}
|
|
||||||
mCallbacks.onStateChanged(mState);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStreamVolume(int stream, int level) {
|
public void setStreamVolume(int stream, int level) {
|
||||||
final Token t = findToken(stream);
|
if (mShowRemoteSessions) {
|
||||||
if (t == null) {
|
final Token t = findToken(stream);
|
||||||
Log.w(TAG, "setStreamVolume: No token found for stream: " + stream);
|
if (t == null) {
|
||||||
return;
|
Log.w(TAG, "setStreamVolume: No token found for stream: " + stream);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mMediaSessions.setVolume(t, level);
|
||||||
}
|
}
|
||||||
mMediaSessions.setVolume(t, level);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Token findToken(int stream) {
|
private Token findToken(int stream) {
|
||||||
|
|||||||
Reference in New Issue
Block a user