diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f51719b..e3dce71 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -136,6 +136,10 @@
 
         <uses-library android:name="org.apache.http.legacy" />
 
+        <property
+            android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED"
+            android:value="true" />
+
         <!-- Settings -->
         <activity android:name=".homepage.SettingsHomepageActivity"
                   android:label="@string/settings_label_launcher"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2e196eb..94de3c4 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5414,18 +5414,20 @@
     <string name="experimental_category_title">Experimental</string>
     <!-- Title for feature flags dashboard where developers can turn on experimental features [CHAR LIMIT=50] -->
     <string name="feature_flags_dashboard_title">Feature flags</string>
-    <!-- Title for snoop logger filters dashboard where developers can turn on filters [CHAR LIMIT=50] -->
-    <string name="snoop_logger_filters_dashboard_title">Snoop Logger Filters</string>
-    <!-- Summary for the snoop logger filters [CHAR LIMIT=50] -->
-    <string name="bt_hci_snoop_log_filters_dashboard_summary">Set filters (Toggle Bluetooth after changing this setting)</string>
-    <!-- Title for the snoop logger pbap filter [CHAR LIMIT=50] -->
-    <string name="bt_hci_snoop_log_filter_pbap_title">Snoop Logger Filter PBAP</string>
-    <!-- Title for the snoop logger map filter [CHAR LIMIT=50] -->
-    <string name="bt_hci_snoop_log_filter_map_title">Snoop Logger Filter MAP</string>
-    <!-- Summary for the snoop logger filters [CHAR LIMIT=50] -->
-    <string name="bt_hci_snoop_log_filter_summary">Set filtering mode. (Toggle Bluetooth after changing this setting)</string>
-    <!-- Summary for the snoop logger profile filters while disabled [CHAR LIMIT=50] -->
-    <string name="bt_hci_snoop_log_filtered_mode_disabled_summary">Enable Snoop Log Mode Filtered to change this option.</string>
+    <!-- Title for snoop logger filters dashboard where developers can turn on filters [CHAR LIMIT=100] -->
+    <string name="bt_hci_snoop_log_filters_dashboard_title">Bluetooth HCI snoop log filtering</string>
+    <!-- Summary for the snoop logger filters [CHAR LIMIT=100] -->
+    <string name="bt_hci_snoop_log_filters_dashboard_summary">Set filters</string>
+    <!-- Summary for the snoop logger filters [CHAR LIMIT=100] -->
+    <string name="bt_hci_snoop_log_filters_dashboard_footer">Disable and enable Bluetooth for the changes to take effect</string>
+    <!-- Title for the snoop logger pbap filter [CHAR LIMIT=100] -->
+    <string name="bt_hci_snoop_log_filter_pbap_title">Bluetooth HCI snoop log filtering PBAP</string>
+    <!-- Title for the snoop logger map filter [CHAR LIMIT=100] -->
+    <string name="bt_hci_snoop_log_filter_map_title">Bluetooth HCI snoop log filtering MAP</string>
+    <!-- Summary for the snoop logger filters [CHAR LIMIT=100] -->
+    <string name="bt_hci_snoop_log_filter_summary">Set filtering mode. (Disable and enable Bluetooth for the changes to take effect)</string>
+    <!-- Summary for the snoop logger profile filters while disabled [CHAR LIMIT=100] -->
+    <string name="bt_hci_snoop_log_filtered_mode_disabled_summary">Set Bluetooth HCI snoop log mode to Enabled Filtered to change this option</string>
     <!-- Title for the Talkback Accessibility Service. Displayed on the Accessibility Settings screen in Setup Wizard. [CHAR_LIMIT=25] -->
     <string name="talkback_title">Talkback</string>
     <!-- Summary for the Talkback Accessibility Service. Lets the user know that Talkback is a screenreader and that it is usually most helpful to blind and low vision users and whether the service is on. [CHAR_LIMIT=none] -->
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index 13d9c1c..21bd412 100644
--- a/res/xml/development_settings.xml
+++ b/res/xml/development_settings.xml
@@ -82,7 +82,7 @@
 
         <Preference
             android:key="snoop_logger_filters_dashboard"
