[ANR] Settings froze

-To handle getActiveLocalMediaController() in a background thread
-To update test cases for waiting LocalMediaManager initial in
 background thread

Bug: 157522889
Test: make -j42 RunSettingsRoboTests
Change-Id: I27cd282a89ac9cfb6a098843f7282d5b94d98402
This commit is contained in:
Tim Peng
2020-05-28 16:16:05 +08:00
committed by Hugh Chen
parent 946e3adeda
commit 0989586ce2
2 changed files with 51 additions and 15 deletions

View File

@@ -38,6 +38,7 @@ import com.android.settingslib.bluetooth.BluetoothCallback;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.media.LocalMediaManager;
import com.android.settingslib.media.MediaDevice;
import com.android.settingslib.utils.ThreadUtils;
import com.google.common.annotations.VisibleForTesting;
@@ -81,25 +82,29 @@ public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements
mContext.registerReceiver(mReceiver, intentFilter);
mLocalBluetoothManager.getEventManager().registerCallback(this);
final MediaController controller = getActiveLocalMediaController();
if (controller == null) {
mPackageName = null;
} else {
mPackageName = controller.getPackageName();
}
if (mLocalMediaManager == null || !TextUtils.equals(mPackageName,
mLocalMediaManager.getPackageName())) {
mLocalMediaManager = new LocalMediaManager(mContext, mPackageName,
null /* notification */);
}
mLocalMediaManager.registerCallback(this);
mLocalMediaManager.startScan();
ThreadUtils.postOnBackgroundThread(() -> {
final MediaController controller = getActiveLocalMediaController();
if (controller == null) {
mPackageName = null;
} else {
mPackageName = controller.getPackageName();
}
if (mLocalMediaManager == null || !TextUtils.equals(mPackageName,
mLocalMediaManager.getPackageName())) {
mLocalMediaManager = new LocalMediaManager(mContext, mPackageName,
null /* notification */);
}
mLocalMediaManager.registerCallback(this);
mLocalMediaManager.startScan();
});
}
@Override
protected void onSliceUnpinned() {
mLocalMediaManager.unregisterCallback(this);
mLocalMediaManager.stopScan();
if (mLocalMediaManager != null) {
mLocalMediaManager.unregisterCallback(this);
mLocalMediaManager.stopScan();
}
if (mLocalBluetoothManager == null) {
Log.e(TAG, "Bluetooth is not supported on this device");