Merge "[Large screen] Fix searched Subsettings back navigation bug" into sc-v2-dev

This commit is contained in:
Arc Wang
2021-11-01 01:27:37 +00:00
committed by Android (Google) Code Review
5 changed files with 44 additions and 13 deletions

View File

@@ -63,13 +63,6 @@ public class ActivityEmbeddingRulesController {
// Set a placeholder for home page.
registerHomepagePlaceholderRule();
// Set subsettings rule.
registerTwoPanePairRule(mContext,
getComponentName(Settings.class),
getComponentName(SubSettings.class),
null /* secondaryIntentAction */,
true /* finishPrimaryWithSecondary */,
true /* finishSecondaryWithPrimary */);
}
/** Register a SplitPairRule for 2-pane. */
@@ -78,7 +71,8 @@ public class ActivityEmbeddingRulesController {
ComponentName secondaryComponent,
String secondaryIntentAction,
boolean finishPrimaryWithSecondary,
boolean finishSecondaryWithPrimary) {
boolean finishSecondaryWithPrimary,
boolean clearTop) {
final Set<SplitPairFilter> filters = new HashSet<>();
filters.add(new SplitPairFilter(primaryComponent, secondaryComponent,
secondaryIntentAction));
@@ -86,13 +80,28 @@ public class ActivityEmbeddingRulesController {
SplitController.getInstance().registerRule(new SplitPairRule(filters,
finishPrimaryWithSecondary,
finishSecondaryWithPrimary,
true /* clearTop */,
clearTop,
ActivityEmbeddingUtils.getMinCurrentScreenSplitWidthPx(context),
ActivityEmbeddingUtils.getMinSmallestScreenSplitWidthPx(context),
ActivityEmbeddingUtils.SPLIT_RATIO,
LayoutDirection.LOCALE));
}
/** Register a SplitPairRule for SubSettings if the device supports 2-pane. */
public static void registerSubSettingsPairRuleIfNeeded(Context context, boolean clearTop) {
if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context)) {
return;
}
registerTwoPanePairRule(context,
getComponentName(context, Settings.class),
getComponentName(context, SubSettings.class),
null /* secondaryIntentAction */,
true /* finishPrimaryWithSecondary */,
true /* finishSecondaryWithPrimary */,
clearTop);
}
private void registerHomepagePlaceholderRule() {
final Set<ActivityFilter> activityFilters = new HashSet<>();
addActivityFilter(activityFilters, SettingsHomepageActivity.class);
@@ -131,6 +140,12 @@ public class ActivityEmbeddingRulesController {
@NonNull
private ComponentName getComponentName(Class<? extends Activity> activityClass) {
return new ComponentName(mContext.getPackageName(), activityClass.getName());
return getComponentName(mContext, activityClass);
}
@NonNull
private static ComponentName getComponentName(Context context,
Class<? extends Activity> activityClass) {
return new ComponentName(context.getPackageName(), activityClass.getName());
}
}

View File

@@ -180,7 +180,10 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
com.android.settings.Settings.class.getName()),
new ComponentName(tile.getPackageName(),
tile.getComponentName()),
null, true, true);
null /* secondaryIntentAction */,
true /* finishPrimaryWithSecondary */,
true /* finishSecondaryWithPrimary */,
true /* clearTop */);
// Highlight preference ui.
final TopLevelSettings topLevelSettings = (TopLevelSettings) fragment;

View File

@@ -239,13 +239,15 @@ public class SettingsHomepageActivity extends FragmentActivity implements
targetComponentName,
targetIntent.getAction(),
true /* finishPrimaryWithSecondary */,
true /* finishSecondaryWithPrimary */);
true /* finishSecondaryWithPrimary */,
true /* clearTop*/);
ActivityEmbeddingRulesController.registerTwoPanePairRule(this,
new ComponentName(Settings.class.getPackageName(), Settings.class.getName()),
targetComponentName,
targetIntent.getAction(),
true /* finishPrimaryWithSecondary */,
true /* finishSecondaryWithPrimary */);
true /* finishSecondaryWithPrimary */,
true /* clearTop*/);
startActivity(targetIntent);
}

View File

@@ -36,6 +36,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
import com.android.settings.activityembedding.ActivityEmbeddingUtils;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
@@ -98,6 +99,10 @@ public class TopLevelSettings extends DashboardFragment implements
@Override
public boolean onPreferenceTreeClick(Preference preference) {
// Register SplitPairRule for SubSettings.
ActivityEmbeddingRulesController.registerSubSettingsPairRuleIfNeeded(getContext(),
true /* clearTop*/);
setHighlightPreferenceKey(preference.getKey());
return super.onPreferenceTreeClick(preference);
}

View File

@@ -25,6 +25,7 @@ import android.os.Bundle;
import com.android.settings.SettingsActivity;
import com.android.settings.SubSettings;
import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
import com.android.settings.overlay.FeatureFactory;
/**
@@ -53,6 +54,11 @@ public class SearchResultTrampoline extends Activity {
args.putInt(EXTRA_SHOW_FRAGMENT_TAB, tab);
intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
// Register SplirPairRule for SubSettings, set clearTop false to prevent unexpected back
// navigation behavior.
ActivityEmbeddingRulesController.registerSubSettingsPairRuleIfNeeded(this /* context */,
false /* clearTop*/);
// Reroute request to SubSetting.
intent.setClass(this /* context */, SubSettings.class)
.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);