-            android:title="@string/snoop_logger_filters_dashboard_title"
+            android:title="@string/bt_hci_snoop_log_filters_dashboard_title"
             android:fragment=
                 "com.android.settings.development.snooplogger.SnoopLoggerFiltersDashboard" />
 
diff --git a/res/xml/snoop_logger_filters_settings.xml b/res/xml/snoop_logger_filters_settings.xml
index c804ec6..abc2546 100644
--- a/res/xml/snoop_logger_filters_settings.xml
+++ b/res/xml/snoop_logger_filters_settings.xml
@@ -18,7 +18,7 @@
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
-    android:title="@string/snoop_logger_filters_dashboard_title" >
+    android:title="@string/bt_hci_snoop_log_filters_dashboard_title" >
 
     <PreferenceCategory
         android:key="snoop_logger_filters_category"
@@ -26,4 +26,10 @@
         android:title="@string/bt_hci_snoop_log_filters_dashboard_summary"
         settings:controller=
           "com.android.settings.development.snooplogger.SnoopLoggerFiltersPreferenceController" />
+
+    <com.android.settingslib.widget.FooterPreference
+        android:key="snoop_logger_filters_footer"
+        android:title="@string/bt_hci_snoop_log_filters_dashboard_footer"
+        android:selectable="false"
+        settings:searchable="false"/>
 </PreferenceScreen>
diff --git a/src/com/android/settings/SettingsInitialize.java b/src/com/android/settings/SettingsInitialize.java
index ca13683..efbfd36 100644
--- a/src/com/android/settings/SettingsInitialize.java
+++ b/src/com/android/settings/SettingsInitialize.java
@@ -154,7 +154,7 @@
                 DeepLinkHomepageActivity.class);
         final ComponentName searchStateReceiver = new ComponentName(context,
                 SearchStateReceiver.class);
-        final int enableState = SplitController.getInstance().isSplitSupported()
+        final int enableState = SplitController.getInstance(context).isSplitSupported()
                 ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                 : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
         pm.setComponentEnabledSetting(deepLinkHome, enableState, PackageManager.DONT_KILL_APP);
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
index ad0d4ea..ba778e9 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
@@ -22,12 +22,12 @@
 import android.content.Context;
 import android.content.Intent;
 import android.util.FeatureFlagUtils;
-import android.util.LayoutDirection;
 import android.util.Log;
 
 import androidx.window.embedding.ActivityFilter;
 import androidx.window.embedding.ActivityRule;
-import androidx.window.embedding.SplitController;
+import androidx.window.embedding.RuleController;
+import androidx.window.embedding.SplitAttributes;
 import androidx.window.embedding.SplitPairFilter;
 import androidx.window.embedding.SplitPairRule;
 import androidx.window.embedding.SplitPlaceholderRule;
@@ -46,6 +46,7 @@
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.users.AvatarPickerActivity;
 
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -56,11 +57,11 @@
     private static final ComponentName COMPONENT_NAME_WILDCARD = new ComponentName(
             "*" /* pkg */, "*" /* cls */);
     private final Context mContext;
