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:
@@ -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
|
||||
|
Reference in New Issue
Block a user