From 9dc35d21b49d3f5f685b53ca30cdfc12393a6376 Mon Sep 17 00:00:00 2001 From: Charles Chen Date: Thu, 4 May 2023 18:30:48 +0000 Subject: [PATCH 1/5] Revert^2 Disable Settings large-screen optimization Disable the optimization that is automatically enabled when including Window Extensions through Activity Embedding. The optimization causes to launch an additional trampoline activity for deep links, even when the screen size is smaller than required by Activity Embedding rules. Bug: 267725145 Bug: 279461170 fixes: 280606740 Test: Build, perf metrics Test: atest LauncherIronwoodIntegrationTests:android.platform.test.scenario.launcher.integration_tests.HomescreenCustomizationTests Test: atest SettingsMultiPaneDeepLinkTest.java Test: run v2/aep-ironwood/suite/test-mapping-ironwood-p0-cujs via ABTD on cheetah/oriole/panther/raven in udc-dev/master branch Change-Id: I74c9608fce92fc77c0f1ef2d61aba3af85afba02 --- .../android/settings/SettingsApplication.java | 5 +-- .../android/settings/SettingsInitialize.java | 4 +- .../ActivityEmbeddingUtils.java | 41 +++++++++++++++++-- .../homepage/SettingsHomepageActivity.java | 3 +- 4 files changed, 42 insertions(+), 11 deletions(-) diff --git a/src/com/android/settings/SettingsApplication.java b/src/com/android/settings/SettingsApplication.java index 49cb85e2392..7d8055d6337 100644 --- a/src/com/android/settings/SettingsApplication.java +++ b/src/com/android/settings/SettingsApplication.java @@ -22,9 +22,8 @@ import android.net.Uri; import android.provider.Settings; import android.util.FeatureFlagUtils; -import androidx.window.embedding.SplitController; - import com.android.settings.activityembedding.ActivityEmbeddingRulesController; +import com.android.settings.activityembedding.ActivityEmbeddingUtils; import com.android.settings.core.instrumentation.ElapsedTimeUtils; import com.android.settings.homepage.SettingsHomepageActivity; import com.android.settings.spa.SettingsSpaEnvironment; @@ -53,7 +52,7 @@ public class SettingsApplication extends Application { setSpaEnvironment(); if (FeatureFlagUtils.isEnabled(this, FeatureFlagUtils.SETTINGS_SUPPORT_LARGE_SCREEN) - && SplitController.getInstance(this).isSplitSupported()) { + && ActivityEmbeddingUtils.isSettingsSplitEnabled(this)) { if (WizardManagerHelper.isUserSetupComplete(this)) { new ActivityEmbeddingRulesController(this).initRules(); } else { diff --git a/src/com/android/settings/SettingsInitialize.java b/src/com/android/settings/SettingsInitialize.java index 1d235233f0e..37a564b7c6a 100644 --- a/src/com/android/settings/SettingsInitialize.java +++ b/src/com/android/settings/SettingsInitialize.java @@ -37,9 +37,9 @@ import android.os.UserManager; import android.util.Log; import androidx.annotation.VisibleForTesting; -import androidx.window.embedding.SplitController; import com.android.settings.Settings.CreateShortcutActivity; +import com.android.settings.activityembedding.ActivityEmbeddingUtils; import com.android.settings.homepage.DeepLinkHomepageActivity; import com.android.settings.search.SearchStateReceiver; import com.android.settingslib.utils.ThreadUtils; @@ -166,7 +166,7 @@ public class SettingsInitialize extends BroadcastReceiver { DeepLinkHomepageActivity.class); final ComponentName searchStateReceiver = new ComponentName(context, SearchStateReceiver.class); - final int enableState = SplitController.getInstance(context).isSplitSupported() + final int enableState = ActivityEmbeddingUtils.isSettingsSplitEnabled(context) ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; pm.setComponentEnabledSetting(deepLinkHome, enableState, PackageManager.DONT_KILL_APP); diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java b/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java index a0dac5a9ec5..ae890f87632 100644 --- a/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java +++ b/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java @@ -18,6 +18,7 @@ package com.android.settings.activityembedding; import android.app.Activity; import android.content.Context; +import android.os.SystemProperties; import android.util.DisplayMetrics; import android.util.FeatureFlagUtils; import android.util.Log; @@ -39,6 +40,21 @@ public class ActivityEmbeddingUtils { private static final int MIN_SMALLEST_SCREEN_SPLIT_WIDTH_DP = 600; // The minimum width of the activity to show the regular homepage layout. private static final float MIN_REGULAR_HOMEPAGE_LAYOUT_WIDTH_DP = 380f; + + /** + * Indicates whether to enable large screen optimization if the device supports + * the Activity Embedding split feature. + *

+ * Note that the large screen optimization won't be enabled if the device doesn't support the + * Activity Embedding feature regardless of this property value. + * + * @see androidx.window.embedding.SplitController#getSplitSupportStatus + * @see androidx.window.embedding.SplitController.SplitSupportStatus#SPLIT_AVAILABLE + * @see androidx.window.embedding.SplitController.SplitSupportStatus#SPLIT_UNAVAILABLE + */ + private static final boolean SHOULD_ENABLE_LARGE_SCREEN_OPTIMIZATION = + SystemProperties.getBoolean("persist.settings.large_screen_opt.enabled", true); + private static final String TAG = "ActivityEmbeddingUtils"; /** Get the smallest width dp of the window when the split should be used. */ @@ -62,18 +78,35 @@ public class ActivityEmbeddingUtils { return context.getResources().getFloat(R.dimen.config_activity_embed_split_ratio); } - /** Whether to support embedding activity feature. */ + /** + * Returns {@code true} to indicate that Settings app support the Activity Embedding feature on + * this device. Returns {@code false}, otherwise. + */ + public static boolean isSettingsSplitEnabled(Context context) { + return SHOULD_ENABLE_LARGE_SCREEN_OPTIMIZATION + && SplitController.getInstance(context).getSplitSupportStatus() + == SplitController.SplitSupportStatus.SPLIT_AVAILABLE; + } + + /** + * Checks whether to support embedding activity feature with following conditions: + *

+ */ public static boolean isEmbeddingActivityEnabled(Context context) { boolean isFlagEnabled = FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_SUPPORT_LARGE_SCREEN); - boolean isSplitSupported = SplitController.getInstance(context).isSplitSupported(); + boolean isSettingsSplitSupported = isSettingsSplitEnabled(context); boolean isUserSetupComplete = WizardManagerHelper.isUserSetupComplete(context); Log.d(TAG, "isFlagEnabled = " + isFlagEnabled); - Log.d(TAG, "isSplitSupported = " + isSplitSupported); + Log.d(TAG, "isSettingsSplitSupported = " + isSettingsSplitSupported); Log.d(TAG, "isUserSetupComplete = " + isUserSetupComplete); - return isFlagEnabled && isSplitSupported && isUserSetupComplete; + return isFlagEnabled && isSettingsSplitSupported && isUserSetupComplete; } /** Whether to show the regular or simplified homepage layout. */ diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java index 7713e270425..03bc1b32fb2 100644 --- a/src/com/android/settings/homepage/SettingsHomepageActivity.java +++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java @@ -58,7 +58,6 @@ import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.window.embedding.ActivityEmbeddingController; -import androidx.window.embedding.SplitController; import androidx.window.embedding.SplitRule; import com.android.settings.R; @@ -429,7 +428,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements private boolean shouldLaunchDeepLinkIntentToRight() { if (!FeatureFlagUtils.isEnabled(this, FeatureFlagUtils.SETTINGS_SUPPORT_LARGE_SCREEN) - || !SplitController.getInstance(this).isSplitSupported()) { + || !ActivityEmbeddingUtils.isSettingsSplitEnabled(this)) { return false; } From 360cb671f2a735e219b2e9f28d52c31455691497 Mon Sep 17 00:00:00 2001 From: Angela Wang Date: Thu, 4 May 2023 08:56:17 +0000 Subject: [PATCH 2/5] Hides Flash Notifications illustration on tablet Since tablet illustrations are not yet finalized, we'll hide the Flash Notifications illustration on tablet for now. Bug: 280748155 Test: checks the UI on phone and tablet manually Change-Id: I5a309dec3291f3585cc1d9769e2465c94250fa7f --- res/xml/flash_notifications_settings.xml | 3 +- ...ationIllustrationPreferenceController.java | 46 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/com/android/settings/accessibility/FlashNotificationIllustrationPreferenceController.java diff --git a/res/xml/flash_notifications_settings.xml b/res/xml/flash_notifications_settings.xml index 63937b1a486..85cc2cb4d15 100644 --- a/res/xml/flash_notifications_settings.xml +++ b/res/xml/flash_notifications_settings.xml @@ -27,7 +27,8 @@ + settings:lottie_rawRes="@drawable/flash_notifications_illustration" + settings:controller="com.android.settings.accessibility.FlashNotificationIllustrationPreferenceController"/> productCharacteristics = new ArraySet<>(characteristicsSplit.length); + Collections.addAll(productCharacteristics, characteristicsSplit); + final boolean isTablet = productCharacteristics.contains("tablet"); + return isTablet ? UNSUPPORTED_ON_DEVICE : AVAILABLE; + } +} From b723c4f96a8f59a2a58f68a19e9a186620a548b9 Mon Sep 17 00:00:00 2001 From: Sunny Shao Date: Mon, 8 May 2023 13:58:16 +0800 Subject: [PATCH 3/5] Fix the updateDialogForCdmaPhone test case failed - This is a side effect of the CL(ag/16379105) which removed the getTextAsDigits API. - Update the return value as empty string of the TelephonyManager.getImei(). Fixes: 215071948 Test: atest ImeiInfoDialogControllerTest Change-Id: I790b5dc505ad1a91a951a4c46b241baddea392a1 --- .../deviceinfo/imei/ImeiInfoDialogControllerTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) 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 a396a92ba98..89cc6d90361 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogControllerTest.java @@ -39,7 +39,6 @@ import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -197,11 +196,10 @@ public class ImeiInfoDialogControllerTest { } @Test - @Ignore public void populateImeiInfo_emptyImei_shouldSetMeid_imeiSetToEmptyString() { doReturn(true).when(mController).isCdmaLteEnabled(); when(mTelephonyManager.getPhoneType()).thenReturn(TelephonyManager.PHONE_TYPE_CDMA); - when(mTelephonyManager.getImei(anyInt())).thenReturn(null); + when(mTelephonyManager.getImei(anyInt())).thenReturn(""); mController.populateImeiInfo(); From d2e6c2fe6da7ca0ea30b1529fefc50e638da5d1f Mon Sep 17 00:00:00 2001 From: Han Xu Date: Mon, 8 May 2023 15:49:10 +0800 Subject: [PATCH 4/5] Fix wifi QR layout to fix image stretching Bug: 270063908 Test: manual Change-Id: I86e7d54bb78306292fcb355c1a4879a43cc876f7 --- .../wifi_dpp_qrcode_scanner_fragment.xml | 69 ------------------- .../wifi_dpp_qrcode_scanner_fragment.xml | 38 ++++++---- 2 files changed, 25 insertions(+), 82 deletions(-) delete mode 100644 res/layout-land/wifi_dpp_qrcode_scanner_fragment.xml diff --git a/res/layout-land/wifi_dpp_qrcode_scanner_fragment.xml b/res/layout-land/wifi_dpp_qrcode_scanner_fragment.xml deleted file mode 100644 index 11bb0ae4eaf..00000000000 --- a/res/layout-land/wifi_dpp_qrcode_scanner_fragment.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/res/layout/wifi_dpp_qrcode_scanner_fragment.xml b/res/layout/wifi_dpp_qrcode_scanner_fragment.xml index dd96d7e93d3..84470ba9a7d 100644 --- a/res/layout/wifi_dpp_qrcode_scanner_fragment.xml +++ b/res/layout/wifi_dpp_qrcode_scanner_fragment.xml @@ -36,19 +36,31 @@ android:gravity="center" android:orientation="vertical"> - - - - + + + + + + + + Date: Mon, 8 May 2023 16:10:27 +0800 Subject: [PATCH 5/5] Fix the battery string incorrect spelling Fix: 281473201 Test: presubmit Change-Id: I9e4eb7f6c18918620a5e12680a30a5ba8bc7aa42 --- 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 5f40087d8f6..184b7c7290a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -5175,7 +5175,7 @@ Charging optimized to protect your battery - To help extend your batter\'s lifespan, charging is optimized + To help extend your battery\'s lifespan, charging is optimized Charging optimized to protect your battery