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;