diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java
index d3afd3f..7e7cf46 100644
--- a/src/com/android/settings/dashboard/DashboardAdapter.java
+++ b/src/com/android/settings/dashboard/DashboardAdapter.java
@@ -15,7 +15,6 @@
  */
 package com.android.settings.dashboard;
 
-import android.app.Activity;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
@@ -32,6 +31,7 @@
 import android.widget.TextView;
 
 import androidx.annotation.VisibleForTesting;
+import androidx.fragment.app.FragmentActivity;
 import androidx.recyclerview.widget.DiffUtil;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -80,7 +80,8 @@
         @Override
         public void onClick(View v) {
             //TODO: get rid of setTag/getTag
-            mDashboardFeatureProvider.openTileIntent((Activity) mContext, (Tile) v.getTag());
+            mDashboardFeatureProvider.openTileIntent((FragmentActivity) mContext,
+                    (Tile) v.getTag());
         }
     };
 
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProvider.java b/src/com/android/settings/dashboard/DashboardFeatureProvider.java
index 35d50fb..ac11e0b 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProvider.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProvider.java
@@ -15,16 +15,16 @@
  */
 package com.android.settings.dashboard;
 
-import android.app.Activity;
 import android.content.Context;
 
+import androidx.fragment.app.FragmentActivity;
+import androidx.preference.Preference;
+
 import com.android.settingslib.drawer.DashboardCategory;
 import com.android.settingslib.drawer.Tile;
 
 import java.util.List;
 
-import androidx.preference.Preference;
-
 /**
  * FeatureProvider for dashboard (aka settings homepage).
  */
@@ -47,7 +47,7 @@
      * of auto-ordering, progressive disclosure, auto-refreshing summary text etc.
      */
     @Deprecated
-    List<Preference> getPreferencesForCategory(Activity activity, Context context,
+    List<Preference> getPreferencesForCategory(FragmentActivity activity, Context context,
             int sourceMetricsCategory, String key);
 
     /**
@@ -57,6 +57,7 @@
 
     /**
      * Whether or not we should tint icons in setting pages.
+     *
      * @deprecated in favor of color icons in homepage
      */
     @Deprecated
@@ -78,7 +79,7 @@
      * @param baseOrder The order offset value. When binding, pref's order is determined by
      * both this value and tile's own priority.
      */
-    void bindPreferenceToTile(Activity activity, int sourceMetricsCategory, Preference pref,
+    void bindPreferenceToTile(FragmentActivity activity, int sourceMetricsCategory, Preference pref,
             Tile tile, String key, int baseOrder);
 
     /**
@@ -89,6 +90,6 @@
     /**
      * Opens a tile to its destination intent.
      */
-    void openTileIntent(Activity activity, Tile tile);
+    void openTileIntent(FragmentActivity activity, Tile tile);
 
 }
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 49c7bbb..9e8664e 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -20,7 +20,6 @@
 import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY;
 import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI;
 
-import android.app.Activity;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.IContentProvider;
@@ -35,6 +34,7 @@
 import android.util.Pair;
 
 import androidx.annotation.VisibleForTesting;
+import androidx.fragment.app.FragmentActivity;
 import androidx.preference.Preference;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -83,7 +83,7 @@
     }
 
     @Override
