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
This commit is contained in:
@@ -75,6 +75,7 @@ android_library {
|
||||
"lottie",
|
||||
"WifiTrackerLib",
|
||||
"windowExtLib",
|
||||
"SettingsLibActivityEmbedding",
|
||||
],
|
||||
|
||||
libs: [
|
||||
|
@@ -143,6 +143,8 @@ public class SettingsActivity extends SettingsBaseActivity
|
||||
|
||||
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 @@ public class SettingsActivity extends SettingsBaseActivity
|
||||
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 @@ public class SettingsActivity extends SettingsBaseActivity
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
@@ -34,6 +34,7 @@ import androidx.window.embedding.SplitPlaceholderRule;
|
||||
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 @@ public class ActivityEmbeddingRulesController {
|
||||
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,
|
||||
|
@@ -43,11 +43,11 @@ public class SubSettingLauncher {
|
||||
}
|
||||
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 @@ public class SubSettingLauncher {
|
||||
* @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 @@ public class SubSettingLauncher {
|
||||
* @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 class SubSettingLauncher {
|
||||
}
|
||||
|
||||
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 @@ public class SubSettingLauncher {
|
||||
|
||||
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 @@ public class SubSettingLauncher {
|
||||
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 @@ public class SubSettingLauncher {
|
||||
}
|
||||
|
||||
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 @@ public class SubSettingLauncher {
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
|
@@ -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 @@ public class FeatureFlagPreference extends SwitchPreference {
|
||||
} 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -119,6 +119,7 @@ public class TopLevelSettings extends DashboardFragment implements
|
||||
? ((Instrumentable) caller).getMetricsCategory()
|
||||
: Instrumentable.METRICS_CATEGORY_UNKNOWN)
|
||||
.setTitleRes(-1)
|
||||
.setIsSecondaryLayerPage(true)
|
||||
.launch();
|
||||
return true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user