Show/hide back button for 2nd page

By design, we want to show/hide back button for 2nd
layer page when it's in two pane mode.

Test: Manual test
Bug: 219000314
Change-Id: I14d8d7ee08280d5ce80c0b59e1e91d077f0b6d09
diff --git a/Android.bp b/Android.bp
index fd66974..0940b0b 100644
--- a/Android.bp
+++ b/Android.bp
@@ -75,6 +75,7 @@
         "lottie",
         "WifiTrackerLib",
         "windowExtLib",
+        "SettingsLibActivityEmbedding",
     ],
 
     libs: [
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index d3d3604..d9dc590 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -143,6 +143,8 @@
 
     public static final String EXTRA_SHOW_FRAGMENT_AS_SUBSETTING =
             ":settings:show_fragment_as_subsetting";
+    public static final String EXTRA_IS_SECONDARY_LAYER_PAGE =
+            ":settings:is_secondary_layer_page";
 
     /**
      * Additional extra of Settings#ACTION_SETTINGS_LARGE_SCREEN_DEEP_LINK.
@@ -301,12 +303,12 @@
             launchSettingFragment(initialFragmentName, intent);
         }
 
-        final boolean isInSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
+        final boolean isActionBarButtonEnabled = isActionBarButtonEnabled(intent);
 
         final ActionBar actionBar = getActionBar();
         if (actionBar != null) {
-            actionBar.setDisplayHomeAsUpEnabled(!isInSetupWizard);
-            actionBar.setHomeButtonEnabled(!isInSetupWizard);
+            actionBar.setDisplayHomeAsUpEnabled(isActionBarButtonEnabled);
+            actionBar.setHomeButtonEnabled(isActionBarButtonEnabled);
             actionBar.setDisplayShowTitleEnabled(true);
         }
         mMainSwitch = findViewById(R.id.switch_bar);
@@ -366,6 +368,18 @@
         }
     }
 
+    private boolean isActionBarButtonEnabled(Intent intent) {
+        if (WizardManagerHelper.isAnySetupWizard(intent)) {
+            return false;
+        }
+        final boolean isSecondaryLayerPage =
+                intent.getBooleanExtra(EXTRA_IS_SECONDARY_LAYER_PAGE, false);
+
+        // TODO: move Settings's ActivityEmbeddingUtils to SettingsLib.
+        return !com.android.settingslib.activityembedding.ActivityEmbeddingUtils
+                        .shouldHideBackButton(this, isSecondaryLayerPage);
+    }
+
     private boolean isSubSettings(Intent intent) {
         return this instanceof SubSettings ||
             intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, false);
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
index a2dd4bf..dee24df 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
@@ -34,6 +34,7 @@
 import androidx.window.embedding.SplitRule;
 
 import com.android.settings.Settings;
+import com.android.settings.SettingsActivity;
 import com.android.settings.SubSettings;
 import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling;
 import com.android.settings.biometrics.fingerprint.FingerprintEnrollIntroduction;
@@ -196,6 +197,7 @@
         addActivityFilter(activityFilters, Settings.class);
 
         final Intent intent = new Intent(mContext, Settings.NetworkDashboardActivity.class);
+        intent.putExtra(SettingsActivity.EXTRA_IS_SECONDARY_LAYER_PAGE, true);
         final SplitPlaceholderRule placeholderRule = new SplitPlaceholderRule(
                 activityFilters,
                 intent,
diff --git a/src/com/android/settings/core/SubSettingLauncher.java b/src/com/android/settings/core/SubSettingLauncher.java
index 616d72f3..93a939f 100644
--- a/src/com/android/settings/core/SubSettingLauncher.java
+++ b/src/com/android/settings/core/SubSettingLauncher.java
@@ -43,11 +43,11 @@
         }
         mContext = context;
         mLaunchRequest = new LaunchRequest();
-        mLaunchRequest.transitionType = TransitionType.TRANSITION_SHARED_AXIS;
+        mLaunchRequest.mTransitionType = TransitionType.TRANSITION_SHARED_AXIS;
     }
 
     public SubSettingLauncher setDestination(String fragmentName) {
-        mLaunchRequest.destinationName = fragmentName;
+        mLaunchRequest.mDestinationName = fragmentName;
         return this;
     }
 
@@ -67,9 +67,9 @@
      * @param titleResId       res id of string, will use package name to resolve
      */
     public SubSettingLauncher setTitleRes(String titlePackageName, @StringRes int titleResId) {
-        mLaunchRequest.titleResPackageName = titlePackageName;
-        mLaunchRequest.titleResId = titleResId;
-        mLaunchRequest.title = null;
+        mLaunchRequest.mTitleResPackageName = titlePackageName;
+        mLaunchRequest.mTitleResId = titleResId;
+        mLaunchRequest.mTitle = null;
         return this;
     }
 
@@ -82,22 +82,22 @@
      * @param title text title
      */
     public SubSettingLauncher setTitleText(CharSequence title) {
-        mLaunchRequest.title = title;
+        mLaunchRequest.mTitle = title;
         return this;
     }
 
     public SubSettingLauncher setArguments(Bundle arguments) {
-        mLaunchRequest.arguments = arguments;
+        mLaunchRequest.mArguments = arguments;
         return this;
     }
 
     public SubSettingLauncher setExtras(Bundle extras) {
-        mLaunchRequest.extras = extras;
+        mLaunchRequest.mExtras = extras;
         return this;
     }
 
     public SubSettingLauncher setSourceMetricsCategory(int sourceMetricsCategory) {
-        mLaunchRequest.sourceMetricsCategory = sourceMetricsCategory;
+        mLaunchRequest.mSourceMetricsCategory = sourceMetricsCategory;
         return this;
     }
 
@@ -108,17 +108,23 @@
     }
 
     public SubSettingLauncher addFlags(int flags) {
-        mLaunchRequest.flags |= flags;
+        mLaunchRequest.mFlags |= flags;
         return this;
     }
 
     public SubSettingLauncher setUserHandle(UserHandle userHandle) {
-        mLaunchRequest.userHandle = userHandle;
+        mLaunchRequest.mUserHandle = userHandle;
         return this;
     }
 
     public SubSettingLauncher setTransitionType(int transitionType) {
-        mLaunchRequest.transitionType = transitionType;
+        mLaunchRequest.mTransitionType = transitionType;
+        return this;
+    }
+
+    /** Decide whether the next page is secondary layer page or not. */
+    public SubSettingLauncher setIsSecondaryLayerPage(boolean isSecondaryLayerPage) {
+        mLaunchRequest.mIsSecondaryLayerPage = isSecondaryLayerPage;
         return this;
     }
 
