Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a700cf7 authored by Katherine Kuan's avatar Katherine Kuan
Browse files

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
parent b836c6ad
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.i18n.phonenumbers.PhoneNumberUtil;

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 @@ public class ContactsUtils {
        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;
    }
}
+4 −2
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ import android.app.FragmentTransaction;
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;
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 @@ public class PeopleActivity extends ContactsActivity
    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));
            }
+2 −1
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.content.Intent;
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 @@ public class GroupDetailFragment extends Fragment implements OnScrollListener {
            new ContactTileAdapter.Listener() {

        @Override
        public void onContactSelected(Uri contactUri) {
        public void onContactSelected(Uri contactUri, Rect targetRect) {
            mListener.onContactSelected(contactUri);
        }
    };
+4 −2
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.content.ContentUris;
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 @@ public class ContactTileAdapter extends BaseAdapter {
        @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 class ContactTileAdapter extends BaseAdapter {
    }

    public interface Listener {
        public void onContactSelected(Uri contactUri);
        public void onContactSelected(Uri contactUri, Rect targetRect);
    }
}
+4 −3
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.content.CursorLoader;
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 @@ public class ContactTileListFragment extends Fragment {
    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 @@ public class ContactTileListFragment extends Fragment {
    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);
            }
        }
    };
Loading