2 panes deep link for large screen devices

This change supports deep link to Settings app internal pages
and external pages outside Settings app.

Apps need android.permission.ALLOW_TWO_PANES_DEEP_LINK_IN_SETTINGS
to send the intent of Settings#ACTION_SETTINGS_LARGE_SCREEN_DEEP_LINK.
Settings app will startActivity for the intent from
Settings#EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_URI.

Bug: 197048599
Test: build pass
Change-Id: Idaf4a8be4603c1308f16fb4e378266c1e52acb40
This commit is contained in:
Arc Wang
2021-08-31 18:11:57 +08:00
parent ebdc0e26f6
commit 22ce392b91
4 changed files with 142 additions and 24 deletions

View File

@@ -60,12 +60,34 @@ public class ActivityEmbeddingRulesController {
mSplitController.clearRegisteredRules();
// Set a placeholder for home page.
mSplitController.registerRule(getHomepagePlaceholderRule());
registerHomepagePlaceholderRule();
// Set subsettings rule.
mSplitController.registerRule(getSubSettingsPairRule());
registerTwoPanePairRule(mContext,
getComponentName(Settings.class),
getComponentName(SubSettings.class),
true /* finishPrimaryWithSecondary */,
true /* finishSecondaryWithPrimary */);
}
private SplitPlaceholderRule getHomepagePlaceholderRule() {
/** Register a SplitPairRule for 2-pane. */
public static void registerTwoPanePairRule(Context context,
ComponentName primary, ComponentName secondary,
boolean finishPrimaryWithSecondary, boolean finishSecondaryWithPrimary) {
final Set<SplitPairFilter> filters = new HashSet<>();
filters.add(new SplitPairFilter(primary, secondary,
null /* secondaryActivityIntentAction */,
null /* secondaryActivityIntentCategory */));
new SplitController(context).registerRule(new SplitPairRule(filters,
finishPrimaryWithSecondary,
finishSecondaryWithPrimary, true /* clearTop */,
ActivityEmbeddingUtils.getMinCurrentScreenSplitWidthPx(context),
ActivityEmbeddingUtils.getMinSmallestScreenSplitWidthPx(context),
ActivityEmbeddingUtils.SPLIT_RATIO,
LayoutDirection.LOCALE));
}
private void registerHomepagePlaceholderRule() {
final Set<ActivityFilter> activityFilters = new HashSet<>();
activityFilters.add(new ActivityFilter(getComponentName(Settings.class)));
final Intent intent = new Intent();
@@ -78,27 +100,7 @@ public class ActivityEmbeddingRulesController {
ActivityEmbeddingUtils.SPLIT_RATIO,
LayoutDirection.LOCALE);
return placeholderRule;
}
private SplitPairRule getSubSettingsPairRule() {
final Set<SplitPairFilter> pairFilters = new HashSet<>();
pairFilters.add(new SplitPairFilter(
getComponentName(Settings.class),
getComponentName(SubSettings.class),
null /* secondaryActivityIntentAction */,
null /* secondaryActivityIntentCategory */));
final SplitPairRule rule = new SplitPairRule(
pairFilters,
true /* finishPrimaryWithSecondary */,
true /* finishSecondaryWithPrimary */,
true /* clearTop */,
ActivityEmbeddingUtils.getMinCurrentScreenSplitWidthPx(mContext),
ActivityEmbeddingUtils.getMinSmallestScreenSplitWidthPx(mContext),
ActivityEmbeddingUtils.SPLIT_RATIO,
LayoutDirection.LOCALE);
return rule;
mSplitController.registerRule(placeholderRule);
}
@NonNull