Merge "Fix connected devices settings jank issue" into sc-dev
diff --git a/res/xml/connected_devices.xml b/res/xml/connected_devices.xml
index 75878f9..e7e3c2c 100644
--- a/res/xml/connected_devices.xml
+++ b/res/xml/connected_devices.xml
@@ -40,24 +40,13 @@
android:key="add_bt_devices"
android:title="@string/bluetooth_pairing_pref_title"
android:icon="@drawable/ic_add_24dp"
- android:fragment="com.android.settings.bluetooth.BluetoothPairingDetail"
- settings:allowDividerAbove="true"
- settings:keywords="@string/keywords_add_bt_device"
- settings:userRestriction="no_config_bluetooth"
- settings:useAdminDisabledSummary="true"
- settings:controller="com.android.settings.connecteddevice.AddDevicePreferenceController"/>
-
- <com.android.settingslib.RestrictedPreference
- android:key="add_bt_devices_summary"
- android:title="@string/bluetooth_pairing_pref_title"
- android:icon="@drawable/ic_add_24dp"
android:summary="@string/connected_device_add_device_summary"
android:fragment="com.android.settings.bluetooth.BluetoothPairingDetail"
settings:allowDividerAbove="true"
settings:keywords="@string/keywords_add_bt_device"
settings:userRestriction="no_config_bluetooth"
settings:useAdminDisabledSummary="true"
- settings:controller="com.android.settings.connecteddevice.AddDeviceSummaryPreferenceController"/>
+ settings:controller="com.android.settings.connecteddevice.AddDevicePreferenceController"/>
<PreferenceCategory
android:key="previously_connected_devices"
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java b/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java
index d42a1be..e8751dc 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java
@@ -41,6 +41,12 @@
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
+ @Override
+ public int getAvailabilityStatus() {
+ return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()
+ ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+ }
+
/**
* Set the {@link Fragment} that used to show {@link LocalDeviceNameDialogFragment}
* in {@code handlePreferenceTreeClick}
diff --git a/src/com/android/settings/connecteddevice/AddDevicePreferenceController.java b/src/com/android/settings/connecteddevice/AddDevicePreferenceController.java
index 6fdc7e5..a2d477d 100644
--- a/src/com/android/settings/connecteddevice/AddDevicePreferenceController.java
+++ b/src/com/android/settings/connecteddevice/AddDevicePreferenceController.java
@@ -33,7 +33,7 @@
/**
* Controller to maintain the {@link androidx.preference.Preference} for add
- * device without summary at beginning. It monitor Bluetooth's status(on/off) and decide if need
+ * device. It monitor Bluetooth's status(on/off) and decide if need
* to show summary or not.
*/
public class AddDevicePreferenceController extends BasePreferenceController
@@ -43,12 +43,11 @@
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- updateState();
+ updateState(mPreference);
}
};
private IntentFilter mIntentFilter;
-
- protected BluetoothAdapter mBluetoothAdapter;
+ private BluetoothAdapter mBluetoothAdapter;
public AddDevicePreferenceController(Context context, String key) {
super(context, key);
@@ -59,7 +58,6 @@
@Override
public void onStart() {
mContext.registerReceiver(mReceiver, mIntentFilter);
- updateState(mPreference);
}
@Override
@@ -72,13 +70,13 @@
super.displayPreference(screen);
if (isAvailable()) {
mPreference = screen.findPreference(getPreferenceKey());
+ updateState(mPreference);
}
}
@Override
public int getAvailabilityStatus() {
return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)
- && isBluetoothEnabled()
? AVAILABLE
: UNSUPPORTED_ON_DEVICE;
}
@@ -93,8 +91,4 @@
protected boolean isBluetoothEnabled() {
return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled();
}
-
- void updateState() {
- updateState(mPreference);
- }
}
diff --git a/src/com/android/settings/connecteddevice/AddDeviceSummaryPreferenceController.java b/src/com/android/settings/connecteddevice/AddDeviceSummaryPreferenceController.java
deleted file mode 100644
index 4513473..0000000
--- a/src/com/android/settings/connecteddevice/AddDeviceSummaryPreferenceController.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.settings.connecteddevice;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-
-/**
- * Controller to maintain the {@link androidx.preference.Preference} for add
- * device with summary at beginning. It monitor Bluetooth's status(on/off) and decide if need
- * to show summary or not.
- */
-public class AddDeviceSummaryPreferenceController extends AddDevicePreferenceController {
-
- public AddDeviceSummaryPreferenceController(Context context, String key) {
- super(context, key);
- }
-
- @Override
- public int getAvailabilityStatus() {
- return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)
- && !isBluetoothEnabled()
- ? AVAILABLE
- : UNSUPPORTED_ON_DEVICE;
- }
-}
diff --git a/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java b/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java
index 4a29485..4469d26 100644
--- a/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java
+++ b/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java
@@ -103,6 +103,7 @@
final Context context = screen.getContext();
mBluetoothDeviceUpdater.setPrefContext(context);
mSavedDockUpdater.setPreferenceContext(context);
+ mBluetoothDeviceUpdater.forceUpdate();
}
}
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/AddDevicePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/AddDevicePreferenceControllerTest.java
index c3841c9..7384d3a 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/AddDevicePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/AddDevicePreferenceControllerTest.java
@@ -87,7 +87,7 @@
@Test
public void addDevice_bt_resume_on_then_off() {
when(mBluetoothAdapter.isEnabled()).thenReturn(true);
- mAddDevicePreferenceController.updateState();
+ mAddDevicePreferenceController.updateState(mAddDevicePreference);
assertTrue(TextUtils.isEmpty(mAddDevicePreference.getSummary()));
Intent intent = new Intent(BluetoothAdapter.ACTION_STATE_CHANGED);
@@ -103,7 +103,7 @@
@Test
public void addDevice_bt_resume_off_then_on() {
when(mBluetoothAdapter.isEnabled()).thenReturn(false);
- mAddDevicePreferenceController.updateState();
+ mAddDevicePreferenceController.updateState(mAddDevicePreference);
assertThat(mAddDevicePreference.getSummary()).isEqualTo(
mContext.getString(R.string.connected_device_add_device_summary));
@@ -131,9 +131,8 @@
}
@Test
- public void getAvailabilityStatus_bluetoothIsDisabled_unSupported() {
- mPackageManager.setSystemFeature(PackageManager.FEATURE_BLUETOOTH, true);
- when(mBluetoothAdapter.isEnabled()).thenReturn(false);
+ public void getAvailabilityStatus_noBluetoothFeature_unSupported() {
+ mPackageManager.setSystemFeature(PackageManager.FEATURE_BLUETOOTH, false);
assertThat(mAddDevicePreferenceController.getAvailabilityStatus())
.isEqualTo(UNSUPPORTED_ON_DEVICE);
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/AddDeviceSummaryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/AddDeviceSummaryPreferenceControllerTest.java
deleted file mode 100644
index e134a16..0000000
--- a/tests/robotests/src/com/android/settings/connecteddevice/AddDeviceSummaryPreferenceControllerTest.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.settings.connecteddevice;
-
-import static com.android.settings.core.BasePreferenceController.AVAILABLE;
-import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.when;
-
-import android.bluetooth.BluetoothAdapter;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.text.TextUtils;
-
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.R;
-import com.android.settingslib.RestrictedPreference;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.Shadows;
-import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowApplicationPackageManager;
-import org.robolectric.util.ReflectionHelpers;
-
-@RunWith(RobolectricTestRunner.class)
-@Config(shadows = ShadowApplicationPackageManager.class)
-public class AddDeviceSummaryPreferenceControllerTest {
-
- @Mock
- private PreferenceScreen mScreen;
- @Mock
- private BluetoothAdapter mBluetoothAdapter;
-
- private Context mContext;
- private AddDeviceSummaryPreferenceController mAddDeviceSummaryPreferenceController;
- private RestrictedPreference mAddDevicePreference;
- private ShadowApplicationPackageManager mPackageManager;
-
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
-
- mContext = RuntimeEnvironment.application;
- mPackageManager = (ShadowApplicationPackageManager) Shadows.shadowOf(
- mContext.getPackageManager());
- mPackageManager.setSystemFeature(PackageManager.FEATURE_BLUETOOTH, true);
-
- mAddDeviceSummaryPreferenceController = new AddDeviceSummaryPreferenceController(mContext,
- "add_bt_devices");
- ReflectionHelpers.setField(mAddDeviceSummaryPreferenceController,
- "mBluetoothAdapter", mBluetoothAdapter);
-
- String key = mAddDeviceSummaryPreferenceController.getPreferenceKey();
- mAddDevicePreference = new RestrictedPreference(mContext);
- mAddDevicePreference.setKey(key);
- when(mScreen.findPreference(key)).thenReturn(mAddDevicePreference);
- when(mBluetoothAdapter.isEnabled()).thenReturn(false);
- mAddDeviceSummaryPreferenceController.displayPreference(mScreen);
- }
-
- @Test
- public void getSummary_btOnThenOff_summaryShouldBeShown() {
- when(mBluetoothAdapter.isEnabled()).thenReturn(true);
-
- mAddDeviceSummaryPreferenceController.updateState();
-
- assertTrue(TextUtils.isEmpty(mAddDevicePreference.getSummary()));
-
- Intent intent = new Intent(BluetoothAdapter.ACTION_STATE_CHANGED);
- intent.putExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.STATE_OFF);
- BroadcastReceiver receiver = ReflectionHelpers.getField(
- mAddDeviceSummaryPreferenceController, "mReceiver");
- when(mBluetoothAdapter.isEnabled()).thenReturn(false);
-
- receiver.onReceive(mContext, intent);
-
- assertThat(mAddDevicePreference.getSummary()).isEqualTo(
- mContext.getString(R.string.connected_device_add_device_summary));
- }
-
- @Test
- public void getSummary_btOffThenOn_summaryShouldNotBeShown() {
- when(mBluetoothAdapter.isEnabled()).thenReturn(false);
-
- mAddDeviceSummaryPreferenceController.updateState();
-
- assertThat(mAddDevicePreference.getSummary()).isEqualTo(
- mContext.getString(R.string.connected_device_add_device_summary));
-
- Intent intent = new Intent(BluetoothAdapter.ACTION_STATE_CHANGED);
- intent.putExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.STATE_ON);
- BroadcastReceiver receiver = ReflectionHelpers.getField(
- mAddDeviceSummaryPreferenceController, "mReceiver");
- when(mBluetoothAdapter.isEnabled()).thenReturn(true);
-
- receiver.onReceive(mContext, intent);
-
- assertTrue(TextUtils.isEmpty(mAddDevicePreference.getSummary()));
- }
-
- @Test
- public void getAvailabilityStatus_notHaveBluetoothFeature_unSupported() {
- mPackageManager.setSystemFeature(PackageManager.FEATURE_BLUETOOTH, false);
-
- assertThat(mAddDeviceSummaryPreferenceController.getAvailabilityStatus())
- .isEqualTo(UNSUPPORTED_ON_DEVICE);
- }
-
- @Test
- public void getAvailabilityStatus_haveBluetoothFeature_supported() {
- mPackageManager.setSystemFeature(PackageManager.FEATURE_BLUETOOTH, true);
-
- assertThat(mAddDeviceSummaryPreferenceController.getAvailabilityStatus())
- .isEqualTo(AVAILABLE);
- }
-
- @Test
- public void getAvailabilityStatus_bluetoothIsEnabled_unSupported() {
- mPackageManager.setSystemFeature(PackageManager.FEATURE_BLUETOOTH, true);
- when(mBluetoothAdapter.isEnabled()).thenReturn(true);
-
- assertThat(mAddDeviceSummaryPreferenceController.getAvailabilityStatus())
- .isEqualTo(UNSUPPORTED_ON_DEVICE);
- }
-}