Loading src/com/android/settings/bluetooth/BluetoothDevicePreference.java +26 −3 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.util.TypedValue; import android.view.View; import android.widget.ImageView; import androidx.annotation.IntDef; import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog; import androidx.preference.Preference; Loading @@ -44,6 +45,9 @@ import com.android.settingslib.bluetooth.BluetoothUtils; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * BluetoothDevicePreference is the preference type used to display each remote * Bluetooth device in the Bluetooth Settings screen. Loading @@ -54,9 +58,19 @@ public final class BluetoothDevicePreference extends GearPreference implements private static int sDimAlpha = Integer.MIN_VALUE; @Retention(RetentionPolicy.SOURCE) @IntDef({SortType.TYPE_DEFAULT, SortType.TYPE_FIFO}) public @interface SortType { int TYPE_DEFAULT = 1; int TYPE_FIFO = 2; } private final CachedBluetoothDevice mCachedDevice; private final UserManager mUserManager; private final boolean mShowDevicesWithoutNames; private final long mCurrentTime; private final int mType; private AlertDialog mDisconnectDialog; private String contentDescription = null; Loading @@ -67,7 +81,7 @@ public final class BluetoothDevicePreference extends GearPreference implements Resources mResources; public BluetoothDevicePreference(Context context, CachedBluetoothDevice cachedDevice, boolean showDeviceWithoutNames) { boolean showDeviceWithoutNames, @SortType int type) { super(context, null); mResources = getContext().getResources(); mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); Loading @@ -81,6 +95,8 @@ public final class BluetoothDevicePreference extends GearPreference implements mCachedDevice = cachedDevice; mCachedDevice.registerCallback(this); mCurrentTime = System.currentTimeMillis(); mType = type; onDeviceAttributesChanged(); } Loading Loading @@ -200,8 +216,15 @@ public final class BluetoothDevicePreference extends GearPreference implements return super.compareTo(another); } switch (mType) { case SortType.TYPE_DEFAULT: return mCachedDevice .compareTo(((BluetoothDevicePreference) another).mCachedDevice); case SortType.TYPE_FIFO: return (int)(mCurrentTime - ((BluetoothDevicePreference) another).mCurrentTime); default: return super.compareTo(another); } } void onClicked() { Loading src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java +2 −1 Original line number Diff line number Diff line Loading @@ -226,7 +226,8 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback, if (!mPreferenceMap.containsKey(device)) { BluetoothDevicePreference btPreference = new BluetoothDevicePreference(mPrefContext, cachedDevice, true /* showDeviceWithoutNames */); true /* showDeviceWithoutNames */, BluetoothDevicePreference.SortType.TYPE_DEFAULT); btPreference.setOnGearClickListener(mDeviceProfilesListener); if (this instanceof Preference.OnPreferenceClickListener) { btPreference.setOnPreferenceClickListener( Loading src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java +1 −1 Original line number Diff line number Diff line Loading @@ -191,7 +191,7 @@ public abstract class DeviceListPreferenceFragment extends if (preference == null) { preference = new BluetoothDevicePreference(getPrefContext(), cachedDevice, mShowDevicesWithoutNames); mShowDevicesWithoutNames, BluetoothDevicePreference.SortType.TYPE_FIFO); preference.setKey(key); //Set hideSecondTarget is true if it's bonded device. preference.hideSecondTarget(true); Loading tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -91,7 +91,8 @@ public class AvailableMediaBluetoothDeviceUpdaterTest { mBluetoothDeviceUpdater = spy(new AvailableMediaBluetoothDeviceUpdater(mContext, mDashboardFragment, mDevicePreferenceCallback)); mBluetoothDeviceUpdater.setPrefContext(mContext); mPreference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, false); mPreference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, false, BluetoothDevicePreference.SortType.TYPE_DEFAULT); doNothing().when(mBluetoothDeviceUpdater).addPreference(any()); doNothing().when(mBluetoothDeviceUpdater).removePreference(any()); } Loading tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePreferenceTest.java +69 −4 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.os.UserManager; Loading @@ -48,19 +47,36 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; @RunWith(RobolectricTestRunner.class) @Config(shadows = {ShadowAlertDialogCompat.class}) public class BluetoothDevicePreferenceTest { private static final boolean SHOW_DEVICES_WITHOUT_NAMES = true; private static final String MAC_ADDRESS = "04:52:C7:0B:D8:3C"; private static final String MAC_ADDRESS_2 = "05:52:C7:0B:D8:3C"; private static final String MAC_ADDRESS_3 = "06:52:C7:0B:D8:3C"; private static final String MAC_ADDRESS_4 = "07:52:C7:0B:D8:3C"; private static final Comparator<BluetoothDevicePreference> COMPARATOR = Comparator.naturalOrder(); private Context mContext; @Mock private CachedBluetoothDevice mCachedBluetoothDevice; @Mock private CachedBluetoothDevice mCachedDevice1; @Mock private CachedBluetoothDevice mCachedDevice2; @Mock private CachedBluetoothDevice mCachedDevice3; private FakeFeatureFactory mFakeFeatureFactory; private MetricsFeatureProvider mMetricsFeatureProvider; private BluetoothDevicePreference mPreference; private List<BluetoothDevicePreference> mPreferenceList = new ArrayList<>(); @Before public void setUp() { Loading @@ -70,8 +86,11 @@ public class BluetoothDevicePreferenceTest { mFakeFeatureFactory = FakeFeatureFactory.setupForTest(); mMetricsFeatureProvider = mFakeFeatureFactory.getMetricsFeatureProvider(); when(mCachedBluetoothDevice.getAddress()).thenReturn(MAC_ADDRESS); when(mCachedDevice1.getAddress()).thenReturn(MAC_ADDRESS_2); when(mCachedDevice2.getAddress()).thenReturn(MAC_ADDRESS_3); when(mCachedDevice3.getAddress()).thenReturn(MAC_ADDRESS_4); mPreference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, SHOW_DEVICES_WITHOUT_NAMES); SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_DEFAULT); } @Test Loading Loading @@ -170,7 +189,8 @@ public class BluetoothDevicePreferenceTest { doReturn(false).when(mCachedBluetoothDevice).hasHumanReadableName(); BluetoothDevicePreference preference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, SHOW_DEVICES_WITHOUT_NAMES); SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_DEFAULT); assertThat(preference.isVisible()).isTrue(); } Loading @@ -179,7 +199,8 @@ public class BluetoothDevicePreferenceTest { public void isVisible_hideDeviceWithoutNames_invisible() { doReturn(false).when(mCachedBluetoothDevice).hasHumanReadableName(); BluetoothDevicePreference preference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, false); new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, false, BluetoothDevicePreference.SortType.TYPE_DEFAULT); assertThat(preference.isVisible()).isFalse(); } Loading @@ -190,4 +211,48 @@ public class BluetoothDevicePreferenceTest { assertThat(mPreference.mNeedNotifyHierarchyChanged).isTrue(); } @Test public void compareTo_sortTypeFIFO() { final BluetoothDevicePreference preference3 = new BluetoothDevicePreference(mContext, mCachedDevice3, SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_FIFO); final BluetoothDevicePreference preference2 = new BluetoothDevicePreference(mContext, mCachedDevice2, SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_FIFO); final BluetoothDevicePreference preference1 = new BluetoothDevicePreference(mContext, mCachedDevice1, SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_FIFO); mPreferenceList.add(preference1); mPreferenceList.add(preference2); mPreferenceList.add(preference3); Collections.sort(mPreferenceList, COMPARATOR); assertThat(mPreferenceList.get(0)).isEqualTo(preference3); assertThat(mPreferenceList.get(1)).isEqualTo(preference2); assertThat(mPreferenceList.get(2)).isEqualTo(preference1); } @Test public void compareTo_sortTypeDefault() { final BluetoothDevicePreference preference3 = new BluetoothDevicePreference(mContext, mCachedDevice3, SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_DEFAULT); final BluetoothDevicePreference preference2 = new BluetoothDevicePreference(mContext, mCachedDevice2, SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_DEFAULT); final BluetoothDevicePreference preference1 = new BluetoothDevicePreference(mContext, mCachedDevice1, SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_DEFAULT); mPreferenceList.add(preference1); mPreferenceList.add(preference2); mPreferenceList.add(preference3); Collections.sort(mPreferenceList, COMPARATOR); assertThat(mPreferenceList.get(0)).isEqualTo(preference1); assertThat(mPreferenceList.get(1)).isEqualTo(preference2); assertThat(mPreferenceList.get(2)).isEqualTo(preference3); } } Loading
src/com/android/settings/bluetooth/BluetoothDevicePreference.java +26 −3 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.util.TypedValue; import android.view.View; import android.widget.ImageView; import androidx.annotation.IntDef; import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog; import androidx.preference.Preference; Loading @@ -44,6 +45,9 @@ import com.android.settingslib.bluetooth.BluetoothUtils; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * BluetoothDevicePreference is the preference type used to display each remote * Bluetooth device in the Bluetooth Settings screen. Loading @@ -54,9 +58,19 @@ public final class BluetoothDevicePreference extends GearPreference implements private static int sDimAlpha = Integer.MIN_VALUE; @Retention(RetentionPolicy.SOURCE) @IntDef({SortType.TYPE_DEFAULT, SortType.TYPE_FIFO}) public @interface SortType { int TYPE_DEFAULT = 1; int TYPE_FIFO = 2; } private final CachedBluetoothDevice mCachedDevice; private final UserManager mUserManager; private final boolean mShowDevicesWithoutNames; private final long mCurrentTime; private final int mType; private AlertDialog mDisconnectDialog; private String contentDescription = null; Loading @@ -67,7 +81,7 @@ public final class BluetoothDevicePreference extends GearPreference implements Resources mResources; public BluetoothDevicePreference(Context context, CachedBluetoothDevice cachedDevice, boolean showDeviceWithoutNames) { boolean showDeviceWithoutNames, @SortType int type) { super(context, null); mResources = getContext().getResources(); mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); Loading @@ -81,6 +95,8 @@ public final class BluetoothDevicePreference extends GearPreference implements mCachedDevice = cachedDevice; mCachedDevice.registerCallback(this); mCurrentTime = System.currentTimeMillis(); mType = type; onDeviceAttributesChanged(); } Loading Loading @@ -200,8 +216,15 @@ public final class BluetoothDevicePreference extends GearPreference implements return super.compareTo(another); } switch (mType) { case SortType.TYPE_DEFAULT: return mCachedDevice .compareTo(((BluetoothDevicePreference) another).mCachedDevice); case SortType.TYPE_FIFO: return (int)(mCurrentTime - ((BluetoothDevicePreference) another).mCurrentTime); default: return super.compareTo(another); } } void onClicked() { Loading
src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java +2 −1 Original line number Diff line number Diff line Loading @@ -226,7 +226,8 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback, if (!mPreferenceMap.containsKey(device)) { BluetoothDevicePreference btPreference = new BluetoothDevicePreference(mPrefContext, cachedDevice, true /* showDeviceWithoutNames */); true /* showDeviceWithoutNames */, BluetoothDevicePreference.SortType.TYPE_DEFAULT); btPreference.setOnGearClickListener(mDeviceProfilesListener); if (this instanceof Preference.OnPreferenceClickListener) { btPreference.setOnPreferenceClickListener( Loading
src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java +1 −1 Original line number Diff line number Diff line Loading @@ -191,7 +191,7 @@ public abstract class DeviceListPreferenceFragment extends if (preference == null) { preference = new BluetoothDevicePreference(getPrefContext(), cachedDevice, mShowDevicesWithoutNames); mShowDevicesWithoutNames, BluetoothDevicePreference.SortType.TYPE_FIFO); preference.setKey(key); //Set hideSecondTarget is true if it's bonded device. preference.hideSecondTarget(true); Loading
tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -91,7 +91,8 @@ public class AvailableMediaBluetoothDeviceUpdaterTest { mBluetoothDeviceUpdater = spy(new AvailableMediaBluetoothDeviceUpdater(mContext, mDashboardFragment, mDevicePreferenceCallback)); mBluetoothDeviceUpdater.setPrefContext(mContext); mPreference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, false); mPreference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, false, BluetoothDevicePreference.SortType.TYPE_DEFAULT); doNothing().when(mBluetoothDeviceUpdater).addPreference(any()); doNothing().when(mBluetoothDeviceUpdater).removePreference(any()); } Loading
tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePreferenceTest.java +69 −4 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.os.UserManager; Loading @@ -48,19 +47,36 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; @RunWith(RobolectricTestRunner.class) @Config(shadows = {ShadowAlertDialogCompat.class}) public class BluetoothDevicePreferenceTest { private static final boolean SHOW_DEVICES_WITHOUT_NAMES = true; private static final String MAC_ADDRESS = "04:52:C7:0B:D8:3C"; private static final String MAC_ADDRESS_2 = "05:52:C7:0B:D8:3C"; private static final String MAC_ADDRESS_3 = "06:52:C7:0B:D8:3C"; private static final String MAC_ADDRESS_4 = "07:52:C7:0B:D8:3C"; private static final Comparator<BluetoothDevicePreference> COMPARATOR = Comparator.naturalOrder(); private Context mContext; @Mock private CachedBluetoothDevice mCachedBluetoothDevice; @Mock private CachedBluetoothDevice mCachedDevice1; @Mock private CachedBluetoothDevice mCachedDevice2; @Mock private CachedBluetoothDevice mCachedDevice3; private FakeFeatureFactory mFakeFeatureFactory; private MetricsFeatureProvider mMetricsFeatureProvider; private BluetoothDevicePreference mPreference; private List<BluetoothDevicePreference> mPreferenceList = new ArrayList<>(); @Before public void setUp() { Loading @@ -70,8 +86,11 @@ public class BluetoothDevicePreferenceTest { mFakeFeatureFactory = FakeFeatureFactory.setupForTest(); mMetricsFeatureProvider = mFakeFeatureFactory.getMetricsFeatureProvider(); when(mCachedBluetoothDevice.getAddress()).thenReturn(MAC_ADDRESS); when(mCachedDevice1.getAddress()).thenReturn(MAC_ADDRESS_2); when(mCachedDevice2.getAddress()).thenReturn(MAC_ADDRESS_3); when(mCachedDevice3.getAddress()).thenReturn(MAC_ADDRESS_4); mPreference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, SHOW_DEVICES_WITHOUT_NAMES); SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_DEFAULT); } @Test Loading Loading @@ -170,7 +189,8 @@ public class BluetoothDevicePreferenceTest { doReturn(false).when(mCachedBluetoothDevice).hasHumanReadableName(); BluetoothDevicePreference preference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, SHOW_DEVICES_WITHOUT_NAMES); SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_DEFAULT); assertThat(preference.isVisible()).isTrue(); } Loading @@ -179,7 +199,8 @@ public class BluetoothDevicePreferenceTest { public void isVisible_hideDeviceWithoutNames_invisible() { doReturn(false).when(mCachedBluetoothDevice).hasHumanReadableName(); BluetoothDevicePreference preference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, false); new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, false, BluetoothDevicePreference.SortType.TYPE_DEFAULT); assertThat(preference.isVisible()).isFalse(); } Loading @@ -190,4 +211,48 @@ public class BluetoothDevicePreferenceTest { assertThat(mPreference.mNeedNotifyHierarchyChanged).isTrue(); } @Test public void compareTo_sortTypeFIFO() { final BluetoothDevicePreference preference3 = new BluetoothDevicePreference(mContext, mCachedDevice3, SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_FIFO); final BluetoothDevicePreference preference2 = new BluetoothDevicePreference(mContext, mCachedDevice2, SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_FIFO); final BluetoothDevicePreference preference1 = new BluetoothDevicePreference(mContext, mCachedDevice1, SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_FIFO); mPreferenceList.add(preference1); mPreferenceList.add(preference2); mPreferenceList.add(preference3); Collections.sort(mPreferenceList, COMPARATOR); assertThat(mPreferenceList.get(0)).isEqualTo(preference3); assertThat(mPreferenceList.get(1)).isEqualTo(preference2); assertThat(mPreferenceList.get(2)).isEqualTo(preference1); } @Test public void compareTo_sortTypeDefault() { final BluetoothDevicePreference preference3 = new BluetoothDevicePreference(mContext, mCachedDevice3, SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_DEFAULT); final BluetoothDevicePreference preference2 = new BluetoothDevicePreference(mContext, mCachedDevice2, SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_DEFAULT); final BluetoothDevicePreference preference1 = new BluetoothDevicePreference(mContext, mCachedDevice1, SHOW_DEVICES_WITHOUT_NAMES, BluetoothDevicePreference.SortType.TYPE_DEFAULT); mPreferenceList.add(preference1); mPreferenceList.add(preference2); mPreferenceList.add(preference3); Collections.sort(mPreferenceList, COMPARATOR); assertThat(mPreferenceList.get(0)).isEqualTo(preference1); assertThat(mPreferenceList.get(1)).isEqualTo(preference2); assertThat(mPreferenceList.get(2)).isEqualTo(preference3); } }