Remove DeviceProfilesSettings
It's not used anymore since we have a bt detail page.
Change-Id: Ib2ecfabf544913701ca613048e9f37e297ffff18
Fixes: 111305587
Test: robo still pass
diff --git a/res/layout/device_profiles_settings.xml b/res/layout/device_profiles_settings.xml
deleted file mode 100644
index 260fa05..0000000
--- a/res/layout/device_profiles_settings.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-
-<ScrollView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingStart="25dp"
- android:paddingEnd="25dp">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/bluetooth_preference_paired_dialog_name_label"
- android:textAppearance="@android:style/TextAppearance.Material.Body1"
- android:textColor="?android:attr/textColorSecondary"
- android:textDirection="locale"
- android:paddingTop="16dp"
- style="@style/bt_item_label"/>
-
- <EditText
- android:id="@+id/name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:inputType="textNoSuggestions"
- android:maxLength="@integer/bluetooth_name_length"
- android:singleLine="true"
- android:paddingBottom="@dimen/bluetooth_dialog_padding"
- android:textDirection="locale"
- style="@style/bt_item_edit_content"/>
-
- <TextView
- android:id="@+id/profiles_label"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="16dp"
- android:paddingBottom="4dp"
- android:text="@string/bluetooth_device_advanced_profile_header_title"
- android:textAppearance="@android:style/TextAppearance.Material.Body1"
- android:textColor="?android:attr/textColorSecondary"/>
-
-
- <LinearLayout
- android:id="@+id/profiles_section"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
-
- </LinearLayout>
-
-</ScrollView>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 981893d..02d3182 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -185,7 +185,6 @@
<!-- Bluetooth Preferences -->
<dimen name="bluetooth_dialog_padding">8dip</dimen>
<dimen name="bluetooth_dialog_padding_top">20dp</dimen>
- <integer name="bluetooth_name_length">32</integer>
<dimen name="bluetooth_pairing_padding">24dp</dimen>
<dimen name="bluetooth_pairing_edittext_padding">21dp</dimen>
<dimen name="bluetooth_checkbox_padding">16dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d799ea5..8aba646 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -268,10 +268,6 @@
<string name="bluetooth_is_disconnect_question">Disconnect <xliff:g id="device_name">%1$s</xliff:g>?</string>
<!-- Bluetooth broadcasting settings, option to enable/disable broadcasting -->
<string name="bluetooth_broadcasting">Broadcasting</string>
- <!-- Bluetooth settings. Dialog title to disable a single profile of a device. [CHAR LIMIT=40] -->
- <string name="bluetooth_disable_profile_title">Disable profile?</string>
- <!-- Bluetooth settings. Message for disabling a profile of a bluetooth device. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_disable_profile_message">This will disable:<br><b><xliff:g id="profile_name">%1$s</xliff:g></b><br><br>From:<br><b><xliff:g id="device_name">%2$s</xliff:g></b></string>
<!-- Bluetooth settings. Message when the device state is unknown -->
<string name="bluetooth_unknown" />
@@ -1592,8 +1588,6 @@
<string name="bluetooth_preference_device_settings">Device settings</string>
<!-- Bluetooth settings: Paired dialog title [CHAR LIMIT=40] -->
<string name="bluetooth_preference_paired_dialog_title">Paired device</string>
- <!-- Bluetooth settings: Name label [CHAR LIMIT=40] -->
- <string name="bluetooth_preference_paired_dialog_name_label">Name</string>
<!-- Bluetooth settings: Checkbox label for enable/disable internet connection. [CHAR LIMIT=40] -->
<string name="bluetooth_preference_paired_dialog_internet_option">Internet connection</string>
<!-- Bluetooth settings: Checkbox label for enable/disable keyboard connection. [CHAR LIMIT=40] -->
@@ -1608,8 +1602,6 @@
<string name="bluetooth_pairing_dialog_contants_request"><xliff:g id="device_name">%1$s</xliff:g> wants to access your contacts and call history.</string>
<!-- Bluetooth settings: paring permission message. [CHAR LIMIT=100] -->
<string name="bluetooth_pairing_dialog_paring_request"><xliff:g id="device_name">%1$s</xliff:g> wants to pair with Bluetooth. When connected, it will have access to your contacts and call history.</string>
- <!-- Bluetooth settings: The sub heading for devices which have already been paired with this device. [CHAR LIMIT=40] -->
- <string name="bluetooth_preference_paired_devices">Paired devices</string>
<!-- Bluetooth settings: The sub heading for available devices during and after scanning. [CHAR LIMIT=40] -->
<string name="bluetooth_preference_found_media_devices">Available devices</string>
<!-- Bluetooth settings: The message displayed if no Bluetooth devices were found. [CHAR LIMIT=40] -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 37219d6..e7d1164 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -157,13 +157,6 @@
<item name="android:gravity">start</item>
</style>
- <style name="bt_item_label">
- <item name="android:layout_width">wrap_content</item>
- <item name="android:layout_height">wrap_content</item>
- <item name="android:textSize">14sp</item>
- <item name="android:textAlignment">viewStart</item>
- </style>
-
<style name="bt_item_edit_content">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
diff --git a/src/com/android/settings/bluetooth/DeviceProfilesSettings.java b/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
deleted file mode 100644
index e30fe86..0000000
--- a/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
+++ /dev/null
@@ -1,434 +0,0 @@
-/*
- * Copyright (C) 2011 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.bluetooth;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothProfile;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.text.Html;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.CheckBox;
-import android.widget.EditText;
-import android.widget.TextView;
-
-import com.android.internal.logging.nano.MetricsProto;
-import com.android.settings.R;
-import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
-import com.android.settingslib.bluetooth.A2dpProfile;
-import com.android.settingslib.bluetooth.CachedBluetoothDevice;
-import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
-import com.android.settingslib.bluetooth.LocalBluetoothManager;
-import com.android.settingslib.bluetooth.LocalBluetoothProfile;
-import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
-import com.android.settingslib.bluetooth.MapProfile;
-import com.android.settingslib.bluetooth.PanProfile;
-import com.android.settingslib.bluetooth.PbapServerProfile;
-
-import androidx.annotation.VisibleForTesting;
-
-public final class DeviceProfilesSettings extends InstrumentedDialogFragment implements
- CachedBluetoothDevice.Callback, DialogInterface.OnClickListener, OnClickListener {
- private static final String TAG = "DeviceProfilesSettings";
-
- public static final String ARG_DEVICE_ADDRESS = "device_address";
-
- private static final String KEY_PROFILE_CONTAINER = "profile_container";
- private static final String KEY_UNPAIR = "unpair";
- private static final String KEY_PBAP_SERVER = "PBAP Server";
- @VisibleForTesting
- static final String HIGH_QUALITY_AUDIO_PREF_TAG = "A2dpProfileHighQualityAudio";
-
- private CachedBluetoothDevice mCachedDevice;
- private LocalBluetoothManager mManager;
- private LocalBluetoothProfileManager mProfileManager;
-
- private ViewGroup mProfileContainer;
- private TextView mProfileLabel;
-
- private AlertDialog mDisconnectDialog;
- private boolean mProfileGroupIsRemoved;
-
- private View mRootView;
-
- @Override
- public int getMetricsCategory() {
- return MetricsProto.MetricsEvent.DIALOG_BLUETOOTH_PAIRED_DEVICE_PROFILE;
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- mManager = Utils.getLocalBtManager(getActivity());
- CachedBluetoothDeviceManager deviceManager = mManager.getCachedDeviceManager();
-
- String address = getArguments().getString(ARG_DEVICE_ADDRESS);
- BluetoothDevice remoteDevice = mManager.getBluetoothAdapter().getRemoteDevice(address);
-
- mCachedDevice = deviceManager.findDevice(remoteDevice);
- if (mCachedDevice == null) {
- mCachedDevice = deviceManager.addDevice(mManager.getBluetoothAdapter(),
- mManager.getProfileManager(), remoteDevice);
- }
- mProfileManager = mManager.getProfileManager();
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- mRootView = LayoutInflater.from(getContext()).inflate(R.layout.device_profiles_settings,
- null);
- mProfileContainer = (ViewGroup) mRootView.findViewById(R.id.profiles_section);
- mProfileLabel = (TextView) mRootView.findViewById(R.id.profiles_label);
- final EditText deviceName = (EditText) mRootView.findViewById(R.id.name);
- deviceName.setText(mCachedDevice.getName(), TextView.BufferType.EDITABLE);
- return new AlertDialog.Builder(getContext())
- .setView(mRootView)
- .setNeutralButton(R.string.forget, this)
- .setPositiveButton(R.string.okay, this)
- .setTitle(R.string.bluetooth_preference_paired_devices)
- .create();
- }
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- switch (which) {
- case DialogInterface.BUTTON_POSITIVE:
- EditText deviceName = (EditText) mRootView.findViewById(R.id.name);
- mCachedDevice.setName(deviceName.getText().toString());
- break;
- case DialogInterface.BUTTON_NEUTRAL:
- mCachedDevice.unpair();
- break;
- }
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- if (mDisconnectDialog != null) {
- mDisconnectDialog.dismiss();
- mDisconnectDialog = null;
- }
- if (mCachedDevice != null) {
- mCachedDevice.unregisterCallback(this);
- }
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- }
-
- @Override
- public void onResume() {
- super.onResume();
-
- mManager.setForegroundActivity(getActivity());
- if (mCachedDevice != null) {
- mCachedDevice.registerCallback(this);
- if (mCachedDevice.getBondState() == BluetoothDevice.BOND_NONE) {
- dismiss();
- return;
- }
- addPreferencesForProfiles();
- refresh();
- }
- }
-
- @Override
- public void onPause() {
- super.onPause();
-
- if (mCachedDevice != null) {
- mCachedDevice.unregisterCallback(this);
- }
-
- mManager.setForegroundActivity(null);
- }
-
- private void addPreferencesForProfiles() {
- mProfileContainer.removeAllViews();
- for (LocalBluetoothProfile profile : mCachedDevice.getConnectableProfiles()) {
- CheckBox pref = createProfilePreference(profile);
- // MAP and PBAP profiles would be added based on permission access
- if (!((profile instanceof PbapServerProfile) ||
- (profile instanceof MapProfile))) {
- mProfileContainer.addView(pref);
- }
-
- if (profile instanceof A2dpProfile) {
- BluetoothDevice device = mCachedDevice.getDevice();
- A2dpProfile a2dpProfile = (A2dpProfile) profile;
- if (a2dpProfile.supportsHighQualityAudio(device)) {
- CheckBox highQualityPref = new CheckBox(getActivity());
- highQualityPref.setTag(HIGH_QUALITY_AUDIO_PREF_TAG);
- highQualityPref.setOnClickListener(v -> {
- a2dpProfile.setHighQualityAudioEnabled(device, highQualityPref.isChecked());
- });
- highQualityPref.setVisibility(View.GONE);
- mProfileContainer.addView(highQualityPref);
- }
- refreshProfilePreference(pref, profile);
- }
- }
-
- final int pbapPermission = mCachedDevice.getPhonebookPermissionChoice();
- Log.d(TAG, "addPreferencesForProfiles: pbapPermission = " + pbapPermission);
- // Only provide PBAP cabability if the client device has requested PBAP.
- if (pbapPermission != CachedBluetoothDevice.ACCESS_UNKNOWN) {
- final PbapServerProfile psp = mManager.getProfileManager().getPbapProfile();
- CheckBox pbapPref = createProfilePreference(psp);
- mProfileContainer.addView(pbapPref);
- }
-
- final MapProfile mapProfile = mManager.getProfileManager().getMapProfile();
- final int mapPermission = mCachedDevice.getMessagePermissionChoice();
- Log.d(TAG, "addPreferencesForProfiles: mapPermission = " + mapPermission);
- if (mapPermission != CachedBluetoothDevice.ACCESS_UNKNOWN) {
- CheckBox mapPreference = createProfilePreference(mapProfile);
- mProfileContainer.addView(mapPreference);
- }
-
- showOrHideProfileGroup();
- }
-
- private void showOrHideProfileGroup() {
- int numProfiles = mProfileContainer.getChildCount();
- if (!mProfileGroupIsRemoved && numProfiles == 0) {
- mProfileContainer.setVisibility(View.GONE);
- mProfileLabel.setVisibility(View.GONE);
- mProfileGroupIsRemoved = true;
- } else if (mProfileGroupIsRemoved && numProfiles != 0) {
- mProfileContainer.setVisibility(View.VISIBLE);
- mProfileLabel.setVisibility(View.VISIBLE);
- mProfileGroupIsRemoved = false;
- }
- }
-
- /**
- * Creates a checkbox preference for the particular profile. The key will be
- * the profile's name.
- *
- * @param profile The profile for which the preference controls.
- * @return A preference that allows the user to choose whether this profile
- * will be connected to.
- */
- private CheckBox createProfilePreference(LocalBluetoothProfile profile) {
- CheckBox pref = new CheckBox(getActivity());
- pref.setTag(profile.toString());
- pref.setText(profile.getNameResource(mCachedDevice.getDevice()));
- pref.setOnClickListener(this);
-
- refreshProfilePreference(pref, profile);
-
- return pref;
- }
-
- @Override
- public void onClick(View v) {
- if (v instanceof CheckBox) {
- LocalBluetoothProfile prof = getProfileOf(v);
- onProfileClicked(prof, (CheckBox) v);
- }
- }
-
- private void onProfileClicked(LocalBluetoothProfile profile, CheckBox profilePref) {
- BluetoothDevice device = mCachedDevice.getDevice();
-
- if (!profilePref.isChecked()) {
- // Recheck it, until the dialog is done.
- profilePref.setChecked(true);
- askDisconnect(mManager.getForegroundActivity(), profile);
- } else {
- if (profile instanceof MapProfile) {
- mCachedDevice.setMessagePermissionChoice(BluetoothDevice.ACCESS_ALLOWED);
- }
- if (profile instanceof PbapServerProfile) {
- mCachedDevice.setPhonebookPermissionChoice(BluetoothDevice.ACCESS_ALLOWED);
- refreshProfilePreference(profilePref, profile);
- // PBAP server is not preffered profile and cannot initiate connection, so return
- return;
- }
- if (profile.isPreferred(device)) {
- // profile is preferred but not connected: disable auto-connect
- if (profile instanceof PanProfile) {
- mCachedDevice.connectProfile(profile);
- } else {
- profile.setPreferred(device, false);
- }
- } else {
- profile.setPreferred(device, true);
- mCachedDevice.connectProfile(profile);
- }
- refreshProfilePreference(profilePref, profile);
- }
- }
-
- private void askDisconnect(Context context,
- final LocalBluetoothProfile profile) {
- // local reference for callback
- final CachedBluetoothDevice device = mCachedDevice;
- String name = device.getName();
- if (TextUtils.isEmpty(name)) {
- name = context.getString(R.string.bluetooth_device);
- }
-
- String profileName = context.getString(profile.getNameResource(device.getDevice()));
-
- String title = context.getString(R.string.bluetooth_disable_profile_title);
- String message = context.getString(R.string.bluetooth_disable_profile_message,
- profileName, name);
-
- DialogInterface.OnClickListener disconnectListener =
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
-
- // Disconnect only when user has selected OK otherwise ignore
- if (which == DialogInterface.BUTTON_POSITIVE) {
- device.disconnect(profile);
- profile.setPreferred(device.getDevice(), false);
- if (profile instanceof MapProfile) {
- device.setMessagePermissionChoice(BluetoothDevice.ACCESS_REJECTED);
- }
- if (profile instanceof PbapServerProfile) {
- device.setPhonebookPermissionChoice(BluetoothDevice.ACCESS_REJECTED);
- }
- }
- refreshProfilePreference(findProfile(profile.toString()), profile);
- }
- };
-
- mDisconnectDialog = Utils.showDisconnectDialog(context,
- mDisconnectDialog, disconnectListener, title, Html.fromHtml(message));
- }
-
- @Override
- public void onDeviceAttributesChanged() {
- refresh();
- }
-
- private void refresh() {
- final EditText deviceNameField = (EditText) mRootView.findViewById(R.id.name);
- if (deviceNameField != null) {
- deviceNameField.setText(mCachedDevice.getName());
- com.android.settings.Utils.setEditTextCursorPosition(deviceNameField);
- }
-
- refreshProfiles();
- }
-
- private void refreshProfiles() {
- for (LocalBluetoothProfile profile : mCachedDevice.getConnectableProfiles()) {
- CheckBox profilePref = findProfile(profile.toString());
- if (profilePref == null) {
- profilePref = createProfilePreference(profile);
- mProfileContainer.addView(profilePref);
- } else {
- refreshProfilePreference(profilePref, profile);
- }
- }
- for (LocalBluetoothProfile profile : mCachedDevice.getRemovedProfiles()) {
- CheckBox profilePref = findProfile(profile.toString());
- if (profilePref != null) {
-
- if (profile instanceof PbapServerProfile) {
- final int pbapPermission = mCachedDevice.getPhonebookPermissionChoice();
- Log.d(TAG, "refreshProfiles: pbapPermission = " + pbapPermission);
- if (pbapPermission != CachedBluetoothDevice.ACCESS_UNKNOWN)
- continue;
- }
- if (profile instanceof MapProfile) {
- final int mapPermission = mCachedDevice.getMessagePermissionChoice();
- Log.d(TAG, "refreshProfiles: mapPermission = " + mapPermission);
- if (mapPermission != CachedBluetoothDevice.ACCESS_UNKNOWN)
- continue;
- }
- Log.d(TAG, "Removing " + profile.toString() + " from profile list");
- mProfileContainer.removeView(profilePref);
- }
- }
-
- showOrHideProfileGroup();
- }
-
- private CheckBox findProfile(String profile) {
- return (CheckBox) mProfileContainer.findViewWithTag(profile);
- }
-
- private void refreshProfilePreference(CheckBox profilePref,
- LocalBluetoothProfile profile) {
- BluetoothDevice device = mCachedDevice.getDevice();
-
- // Gray out checkbox while connecting and disconnecting.
- profilePref.setEnabled(!mCachedDevice.isBusy());
-
- if (profile instanceof MapProfile) {
- profilePref.setChecked(mCachedDevice.getMessagePermissionChoice()
- == CachedBluetoothDevice.ACCESS_ALLOWED);
-
- } else if (profile instanceof PbapServerProfile) {
- profilePref.setChecked(mCachedDevice.getPhonebookPermissionChoice()
- == CachedBluetoothDevice.ACCESS_ALLOWED);
-
- } else if (profile instanceof PanProfile) {
- profilePref.setChecked(profile.getConnectionStatus(device) ==
- BluetoothProfile.STATE_CONNECTED);
-
- } else {
- profilePref.setChecked(profile.isPreferred(device));
- }
- if (profile instanceof A2dpProfile) {
- A2dpProfile a2dpProfile = (A2dpProfile) profile;
- View v = mProfileContainer.findViewWithTag(HIGH_QUALITY_AUDIO_PREF_TAG);
- if (v instanceof CheckBox) {
- CheckBox highQualityPref = (CheckBox) v;
- highQualityPref.setText(a2dpProfile.getHighQualityAudioOptionLabel(device));
- highQualityPref.setChecked(a2dpProfile.isHighQualityAudioEnabled(device));
-
- if (a2dpProfile.isPreferred(device)) {
- v.setVisibility(View.VISIBLE);
- v.setEnabled(!mCachedDevice.isBusy());
- } else {
- v.setVisibility(View.GONE);
- }
- }
- }
- }
-
- private LocalBluetoothProfile getProfileOf(View v) {
- if (!(v instanceof CheckBox)) {
- return null;
- }
- String key = (String) v.getTag();
- if (TextUtils.isEmpty(key)) return null;
-
- try {
- return mProfileManager.getProfileByName(key);
- } catch (IllegalArgumentException ignored) {
- return null;
- }
- }
-}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/DeviceProfilesSettingsTest.java b/tests/robotests/src/com/android/settings/bluetooth/DeviceProfilesSettingsTest.java
deleted file mode 100644
index 1065eb6..0000000
--- a/tests/robotests/src/com/android/settings/bluetooth/DeviceProfilesSettingsTest.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (C) 2017 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.bluetooth;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.os.Bundle;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.CheckBox;
-
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settingslib.R;
-import com.android.settingslib.bluetooth.A2dpProfile;
-import com.android.settingslib.bluetooth.CachedBluetoothDevice;
-import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
-import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
-import com.android.settingslib.bluetooth.LocalBluetoothManager;
-import com.android.settingslib.bluetooth.LocalBluetoothProfile;
-import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.util.FragmentTestUtil;
-import org.robolectric.util.ReflectionHelpers;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-public class DeviceProfilesSettingsTest {
-
- @Mock
- private LocalBluetoothManager mManager;
- @Mock
- private LocalBluetoothAdapter mAdapter;
- @Mock
- private LocalBluetoothProfileManager mProfileManager;
- @Mock
- private CachedBluetoothDeviceManager mDeviceManager;
- @Mock
- private CachedBluetoothDevice mCachedDevice;
- @Mock
- private A2dpProfile mProfile;
-
- private DeviceProfilesSettings mFragment;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
-
- when(mProfile.getNameResource(any())).thenReturn(R.string.bluetooth_profile_a2dp);
- List<LocalBluetoothProfile> profiles = new ArrayList<>();
- profiles.add(mProfile);
- when(mCachedDevice.getConnectableProfiles()).thenReturn(profiles);
-
- mFragment = new DeviceProfilesSettings();
- mFragment.setArguments(new Bundle());
-
- ReflectionHelpers.setStaticField(LocalBluetoothManager.class, "sInstance", mManager);
- when(mManager.getCachedDeviceManager()).thenReturn(mDeviceManager);
- when(mManager.getBluetoothAdapter()).thenReturn(mAdapter);
- when(mManager.getProfileManager()).thenReturn(mProfileManager);
- when(mProfileManager.getMapProfile()).thenReturn(null);
- when(mDeviceManager.findDevice(any())).thenReturn(mCachedDevice);
- }
-
- @After
- public void tearDown() {
- ReflectionHelpers.setStaticField(LocalBluetoothManager.class, "sInstance", null);
- }
-
- @Test
- public void deviceHasHighQualityAudio() {
- when(mProfile.supportsHighQualityAudio(any())).thenReturn(true);
- when(mProfile.isHighQualityAudioEnabled(any())).thenReturn(true);
- when(mProfile.isPreferred(any())).thenReturn(true);
- FragmentTestUtil.startFragment(mFragment);
-
- ViewGroup profilesGroup = mFragment.getDialog().findViewById(R.id.profiles_section);
- CheckBox box =
- profilesGroup.findViewWithTag(DeviceProfilesSettings.HIGH_QUALITY_AUDIO_PREF_TAG);
- assertThat(box).isNotNull();
- assertThat(box.getVisibility()).isEqualTo(View.VISIBLE);
- assertThat(box.isEnabled()).isTrue();
- assertThat(box.isChecked()).isTrue();
-
- box.performClick();
- verify(mProfile).setHighQualityAudioEnabled(any(), eq(false));
- box.performClick();
- verify(mProfile).setHighQualityAudioEnabled(any(), eq(true));
- }
-
- @Test
- public void busyDeviceDisablesControl() {
- when(mProfile.supportsHighQualityAudio(any())).thenReturn(true);
- when(mProfile.isHighQualityAudioEnabled(any())).thenReturn(true);
- when(mProfile.isPreferred(any())).thenReturn(true);
- when(mCachedDevice.isBusy()).thenReturn(true);
- FragmentTestUtil.startFragment(mFragment);
-
- // Make sure that the high quality audio option is present but disabled when the device
- // is busy.
- ViewGroup profilesGroup = mFragment.getDialog().findViewById(R.id.profiles_section);
- CheckBox box =
- profilesGroup.findViewWithTag(DeviceProfilesSettings.HIGH_QUALITY_AUDIO_PREF_TAG);
- assertThat(box).isNotNull();
- assertThat(box.getVisibility()).isEqualTo(View.VISIBLE);
- assertThat(box.isEnabled()).isFalse();
- }
-
- @Test
- public void mediaAudioGetsDisabledAndReEnabled() {
- when(mProfile.supportsHighQualityAudio(any())).thenReturn(true);
- when(mProfile.isHighQualityAudioEnabled(any())).thenReturn(true);
- when(mProfile.isPreferred(any())).thenReturn(true);
- FragmentTestUtil.startFragment(mFragment);
-
- ViewGroup profilesGroup = mFragment.getDialog().findViewById(R.id.profiles_section);
- CheckBox audioBox = profilesGroup.findViewWithTag(mProfile.toString());
- CheckBox highQualityAudioBox =
- profilesGroup.findViewWithTag(DeviceProfilesSettings.HIGH_QUALITY_AUDIO_PREF_TAG);
- assertThat(audioBox).isNotNull();
- assertThat(audioBox.isChecked()).isTrue();
- assertThat(highQualityAudioBox).isNotNull();
- assertThat(highQualityAudioBox.isChecked()).isTrue();
-
- // Disabling media audio should cause the high quality audio box to disappear.
- when(mProfile.isPreferred(any())).thenReturn(false);
- mFragment.onDeviceAttributesChanged();
- audioBox = profilesGroup.findViewWithTag(mProfile.toString());
- highQualityAudioBox =
- profilesGroup.findViewWithTag(DeviceProfilesSettings.HIGH_QUALITY_AUDIO_PREF_TAG);
- assertThat(audioBox).isNotNull();
- assertThat(audioBox.isChecked()).isFalse();
- assertThat(highQualityAudioBox).isNotNull();
- assertThat(highQualityAudioBox.getVisibility()).isEqualTo(View.GONE);
-
- // And re-enabling media audio should make it reappear.
- when(mProfile.isPreferred(any())).thenReturn(true);
- mFragment.onDeviceAttributesChanged();
- audioBox = profilesGroup.findViewWithTag(mProfile.toString());
- highQualityAudioBox =
- profilesGroup.findViewWithTag(DeviceProfilesSettings.HIGH_QUALITY_AUDIO_PREF_TAG);
- assertThat(audioBox).isNotNull();
- assertThat(audioBox.isChecked()).isTrue();
- assertThat(highQualityAudioBox).isNotNull();
- assertThat(highQualityAudioBox.isChecked()).isTrue();
- }
-
- @Test
- public void mediaAudioStartsDisabled() {
- when(mProfile.supportsHighQualityAudio(any())).thenReturn(true);
- when(mProfile.isHighQualityAudioEnabled(any())).thenReturn(true);
- when(mProfile.isPreferred(any())).thenReturn(false);
-
- FragmentTestUtil.startFragment(mFragment);
- ViewGroup profilesGroup = mFragment.getDialog().findViewById(R.id.profiles_section);
- CheckBox audioBox = profilesGroup.findViewWithTag(mProfile.toString());
- CheckBox highQualityAudioBox =
- profilesGroup.findViewWithTag(DeviceProfilesSettings.HIGH_QUALITY_AUDIO_PREF_TAG);
-
- assertThat(audioBox).isNotNull();
- assertThat(audioBox.isChecked()).isFalse();
- assertThat(highQualityAudioBox).isNotNull();
- assertThat(highQualityAudioBox.getVisibility()).isEqualTo(View.GONE);
- }
-
- @Test
- public void deviceDoesntHaveHighQualityAudio() {
- when(mProfile.supportsHighQualityAudio(any())).thenReturn(false);
- when(mProfile.isPreferred(any())).thenReturn(true);
- FragmentTestUtil.startFragment(mFragment);
-
- // A device that doesn't support high quality audio shouldn't have the checkbox for
- // high quality audio support.
- ViewGroup profilesGroup = mFragment.getDialog().findViewById(R.id.profiles_section);
- CheckBox box =
- profilesGroup.findViewWithTag(DeviceProfilesSettings.HIGH_QUALITY_AUDIO_PREF_TAG);
- assertThat(box).isNull();
- }
-}