Move getLocalBtManager into FutureTask
Utils.getLocalBtManager in constructor violate StrictMode ThreadPolicy, move it into FutureTask. Bug: 79985175 Test: make RunSettingsRoboTests ROBOTEST_FILTER="MediaOutputPreferenceControllerTest" -j28 Test: make RunSettingsRoboTests ROBOTEST_FILTER="HandsFreeProfileOutputPreferenceControllerTest" -j28 Test: make RunSettingsRoboTests ROBOTEST_FILTER="AudioOutputSwitchPreferenceControllerTest" -j28 Change-Id: I0a14be18e4766245e7d165239d47ab54fa5e4acb
This commit is contained in:
@@ -41,6 +41,7 @@ import android.support.v7.preference.Preference;
|
|||||||
import android.support.v7.preference.PreferenceScreen;
|
import android.support.v7.preference.PreferenceScreen;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.FeatureFlagUtils;
|
import android.util.FeatureFlagUtils;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.bluetooth.Utils;
|
import com.android.settings.bluetooth.Utils;
|
||||||
@@ -59,6 +60,8 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.concurrent.FutureTask;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abstract class for audio switcher controller to notify subclass
|
* Abstract class for audio switcher controller to notify subclass
|
||||||
@@ -70,21 +73,22 @@ public abstract class AudioSwitchPreferenceController extends BasePreferenceCont
|
|||||||
implements Preference.OnPreferenceChangeListener, BluetoothCallback,
|
implements Preference.OnPreferenceChangeListener, BluetoothCallback,
|
||||||
LifecycleObserver, OnStart, OnStop {
|
LifecycleObserver, OnStart, OnStop {
|
||||||
|
|
||||||
|
private static final String TAG = "AudioSwitchPreferenceController";
|
||||||
private static final int INVALID_INDEX = -1;
|
private static final int INVALID_INDEX = -1;
|
||||||
|
|
||||||
protected final List<BluetoothDevice> mConnectedDevices;
|
protected final List<BluetoothDevice> mConnectedDevices;
|
||||||
protected final AudioManager mAudioManager;
|
protected final AudioManager mAudioManager;
|
||||||
protected final MediaRouter mMediaRouter;
|
protected final MediaRouter mMediaRouter;
|
||||||
protected final LocalBluetoothProfileManager mProfileManager;
|
|
||||||
protected int mSelectedIndex;
|
protected int mSelectedIndex;
|
||||||
protected Preference mPreference;
|
protected Preference mPreference;
|
||||||
|
protected LocalBluetoothProfileManager mProfileManager;
|
||||||
protected AudioSwitchCallback mAudioSwitchPreferenceCallback;
|
protected AudioSwitchCallback mAudioSwitchPreferenceCallback;
|
||||||
|
|
||||||
private final AudioManagerAudioDeviceCallback mAudioManagerAudioDeviceCallback;
|
private final AudioManagerAudioDeviceCallback mAudioManagerAudioDeviceCallback;
|
||||||
private final LocalBluetoothManager mLocalBluetoothManager;
|
|
||||||
private final MediaRouterCallback mMediaRouterCallback;
|
private final MediaRouterCallback mMediaRouterCallback;
|
||||||
private final WiredHeadsetBroadcastReceiver mReceiver;
|
private final WiredHeadsetBroadcastReceiver mReceiver;
|
||||||
private final Handler mHandler;
|
private final Handler mHandler;
|
||||||
|
private LocalBluetoothManager mLocalBluetoothManager;
|
||||||
|
|
||||||
public interface AudioSwitchCallback {
|
public interface AudioSwitchCallback {
|
||||||
void onPreferenceDataChanged(ListPreference preference);
|
void onPreferenceDataChanged(ListPreference preference);
|
||||||
@@ -94,14 +98,23 @@ public abstract class AudioSwitchPreferenceController extends BasePreferenceCont
|
|||||||
super(context, preferenceKey);
|
super(context, preferenceKey);
|
||||||
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||||||
mMediaRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE);
|
mMediaRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE);
|
||||||
mLocalBluetoothManager = Utils.getLocalBtManager(mContext);
|
|
||||||
mLocalBluetoothManager.setForegroundActivity(context);
|
|
||||||
mProfileManager = mLocalBluetoothManager.getProfileManager();
|
|
||||||
mHandler = new Handler(Looper.getMainLooper());
|
mHandler = new Handler(Looper.getMainLooper());
|
||||||
mAudioManagerAudioDeviceCallback = new AudioManagerAudioDeviceCallback();
|
mAudioManagerAudioDeviceCallback = new AudioManagerAudioDeviceCallback();
|
||||||
mReceiver = new WiredHeadsetBroadcastReceiver();
|
mReceiver = new WiredHeadsetBroadcastReceiver();
|
||||||
mMediaRouterCallback = new MediaRouterCallback();
|
mMediaRouterCallback = new MediaRouterCallback();
|
||||||
mConnectedDevices = new ArrayList<>();
|
mConnectedDevices = new ArrayList<>();
|
||||||
|
final FutureTask<LocalBluetoothManager> localBtManagerFutureTask = new FutureTask<>(
|
||||||
|
// Avoid StrictMode ThreadPolicy violation
|
||||||
|
() -> Utils.getLocalBtManager(mContext));
|
||||||
|
try {
|
||||||
|
localBtManagerFutureTask.run();
|
||||||
|
mLocalBluetoothManager = localBtManagerFutureTask.get();
|
||||||
|
} catch (InterruptedException | ExecutionException e) {
|
||||||
|
Log.w(TAG, "Error getting LocalBluetoothManager.", e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mLocalBluetoothManager.setForegroundActivity(mContext);
|
||||||
|
mProfileManager = mLocalBluetoothManager.getProfileManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user