Loading src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java +6 −24 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.content.Intent; import android.util.LayoutDirection; import android.util.Log; import androidx.annotation.NonNull; import androidx.window.embedding.ActivityFilter; import androidx.window.embedding.ActivityRule; import androidx.window.embedding.SplitController; Loading Loading @@ -114,7 +113,7 @@ public class ActivityEmbeddingRulesController { registerTwoPanePairRule( context, getComponentName(context, Settings.class), new ComponentName(context, Settings.class), secondaryComponent, secondaryIntentAction, finishPrimaryWithSecondary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER, Loading @@ -123,7 +122,7 @@ public class ActivityEmbeddingRulesController { registerTwoPanePairRule( context, getComponentName(context, SettingsHomepageActivity.class), new ComponentName(context, SettingsHomepageActivity.class), secondaryComponent, secondaryIntentAction, finishPrimaryWithSecondary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER, Loading @@ -143,7 +142,7 @@ public class ActivityEmbeddingRulesController { registerTwoPanePairRule( context, getComponentName(context, SliceDeepLinkHomepageActivity.class), new ComponentName(context, SliceDeepLinkHomepageActivity.class), secondaryComponent, secondaryIntentAction, finishPrimaryWithSecondary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER, Loading Loading @@ -179,7 +178,7 @@ public class ActivityEmbeddingRulesController { registerTwoPanePairRuleForSettingsHome( context, getComponentName(context, SubSettings.class), new ComponentName(context, SubSettings.class), null /* secondaryIntentAction */, clearTop); } Loading @@ -191,8 +190,7 @@ public class ActivityEmbeddingRulesController { addActivityFilter(activityFilters, SliceDeepLinkHomepageActivity.class); addActivityFilter(activityFilters, Settings.class); final Intent intent = new Intent(); intent.setComponent(getComponentName(Settings.NetworkDashboardActivity.class)); final Intent intent = new Intent(mContext, Settings.NetworkDashboardActivity.class); final SplitPlaceholderRule placeholderRule = new SplitPlaceholderRule( activityFilters, intent, Loading @@ -215,23 +213,7 @@ public class ActivityEmbeddingRulesController { private void addActivityFilter(Set<ActivityFilter> activityFilters, Class<? extends Activity> activityClass) { activityFilters.add(new ActivityFilter(getComponentName(activityClass), activityFilters.add(new ActivityFilter(new ComponentName(mContext, activityClass), null /* intentAction */)); } private void addActivityFilter(Set<ActivityFilter> activityFilters, ComponentName componentName) { activityFilters.add(new ActivityFilter(componentName, null /* intentAction */)); } @NonNull private ComponentName getComponentName(Class<? extends Activity> activityClass) { return getComponentName(mContext, activityClass); } @NonNull private static ComponentName getComponentName(Context context, Class<? extends Activity> activityClass) { return new ComponentName(context.getPackageName(), activityClass.getName()); } } src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +16 −18 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITL import android.app.settings.SettingsEnums; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface.OnCancelListener; import android.content.IContentProvider; import android.content.Intent; import android.content.pm.PackageManager; Loading @@ -63,6 +62,7 @@ import com.android.settings.Utils; import com.android.settings.activityembedding.ActivityEmbeddingRulesController; import com.android.settings.activityembedding.ActivityEmbeddingUtils; import com.android.settings.dashboard.profileselector.ProfileSelectDialog; import com.android.settings.homepage.TopLevelHighlightMixin; import com.android.settings.homepage.TopLevelSettings; import com.android.settings.overlay.FeatureFactory; import com.android.settings.widget.PrimarySwitchPreference; Loading Loading @@ -170,27 +170,23 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { if (action != null) { intent.setAction(action); } pref.setOnPreferenceClickListener(preference -> { OnCancelListener listener = null; if (fragment instanceof TopLevelSettings && ActivityEmbeddingUtils.isEmbeddingActivityEnabled(mContext)) { // Register the rule for injected apps. ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome( mContext, new ComponentName(tile.getPackageName(), tile.getComponentName()), null /* secondaryIntentAction */, action, true /* clearTop */); // Highlight preference ui. pref.setOnPreferenceClickListener(preference -> { TopLevelHighlightMixin highlightMixin = null; if (fragment instanceof TopLevelSettings && ActivityEmbeddingUtils.isEmbeddingActivityEnabled(mContext)) { // Highlight the preference whenever it's clicked final TopLevelSettings topLevelSettings = (TopLevelSettings) fragment; // Highlight the tile immediately whenever it's clicked topLevelSettings.setHighlightPreferenceKey(key); // If the tile allows users to select profile, the pop-op dialog may be // cancelled and then the previous highlight entry should be restored. listener = dialog -> topLevelSettings.restorePreviousHighlight(); highlightMixin = topLevelSettings.getHighlightMixin(); } launchIntentOrSelectProfile(activity, tile, intent, sourceMetricsCategory, listener); highlightMixin); return true; }); } Loading Loading @@ -223,7 +219,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { SettingsEnums.DASHBOARD_SUMMARY) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); launchIntentOrSelectProfile(activity, tile, intent, SettingsEnums.DASHBOARD_SUMMARY, /* listener= */ null); /* highlightMixin= */ null); } private DynamicDataObserver createDynamicDataObserver(String method, Uri uri, Preference pref) { Loading Loading @@ -438,7 +434,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { } private void launchIntentOrSelectProfile(FragmentActivity activity, Tile tile, Intent intent, int sourceMetricCategory, OnCancelListener listener) { int sourceMetricCategory, TopLevelHighlightMixin highlightMixin) { if (!isIntentResolvable(intent)) { Log.w(TAG, "Cannot resolve intent, skipping. " + intent); return; Loading Loading @@ -469,7 +465,9 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { } ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile, sourceMetricCategory, listener); sourceMetricCategory, /* onShowListener= */ highlightMixin, /* onDismissListener= */ highlightMixin, /* onCancelListener= */ highlightMixin); } } Loading src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java +30 −3 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnDismissListener; import android.content.DialogInterface.OnShowListener; import android.content.Intent; import android.os.Bundle; import android.os.UserHandle; Loading @@ -45,23 +47,30 @@ public class ProfileSelectDialog extends DialogFragment implements OnClickListen private int mSourceMetricCategory; private Tile mSelectedTile; private OnShowListener mOnShowListener; private OnCancelListener mOnCancelListener; private OnDismissListener mOnDismissListener; /** * Display the profile select dialog, adding the fragment to the given FragmentManager. * @param manager The FragmentManager this fragment will be added to. * @param tile The tile for this fragment. * @param sourceMetricCategory The source metric category. * @param listener The listener listens to the dialog cancelling event. * @param onShowListener The listener listens to the dialog showing event. * @param onDismissListener The listener listens to the dialog dismissing event. * @param onCancelListener The listener listens to the dialog cancelling event. */ public static void show(FragmentManager manager, Tile tile, int sourceMetricCategory, OnCancelListener listener) { OnShowListener onShowListener, OnDismissListener onDismissListener, OnCancelListener onCancelListener) { final ProfileSelectDialog dialog = new ProfileSelectDialog(); final Bundle args = new Bundle(); args.putParcelable(ARG_SELECTED_TILE, tile); args.putInt(ARG_SOURCE_METRIC_CATEGORY, sourceMetricCategory); dialog.setArguments(args); dialog.mOnCancelListener = listener; dialog.mOnShowListener = onShowListener; dialog.mOnDismissListener = onDismissListener; dialog.mOnCancelListener = onCancelListener; dialog.show(manager, "select_profile"); } Loading Loading @@ -96,13 +105,31 @@ public class ProfileSelectDialog extends DialogFragment implements OnClickListen getActivity().startActivityAsUser(intent, user); } @Override public void onStart() { super.onStart(); // The fragment shows the dialog within onStart() if (mOnShowListener != null) { mOnShowListener.onShow(getDialog()); } } @Override public void onCancel(DialogInterface dialog) { super.onCancel(dialog); if (mOnCancelListener != null) { mOnCancelListener.onCancel(dialog); } } @Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); if (mOnDismissListener != null) { mOnDismissListener.onDismiss(dialog); } } public static void updateUserHandlesIfNeeded(Context context, Tile tile) { final List<UserHandle> userHandles = tile.userHandle; if (tile.userHandle == null || tile.userHandle.size() <= 1) { Loading src/com/android/settings/display/TopLevelWallpaperPreferenceController.java +5 −5 Original line number Diff line number Diff line Loading @@ -63,6 +63,11 @@ public class TopLevelWallpaperPreferenceController extends BasePreferenceControl super.displayPreference(screen); Preference preference = screen.findPreference(getPreferenceKey()); preference.setTitle(getTitle()); ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome( mContext, getComponentName(), null /* secondaryIntentAction */, true /* clearTop */); } public String getTitle() { Loading Loading @@ -103,11 +108,6 @@ public class TopLevelWallpaperPreferenceController extends BasePreferenceControl mContext)) { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); } ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome( mContext, intent.getComponent(), null /* secondaryIntentAction */, true /* clearTop */); preference.getContext().startActivity(intent); return true; } Loading src/com/android/settings/homepage/SettingsHomepageActivity.java +32 −21 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements public static final String EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_DATA = "settings_large_screen_deep_link_intent_data"; private static final int DEFAULT_HIGHLIGHT_MENU_KEY = R.string.menu_key_network; static final int DEFAULT_HIGHLIGHT_MENU_KEY = R.string.menu_key_network; private static final long HOMEPAGE_LOADING_TIMEOUT_MS = 300; private TopLevelSettings mMainFragment; Loading @@ -94,6 +94,10 @@ public class SettingsHomepageActivity extends FragmentActivity implements void onHomepageLoaded(); } private interface FragmentBuilder<T extends Fragment> { T build(); } /** * Try to add a {@link HomepageLoadedListener}. If homepage is already loaded, the listener * will not be notified. Loading Loading @@ -168,13 +172,15 @@ public class SettingsHomepageActivity extends FragmentActivity implements initAvatarView(); showSuggestionFragment(); if (FeatureFlagUtils.isEnabled(this, FeatureFlags.CONTEXTUAL_HOME)) { showFragment(new ContextualCardsFragment(), R.id.contextual_cards_content); showFragment(() -> new ContextualCardsFragment(), R.id.contextual_cards_content); } } mMainFragment = new TopLevelSettings(); mMainFragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, mMainFragment = showFragment(() -> { final TopLevelSettings fragment = new TopLevelSettings(); fragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, getHighlightMenuKey()); showFragment(mMainFragment, R.id.main_content); return fragment; }, R.id.main_content); ((FrameLayout) findViewById(R.id.main_content)) .getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING); Loading Loading @@ -260,9 +266,9 @@ public class SettingsHomepageActivity extends FragmentActivity implements } private void showSuggestionFragment() { final Class<? extends Fragment> fragment = FeatureFactory.getFactory(this) final Class<? extends Fragment> fragmentClass = FeatureFactory.getFactory(this) .getSuggestionFeatureProvider(this).getContextualSuggestionFragment(); if (fragment == null) { if (fragmentClass == null) { return; } Loading @@ -274,28 +280,33 @@ public class SettingsHomepageActivity extends FragmentActivity implements // Schedule a timer to show the homepage and hide the suggestion on timeout. mHomepageView.postDelayed(() -> showHomepageWithSuggestion(false), HOMEPAGE_LOADING_TIMEOUT_MS); final FragmentBuilder<?> fragmentBuilder = () -> { try { showFragment(fragment.getConstructor().newInstance(), R.id.suggestion_content); if (mIsEmbeddingActivityEnabled) { showFragment(fragment.getConstructor().newInstance(), R.id.two_pane_suggestion_content); } return fragmentClass.getConstructor().newInstance(); } catch (Exception e) { Log.w(TAG, "Cannot show fragment", e); } return null; }; showFragment(fragmentBuilder, R.id.suggestion_content); if (mIsEmbeddingActivityEnabled) { showFragment(fragmentBuilder, R.id.two_pane_suggestion_content); } } private void showFragment(Fragment fragment, int id) { private <T extends Fragment> T showFragment(FragmentBuilder<T> fragmentBuilder, int id) { final FragmentManager fragmentManager = getSupportFragmentManager(); final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); final Fragment showFragment = fragmentManager.findFragmentById(id); T showFragment = (T) fragmentManager.findFragmentById(id); if (showFragment == null) { fragmentTransaction.add(id, fragment); showFragment = fragmentBuilder.build(); fragmentTransaction.add(id, showFragment); } else { fragmentTransaction.show(showFragment); } fragmentTransaction.commit(); return showFragment; } private void launchDeepLinkIntentToRight() { Loading Loading @@ -365,7 +376,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements SplitRule.FINISH_ALWAYS, true /* clearTop */); ActivityEmbeddingRulesController.registerTwoPanePairRule(this, new ComponentName(Settings.class.getPackageName(), Settings.class.getName()), new ComponentName(getApplicationContext(), Settings.class), targetComponentName, targetIntent.getAction(), SplitRule.FINISH_ALWAYS, Loading Loading
src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java +6 −24 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.content.Intent; import android.util.LayoutDirection; import android.util.Log; import androidx.annotation.NonNull; import androidx.window.embedding.ActivityFilter; import androidx.window.embedding.ActivityRule; import androidx.window.embedding.SplitController; Loading Loading @@ -114,7 +113,7 @@ public class ActivityEmbeddingRulesController { registerTwoPanePairRule( context, getComponentName(context, Settings.class), new ComponentName(context, Settings.class), secondaryComponent, secondaryIntentAction, finishPrimaryWithSecondary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER, Loading @@ -123,7 +122,7 @@ public class ActivityEmbeddingRulesController { registerTwoPanePairRule( context, getComponentName(context, SettingsHomepageActivity.class), new ComponentName(context, SettingsHomepageActivity.class), secondaryComponent, secondaryIntentAction, finishPrimaryWithSecondary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER, Loading @@ -143,7 +142,7 @@ public class ActivityEmbeddingRulesController { registerTwoPanePairRule( context, getComponentName(context, SliceDeepLinkHomepageActivity.class), new ComponentName(context, SliceDeepLinkHomepageActivity.class), secondaryComponent, secondaryIntentAction, finishPrimaryWithSecondary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER, Loading Loading @@ -179,7 +178,7 @@ public class ActivityEmbeddingRulesController { registerTwoPanePairRuleForSettingsHome( context, getComponentName(context, SubSettings.class), new ComponentName(context, SubSettings.class), null /* secondaryIntentAction */, clearTop); } Loading @@ -191,8 +190,7 @@ public class ActivityEmbeddingRulesController { addActivityFilter(activityFilters, SliceDeepLinkHomepageActivity.class); addActivityFilter(activityFilters, Settings.class); final Intent intent = new Intent(); intent.setComponent(getComponentName(Settings.NetworkDashboardActivity.class)); final Intent intent = new Intent(mContext, Settings.NetworkDashboardActivity.class); final SplitPlaceholderRule placeholderRule = new SplitPlaceholderRule( activityFilters, intent, Loading @@ -215,23 +213,7 @@ public class ActivityEmbeddingRulesController { private void addActivityFilter(Set<ActivityFilter> activityFilters, Class<? extends Activity> activityClass) { activityFilters.add(new ActivityFilter(getComponentName(activityClass), activityFilters.add(new ActivityFilter(new ComponentName(mContext, activityClass), null /* intentAction */)); } private void addActivityFilter(Set<ActivityFilter> activityFilters, ComponentName componentName) { activityFilters.add(new ActivityFilter(componentName, null /* intentAction */)); } @NonNull private ComponentName getComponentName(Class<? extends Activity> activityClass) { return getComponentName(mContext, activityClass); } @NonNull private static ComponentName getComponentName(Context context, Class<? extends Activity> activityClass) { return new ComponentName(context.getPackageName(), activityClass.getName()); } }
src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +16 −18 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITL import android.app.settings.SettingsEnums; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface.OnCancelListener; import android.content.IContentProvider; import android.content.Intent; import android.content.pm.PackageManager; Loading @@ -63,6 +62,7 @@ import com.android.settings.Utils; import com.android.settings.activityembedding.ActivityEmbeddingRulesController; import com.android.settings.activityembedding.ActivityEmbeddingUtils; import com.android.settings.dashboard.profileselector.ProfileSelectDialog; import com.android.settings.homepage.TopLevelHighlightMixin; import com.android.settings.homepage.TopLevelSettings; import com.android.settings.overlay.FeatureFactory; import com.android.settings.widget.PrimarySwitchPreference; Loading Loading @@ -170,27 +170,23 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { if (action != null) { intent.setAction(action); } pref.setOnPreferenceClickListener(preference -> { OnCancelListener listener = null; if (fragment instanceof TopLevelSettings && ActivityEmbeddingUtils.isEmbeddingActivityEnabled(mContext)) { // Register the rule for injected apps. ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome( mContext, new ComponentName(tile.getPackageName(), tile.getComponentName()), null /* secondaryIntentAction */, action, true /* clearTop */); // Highlight preference ui. pref.setOnPreferenceClickListener(preference -> { TopLevelHighlightMixin highlightMixin = null; if (fragment instanceof TopLevelSettings && ActivityEmbeddingUtils.isEmbeddingActivityEnabled(mContext)) { // Highlight the preference whenever it's clicked final TopLevelSettings topLevelSettings = (TopLevelSettings) fragment; // Highlight the tile immediately whenever it's clicked topLevelSettings.setHighlightPreferenceKey(key); // If the tile allows users to select profile, the pop-op dialog may be // cancelled and then the previous highlight entry should be restored. listener = dialog -> topLevelSettings.restorePreviousHighlight(); highlightMixin = topLevelSettings.getHighlightMixin(); } launchIntentOrSelectProfile(activity, tile, intent, sourceMetricsCategory, listener); highlightMixin); return true; }); } Loading Loading @@ -223,7 +219,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { SettingsEnums.DASHBOARD_SUMMARY) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); launchIntentOrSelectProfile(activity, tile, intent, SettingsEnums.DASHBOARD_SUMMARY, /* listener= */ null); /* highlightMixin= */ null); } private DynamicDataObserver createDynamicDataObserver(String method, Uri uri, Preference pref) { Loading Loading @@ -438,7 +434,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { } private void launchIntentOrSelectProfile(FragmentActivity activity, Tile tile, Intent intent, int sourceMetricCategory, OnCancelListener listener) { int sourceMetricCategory, TopLevelHighlightMixin highlightMixin) { if (!isIntentResolvable(intent)) { Log.w(TAG, "Cannot resolve intent, skipping. " + intent); return; Loading Loading @@ -469,7 +465,9 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { } ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile, sourceMetricCategory, listener); sourceMetricCategory, /* onShowListener= */ highlightMixin, /* onDismissListener= */ highlightMixin, /* onCancelListener= */ highlightMixin); } } Loading
src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java +30 −3 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnDismissListener; import android.content.DialogInterface.OnShowListener; import android.content.Intent; import android.os.Bundle; import android.os.UserHandle; Loading @@ -45,23 +47,30 @@ public class ProfileSelectDialog extends DialogFragment implements OnClickListen private int mSourceMetricCategory; private Tile mSelectedTile; private OnShowListener mOnShowListener; private OnCancelListener mOnCancelListener; private OnDismissListener mOnDismissListener; /** * Display the profile select dialog, adding the fragment to the given FragmentManager. * @param manager The FragmentManager this fragment will be added to. * @param tile The tile for this fragment. * @param sourceMetricCategory The source metric category. * @param listener The listener listens to the dialog cancelling event. * @param onShowListener The listener listens to the dialog showing event. * @param onDismissListener The listener listens to the dialog dismissing event. * @param onCancelListener The listener listens to the dialog cancelling event. */ public static void show(FragmentManager manager, Tile tile, int sourceMetricCategory, OnCancelListener listener) { OnShowListener onShowListener, OnDismissListener onDismissListener, OnCancelListener onCancelListener) { final ProfileSelectDialog dialog = new ProfileSelectDialog(); final Bundle args = new Bundle(); args.putParcelable(ARG_SELECTED_TILE, tile); args.putInt(ARG_SOURCE_METRIC_CATEGORY, sourceMetricCategory); dialog.setArguments(args); dialog.mOnCancelListener = listener; dialog.mOnShowListener = onShowListener; dialog.mOnDismissListener = onDismissListener; dialog.mOnCancelListener = onCancelListener; dialog.show(manager, "select_profile"); } Loading Loading @@ -96,13 +105,31 @@ public class ProfileSelectDialog extends DialogFragment implements OnClickListen getActivity().startActivityAsUser(intent, user); } @Override public void onStart() { super.onStart(); // The fragment shows the dialog within onStart() if (mOnShowListener != null) { mOnShowListener.onShow(getDialog()); } } @Override public void onCancel(DialogInterface dialog) { super.onCancel(dialog); if (mOnCancelListener != null) { mOnCancelListener.onCancel(dialog); } } @Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); if (mOnDismissListener != null) { mOnDismissListener.onDismiss(dialog); } } public static void updateUserHandlesIfNeeded(Context context, Tile tile) { final List<UserHandle> userHandles = tile.userHandle; if (tile.userHandle == null || tile.userHandle.size() <= 1) { Loading
src/com/android/settings/display/TopLevelWallpaperPreferenceController.java +5 −5 Original line number Diff line number Diff line Loading @@ -63,6 +63,11 @@ public class TopLevelWallpaperPreferenceController extends BasePreferenceControl super.displayPreference(screen); Preference preference = screen.findPreference(getPreferenceKey()); preference.setTitle(getTitle()); ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome( mContext, getComponentName(), null /* secondaryIntentAction */, true /* clearTop */); } public String getTitle() { Loading Loading @@ -103,11 +108,6 @@ public class TopLevelWallpaperPreferenceController extends BasePreferenceControl mContext)) { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); } ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome( mContext, intent.getComponent(), null /* secondaryIntentAction */, true /* clearTop */); preference.getContext().startActivity(intent); return true; } Loading
src/com/android/settings/homepage/SettingsHomepageActivity.java +32 −21 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements public static final String EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_DATA = "settings_large_screen_deep_link_intent_data"; private static final int DEFAULT_HIGHLIGHT_MENU_KEY = R.string.menu_key_network; static final int DEFAULT_HIGHLIGHT_MENU_KEY = R.string.menu_key_network; private static final long HOMEPAGE_LOADING_TIMEOUT_MS = 300; private TopLevelSettings mMainFragment; Loading @@ -94,6 +94,10 @@ public class SettingsHomepageActivity extends FragmentActivity implements void onHomepageLoaded(); } private interface FragmentBuilder<T extends Fragment> { T build(); } /** * Try to add a {@link HomepageLoadedListener}. If homepage is already loaded, the listener * will not be notified. Loading Loading @@ -168,13 +172,15 @@ public class SettingsHomepageActivity extends FragmentActivity implements initAvatarView(); showSuggestionFragment(); if (FeatureFlagUtils.isEnabled(this, FeatureFlags.CONTEXTUAL_HOME)) { showFragment(new ContextualCardsFragment(), R.id.contextual_cards_content); showFragment(() -> new ContextualCardsFragment(), R.id.contextual_cards_content); } } mMainFragment = new TopLevelSettings(); mMainFragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, mMainFragment = showFragment(() -> { final TopLevelSettings fragment = new TopLevelSettings(); fragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, getHighlightMenuKey()); showFragment(mMainFragment, R.id.main_content); return fragment; }, R.id.main_content); ((FrameLayout) findViewById(R.id.main_content)) .getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING); Loading Loading @@ -260,9 +266,9 @@ public class SettingsHomepageActivity extends FragmentActivity implements } private void showSuggestionFragment() { final Class<? extends Fragment> fragment = FeatureFactory.getFactory(this) final Class<? extends Fragment> fragmentClass = FeatureFactory.getFactory(this) .getSuggestionFeatureProvider(this).getContextualSuggestionFragment(); if (fragment == null) { if (fragmentClass == null) { return; } Loading @@ -274,28 +280,33 @@ public class SettingsHomepageActivity extends FragmentActivity implements // Schedule a timer to show the homepage and hide the suggestion on timeout. mHomepageView.postDelayed(() -> showHomepageWithSuggestion(false), HOMEPAGE_LOADING_TIMEOUT_MS); final FragmentBuilder<?> fragmentBuilder = () -> { try { showFragment(fragment.getConstructor().newInstance(), R.id.suggestion_content); if (mIsEmbeddingActivityEnabled) { showFragment(fragment.getConstructor().newInstance(), R.id.two_pane_suggestion_content); } return fragmentClass.getConstructor().newInstance(); } catch (Exception e) { Log.w(TAG, "Cannot show fragment", e); } return null; }; showFragment(fragmentBuilder, R.id.suggestion_content); if (mIsEmbeddingActivityEnabled) { showFragment(fragmentBuilder, R.id.two_pane_suggestion_content); } } private void showFragment(Fragment fragment, int id) { private <T extends Fragment> T showFragment(FragmentBuilder<T> fragmentBuilder, int id) { final FragmentManager fragmentManager = getSupportFragmentManager(); final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); final Fragment showFragment = fragmentManager.findFragmentById(id); T showFragment = (T) fragmentManager.findFragmentById(id); if (showFragment == null) { fragmentTransaction.add(id, fragment); showFragment = fragmentBuilder.build(); fragmentTransaction.add(id, showFragment); } else { fragmentTransaction.show(showFragment); } fragmentTransaction.commit(); return showFragment; } private void launchDeepLinkIntentToRight() { Loading Loading @@ -365,7 +376,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements SplitRule.FINISH_ALWAYS, true /* clearTop */); ActivityEmbeddingRulesController.registerTwoPanePairRule(this, new ComponentName(Settings.class.getPackageName(), Settings.class.getName()), new ComponentName(getApplicationContext(), Settings.class), targetComponentName, targetIntent.getAction(), SplitRule.FINISH_ALWAYS, Loading