-    private final SplitController mSplitController;
+    private final RuleController mRuleController;
 
     public ActivityEmbeddingRulesController(Context context) {
         mContext = context;
-        mSplitController = SplitController.getInstance();
+        mRuleController = RuleController.getInstance(context);
     }
 
     /**
@@ -72,7 +73,7 @@
             return;
         }
 
-        mSplitController.clearRegisteredRules();
+        mRuleController.clearRules();
 
         // Set a placeholder for home page.
         registerHomepagePlaceholderRule();
@@ -85,8 +86,8 @@
             ComponentName primaryComponent,
             ComponentName secondaryComponent,
             String secondaryIntentAction,
-            int finishPrimaryWithSecondary,
-            int finishSecondaryWithPrimary,
+            SplitRule.FinishBehavior finishPrimaryWithSecondary,
+            SplitRule.FinishBehavior finishSecondaryWithPrimary,
             boolean clearTop) {
         if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context)) {
             return;
@@ -95,14 +96,20 @@
         filters.add(new SplitPairFilter(primaryComponent, secondaryComponent,
                 secondaryIntentAction));
 
-        SplitController.getInstance().registerRule(new SplitPairRule(filters,
-                finishPrimaryWithSecondary,
-                finishSecondaryWithPrimary,
-                clearTop,
-                ActivityEmbeddingUtils.getMinCurrentScreenSplitWidthPx(context),
-                ActivityEmbeddingUtils.getMinSmallestScreenSplitWidthPx(context),
-                ActivityEmbeddingUtils.getSplitRatio(context),
-                LayoutDirection.LOCALE));
+        SplitAttributes attributes = new SplitAttributes.Builder()
+                .setSplitType(SplitAttributes.SplitType.ratio(
+                        ActivityEmbeddingUtils.getSplitRatio(context)))
+                .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
+                .build();
+        SplitPairRule splitPairRule = new SplitPairRule.Builder(filters)
+                .setFinishPrimaryWithSecondary(finishPrimaryWithSecondary)
+                .setFinishSecondaryWithPrimary(finishSecondaryWithPrimary)
+                .setClearTop(clearTop)
+                .setMinWidthDp(ActivityEmbeddingUtils.getMinCurrentScreenSplitWidthDp())
+                .setMinSmallestWidthDp(ActivityEmbeddingUtils.getMinSmallestScreenSplitWidthDp())
+                .setDefaultSplitAttributes(attributes)
+                .build();
+        RuleController.getInstance(context).addRule(splitPairRule);
     }
 
     /**
@@ -123,8 +130,10 @@
                 new ComponentName(context, Settings.class),
                 secondaryComponent,
                 secondaryIntentAction,
-                finishPrimaryWithSecondary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
-                finishSecondaryWithPrimary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
+                finishPrimaryWithSecondary ? SplitRule.FinishBehavior.ADJACENT
+                        : SplitRule.FinishBehavior.NEVER,
+                finishSecondaryWithPrimary ? SplitRule.FinishBehavior.ADJACENT
+                        : SplitRule.FinishBehavior.NEVER,
                 clearTop);
 
         registerTwoPanePairRule(
@@ -132,8 +141,10 @@
                 new ComponentName(context, SettingsHomepageActivity.class),
                 secondaryComponent,
                 secondaryIntentAction,
-                finishPrimaryWithSecondary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
-                finishSecondaryWithPrimary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
+                finishPrimaryWithSecondary ? SplitRule.FinishBehavior.ADJACENT
+                        : SplitRule.FinishBehavior.NEVER,
+                finishSecondaryWithPrimary ? SplitRule.FinishBehavior.ADJACENT
+                        : SplitRule.FinishBehavior.NEVER,
                 clearTop);
 
         // We should finish HomePageActivity altogether even if it shows in single pane for all deep
@@ -143,8 +154,10 @@
                 new ComponentName(context, DeepLinkHomepageActivity.class),
                 secondaryComponent,
                 secondaryIntentAction,
-                finishPrimaryWithSecondary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
-                finishSecondaryWithPrimary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
+                finishPrimaryWithSecondary ? SplitRule.FinishBehavior.ALWAYS
+                        : SplitRule.FinishBehavior.NEVER,
+                finishSecondaryWithPrimary ? SplitRule.FinishBehavior.ALWAYS
+                        : SplitRule.FinishBehavior.NEVER,
                 clearTop);
 
         registerTwoPanePairRule(
@@ -152,8 +165,10 @@
                 new ComponentName(context, DeepLinkHomepageActivityInternal.class),
                 secondaryComponent,
                 secondaryIntentAction,
-                finishPrimaryWithSecondary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
-                finishSecondaryWithPrimary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
+                finishPrimaryWithSecondary ? SplitRule.FinishBehavior.ALWAYS
+                        : SplitRule.FinishBehavior.NEVER,
+                finishSecondaryWithPrimary ? SplitRule.FinishBehavior.ALWAYS
+                        : SplitRule.FinishBehavior.NEVER,
                 clearTop);
     }
 
@@ -204,17 +219,20 @@
 
         final Intent intent = new Intent(mContext, Settings.NetworkDashboardActivity.class);
         intent.putExtra(SettingsActivity.EXTRA_IS_SECOND_LAYER_PAGE, true);
-        final SplitPlaceholderRule placeholderRule = new SplitPlaceholderRule(
-                activityFilters,
-                intent,
-                true /* stickyPlaceholder */,
-                SplitRule.FINISH_ADJACENT,
-                ActivityEmbeddingUtils.getMinCurrentScreenSplitWidthPx(mContext),
-                ActivityEmbeddingUtils.getMinSmallestScreenSplitWidthPx(mContext),
-                ActivityEmbeddingUtils.getSplitRatio(mContext),
-                LayoutDirection.LOCALE);
+        SplitAttributes attributes = new SplitAttributes.Builder()
+                .setSplitType(SplitAttributes.SplitType.ratio(
+                        ActivityEmbeddingUtils.getSplitRatio(mContext)))
+                .build();
+        final SplitPlaceholderRule placeholderRule = new SplitPlaceholderRule.Builder(
+                activityFilters, intent)
+                .setMinWidthDp(ActivityEmbeddingUtils.getMinCurrentScreenSplitWidthDp())
+                .setMinSmallestWidthDp(ActivityEmbeddingUtils.getMinSmallestScreenSplitWidthDp())
+                .setSticky(true)
+                .setFinishPrimaryWithPlaceholder(SplitRule.FinishBehavior.ADJACENT)
+                .setDefaultSplitAttributes(attributes)
+                .build();
 
