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