@@ -131,14 +137,14 @@
 
         final Intent intent = toIntent();
 
-        boolean launchAsUser = mLaunchRequest.userHandle != null
-                && mLaunchRequest.userHandle.getIdentifier() != UserHandle.myUserId();
+        boolean launchAsUser = mLaunchRequest.mUserHandle != null
+                && mLaunchRequest.mUserHandle.getIdentifier() != UserHandle.myUserId();
         boolean launchForResult = mLaunchRequest.mResultListener != null;
         if (launchAsUser && launchForResult) {
-            launchForResultAsUser(intent, mLaunchRequest.userHandle, mLaunchRequest.mResultListener,
-                    mLaunchRequest.mRequestCode);
+            launchForResultAsUser(intent, mLaunchRequest.mUserHandle,
+                    mLaunchRequest.mResultListener, mLaunchRequest.mRequestCode);
         } else if (launchAsUser && !launchForResult) {
-            launchAsUser(intent, mLaunchRequest.userHandle);
+            launchAsUser(intent, mLaunchRequest.mUserHandle);
         } else if (!launchAsUser && launchForResult) {
             launchForResult(mLaunchRequest.mResultListener, intent, mLaunchRequest.mRequestCode);
         } else {
@@ -150,26 +156,28 @@
         final Intent intent = new Intent(Intent.ACTION_MAIN);
         copyExtras(intent);
         intent.setClass(mContext, SubSettings.class);
-        if (TextUtils.isEmpty(mLaunchRequest.destinationName)) {
+        if (TextUtils.isEmpty(mLaunchRequest.mDestinationName)) {
             throw new IllegalArgumentException("Destination fragment must be set");
         }
-        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, mLaunchRequest.destinationName);
+        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, mLaunchRequest.mDestinationName);
 