-        mSplitController.registerRule(placeholderRule);
+        mRuleController.addRule(placeholderRule);
     }
 
     private void registerAlwaysExpandRule() {
@@ -229,14 +247,16 @@
         addActivityFilter(activityFilters, FingerprintEnrollIntroductionInternal.class);
         addActivityFilter(activityFilters, FingerprintEnrollEnrolling.class);
         addActivityFilter(activityFilters, AvatarPickerActivity.class);
-        mSplitController.registerRule(new ActivityRule(activityFilters, true /* alwaysExpand */));
+        ActivityRule activityRule = new ActivityRule.Builder(activityFilters).setAlwaysExpand(true)
+                .build();
+        mRuleController.addRule(activityRule);
     }
 
     private static void addActivityFilter(Set<ActivityFilter> activityFilters, Intent intent) {
         activityFilters.add(new ActivityFilter(COMPONENT_NAME_WILDCARD, intent.getAction()));
     }
 
-    private void addActivityFilter(Set<ActivityFilter> activityFilters,
+    private void addActivityFilter(Collection<ActivityFilter> activityFilters,
             Class<? extends Activity> activityClass) {
         activityFilters.add(new ActivityFilter(new ComponentName(mContext, activityClass),
                 null /* intentAction */));
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java b/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
index fdf1314..63ea9cd 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
@@ -30,29 +30,25 @@
 /** An util class collecting all common methods for the embedding activity features. */
 public class ActivityEmbeddingUtils {
     // The smallest value of current width of the window when the split should be used.
-    private static final float MIN_CURRENT_SCREEN_SPLIT_WIDTH_DP = 720f;
+    private static final int MIN_CURRENT_SCREEN_SPLIT_WIDTH_DP = 720;
     // The smallest value of the smallest-width (sw) of the window in any rotation when
     // the split should be used.
-    private static final float MIN_SMALLEST_SCREEN_SPLIT_WIDTH_DP = 600f;
+    private static final int MIN_SMALLEST_SCREEN_SPLIT_WIDTH_DP = 600;
     // The minimum width of the activity to show the regular homepage layout.
     private static final float MIN_REGULAR_HOMEPAGE_LAYOUT_WIDTH_DP = 380f;
     private static final String TAG = "ActivityEmbeddingUtils";
 
-    /** Get the smallest pixel value of width of the window when the split should be used. */
-    public static int getMinCurrentScreenSplitWidthPx(Context context) {
-        final DisplayMetrics dm = context.getResources().getDisplayMetrics();
-        return (int) TypedValue.applyDimension(
-                TypedValue.COMPLEX_UNIT_DIP, MIN_CURRENT_SCREEN_SPLIT_WIDTH_DP, dm);
+    /** Get the smallest width dp of the window when the split should be used. */
+    public static int getMinCurrentScreenSplitWidthDp() {
+        return MIN_CURRENT_SCREEN_SPLIT_WIDTH_DP;
     }
 
     /**
-     * Get the smallest pixel value of the smallest-width (sw) of the window in any rotation when
+     * Get the smallest dp value of the smallest-width (sw) of the window in any rotation when
      * the split should be used.
      */
-    public static int getMinSmallestScreenSplitWidthPx(Context context) {
-        final DisplayMetrics dm = context.getResources().getDisplayMetrics();
-        return (int) TypedValue.applyDimension(
-                TypedValue.COMPLEX_UNIT_DIP, MIN_SMALLEST_SCREEN_SPLIT_WIDTH_DP, dm);
+    public static int getMinSmallestScreenSplitWidthDp() {
+        return MIN_SMALLEST_SCREEN_SPLIT_WIDTH_DP;
     }
 
     /**
@@ -67,7 +63,7 @@
     public static boolean isEmbeddingActivityEnabled(Context context) {
         final boolean isFlagEnabled = FeatureFlagUtils.isEnabled(context,
                 FeatureFlagUtils.SETTINGS_SUPPORT_LARGE_SCREEN);
-        final boolean isSplitSupported = SplitController.getInstance().isSplitSupported();
+        final boolean isSplitSupported = SplitController.getInstance(context).isSplitSupported();
 
         Log.d(TAG, "isFlagEnabled = " + isFlagEnabled);
         Log.d(TAG, "isSplitSupported = " + isSplitSupported);
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index 8e14c5a..a4a7609 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -51,7 +51,7 @@
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
-import androidx.window.embedding.SplitController;
+import androidx.window.embedding.ActivityEmbeddingController;
 import androidx.window.embedding.SplitRule;
 
 import com.android.settings.R;
@@ -95,7 +95,7 @@
     private View mTwoPaneSuggestionView;
     private CategoryMixin mCategoryMixin;
     private Set<HomepageLoadedListener> mLoadedListeners;
-    private SplitController mSplitController;
+    private ActivityEmbeddingController mActivityEmbeddingController;
     private boolean mIsEmbeddingActivityEnabled;
     private boolean mIsTwoPane;
     // A regular layout shows icons on homepage, whereas a simplified layout doesn't.
@@ -183,8 +183,8 @@
         setupEdgeToEdge();
         setContentView(R.layout.settings_homepage_container);
 
-        mSplitController = SplitController.getInstance();
-        mIsTwoPane = mSplitController.isActivityEmbedded(this);
+        mActivityEmbeddingController = ActivityEmbeddingController.getInstance(this);
+        mIsTwoPane = mActivityEmbeddingController.isActivityEmbedded(this);
 
         updateAppBarMinHeight();
         initHomepageContainer();
@@ -248,7 +248,7 @@
     @Override
     public void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
-        final boolean newTwoPaneState = mSplitController.isActivityEmbedded(this);
+        final boolean newTwoPaneState = mActivityEmbeddingController.isActivityEmbedded(this);
         if (mIsTwoPane != newTwoPaneState) {
             mIsTwoPane = newTwoPaneState;
             updateHomepageAppBar();
@@ -453,15 +453,15 @@
                 new ComponentName(getApplicationContext(), getClass()),
                 targetComponentName,
                 targetIntent.getAction(),
-                SplitRule.FINISH_ALWAYS,
-                SplitRule.FINISH_ALWAYS,
+                SplitRule.FinishBehavior.ALWAYS,
+                SplitRule.FinishBehavior.ALWAYS,
                 true /* clearTop */);
         ActivityEmbeddingRulesController.registerTwoPanePairRule(this,
                 new ComponentName(getApplicationContext(), Settings.class),
                 targetComponentName,
                 targetIntent.getAction(),
-                SplitRule.FINISH_ALWAYS,
-                SplitRule.FINISH_ALWAYS,
+                SplitRule.FinishBehavior.ALWAYS,
+                SplitRule.FinishBehavior.ALWAYS,
                 true /* clearTop */);
 
         final UserHandle user = intent.getParcelableExtra(EXTRA_USER_HANDLE, UserHandle.class);
diff --git a/src/com/android/settings/homepage/TopLevelSettings.java b/src/com/android/settings/homepage/TopLevelSettings.java
index 70530fc..02619a7 100644
--- a/src/com/android/settings/homepage/TopLevelSettings.java
+++ b/src/com/android/settings/homepage/TopLevelSettings.java
@@ -35,7 +35,7 @@
 import androidx.preference.PreferenceFragmentCompat;
 import androidx.preference.PreferenceScreen;
 import androidx.recyclerview.widget.RecyclerView;
-import androidx.window.embedding.SplitController;
+import androidx.window.embedding.ActivityEmbeddingController;
 
 import com.android.settings.R;
 import com.android.settings.Utils;
@@ -64,6 +64,7 @@
     private int mPaddingHorizontal;
     private boolean mScrollNeeded = true;
     private boolean mFirstStarted = true;
+    private ActivityEmbeddingController mActivityEmbeddingController;
 
     public TopLevelSettings() {
         final Bundle args = new Bundle();
@@ -142,7 +143,7 @@
             return;
         }
 
-        boolean activityEmbedded = SplitController.getInstance().isActivityEmbedded(getActivity());
+        boolean activityEmbedded = isActivityEmbedded();
         if (icicle != null) {
             mHighlightMixin = icicle.getParcelable(SAVED_HIGHLIGHT_MIXIN);
             mScrollNeeded = !mHighlightMixin.isActivityEmbedded() && activityEmbedded;
@@ -153,12 +154,20 @@
         }
     }
 
+    /** Wrap ActivityEmbeddingController#isActivityEmbedded for testing. */
+    public boolean isActivityEmbedded() {
+        if (mActivityEmbeddingController == null) {
+            mActivityEmbeddingController = ActivityEmbeddingController.getInstance(getActivity());
+        }
+        return mActivityEmbeddingController.isActivityEmbedded(getActivity());
+    }
+
     @Override
     public void onStart() {
         if (mFirstStarted) {
             mFirstStarted = false;
         } else if (mIsEmbeddingActivityEnabled && isOnlyOneActivityInTask()
-                && !SplitController.getInstance().isActivityEmbedded(getActivity())) {
+                && !isActivityEmbedded()) {
             // Set default highlight menu key for 1-pane homepage since it will show the placeholder
             // page once changing back to 2-pane.
             Log.i(TAG, "Set default menu key");
@@ -283,7 +292,7 @@
          * 3. the current activity is embedded */
         return mHighlightMixin != null
                 && TextUtils.equals(pref.getKey(), mHighlightMixin.getHighlightPreferenceKey())
-                && SplitController.getInstance().isActivityEmbedded(getActivity());
+                && isActivityEmbedded();
     }
 
     /** Show/hide the highlight on the menu entry for the search page presence */
diff --git a/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java b/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
index 3cc7ef2..8084a48 100644
--- a/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
+++ b/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
@@ -30,7 +30,7 @@
 import androidx.preference.PreferenceGroupAdapter;
 import androidx.preference.PreferenceViewHolder;
 import androidx.recyclerview.widget.RecyclerView;
-import androidx.window.embedding.SplitController;
+import androidx.window.embedding.ActivityEmbeddingController;
 
 import com.android.settings.R;
 import com.android.settings.Utils;
@@ -250,6 +250,7 @@
     }
 
     private boolean isHighlightNeeded() {
-        return SplitController.getInstance().isActivityEmbedded(mHomepageActivity);
+        return ActivityEmbeddingController.getInstance(mHomepageActivity)
+                .isActivityEmbedded(mHomepageActivity);
     }
 }
