Merge "Fix SysUI crash when locking while showing the Media Output Group dialog" into sc-v2-dev

This commit is contained in:
Jordan Demeulenaere
2021-10-11 09:39:17 +00:00
committed by Android (Google) Code Review
2 changed files with 8 additions and 24 deletions

View File

@@ -175,7 +175,7 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
} }
if (!mAdapter.isDragging() && !mAdapter.isAnimating()) { if (!mAdapter.isDragging() && !mAdapter.isAnimating()) {
int currentActivePosition = mAdapter.getCurrentActivePosition(); int currentActivePosition = mAdapter.getCurrentActivePosition();
if (currentActivePosition >= 0) { if (currentActivePosition >= 0 && currentActivePosition < mAdapter.getItemCount()) {
mAdapter.notifyItemChanged(currentActivePosition); mAdapter.notifyItemChanged(currentActivePosition);
} else { } else {
mAdapter.notifyDataSetChanged(); mAdapter.notifyDataSetChanged();

View File

@@ -73,6 +73,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
private final String mPackageName; private final String mPackageName;
private final Context mContext; private final Context mContext;
private final MediaSessionManager mMediaSessionManager; private final MediaSessionManager mMediaSessionManager;
private final LocalBluetoothManager mLocalBluetoothManager;
private final ShadeController mShadeController; private final ShadeController mShadeController;
private final ActivityStarter mActivityStarter; private final ActivityStarter mActivityStarter;
private final DialogLaunchAnimator mDialogLaunchAnimator; private final DialogLaunchAnimator mDialogLaunchAnimator;
@@ -85,7 +86,6 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
private MediaController mMediaController; private MediaController mMediaController;
@VisibleForTesting @VisibleForTesting
Callback mCallback; Callback mCallback;
Callback mPreviousCallback;
@VisibleForTesting @VisibleForTesting
LocalMediaManager mLocalMediaManager; LocalMediaManager mLocalMediaManager;
@@ -101,6 +101,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
mContext = context; mContext = context;
mPackageName = packageName; mPackageName = packageName;
mMediaSessionManager = mediaSessionManager; mMediaSessionManager = mediaSessionManager;
mLocalBluetoothManager = lbm;
mShadeController = shadeController; mShadeController = shadeController;
mActivityStarter = starter; mActivityStarter = starter;
mAboveStatusbar = aboveStatusbar; mAboveStatusbar = aboveStatusbar;
@@ -135,19 +136,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
} }
return; return;
} }
if (mPreviousCallback != null) {
Log.w(TAG,
"Callback started when mPreviousCallback is not null, which is unexpected");
mPreviousCallback.dismissDialog();
}
// If we start the output group dialog when the output dialog is shown, we need to keep a
// reference to the output dialog to set it back as the callback once we dismiss the output
// group dialog.
mPreviousCallback = mCallback;
mCallback = cb; mCallback = cb;
mLocalMediaManager.unregisterCallback(this); mLocalMediaManager.unregisterCallback(this);
mLocalMediaManager.stopScan(); mLocalMediaManager.stopScan();
mLocalMediaManager.registerCallback(this); mLocalMediaManager.registerCallback(this);
@@ -163,15 +152,6 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
mLocalMediaManager.stopScan(); mLocalMediaManager.stopScan();
} }
mMediaDevices.clear(); mMediaDevices.clear();
// If there was a previous callback, i.e. we just dismissed the output group dialog and are
// now back on the output dialog, then we reset the callback to its previous value.
mCallback = null;
Callback previous = mPreviousCallback;
mPreviousCallback = null;
if (previous != null) {
start(previous);
}
} }
@Override @Override
@@ -480,7 +460,11 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
void launchMediaOutputGroupDialog(View mediaOutputDialog) { void launchMediaOutputGroupDialog(View mediaOutputDialog) {
// We show the output group dialog from the output dialog. // We show the output group dialog from the output dialog.
MediaOutputGroupDialog dialog = new MediaOutputGroupDialog(mContext, mAboveStatusbar, this); MediaOutputController controller = new MediaOutputController(mContext, mPackageName,
mAboveStatusbar, mMediaSessionManager, mLocalBluetoothManager, mShadeController,
mActivityStarter, mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator);
MediaOutputGroupDialog dialog = new MediaOutputGroupDialog(mContext, mAboveStatusbar,
controller);
mDialogLaunchAnimator.showFromView(dialog, mediaOutputDialog); mDialogLaunchAnimator.showFromView(dialog, mediaOutputDialog);
} }