[Pair hearing devices] Add "Saved devices" to show bonded but not connected hearing devices
* BaseHearingDevicePreferenceController will also be used in "Hearing devices", so extract to parent class first. Bug: 237625815 Test: make RunSettingsRoboTests ROBOTEST_FILTER="(SavedHearingDeviceUpdaterTest|BaseBluetoothDevicePreferenceControllerTest|BluetoothDeviceUpdaterTest|AvailableMediaBluetoothDeviceUpdaterTest|ConnectedBluetoothDeviceUpdaterTest|SavedBluetoothDeviceUpdaterTest)" Change-Id: I8a492866f48e3a664b9ff78bce5a4f082c0dc465
This commit is contained in:
@@ -23,7 +23,6 @@ import android.util.Log;
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.android.settings.connecteddevice.DevicePreferenceCallback;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||
|
||||
/**
|
||||
@@ -39,9 +38,9 @@ public class AvailableMediaBluetoothDeviceUpdater extends BluetoothDeviceUpdater
|
||||
|
||||
private final AudioManager mAudioManager;
|
||||
|
||||
public AvailableMediaBluetoothDeviceUpdater(Context context, DashboardFragment fragment,
|
||||
DevicePreferenceCallback devicePreferenceCallback) {
|
||||
super(context, fragment, devicePreferenceCallback);
|
||||
public AvailableMediaBluetoothDeviceUpdater(Context context,
|
||||
DevicePreferenceCallback devicePreferenceCallback, int metricsCategory) {
|
||||
super(context, devicePreferenceCallback, metricsCategory);
|
||||
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||||
}
|
||||
|
||||
@@ -102,7 +101,7 @@ public class AvailableMediaBluetoothDeviceUpdater extends BluetoothDeviceUpdater
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
mMetricsFeatureProvider.logClickedPreference(preference, mFragment.getMetricsCategory());
|
||||
mMetricsFeatureProvider.logClickedPreference(preference, mMetricsCategory);
|
||||
final CachedBluetoothDevice device = ((BluetoothDevicePreference) preference)
|
||||
.getBluetoothDevice();
|
||||
return device.setActive();
|
||||
|
@@ -27,11 +27,9 @@ import androidx.preference.Preference;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.connecteddevice.DevicePreferenceCallback;
|
||||
import com.android.settings.core.SubSettingLauncher;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.widget.GearPreference;
|
||||
import com.android.settingslib.bluetooth.BluetoothCallback;
|
||||
import com.android.settingslib.bluetooth.BluetoothDeviceFilter;
|
||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
||||
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
|
||||
@@ -46,39 +44,42 @@ import java.util.Map;
|
||||
* {@link BluetoothCallback}. It notifies the upper level whether to add/remove the preference
|
||||
* through {@link DevicePreferenceCallback}
|
||||
*
|
||||
* In {@link BluetoothDeviceUpdater}, it uses {@link BluetoothDeviceFilter.Filter} to detect
|
||||
* whether the {@link CachedBluetoothDevice} is relevant.
|
||||
* In {@link BluetoothDeviceUpdater}, it uses {@link #isFilterMatched(CachedBluetoothDevice)} to
|
||||
* detect whether the {@link CachedBluetoothDevice} is relevant.
|
||||
*/
|
||||
public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
|
||||
LocalBluetoothProfileManager.ServiceListener {
|
||||
private static final String TAG = "BluetoothDeviceUpdater";
|
||||
private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
|
||||
|
||||
protected final MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
protected final DevicePreferenceCallback mDevicePreferenceCallback;
|
||||
protected final Map<BluetoothDevice, Preference> mPreferenceMap;
|
||||
protected Context mContext;
|
||||
protected Context mPrefContext;
|
||||
protected DashboardFragment mFragment;
|
||||
@VisibleForTesting
|
||||
protected LocalBluetoothManager mLocalManager;
|
||||
protected int mMetricsCategory;
|
||||
|
||||
private static final String TAG = "BluetoothDeviceUpdater";
|
||||
private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
|
||||
|
||||
@VisibleForTesting
|
||||
final GearPreference.OnGearClickListener mDeviceProfilesListener = pref -> {
|
||||
launchDeviceDetails(pref);
|
||||
};
|
||||
|
||||
public BluetoothDeviceUpdater(Context context, DashboardFragment fragment,
|
||||
DevicePreferenceCallback devicePreferenceCallback) {
|
||||
this(context, fragment, devicePreferenceCallback, Utils.getLocalBtManager(context));
|
||||
public BluetoothDeviceUpdater(Context context,
|
||||
DevicePreferenceCallback devicePreferenceCallback, int metricsCategory) {
|
||||
this(context, devicePreferenceCallback, Utils.getLocalBtManager(context), metricsCategory);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
BluetoothDeviceUpdater(Context context, DashboardFragment fragment,
|
||||
DevicePreferenceCallback devicePreferenceCallback, LocalBluetoothManager localManager) {
|
||||
mFragment = fragment;
|
||||
BluetoothDeviceUpdater(Context context,
|
||||
DevicePreferenceCallback devicePreferenceCallback, LocalBluetoothManager localManager,
|
||||
int metricsCategory) {
|
||||
mContext = context;
|
||||
mDevicePreferenceCallback = devicePreferenceCallback;
|
||||
mPreferenceMap = new HashMap<>();
|
||||
mLocalManager = localManager;
|
||||
mMetricsCategory = metricsCategory;
|
||||
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
|
||||
}
|
||||
|
||||
@@ -90,7 +91,7 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
|
||||
Log.e(TAG, "registerCallback() Bluetooth is not supported on this device");
|
||||
return;
|
||||
}
|
||||
mLocalManager.setForegroundActivity(mFragment.getContext());
|
||||
mLocalManager.setForegroundActivity(mContext);
|
||||
mLocalManager.getEventManager().registerCallback(this);
|
||||
mLocalManager.getProfileManager().addServiceListener(this);
|
||||
forceUpdate();
|
||||
@@ -283,7 +284,7 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
|
||||
* {@link SubSettingLauncher} to launch {@link BluetoothDeviceDetailsFragment}
|
||||
*/
|
||||
protected void launchDeviceDetails(Preference preference) {
|
||||
mMetricsFeatureProvider.logClickedPreference(preference, mFragment.getMetricsCategory());
|
||||
mMetricsFeatureProvider.logClickedPreference(preference, mMetricsCategory);
|
||||
final CachedBluetoothDevice device =
|
||||
((BluetoothDevicePreference) preference).getBluetoothDevice();
|
||||
if (device == null) {
|
||||
@@ -293,11 +294,11 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
|
||||
args.putString(BluetoothDeviceDetailsFragment.KEY_DEVICE_ADDRESS,
|
||||
device.getDevice().getAddress());
|
||||
|
||||
new SubSettingLauncher(mFragment.getContext())
|
||||
new SubSettingLauncher(mContext)
|
||||
.setDestination(BluetoothDeviceDetailsFragment.class.getName())
|
||||
.setArguments(args)
|
||||
.setTitleRes(R.string.device_details_title)
|
||||
.setSourceMetricsCategory(mFragment.getMetricsCategory())
|
||||
.setSourceMetricsCategory(mMetricsCategory)
|
||||
.launch();
|
||||
}
|
||||
|
||||
|
@@ -24,7 +24,6 @@ import android.util.Log;
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.android.settings.connecteddevice.DevicePreferenceCallback;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||
|
||||
/**
|
||||
@@ -39,9 +38,9 @@ public class ConnectedBluetoothDeviceUpdater extends BluetoothDeviceUpdater {
|
||||
|
||||
private final AudioManager mAudioManager;
|
||||
|
||||
public ConnectedBluetoothDeviceUpdater(Context context, DashboardFragment fragment,
|
||||
DevicePreferenceCallback devicePreferenceCallback) {
|
||||
super(context, fragment, devicePreferenceCallback);
|
||||
public ConnectedBluetoothDeviceUpdater(Context context,
|
||||
DevicePreferenceCallback devicePreferenceCallback, int metricsCategory) {
|
||||
super(context, devicePreferenceCallback, metricsCategory);
|
||||
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||||
}
|
||||
|
||||
|
@@ -25,8 +25,6 @@ import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.android.settings.connecteddevice.DevicePreferenceCallback;
|
||||
import com.android.settings.connecteddevice.PreviouslyConnectedDeviceDashboardFragment;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
|
||||
|
||||
@@ -44,15 +42,16 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater
|
||||
|
||||
private static final String PREF_KEY = "saved_bt";
|
||||
|
||||
private final boolean mDisplayConnected;
|
||||
private final boolean mShowConnectedDevice;
|
||||
|
||||
@VisibleForTesting
|
||||
BluetoothAdapter mBluetoothAdapter;
|
||||
|
||||
public SavedBluetoothDeviceUpdater(Context context, DashboardFragment fragment,
|
||||
DevicePreferenceCallback devicePreferenceCallback) {
|
||||
super(context, fragment, devicePreferenceCallback);
|
||||
mDisplayConnected = (fragment instanceof PreviouslyConnectedDeviceDashboardFragment);
|
||||
public SavedBluetoothDeviceUpdater(Context context,
|
||||
DevicePreferenceCallback devicePreferenceCallback, boolean showConnectedDevice,
|
||||
int metricsCategory) {
|
||||
super(context, devicePreferenceCallback, metricsCategory);
|
||||
mShowConnectedDevice = showConnectedDevice;
|
||||
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||
}
|
||||
|
||||
@@ -106,13 +105,13 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater
|
||||
+ cachedDevice.isConnected());
|
||||
}
|
||||
return device.getBondState() == BluetoothDevice.BOND_BONDED
|
||||
&& (mDisplayConnected || (!device.isConnected() && isDeviceInCachedDevicesList(
|
||||
&& (mShowConnectedDevice || (!device.isConnected() && isDeviceInCachedDevicesList(
|
||||
cachedDevice)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
mMetricsFeatureProvider.logClickedPreference(preference, mFragment.getMetricsCategory());
|
||||
mMetricsFeatureProvider.logClickedPreference(preference, mMetricsCategory);
|
||||
final CachedBluetoothDevice device = ((BluetoothDevicePreference) preference)
|
||||
.getBluetoothDevice();
|
||||
if (device.isConnected()) {
|
||||
|
Reference in New Issue
Block a user