Processing ACTION_VIEW in contact browser instead of dialog

Bug: 2971898
Change-Id: I3abb6efd8419733681281a2eafa8d9c09660e2a2
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 56d9a02..b72bdce 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -188,6 +188,9 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <data android:mimeType="vnd.android.cursor.dir/person" android:host="contacts" />
                 <data android:mimeType="vnd.android.cursor.dir/contact" android:host="com.android.contacts" />
+                <data android:mimeType="vnd.android.cursor.item/person" android:host="contacts" />
+                <data android:mimeType="vnd.android.cursor.item/contact" android:host="com.android.contacts" />
+                <data android:mimeType="vnd.android.cursor.item/raw_contact" android:host="com.android.contacts" />
             </intent-filter>
         </activity>
 
@@ -428,9 +431,6 @@
             <intent-filter android:label="@string/viewContactDesription">
                 <action android:name="android.intent.action.VIEW" />
                 <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.item/person" android:host="contacts" />
-                <data android:mimeType="vnd.android.cursor.item/contact" android:host="com.android.contacts" />
-                <data android:mimeType="vnd.android.cursor.item/raw_contact" android:host="com.android.contacts" />
             </intent-filter>
         </activity>
 
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 4d56be3..5e74f49 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -178,20 +178,21 @@
             return;
         }
 
-        setTitle(mRequest.getActivityTitle());
         setContentView(R.layout.contact_browser);
-
-        mHasActionBar = getWindow().hasFeature(Window.FEATURE_ACTION_BAR);
         mContactContentDisplayed = findViewById(R.id.detail_container) != null;
 
-        if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT) {
-            if (!mContactContentDisplayed) {
-                startActivity(new Intent(Intent.ACTION_VIEW, mRequest.getContactUri()));
-                finish();
-                return;
-            }
+        if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT
+                && !mContactContentDisplayed) {
+            redirect = new Intent(this, ContactDetailActivity.class);
+            redirect.setAction(Intent.ACTION_VIEW);
+            redirect.setData(mRequest.getContactUri());
+            startActivity(redirect);
+            finish();
+            return;
         }
 
+        setTitle(mRequest.getActivityTitle());
+        mHasActionBar = getWindow().hasFeature(Window.FEATURE_ACTION_BAR);
         if (mHasActionBar) {
             mActionBarAdapter = new ActionBarAdapter(this);
             mActionBarAdapter.onCreate(savedState, mRequest, getActionBar());
diff --git a/src/com/android/contacts/activities/ContactsFrontDoor.java b/src/com/android/contacts/activities/ContactsFrontDoor.java
index d8ffd7a..e12bbf1 100644
--- a/src/com/android/contacts/activities/ContactsFrontDoor.java
+++ b/src/com/android/contacts/activities/ContactsFrontDoor.java
@@ -30,7 +30,10 @@
     public void onCreate(Bundle savedState) {
         super.onCreate(savedState);
 
+        Intent originalIntent = getIntent();
         Intent intent = new Intent();
+        intent.setAction(originalIntent.getAction());
+        intent.setDataAndType(originalIntent.getData(), originalIntent.getType());
         intent.setFlags(
                 Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
         intent.putExtra(EXTRA_FRONT_DOOR, true);
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index a1c7c3f..892341e 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -289,19 +289,17 @@
 
     private void parseSelectedContactUri() {
         if (mSelectedContactUri != null) {
-            if (!mSelectedContactUri.toString()
-                    .startsWith(Contacts.CONTENT_LOOKUP_URI.toString())) {
-                throw new IllegalStateException(
-                        "Contact list contains a non-lookup URI: " + mSelectedContactUri);
+            String directoryParam =
+                mSelectedContactUri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY);
+            mSelectedContactDirectoryId = TextUtils.isEmpty(directoryParam) ? Directory.DEFAULT
+                    : Long.parseLong(directoryParam);
+            if (mSelectedContactUri.toString().startsWith(Contacts.CONTENT_LOOKUP_URI.toString())) {
+                mSelectedContactLookupKey = Uri.encode(
+                        mSelectedContactUri.getPathSegments().get(2));
+            } else {
+                mSelectedContactLookupKey = null;
             }
 
-            String directoryParam =
-                    mSelectedContactUri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY);
-            mSelectedContactDirectoryId = TextUtils.isEmpty(directoryParam)
-                    ? Directory.DEFAULT
-                    : Long.parseLong(directoryParam);
-            mSelectedContactLookupKey =
-                    Uri.encode(mSelectedContactUri.getPathSegments().get(2));
         } else {
             mSelectedContactDirectoryId = Directory.DEFAULT;
             mSelectedContactLookupKey = null;