Fix different behaviors of deeplink in one/two pane
Test: manual - Reproducible steps mentioned in bug
fixes: 207740082
Change-Id: I1163e38c177307ccac8798eb649271d0466ab1c8
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
index fb13a99..fa61994 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
@@ -77,8 +77,8 @@
ComponentName primaryComponent,
ComponentName secondaryComponent,
String secondaryIntentAction,
- boolean finishPrimaryWithSecondary,
- boolean finishSecondaryWithPrimary,
+ int finishPrimaryWithSecondary,
+ int finishSecondaryWithPrimary,
boolean clearTop) {
if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context)) {
return;
@@ -88,8 +88,8 @@
secondaryIntentAction));
SplitController.getInstance().registerRule(new SplitPairRule(filters,
- finishPrimaryWithSecondary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
- finishSecondaryWithPrimary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
+ finishPrimaryWithSecondary,
+ finishSecondaryWithPrimary,
clearTop,
ActivityEmbeddingUtils.getMinCurrentScreenSplitWidthPx(context),
ActivityEmbeddingUtils.getMinSmallestScreenSplitWidthPx(context),
@@ -117,17 +117,8 @@
getComponentName(context, Settings.class),
secondaryComponent,
secondaryIntentAction,
- finishPrimaryWithSecondary,
- finishSecondaryWithPrimary,
- clearTop);
-
- registerTwoPanePairRule(
- context,
- new ComponentName(context, DeepLinkHomepageActivity.class),
- secondaryComponent,
- secondaryIntentAction,
- finishPrimaryWithSecondary,
- finishSecondaryWithPrimary,
+ finishPrimaryWithSecondary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
+ finishSecondaryWithPrimary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
clearTop);
registerTwoPanePairRule(
@@ -135,8 +126,19 @@
getComponentName(context, SettingsHomepageActivity.class),
secondaryComponent,
secondaryIntentAction,
- finishPrimaryWithSecondary,
- finishSecondaryWithPrimary,
+ finishPrimaryWithSecondary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
+ finishSecondaryWithPrimary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
+ clearTop);
+
+ // We should finish HomePageActivity altogether even if it shows in single pane for all deep
+ // link cases.
+ registerTwoPanePairRule(
+ context,
+ new ComponentName(context, DeepLinkHomepageActivity.class),
+ secondaryComponent,
+ secondaryIntentAction,
+ finishPrimaryWithSecondary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
+ finishSecondaryWithPrimary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
clearTop);
registerTwoPanePairRule(
@@ -144,8 +146,8 @@
getComponentName(context, SliceDeepLinkHomepageActivity.class),
secondaryComponent,
secondaryIntentAction,
- finishPrimaryWithSecondary,
- finishSecondaryWithPrimary,
+ finishPrimaryWithSecondary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
+ finishSecondaryWithPrimary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
clearTop);
}
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index 909c146..0d11df5 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -40,6 +40,7 @@
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
+import androidx.window.embedding.SplitRule;
import com.android.settings.R;
import com.android.settings.Settings;
@@ -338,15 +339,15 @@
new ComponentName(getApplicationContext(), getClass()),
targetComponentName,
targetIntent.getAction(),
- true /* finishPrimaryWithSecondary */,
- true /* finishSecondaryWithPrimary */,
+ SplitRule.FINISH_ALWAYS,
+ SplitRule.FINISH_ALWAYS,
true /* clearTop*/);
ActivityEmbeddingRulesController.registerTwoPanePairRule(this,
new ComponentName(Settings.class.getPackageName(), Settings.class.getName()),
targetComponentName,
targetIntent.getAction(),
- true /* finishPrimaryWithSecondary */,
- true /* finishSecondaryWithPrimary */,
+ SplitRule.FINISH_ALWAYS,
+ SplitRule.FINISH_ALWAYS,
true /* clearTop*/);
startActivity(targetIntent);
}