Merge "Register rule for wallpaper entry" into sc-v2-dev
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
index 974ec2c..53e8020 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
@@ -73,6 +73,9 @@
             boolean finishPrimaryWithSecondary,
             boolean finishSecondaryWithPrimary,
             boolean clearTop) {
+        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context)) {
+            return;
+        }
         final Set<SplitPairFilter> filters = new HashSet<>();
         filters.add(new SplitPairFilter(primaryComponent, secondaryComponent,
                 secondaryIntentAction));
@@ -87,18 +90,45 @@
                 LayoutDirection.LOCALE));
     }
 
+    /**
+     * Register a new SplitPairRule for Settings home. Because homepage is able to be opened by
+     * {@link Settings} or {@link SettingsHomepageActivity}, we register split rule twice for
+     * two cases.
+     */
+    public static void registerTwoPanePairRuleForSettingsHome(Context context,
+            ComponentName secondaryComponent,
+            String secondaryIntentAction,
+            boolean clearTop) {
+
+        registerTwoPanePairRule(
+                context,
+                getComponentName(context, Settings.class),
+                secondaryComponent,
+                secondaryIntentAction,
+                true /* finishPrimaryWithSecondary */,
+                true /* finishSecondaryWithPrimary */,
+                clearTop);
+
+        registerTwoPanePairRule(
+                context,
+                getComponentName(context, SettingsHomepageActivity.class),
+                secondaryComponent,
+                secondaryIntentAction,
+                true /* finishPrimaryWithSecondary */,
+                true /* finishSecondaryWithPrimary */,
+                clearTop);
+    }
+
     /** Register a SplitPairRule for SubSettings if the device supports 2-pane. */
-    public static void registerSubSettingsPairRuleIfNeeded(Context context, boolean clearTop) {
+    public static void registerSubSettingsPairRule(Context context, boolean clearTop) {
         if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context)) {
             return;
         }
 
-        registerTwoPanePairRule(context,
-                getComponentName(context, Settings.class),
+        registerTwoPanePairRuleForSettingsHome(
+                context,
                 getComponentName(context, SubSettings.class),
                 null /* secondaryIntentAction */,
-                true /* finishPrimaryWithSecondary */,
-                true /* finishSecondaryWithPrimary */,
                 clearTop);
     }
 
@@ -140,7 +170,7 @@
 
     @NonNull
     private static ComponentName getComponentName(Context context,
-                Class<? extends Activity> activityClass) {
+            Class<? extends Activity> activityClass) {
         return new ComponentName(context.getPackageName(), activityClass.getName());
     }
 }
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 951eb3c..3d1381d 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -175,14 +175,10 @@
                     if (fragment instanceof TopLevelSettings
                             && ActivityEmbeddingUtils.isEmbeddingActivityEnabled(mContext)) {
                         // Register the rule for injected apps.
-                        ActivityEmbeddingRulesController.registerTwoPanePairRule(mContext,
-                                new ComponentName(activity.getPackageName(),
-                                        com.android.settings.Settings.class.getName()),
-                                new ComponentName(tile.getPackageName(),
-                                        tile.getComponentName()),
+                        ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome(
+                                mContext,
+                                new ComponentName(tile.getPackageName(), tile.getComponentName()),
                                 null /* secondaryIntentAction */,
-                                true /* finishPrimaryWithSecondary */,
-                                true /* finishSecondaryWithPrimary */,
                                 true /* clearTop */);
 
                         // Highlight preference ui.
diff --git a/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java b/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java
index 2e59725..7640d08 100644
--- a/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java
+++ b/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java
@@ -31,6 +31,7 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
+import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
 import com.android.settings.activityembedding.ActivityEmbeddingUtils;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settingslib.RestrictedLockUtilsInternal;
@@ -102,6 +103,11 @@
                     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;
         }
diff --git a/src/com/android/settings/homepage/TopLevelSettings.java b/src/com/android/settings/homepage/TopLevelSettings.java
index e9c7ef8..2b0f788 100644
--- a/src/com/android/settings/homepage/TopLevelSettings.java
+++ b/src/com/android/settings/homepage/TopLevelSettings.java
@@ -100,7 +100,7 @@
     @Override
     public boolean onPreferenceTreeClick(Preference preference) {
         // Register SplitPairRule for SubSettings.
-        ActivityEmbeddingRulesController.registerSubSettingsPairRuleIfNeeded(getContext(),
+        ActivityEmbeddingRulesController.registerSubSettingsPairRule(getContext(),
                 true /* clearTop */);
 
         setHighlightPreferenceKey(preference.getKey());
diff --git a/src/com/android/settings/search/SearchResultTrampoline.java b/src/com/android/settings/search/SearchResultTrampoline.java
index d20a2ea..8805d19 100644
--- a/src/com/android/settings/search/SearchResultTrampoline.java
+++ b/src/com/android/settings/search/SearchResultTrampoline.java
@@ -97,7 +97,7 @@
         } else if (isFromSettingsIntelligence(callingActivity)) {
             // Register SplitPairRule for SubSettings, set clearTop false to prevent unexpected back
             // navigation behavior.
-            ActivityEmbeddingRulesController.registerSubSettingsPairRuleIfNeeded(this,
+            ActivityEmbeddingRulesController.registerSubSettingsPairRule(this,
                     false /* clearTop */);
             // TODO: pass menu key to homepage
             intent.setFlags(intent.getFlags() & ~Intent.FLAG_ACTIVITY_NEW_TASK);