From dcc46cf136f29f7ddb20e911639101ce6c04d030 Mon Sep 17 00:00:00 2001 From: Arc Wang Date: Thu, 30 Sep 2021 18:55:19 +0800 Subject: [PATCH] [Large screen] Fix SplitPaitRule not match for deep link problem - Set both secondary ComponentName and secondary Intent action in SplitPairFilter when registering SplitPairRule for deep link. - Set ComponentName to the Intent which DeepLinkHomepageActivity uses to start the deep link page. This change setup Intent and SplitPairRule to have both Intent action and ComponentName. It fixes matching problem. Bug: 201627196 Bug: 199888089 Test: manual [Unfolded] Long press home (workspace) -> Pop-up menu -> Tap 'Wallpaper & style' -> Launch Settings in the left as list and 'Wallpaper & style' in the right as detail. Change-Id: I8cc8cef911ce0d7d05f332eb86f77f8d2543827f --- .../ActivityEmbeddingRulesController.java | 12 ++++++++---- .../settings/homepage/SettingsHomepageActivity.java | 10 +++++----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java index 3967bd765c0..e1360fd4996 100644 --- a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java +++ b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java @@ -67,17 +67,21 @@ public class ActivityEmbeddingRulesController { registerTwoPanePairRule(mContext, getComponentName(Settings.class), getComponentName(SubSettings.class), + null /* secondaryIntentAction */, true /* finishPrimaryWithSecondary */, true /* finishSecondaryWithPrimary */); } /** Register a SplitPairRule for 2-pane. */ public static void registerTwoPanePairRule(Context context, - ComponentName primary, ComponentName secondary, - boolean finishPrimaryWithSecondary, boolean finishSecondaryWithPrimary) { + ComponentName primaryComponent, + ComponentName secondaryComponent, + String secondaryIntentAction, + boolean finishPrimaryWithSecondary, + boolean finishSecondaryWithPrimary) { final Set filters = new HashSet<>(); - filters.add(new SplitPairFilter(primary, secondary, - null /* secondaryActivityIntentAction */)); + filters.add(new SplitPairFilter(primaryComponent, secondaryComponent, + secondaryIntentAction)); SplitController.getInstance().registerRule(new SplitPairRule(filters, finishPrimaryWithSecondary, diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java index d6a8a927527..84eed6da9fb 100644 --- a/src/com/android/settings/homepage/SettingsHomepageActivity.java +++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java @@ -18,11 +18,9 @@ package com.android.settings.homepage; import android.animation.LayoutTransition; import android.app.ActivityManager; -import android.app.PendingIntent; import android.app.settings.SettingsEnums; import android.content.ComponentName; import android.content.Intent; -import android.content.pm.PackageManager; import android.os.Bundle; import android.text.TextUtils; import android.util.FeatureFlagUtils; @@ -36,16 +34,15 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; -import androidx.window.embedding.SplitController; import com.android.settings.R; import com.android.settings.Settings; import com.android.settings.Utils; import com.android.settings.accounts.AvatarViewMixin; -import com.android.settings.core.CategoryMixin; -import com.android.settings.core.FeatureFlags; import com.android.settings.activityembedding.ActivityEmbeddingRulesController; import com.android.settings.activityembedding.ActivityEmbeddingUtils; +import com.android.settings.core.CategoryMixin; +import com.android.settings.core.FeatureFlags; import com.android.settings.homepage.contextualcards.ContextualCardsFragment; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin; @@ -207,6 +204,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements finish(); return; } + targetIntent.setComponent(targetComponentName); // To prevent launchDeepLinkIntentToRight again for configuration change. intent.setAction(null); @@ -223,11 +221,13 @@ public class SettingsHomepageActivity extends FragmentActivity implements ActivityEmbeddingRulesController.registerTwoPanePairRule(this, new ComponentName(Utils.SETTINGS_PACKAGE_NAME, ALIAS_DEEP_LINK), targetComponentName, + targetIntent.getAction(), true /* finishPrimaryWithSecondary */, true /* finishSecondaryWithPrimary */); ActivityEmbeddingRulesController.registerTwoPanePairRule(this, new ComponentName(Settings.class.getPackageName(), Settings.class.getName()), targetComponentName, + targetIntent.getAction(), true /* finishPrimaryWithSecondary */, true /* finishSecondaryWithPrimary */); startActivity(targetIntent);