Merge "[Large screen] Fix searched Subsettings back navigation bug" into sc-v2-dev
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
index d57c0c2..d3fcd7d 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
@@ -63,13 +63,6 @@
// Set a placeholder for home page.
registerHomepagePlaceholderRule();
- // Set subsettings rule.
- registerTwoPanePairRule(mContext,
- getComponentName(Settings.class),
- getComponentName(SubSettings.class),
- null /* secondaryIntentAction */,
- true /* finishPrimaryWithSecondary */,
- true /* finishSecondaryWithPrimary */);
}
/** Register a SplitPairRule for 2-pane. */
@@ -78,7 +71,8 @@
ComponentName secondaryComponent,
String secondaryIntentAction,
boolean finishPrimaryWithSecondary,
- boolean finishSecondaryWithPrimary) {
+ boolean finishSecondaryWithPrimary,
+ boolean clearTop) {
final Set<SplitPairFilter> filters = new HashSet<>();
filters.add(new SplitPairFilter(primaryComponent, secondaryComponent,
secondaryIntentAction));
@@ -86,13 +80,28 @@
SplitController.getInstance().registerRule(new SplitPairRule(filters,
finishPrimaryWithSecondary,
finishSecondaryWithPrimary,
- true /* clearTop */,
+ clearTop,
ActivityEmbeddingUtils.getMinCurrentScreenSplitWidthPx(context),
ActivityEmbeddingUtils.getMinSmallestScreenSplitWidthPx(context),
ActivityEmbeddingUtils.SPLIT_RATIO,
LayoutDirection.LOCALE));
}
+ /** Register a SplitPairRule for SubSettings if the device supports 2-pane. */
+ public static void registerSubSettingsPairRuleIfNeeded(Context context, boolean clearTop) {
+ if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context)) {
+ return;
+ }
+
+ registerTwoPanePairRule(context,
+ getComponentName(context, Settings.class),
+ getComponentName(context, SubSettings.class),
+ null /* secondaryIntentAction */,
+ true /* finishPrimaryWithSecondary */,
+ true /* finishSecondaryWithPrimary */,
+ clearTop);
+ }
+
private void registerHomepagePlaceholderRule() {
final Set<ActivityFilter> activityFilters = new HashSet<>();
addActivityFilter(activityFilters, SettingsHomepageActivity.class);
@@ -131,6 +140,12 @@
@NonNull
private ComponentName getComponentName(Class<? extends Activity> activityClass) {
- return new ComponentName(mContext.getPackageName(), activityClass.getName());
+ return getComponentName(mContext, activityClass);
+ }
+
+ @NonNull
+ private static ComponentName getComponentName(Context context,
+ Class<? extends Activity> activityClass) {
+ return new ComponentName(context.getPackageName(), activityClass.getName());
}
}
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 2def817..951eb3c 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -180,7 +180,10 @@
com.android.settings.Settings.class.getName()),
new ComponentName(tile.getPackageName(),
tile.getComponentName()),
- null, true, true);
+ null /* secondaryIntentAction */,
+ true /* finishPrimaryWithSecondary */,
+ true /* finishSecondaryWithPrimary */,
+ true /* clearTop */);
// Highlight preference ui.
final TopLevelSettings topLevelSettings = (TopLevelSettings) fragment;
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index a2a6d3c..674f8d8 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -239,13 +239,15 @@
targetComponentName,
targetIntent.getAction(),
true /* finishPrimaryWithSecondary */,
- true /* finishSecondaryWithPrimary */);
+ true /* finishSecondaryWithPrimary */,
+ true /* clearTop*/);
ActivityEmbeddingRulesController.registerTwoPanePairRule(this,
new ComponentName(Settings.class.getPackageName(), Settings.class.getName()),
targetComponentName,
targetIntent.getAction(),
true /* finishPrimaryWithSecondary */,
- true /* finishSecondaryWithPrimary */);
+ true /* finishSecondaryWithPrimary */,
+ true /* clearTop*/);
startActivity(targetIntent);
}
diff --git a/src/com/android/settings/homepage/TopLevelSettings.java b/src/com/android/settings/homepage/TopLevelSettings.java
index 38b2baa..d3bfa02 100644
--- a/src/com/android/settings/homepage/TopLevelSettings.java
+++ b/src/com/android/settings/homepage/TopLevelSettings.java
@@ -36,6 +36,7 @@
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
+import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
import com.android.settings.activityembedding.ActivityEmbeddingUtils;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
@@ -98,6 +99,10 @@
@Override
public boolean onPreferenceTreeClick(Preference preference) {
+ // Register SplitPairRule for SubSettings.
+ ActivityEmbeddingRulesController.registerSubSettingsPairRuleIfNeeded(getContext(),
+ true /* clearTop*/);
+
setHighlightPreferenceKey(preference.getKey());
return super.onPreferenceTreeClick(preference);
}
diff --git a/src/com/android/settings/search/SearchResultTrampoline.java b/src/com/android/settings/search/SearchResultTrampoline.java
index e930473..3414efe 100644
--- a/src/com/android/settings/search/SearchResultTrampoline.java
+++ b/src/com/android/settings/search/SearchResultTrampoline.java
@@ -25,6 +25,7 @@
import com.android.settings.SettingsActivity;
import com.android.settings.SubSettings;
+import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
import com.android.settings.overlay.FeatureFactory;
/**
@@ -53,6 +54,11 @@
args.putInt(EXTRA_SHOW_FRAGMENT_TAB, tab);
intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
+ // Register SplirPairRule for SubSettings, set clearTop false to prevent unexpected back
+ // navigation behavior.
+ ActivityEmbeddingRulesController.registerSubSettingsPairRuleIfNeeded(this /* context */,
+ false /* clearTop*/);
+
// Reroute request to SubSetting.
intent.setClass(this /* context */, SubSettings.class)
.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);