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; }