Restored work profile contacts to Dialer search.

We were intentionally leaving out work profile contacts to gauge user impact.
Unfortunatly, no enterprise users left feedback in the play store but luckily,
they raised the concern internally and it was escalated to the Android for Work
team.

Bug: 73083054
Test: manual
PiperOrigin-RevId: 185409607
Change-Id: Iae40d0abdbe7f209ba3ad12823e07eac748632a5
diff --git a/java/com/android/contacts/common/compat/DirectoryCompat.java b/java/com/android/contacts/common/compat/DirectoryCompat.java
index 85f4a42..e670876 100644
--- a/java/com/android/contacts/common/compat/DirectoryCompat.java
+++ b/java/com/android/contacts/common/compat/DirectoryCompat.java
@@ -48,4 +48,8 @@
   public static boolean isEnterpriseDirectoryId(long directoryId) {
     return VERSION.SDK_INT >= VERSION_CODES.N && Directory.isEnterpriseDirectoryId(directoryId);
   }
+
+  public static boolean isOnlyEnterpriseDirectoryId(long directoryId) {
+    return isEnterpriseDirectoryId(directoryId) && !isRemoteDirectoryId(directoryId);
+  }
 }
diff --git a/java/com/android/dialer/searchfragment/common/res/layout/search_contact_row.xml b/java/com/android/dialer/searchfragment/common/res/layout/search_contact_row.xml
index 407207a..9be7fa0 100644
--- a/java/com/android/dialer/searchfragment/common/res/layout/search_contact_row.xml
+++ b/java/com/android/dialer/searchfragment/common/res/layout/search_contact_row.xml
@@ -65,4 +65,15 @@
       android:tint="@color/dialer_secondary_text_color"
       android:visibility="gone"
       android:scaleType="center"/>
+
+  <ImageView
+      android:id="@+id/work_icon"
+      android:layout_width="@dimen/search_row_height"
+      android:layout_height="@dimen/search_row_height"
+      android:layout_alignParentEnd="true"
+      android:layout_centerVertical="true"
+      android:padding="@dimen/call_to_action_padding"
+      android:src="@drawable/ic_work_profile"
+      android:scaleType="centerInside"
+      android:visibility="gone"/>
 </RelativeLayout>
\ No newline at end of file
diff --git a/java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java b/java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java
index 9d36900..4be96fe 100644
--- a/java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java
+++ b/java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java
@@ -26,8 +26,10 @@
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.view.View;
+import android.widget.ImageView;
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
+import com.android.contacts.common.compat.DirectoryCompat;
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.contactphoto.ContactPhotoManager;
@@ -46,6 +48,7 @@
   private final TextView nameView;
   private final TextView numberView;
   private final QuickContactBadge photo;
+  private final ImageView workBadge;
 
   private String number;
 
@@ -55,6 +58,7 @@
     photo = view.findViewById(R.id.photo);
     nameView = view.findViewById(R.id.primary);
     numberView = view.findViewById(R.id.secondary);
+    workBadge = view.findViewById(R.id.work_icon);
     context = view.getContext();
   }
 
@@ -74,6 +78,10 @@
 
     nameView.setText(QueryBoldingUtil.getNameWithQueryBolded(query, name, context));
     numberView.setText(QueryBoldingUtil.getNameWithQueryBolded(query, secondaryInfo, context));
+    workBadge.setVisibility(
+        DirectoryCompat.isOnlyEnterpriseDirectoryId(cursor.getDirectoryId())
+            ? View.VISIBLE
+            : View.GONE);
 
     if (shouldShowPhoto(cursor)) {
       nameView.setVisibility(View.VISIBLE);
diff --git a/java/com/android/dialer/searchfragment/remote/RemoteContactsCursor.java b/java/com/android/dialer/searchfragment/remote/RemoteContactsCursor.java
index 9510443..653c670 100644
--- a/java/com/android/dialer/searchfragment/remote/RemoteContactsCursor.java
+++ b/java/com/android/dialer/searchfragment/remote/RemoteContactsCursor.java
@@ -22,6 +22,7 @@
 import android.database.MergeCursor;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
+import com.android.contacts.common.compat.DirectoryCompat;
 import com.android.dialer.common.Assert;
 import com.android.dialer.searchfragment.common.SearchCursor;
 import com.android.dialer.searchfragment.directories.DirectoriesCursorLoader;
@@ -101,7 +102,12 @@
 
   private static MatrixCursor createHeaderCursor(Context context, String name, long id) {
     MatrixCursor headerCursor = new MatrixCursor(PROJECTION, 1);
-    headerCursor.addRow(new Object[] {context.getString(R.string.directory, name), id});
+    if (DirectoryCompat.isOnlyEnterpriseDirectoryId(id)) {
+      headerCursor.addRow(
+          new Object[] {context.getString(R.string.directory_search_label_work), id});
+    } else {
+      headerCursor.addRow(new Object[] {context.getString(R.string.directory, name), id});
+    }
     return headerCursor;
   }
 
diff --git a/java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java b/java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java
index 9feeb7e..cf495e4 100644
--- a/java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java
+++ b/java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java
@@ -27,6 +27,7 @@
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.support.annotation.NonNull;
 import android.support.annotation.VisibleForTesting;
+import com.android.contacts.common.compat.DirectoryCompat;
 import com.android.dialer.searchfragment.common.Projections;
 import com.android.dialer.searchfragment.directories.DirectoriesCursorLoader.Directory;
 import java.util.ArrayList;
@@ -71,7 +72,14 @@
       Directory directory = directories.get(i);
 
       // Filter out local directories
-      if (!isRemoteDirectory(directory.getId())) {
+      if (!DirectoryCompat.isRemoteDirectoryId(directory.getId())
+          && !DirectoryCompat.isEnterpriseDirectoryId(directory.getId())) {
+        cursors[i] = null;
+        continue;
+      }
+
+      // Filter out invisible directories
+      if (DirectoryCompat.isInvisibleDirectory(directory.getId())) {
         cursors[i] = null;
         continue;
       }
@@ -93,17 +101,6 @@
     return RemoteContactsCursor.newInstance(getContext(), cursors, directories);
   }
 
-  private static boolean isRemoteDirectory(long directoryId) {
-    return VERSION.SDK_INT >= VERSION_CODES.N
-        ? ContactsContract.Directory.isRemoteDirectoryId(directoryId)
-        : (directoryId != ContactsContract.Directory.DEFAULT
-            && directoryId != ContactsContract.Directory.LOCAL_INVISIBLE
-            // Directory.ENTERPRISE_DEFAULT is the default work profile directory for locally stored
-            // contacts
-            && directoryId != ContactsContract.Directory.ENTERPRISE_DEFAULT
-            && directoryId != ContactsContract.Directory.ENTERPRISE_LOCAL_INVISIBLE);
-  }
-
   private MatrixCursor createMatrixCursorFilteringNullNumbers(Cursor cursor) {
     if (cursor == null) {
       return null;