Launch quick contacts after selecting frequent contact on tablet
- Previously clicking on a frequently contacted person
would request the contact detail fragment to load that contact,
but the app wouldn't switch tabs or update the selected contact
in the contact list.
- Pass the Rect of the target view to the listener to launch quick
contacts
Bug: 5236515
Change-Id: Ic2d888ed02f8fd2b5a47d49f99cc96755bf55d37
diff --git a/src/com/android/contacts/ContactsUtils.java b/src/com/android/contacts/ContactsUtils.java
index 64dfaef..cb19713 100644
--- a/src/com/android/contacts/ContactsUtils.java
+++ b/src/com/android/contacts/ContactsUtils.java
@@ -24,6 +24,7 @@
import android.content.Context;
import android.content.Intent;
+import android.graphics.Rect;
import android.location.CountryDetector;
import android.net.Uri;
import android.provider.ContactsContract;
@@ -221,4 +222,22 @@
textView.setText(context.getString(textResourceId));
return view;
}
+
+ /**
+ * Returns the {@link Rect} with left, top, right, and bottom coordinates
+ * that are equivalent to the given {@link View}'s bounds. This is equivalent to how the
+ * target {@link Rect} is calculated in {@link QuickContact#showQuickContact}.
+ */
+ public static Rect getTargetRectFromView(Context context, View view) {
+ final float appScale = context.getResources().getCompatibilityInfo().applicationScale;
+ final int[] pos = new int[2];
+ view.getLocationOnScreen(pos);
+
+ final Rect rect = new Rect();
+ rect.left = (int) (pos[0] * appScale + 0.5f);
+ rect.top = (int) (pos[1] * appScale + 0.5f);
+ rect.right = (int) ((pos[0] + view.getWidth()) * appScale + 0.5f);
+ rect.bottom = (int) ((pos[1] + view.getHeight()) * appScale + 0.5f);
+ return rect;
+ }
}
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index b4ad78a..8af5ea8 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -68,6 +68,7 @@
import android.content.ActivityNotFoundException;
import android.content.ContentValues;
import android.content.Intent;
+import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -77,6 +78,7 @@
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Intents;
import android.provider.ContactsContract.ProviderStatus;
+import android.provider.ContactsContract.QuickContact;
import android.provider.Settings;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;
@@ -1142,9 +1144,9 @@
private final class StrequentContactListFragmentListener
implements ContactTileListFragment.Listener {
@Override
- public void onContactSelected(Uri contactUri) {
+ public void onContactSelected(Uri contactUri, Rect targetRect) {
if (PhoneCapabilityTester.isUsingTwoPanes(PeopleActivity.this)) {
- setupContactDetailFragment(contactUri);
+ QuickContact.showQuickContact(PeopleActivity.this, targetRect, contactUri, 0, null);
} else {
startActivity(new Intent(Intent.ACTION_VIEW, contactUri));
}
diff --git a/src/com/android/contacts/group/GroupDetailFragment.java b/src/com/android/contacts/group/GroupDetailFragment.java
index b3472ab..c856594 100644
--- a/src/com/android/contacts/group/GroupDetailFragment.java
+++ b/src/com/android/contacts/group/GroupDetailFragment.java
@@ -37,6 +37,7 @@
import android.content.Loader;
import android.content.res.Resources;
import android.database.Cursor;
+import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.Groups;
@@ -208,7 +209,7 @@
new ContactTileAdapter.Listener() {
@Override
- public void onContactSelected(Uri contactUri) {
+ public void onContactSelected(Uri contactUri, Rect targetRect) {
mListener.onContactSelected(contactUri);
}
};
diff --git a/src/com/android/contacts/list/ContactTileAdapter.java b/src/com/android/contacts/list/ContactTileAdapter.java
index 48bc5c3..3eb7232 100644
--- a/src/com/android/contacts/list/ContactTileAdapter.java
+++ b/src/com/android/contacts/list/ContactTileAdapter.java
@@ -27,6 +27,7 @@
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
+import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.provider.ContactsContract.CommonDataKinds.Phone;
@@ -477,7 +478,8 @@
@Override
public void onClick(ContactTileView contactTileView) {
if (mListener != null) {
- mListener.onContactSelected(contactTileView.getLookupUri());
+ mListener.onContactSelected(contactTileView.getLookupUri(),
+ ContactsUtils.getTargetRectFromView(mContext, contactTileView));
}
}
};
@@ -659,6 +661,6 @@
}
public interface Listener {
- public void onContactSelected(Uri contactUri);
+ public void onContactSelected(Uri contactUri, Rect targetRect);
}
}
diff --git a/src/com/android/contacts/list/ContactTileListFragment.java b/src/com/android/contacts/list/ContactTileListFragment.java
index f28c2b5..d4d961b 100644
--- a/src/com/android/contacts/list/ContactTileListFragment.java
+++ b/src/com/android/contacts/list/ContactTileListFragment.java
@@ -28,6 +28,7 @@
import android.content.Loader;
import android.content.res.Resources;
import android.database.Cursor;
+import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -48,7 +49,7 @@
private static final String TAG = ContactTileListFragment.class.getSimpleName();
public interface Listener {
- public void onContactSelected(Uri contactUri);
+ public void onContactSelected(Uri contactUri, Rect targetRect);
}
private static int LOADER_CONTACTS = 1;
@@ -166,9 +167,9 @@
private ContactTileAdapter.Listener mAdapterListener =
new ContactTileAdapter.Listener() {
@Override
- public void onContactSelected(Uri contactUri) {
+ public void onContactSelected(Uri contactUri, Rect targetRect) {
if (mListener != null) {
- mListener.onContactSelected(contactUri);
+ mListener.onContactSelected(contactUri, targetRect);
}
}
};
diff --git a/src/com/android/contacts/list/PhoneFavoriteFragment.java b/src/com/android/contacts/list/PhoneFavoriteFragment.java
index 6876789..b6e8dd6 100644
--- a/src/com/android/contacts/list/PhoneFavoriteFragment.java
+++ b/src/com/android/contacts/list/PhoneFavoriteFragment.java
@@ -29,6 +29,7 @@
import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
+import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.Directory;
@@ -131,7 +132,7 @@
private class ContactTileAdapterListener implements ContactTileAdapter.Listener {
@Override
- public void onContactSelected(Uri contactUri) {
+ public void onContactSelected(Uri contactUri, Rect targetRect) {
if (mListener != null) {
mListener.onContactSelected(contactUri);
}