diff --git a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java index 3fd7ced3e03..2cc623331e2 100644 --- a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java +++ b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java @@ -56,6 +56,7 @@ public final class BluetoothDevicePreference extends GearPreference implements private AlertDialog mDisconnectDialog; private String contentDescription = null; + private boolean mHideSecondTarget = false; /* Talk-back descriptions for various BT icons */ Resources mResources; @@ -86,7 +87,8 @@ public final class BluetoothDevicePreference extends GearPreference implements protected boolean shouldHideSecondTarget() { return mCachedDevice == null || mCachedDevice.getBondState() != BluetoothDevice.BOND_BONDED - || mUserManager.hasUserRestriction(DISALLOW_CONFIG_BLUETOOTH); + || mUserManager.hasUserRestriction(DISALLOW_CONFIG_BLUETOOTH) + || mHideSecondTarget; } @Override @@ -112,6 +114,10 @@ public final class BluetoothDevicePreference extends GearPreference implements return mCachedDevice; } + public void hideSecondTarget(boolean hideSecondTarget) { + mHideSecondTarget = hideSecondTarget; + } + public void onDeviceAttributesChanged() { /* * The preference framework takes care of making sure the value has diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java index 595d9518944..dfcbfca1e06 100644 --- a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java +++ b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java @@ -56,29 +56,14 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback, protected final DevicePreferenceCallback mDevicePreferenceCallback; protected final Map mPreferenceMap; protected Context mPrefContext; + protected DashboardFragment mFragment; private final boolean mShowDeviceWithoutNames; - private DashboardFragment mFragment; private Preference.OnPreferenceClickListener mDevicePreferenceClickListener = null; @VisibleForTesting final GearPreference.OnGearClickListener mDeviceProfilesListener = pref -> { - final CachedBluetoothDevice device = - ((BluetoothDevicePreference) pref).getBluetoothDevice(); - if (device == null) { - return; - } - final Bundle args = new Bundle(); - args.putString(BluetoothDeviceDetailsFragment.KEY_DEVICE_ADDRESS, - device.getDevice().getAddress()); - - new SubSettingLauncher(mFragment.getContext()) - .setDestination(BluetoothDeviceDetailsFragment.class.getName()) - .setArguments(args) - .setTitle(R.string.device_details_title) - .setSourceMetricsCategory(mFragment.getMetricsCategory()) - .launch(); - + launchDeviceDetails(pref); }; private class PreferenceClickListener implements @@ -201,7 +186,7 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback, public abstract boolean isFilterMatched(CachedBluetoothDevice cachedBluetoothDevice); /** - * Update whether to show {@cde cachedBluetoothDevice} in the list. + * Update whether to show {@link CachedBluetoothDevice} in the list. */ protected void update(CachedBluetoothDevice cachedBluetoothDevice) { if (isFilterMatched(cachedBluetoothDevice)) { @@ -239,6 +224,28 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback, } } + /** + * Get {@link CachedBluetoothDevice} from {@link Preference} and it is used to init + * {@link SubSettingLauncher} to launch {@link BluetoothDeviceDetailsFragment} + */ + protected void launchDeviceDetails(Preference preference) { + final CachedBluetoothDevice device = + ((BluetoothDevicePreference) preference).getBluetoothDevice(); + if (device == null) { + return; + } + final Bundle args = new Bundle(); + args.putString(BluetoothDeviceDetailsFragment.KEY_DEVICE_ADDRESS, + device.getDevice().getAddress()); + + new SubSettingLauncher(mFragment.getContext()) + .setDestination(BluetoothDeviceDetailsFragment.class.getName()) + .setArguments(args) + .setTitle(R.string.device_details_title) + .setSourceMetricsCategory(mFragment.getMetricsCategory()) + .launch(); + } + /** * @return {@code true} if {@code cachedBluetoothDevice} is connected * and the bond state is bonded. diff --git a/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java index 55f4bb1dd6b..11702bcefc2 100644 --- a/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java +++ b/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java @@ -16,11 +16,14 @@ package com.android.settings.bluetooth; import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.content.Context; import android.media.AudioManager; import android.support.annotation.VisibleForTesting; +import android.support.v7.preference.Preference; import android.util.Log; + import com.android.settings.connecteddevice.DevicePreferenceCallback; import com.android.settings.dashboard.DashboardFragment; import com.android.settingslib.bluetooth.CachedBluetoothDevice; @@ -116,4 +119,20 @@ public class ConnectedBluetoothDeviceUpdater extends BluetoothDeviceUpdater { } return isFilterMatched; } + + @Override + protected void addPreference(CachedBluetoothDevice cachedDevice) { + super.addPreference(cachedDevice); + final BluetoothDevice device = cachedDevice.getDevice(); + if (mPreferenceMap.containsKey(device)) { + final BluetoothDevicePreference btPreference = + (BluetoothDevicePreference) mPreferenceMap.get(device); + btPreference.setOnGearClickListener(null); + btPreference.hideSecondTarget(true); + btPreference.setOnPreferenceClickListener((Preference p) -> { + launchDeviceDetails(p); + return true; + }); + } + } } diff --git a/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java index 9d69f59b7d3..56e638a9ed1 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java @@ -15,6 +15,7 @@ */ package com.android.settings.bluetooth; +import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; @@ -207,4 +208,15 @@ public class ConnectedBluetoothDeviceUpdaterTest { verify(mBluetoothDeviceUpdater).removePreference(mCachedBluetoothDevice); } + + @Test + public void addPreference_addPreference_shouldHideSecondTarget() { + BluetoothDevicePreference btPreference = + new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, true); + mBluetoothDeviceUpdater.mPreferenceMap.put(mBluetoothDevice, btPreference); + + mBluetoothDeviceUpdater.addPreference(mCachedBluetoothDevice); + + assertThat(btPreference.shouldHideSecondTarget()).isTrue(); + } }