-    public List<Preference> getPreferencesForCategory(Activity activity, Context context,
+    public List<Preference> getPreferencesForCategory(FragmentActivity activity, Context context,
             int sourceMetricsCategory, String key) {
         final DashboardCategory category = getTilesForCategory(key);
         if (category == null) {
@@ -130,8 +130,8 @@
     }
 
     @Override
-    public void bindPreferenceToTile(Activity activity, int sourceMetricsCategory, Preference pref,
-            Tile tile, String key, int baseOrder) {
+    public void bindPreferenceToTile(FragmentActivity activity, int sourceMetricsCategory,
+            Preference pref, Tile tile, String key, int baseOrder) {
         if (pref == null) {
             return;
         }
@@ -194,7 +194,7 @@
     }
 
     @Override
-    public void openTileIntent(Activity activity, Tile tile) {
+    public void openTileIntent(FragmentActivity activity, Tile tile) {
         if (tile == null) {
             Intent intent = new Intent(Settings.ACTION_SETTINGS).addFlags(
                     Intent.FLAG_ACTIVITY_CLEAR_TASK);
@@ -260,7 +260,7 @@
         }
     }
 
-    private void launchIntentOrSelectProfile(Activity activity, Tile tile, Intent intent,
+    private void launchIntentOrSelectProfile(FragmentActivity activity, Tile tile, Intent intent,
             int sourceMetricCategory) {
         if (!isIntentResolvable(intent)) {
             Log.w(TAG, "Cannot resolve intent, skipping. " + intent);
@@ -275,7 +275,7 @@
             mMetricsFeatureProvider.logDashboardStartIntent(mContext, intent, sourceMetricCategory);
             activity.startActivityForResultAsUser(intent, 0, tile.userHandle.get(0));
         } else {
-            ProfileSelectDialog.show(activity.getFragmentManager(), tile);
+            ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile);
         }
     }
 
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java
index b49f401..7e38d6a 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java
@@ -16,10 +16,7 @@
 
 package com.android.settings.dashboard.profileselector;
 
-import android.app.AlertDialog;
 import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnClickListener;
@@ -29,6 +26,10 @@
 import android.os.UserManager;
 import android.util.Log;
 
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.FragmentManager;
+
 import com.android.settingslib.drawer.Tile;
 
 import java.util.List;
diff --git a/tests/robotests/assets/grandfather_not_implementing_instrumentable b/tests/robotests/assets/grandfather_not_implementing_instrumentable
index 2c8ae5d..625d9ff 100644
--- a/tests/robotests/assets/grandfather_not_implementing_instrumentable
+++ b/tests/robotests/assets/grandfather_not_implementing_instrumentable
@@ -5,4 +5,5 @@
 com.android.settings.password.ChooseLockPattern$SaveAndFinishWorker
 com.android.settings.RestrictedListPreference$RestrictedListPreferenceDialogFragment
 com.android.settings.password.ConfirmDeviceCredentialBaseFragment$LastTryDialog
-com.android.settings.password.CredentialCheckResultTracker
\ No newline at end of file
+com.android.settings.password.CredentialCheckResultTracker
+com.android.settings.dashboard.profileselector.ProfileSelectDialog
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
index 10d5f22..f297cb1 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
@@ -23,7 +23,6 @@
 import static org.mockito.Mockito.when;
 
 import android.accounts.Account;
-import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
@@ -32,6 +31,7 @@
 import android.os.Bundle;
 import android.os.UserHandle;
 
+import androidx.fragment.app.FragmentActivity;
 import androidx.preference.Preference;
 
 import com.android.internal.logging.nano.MetricsProto;
@@ -126,7 +126,7 @@
         tile.userHandle = null;
         mFragment.displayTile(tile);
 
-        final Activity activity = Robolectric.setupActivity(Activity.class);
+        final FragmentActivity activity = Robolectric.setupActivity(FragmentActivity.class);
         final Preference preference = new Preference(mContext);
         dashboardFeatureProvider.bindPreferenceToTile(activity,
                 MetricsProto.MetricsEvent.DASHBOARD_SUMMARY, preference, tile, "key",
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
index 12411a0..18576d3 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
@@ -33,7 +33,6 @@
 import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
-import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
@@ -45,6 +44,7 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 
+import androidx.fragment.app.FragmentActivity;
 import androidx.preference.Preference;
 
 import com.android.internal.logging.nano.MetricsProto;
@@ -82,7 +82,7 @@
 public class DashboardFeatureProviderImplTest {
 
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private Activity mActivity;
+    private FragmentActivity mActivity;
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private UserManager mUserManager;
     @Mock
@@ -165,7 +165,7 @@
                 preference, tile, "123", Preference.DEFAULT_ORDER);
         preference.getOnPreferenceClickListener().onPreferenceClick(null);
 
-        verify(mActivity).getFragmentManager();
+        verify(mActivity).getSupportFragmentManager();
     }
 
     @Test
@@ -334,7 +334,7 @@
 
     @Test
     public void bindPreference_withIntentActionMetadata_shouldSetLaunchAction() {
-        Activity activity = Robolectric.buildActivity(Activity.class).get();
+        FragmentActivity activity = Robolectric.buildActivity(FragmentActivity.class).get();
         final Preference preference = new Preference(RuntimeEnvironment.application);
         final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
         tile.key = "key";
@@ -356,7 +356,7 @@
     public void clickPreference_withUnresolvableIntent_shouldNotLaunchAnything() {
         ReflectionHelpers.setField(
                 mImpl, "mPackageManager", RuntimeEnvironment.application.getPackageManager());
-        Activity activity = Robolectric.buildActivity(Activity.class).get();
+        FragmentActivity activity = Robolectric.buildActivity(FragmentActivity.class).get();
         final ShadowApplication application = ShadowApplication.getInstance();
         final Preference preference = new Preference(application.getApplicationContext());
         final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
@@ -442,7 +442,7 @@
 
         verify(mActivity, never())
                 .startActivityForResult(any(Intent.class), eq(0));
-        verify(mActivity).getFragmentManager();
+        verify(mActivity).getSupportFragmentManager();
     }
 
     @Test
@@ -457,7 +457,7 @@
 
         verify(mActivity, never())
                 .startActivityForResult(any(Intent.class), eq(0));
-        verify(mActivity).getFragmentManager();
+        verify(mActivity).getSupportFragmentManager();
     }
 
     @Test
@@ -472,6 +472,6 @@
 
         verify(mActivity)
                 .startActivityForResult(any(Intent.class), eq(0));
-        verify(mActivity, never()).getFragmentManager();
+        verify(mActivity, never()).getSupportFragmentManager();
     }
 }
