[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
This commit is contained in:
Arc Wang
2021-09-30 18:55:19 +08:00
parent 4f2a6225c9
commit dcc46cf136
2 changed files with 13 additions and 9 deletions

View File

@@ -67,17 +67,21 @@ public class ActivityEmbeddingRulesController {
registerTwoPanePairRule(mContext, registerTwoPanePairRule(mContext,
getComponentName(Settings.class), getComponentName(Settings.class),
getComponentName(SubSettings.class), getComponentName(SubSettings.class),
null /* secondaryIntentAction */,
true /* finishPrimaryWithSecondary */, true /* finishPrimaryWithSecondary */,
true /* finishSecondaryWithPrimary */); true /* finishSecondaryWithPrimary */);
} }
/** Register a SplitPairRule for 2-pane. */ /** Register a SplitPairRule for 2-pane. */
public static void registerTwoPanePairRule(Context context, public static void registerTwoPanePairRule(Context context,
ComponentName primary, ComponentName secondary, ComponentName primaryComponent,
boolean finishPrimaryWithSecondary, boolean finishSecondaryWithPrimary) { ComponentName secondaryComponent,
String secondaryIntentAction,
boolean finishPrimaryWithSecondary,
boolean finishSecondaryWithPrimary) {
final Set<SplitPairFilter> filters = new HashSet<>(); final Set<SplitPairFilter> filters = new HashSet<>();
filters.add(new SplitPairFilter(primary, secondary, filters.add(new SplitPairFilter(primaryComponent, secondaryComponent,
null /* secondaryActivityIntentAction */)); secondaryIntentAction));
SplitController.getInstance().registerRule(new SplitPairRule(filters, SplitController.getInstance().registerRule(new SplitPairRule(filters,
finishPrimaryWithSecondary, finishPrimaryWithSecondary,

View File

@@ -18,11 +18,9 @@ package com.android.settings.homepage;
import android.animation.LayoutTransition; import android.animation.LayoutTransition;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.PendingIntent;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.FeatureFlagUtils; import android.util.FeatureFlagUtils;
@@ -36,16 +34,15 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import androidx.window.embedding.SplitController;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Settings; import com.android.settings.Settings;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.accounts.AvatarViewMixin; 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.ActivityEmbeddingRulesController;
import com.android.settings.activityembedding.ActivityEmbeddingUtils; 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.homepage.contextualcards.ContextualCardsFragment;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin; import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
@@ -207,6 +204,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements
finish(); finish();
return; return;
} }
targetIntent.setComponent(targetComponentName);
// To prevent launchDeepLinkIntentToRight again for configuration change. // To prevent launchDeepLinkIntentToRight again for configuration change.
intent.setAction(null); intent.setAction(null);
@@ -223,11 +221,13 @@ public class SettingsHomepageActivity extends FragmentActivity implements
ActivityEmbeddingRulesController.registerTwoPanePairRule(this, ActivityEmbeddingRulesController.registerTwoPanePairRule(this,
new ComponentName(Utils.SETTINGS_PACKAGE_NAME, ALIAS_DEEP_LINK), new ComponentName(Utils.SETTINGS_PACKAGE_NAME, ALIAS_DEEP_LINK),
targetComponentName, targetComponentName,
targetIntent.getAction(),
true /* finishPrimaryWithSecondary */, true /* finishPrimaryWithSecondary */,
true /* finishSecondaryWithPrimary */); true /* finishSecondaryWithPrimary */);
ActivityEmbeddingRulesController.registerTwoPanePairRule(this, ActivityEmbeddingRulesController.registerTwoPanePairRule(this,
new ComponentName(Settings.class.getPackageName(), Settings.class.getName()), new ComponentName(Settings.class.getPackageName(), Settings.class.getName()),
targetComponentName, targetComponentName,
targetIntent.getAction(),
true /* finishPrimaryWithSecondary */, true /* finishPrimaryWithSecondary */,
true /* finishSecondaryWithPrimary */); true /* finishSecondaryWithPrimary */);
startActivity(targetIntent); startActivity(targetIntent);