Loading res/xml/connected_devices.xml +12 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,6 @@ android:key="add_bt_devices" 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" Loading @@ -48,6 +47,18 @@ 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"/> <PreferenceCategory android:key="previously_connected_devices" android:title="@string/connected_device_previously_connected_title" Loading src/com/android/settings/connecteddevice/AddDevicePreferenceController.java +11 −3 Original line number Diff line number Diff line Loading @@ -33,7 +33,8 @@ import com.android.settingslib.core.lifecycle.events.OnStop; /** * Controller to maintain the {@link androidx.preference.Preference} for add * device. It monitor Bluetooth's status(on/off) and decide if need to show summary or not. * device without summary at beginning. It monitor Bluetooth's status(on/off) and decide if need * to show summary or not. */ public class AddDevicePreferenceController extends BasePreferenceController implements LifecycleObserver, OnStart, OnStop { Loading @@ -46,7 +47,8 @@ public class AddDevicePreferenceController extends BasePreferenceController } }; private IntentFilter mIntentFilter; private BluetoothAdapter mBluetoothAdapter; protected BluetoothAdapter mBluetoothAdapter; public AddDevicePreferenceController(Context context, String key) { super(context, key); Loading @@ -57,6 +59,7 @@ public class AddDevicePreferenceController extends BasePreferenceController @Override public void onStart() { mContext.registerReceiver(mReceiver, mIntentFilter); updateState(mPreference); } @Override Loading @@ -75,17 +78,22 @@ public class AddDevicePreferenceController extends BasePreferenceController @Override public int getAvailabilityStatus() { return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH) && isBluetoothEnabled() ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } @Override public CharSequence getSummary() { return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled() return isBluetoothEnabled() ? "" : mContext.getString(R.string.connected_device_add_device_summary); } protected boolean isBluetoothEnabled() { return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled(); } void updateState() { updateState(mPreference); } Loading src/com/android/settings/connecteddevice/AddDeviceSummaryPreferenceController.java 0 → 100644 +39 −0 Original line number Diff line number Diff line /* * 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; } } tests/robotests/src/com/android/settings/connecteddevice/AddDevicePreferenceControllerTest.java +10 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ public class AddDevicePreferenceControllerTest { String key = mAddDevicePreferenceController.getPreferenceKey(); mAddDevicePreference = new RestrictedPreference(mContext); mAddDevicePreference.setKey(key); when(mBluetoothAdapter.isEnabled()).thenReturn(true); when(mScreen.findPreference(key)).thenReturn(mAddDevicePreference); mAddDevicePreferenceController.displayPreference(mScreen); } Loading Loading @@ -128,4 +129,13 @@ public class AddDevicePreferenceControllerTest { assertThat(mAddDevicePreferenceController.getAvailabilityStatus()) .isEqualTo(AVAILABLE); } @Test public void getAvailabilityStatus_bluetoothIsDisabled_unSupported() { mPackageManager.setSystemFeature(PackageManager.FEATURE_BLUETOOTH, true); when(mBluetoothAdapter.isEnabled()).thenReturn(false); assertThat(mAddDevicePreferenceController.getAvailabilityStatus()) .isEqualTo(UNSUPPORTED_ON_DEVICE); } } tests/robotests/src/com/android/settings/connecteddevice/AddDeviceSummaryPreferenceControllerTest.java 0 → 100644 +151 −0 Original line number Diff line number Diff line /* * 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); } } Loading
res/xml/connected_devices.xml +12 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,6 @@ android:key="add_bt_devices" 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" Loading @@ -48,6 +47,18 @@ 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"/> <PreferenceCategory android:key="previously_connected_devices" android:title="@string/connected_device_previously_connected_title" Loading
src/com/android/settings/connecteddevice/AddDevicePreferenceController.java +11 −3 Original line number Diff line number Diff line Loading @@ -33,7 +33,8 @@ import com.android.settingslib.core.lifecycle.events.OnStop; /** * Controller to maintain the {@link androidx.preference.Preference} for add * device. It monitor Bluetooth's status(on/off) and decide if need to show summary or not. * device without summary at beginning. It monitor Bluetooth's status(on/off) and decide if need * to show summary or not. */ public class AddDevicePreferenceController extends BasePreferenceController implements LifecycleObserver, OnStart, OnStop { Loading @@ -46,7 +47,8 @@ public class AddDevicePreferenceController extends BasePreferenceController } }; private IntentFilter mIntentFilter; private BluetoothAdapter mBluetoothAdapter; protected BluetoothAdapter mBluetoothAdapter; public AddDevicePreferenceController(Context context, String key) { super(context, key); Loading @@ -57,6 +59,7 @@ public class AddDevicePreferenceController extends BasePreferenceController @Override public void onStart() { mContext.registerReceiver(mReceiver, mIntentFilter); updateState(mPreference); } @Override Loading @@ -75,17 +78,22 @@ public class AddDevicePreferenceController extends BasePreferenceController @Override public int getAvailabilityStatus() { return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH) && isBluetoothEnabled() ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } @Override public CharSequence getSummary() { return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled() return isBluetoothEnabled() ? "" : mContext.getString(R.string.connected_device_add_device_summary); } protected boolean isBluetoothEnabled() { return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled(); } void updateState() { updateState(mPreference); } Loading
src/com/android/settings/connecteddevice/AddDeviceSummaryPreferenceController.java 0 → 100644 +39 −0 Original line number Diff line number Diff line /* * 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; } }
tests/robotests/src/com/android/settings/connecteddevice/AddDevicePreferenceControllerTest.java +10 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ public class AddDevicePreferenceControllerTest { String key = mAddDevicePreferenceController.getPreferenceKey(); mAddDevicePreference = new RestrictedPreference(mContext); mAddDevicePreference.setKey(key); when(mBluetoothAdapter.isEnabled()).thenReturn(true); when(mScreen.findPreference(key)).thenReturn(mAddDevicePreference); mAddDevicePreferenceController.displayPreference(mScreen); } Loading Loading @@ -128,4 +129,13 @@ public class AddDevicePreferenceControllerTest { assertThat(mAddDevicePreferenceController.getAvailabilityStatus()) .isEqualTo(AVAILABLE); } @Test public void getAvailabilityStatus_bluetoothIsDisabled_unSupported() { mPackageManager.setSystemFeature(PackageManager.FEATURE_BLUETOOTH, true); when(mBluetoothAdapter.isEnabled()).thenReturn(false); assertThat(mAddDevicePreferenceController.getAvailabilityStatus()) .isEqualTo(UNSUPPORTED_ON_DEVICE); } }
tests/robotests/src/com/android/settings/connecteddevice/AddDeviceSummaryPreferenceControllerTest.java 0 → 100644 +151 −0 Original line number Diff line number Diff line /* * 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); } }