Merge "RESTRICT AUTOMERGE Fix make Bluetooth discoverable without additional permission" into rvc-qpr-dev

This commit is contained in:
TreeHugger Robot
2021-11-09 06:59:03 +00:00
committed by Android (Google) Code Review
3 changed files with 55 additions and 4 deletions

View File

@@ -19,12 +19,15 @@ import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.provider.DeviceConfig; import android.provider.DeviceConfig;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.SettingsUIDeviceConfig; import com.android.settings.core.SettingsUIDeviceConfig;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.password.PasswordUtils;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.slices.SlicePreferenceController; import com.android.settings.slices.SlicePreferenceController;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
@@ -33,6 +36,9 @@ import com.android.settingslib.search.SearchIndexable;
public class ConnectedDeviceDashboardFragment extends DashboardFragment { public class ConnectedDeviceDashboardFragment extends DashboardFragment {
private static final String TAG = "ConnectedDeviceFrag"; private static final String TAG = "ConnectedDeviceFrag";
private static final String SETTINGS_PACKAGE_NAME = "com.android.settings";
private static final String SYSTEMUI_PACKAGE_NAME = "com.android.systemui";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@VisibleForTesting @VisibleForTesting
static final String KEY_CONNECTED_DEVICES = "connected_device_list"; static final String KEY_CONNECTED_DEVICES = "connected_device_list";
@@ -69,12 +75,20 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment {
super.onAttach(context); super.onAttach(context);
final boolean nearbyEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI, final boolean nearbyEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
SettingsUIDeviceConfig.BT_NEAR_BY_SUGGESTION_ENABLED, true); SettingsUIDeviceConfig.BT_NEAR_BY_SUGGESTION_ENABLED, true);
String callingAppPackageName = PasswordUtils.getCallingAppPackageName(
getActivity().getActivityToken());
if (DEBUG) {
Log.d(TAG, "onAttach() calling package name is : " + callingAppPackageName);
}
use(AvailableMediaDeviceGroupController.class).init(this); use(AvailableMediaDeviceGroupController.class).init(this);
use(ConnectedDeviceGroupController.class).init(this); use(ConnectedDeviceGroupController.class).init(this);
use(PreviouslyConnectedDevicePreferenceController.class).init(this); use(PreviouslyConnectedDevicePreferenceController.class).init(this);
use(SlicePreferenceController.class).setSliceUri(nearbyEnabled use(SlicePreferenceController.class).setSliceUri(nearbyEnabled
? Uri.parse(getString(R.string.config_nearby_devices_slice_uri)) ? Uri.parse(getString(R.string.config_nearby_devices_slice_uri))
: null); : null);
use(DiscoverableFooterPreferenceController.class).setAlwaysDiscoverable(
TextUtils.equals(SETTINGS_PACKAGE_NAME, callingAppPackageName)
|| TextUtils.equals(SYSTEMUI_PACKAGE_NAME, callingAppPackageName));
} }
/** /**

View File

@@ -52,6 +52,7 @@ public class DiscoverableFooterPreferenceController extends BasePreferenceContro
private BluetoothAdapter mBluetoothAdapter; private BluetoothAdapter mBluetoothAdapter;
private AlwaysDiscoverable mAlwaysDiscoverable; private AlwaysDiscoverable mAlwaysDiscoverable;
private FooterPreference mPreference; private FooterPreference mPreference;
private boolean mIsAlwaysDiscoverable;
public DiscoverableFooterPreferenceController(Context context, String key) { public DiscoverableFooterPreferenceController(Context context, String key) {
super(context, key); super(context, key);
@@ -84,7 +85,9 @@ public class DiscoverableFooterPreferenceController extends BasePreferenceContro
} }
mContext.registerReceiver(mBluetoothChangedReceiver, mContext.registerReceiver(mBluetoothChangedReceiver,
new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)); new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
mAlwaysDiscoverable.start(); if (mIsAlwaysDiscoverable) {
mAlwaysDiscoverable.start();
}
updateFooterPreferenceTitle(mBluetoothAdapter.getState()); updateFooterPreferenceTitle(mBluetoothAdapter.getState());
} }
@@ -94,7 +97,19 @@ public class DiscoverableFooterPreferenceController extends BasePreferenceContro
return; return;
} }
mContext.unregisterReceiver(mBluetoothChangedReceiver); mContext.unregisterReceiver(mBluetoothChangedReceiver);
mAlwaysDiscoverable.stop(); if (mIsAlwaysDiscoverable) {
mAlwaysDiscoverable.stop();
}
}
/**
* Set whether the device can be discovered. By default the value will be {@code false}.
*
* @param isAlwaysDiscoverable {@code true} if the device can be discovered,
* otherwise {@code false}
*/
public void setAlwaysDiscoverable(boolean isAlwaysDiscoverable) {
mIsAlwaysDiscoverable = isAlwaysDiscoverable;
} }
private void updateFooterPreferenceTitle(int bluetoothState) { private void updateFooterPreferenceTitle(int bluetoothState) {

View File

@@ -18,6 +18,7 @@ package com.android.settings.connecteddevice;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
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;
@@ -104,7 +105,8 @@ public class DiscoverableFooterPreferenceControllerTest {
} }
@Test @Test
public void onStart_shouldRegisterBluetoothChanged() { public void onStart_setAlwaysDiscoverableAsTrue_shouldRegisterBluetoothChanged() {
mDiscoverableFooterPreferenceController.setAlwaysDiscoverable(true);
mDiscoverableFooterPreferenceController.onStart(); mDiscoverableFooterPreferenceController.onStart();
assertThat(getRegisteredBroadcastReceivers()).contains(mBluetoothChangedReceiver); assertThat(getRegisteredBroadcastReceivers()).contains(mBluetoothChangedReceiver);
@@ -112,7 +114,8 @@ public class DiscoverableFooterPreferenceControllerTest {
} }
@Test @Test
public void onStop_shouldUnregisterBluetoothChanged() { public void onStop_setAlwaysDiscoverableAsTrue_shouldUnregisterBluetoothChanged() {
mDiscoverableFooterPreferenceController.setAlwaysDiscoverable(true);
mDiscoverableFooterPreferenceController.onStart(); mDiscoverableFooterPreferenceController.onStart();
mDiscoverableFooterPreferenceController.onStop(); mDiscoverableFooterPreferenceController.onStop();
@@ -120,6 +123,25 @@ public class DiscoverableFooterPreferenceControllerTest {
verify(mAlwaysDiscoverable).stop(); verify(mAlwaysDiscoverable).stop();
} }
@Test
public void onStart_setAlwaysDiscoverableAsFalse_shouldNotRegisterBluetoothChanged() {
mDiscoverableFooterPreferenceController.setAlwaysDiscoverable(false);
mDiscoverableFooterPreferenceController.onStart();
assertThat(getRegisteredBroadcastReceivers()).contains(mBluetoothChangedReceiver);
verify(mAlwaysDiscoverable, never()).start();
}
@Test
public void onStop_setAlwaysDiscoverableAsFalse_shouldNotUnregisterBluetoothChanged() {
mDiscoverableFooterPreferenceController.setAlwaysDiscoverable(false);
mDiscoverableFooterPreferenceController.onStart();
mDiscoverableFooterPreferenceController.onStop();
assertThat(getRegisteredBroadcastReceivers()).doesNotContain(mBluetoothChangedReceiver);
verify(mAlwaysDiscoverable, never()).stop();
}
@Test @Test
public void onBluetoothStateChanged_bluetoothOn_updateTitle() { public void onBluetoothStateChanged_bluetoothOn_updateTitle() {
BluetoothAdapter.getDefaultAdapter().setName(DEVICE_NAME); BluetoothAdapter.getDefaultAdapter().setName(DEVICE_NAME);