Upgrading QSB->Contacts integration for tablet UI
Change-Id: Ic6ff3639b808936c29b08c751b6475ebd0bdad3c
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 4a2f95d..fa4d3b1 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -212,6 +212,15 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.TAB" />
</intent-filter>
+
+ <intent-filter>
+ <action android:name="android.intent.action.SEARCH" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+
+ <meta-data android:name="android.app.searchable"
+ android:resource="@xml/searchable"
+ />
</activity>
<activity android:name=".activities.ContactSelectionActivity"
@@ -291,16 +300,7 @@
<!-- The contacts search/filter UI -->
<activity-alias android:name="SearchResultsActivity"
- android:targetActivity=".activities.ContactSearchActivity"
- >
- <intent-filter>
- <action android:name="android.intent.action.SEARCH" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
-
- <meta-data android:name="android.app.searchable"
- android:resource="@xml/searchable"
- />
+ android:targetActivity=".activities.ContactBrowserActivity">
</activity-alias>
<!-- Used to set options -->
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index ab6576e..aa75414 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -172,6 +172,16 @@
mHasActionBar = getWindow().hasFeature(Window.FEATURE_ACTION_BAR);
mContactContentDisplayed = findViewById(R.id.detail_container) != null;
+ Uri contactUri = null;
+ if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT) {
+ contactUri = mRequest.getContactUri();
+ if (!mContactContentDisplayed) {
+ startActivity(new Intent(Intent.ACTION_VIEW, contactUri));
+ finish();
+ return;
+ }
+ }
+
if (mHasActionBar) {
mActionBarAdapter = new ActionBarAdapter(this);
mActionBarAdapter.onCreate(savedState, mRequest, getActionBar());
@@ -180,7 +190,10 @@
// TODO: request may ask for FREQUENT - set the filter accordingly
}
- configureListFragment();
+ configureListFragment(contactUri);
+ if (contactUri != null) {
+ setSelectedContactUri(contactUri);
+ }
if (mContactContentDisplayed) {
setupContactDetailFragment(mListFragment.getSelectedContactUri());
@@ -225,7 +238,7 @@
return TextUtils.isEmpty(uriString) ? null : Uri.parse(uriString);
}
- private void configureListFragment() {
+ private void configureListFragment(Uri selectedContactUri) {
boolean searchMode = mSearchMode;
if (mHasActionBar) {
searchMode = mActionBarAdapter.isSearchMode();
@@ -270,12 +283,18 @@
}
}
- if (mListFragment.getSelectedContactUri() == null) {
- Uri defaultUri = getDefaultSelectedContactUri();
- if (defaultUri != null) {
- mListFragment.setSelectedContactUri(defaultUri);
- mListFragment.requestSelectionOnScreen(false);
- }
+ Uri selectUri;
+ if (selectedContactUri != null) {
+ selectUri = selectedContactUri;
+ } else if (mListFragment.getSelectedContactUri() == null) {
+ selectUri = getDefaultSelectedContactUri();
+ } else {
+ selectUri = null;
+ }
+
+ if (selectUri != null) {
+ mListFragment.setSelectedContactUri(selectUri);
+ mListFragment.requestSelectionOnScreen(false);
}
if (replaceList) {
@@ -403,7 +422,7 @@
*/
@Override
public void onAction() {
- configureListFragment();
+ configureListFragment(null);
setupContactDetailFragment(mListFragment.getSelectedContactUri());
}
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index 0570b2c..79dc1b0 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -183,7 +183,8 @@
newIntent.setData(data);
request.setRedirectIntent(newIntent);
} else {
- request.setRedirectIntent(new Intent(Intent.ACTION_VIEW, data));
+ request.setActionCode(ContactsRequest.ACTION_VIEW_CONTACT);
+ request.setContactUri(data);
}
} else if (Intents.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED.equals(action)) {
request.setRedirectIntent(new Intent(Intent.ACTION_CALL_PRIVILEGED, intent.getData()));
diff --git a/src/com/android/contacts/list/ContactsRequest.java b/src/com/android/contacts/list/ContactsRequest.java
index 33f1685..e8ccb43 100644
--- a/src/com/android/contacts/list/ContactsRequest.java
+++ b/src/com/android/contacts/list/ContactsRequest.java
@@ -17,6 +17,7 @@
package com.android.contacts.list;
import android.content.Intent;
+import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
@@ -64,6 +65,9 @@
/** Show all phone numbers and create an SMS shortcut for the picked number */
public static final int ACTION_CREATE_SHORTCUT_SMS = 130;
+ /** Show all contacts and activate the specified one */
+ public static final int ACTION_VIEW_CONTACT = 140;
+
private boolean mValid = true;
private int mActionCode = ACTION_DEFAULT;
private Intent mRedirectIntent;
@@ -80,6 +84,7 @@
private String mGroupName;
private boolean mLegacyCompatibilityMode;
private boolean mDirectorySearchEnabled = true;
+ private Uri mContactUri;
/**
* Copies all fields.
@@ -96,6 +101,7 @@
mGroupName = request.mGroupName;
mLegacyCompatibilityMode = request.mLegacyCompatibilityMode;
mDirectorySearchEnabled = request.mDirectorySearchEnabled;
+ mContactUri = request.mContactUri;
}
public static Parcelable.Creator<ContactsRequest> CREATOR = new Creator<ContactsRequest>() {
@@ -105,10 +111,11 @@
}
public ContactsRequest createFromParcel(Parcel source) {
+ ClassLoader classLoader = this.getClass().getClassLoader();
ContactsRequest request = new ContactsRequest();
request.mValid = source.readInt() != 0;
request.mActionCode = source.readInt();
- request.mRedirectIntent = source.readParcelable(this.getClass().getClassLoader());
+ request.mRedirectIntent = source.readParcelable(classLoader);
request.mTitle = source.readCharSequence();
request.mSearchMode = source.readInt() != 0;
request.mQueryString = source.readString();
@@ -117,6 +124,7 @@
request.mGroupName = source.readString();
request.mLegacyCompatibilityMode = source.readInt() != 0;
request.mDirectorySearchEnabled = source.readInt() != 0;
+ request.mContactUri = source.readParcelable(classLoader);
return request;
}
};
@@ -133,6 +141,7 @@
dest.writeString(mGroupName);
dest.writeInt(mLegacyCompatibilityMode ? 1 : 0);
dest.writeInt(mDirectorySearchEnabled ? 1 : 0);
+ dest.writeParcelable(mContactUri, 0);
}
public int describeContents() {
@@ -230,4 +239,12 @@
public void setDirectorySearchEnabled(boolean flag) {
mDirectorySearchEnabled = flag;
}
+
+ public Uri getContactUri() {
+ return mContactUri;
+ }
+
+ public void setContactUri(Uri contactUri) {
+ this.mContactUri = contactUri;
+ }
}