[Hide DCK devices] Hide DCK devices from settings app (other devices section).
Set preferences of DCK devices to be invisible in other devices section. Test: atest: com.android.settings.bluetooth.ConnectedBluetoothDeviceUpdaterTest Bug: 322285078 Change-Id: I13572250f6e1d6b1562a052a0c25e8af60eba9cd
This commit is contained in:
@@ -24,6 +24,8 @@ import android.util.Log;
|
|||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.settings.connecteddevice.DevicePreferenceCallback;
|
import com.android.settings.connecteddevice.DevicePreferenceCallback;
|
||||||
|
import com.android.settings.flags.Flags;
|
||||||
|
import com.android.settingslib.bluetooth.BluetoothUtils;
|
||||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -95,6 +97,15 @@ public class ConnectedBluetoothDeviceUpdater extends BluetoothDeviceUpdater {
|
|||||||
cachedDevice.getName() + ", isFilterMatched : " + isFilterMatched);
|
cachedDevice.getName() + ", isFilterMatched : " + isFilterMatched);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Flags.enableHideExclusivelyManagedBluetoothDevice()) {
|
||||||
|
if (BluetoothUtils.isExclusivelyManagedBluetoothDevice(mContext,
|
||||||
|
cachedDevice.getDevice())) {
|
||||||
|
if (DBG) {
|
||||||
|
Log.d(TAG, "isFilterMatched() hide BluetoothDevice with exclusive manager");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
return isFilterMatched;
|
return isFilterMatched;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -20,6 +20,8 @@ import static com.google.common.truth.Truth.assertThat;
|
|||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.Mockito.doNothing;
|
import static org.mockito.Mockito.doNothing;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
|
import static org.mockito.Mockito.doThrow;
|
||||||
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
@@ -28,18 +30,26 @@ import android.bluetooth.BluetoothAdapter;
|
|||||||
import android.bluetooth.BluetoothDevice;
|
import android.bluetooth.BluetoothDevice;
|
||||||
import android.bluetooth.BluetoothProfile;
|
import android.bluetooth.BluetoothProfile;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.pm.PackageInfo;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
|
import android.platform.test.annotations.RequiresFlagsEnabled;
|
||||||
|
import android.platform.test.flag.junit.CheckFlagsRule;
|
||||||
|
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
|
||||||
import com.android.settings.connecteddevice.DevicePreferenceCallback;
|
import com.android.settings.connecteddevice.DevicePreferenceCallback;
|
||||||
import com.android.settings.dashboard.DashboardFragment;
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
|
import com.android.settings.flags.Flags;
|
||||||
import com.android.settings.testutils.shadow.ShadowAudioManager;
|
import com.android.settings.testutils.shadow.ShadowAudioManager;
|
||||||
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
|
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
|
||||||
import com.android.settings.testutils.shadow.ShadowCachedBluetoothDeviceManager;
|
import com.android.settings.testutils.shadow.ShadowCachedBluetoothDeviceManager;
|
||||||
|
import com.android.settingslib.bluetooth.BluetoothUtils;
|
||||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
@@ -58,6 +68,10 @@ import java.util.Collection;
|
|||||||
public class ConnectedBluetoothDeviceUpdaterTest {
|
public class ConnectedBluetoothDeviceUpdaterTest {
|
||||||
|
|
||||||
private static final String MAC_ADDRESS = "04:52:C7:0B:D8:3C";
|
private static final String MAC_ADDRESS = "04:52:C7:0B:D8:3C";
|
||||||
|
private static final String FAKE_EXCLUSIVE_MANAGER_NAME = "com.fake.name";
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private DashboardFragment mDashboardFragment;
|
private DashboardFragment mDashboardFragment;
|
||||||
@@ -69,6 +83,8 @@ public class ConnectedBluetoothDeviceUpdaterTest {
|
|||||||
private BluetoothDevice mBluetoothDevice;
|
private BluetoothDevice mBluetoothDevice;
|
||||||
@Mock
|
@Mock
|
||||||
private Drawable mDrawable;
|
private Drawable mDrawable;
|
||||||
|
@Mock
|
||||||
|
private PackageManager mPackageManager;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private ConnectedBluetoothDeviceUpdater mBluetoothDeviceUpdater;
|
private ConnectedBluetoothDeviceUpdater mBluetoothDeviceUpdater;
|
||||||
@@ -82,7 +98,7 @@ public class ConnectedBluetoothDeviceUpdaterTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
Pair<Drawable, String> pairs = new Pair<>(mDrawable, "fake_device");
|
Pair<Drawable, String> pairs = new Pair<>(mDrawable, "fake_device");
|
||||||
mContext = RuntimeEnvironment.application;
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
mAudioManager = mContext.getSystemService(AudioManager.class);
|
mAudioManager = mContext.getSystemService(AudioManager.class);
|
||||||
mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
|
mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
|
||||||
mShadowBluetoothAdapter.setEnabled(true);
|
mShadowBluetoothAdapter.setEnabled(true);
|
||||||
@@ -92,6 +108,7 @@ public class ConnectedBluetoothDeviceUpdaterTest {
|
|||||||
mCachedDevices = new ArrayList<>();
|
mCachedDevices = new ArrayList<>();
|
||||||
mCachedDevices.add(mCachedBluetoothDevice);
|
mCachedDevices.add(mCachedBluetoothDevice);
|
||||||
|
|
||||||
|
when(mContext.getPackageManager()).thenReturn(mPackageManager);
|
||||||
when(mCachedBluetoothDevice.getDevice()).thenReturn(mBluetoothDevice);
|
when(mCachedBluetoothDevice.getDevice()).thenReturn(mBluetoothDevice);
|
||||||
when(mCachedBluetoothDevice.getAddress()).thenReturn(MAC_ADDRESS);
|
when(mCachedBluetoothDevice.getAddress()).thenReturn(MAC_ADDRESS);
|
||||||
when(mCachedBluetoothDevice.getDrawableWithDescription()).thenReturn(pairs);
|
when(mCachedBluetoothDevice.getDrawableWithDescription()).thenReturn(pairs);
|
||||||
@@ -320,4 +337,97 @@ public class ConnectedBluetoothDeviceUpdaterTest {
|
|||||||
|
|
||||||
assertThat(btPreference.shouldHideSecondTarget()).isTrue();
|
assertThat(btPreference.shouldHideSecondTarget()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_HIDE_EXCLUSIVELY_MANAGED_BLUETOOTH_DEVICE)
|
||||||
|
public void update_notExclusiveManagedDevice_addDevice() {
|
||||||
|
mAudioManager.setMode(AudioManager.MODE_NORMAL);
|
||||||
|
when(mBluetoothDeviceUpdater
|
||||||
|
.isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
|
||||||
|
when(mCachedBluetoothDevice.isConnectedHfpDevice()).thenReturn(true);
|
||||||
|
when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_EXCLUSIVE_MANAGER)).thenReturn(
|
||||||
|
null);
|
||||||
|
|
||||||
|
mBluetoothDeviceUpdater.update(mCachedBluetoothDevice);
|
||||||
|
|
||||||
|
verify(mBluetoothDeviceUpdater).addPreference(mCachedBluetoothDevice);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_HIDE_EXCLUSIVELY_MANAGED_BLUETOOTH_DEVICE)
|
||||||
|
public void update_notAllowedExclusiveManagedDevice_addDevice() {
|
||||||
|
mAudioManager.setMode(AudioManager.MODE_NORMAL);
|
||||||
|
when(mBluetoothDeviceUpdater
|
||||||
|
.isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
|
||||||
|
when(mCachedBluetoothDevice.isConnectedHfpDevice()).thenReturn(true);
|
||||||
|
when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_EXCLUSIVE_MANAGER)).thenReturn(
|
||||||
|
FAKE_EXCLUSIVE_MANAGER_NAME.getBytes());
|
||||||
|
|
||||||
|
mBluetoothDeviceUpdater.update(mCachedBluetoothDevice);
|
||||||
|
|
||||||
|
verify(mBluetoothDeviceUpdater).addPreference(mCachedBluetoothDevice);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_HIDE_EXCLUSIVELY_MANAGED_BLUETOOTH_DEVICE)
|
||||||
|
public void update_existingExclusivelyManagedDeviceWithPackageInstalled_removePreference()
|
||||||
|
throws Exception {
|
||||||
|
final String exclusiveManagerName =
|
||||||
|
BluetoothUtils.getExclusiveManagers().stream().findAny().orElse(
|
||||||
|
FAKE_EXCLUSIVE_MANAGER_NAME);
|
||||||
|
mAudioManager.setMode(AudioManager.MODE_NORMAL);
|
||||||
|
when(mBluetoothDeviceUpdater
|
||||||
|
.isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
|
||||||
|
when(mCachedBluetoothDevice.isConnectedHfpDevice()).thenReturn(true);
|
||||||
|
when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_EXCLUSIVE_MANAGER)).thenReturn(
|
||||||
|
exclusiveManagerName.getBytes());
|
||||||
|
doReturn(new PackageInfo()).when(mPackageManager).getPackageInfo(exclusiveManagerName, 0);
|
||||||
|
|
||||||
|
mBluetoothDeviceUpdater.update(mCachedBluetoothDevice);
|
||||||
|
|
||||||
|
verify(mBluetoothDeviceUpdater).removePreference(mCachedBluetoothDevice);
|
||||||
|
verify(mBluetoothDeviceUpdater, never()).addPreference(mCachedBluetoothDevice);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_HIDE_EXCLUSIVELY_MANAGED_BLUETOOTH_DEVICE)
|
||||||
|
public void update_newExclusivelyManagedDeviceWithPackageInstalled_doNotAddPreference()
|
||||||
|
throws Exception {
|
||||||
|
final String exclusiveManagerName =
|
||||||
|
BluetoothUtils.getExclusiveManagers().stream().findAny().orElse(
|
||||||
|
FAKE_EXCLUSIVE_MANAGER_NAME);
|
||||||
|
mAudioManager.setMode(AudioManager.MODE_NORMAL);
|
||||||
|
when(mBluetoothDeviceUpdater
|
||||||
|
.isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
|
||||||
|
when(mCachedBluetoothDevice.isConnectedHfpDevice()).thenReturn(true);
|
||||||
|
when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_EXCLUSIVE_MANAGER)).thenReturn(
|
||||||
|
exclusiveManagerName.getBytes());
|
||||||
|
doReturn(new PackageInfo()).when(mPackageManager).getPackageInfo(exclusiveManagerName, 0);
|
||||||
|
|
||||||
|
mBluetoothDeviceUpdater.update(mCachedBluetoothDevice);
|
||||||
|
|
||||||
|
verify(mBluetoothDeviceUpdater).removePreference(mCachedBluetoothDevice);
|
||||||
|
verify(mBluetoothDeviceUpdater, never()).addPreference(mCachedBluetoothDevice);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_HIDE_EXCLUSIVELY_MANAGED_BLUETOOTH_DEVICE)
|
||||||
|
public void update_exclusivelyManagedDeviceWithoutPackageInstalled_addDevice()
|
||||||
|
throws Exception {
|
||||||
|
final String exclusiveManagerName =
|
||||||
|
BluetoothUtils.getExclusiveManagers().stream().findAny().orElse(
|
||||||
|
FAKE_EXCLUSIVE_MANAGER_NAME);
|
||||||
|
mAudioManager.setMode(AudioManager.MODE_NORMAL);
|
||||||
|
when(mBluetoothDeviceUpdater
|
||||||
|
.isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
|
||||||
|
when(mCachedBluetoothDevice.isConnectedHfpDevice()).thenReturn(true);
|
||||||
|
when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_EXCLUSIVE_MANAGER)).thenReturn(
|
||||||
|
exclusiveManagerName.getBytes());
|
||||||
|
doThrow(new PackageManager.NameNotFoundException()).when(mPackageManager).getPackageInfo(
|
||||||
|
exclusiveManagerName, 0);
|
||||||
|
|
||||||
|
mBluetoothDeviceUpdater.update(mCachedBluetoothDevice);
|
||||||
|
|
||||||
|
verify(mBluetoothDeviceUpdater).addPreference(mCachedBluetoothDevice);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user