From 46294872c79a643ee9a1b1c1d6df422660221ea5 Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Thu, 9 May 2019 15:13:23 +0800 Subject: [PATCH 01/10] Remove On/Off subtext next to the Wi-Fi toggle Fixes: 132312797 Test: robotest, visual Change-Id: I2c3b39e8deda211d23be0b2a73426778dbbf53db --- .../android/settings/wifi/slice/WifiSlice.java | 16 ---------------- .../settings/wifi/slice/WifiSliceTest.java | 11 ++--------- 2 files changed, 2 insertions(+), 25 deletions(-) diff --git a/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java index a687b935393..de4db74705a 100644 --- a/src/com/android/settings/wifi/slice/WifiSlice.java +++ b/src/com/android/settings/wifi/slice/WifiSlice.java @@ -137,7 +137,6 @@ public class WifiSlice implements CustomSliceable { final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.ic_settings_wireless); final String title = mContext.getString(R.string.wifi_settings); - final CharSequence summary = getSummary(); final PendingIntent toggleAction = getBroadcastIntent(mContext); final PendingIntent primaryAction = getPrimaryAction(); final SliceAction primarySliceAction = SliceAction.createDeeplink(primaryAction, icon, @@ -150,7 +149,6 @@ public class WifiSlice implements CustomSliceable { .setKeywords(getKeywords()) .addRow(new ListBuilder.RowBuilder() .setTitle(title) - .setSubtitle(summary) .addEndItem(toggleSliceAction) .setPrimaryAction(primarySliceAction)); } @@ -320,20 +318,6 @@ public class WifiSlice implements CustomSliceable { } } - private CharSequence getSummary() { - switch (mWifiManager.getWifiState()) { - case WifiManager.WIFI_STATE_ENABLED: - case WifiManager.WIFI_STATE_ENABLING: - return mContext.getText(R.string.switch_on_text); - case WifiManager.WIFI_STATE_DISABLED: - case WifiManager.WIFI_STATE_DISABLING: - return mContext.getText(R.string.switch_off_text); - case WifiManager.WIFI_STATE_UNKNOWN: - default: - return null; - } - } - private PendingIntent getPrimaryAction() { final Intent intent = getIntent(); return PendingIntent.getActivity(mContext, 0 /* requestCode */, diff --git a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java index fabc50ec4aa..18ed0065c2b 100644 --- a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java +++ b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java @@ -238,20 +238,13 @@ public class WifiSliceTest { setWorkerResults(createAccessPoint(AP1_NAME, true, true)); doReturn(makeCaptivePortalNetworkCapabilities()).when(mConnectivityManager) .getNetworkCapabilities(any()); + final IconCompat expectedIcon = IconCompat.createWithResource(mContext, + R.drawable.ic_settings_accent); final Slice wifiSlice = mWifiSlice.getSlice(); final List sliceItems = wifiSlice.getItems(); SliceTester.assertAnySliceItemContainsTitle(sliceItems, AP1_NAME); - assertCaptivePortalItems(sliceItems); - } - - private void assertCaptivePortalItems(List sliceItems) { - final String expectedSummary = mContext.getString(R.string.switch_on_text); - SliceTester.assertAnySliceItemContainsSubtitle(sliceItems, expectedSummary); - - final IconCompat expectedIcon = IconCompat.createWithResource(mContext, - R.drawable.ic_settings_accent); SliceTester.assertAnySliceItemContainsIcon(sliceItems, expectedIcon); } From 9ac6d811773108d3ffb2cfdbf60592782cd20cea Mon Sep 17 00:00:00 2001 From: andychou Date: Thu, 9 May 2019 00:00:23 +0800 Subject: [PATCH 02/10] Fix IMEI information can't display without pSIM inserted When no SIM, we can't get active subscription info. So current code will not create TelephonyManager and cause IMEI not retrieved. Create TelephonyManager with default if no subscription info. Bug: 132215720 Test: test with SIM and without SIM to check SIM status UI and atest ImeiInfoDialogControllerTest pass Change-Id: Iaeb932ea66a6bee77136251941cca657984e456f --- .../imei/ImeiInfoDialogController.java | 12 ++++++++++- .../imei/ImeiInfoDialogControllerTest.java | 21 ++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java index 4b2f50d8702..5c3772bac8d 100644 --- a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java +++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java @@ -78,9 +78,12 @@ public class ImeiInfoDialogController { final Context context = dialog.getContext(); mSubscriptionInfo = context.getSystemService(SubscriptionManager.class) .getActiveSubscriptionInfoForSimSlotIndex(slotId); + TelephonyManager tm = context.getSystemService(TelephonyManager.class); if (mSubscriptionInfo != null) { mTelephonyManager = context.getSystemService(TelephonyManager.class) .createForSubscriptionId(mSubscriptionInfo.getSubscriptionId()); + } else if(isValidSlotIndex(slotId, tm)) { + mTelephonyManager = tm; } else { mTelephonyManager = null; } @@ -104,6 +107,7 @@ public class ImeiInfoDialogController { private void updateDialogForCdmaPhone() { final Resources res = mDialog.getContext().getResources(); mDialog.setText(ID_MEID_NUMBER_VALUE, getMeid()); + // MIN needs to read from SIM. So if no SIM, we should not show MIN on UI mDialog.setText(ID_MIN_NUMBER_VALUE, mSubscriptionInfo != null ? mTelephonyManager.getCdmaMin(mSubscriptionInfo.getSubscriptionId()) : ""); @@ -137,7 +141,8 @@ public class ImeiInfoDialogController { @VisibleForTesting String getCdmaPrlVersion() { - return mTelephonyManager.getCdmaPrlVersion(); + // PRL needs to read from SIM. So if no SIM, return empty + return mSubscriptionInfo != null ? mTelephonyManager.getCdmaPrlVersion() : ""; } @VisibleForTesting @@ -150,4 +155,9 @@ public class ImeiInfoDialogController { String getMeid() { return mTelephonyManager.getMeid(mSlotId); } + + @VisibleForTesting + private boolean isValidSlotIndex(int slotIndex, TelephonyManager telephonyManager) { + return slotIndex >= 0 && slotIndex < telephonyManager.getPhoneCount(); + } } diff --git a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogControllerTest.java index f38668cc0e6..7ad8d631edf 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogControllerTest.java @@ -86,8 +86,8 @@ public class ImeiInfoDialogControllerTest { mController = spy(new ImeiInfoDialogController(mDialog, SLOT_ID)); - doReturn(PRL_VERSION).when(mController).getCdmaPrlVersion(); - doReturn(MEID_NUMBER).when(mController).getMeid(); + when(mTelephonyManager.getCdmaPrlVersion()).thenReturn(PRL_VERSION); + when(mTelephonyManager.getMeid(anyInt())).thenReturn(MEID_NUMBER); when(mTelephonyManager.getCdmaMin(anyInt())).thenReturn(MIN_NUMBER); when(mTelephonyManager.getDeviceSoftwareVersion(anyInt())).thenReturn(IMEI_SV_NUMBER); when(mTelephonyManager.getImei(anyInt())).thenReturn(IMEI_NUMBER); @@ -98,6 +98,7 @@ public class ImeiInfoDialogControllerTest { mController = spy(new ImeiInfoDialogController(mDialog, SLOT_ID + 1)); mController.populateImeiInfo(); + verify(mDialog, never()).setText(anyInt(), any()); } @@ -129,16 +130,30 @@ public class ImeiInfoDialogControllerTest { } @Test - public void populateImeiInfo_cdmaSimDisabled_shouldRemoveImeiInfoAndSetMinToEmpty() { + public void populateImeiInfo_cdmaSimDisabled_shouldRemoveImeiInfoAndSetMinPrlToEmpty() { ReflectionHelpers.setField(mController, "mSubscriptionInfo", null); when(mTelephonyManager.getPhoneType()).thenReturn(TelephonyManager.PHONE_TYPE_CDMA); mController.populateImeiInfo(); + verify(mDialog).setText(ID_MEID_NUMBER_VALUE, MEID_NUMBER); verify(mDialog).setText(ID_MIN_NUMBER_VALUE, ""); + verify(mDialog).setText(ID_PRL_VERSION_VALUE, ""); verify(mDialog).removeViewFromScreen(ID_GSM_SETTINGS); } + @Test + public void populateImeiInfo_gsmSimDisabled_shouldSetImeiAndRemoveCdmaSettings() { + ReflectionHelpers.setField(mController, "mSubscriptionInfo", null); + when(mTelephonyManager.getPhoneType()).thenReturn(TelephonyManager.PHONE_TYPE_GSM); + + mController.populateImeiInfo(); + + verify(mDialog).setText(eq(ID_IMEI_VALUE), any()); + verify(mDialog).setText(eq(ID_IMEI_SV_VALUE), any()); + verify(mDialog).removeViewFromScreen(ID_CDMA_SETTINGS); + } + @Test public void populateImeinfo_gsm_shouldSetImeiAndRemoveCdmaSettings() { when(mTelephonyManager.getPhoneType()).thenReturn(TelephonyManager.PHONE_TYPE_GSM); From 22a9f539e9d4af2d1a83b43591f0201c77d06b41 Mon Sep 17 00:00:00 2001 From: Lei Yu Date: Thu, 9 May 2019 15:12:59 -0700 Subject: [PATCH 03/10] Use NetworkTemplate to query data So virtual carrier can get correct data with merged subscriberIds Bug: 120566366 Test: RunSettingsLibRoboTests Change-Id: I02abed77dffb55ef49fe0c4142f6f5b4a42ebe52 --- .../appinfo/AppDataUsagePreferenceController.java | 1 - src/com/android/settings/datausage/AppDataUsage.java | 3 +-- src/com/android/settings/datausage/DataUsageList.java | 4 +--- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java index 7d9fdcf75ad..4d19151dbc9 100644 --- a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java @@ -92,7 +92,6 @@ public class AppDataUsagePreferenceController extends AppInfoPreferenceControlle .addUid(mParent.getAppEntry().info.uid) .setRetrieveDetail(false) .setNetworkTemplate(template) - .setSubscriberId(template.getSubscriberId()) .build(); } diff --git a/src/com/android/settings/datausage/AppDataUsage.java b/src/com/android/settings/datausage/AppDataUsage.java index 8bab2566649..a86459e6e02 100644 --- a/src/com/android/settings/datausage/AppDataUsage.java +++ b/src/com/android/settings/datausage/AppDataUsage.java @@ -393,8 +393,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC final NetworkCycleDataForUidLoader.Builder builder = NetworkCycleDataForUidLoader.builder(mContext); builder.setRetrieveDetail(true) - .setNetworkTemplate(mTemplate) - .setSubscriberId(mTemplate.getSubscriberId()); + .setNetworkTemplate(mTemplate); if (mAppItem.category == AppItem.CATEGORY_USER) { for (int i = 0; i < mAppItem.uids.size(); i++) { builder.addUid(mAppItem.uids.keyAt(i)); diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java index 96a1e22c6a0..f477ba30190 100644 --- a/src/com/android/settings/datausage/DataUsageList.java +++ b/src/com/android/settings/datausage/DataUsageList.java @@ -496,7 +496,6 @@ public class DataUsageList extends DataUsageBaseFragment { public Loader> onCreateLoader(int id, Bundle args) { return NetworkCycleChartDataLoader.builder(getContext()) .setNetworkTemplate(mTemplate) - .setSubscriberId(mTelephonyManager.getSubscriberId(mSubId)) .build(); } @@ -523,8 +522,7 @@ public class DataUsageList extends DataUsageBaseFragment { return new NetworkStatsSummaryLoader.Builder(getContext()) .setStartTime(mChart.getInspectStart()) .setEndTime(mChart.getInspectEnd()) - .setNetworkType(mNetworkType) - .setSubscriberId(mTelephonyManager.getSubscriberId(mSubId)) + .setNetworkTemplate(mTemplate) .build(); } From 98aa52dbec933b780186ffc65f3c20b825170577 Mon Sep 17 00:00:00 2001 From: Hai Shalom Date: Mon, 13 May 2019 15:31:58 -0700 Subject: [PATCH 04/10] [OWE] Support OWE in transition mode Support OWE in transition mode for devices with OWE support and devices without OWE support. Scan results will return a new type of network for OWE in transition networks on devices that support OWE, and Open for devices that don't support OWE. Handle the case where Open network is manually added to a device that supports OWE. Bug: 132139642 Test: Device with OWE: Connect to Open, OWE-Transition, OWE networks Test: Device without OWE: Connect to Open, OWE-Transition Test: Manually create Open network, connect to OWE-Transition Change-Id: I1a584ccbfec8507803c527ea13933cff6f699ccb --- .../settings/wifi/WifiConfigController.java | 19 +++++++++++++++---- .../android/settings/wifi/WifiSettings.java | 7 +++++-- src/com/android/settings/wifi/WifiUtils.java | 3 ++- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java index ba26f02f49d..0be7c2b0d34 100644 --- a/src/com/android/settings/wifi/WifiConfigController.java +++ b/src/com/android/settings/wifi/WifiConfigController.java @@ -582,9 +582,11 @@ public class WifiConfigController implements TextWatcher, } /** - * Special handling for WPA2/WPA3 in Transition mode: The key SECURITY_PSK_SAE_TRANSITION is - * a pseudo key which results by the scan results, but never appears in the saved networks. - * A saved network is either WPA3 for supporting devices or WPA2 for non-supporting devices. + * Special handling for WPA2/WPA3 and OWE in Transition mode: The key + * SECURITY_PSK_SAE_TRANSITION and SECURITY_OWE_TRANSITION are pseudo keys which result by the + * scan results, but never appears in the saved networks. + * A saved network is either WPA3 for supporting devices or WPA2 for non-supporting devices, + * or, OWE for supporting devices or Open for non-supporting devices. * * @param accessPointSecurity Access point current security type * @return Converted security type (if required) @@ -597,6 +599,14 @@ public class WifiConfigController implements TextWatcher, return AccessPoint.SECURITY_PSK; } } + if (accessPointSecurity == AccessPoint.SECURITY_OWE_TRANSITION) { + if (mWifiManager.isEnhancedOpenSupported()) { + return AccessPoint.SECURITY_OWE; + } else { + return AccessPoint.SECURITY_NONE; + } + } + return accessPointSecurity; } @@ -948,7 +958,8 @@ public class WifiConfigController implements TextWatcher, private void showSecurityFields() { if (mAccessPointSecurity == AccessPoint.SECURITY_NONE || - mAccessPointSecurity == AccessPoint.SECURITY_OWE) { + mAccessPointSecurity == AccessPoint.SECURITY_OWE || + mAccessPointSecurity == AccessPoint.SECURITY_OWE_TRANSITION) { mView.findViewById(R.id.security_fields).setVisibility(View.GONE); return; } diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index 4d3f230db1e..8c4bfa28ad8 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -494,7 +494,9 @@ public class WifiSettings extends RestrictedSettingsFragment if (isSavedNetwork) { connect(mSelectedAccessPoint.getConfig(), isSavedNetwork); } else if ((mSelectedAccessPoint.getSecurity() == AccessPoint.SECURITY_NONE) || - (mSelectedAccessPoint.getSecurity() == AccessPoint.SECURITY_OWE)) { + (mSelectedAccessPoint.getSecurity() == AccessPoint.SECURITY_OWE) || + (mSelectedAccessPoint.getSecurity() + == AccessPoint.SECURITY_OWE_TRANSITION)) { /** Bypass dialog for unsecured networks */ mSelectedAccessPoint.generateOpenNetworkConfig(); connect(mSelectedAccessPoint.getConfig(), isSavedNetwork); @@ -748,7 +750,8 @@ public class WifiSettings extends RestrictedSettingsFragment preference.setOrder(index); if (mOpenSsid != null && mOpenSsid.equals(accessPoint.getSsidStr()) && (accessPoint.getSecurity() != AccessPoint.SECURITY_NONE && - accessPoint.getSecurity() != AccessPoint.SECURITY_OWE)) { + accessPoint.getSecurity() != AccessPoint.SECURITY_OWE && + accessPoint.getSecurity() != AccessPoint.SECURITY_OWE_TRANSITION)) { if (!accessPoint.isSaved() || isDisabledByWrongPassword(accessPoint)) { onPreferenceTreeClick(preference); mOpenSsid = null; diff --git a/src/com/android/settings/wifi/WifiUtils.java b/src/com/android/settings/wifi/WifiUtils.java index 9b3c1b368c9..c4df5676246 100644 --- a/src/com/android/settings/wifi/WifiUtils.java +++ b/src/com/android/settings/wifi/WifiUtils.java @@ -268,7 +268,8 @@ public class WifiUtils { if (accessPoint.isOsuProvider()) { return CONNECT_TYPE_OSU_PROVISION; } else if ((accessPoint.getSecurity() == AccessPoint.SECURITY_NONE) || - (accessPoint.getSecurity() == AccessPoint.SECURITY_OWE)) { + (accessPoint.getSecurity() == AccessPoint.SECURITY_OWE) || + (accessPoint.getSecurity() == AccessPoint.SECURITY_OWE_TRANSITION)) { return CONNECT_TYPE_OPEN_NETWORK; } else if (accessPoint.isSaved() && config != null && config.getNetworkSelectionStatus() != null From 200dd1b8b30c9a862e087e168aac1af72ed2af9e Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Mon, 13 May 2019 18:23:22 -0700 Subject: [PATCH 05/10] Update button string to "Start" Fixes: 132648319 Test: Builds Change-Id: I05fa1a8d4d24d5ebef95588df64442718bf42c99 --- res/values/strings.xml | 2 ++ .../android/settings/biometrics/face/FaceEnrollEducation.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 1b24912481e..a63095e0d79 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -894,6 +894,8 @@ Use your face to authenticate + + Start Use accessibility setup diff --git a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java index 6e162dcb8b9..139ab257ed6 100644 --- a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java +++ b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java @@ -108,7 +108,7 @@ public class FaceEnrollEducation extends BiometricEnrollBase { ); final FooterButton footerButton = new FooterButton.Builder(this) - .setText(R.string.wizard_next) + .setText(R.string.security_settings_face_enroll_education_start) .setListener(this::onNextButtonClick) .setButtonType(FooterButton.ButtonType.NEXT) .setTheme(R.style.SudGlifButton_Primary) From a336a7c9f1b3060131de5d47f8fba45a9242e347 Mon Sep 17 00:00:00 2001 From: joshmccloskey Date: Mon, 13 May 2019 18:24:51 -0700 Subject: [PATCH 06/10] Fixed talkback issue Test: It builds Fixes: 132635400 Change-Id: I6b3d42561d848a2fdc0f366a96bf3284e5a757fe --- .../biometrics/face/FaceEnrollEducation.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java index 73fd11e1976..c6415631b65 100644 --- a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java +++ b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java @@ -30,6 +30,7 @@ import android.os.UserHandle; import android.provider.Settings; import android.text.TextUtils; import android.view.View; +import android.view.accessibility.AccessibilityManager; import android.widget.Button; import android.widget.CompoundButton; @@ -105,11 +106,17 @@ public class FaceEnrollEducation extends BiometricEnrollBase { .setTheme(R.style.SudGlifButton_Primary) .build(); + boolean accessibilityEnabled = false; + final AccessibilityManager accessibilityManager = getApplicationContext().getSystemService( + AccessibilityManager.class); + if (accessibilityManager != null) { + accessibilityEnabled = accessibilityManager.isEnabled(); + } mFooterBarMixin.setPrimaryButton(footerButton); final Context context = getApplicationContext(); final boolean didDisplayEdu = Settings.Secure.getIntForUser(context.getContentResolver(), FACE_UNLOCK_EDUCATION_INFO_DISPLAYED, OFF, mUserId) == ON; - if (!didDisplayEdu) { + if (!didDisplayEdu && !accessibilityEnabled) { Settings.Secure.putIntForUser(context.getContentResolver(), FACE_UNLOCK_EDUCATION_INFO_DISPLAYED, ON, mUserId); footerButton.setEnabled(false); @@ -128,6 +135,10 @@ public class FaceEnrollEducation extends BiometricEnrollBase { mSwitchDiversity = findViewById(R.id.toggle_diversity); mSwitchDiversity.setListener(mSwitchDiversityListener); + + if (accessibilityEnabled) { + accessibilityButton.callOnClick(); + } } @Override From 7e470bf806a5916341609a5313cb0740c1d46e4e Mon Sep 17 00:00:00 2001 From: joshmccloskey Date: Mon, 13 May 2019 19:29:24 -0700 Subject: [PATCH 07/10] Increased char limit for translations Test: It builds. Bug: 132638233 Change-Id: Ie7deaf82471c832351af9f25f7b4725b65f3c66a --- 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 a9d5285ed73..e669a26f970 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -890,7 +890,7 @@ Face authentication How to set up Face unlock - + Use your face to authenticate @@ -906,7 +906,7 @@ Cancel Unlock with your face - + Use your face to authenticate Use your face to unlock your phone, authorize purchases, or sign in to apps. From 3eee5cf02e5fda758a1f5e471648d9838a299187 Mon Sep 17 00:00:00 2001 From: cnchen Date: Mon, 6 May 2019 10:19:10 +0800 Subject: [PATCH 08/10] Font size page support light theme in deferred setup Bug:124470158 Test: atest & manually test Change-Id: I41e1e98a9a64e516a294c4a94c8b5f335434078f Merged-In: I41e1e98a9a64e516a294c4a94c8b5f335434078f --- AndroidManifest.xml | 14 +++++-- res/values/themes.xml | 13 ++++++ .../android/settings/SettingsActivity.java | 9 ++-- .../android/settings/SetupWizardUtils.java | 16 +++++++ ...ibilitySettingsForSetupWizardActivity.java | 41 ++++++++++++++++++ .../settings/core/SettingsBaseActivity.java | 7 ++++ .../settings/core/SubSettingLauncher.java | 13 ++++++ .../settings/SetupWizardUtilsTest.java | 27 +++++++++--- ...itySettingsForSetupWizardActivityTest.java | 42 +++++++++++++++++++ 9 files changed, 171 insertions(+), 11 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 8e62c452d35..4c7446b5b23 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1447,6 +1447,16 @@ + + + + + @@ -1457,9 +1467,7 @@ android:value="true" /> - - + @*android:color/secondary_text_light + + diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 4ac4be4b209..383585c59a4 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -51,7 +51,6 @@ import androidx.preference.PreferenceManager; import com.android.internal.util.ArrayUtils; import com.android.settings.Settings.WifiSettingsActivity; import com.android.settings.applications.manageapplications.ManageApplications; -import com.android.settings.backup.BackupSettingsHelper; import com.android.settings.backup.UserBackupSettingsActivity; import com.android.settings.core.OnActivityResultListener; import com.android.settings.core.SettingsBaseActivity; @@ -67,6 +66,8 @@ import com.android.settingslib.core.instrumentation.SharedPreferencesLogger; import com.android.settingslib.development.DevelopmentSettingsEnabler; import com.android.settingslib.drawer.DashboardCategory; +import com.google.android.setupcompat.util.WizardManagerHelper; + import java.util.ArrayList; import java.util.List; @@ -243,8 +244,10 @@ public class SettingsActivity extends SettingsBaseActivity intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, false); // If this is a sub settings, then apply the SubSettings Theme for the ActionBar content - // insets - if (isSubSettings) { + // insets. + // If this is in setup flow, don't apply theme. Because light theme needs to be applied + // in SettingsBaseActivity#onCreate(). + if (isSubSettings && !WizardManagerHelper.isAnySetupWizard(getIntent())) { setTheme(R.style.Theme_SubSettings); } diff --git a/src/com/android/settings/SetupWizardUtils.java b/src/com/android/settings/SetupWizardUtils.java index 077d94c51d9..bce6f3f2919 100644 --- a/src/com/android/settings/SetupWizardUtils.java +++ b/src/com/android/settings/SetupWizardUtils.java @@ -16,12 +16,18 @@ package com.android.settings; +import static com.google.android.setupcompat.util.WizardManagerHelper.EXTRA_IS_FIRST_RUN; +import static com.google.android.setupcompat.util.WizardManagerHelper.EXTRA_IS_SETUP_FLOW; + import android.content.Intent; +import android.os.Bundle; import android.sysprop.SetupWizardProperties; import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupdesign.util.ThemeHelper; +import java.util.Arrays; + public class SetupWizardUtils { @@ -90,4 +96,14 @@ public class SetupWizardUtils { public static void copySetupExtras(Intent fromIntent, Intent toIntent) { WizardManagerHelper.copyWizardManagerExtras(fromIntent, toIntent); } + + public static Bundle copyLifecycleExtra(Bundle srcBundle, Bundle dstBundle) { + for (String key : + Arrays.asList( + EXTRA_IS_FIRST_RUN, + EXTRA_IS_SETUP_FLOW)) { + dstBundle.putBoolean(key, srcBundle.getBoolean(key, false)); + } + return dstBundle; + } } diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java index fc68d2caf04..0ed1644f522 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java +++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java @@ -16,23 +16,35 @@ package com.android.settings.accessibility; +import android.content.ComponentName; import android.os.Bundle; +import android.util.Log; import android.view.Menu; import android.view.accessibility.AccessibilityEvent; +import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import com.android.settings.SettingsActivity; +import com.android.settings.SetupWizardUtils; import com.android.settings.core.SubSettingLauncher; +import com.android.settings.display.FontSizePreferenceFragmentForSetupWizard; import com.android.settings.search.actionbar.SearchMenuController; import com.android.settings.support.actionbar.HelpResourceProvider; import com.android.settingslib.core.instrumentation.Instrumentable; +import com.google.android.setupcompat.util.WizardManagerHelper; + public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivity { + private static final String LOG_TAG = "A11ySettingsForSUW"; private static final String SAVE_KEY_TITLE = "activity_title"; + @VisibleForTesting + static final String CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW = + "com.android.settings.FontSizeSettingsForSetupWizardActivity"; + @Override protected void onSaveInstanceState(Bundle savedState) { savedState.putCharSequence(SAVE_KEY_TITLE, getTitle()); @@ -79,4 +91,33 @@ public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivit .launch(); return true; } + + @Override + protected void onCreate(Bundle savedState) { + super.onCreate(savedState); + + tryLaunchFontSizeSettings(); + } + + @VisibleForTesting + void tryLaunchFontSizeSettings() { + if (WizardManagerHelper.isAnySetupWizard(getIntent()) + && new ComponentName(getPackageName(), + CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW).equals( + getIntent().getComponent())) { + final Bundle args = new Bundle(); + args.putInt(HelpResourceProvider.HELP_URI_RESOURCE_KEY, 0); + args.putBoolean(SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR, false); + final SubSettingLauncher subSettingLauncher = new SubSettingLauncher(this) + .setDestination(FontSizePreferenceFragmentForSetupWizard.class.getName()) + .setArguments(args) + .setSourceMetricsCategory(Instrumentable.METRICS_CATEGORY_UNKNOWN) + .setExtras(SetupWizardUtils.copyLifecycleExtra(getIntent().getExtras(), + new Bundle())); + + Log.d(LOG_TAG, "Launch font size settings"); + subSettingLauncher.launch(); + finish(); + } + } } diff --git a/src/com/android/settings/core/SettingsBaseActivity.java b/src/com/android/settings/core/SettingsBaseActivity.java index cd1365404c8..5ff81d54aa6 100644 --- a/src/com/android/settings/core/SettingsBaseActivity.java +++ b/src/com/android/settings/core/SettingsBaseActivity.java @@ -37,8 +37,11 @@ import android.widget.Toolbar; import androidx.fragment.app.FragmentActivity; import com.android.settings.R; +import com.android.settings.SubSettings; import com.android.settings.dashboard.CategoryManager; +import com.google.android.setupcompat.util.WizardManagerHelper; + import java.util.ArrayList; import java.util.List; @@ -65,6 +68,10 @@ public class SettingsBaseActivity extends FragmentActivity { if (!theme.getBoolean(android.R.styleable.Theme_windowNoTitle, false)) { requestWindowFeature(Window.FEATURE_NO_TITLE); } + // Apply SetupWizard light theme during setup flow. This is for SubSettings pages. + if (WizardManagerHelper.isAnySetupWizard(getIntent()) && this instanceof SubSettings) { + setTheme(R.style.LightTheme_SubSettings_SetupWizard); + } super.setContentView(R.layout.settings_base_layout); final Toolbar toolbar = findViewById(R.id.action_bar); diff --git a/src/com/android/settings/core/SubSettingLauncher.java b/src/com/android/settings/core/SubSettingLauncher.java index 39ecd7875d5..5d9a5282021 100644 --- a/src/com/android/settings/core/SubSettingLauncher.java +++ b/src/com/android/settings/core/SubSettingLauncher.java @@ -19,6 +19,7 @@ package com.android.settings.core; import android.annotation.StringRes; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.os.UserHandle; import android.text.TextUtils; @@ -89,6 +90,11 @@ public class SubSettingLauncher { return this; } + public SubSettingLauncher setExtras(Bundle extras) { + mLaunchRequest.extras = extras; + return this; + } + public SubSettingLauncher setSourceMetricsCategory(int sourceMetricsCategory) { mLaunchRequest.sourceMetricsCategory = sourceMetricsCategory; return this; @@ -136,6 +142,7 @@ public class SubSettingLauncher { public Intent toIntent() { final Intent intent = new Intent(Intent.ACTION_MAIN); + copyExtras(intent); intent.setClass(mContext, SubSettings.class); if (TextUtils.isEmpty(mLaunchRequest.destinationName)) { throw new IllegalArgumentException("Destination fragment must be set"); @@ -180,6 +187,11 @@ public class SubSettingLauncher { listener.startActivityForResult(intent, requestCode); } + private void copyExtras(Intent intent) { + if (mLaunchRequest.extras != null) { + intent.replaceExtras(mLaunchRequest.extras); + } + } /** * Simple container that has information about how to launch a subsetting. */ @@ -194,5 +206,6 @@ public class SubSettingLauncher { int mRequestCode; UserHandle userHandle; Bundle arguments; + Bundle extras; } } diff --git a/tests/robotests/src/com/android/settings/SetupWizardUtilsTest.java b/tests/robotests/src/com/android/settings/SetupWizardUtilsTest.java index b965d788338..5f4f31b6ed3 100644 --- a/tests/robotests/src/com/android/settings/SetupWizardUtilsTest.java +++ b/tests/robotests/src/com/android/settings/SetupWizardUtilsTest.java @@ -19,6 +19,7 @@ package com.android.settings; import static com.google.common.truth.Truth.assertThat; import android.content.Intent; +import android.os.Bundle; import android.sysprop.SetupWizardProperties; import com.google.android.setupcompat.util.WizardManagerHelper; @@ -31,9 +32,6 @@ import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class SetupWizardUtilsTest { - private static final String EXTRA_IS_SETUP_FLOW = "isSetupFlow"; - private static final String EXTRA_IS_FIRST_RUN = "firstRun"; - @Test public void testCopySetupExtras() { Intent fromIntent = new Intent(); @@ -46,6 +44,25 @@ public class SetupWizardUtilsTest { assertThat(theme).isEqualTo(toIntent.getStringExtra(WizardManagerHelper.EXTRA_THEME)); assertThat(toIntent.getBooleanExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, false)) .isTrue(); + assertThat(toIntent.getBooleanExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true)) + .isFalse(); + } + + @Test + public void testCopyLifecycleExtra() { + Intent fromIntent = new Intent(); + final String theme = "TEST_THEME"; + fromIntent.putExtra(WizardManagerHelper.EXTRA_THEME, theme); + fromIntent.putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true); + Bundle dstBundle = new Bundle(); + dstBundle = SetupWizardUtils.copyLifecycleExtra(fromIntent.getExtras(), dstBundle); + + assertThat(dstBundle).isNotNull(); + assertThat(dstBundle.getString(WizardManagerHelper.EXTRA_THEME)).isNull(); + assertThat(dstBundle.getBoolean(WizardManagerHelper.EXTRA_IS_SETUP_FLOW)) + .isTrue(); + assertThat(dstBundle.getBoolean(WizardManagerHelper.EXTRA_IS_FIRST_RUN)) + .isFalse(); } @Test @@ -87,7 +104,7 @@ public class SetupWizardUtilsTest { private Intent createSetupWizardIntent() { return new Intent() - .putExtra(EXTRA_IS_SETUP_FLOW, true) - .putExtra(EXTRA_IS_FIRST_RUN, true); + .putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true) + .putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true); } } diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java index a0a9de9c88a..c3a630b0670 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java @@ -16,18 +16,27 @@ package com.android.settings.accessibility; +import static com.android.settings.accessibility.AccessibilitySettingsForSetupWizardActivity.CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW; + import static com.google.common.truth.Truth.assertThat; +import android.content.ComponentName; import android.content.Intent; import androidx.test.filters.SmallTest; import com.android.settings.R; +import com.android.settings.SettingsActivity; +import com.android.settings.display.FontSizePreferenceFragmentForSetupWizard; + +import com.google.android.setupcompat.util.WizardManagerHelper; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.Shadows; @RunWith(RobolectricTestRunner.class) @SmallTest @@ -41,4 +50,37 @@ public class AccessibilitySettingsForSetupWizardActivityTest { assertThat(activity.getThemeResId()).isEqualTo(R.style.GlifV3Theme_Light); } + + @Test + public void onCreate_hasFontSizeComponent_shouldGoToFontSizePreferenceDirectly() { + AccessibilitySettingsForSetupWizardActivity activity = + Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class, + new Intent(Intent.ACTION_MAIN).setComponent(new ComponentName( + RuntimeEnvironment.application, CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW)). + putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true). + putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)).get(); + + activity.tryLaunchFontSizeSettings(); + + final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity(); + assertThat(launchIntent).isNotNull(); + assertThat(launchIntent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)).isEqualTo( + FontSizePreferenceFragmentForSetupWizard.class.getName()); + assertThat(activity.isFinishing()).isTrue(); + } + + @Test + public void onCreate_noFontSizeComponent_shouldNotFinishCurrentActivity() { + AccessibilitySettingsForSetupWizardActivity activity = + Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class, + new Intent(Intent.ACTION_MAIN). + putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true). + putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)).get(); + + activity.tryLaunchFontSizeSettings(); + + final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity(); + assertThat(launchIntent).isNull(); + assertThat(activity.isFinishing()).isFalse(); + } } From 9e98b8cf0fd0669fdc3c351aafb91fa8e4a0d9ad Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Tue, 14 May 2019 16:30:16 +0000 Subject: [PATCH 09/10] Revert "Make subsettings display edge-to-edge" This reverts commit c2a85a374d28612c8d51d72523b49f9c2856f96e. Bug: 132672399 Bug: 132182711 Test: n/a Reason for revert: b/132672399 Change-Id: Icb34ae5b16b7a32215fe2c1a5f0d0d028c91b2ca --- AndroidManifest.xml | 3 +-- res/layout/settings_base_layout.xml | 4 ++-- res/values/themes.xml | 3 --- src/com/android/settings/SettingsActivity.java | 6 ++++++ src/com/android/settings/core/SettingsBaseActivity.java | 5 ----- .../android/settings/homepage/SettingsHomepageActivity.java | 4 ++-- 6 files changed, 11 insertions(+), 14 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 0603796be19..8e62c452d35 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -164,8 +164,7 @@ + android:parentActivityName="Settings" /> diff --git a/res/layout/settings_base_layout.xml b/res/layout/settings_base_layout.xml index f94d25d4841..7216d7660aa 100644 --- a/res/layout/settings_base_layout.xml +++ b/res/layout/settings_base_layout.xml @@ -19,7 +19,6 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" - android:fitsSystemWindows="true" android:orientation="vertical"> + android:layout_height="fill_parent" + android:background="?android:attr/windowBackground" /> diff --git a/res/values/themes.xml b/res/values/themes.xml index 4249f97c6e1..4edd943a224 100644 --- a/res/values/themes.xml +++ b/res/values/themes.xml @@ -27,11 +27,8 @@