diff --git a/res/layout/locale_drag_cell.xml b/res/layout/locale_drag_cell.xml index 47bf70a473e..7b932f39a02 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"/> - - Languages - - Preferred language order - - - System language - Remove @@ -508,13 +502,13 @@ Preferred Language - App languages + App Languages Set the language for each app - App language + App Language Suggested languages @@ -537,18 +531,6 @@ Only apps that support language selection are shown here. - - Your system, apps, and websites use the first supported language from your preferred languages. - - - To select a language for each app, go to app language settings. - - - Learn more about languages - - - https://support.google.com/android?p=per_language_app_settings - Remove selected language? @@ -564,7 +546,7 @@ Keep at least one preferred language - Not available as system language + May not be available in some apps Move up diff --git a/res/xml/languages.xml b/res/xml/languages.xml deleted file mode 100644 index 0f455407645..00000000000 --- a/res/xml/languages.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/com/android/settings/bluetooth/BluetoothPairingController.java b/src/com/android/settings/bluetooth/BluetoothPairingController.java index c70a56ab866..a9e89e914cb 100644 --- a/src/com/android/settings/bluetooth/BluetoothPairingController.java +++ b/src/com/android/settings/bluetooth/BluetoothPairingController.java @@ -17,8 +17,10 @@ package com.android.settings.bluetooth; 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 androidx.annotation.VisibleForTesting; 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 @@ public class BluetoothPairingController implements OnCheckedChangeListener, 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 @@ public class BluetoothPairingController implements OnCheckedChangeListener, 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 @@ public class BluetoothPairingController implements OnCheckedChangeListener, 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 @@ public class BluetoothPairingController implements OnCheckedChangeListener, 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 class BluetoothPairingController implements OnCheckedChangeListener, 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 8dd00b389ed..bae2471dd9b 100644 --- a/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java +++ b/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java @@ -254,8 +254,8 @@ public class BluetoothPairingDialogFragment extends InstrumentedDialogFragment i 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 @@ public class BluetoothPairingDialogFragment extends InstrumentedDialogFragment i 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 @@ public class BluetoothPairingDialogFragment extends InstrumentedDialogFragment i ? 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 b3c2e3071af..ab9110d01ab 100644 --- a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java +++ b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java @@ -43,6 +43,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; + class LocaleDragAndDropAdapter extends RecyclerView.Adapter { @@ -153,10 +154,8 @@ class LocaleDragAndDropAdapter 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 2f4cfefefb1..ea86189b018 100644 --- a/src/com/android/settings/localepicker/LocaleDragCell.java +++ b/src/com/android/settings/localepicker/LocaleDragCell.java @@ -33,7 +33,6 @@ class LocaleDragCell extends RelativeLayout { 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 @@ class LocaleDragCell extends RelativeLayout { 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 @@ class LocaleDragCell extends RelativeLayout { 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 05c740139cc..00000000000 --- 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 9db3468c9e1..eac2dd1df3c 100644 --- a/src/com/android/settings/localepicker/LocaleListEditor.java +++ b/src/com/android/settings/localepicker/LocaleListEditor.java @@ -36,7 +36,6 @@ import android.widget.TextView; 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.overlay.FeatureFactory; 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 @@ public class LocaleListEditor extends RestrictedSettingsFragment { 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 @@ public class LocaleListEditor extends RestrictedSettingsFragment { private boolean mShowingRemoveDialog; private boolean mIsUiRestricted; - private LayoutPreference mLocalePickerPreference; - private LocaleHelperPreferenceController mLocaleHelperPreferenceController; - public LocaleListEditor() { super(DISALLOW_CONFIG_LOCALE); } @@ -92,14 +86,6 @@ public class LocaleListEditor extends RestrictedSettingsFragment { 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 feedsList = getUserLocaleList(); mAdapter = new LocaleDragAndDropAdapter(this.getContext(), feedsList); @@ -107,8 +93,11 @@ public class LocaleListEditor extends RestrictedSettingsFragment { @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 @@ public class LocaleListEditor extends RestrictedSettingsFragment { 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 @@ public class LocaleListEditor extends RestrictedSettingsFragment { 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/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java index ec17dd371b1..1c480e05735 100644 --- a/src/com/android/settings/network/NetworkProviderSettings.java +++ b/src/com/android/settings/network/NetworkProviderSettings.java @@ -1324,6 +1324,12 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment @VisibleForTesting void launchConfigNewNetworkFragment(WifiEntry wifiEntry) { + if (mIsRestricted) { + Log.e(TAG, "Can't configure Wi-Fi because NetworkProviderSettings is restricted."); + EventLog.writeEvent(0x534e4554, "246301667", -1 /* UID */, "Fragment is restricted."); + return; + } + final Bundle bundle = new Bundle(); bundle.putString(WifiNetworkDetailsFragment.KEY_CHOSEN_WIFIENTRY_KEY, wifiEntry.getKey()); diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingControllerTest.java index 88e15ebc13e..a7dc17da0e0 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 @@ package com.android.settings.bluetooth; 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.mockito.MockitoAnnotations; 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 @@ public class BluetoothPairingControllerTest { 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 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 @@ public class BluetoothPairingControllerTest { 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 a53e693976e..874ddf0d158 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 @@ public class BluetoothPairingDialogTest { } @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 @@ public class BluetoothPairingDialogTest { } @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/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java index 1424d0eced1..5122def9843 100644 --- a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +++ b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java @@ -751,6 +751,15 @@ public class NetworkProviderSettingsTest { assertThat(keys).contains(NetworkProviderSettings.PREF_KEY_WIFI_TOGGLE); } + @Test + public void launchConfigNewNetworkFragment_fragmentIsRestricted_ignoreWifiEntry() { + mNetworkProviderSettings.mIsRestricted = true; + + mNetworkProviderSettings.launchConfigNewNetworkFragment(mWifiEntry); + + verify(mWifiEntry, never()).getKey(); + } + @Implements(PreferenceFragmentCompat.class) public static class ShadowPreferenceFragmentCompat { 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 31b8e794480..00000000000 --- 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()); - } -}