diff --git a/res/layout/preference_labeled_continuous_slider.xml b/res/layout/preference_labeled_continuous_slider.xml new file mode 100644 index 00000000000..00e87964e0d --- /dev/null +++ b/res/layout/preference_labeled_continuous_slider.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 46864c2a8ad..75884fade5e 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2985,7 +2985,7 @@ Increased battery usage - Bold Text + Bold text Font size @@ -4037,7 +4037,7 @@ Location services for work - Location time zone detection + Use location to set time zone Location time zone detection @@ -4051,7 +4051,7 @@ - Automatic time zone detection is disabled + Automatic time zone is off @@ -12801,6 +12801,8 @@ OK - + Allow 2G + + Use 2G cellular connections. For emergency calls, 2G is always turned on. diff --git a/res/xml/mobile_network_settings.xml b/res/xml/mobile_network_settings.xml index 86f5a834f3b..7ab98930cc8 100644 --- a/res/xml/mobile_network_settings.xml +++ b/res/xml/mobile_network_settings.xml @@ -258,5 +258,6 @@ diff --git a/res/xml/reduce_bright_colors_settings.xml b/res/xml/reduce_bright_colors_settings.xml index b9ca8549204..17e8b021fbd 100644 --- a/res/xml/reduce_bright_colors_settings.xml +++ b/res/xml/reduce_bright_colors_settings.xml @@ -17,13 +17,16 @@ - + android:title="@string/reduce_bright_colors_intensity_preference_title" + settings:textStart="@string/reduce_bright_colors_intensity_preference_start_label" + settings:textEnd="@string/reduce_bright_colors_intensity_preference_end_label"/> handleUidPoliciesChanged(uid, uidPolicies)); } @Override - public void onMeteredIfacesChanged(String[] strings) throws RemoteException { - } - - @Override - public void onRestrictBackgroundChanged(final boolean isDataSaving) throws RemoteException { + public void onRestrictBackgroundChanged(final boolean isDataSaving) { ThreadUtils.postOnMainThread(() -> handleRestrictBackgroundChanged(isDataSaving)); } - - @Override - public void onSubscriptionOverride(int subId, int overrideMask, int overrideValue, - int[] networkTypes) { - } - - @Override - public void onSubscriptionPlansChanged(int subId, SubscriptionPlan[] plans) { - } }; public interface Listener { diff --git a/src/com/android/settings/location/RecentLocationAccessPreferenceController.java b/src/com/android/settings/location/RecentLocationAccessPreferenceController.java index 245118d31fb..f4ef0ebc1e8 100644 --- a/src/com/android/settings/location/RecentLocationAccessPreferenceController.java +++ b/src/com/android/settings/location/RecentLocationAccessPreferenceController.java @@ -85,7 +85,8 @@ public class RecentLocationAccessPreferenceController extends LocationBasePrefer final Context prefContext = mCategoryRecentLocationRequests.getContext(); final List recentLocationAccesses = new ArrayList<>(); final UserManager userManager = UserManager.get(mContext); - for (RecentLocationAccesses.Access access : mRecentLocationApps.getAppListSorted()) { + for (RecentLocationAccesses.Access access : mRecentLocationApps.getAppListSorted( + /* showSystemApps= */ false)) { if (isRequestMatchesProfileType(userManager, access, mType)) { recentLocationAccesses.add(access); } diff --git a/src/com/android/settings/security/RequestManageCredentials.java b/src/com/android/settings/security/RequestManageCredentials.java index 4ee4fdf949a..eb7a7d82abf 100644 --- a/src/com/android/settings/security/RequestManageCredentials.java +++ b/src/com/android/settings/security/RequestManageCredentials.java @@ -208,7 +208,7 @@ public class RequestManageCredentials extends Activity { .write(); finishWithResultCancelled(); }); - allowButton.setOnClickListener(b -> setOrUpdateCredentialManagementApp()); + allowButton.setOnClickListener(b -> setOrUpdateCredentialManagementAppAndFinish()); } private void loadExtendedFloatingActionButton() { @@ -220,13 +220,14 @@ public class RequestManageCredentials extends Activity { }); } - private void setOrUpdateCredentialManagementApp() { + private void setOrUpdateCredentialManagementAppAndFinish() { try { mKeyChainConnection.getService().setCredentialManagementApp( mCredentialManagerPackage, mAuthenticationPolicy); DevicePolicyEventLogger .createEvent(DevicePolicyEnums.CREDENTIAL_MANAGEMENT_APP_REQUEST_ACCEPTED) .write(); + setResult(RESULT_OK); } catch (RemoteException e) { Log.e(TAG, "Unable to set credential manager app", e); logRequestFailure(); diff --git a/src/com/android/settings/utils/AndroidKeystoreAliasLoader.java b/src/com/android/settings/utils/AndroidKeystoreAliasLoader.java index 9c45ef40bca..e8eab68ee6a 100644 --- a/src/com/android/settings/utils/AndroidKeystoreAliasLoader.java +++ b/src/com/android/settings/utils/AndroidKeystoreAliasLoader.java @@ -28,6 +28,7 @@ import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.UnrecoverableKeyException; +import java.security.cert.Certificate; import java.util.ArrayList; import java.util.Collection; import java.util.Enumeration; @@ -88,6 +89,10 @@ public class AndroidKeystoreAliasLoader { if (key != null) { if (key instanceof PrivateKey) { mKeyCertAliases.add(alias); + final Certificate[] cert = keyStore.getCertificateChain(alias); + if (cert != null && cert.length >= 2) { + mCaCertAliases.add(alias); + } } } else { if (keyStore.getCertificate(alias) != null) { diff --git a/src/com/android/settings/vpn2/ConfigDialog.java b/src/com/android/settings/vpn2/ConfigDialog.java index a0c7a1e92fe..42bc67dc15a 100644 --- a/src/com/android/settings/vpn2/ConfigDialog.java +++ b/src/com/android/settings/vpn2/ConfigDialog.java @@ -24,8 +24,6 @@ import android.content.pm.PackageManager; import android.net.ProxyInfo; import android.os.Bundle; import android.os.SystemProperties; -import android.security.Credentials; -import android.security.KeyStore; import android.text.Editable; import android.text.TextWatcher; import android.view.View; @@ -42,10 +40,12 @@ import androidx.appcompat.app.AlertDialog; import com.android.internal.net.VpnProfile; import com.android.net.module.util.ProxyUtils; import com.android.settings.R; +import com.android.settings.utils.AndroidKeystoreAliasLoader; import java.net.InetAddress; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; /** @@ -58,7 +58,7 @@ import java.util.List; class ConfigDialog extends AlertDialog implements TextWatcher, View.OnClickListener, AdapterView.OnItemSelectedListener, CompoundButton.OnCheckedChangeListener { - private final KeyStore mKeyStore = KeyStore.getInstance(); + private static final String TAG = "ConfigDialog"; private final DialogInterface.OnClickListener mListener; private final VpnProfile mProfile; @@ -153,10 +153,13 @@ class ConfigDialog extends AlertDialog implements TextWatcher, mL2tpSecret.setTextAppearance(android.R.style.TextAppearance_DeviceDefault_Medium); mIpsecIdentifier.setText(mProfile.ipsecIdentifier); mIpsecSecret.setText(mProfile.ipsecSecret); - loadCertificates(mIpsecUserCert, Credentials.USER_PRIVATE_KEY, 0, mProfile.ipsecUserCert); - loadCertificates(mIpsecCaCert, Credentials.CA_CERTIFICATE, + AndroidKeystoreAliasLoader androidKeystoreAliasLoader = + new AndroidKeystoreAliasLoader(null); + loadCertificates(mIpsecUserCert, androidKeystoreAliasLoader.getKeyCertAliases(), 0, + mProfile.ipsecUserCert); + loadCertificates(mIpsecCaCert, androidKeystoreAliasLoader.getCaCertAliases(), R.string.vpn_no_ca_cert, mProfile.ipsecCaCert); - loadCertificates(mIpsecServerCert, Credentials.USER_CERTIFICATE, + loadCertificates(mIpsecServerCert, androidKeystoreAliasLoader.getKeyCertAliases(), R.string.vpn_no_server_cert, mProfile.ipsecServerCert); mSaveLogin.setChecked(mProfile.saveLogin); mAlwaysOnVpn.setChecked(mProfile.key.equals(VpnUtils.getLockdownVpn())); @@ -511,27 +514,30 @@ class ConfigDialog extends AlertDialog implements TextWatcher, typeSpinner.setAdapter(adapter); } - private void loadCertificates(Spinner spinner, String prefix, int firstId, String selected) { + private void loadCertificates(Spinner spinner, Collection choices, int firstId, + String selected) { Context context = getContext(); String first = (firstId == 0) ? "" : context.getString(firstId); - String[] certificates = mKeyStore.list(prefix); + String[] myChoices; - if (certificates == null || certificates.length == 0) { - certificates = new String[] {first}; + if (choices == null || choices.size() == 0) { + myChoices = new String[] {first}; } else { - String[] array = new String[certificates.length + 1]; - array[0] = first; - System.arraycopy(certificates, 0, array, 1, certificates.length); - certificates = array; + myChoices = new String[choices.size() + 1]; + myChoices[0] = first; + int i = 1; + for (String c : choices) { + myChoices[i++] = c; + } } ArrayAdapter adapter = new ArrayAdapter( - context, android.R.layout.simple_spinner_item, certificates); + context, android.R.layout.simple_spinner_item, myChoices); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); - for (int i = 1; i < certificates.length; ++i) { - if (certificates[i].equals(selected)) { + for (int i = 1; i < myChoices.length; ++i) { + if (myChoices[i].equals(selected)) { spinner.setSelection(i); break; } diff --git a/src/com/android/settings/vpn2/ConfigDialogFragment.java b/src/com/android/settings/vpn2/ConfigDialogFragment.java index f339a694c03..b8825fed6b8 100644 --- a/src/com/android/settings/vpn2/ConfigDialogFragment.java +++ b/src/com/android/settings/vpn2/ConfigDialogFragment.java @@ -25,7 +25,7 @@ import android.os.Bundle; import android.os.RemoteException; import android.os.UserHandle; import android.security.Credentials; -import android.security.KeyStore; +import android.security.LegacyVpnProfileStore; import android.util.Log; import android.view.View; import android.widget.Toast; @@ -151,9 +151,8 @@ public class ConfigDialogFragment extends InstrumentedDialogFragment implements return; } - // Delete from KeyStore - KeyStore keyStore = KeyStore.getInstance(); - keyStore.delete(Credentials.VPN + profile.key, KeyStore.UID_SELF); + // Delete from profile store. + LegacyVpnProfileStore.remove(Credentials.VPN + profile.key); updateLockdownVpn(false, profile); } @@ -188,8 +187,7 @@ public class ConfigDialogFragment extends InstrumentedDialogFragment implements } private void save(VpnProfile profile, boolean lockdown) { - KeyStore.getInstance().put(Credentials.VPN + profile.key, profile.encode(), - KeyStore.UID_SELF, /* flags */ 0); + LegacyVpnProfileStore.put(Credentials.VPN + profile.key, profile.encode()); // Flush out old version of profile disconnect(profile); diff --git a/src/com/android/settings/vpn2/VpnSettings.java b/src/com/android/settings/vpn2/VpnSettings.java index 0a3b2b01cd7..7635733d77f 100644 --- a/src/com/android/settings/vpn2/VpnSettings.java +++ b/src/com/android/settings/vpn2/VpnSettings.java @@ -41,7 +41,7 @@ import android.os.Message; import android.os.UserHandle; import android.os.UserManager; import android.security.Credentials; -import android.security.KeyStore; +import android.security.LegacyVpnProfileStore; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; @@ -57,7 +57,6 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.net.LegacyVpnInfo; import com.android.internal.net.VpnConfig; import com.android.internal.net.VpnProfile; -import com.android.internal.util.ArrayUtils; import com.android.settings.R; import com.android.settings.RestrictedSettingsFragment; import com.android.settings.widget.GearPreference; @@ -94,8 +93,6 @@ public class VpnSettings extends RestrictedSettingsFragment implements private UserManager mUserManager; private VpnManager mVpnManager; - private final KeyStore mKeyStore = KeyStore.getInstance(); - private Map mLegacyVpnPreferences = new ArrayMap<>(); private Map mAppPreferences = new ArrayMap<>(); @@ -222,7 +219,7 @@ public class VpnSettings extends RestrictedSettingsFragment implements final Context context = activity.getApplicationContext(); // Run heavy RPCs before switching to UI thread - final List vpnProfiles = loadVpnProfiles(mKeyStore); + final List vpnProfiles = loadVpnProfiles(); final List vpnApps = getVpnApps(context, /* includeProfiles */ true); final Map connectedLegacyVpns = getConnectedLegacyVpns(); @@ -540,12 +537,13 @@ public class VpnSettings extends RestrictedSettingsFragment implements return result; } - static List loadVpnProfiles(KeyStore keyStore, int... excludeTypes) { + private static List loadVpnProfiles() { final ArrayList result = Lists.newArrayList(); - for (String key : keyStore.list(Credentials.VPN)) { - final VpnProfile profile = VpnProfile.decode(key, keyStore.get(Credentials.VPN + key)); - if (profile != null && !ArrayUtils.contains(excludeTypes, profile.type)) { + for (String key : LegacyVpnProfileStore.list(Credentials.VPN)) { + final VpnProfile profile = VpnProfile.decode(key, + LegacyVpnProfileStore.get(Credentials.VPN + key)); + if (profile != null) { result.add(profile); } } diff --git a/src/com/android/settings/vpn2/VpnUtils.java b/src/com/android/settings/vpn2/VpnUtils.java index 4c9338ccd68..d6a55781b5e 100644 --- a/src/com/android/settings/vpn2/VpnUtils.java +++ b/src/com/android/settings/vpn2/VpnUtils.java @@ -20,7 +20,7 @@ import android.net.VpnManager; import android.os.RemoteException; import android.provider.Settings; import android.security.Credentials; -import android.security.KeyStore; +import android.security.LegacyVpnProfileStore; import com.android.internal.net.LegacyVpnInfo; import com.android.internal.net.VpnConfig; @@ -28,27 +28,25 @@ import com.android.internal.net.VpnConfig; /** * Utility functions for vpn. * - * Keystore methods should only be called in system user + * LegacyVpnProfileStore methods should only be called in system user */ public class VpnUtils { private static final String TAG = "VpnUtils"; public static String getLockdownVpn() { - final byte[] value = KeyStore.getInstance().get( - Credentials.LOCKDOWN_VPN, true /* suppressKeyNotFoundWarning */); + final byte[] value = LegacyVpnProfileStore.get(Credentials.LOCKDOWN_VPN); return value == null ? null : new String(value); } public static void clearLockdownVpn(Context context) { - KeyStore.getInstance().delete(Credentials.LOCKDOWN_VPN); + LegacyVpnProfileStore.remove(Credentials.LOCKDOWN_VPN); // Always notify VpnManager after keystore update getVpnManager(context).updateLockdownVpn(); } public static void setLockdownVpn(Context context, String lockdownKey) { - KeyStore.getInstance().put(Credentials.LOCKDOWN_VPN, lockdownKey.getBytes(), - KeyStore.UID_SELF, /* flags */ 0); + LegacyVpnProfileStore.put(Credentials.LOCKDOWN_VPN, lockdownKey.getBytes()); // Always notify VpnManager after keystore update getVpnManager(context).updateLockdownVpn(); } diff --git a/src/com/android/settings/widget/LabeledContinuousSeekBarPreference.java b/src/com/android/settings/widget/LabeledContinuousSeekBarPreference.java new file mode 100644 index 00000000000..e269818d9f5 --- /dev/null +++ b/src/com/android/settings/widget/LabeledContinuousSeekBarPreference.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.widget; + +import android.content.Context; +import android.util.AttributeSet; + +import com.android.settings.R; + +/** A continuous labeled slider preference */ +public class LabeledContinuousSeekBarPreference extends LabeledSeekBarPreference { + public LabeledContinuousSeekBarPreference(Context context) { + this(context, null); + } + + public LabeledContinuousSeekBarPreference(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public LabeledContinuousSeekBarPreference(Context context, AttributeSet attrs, + int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); + } + + public LabeledContinuousSeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr, + int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + setLayoutResource(R.layout.preference_labeled_continuous_slider); + } +} diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java index 3df62215ddc..0ed6747e517 100644 --- a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java @@ -31,6 +31,7 @@ import static org.mockito.Mockito.when; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; +import android.content.res.Resources; import android.os.Bundle; import android.provider.Settings; import android.view.LayoutInflater; @@ -75,7 +76,8 @@ public class ToggleScreenMagnificationPreferenceFragmentTest { "com.android.server.accessibility.MagnificationController"; private TestToggleScreenMagnificationPreferenceFragment mFragment; - private Context mContext = ApplicationProvider.getApplicationContext(); + private Context mContext; + private Resources mResources; @Mock private PreferenceManager mPreferenceManager; @@ -86,10 +88,14 @@ public class ToggleScreenMagnificationPreferenceFragmentTest { public void setUpTestFragment() { MockitoAnnotations.initMocks(this); + mContext = spy(ApplicationProvider.getApplicationContext()); mFragment = spy(new TestToggleScreenMagnificationPreferenceFragment()); when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager); when(mFragment.getPreferenceManager().getContext()).thenReturn(mContext); when(mFragment.getContext()).thenReturn(mContext); + mResources = spy(mContext.getResources()); + when(mContext.getResources()).thenReturn(mResources); + when(mFragment.getContext().getResources()).thenReturn(mResources); doReturn(null).when(mFragment).getPreferenceScreen(); doReturn(mActivity).when(mFragment).getActivity(); } @@ -250,6 +256,16 @@ public class ToggleScreenMagnificationPreferenceFragmentTest { assertThat(expectedType).isEqualTo(UserShortcutType.HARDWARE | UserShortcutType.TRIPLETAP); } + @Test + public void initSettingsPreference_notSupportsMagnificationArea_settingsPreferenceIsNull() { + when(mResources.getBoolean( + com.android.internal.R.bool.config_magnification_area)) + .thenReturn(false); + mFragment.initSettingsPreference(); + + assertThat(mFragment.mSettingsPreference).isNull(); + } + private void putStringIntoSettings(String key, String componentName) { Settings.Secure.putString(mContext.getContentResolver(), key, componentName); } diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java index b816a187bd4..b3f732f9ed3 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java @@ -34,7 +34,7 @@ import android.content.pm.PackageManager; import android.hardware.usb.UsbManager; import android.hardware.usb.UsbPort; import android.hardware.usb.UsbPortStatus; -import android.net.ConnectivityManager; +import android.net.TetheringManager; import android.os.UserHandle; import android.os.UserManager; @@ -57,7 +57,7 @@ public class UsbBackendTest { @Mock private UserManager mUserManager; @Mock - private ConnectivityManager mConnectivityManager; + private TetheringManager mTetheringManager; @Mock private UsbPort mUsbPort; @Mock @@ -69,8 +69,8 @@ public class UsbBackendTest { when(mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI)) .thenReturn(true); when((Object) mContext.getSystemService(UsbManager.class)).thenReturn(mUsbManager); - when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE)) - .thenReturn(mConnectivityManager); + when((Object) mContext.getSystemService( + TetheringManager.class)).thenReturn(mTetheringManager); when(mUsbManager.getPorts()).thenReturn(Collections.singletonList(mUsbPort)); when(mUsbPortStatus.isConnected()).thenReturn(true); when(mUsbPort.getStatus()).thenReturn(mUsbPortStatus); diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java index 4afe22a7a8d..c751e98d965 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java @@ -18,11 +18,12 @@ package com.android.settings.connecteddevice.usb; import static android.hardware.usb.UsbPortStatus.DATA_ROLE_DEVICE; import static android.hardware.usb.UsbPortStatus.POWER_ROLE_SINK; -import static android.net.ConnectivityManager.TETHERING_USB; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -30,7 +31,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.hardware.usb.UsbManager; -import android.net.ConnectivityManager; +import android.net.TetheringManager; import androidx.preference.PreferenceScreen; @@ -50,7 +51,7 @@ public class UsbDefaultFragmentTest { @Mock private UsbBackend mUsbBackend; @Mock - private ConnectivityManager mConnectivityManager; + private TetheringManager mTetheringManager; private UsbDefaultFragment mFragment; @@ -59,7 +60,7 @@ public class UsbDefaultFragmentTest { MockitoAnnotations.initMocks(this); mFragment = new TestFragment(); mFragment.mUsbBackend = mUsbBackend; - mFragment.mConnectivityManager = mConnectivityManager; + mFragment.mTetheringManager = mTetheringManager; } @Test @@ -136,8 +137,9 @@ public class UsbDefaultFragmentTest { mFragment.setDefaultKey(UsbBackend.usbFunctionsToString(UsbManager.FUNCTION_RNDIS)); - verify(mConnectivityManager).startTethering(TETHERING_USB, true, - mFragment.mOnStartTetheringCallback); + verify(mTetheringManager).startTethering(eq(TetheringManager.TETHERING_USB), + any(), + eq(mFragment.mOnStartTetheringCallback)); assertThat(mFragment.mPreviousFunctions).isEqualTo( UsbManager.FUNCTION_MTP); } diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDetailsFunctionsControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDetailsFunctionsControllerTest.java index 3ea27562eb8..9118645ce61 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDetailsFunctionsControllerTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDetailsFunctionsControllerTest.java @@ -18,11 +18,12 @@ package com.android.settings.connecteddevice.usb; import static android.hardware.usb.UsbPortStatus.DATA_ROLE_DEVICE; import static android.hardware.usb.UsbPortStatus.POWER_ROLE_SINK; -import static android.net.ConnectivityManager.TETHERING_USB; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; @@ -31,7 +32,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.hardware.usb.UsbManager; -import android.net.ConnectivityManager; +import android.net.TetheringManager; import androidx.fragment.app.FragmentActivity; import androidx.preference.PreferenceCategory; @@ -73,7 +74,7 @@ public class UsbDetailsFunctionsControllerTest { @Mock private FragmentActivity mActivity; @Mock - private ConnectivityManager mConnectivityManager; + private TetheringManager mTetheringManager; @Before public void setUp() { @@ -89,7 +90,7 @@ public class UsbDetailsFunctionsControllerTest { when(mFragment.getContext()).thenReturn(mContext); when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager); when(mFragment.getPreferenceScreen()).thenReturn(mScreen); - when(mContext.getSystemService(ConnectivityManager.class)).thenReturn(mConnectivityManager); + when(mContext.getSystemService(TetheringManager.class)).thenReturn(mTetheringManager); mDetailsFunctionsController = new UsbDetailsFunctionsController(mContext, mFragment, mUsbBackend); @@ -245,8 +246,9 @@ public class UsbDetailsFunctionsControllerTest { mDetailsFunctionsController.onRadioButtonClicked(mRadioButtonPreference); - verify(mConnectivityManager).startTethering(TETHERING_USB, true, - mDetailsFunctionsController.mOnStartTetheringCallback); + verify(mTetheringManager).startTethering(eq(TetheringManager.TETHERING_USB), + any(), + eq(mDetailsFunctionsController.mOnStartTetheringCallback)); assertThat(mDetailsFunctionsController.mPreviousFunction).isEqualTo( UsbManager.FUNCTION_MTP); } @@ -295,15 +297,16 @@ public class UsbDetailsFunctionsControllerTest { mDetailsFunctionsController.onRadioButtonClicked(mRadioButtonPreference); verify(mUsbBackend, never()).setCurrentFunctions(UsbManager.FUNCTION_PTP); - verify(mConnectivityManager, never()).startTethering(TETHERING_USB, true, - mDetailsFunctionsController.mOnStartTetheringCallback); + verify(mTetheringManager, never()).startTethering(eq(TetheringManager.TETHERING_USB), + any(), + eq(mDetailsFunctionsController.mOnStartTetheringCallback)); } @Test public void onTetheringFailed_resetPreviousFunctions() { mDetailsFunctionsController.mPreviousFunction = UsbManager.FUNCTION_PTP; - mDetailsFunctionsController.mOnStartTetheringCallback.onTetheringFailed(); + mDetailsFunctionsController.mOnStartTetheringCallback.onTetheringFailed(0); verify(mUsbBackend).setCurrentFunctions(UsbManager.FUNCTION_PTP); } diff --git a/tests/robotests/src/com/android/settings/development/bluetooth/BaseBluetoothDialogPreferenceTest.java b/tests/robotests/src/com/android/settings/development/bluetooth/BaseBluetoothDialogPreferenceTest.java index 8a3493087a0..323486e5da9 100644 --- a/tests/robotests/src/com/android/settings/development/bluetooth/BaseBluetoothDialogPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/development/bluetooth/BaseBluetoothDialogPreferenceTest.java @@ -105,6 +105,7 @@ public class BaseBluetoothDialogPreferenceTest { public void onBindDialogView_checkRadioButtonsText() { when(mView.findViewById(ID1)).thenReturn(mRadioButton1); when(mView.findViewById(ID2)).thenReturn(mRadioButton2); + when(mView.findViewById(TEXT_VIEW_ID)).thenReturn(mTextView); assertThat(mRadioButton1.getText()).isNotEqualTo(BUTTON1); assertThat(mRadioButton2.getText()).isNotEqualTo(BUTTON2); @@ -118,6 +119,7 @@ public class BaseBluetoothDialogPreferenceTest { public void onBindDialogView_checkRadioButtonsState() { when(mView.findViewById(ID1)).thenReturn(mRadioButton1); when(mView.findViewById(ID2)).thenReturn(mRadioButton2); + when(mView.findViewById(TEXT_VIEW_ID)).thenReturn(mTextView); List indexes = new ArrayList<>(); indexes.add(0); when(mCallback.getSelectableIndex()).thenReturn(indexes); diff --git a/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java index 5feee6002e0..32c86276559 100644 --- a/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java @@ -98,7 +98,7 @@ public class RecentLocationAccessPreferenceControllerTest { @Test @Ignore public void updateState_whenAppListIsEmpty_shouldDisplayTitleTextAndDetailsText() { - doReturn(new ArrayList<>()).when(mRecentLocationApps).getAppListSorted(); + doReturn(new ArrayList<>()).when(mRecentLocationApps).getAppListSorted(false); mController.displayPreference(mScreen); mController.updateState(mLayoutPreference);