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

Commit bbba99ec authored by avipul's avatar avipul
Browse files

Clean up usage of last used and times used

Bug:124239240
Test: Manual and updated unit tests
Change-Id: I716ec4fc8dff35be4b42a5d6bddfd5506842c4bf
parent 9f971965
Loading
Loading
Loading
Loading
+8 −16
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ import android.os.Handler;
import android.os.Message;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import androidx.core.content.ContextCompat;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
@@ -47,7 +46,7 @@ import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

import androidx.core.content.ContextCompat;
import com.android.contacts.ContactSaveService;
import com.android.contacts.ContactsUtils;
import com.android.contacts.GroupMetaDataLoader;
@@ -69,7 +68,6 @@ import com.android.contacts.model.account.AccountWithDataSet;
import com.android.contacts.util.ImplicitIntentsUtil;
import com.android.contactsbind.FeedbackHelper;
import com.google.common.primitives.Longs;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -316,7 +314,6 @@ public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupM
                ContactsContract.Data.CONTACT_ID,
                ContactsContract.CommonDataKinds.Email._ID,
                ContactsContract.Data.IS_SUPER_PRIMARY,
                ContactsContract.Data.TIMES_USED,
                ContactsContract.Data.DATA1
        };

@@ -324,15 +321,13 @@ public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupM
                ContactsContract.Data.CONTACT_ID,
                ContactsContract.CommonDataKinds.Phone._ID,
                ContactsContract.Data.IS_SUPER_PRIMARY,
                ContactsContract.Data.TIMES_USED,
                ContactsContract.Data.DATA1
        };

        public static final int CONTACT_ID = 0;
        public static final int ITEM_ID = 1;
        public static final int PRIMARY = 2;
        public static final int TIMES_USED = 3;
        public static final int DATA1 = 4;
        public static final int DATA1 = 3;
    }

    /**
@@ -341,14 +336,12 @@ public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupM
    private class ContactDataHelperClass {

        private List<String> items = new ArrayList<>();
        private String mostUsedItemId = null;
        private int mostUsedTimes;
        private String firstItemId = null;
        private String primaryItemId = null;

        public void addItem(String item, int timesUsed, boolean primaryFlag) {
            if (mostUsedItemId == null || timesUsed > mostUsedTimes) {
                mostUsedItemId = item;
                mostUsedTimes = timesUsed;
        public void addItem(String item, boolean primaryFlag) {
            if (firstItemId == null) {
                firstItemId = item;
            }
            if (primaryFlag) {
                primaryItemId = item;
@@ -363,7 +356,7 @@ public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupM
        public String getDefaultSelectionItemId() {
            return primaryItemId != null
                    ? primaryItemId
                    : mostUsedItemId;
                    : firstItemId;
        }
    }

@@ -397,7 +390,6 @@ public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupM
                final String contactId = cursor.getString(Query.CONTACT_ID);
                final String itemId = cursor.getString(Query.ITEM_ID);
                final boolean isPrimary = cursor.getInt(Query.PRIMARY) != 0;
                final int timesUsed = cursor.getInt(Query.TIMES_USED);
                final String data = cursor.getString(Query.DATA1);

                if (!TextUtils.isEmpty(data)) {
@@ -408,7 +400,7 @@ public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupM
                    } else {
                        contact = contactMap.get(contactId);
                    }
                    contact.addItem(itemId, timesUsed, isPrimary);
                    contact.addItem(itemId, isPrimary);
                    itemList.add(data);
                }
            }
+5 −8
Original line number Diff line number Diff line
@@ -30,11 +30,6 @@ import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.SearchSnippets;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.appcompat.widget.AppCompatCheckBox;
import androidx.appcompat.widget.AppCompatImageButton;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
@@ -50,7 +45,11 @@ import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.QuickContactBadge;
import android.widget.TextView;

import androidx.appcompat.widget.AppCompatCheckBox;
import androidx.appcompat.widget.AppCompatImageButton;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import com.android.contacts.ContactPresenceIconUtil;
import com.android.contacts.ContactStatusUtil;
import com.android.contacts.R;
@@ -60,9 +59,7 @@ import com.android.contacts.format.TextHighlighter;
import com.android.contacts.util.ContactDisplayUtils;
import com.android.contacts.util.SearchUtil;
import com.android.contacts.util.ViewUtil;

import com.google.common.collect.Lists;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
+1 −30
Original line number Diff line number Diff line
@@ -30,11 +30,9 @@ import android.provider.ContactsContract.Directory;
import android.provider.ContactsContract.SearchSnippets;
import android.text.TextUtils;
import android.view.View;

import com.android.contacts.compat.ContactsCompat;
import com.android.contacts.model.account.AccountWithDataSet;
import com.android.contacts.preference.ContactsPreferences;

import java.util.ArrayList;
import java.util.List;

@@ -46,33 +44,6 @@ public class DefaultContactListAdapter extends ContactListAdapter {
    public static final char SNIPPET_START_MATCH = '[';
    public static final char SNIPPET_END_MATCH = ']';

    // Contacts contacted within the last 3 days (in seconds)
    private static final long LAST_TIME_USED_3_DAYS_SEC = 3L * 24 * 60 * 60;

    // Contacts contacted within the last 7 days (in seconds)
    private static final long LAST_TIME_USED_7_DAYS_SEC = 7L * 24 * 60 * 60;

    // Contacts contacted within the last 14 days (in seconds)
    private static final long LAST_TIME_USED_14_DAYS_SEC = 14L * 24 * 60 * 60;

    // Contacts contacted within the last 30 days (in seconds)
    private static final long LAST_TIME_USED_30_DAYS_SEC = 30L * 24 * 60 * 60;

    private static final String TIME_SINCE_LAST_USED_SEC =
            "(strftime('%s', 'now') - " + Contacts.LAST_TIME_CONTACTED + "/1000)";

    private static final String STREQUENT_SORT =
            "(CASE WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_3_DAYS_SEC +
                    " THEN 0 " +
                    " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_7_DAYS_SEC +
                    " THEN 1 " +
                    " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_14_DAYS_SEC +
                    " THEN 2 " +
                    " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_30_DAYS_SEC +
                    " THEN 3 " +
                    " ELSE 4 END), " +
                    Contacts.TIMES_CONTACTED + " DESC, " +
                    Contacts.STARRED + " DESC";

    public DefaultContactListAdapter(Context context) {
        super(context);
@@ -113,7 +84,7 @@ public class DefaultContactListAdapter extends ContactListAdapter {
                appendSearchParameters(builder, query, directoryId);
                loader.setUri(builder.build());
                loader.setProjection(getProjection(true));
                sortOrder = STREQUENT_SORT;
                sortOrder = Contacts.SORT_KEY_PRIMARY;
            }
        } else {
            final ContactListFilter filter = getFilter();
+4 −18
Original line number Diff line number Diff line
@@ -37,13 +37,11 @@ import android.provider.ContactsContract.Groups;
import android.provider.ContactsContract.RawContacts;
import android.text.TextUtils;
import android.util.Log;

import com.android.contacts.GeoUtil;
import com.android.contacts.GroupMetaDataLoader;
import com.android.contacts.compat.CompatUtils;
import com.android.contacts.group.GroupMetaData;
import com.android.contacts.model.account.AccountType;
import com.android.contacts.model.account.AccountTypeWithDataSet;
import com.android.contacts.model.dataitem.DataItem;
import com.android.contacts.model.dataitem.PhoneDataItem;
import com.android.contacts.model.dataitem.PhotoDataItem;
@@ -51,17 +49,10 @@ import com.android.contacts.util.Constants;
import com.android.contacts.util.ContactLoaderUtils;
import com.android.contacts.util.DataStatus;
import com.android.contacts.util.UriUtils;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -70,9 +61,11 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * Loads a single Contact and all it constituent RawContacts.
@@ -187,9 +180,6 @@ public class ContactLoader extends AsyncTaskLoader<Contact> {
                Contacts.SEND_TO_VOICEMAIL,
                Contacts.CUSTOM_RINGTONE,
                Contacts.IS_USER_PROFILE,

                Data.TIMES_USED,
                Data.LAST_TIME_USED
        };

        static final String[] COLUMNS;
@@ -270,9 +260,7 @@ public class ContactLoader extends AsyncTaskLoader<Contact> {
        public static final int CUSTOM_RINGTONE = 60;
        public static final int IS_USER_PROFILE = 61;

        public static final int TIMES_USED = 62;
        public static final int LAST_TIME_USED = 63;
        public static final int CARRIER_PRESENCE = 64;
        public static final int CARRIER_PRESENCE = 62;
    }

    /**
@@ -681,8 +669,6 @@ public class ContactLoader extends AsyncTaskLoader<Contact> {
        cursorColumnToContentValues(cursor, cv, ContactQuery.MIMETYPE);
        cursorColumnToContentValues(cursor, cv, ContactQuery.GROUP_SOURCE_ID);
        cursorColumnToContentValues(cursor, cv, ContactQuery.CHAT_CAPABILITY);
        cursorColumnToContentValues(cursor, cv, ContactQuery.TIMES_USED);
        cursorColumnToContentValues(cursor, cv, ContactQuery.LAST_TIME_USED);
        if (CompatUtils.isMarshmallowCompatible()) {
            cursorColumnToContentValues(cursor, cv, ContactQuery.CARRIER_PRESENCE);
        }
+0 −19
Original line number Diff line number Diff line
@@ -34,8 +34,6 @@ import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.CommonDataKinds.Website;
import android.provider.ContactsContract.Contacts.Data;
import android.provider.ContactsContract.Contacts.Entity;

import com.android.contacts.Collapser;
import com.android.contacts.MoreContactUtils;
import com.android.contacts.model.RawContactModifier;
@@ -189,14 +187,6 @@ public class DataItem implements Collapser.Collapsible<DataItem> {
        return mKind;
    }

    public Integer getTimesUsed() {
        return mContentValues.getAsInteger(Entity.TIMES_USED);
    }

    public Long getLastTimeUsed() {
        return mContentValues.getAsLong(Entity.LAST_TIME_USED);
    }

    @Override
    public void collapseWith(DataItem that) {
        DataKind thisKind = getDataKind();
@@ -226,15 +216,6 @@ public class DataItem implements Collapser.Collapsible<DataItem> {
        if (isPrimary() || that.isPrimary()) {
            mContentValues.put(Data.IS_PRIMARY, 1);
        }

        // Add up the times used
        mContentValues.put(Entity.TIMES_USED, (getTimesUsed() == null ? 0 : getTimesUsed()) +
                (that.getTimesUsed() == null ? 0 : that.getTimesUsed()));

        // Use the most recent time
        mContentValues.put(Entity.LAST_TIME_USED,
                Math.max(getLastTimeUsed() == null ? 0 : getLastTimeUsed(),
                        that.getLastTimeUsed() == null ? 0 : that.getLastTimeUsed()));
    }

    @Override
Loading