diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureSettingsTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureSettingsTest.java
index c93dbd1..26453cd 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureSettingsTest.java
@@ -34,6 +34,8 @@
 import com.android.settings.wrapper.UserManagerWrapper;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
+import com.google.common.collect.ImmutableList;
+
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -60,7 +62,6 @@
     private UserManagerWrapper mUserManager;
     private ArrayList<PackageInfo> mPrimaryUserPackages;
     private ArrayList<PackageInfo> mProfileUserPackages;
-    private ArrayList<UserInfo> mUsers;
 
     @Before
     public void setUp() {
@@ -69,15 +70,20 @@
         mFragment = new PictureInPictureSettings(mPackageManager, mUserManager);
         mPrimaryUserPackages = new ArrayList<>();
         mProfileUserPackages = new ArrayList<>();
-        mUsers = new ArrayList<>();
         when(mPackageManager.getInstalledPackagesAsUser(anyInt(), eq(PRIMARY_USER_ID)))
                 .thenReturn(mPrimaryUserPackages);
         when(mPackageManager.getInstalledPackagesAsUser(anyInt(), eq(PROFILE_USER_ID)))
                 .thenReturn(mProfileUserPackages);
-        when(mUserManager.getProfiles(anyInt())).thenReturn(mUsers);
+
+        UserInfo primaryUserInfo = new UserInfo();
+        primaryUserInfo.id = PRIMARY_USER_ID;
+        UserInfo profileUserInfo = new UserInfo();
+        profileUserInfo.id = PROFILE_USER_ID;
+
+        when(mUserManager.getProfiles(PRIMARY_USER_ID)).thenReturn(
+                ImmutableList.of(primaryUserInfo, profileUserInfo));
     }
 
-    @Ignore("b/73892555")
     @Test
     public void testCollectPipApps() {
         PackageInfo primaryP1 = createPackage("Calculator", true);
@@ -95,7 +101,6 @@
         assertThat(containsPackages(apps, primaryP2, profileP1)).isFalse();
     }
 
-    @Ignore("b/73892683")
     @Test
     public void testAppSort() {
         PackageInfo primaryP1 = createPackage("Android", true);
@@ -114,7 +119,7 @@
 
         ArrayList<Pair<ApplicationInfo, Integer>> apps = mFragment.collectPipApps(PRIMARY_USER_ID);
         Collections.sort(apps, new PictureInPictureSettings.AppComparator(null));
-        assertThat(isOrdered(apps, primaryP1, profileP1, primaryP2, profileP2)).isTrue();
+        assertThat(isOrdered(apps, primaryP1, profileP1, primaryP2, profileP2, primaryP3)).isTrue();
     }
 
     private boolean containsPackages(ArrayList<Pair<ApplicationInfo, Integer>> apps,
