From 2a5051e4fd8f894464a64fbcfbab75254445e033 Mon Sep 17 00:00:00 2001 From: paulhu Date: Tue, 23 Feb 2021 18:38:42 +0800 Subject: [PATCH 01/13] Update Utils#getTetheringLabel usage on Settings Utils#getTetheringLabel() is using TetheringManger to get tetherable interface. So update the usage on Settings. Bug: 180693313 Test: atest SettingsRoboTests Change-Id: I1907743ed13c333ecbafd25b6dd9276fe692f2ea --- .../settings/network/TetherPreferenceController.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/com/android/settings/network/TetherPreferenceController.java b/src/com/android/settings/network/TetherPreferenceController.java index 8df0ac1f7fd..f91f78713dc 100644 --- a/src/com/android/settings/network/TetherPreferenceController.java +++ b/src/com/android/settings/network/TetherPreferenceController.java @@ -27,7 +27,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; -import android.net.ConnectivityManager; import android.net.TetheringManager; import android.net.Uri; import android.os.Bundle; @@ -61,7 +60,6 @@ public class TetherPreferenceController extends AbstractPreferenceController imp private final boolean mAdminDisallowedTetherConfig; private final AtomicReference mBluetoothPan; - private final ConnectivityManager mConnectivityManager; private final BluetoothAdapter mBluetoothAdapter; private final TetheringManager mTetheringManager; @VisibleForTesting @@ -86,7 +84,6 @@ public class TetherPreferenceController extends AbstractPreferenceController imp super(null); mAdminDisallowedTetherConfig = false; mBluetoothPan = new AtomicReference<>(); - mConnectivityManager = null; mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); mTetheringManager = null; } @@ -95,8 +92,6 @@ public class TetherPreferenceController extends AbstractPreferenceController imp super(context); mBluetoothPan = new AtomicReference<>(); mAdminDisallowedTetherConfig = isTetherConfigDisallowed(context); - mConnectivityManager = - (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); mTetheringManager = context.getSystemService(TetheringManager.class); if (lifecycle != null) { @@ -110,7 +105,7 @@ public class TetherPreferenceController extends AbstractPreferenceController imp mPreference = screen.findPreference(KEY_TETHER_SETTINGS); if (mPreference != null && !mAdminDisallowedTetherConfig) { mPreference.setTitle( - com.android.settingslib.Utils.getTetheringLabel(mConnectivityManager)); + com.android.settingslib.Utils.getTetheringLabel(mTetheringManager)); } } From 3d41fe560b5ac9b3ed5b14d9be2494f9493336da Mon Sep 17 00:00:00 2001 From: mincheli Date: Wed, 20 Jan 2021 17:24:25 +0800 Subject: [PATCH 02/13] Hides the settings entry in Magnification Settings if device is not supported If the device doesn't support magnification area, we should hide the settings entry in mangification settings Bug: 177371954 Test: atest ToggleScreenMagnificationPreferenceFragmentTest Change-Id: I41fc3177f86c6a19e3ef0d2fbe5e052d77c1cb47 --- ...eScreenMagnificationPreferenceFragment.java | 7 +++++++ ...eenMagnificationPreferenceFragmentTest.java | 18 +++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java index ff467226ea8..dde5be17d74 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -128,8 +128,15 @@ public class ToggleScreenMagnificationPreferenceFragment extends @Override protected void initSettingsPreference() { + // If the device doesn't support magnification area, it should hide the settings preference. + if (!getContext().getResources().getBoolean( + com.android.internal.R.bool.config_magnification_area)) { + return; + } mSettingsPreference = new Preference(getPrefContext()); mSettingsPreference.setTitle(R.string.accessibility_menu_item_settings); + // TODO(b/177371954): "magnification area" should be brought up to the highest level of the + // settings UI so that it appears below "shortcut" to replace "settings. mSettingsPreference.setFragment(MagnificationSettingsFragment.class.getName()); mSettingsPreference.setPersistent(false); 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); } From 0a476f5f533c316a47ab13cf22d7b12b96263117 Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Tue, 2 Mar 2021 03:50:01 +0000 Subject: [PATCH 03/13] Update DataSaverBackend to use NetworkPolicyManager.Listener. This will avoid having to update this every time we add a new callback. Test: treehugger Change-Id: Ic34e3eac87d207eb2ffff7430fdf3b77871ae812 --- .../settings/datausage/DataSaverBackend.java | 25 +++---------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/src/com/android/settings/datausage/DataSaverBackend.java b/src/com/android/settings/datausage/DataSaverBackend.java index e8087c48a66..1a622feb323 100644 --- a/src/com/android/settings/datausage/DataSaverBackend.java +++ b/src/com/android/settings/datausage/DataSaverBackend.java @@ -20,10 +20,7 @@ import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND; import android.app.settings.SettingsEnums; import android.content.Context; -import android.net.INetworkPolicyListener; import android.net.NetworkPolicyManager; -import android.os.RemoteException; -import android.telephony.SubscriptionPlan; import android.util.SparseIntArray; import com.android.settings.overlay.FeatureFactory; @@ -180,33 +177,17 @@ public class DataSaverBackend { } - private final INetworkPolicyListener mPolicyListener = new INetworkPolicyListener.Stub() { - @Override - public void onUidRulesChanged(int uid, int uidRules) throws RemoteException { - } - + private final NetworkPolicyManager.Listener mPolicyListener = + new NetworkPolicyManager.Listener() { @Override public void onUidPoliciesChanged(final int uid, final int uidPolicies) { ThreadUtils.postOnMainThread(() -> 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 { From fc593b92c2d0c70fbbd56ad8c658f084ca67c126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thi=C3=A9baud=20Weksteen?= Date: Tue, 2 Mar 2021 17:53:12 +0100 Subject: [PATCH 04/13] Add summary for 2G toggle option Bug: 181667681 Test: build & manually verify toggle text Change-Id: Ie086b2e3e277b4bfd612bf2a4437e48fa931c1c0 --- res/values/strings.xml | 4 +++- res/xml/mobile_network_settings.xml | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 5abba1faabd..5133ab2cb31 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -12804,6 +12804,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 @@ From 6a22201c7cf176536d81519346b56c5c77b106b5 Mon Sep 17 00:00:00 2001 From: sallyyuen Date: Sun, 7 Feb 2021 12:10:53 -0800 Subject: [PATCH 05/13] [Reduce Bright Colors] Add labels to intensity slider Test: Manual Bug: b/128465252 Change-Id: I278aed9a7da552d787c7b5426504f6f429d4d6ab --- .../preference_labeled_continuous_slider.xml | 68 +++++++++++++++++++ res/xml/reduce_bright_colors_settings.xml | 7 +- .../LabeledContinuousSeekBarPreference.java | 44 ++++++++++++ 3 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 res/layout/preference_labeled_continuous_slider.xml create mode 100644 src/com/android/settings/widget/LabeledContinuousSeekBarPreference.java 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/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"/> Date: Mon, 25 Jan 2021 14:59:38 -0800 Subject: [PATCH 06/13] Keystore 2.0: Make Legacy VPN settings ready for Keystore 2.0 Keystore 2.0 no longer stores vpn profiles. It still offers a Legacy VPN profile store, to access existing profiles. Test: N/A Bug: 171305607 Bug: 171305388 Change-Id: I40dea0b9c3824b56814ae4c2fb6c7663c7d97af5 --- .../utils/AndroidKeystoreAliasLoader.java | 5 +++ .../android/settings/vpn2/ConfigDialog.java | 40 +++++++++++-------- .../settings/vpn2/ConfigDialogFragment.java | 10 ++--- .../android/settings/vpn2/VpnSettings.java | 16 ++++---- src/com/android/settings/vpn2/VpnUtils.java | 12 +++--- 5 files changed, 44 insertions(+), 39 deletions(-) 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(); } From f7513d982166d06713aa0c813ceeb3105579c24e Mon Sep 17 00:00:00 2001 From: Yu-Han Yang Date: Tue, 2 Mar 2021 14:01:28 -0800 Subject: [PATCH 07/13] Add showSystem to RecentLocationAccess (Settings) Bug: 180533061 Test: on device Change-Id: Ie232bc84d7875897316e978ed3deac9656ebec5f --- .../location/RecentLocationAccessPreferenceController.java | 3 ++- .../location/RecentLocationAccessPreferenceControllerTest.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) 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/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); From d6eb5237e2629a0b33a4fe904c3c7b6248ec5023 Mon Sep 17 00:00:00 2001 From: Tim Peng Date: Wed, 3 Mar 2021 17:02:07 +0800 Subject: [PATCH 08/13] [Fix]Test cast fail at BaseBluetoothDialogPreferenceTest Bug: 181740451 Test: make -j50 RunSettingsRoboTests Change-Id: I8b786272f50680e9e388ca64bb8d3410b85b327a --- .../bluetooth/BaseBluetoothDialogPreferenceTest.java | 2 ++ 1 file changed, 2 insertions(+) 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); From 0091ae614269311a1a6d29289ccff08e18c2b547 Mon Sep 17 00:00:00 2001 From: Hugh Chen Date: Tue, 2 Mar 2021 17:47:22 +0800 Subject: [PATCH 09/13] Refactor Usb settings 1. Rename ShouldIgnoreClickEvent() to isClickEventIgnored(). 2. Use TetheringManager instead of ConnectivityManager. Bug: 175651578 Test: make -j42 RunSettingsRoboTests Change-Id: I37c49694257b7575550b5a905e293b5d056ba1bf --- .../connecteddevice/usb/UsbBackend.java | 7 ++--- .../usb/UsbDefaultFragment.java | 28 +++++++++++-------- .../usb/UsbDetailsFunctionsController.java | 26 +++++++++-------- .../connecteddevice/usb/UsbBackendTest.java | 8 +++--- .../usb/UsbDefaultFragmentTest.java | 14 ++++++---- .../UsbDetailsFunctionsControllerTest.java | 21 ++++++++------ 6 files changed, 58 insertions(+), 46 deletions(-) diff --git a/src/com/android/settings/connecteddevice/usb/UsbBackend.java b/src/com/android/settings/connecteddevice/usb/UsbBackend.java index 4773aca814c..244818fe163 100644 --- a/src/com/android/settings/connecteddevice/usb/UsbBackend.java +++ b/src/com/android/settings/connecteddevice/usb/UsbBackend.java @@ -28,7 +28,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; @@ -74,9 +74,8 @@ public class UsbBackend { mIsAdminUser = userManager.isAdminUser(); mMidiSupported = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI); - ConnectivityManager cm = - (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - mTetheringSupported = cm.isTetheringSupported(); + final TetheringManager tm = context.getSystemService(TetheringManager.class); + mTetheringSupported = tm.isTetheringSupported(); updatePorts(); } diff --git a/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java b/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java index 12e978ff349..668ec3f2ce2 100644 --- a/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java +++ b/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java @@ -16,14 +16,17 @@ package com.android.settings.connecteddevice.usb; -import static android.net.ConnectivityManager.TETHERING_USB; +import static android.net.TetheringManager.TETHERING_USB; import android.app.settings.SettingsEnums; import android.content.Context; import android.graphics.drawable.Drawable; import android.hardware.usb.UsbManager; -import android.net.ConnectivityManager; +import android.net.TetheringManager; import android.os.Bundle; +import android.os.Handler; +import android.os.HandlerExecutor; +import android.util.Log; import androidx.annotation.VisibleForTesting; import androidx.preference.PreferenceScreen; @@ -43,10 +46,13 @@ import java.util.List; * Provides options for selecting the default USB mode. */ public class UsbDefaultFragment extends RadioButtonPickerFragment { + + private static final String TAG = "UsbDefaultFragment"; + @VisibleForTesting UsbBackend mUsbBackend; @VisibleForTesting - ConnectivityManager mConnectivityManager; + TetheringManager mTetheringManager; @VisibleForTesting OnStartTetheringCallback mOnStartTetheringCallback = new OnStartTetheringCallback(); @VisibleForTesting @@ -57,6 +63,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment { boolean mIsStartTethering = false; private UsbConnectionBroadcastReceiver mUsbReceiver; + private Handler mHandler = new Handler(); @VisibleForTesting UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener = @@ -71,7 +78,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment { public void onAttach(Context context) { super.onAttach(context); mUsbBackend = new UsbBackend(context); - mConnectivityManager = context.getSystemService(ConnectivityManager.class); + mTetheringManager = context.getSystemService(TetheringManager.class); mUsbReceiver = new UsbConnectionBroadcastReceiver(context, mUsbConnectionListener, mUsbBackend); getSettingsLifecycle().addObserver(mUsbReceiver); @@ -138,9 +145,9 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment { if (!Utils.isMonkeyRunning()) { if (functions == UsbManager.FUNCTION_RNDIS) { // We need to have entitlement check for usb tethering, so use API in - // ConnectivityManager. + // TetheringManager. mIsStartTethering = true; - mConnectivityManager.startTethering(TETHERING_USB, true /* showProvisioningUi */, + mTetheringManager.startTethering(TETHERING_USB, new HandlerExecutor(mHandler), mOnStartTetheringCallback); } else { mIsStartTethering = false; @@ -159,20 +166,19 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment { } @VisibleForTesting - final class OnStartTetheringCallback extends - ConnectivityManager.OnStartTetheringCallback { + final class OnStartTetheringCallback implements + TetheringManager.StartTetheringCallback { @Override public void onTetheringStarted() { - super.onTetheringStarted(); // Set default usb functions again to make internal data persistent mCurrentFunctions = UsbManager.FUNCTION_RNDIS; mUsbBackend.setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS); } @Override - public void onTetheringFailed() { - super.onTetheringFailed(); + public void onTetheringFailed(int error) { + Log.w(TAG, "onTetheringFailed() error : " + error); mUsbBackend.setDefaultUsbFunctions(mPreviousFunctions); updateCandidates(); } diff --git a/src/com/android/settings/connecteddevice/usb/UsbDetailsFunctionsController.java b/src/com/android/settings/connecteddevice/usb/UsbDetailsFunctionsController.java index 99e9d50be32..40626fbaf04 100644 --- a/src/com/android/settings/connecteddevice/usb/UsbDetailsFunctionsController.java +++ b/src/com/android/settings/connecteddevice/usb/UsbDetailsFunctionsController.java @@ -17,11 +17,12 @@ package com.android.settings.connecteddevice.usb; import static android.hardware.usb.UsbPortStatus.DATA_ROLE_DEVICE; -import static android.net.ConnectivityManager.TETHERING_USB; import android.content.Context; import android.hardware.usb.UsbManager; -import android.net.ConnectivityManager; +import android.net.TetheringManager; +import android.os.Handler; +import android.os.HandlerExecutor; import android.util.Log; import androidx.annotation.VisibleForTesting; @@ -55,7 +56,8 @@ public class UsbDetailsFunctionsController extends UsbDetailsController } private PreferenceCategory mProfilesContainer; - private ConnectivityManager mConnectivityManager; + private TetheringManager mTetheringManager; + private Handler mHandler = new Handler(); @VisibleForTesting OnStartTetheringCallback mOnStartTetheringCallback; @VisibleForTesting @@ -64,7 +66,7 @@ public class UsbDetailsFunctionsController extends UsbDetailsController public UsbDetailsFunctionsController(Context context, UsbDetailsFragment fragment, UsbBackend backend) { super(context, fragment, backend); - mConnectivityManager = context.getSystemService(ConnectivityManager.class); + mTetheringManager = context.getSystemService(TetheringManager.class); mOnStartTetheringCallback = new OnStartTetheringCallback(); mPreviousFunction = mUsbBackend.getCurrentFunctions(); } @@ -130,7 +132,7 @@ public class UsbDetailsFunctionsController extends UsbDetailsController + UsbManager.usbFunctionsToString(previousFunction)); } if (function != previousFunction && !Utils.isMonkeyRunning() - && !shouldIgnoreClickEvent(function, previousFunction)) { + && !isClickEventIgnored(function, previousFunction)) { mPreviousFunction = previousFunction; //Update the UI in advance to make it looks smooth @@ -144,8 +146,9 @@ public class UsbDetailsFunctionsController extends UsbDetailsController if (function == UsbManager.FUNCTION_RNDIS) { // We need to have entitlement check for usb tethering, so use API in - // ConnectivityManager. - mConnectivityManager.startTethering(TETHERING_USB, true /* showProvisioningUi */, + // TetheringManager. + mTetheringManager.startTethering( + TetheringManager.TETHERING_USB, new HandlerExecutor(mHandler), mOnStartTetheringCallback); } else { mUsbBackend.setCurrentFunctions(function); @@ -153,7 +156,7 @@ public class UsbDetailsFunctionsController extends UsbDetailsController } } - private boolean shouldIgnoreClickEvent(long function, long previousFunction) { + private boolean isClickEventIgnored(long function, long previousFunction) { return isAccessoryMode(previousFunction) && function == UsbManager.FUNCTION_MTP; } @@ -172,12 +175,11 @@ public class UsbDetailsFunctionsController extends UsbDetailsController } @VisibleForTesting - final class OnStartTetheringCallback extends - ConnectivityManager.OnStartTetheringCallback { + final class OnStartTetheringCallback implements TetheringManager.StartTetheringCallback { @Override - public void onTetheringFailed() { - super.onTetheringFailed(); + public void onTetheringFailed(int error) { + Log.w(TAG, "onTetheringFailed() error : " + error); mUsbBackend.setCurrentFunctions(mPreviousFunction); } } 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); } From c82767f627993c383b62fde6088119bb2acdab33 Mon Sep 17 00:00:00 2001 From: Alex Johnston Date: Wed, 3 Mar 2021 10:30:06 +0000 Subject: [PATCH 10/13] Return RESULT_OK RequestManageCredentials Bug: 177979648 Test: Manual testing Change-Id: I3b4968131f8c7b811752704808d0ef4df617a658 --- .../android/settings/security/RequestManageCredentials.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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(); From d99faa25c0c33b9f760003f606b889fd559537c2 Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Wed, 3 Mar 2021 14:51:42 +0000 Subject: [PATCH 11/13] Revert "Merge "Update Utils#getTetheringLabel usage on Settings" am: 2b1e3a971f am: ddf3efb070 am: 8c38e9543e" This reverts commit 0df55e1eb44bfecc60efd6fec12e501d79862e45. Reason for revert: Other CLs in topic were skipped, but this one wasn't, which broke sc-dev. Change-Id: Icf61dae071416381ea11cbe74cd92ae934c3047e --- .../settings/network/TetherPreferenceController.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/network/TetherPreferenceController.java b/src/com/android/settings/network/TetherPreferenceController.java index f91f78713dc..8df0ac1f7fd 100644 --- a/src/com/android/settings/network/TetherPreferenceController.java +++ b/src/com/android/settings/network/TetherPreferenceController.java @@ -27,6 +27,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; +import android.net.ConnectivityManager; import android.net.TetheringManager; import android.net.Uri; import android.os.Bundle; @@ -60,6 +61,7 @@ public class TetherPreferenceController extends AbstractPreferenceController imp private final boolean mAdminDisallowedTetherConfig; private final AtomicReference mBluetoothPan; + private final ConnectivityManager mConnectivityManager; private final BluetoothAdapter mBluetoothAdapter; private final TetheringManager mTetheringManager; @VisibleForTesting @@ -84,6 +86,7 @@ public class TetherPreferenceController extends AbstractPreferenceController imp super(null); mAdminDisallowedTetherConfig = false; mBluetoothPan = new AtomicReference<>(); + mConnectivityManager = null; mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); mTetheringManager = null; } @@ -92,6 +95,8 @@ public class TetherPreferenceController extends AbstractPreferenceController imp super(context); mBluetoothPan = new AtomicReference<>(); mAdminDisallowedTetherConfig = isTetherConfigDisallowed(context); + mConnectivityManager = + (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); mTetheringManager = context.getSystemService(TetheringManager.class); if (lifecycle != null) { @@ -105,7 +110,7 @@ public class TetherPreferenceController extends AbstractPreferenceController imp mPreference = screen.findPreference(KEY_TETHER_SETTINGS); if (mPreference != null && !mAdminDisallowedTetherConfig) { mPreference.setTitle( - com.android.settingslib.Utils.getTetheringLabel(mTetheringManager)); + com.android.settingslib.Utils.getTetheringLabel(mConnectivityManager)); } } From 18ae34ec90867c13a4a6699723cc187ccc576e0a Mon Sep 17 00:00:00 2001 From: Almaz Mingaleev Date: Wed, 3 Mar 2021 12:16:58 +0000 Subject: [PATCH 12/13] Update GeoTZ strings. Change button title to "Use location to set time zone" and summary text to "Automatic time zone is off" when "Set time zone automatically" is off. Bug: 152746236 Test: checked UI manually Merged-In: Iab177297e9047ff3b6e9452876061cdaa0740ef1 Change-Id: Iab177297e9047ff3b6e9452876061cdaa0740ef1 (cherry picked from commit fa79ee67271cecccaf190c29d48768441ef22b97) --- res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index e707dc9afc3..c77960f36db 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -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 From f7c6390bd26fc0ce299fea9e2737a879f287204f Mon Sep 17 00:00:00 2001 From: sallyyuen Date: Wed, 3 Mar 2021 10:39:21 -0800 Subject: [PATCH 13/13] Bold text string update Test: manual Bug: 181789336 Change-Id: I75a622005f7df58ea7ec7954d602b0e2f208619e --- res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 46864c2a8ad..25ec0b659d1 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2985,7 +2985,7 @@ Increased battery usage - Bold Text + Bold text Font size