Merge "Fix SysUI crash when locking while showing the Media Output Group dialog" into sc-v2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
d8b856ceae
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user