Merge "Fixes DT enrollment asset showing in light mode" into tm-qpr-dev
diff --git a/res/layout/locale_drag_cell.xml b/res/layout/locale_drag_cell.xml
index 47bf70a..7b932f3 100644
--- a/res/layout/locale_drag_cell.xml
+++ b/res/layout/locale_drag_cell.xml
@@ -56,17 +56,6 @@
android:layout_toStartOf="@+id/dragHandle"
android:layout_below="@id/label"/>
- <TextView
- android:id="@+id/default_locale"
- style="@style/LanguageCheckboxAndLabel"
- android:layout_marginTop="-28dp"
- android:paddingStart="56dp"
- android:textAppearance="?android:attr/textAppearanceListItemSecondary"
- android:textColor="?android:textColorSecondary"
- android:text="@string/desc_current_default_language"
- android:layout_toStartOf="@+id/dragHandle"
- android:layout_below="@id/label"/>
-
<ImageView
android:id="@+id/dragHandle"
android:layout_width="wrap_content"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a079887..b8a5202 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -489,12 +489,6 @@
<!-- Title for the locale picker activity. [CHAR LIMIT=30]-->
<string name="language_picker_title">Languages</string>
- <!-- Title for category of the locale picker . [CHAR LIMIT=50]-->
- <string name="language_picker_category_title">Preferred language order</string>
-
- <!-- Description for indication of current system default language. [CHAR LIMIT=50]-->
- <string name="desc_current_default_language">System language</string>
-
<!-- Menu item in the locale menu. Will remove the selected locales. [CHAR LIMIT=30] -->
<string name="locale_remove_menu">Remove</string>
@@ -508,13 +502,13 @@
<string name="locale_picker_category_title">Preferred Language</string>
<!-- Title for the Apps' locale menu entry [CHAR LIMIT=50]-->
- <string name="app_locales_picker_menu_title">App languages</string>
+ <string name="app_locales_picker_menu_title">App Languages</string>
<!-- Summary for the app's locale picker activity. [CHAR LIMIT=50]-->
<string name="app_locale_picker_summary">Set the language for each app</string>
<!-- Title for the App's locale picker activity. [CHAR LIMIT=50]-->
- <string name="app_locale_picker_title">App language</string>
+ <string name="app_locale_picker_title">App Language</string>
<!-- Category for the suggested app's locales. [CHAR LIMIT=50]-->
<string name="suggested_app_locales_title">Suggested languages</string>
@@ -537,18 +531,6 @@
<!-- Description for introduction of the locale selection supported of app list [CHAR LIMIT=NONE]-->
<string name="desc_app_locale_selection_supported">Only apps that support language selection are shown here.</string>
- <!-- Description for the introduction to language picker activity. [CHAR LIMIT=NONE]-->
- <string name="desc_introduction_of_language_picker">Your system, apps, and websites use the first supported language from your preferred languages.</string>
-
- <!-- Description for the notice of language picker. [CHAR LIMIT=NONE]-->
- <string name="desc_notice_of_language_picker">To select a language for each app, go to app language settings.</string>
-
- <!-- Title for locale helper page [CHAR LIMIT=NONE] -->
- <string name="desc_locale_helper_footer_general">Learn more about languages</string>
-
- <!-- Link for Locale helper page. [CHAR LIMIT=NONE]-->
- <string name="link_locale_picker_footer_learn_more" translatable="false">https://support.google.com/android?p=per_language_app_settings</string>
-
<!-- The title of the confirmation dialog shown when the user selects one / several languages and tries to remove them [CHAR LIMIT=60] -->
<plurals name="dlg_remove_locales_title">
<item quantity="one">Remove selected language?</item>
@@ -564,7 +546,7 @@
<string name="dlg_remove_locales_error_message">Keep at least one preferred language</string>
<!-- This text shows in the language picker when the system is not translated into that languages [CHAR LIMIT=80] -->
- <string name="locale_not_translated">Not available as system language</string>
+ <string name="locale_not_translated">May not be available in some apps</string>
<!-- Label for an accessibility action that moves a language up in the ordered language list [CHAR LIMIT=20] -->
<string name="action_drag_label_move_up">Move up</string>
diff --git a/res/xml/languages.xml b/res/xml/languages.xml
deleted file mode 100644
index 0f45540..0000000
--- a/res/xml/languages.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2022 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.
- -->
-
-<PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res-auto"
- android:title="@string/language_settings">
-
- <com.android.settingslib.widget.TopIntroPreference
- android:title="@string/desc_introduction_of_language_picker"
- android:persistent="false"
- android:selectable="false"/>
-
- <PreferenceCategory
- android:title="@string/language_picker_category_title">
- <com.android.settingslib.widget.LayoutPreference
- android:key="languages_picker"
- android:layout="@layout/locale_order_list" />
- </PreferenceCategory>
-
- <com.android.settingslib.widget.FooterPreference
- android:key="footer_languages_picker"
- android:title="@string/desc_notice_of_language_picker"
- android:persistent="false"
- android:selectable="false"
- settings:controller="com.android.settings.localepicker.LocaleHelperPreferenceController"/>
-
-</PreferenceScreen>
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingController.java b/src/com/android/settings/bluetooth/BluetoothPairingController.java
index c70a56a..a9e89e9 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingController.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingController.java
@@ -17,8 +17,10 @@
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.content.Intent;
+import android.provider.DeviceConfig;
import android.text.Editable;
import android.util.Log;
import android.widget.CompoundButton;
@@ -28,6 +30,7 @@
import com.android.settings.R;
import com.android.settings.bluetooth.BluetoothPairingDialogFragment.BluetoothPairingDialogListener;
+import com.android.settings.core.SettingsUIDeviceConfig;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfile;
@@ -54,7 +57,7 @@
private static final int BLUETOOTH_PASSKEY_MAX_LENGTH = 6;
// Bluetooth dependencies for the connection we are trying to establish
- private LocalBluetoothManager mBluetoothManager;
+ LocalBluetoothManager mBluetoothManager;
private BluetoothDevice mDevice;
@VisibleForTesting
int mType;
@@ -66,6 +69,8 @@
private LocalBluetoothProfile mPbapClientProfile;
private boolean mPbapAllowed;
private boolean mIsCoordinatedSetMember;
+ private boolean mIsLeAudio;
+ private boolean mIsLeContactSharingEnabled;
/**
* Creates an instance of a BluetoothPairingController.
@@ -92,10 +97,26 @@
mDeviceName = mBluetoothManager.getCachedDeviceManager().getName(mDevice);
mPbapClientProfile = mBluetoothManager.getProfileManager().getPbapClientProfile();
mPasskeyFormatted = formatKey(mPasskey);
+
final CachedBluetoothDevice cachedDevice =
mBluetoothManager.getCachedDeviceManager().findDevice(mDevice);
- mIsCoordinatedSetMember = cachedDevice != null
- ? cachedDevice.isCoordinatedSetMemberDevice() : false;
+
+ mIsCoordinatedSetMember = false;
+ mIsLeAudio = false;
+ mIsLeContactSharingEnabled = true;
+ if (cachedDevice != null) {
+ mIsCoordinatedSetMember = cachedDevice.isCoordinatedSetMemberDevice();
+
+ for (LocalBluetoothProfile profile : cachedDevice.getProfiles()) {
+ if (profile.getProfileId() == BluetoothProfile.LE_AUDIO) {
+ mIsLeAudio = true;
+ }
+ }
+
+ mIsLeContactSharingEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
+ SettingsUIDeviceConfig.BT_LE_AUDIO_CONTACT_SHARING_ENABLED, true);
+ Log.d(TAG, "BT_LE_AUDIO_CONTACT_SHARING_ENABLED is " + mIsLeContactSharingEnabled);
+ }
}
@Override
@@ -180,6 +201,30 @@
return mPbapClientProfile != null && mPbapClientProfile.isProfileReady();
}
+ @VisibleForTesting
+ boolean isLeAudio() {
+ return mIsLeAudio;
+ }
+
+ @VisibleForTesting
+ boolean isLeContactSharingEnabled() {
+ return mIsLeContactSharingEnabled;
+ }
+
+ /**
+ * A method whether the device allows to show the le audio's contact sharing.
+ *
+ * @return A boolean whether the device allows to show the contact sharing.
+ */
+ public boolean isContactSharingVisible() {
+ boolean isContactSharingVisible = !isProfileReady();
+ // If device do not support the ContactSharing of LE audio device, hiding ContactSharing UI
+ if (isLeAudio() && !isLeContactSharingEnabled()) {
+ isContactSharingVisible = false;
+ }
+ return isContactSharingVisible;
+ }
+
/**
* A method for querying if the bluetooth device has access to contacts on the device.
*
@@ -447,4 +492,9 @@
public boolean deviceEquals(BluetoothDevice device) {
return mDevice == device;
}
+
+ @VisibleForTesting
+ void mockPbapClientProfile(LocalBluetoothProfile mockPbapClientProfile) {
+ mPbapClientProfile = mockPbapClientProfile;
+ }
}
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java b/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java
index 8dd00b3..bae2471 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java
@@ -254,8 +254,8 @@
mPairingController.getDeviceName()));
EditText pairingView = (EditText) view.findViewById(R.id.text);
- contactSharing.setVisibility(mPairingController.isProfileReady()
- ? View.GONE : View.VISIBLE);
+ contactSharing.setVisibility(
+ mPairingController.isContactSharingVisible() ? View.VISIBLE : View.GONE);
mPairingController.setContactSharingState();
contactSharing.setOnCheckedChangeListener(mPairingController);
contactSharing.setChecked(mPairingController.getContactSharingState());
@@ -346,7 +346,7 @@
mPairingController.getDeviceName()));
contactSharing.setVisibility(
- mPairingController.isProfileReady() ? View.GONE : View.VISIBLE);
+ mPairingController.isContactSharingVisible() ? View.VISIBLE : View.GONE);
mPairingController.setContactSharingState();
contactSharing.setChecked(mPairingController.getContactSharingState());
contactSharing.setOnCheckedChangeListener(mPairingController);
@@ -363,5 +363,4 @@
? View.VISIBLE : View.GONE);
return view;
}
-
}
diff --git a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
index b3c2e30..ab9110d 100644
--- a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
+++ b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
@@ -43,6 +43,7 @@
import java.util.List;
import java.util.Locale;
+
class LocaleDragAndDropAdapter
extends RecyclerView.Adapter<LocaleDragAndDropAdapter.CustomViewHolder> {
@@ -153,10 +154,8 @@
final LocaleDragCell dragCell = holder.getLocaleDragCell();
final String label = feedItem.getFullNameNative();
final String description = feedItem.getFullNameInUiLanguage();
-
dragCell.setLabelAndDescription(label, description);
dragCell.setLocalized(feedItem.isTranslated());
- dragCell.setCurrentDefault(feedItem.getLocale().equals(Locale.getDefault()));
dragCell.setMiniLabel(mNumberFormatter.format(i + 1));
dragCell.setShowCheckbox(mRemoveMode);
dragCell.setShowMiniLabel(!mRemoveMode);
diff --git a/src/com/android/settings/localepicker/LocaleDragCell.java b/src/com/android/settings/localepicker/LocaleDragCell.java
index 2f4cfef..ea86189 100644
--- a/src/com/android/settings/localepicker/LocaleDragCell.java
+++ b/src/com/android/settings/localepicker/LocaleDragCell.java
@@ -33,7 +33,6 @@
private CheckBox mCheckbox;
private TextView mMiniLabel;
private TextView mLocalized;
- private TextView mCurrentDefault;
private ImageView mDragHandle;
public LocaleDragCell(Context context, AttributeSet attrs) {
@@ -45,7 +44,6 @@
super.onFinishInflate();
mLabel = (TextView) findViewById(R.id.label);
mLocalized = (TextView) findViewById(R.id.l10nWarn);
- mCurrentDefault = (TextView) findViewById(R.id.default_locale);
mMiniLabel = (TextView) findViewById(R.id.miniLabel);
mCheckbox = (CheckBox) findViewById(R.id.checkbox);
mDragHandle = (ImageView) findViewById(R.id.dragHandle);
@@ -102,14 +100,6 @@
invalidate();
}
- /**
- * Indicate current locale is system default.
- */
- public void setCurrentDefault(boolean isCurrentDefault) {
- mCurrentDefault.setVisibility(isCurrentDefault ? VISIBLE : GONE);
- invalidate();
- }
-
public ImageView getDragHandle() {
return mDragHandle;
}
diff --git a/src/com/android/settings/localepicker/LocaleHelperPreferenceController.java b/src/com/android/settings/localepicker/LocaleHelperPreferenceController.java
deleted file mode 100644
index 05c7401..0000000
--- a/src/com/android/settings/localepicker/LocaleHelperPreferenceController.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2022 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.localepicker;
-
-import android.content.Context;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.R;
-import com.android.settingslib.HelpUtils;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.widget.FooterPreference;
-
-/**
- * A controller to update current locale information of application.
- */
-public class LocaleHelperPreferenceController extends AbstractPreferenceController {
- private static final String TAG = LocaleHelperPreferenceController.class.getSimpleName();
-
- private static final String KEY_FOOTER_LANGUAGE_PICKER = "footer_languages_picker";
-
- public LocaleHelperPreferenceController(Context context) {
- super(context);
- }
-
- @Override
- public boolean isAvailable() {
- return true;
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_FOOTER_LANGUAGE_PICKER;
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- FooterPreference footerPreference = screen.findPreference(getPreferenceKey());
- updateFooterPreference(footerPreference);
- }
-
- @VisibleForTesting
- void updateFooterPreference(FooterPreference footerPreference) {
- if (footerPreference != null) {
- footerPreference.setLearnMoreAction(v -> openLocaleLearnMoreLink());
- footerPreference.setLearnMoreText(mContext.getString(
- R.string.desc_locale_helper_footer_general));
- }
- }
-
- private void openLocaleLearnMoreLink() {
- mContext.startActivity(
- HelpUtils.getHelpIntent(
- mContext,
- mContext.getString(R.string.link_locale_picker_footer_learn_more),
- /*backupContext=*/""));
- }
-}
diff --git a/src/com/android/settings/localepicker/LocaleListEditor.java b/src/com/android/settings/localepicker/LocaleListEditor.java
index 9db3468..eac2dd1 100644
--- a/src/com/android/settings/localepicker/LocaleListEditor.java
+++ b/src/com/android/settings/localepicker/LocaleListEditor.java
@@ -36,7 +36,6 @@
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
-import androidx.preference.PreferenceScreen;
import androidx.recyclerview.widget.RecyclerView;
import com.android.internal.app.LocalePicker;
@@ -47,7 +46,6 @@
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.search.SearchIndexableRaw;
-import com.android.settingslib.widget.LayoutPreference;
import java.util.ArrayList;
import java.util.List;
@@ -66,7 +64,6 @@
private static final int REQUEST_LOCALE_PICKER = 0;
private static final String INDEX_KEY_ADD_LANGUAGE = "add_language";
- private static final String KEY_LANGUAGES_PICKER = "languages_picker";
private LocaleDragAndDropAdapter mAdapter;
private Menu mMenu;
@@ -75,9 +72,6 @@
private boolean mShowingRemoveDialog;
private boolean mIsUiRestricted;
- private LayoutPreference mLocalePickerPreference;
- private LocaleHelperPreferenceController mLocaleHelperPreferenceController;
-
public LocaleListEditor() {
super(DISALLOW_CONFIG_LOCALE);
}
@@ -92,14 +86,6 @@
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
- addPreferencesFromResource(R.xml.languages);
- final Activity activity = getActivity();
- activity.setTitle(R.string.language_picker_title);
- mLocaleHelperPreferenceController = new LocaleHelperPreferenceController(activity);
- final PreferenceScreen screen = getPreferenceScreen();
- mLocalePickerPreference = screen.findPreference(KEY_LANGUAGES_PICKER);
- mLocaleHelperPreferenceController.displayPreference(screen);
-
LocaleStore.fillCache(this.getContext());
final List<LocaleStore.LocaleInfo> feedsList = getUserLocaleList();
mAdapter = new LocaleDragAndDropAdapter(this.getContext(), feedsList);
@@ -107,8 +93,11 @@
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstState) {
- configureDragAndDrop(mLocalePickerPreference);
- return super.onCreateView(inflater, container, savedInstState);
+ final View result = super.onCreateView(inflater, container, savedInstState);
+ final View myLayout = inflater.inflate(R.layout.locale_order_list, (ViewGroup) result);
+
+ configureDragAndDrop(myLayout);
+ return result;
}
@Override
@@ -298,8 +287,8 @@
return result;
}
- private void configureDragAndDrop(LayoutPreference layout) {
- final RecyclerView list = layout.findViewById(R.id.dragList);
+ private void configureDragAndDrop(View view) {
+ final RecyclerView list = view.findViewById(R.id.dragList);
final LocaleLinearLayoutManager llm = new LocaleLinearLayoutManager(getContext(), mAdapter);
llm.setAutoMeasureEnabled(true);
list.setLayoutManager(llm);
@@ -308,7 +297,7 @@
mAdapter.setRecyclerView(list);
list.setAdapter(mAdapter);
- mAddLanguage = layout.findViewById(R.id.add_language);
+ mAddLanguage = view.findViewById(R.id.add_language);
mAddLanguage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingControllerTest.java
index 88e15eb..a7dc17d 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingControllerTest.java
@@ -17,16 +17,28 @@
import static android.bluetooth.BluetoothDevice.PAIRING_VARIANT_CONSENT;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.content.Intent;
import android.os.Parcel;
+import com.android.settings.core.SettingsUIDeviceConfig;
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
+import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
+import com.android.settings.testutils.shadow.ShadowDeviceConfig;
+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 org.junit.Before;
import org.junit.Test;
@@ -36,16 +48,36 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
+import org.robolectric.shadow.api.Shadow;
+
+import java.util.ArrayList;
+import java.util.List;
@RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowBluetoothAdapter.class})
+@Config(shadows = {ShadowBluetoothAdapter.class, ShadowBluetoothUtils.class,
+ ShadowDeviceConfig.class})
public class BluetoothPairingControllerTest {
private final BluetoothClass mBluetoothClass =
createBtClass(BluetoothClass.Device.AUDIO_VIDEO_HANDSFREE);
+
+ @Mock
+ private CachedBluetoothDeviceManager mCachedDeviceManager;
+ @Mock
+ private LocalBluetoothManager mLocalBluetoothManager;
+ @Mock
+ private LocalBluetoothProfileManager mLocalBluetoothProfileManager;
@Mock
private BluetoothDevice mBluetoothDevice;
+ @Mock
+ private CachedBluetoothDevice mCachedDevice;
+ @Mock
+ private LocalBluetoothProfile mLocalBluetoothProfile;
+ @Mock
+ private LocalBluetoothProfile mPbapLocalBluetoothProfile;
+
private Context mContext;
private BluetoothPairingController mBluetoothPairingController;
+ private ShadowBluetoothAdapter mShadowBluetoothAdapter;
private BluetoothClass createBtClass(int deviceClass) {
Parcel p = Parcel.obtain();
@@ -57,14 +89,32 @@
return bluetoothClass;
}
+ private BluetoothPairingController createBluetoothPairingController() {
+ final Intent intent = new Intent();
+ intent.putExtra(BluetoothDevice.EXTRA_DEVICE, mBluetoothDevice);
+ return new BluetoothPairingController(intent, mContext);
+ }
+
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
- final Intent intent = new Intent();
- intent.putExtra(BluetoothDevice.EXTRA_DEVICE, mBluetoothDevice);
- mBluetoothPairingController = new BluetoothPairingController(intent, mContext);
+ mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
+ mShadowBluetoothAdapter.setEnabled(true);
+ ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager;
+ mLocalBluetoothManager = Utils.getLocalBtManager(mContext);
+ when(mLocalBluetoothManager.getCachedDeviceManager()).thenReturn(mCachedDeviceManager);
+ when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalBluetoothProfileManager);
+ when(mCachedDeviceManager.findDevice(mBluetoothDevice)).thenReturn(mCachedDevice);
+ List<LocalBluetoothProfile> localBluetoothProfiles = new ArrayList<>();
+ mockIsLeAudio(false);
+ localBluetoothProfiles.add(mLocalBluetoothProfile);
+ when(mCachedDevice.getProfiles()).thenReturn(localBluetoothProfiles);
+ when(mCachedDevice.getDevice()).thenReturn(mBluetoothDevice);
+
+ mBluetoothPairingController = createBluetoothPairingController();
+ mBluetoothPairingController.mockPbapClientProfile(mPbapLocalBluetoothProfile);
}
@Test
@@ -108,4 +158,124 @@
verify(mBluetoothDevice).setPhonebookAccessPermission(BluetoothDevice.ACCESS_REJECTED);
}
+
+ @Test
+ public void isLeAudio_noLeProfile_returnsFalse() {
+ mockIsLeAudio(false);
+
+ mBluetoothPairingController = createBluetoothPairingController();
+
+ assertThat(mBluetoothPairingController.isLeAudio()).isFalse();
+ }
+
+ @Test
+ public void isLeAudio_isLeProfile_returnsTrue() {
+ mockIsLeAudio(true);
+
+ mBluetoothPairingController = createBluetoothPairingController();
+
+ assertThat(mBluetoothPairingController.isLeAudio()).isTrue();
+ }
+
+ @Test
+ public void isLeContactSharingEnabled_configIsFalse_returnsFalse() {
+ mockIsLeContactSharingEnabled(false);
+
+ mBluetoothPairingController = createBluetoothPairingController();
+
+ assertThat(mBluetoothPairingController.isLeContactSharingEnabled()).isFalse();
+ }
+
+ @Test
+ public void isLeContactSharingEnabled_configIsTrue_returnsTrue() {
+ mockIsLeContactSharingEnabled(true);
+
+ mBluetoothPairingController = createBluetoothPairingController();
+
+ assertThat(mBluetoothPairingController.isLeContactSharingEnabled()).isTrue();
+ }
+
+ @Test
+ public void isContactSharingVisible_profileIsNotReady_returnsTrue() {
+ // isProfileReady=false, isLeAudio=false, isLeContactSharingEnabled=true
+ mockIsProfileReady(false);
+ mockIsLeAudio(false);
+ mockIsLeContactSharingEnabled(true);
+
+ mBluetoothPairingController = createBluetoothPairingController();
+ mBluetoothPairingController.mockPbapClientProfile(mPbapLocalBluetoothProfile);
+
+ assertThat(mBluetoothPairingController.isContactSharingVisible()).isTrue();
+ }
+
+ @Test
+ public void isContactSharingVisible_profileIsReady_returnsFalse() {
+ // isProfileReady=true, isLeAudio=false, isLeContactSharingEnabled=true
+ mockIsProfileReady(true);
+ mockIsLeAudio(false);
+ mockIsLeContactSharingEnabled(true);
+
+ mBluetoothPairingController = createBluetoothPairingController();
+ mBluetoothPairingController.mockPbapClientProfile(mPbapLocalBluetoothProfile);
+
+ assertThat(mBluetoothPairingController.isContactSharingVisible()).isFalse();
+ }
+
+ @Test
+ public void isContactSharingVisible_DeviceIsLeAudioAndProfileIsReady_returnsFalse() {
+ // isProfileReady=true, isLeAudio=true, isLeContactSharingEnabled=true
+ mockIsProfileReady(true);
+ mockIsLeAudio(true);
+ mockIsLeContactSharingEnabled(true);
+
+ mBluetoothPairingController = createBluetoothPairingController();
+ mBluetoothPairingController.mockPbapClientProfile(mPbapLocalBluetoothProfile);
+
+ assertThat(mBluetoothPairingController.isContactSharingVisible()).isFalse();
+ }
+
+ @Test
+ public void isContactSharingVisible_DeviceIsLeAudioAndProfileIsNotReady_returnsTrue() {
+ // isProfileReady=false, isLeAudio=true, isLeContactSharingEnabled=true
+ mockIsProfileReady(false);
+ mockIsLeAudio(true);
+ mockIsLeContactSharingEnabled(true);
+
+ mBluetoothPairingController = createBluetoothPairingController();
+ mBluetoothPairingController.mockPbapClientProfile(mPbapLocalBluetoothProfile);
+
+ assertThat(mBluetoothPairingController.isContactSharingVisible()).isTrue();
+ }
+
+ @Test
+ public void isContactSharingVisible_DeviceIsLeAndContactSharingIsNotEnabled_returnsFalse() {
+ // isProfileReady=false, isLeAudio=true, isLeContactSharingEnabled=false
+ mockIsProfileReady(false);
+ mockIsLeAudio(true);
+ mockIsLeContactSharingEnabled(false);
+
+ mBluetoothPairingController = createBluetoothPairingController();
+ mBluetoothPairingController.mockPbapClientProfile(mPbapLocalBluetoothProfile);
+
+ assertThat(mBluetoothPairingController.isContactSharingVisible()).isFalse();
+ }
+
+ private void mockIsProfileReady(boolean mockValue) {
+ when(mPbapLocalBluetoothProfile.isProfileReady()).thenReturn(mockValue);
+ }
+
+ private void mockIsLeAudio(boolean mockValue) {
+ int profileId = BluetoothProfile.HEADSET;
+ if (mockValue) {
+ profileId = BluetoothProfile.LE_AUDIO;
+ }
+ when(mLocalBluetoothProfile.getProfileId()).thenReturn(profileId);
+ }
+
+ private void mockIsLeContactSharingEnabled(boolean mockValue) {
+ android.provider.DeviceConfig.setProperty(
+ android.provider.DeviceConfig.NAMESPACE_SETTINGS_UI,
+ SettingsUIDeviceConfig.BT_LE_AUDIO_CONTACT_SHARING_ENABLED,
+ /* value= */ mockValue ? "true" : "false", true);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
index a53e693..874ddf0 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
@@ -274,13 +274,12 @@
}
@Test
- public void dialogShowsContactSharingCheckboxWhenBluetoothProfileNotReady() {
+ public void contactSharingCheckbox_conditionIsReady_showsUi() {
// set the dialog variant to confirmation/consent
when(controller.getDialogType()).thenReturn(BluetoothPairingController.CONFIRMATION_DIALOG);
-
// set a fake device name and pretend the profile has not been set up for it
when(controller.getDeviceName()).thenReturn(FAKE_DEVICE_NAME);
- when(controller.isProfileReady()).thenReturn(false);
+ when(controller.isContactSharingVisible()).thenReturn(true);
// build the fragment
BluetoothPairingDialogFragment frag = makeFragment();
@@ -292,13 +291,12 @@
}
@Test
- public void dialogHidesContactSharingCheckboxWhenBluetoothProfileIsReady() {
+ public void contactSharingCheckbox_conditionIsNotReady_doesNotShowUi() {
// set the dialog variant to confirmation/consent
when(controller.getDialogType()).thenReturn(BluetoothPairingController.CONFIRMATION_DIALOG);
-
// set a fake device name and pretend the profile has been set up for it
when(controller.getDeviceName()).thenReturn(FAKE_DEVICE_NAME);
- when(controller.isProfileReady()).thenReturn(true);
+ when(controller.isContactSharingVisible()).thenReturn(false);
// build the fragment
BluetoothPairingDialogFragment frag = makeFragment();
diff --git a/tests/unit/src/com/android/settings/localepicker/LocaleHelperPreferenceControllerTest.java b/tests/unit/src/com/android/settings/localepicker/LocaleHelperPreferenceControllerTest.java
deleted file mode 100644
index 31b8e79..0000000
--- a/tests/unit/src/com/android/settings/localepicker/LocaleHelperPreferenceControllerTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2022 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.localepicker;
-
-import static org.mockito.Mockito.anyString;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.os.Looper;
-
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import com.android.settingslib.widget.FooterPreference;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@RunWith(AndroidJUnit4.class)
-public class LocaleHelperPreferenceControllerTest {
- private Context mContext;
- private LocaleHelperPreferenceController mLocaleHelperPreferenceController;
-
- @Mock
- private FooterPreference mMockFooterPreference;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- if (Looper.myLooper() == null) {
- Looper.prepare();
- }
- mContext = ApplicationProvider.getApplicationContext();
- mLocaleHelperPreferenceController = new LocaleHelperPreferenceController(mContext);
- }
-
- @Test
- public void updateFooterPreference_setFooterPreference_hasClickAction() {
- mLocaleHelperPreferenceController.updateFooterPreference(mMockFooterPreference);
- verify(mMockFooterPreference).setLearnMoreText(anyString());
- }
-}