-        if (mLaunchRequest.sourceMetricsCategory < 0) {
+        if (mLaunchRequest.mSourceMetricsCategory < 0) {
             throw new IllegalArgumentException("Source metrics category must be set");
         }
         intent.putExtra(MetricsFeatureProvider.EXTRA_SOURCE_METRICS_CATEGORY,
-                mLaunchRequest.sourceMetricsCategory);
+                mLaunchRequest.mSourceMetricsCategory);
 
-        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, mLaunchRequest.arguments);
+        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, mLaunchRequest.mArguments);
         intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RES_PACKAGE_NAME,
-                mLaunchRequest.titleResPackageName);
+                mLaunchRequest.mTitleResPackageName);
         intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID,
-                mLaunchRequest.titleResId);
-        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE, mLaunchRequest.title);
-        intent.addFlags(mLaunchRequest.flags);
+                mLaunchRequest.mTitleResId);
+        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE, mLaunchRequest.mTitle);
+        intent.addFlags(mLaunchRequest.mFlags);
         intent.putExtra(SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE,
-                mLaunchRequest.transitionType);
+                mLaunchRequest.mTransitionType);
+        intent.putExtra(SettingsActivity.EXTRA_IS_SECONDARY_LAYER_PAGE,
+                mLaunchRequest.mIsSecondaryLayerPage);
 
         return intent;
     }
@@ -196,8 +204,8 @@
     }
 
     private void copyExtras(Intent intent) {
-        if (mLaunchRequest.extras != null) {
-            intent.replaceExtras(mLaunchRequest.extras);
+        if (mLaunchRequest.mExtras != null) {
+            intent.replaceExtras(mLaunchRequest.mExtras);
         }
     }
 
@@ -205,17 +213,18 @@
      * Simple container that has information about how to launch a subsetting.
      */
     static class LaunchRequest {
-        String destinationName;
-        int titleResId;
-        String titleResPackageName;
-        CharSequence title;
-        int sourceMetricsCategory = -100;
-        int flags;
+        String mDestinationName;
+        int mTitleResId;
+        String mTitleResPackageName;
+        CharSequence mTitle;
+        int mSourceMetricsCategory = -100;
+        int mFlags;
         Fragment mResultListener;
         int mRequestCode;
-        UserHandle userHandle;
-        int transitionType;
-        Bundle arguments;
-        Bundle extras;
+        UserHandle mUserHandle;
+        int mTransitionType;
+        Bundle mArguments;
+        Bundle mExtras;
+        boolean mIsSecondaryLayerPage;
     }
 }
diff --git a/src/com/android/settings/development/featureflags/FeatureFlagPreference.java b/src/com/android/settings/development/featureflags/FeatureFlagPreference.java
index d6bdb77..992aa0f 100644
--- a/src/com/android/settings/development/featureflags/FeatureFlagPreference.java
+++ b/src/com/android/settings/development/featureflags/FeatureFlagPreference.java
@@ -17,6 +17,8 @@
 package com.android.settings.development.featureflags;
 
 import android.content.Context;
+import android.provider.Settings;
+import android.text.TextUtils;
 import android.util.FeatureFlagUtils;
 
 import androidx.preference.SwitchPreference;
@@ -49,5 +51,13 @@
         } else {
             FeatureFlagUtils.setEnabled(getContext(), mKey, isChecked);
         }
+
+        // A temporary logic for settings_hide_secondary_page_back_button_in_two_pane
+        // Remove it before Android T release.
+        if (TextUtils.equals(mKey,
+                FeatureFlagUtils.SETTINGS_HIDE_SECONDARY_PAGE_BACK_BUTTON_IN_TWO_PANE)) {
+            Settings.Global.putString(getContext().getContentResolver(),
+                    mKey, String.valueOf(isChecked));
+        }
     }
 }
diff --git a/src/com/android/settings/homepage/TopLevelSettings.java b/src/com/android/settings/homepage/TopLevelSettings.java
index 7ce6730..734e079 100644
--- a/src/com/android/settings/homepage/TopLevelSettings.java
+++ b/src/com/android/settings/homepage/TopLevelSettings.java
@@ -119,6 +119,7 @@
                         ? ((Instrumentable) caller).getMetricsCategory()
                         : Instrumentable.METRICS_CATEGORY_UNKNOWN)
                 .setTitleRes(-1)
+                .setIsSecondaryLayerPage(true)
                 .launch();
         return true;
     }