diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2021-02-08 19:42:26 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-02-08 19:42:26 +0000 |
commit | 46a22c8af1cb8d05952abfe3fd4b3368c14e7194 (patch) | |
tree | 664169d0d89d743094cd3cd95f33136c6357aecd /src | |
parent | e60e6472e5e8809a3de16af87e8d0540fae23e57 (diff) | |
parent | 7342d6d5fa6b29c25b12035d3d627e7e6a15d047 (diff) | |
download | Contacts-46a22c8af1cb8d05952abfe3fd4b3368c14e7194.tar.gz |
Merge "Use SimPhonebookContract for Contacts app SIM import" am: fefa2ff7d9 am: 7342d6d5fa
Original change: https://android-review.googlesource.com/c/platform/packages/apps/Contacts/+/1580476
MUST ONLY BE SUBMITTED BY AUTOMERGER
Change-Id: I4da61d6d4551d7f27b30fae5b88faa047fc3f648
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/contacts/SimImportFragment.java | 5 | ||||
-rw-r--r-- | src/com/android/contacts/database/SimContactDaoImpl.java | 56 | ||||
-rw-r--r-- | src/com/android/contacts/model/SimCard.java | 12 | ||||
-rw-r--r-- | src/com/android/contacts/model/SimContact.java | 32 |
4 files changed, 45 insertions, 60 deletions
diff --git a/src/com/android/contacts/SimImportFragment.java b/src/com/android/contacts/SimImportFragment.java index cee1b1a9a..1d16df0b3 100644 --- a/src/com/android/contacts/SimImportFragment.java +++ b/src/com/android/contacts/SimImportFragment.java @@ -18,7 +18,6 @@ package com.android.contacts; import android.app.Activity; import android.app.Fragment; import android.app.LoaderManager; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.IntentFilter; import android.content.Loader; @@ -26,7 +25,7 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.google.android.material.snackbar.Snackbar; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; + import androidx.collection.ArrayMap; import androidx.core.view.ViewCompat; import androidx.core.widget.ContentLoadingProgressBar; @@ -372,7 +371,7 @@ public class SimImportFragment extends Fragment if (position < 0 || position >= getCount()) { return View.NO_ID; } - return getItem(position).getId(); + return getItem(position).getRecordNumber(); } @Override diff --git a/src/com/android/contacts/database/SimContactDaoImpl.java b/src/com/android/contacts/database/SimContactDaoImpl.java index 5ba6bd571..54106f041 100644 --- a/src/com/android/contacts/database/SimContactDaoImpl.java +++ b/src/com/android/contacts/database/SimContactDaoImpl.java @@ -26,20 +26,20 @@ import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.os.RemoteException; -import android.provider.BaseColumns; import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.CommonDataKinds.StructuredName; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.RawContacts; -import androidx.annotation.VisibleForTesting; -import androidx.collection.ArrayMap; +import android.provider.SimPhonebookContract; +import android.provider.SimPhonebookContract.SimRecords; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; -import android.text.TextUtils; import android.util.SparseArray; +import androidx.collection.ArrayMap; + import com.android.contacts.R; import com.android.contacts.compat.CompatUtils; import com.android.contacts.model.SimCard; @@ -47,6 +47,7 @@ import com.android.contacts.model.SimContact; import com.android.contacts.model.account.AccountWithDataSet; import com.android.contacts.util.PermissionsUtil; import com.android.contacts.util.SharedPreferenceUtil; + import com.google.common.base.Joiner; import java.util.ArrayList; @@ -75,14 +76,6 @@ public class SimContactDaoImpl extends SimContactDao { // query parameter limit. static final int QUERY_MAX_BATCH_SIZE = 100; - @VisibleForTesting - public static final Uri ICC_CONTENT_URI = Uri.parse("content://icc/adn"); - - public static String _ID = BaseColumns._ID; - public static String NAME = "name"; - public static String NUMBER = "number"; - public static String EMAILS = "emails"; - private final Context mContext; private final ContentResolver mResolver; private final TelephonyManager mTelephonyManager; @@ -128,18 +121,14 @@ public class SimContactDaoImpl extends SimContactDao { if (sim.hasValidSubscriptionId()) { return loadSimContacts(sim.getSubscriptionId()); } - return loadSimContacts(); + // Return an empty list. + return new ArrayList<>(0); } public ArrayList<SimContact> loadSimContacts(int subscriptionId) { - return loadFrom(ICC_CONTENT_URI.buildUpon() - .appendPath("subId") - .appendPath(String.valueOf(subscriptionId)) - .build()); - } - - public ArrayList<SimContact> loadSimContacts() { - return loadFrom(ICC_CONTENT_URI); + return loadFrom( + SimRecords.getContentUri( + subscriptionId, SimPhonebookContract.ElementaryFiles.EF_ADN)); } @Override @@ -273,7 +262,12 @@ public class SimContactDaoImpl extends SimContactDao { private static final Object SIM_READ_LOCK = new Object(); private ArrayList<SimContact> loadFrom(Uri uri) { synchronized (SIM_READ_LOCK) { - final Cursor cursor = mResolver.query(uri, null, null, null, null); + final Cursor cursor = mResolver.query(uri, + new String[]{ + SimRecords.RECORD_NUMBER, + SimRecords.NAME, + SimRecords.PHONE_NUMBER + }, null, null); if (cursor == null) { // Assume null means there are no SIM contacts. return new ArrayList<>(0); @@ -288,22 +282,20 @@ public class SimContactDaoImpl extends SimContactDao { } private ArrayList<SimContact> loadFromCursor(Cursor cursor) { - final int colId = cursor.getColumnIndex(_ID); - final int colName = cursor.getColumnIndex(NAME); - final int colNumber = cursor.getColumnIndex(NUMBER); - final int colEmails = cursor.getColumnIndex(EMAILS); + final int colRecordNumber = cursor.getColumnIndex(SimRecords.RECORD_NUMBER); + final int colName = cursor.getColumnIndex(SimRecords.NAME); + final int colNumber = cursor.getColumnIndex(SimRecords.PHONE_NUMBER); final ArrayList<SimContact> result = new ArrayList<>(); while (cursor.moveToNext()) { - final long id = cursor.getLong(colId); + final int recordNumber = cursor.getInt(colRecordNumber); final String name = cursor.getString(colName); final String number = cursor.getString(colNumber); - final String emails = cursor.getString(colEmails); - final SimContact contact = new SimContact(id, name, number, parseEmails(emails)); + final SimContact contact = new SimContact(recordNumber, name, number, null); // Only include contact if it has some useful data - if (contact.hasName() || contact.hasPhone() || contact.hasEmails()) { + if (contact.hasName() || contact.hasPhone()) { result.add(contact); } } @@ -392,10 +384,6 @@ public class SimContactDaoImpl extends SimContactDao { return ops; } - private String[] parseEmails(String emails) { - return !TextUtils.isEmpty(emails) ? emails.split(",") : null; - } - private boolean hasTelephony() { return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY); } diff --git a/src/com/android/contacts/model/SimCard.java b/src/com/android/contacts/model/SimCard.java index ea743796a..969d96d10 100644 --- a/src/com/android/contacts/model/SimCard.java +++ b/src/com/android/contacts/model/SimCard.java @@ -19,6 +19,7 @@ import android.os.Build; import androidx.annotation.RequiresApi; import android.telephony.PhoneNumberUtils; import android.telephony.SubscriptionInfo; +import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.util.Log; @@ -78,11 +79,6 @@ public class SimCard { mCountryCode = countryCode != null ? countryCode.toUpperCase(Locale.US) : null; } - public SimCard(String simId, CharSequence carrierName, - CharSequence displayName, String phoneNumber, String countryCode) { - this(simId, NO_SUBSCRIPTION_ID, carrierName, displayName, phoneNumber, countryCode); - } - public String getSimId() { return mSimId; } @@ -245,12 +241,14 @@ public class SimCard { public static SimCard create(TelephonyManager telephony, String displayLabel) { if (telephony.getSimState() == TelephonyManager.SIM_STATE_READY) { - return new SimCard(telephony.getSimSerialNumber(), + return new SimCard(telephony.getSimSerialNumber(), telephony.getSubscriptionId(), telephony.getSimOperatorName(), displayLabel, telephony.getLine1Number(), telephony.getSimCountryIso()); } else { // This should never happen but in case it does just fallback to an "empty" instance - return new SimCard(/* SIM id */ "", /* operator name */ null, displayLabel, + return new SimCard(/* SIM id */ "", + /* subscriptionId */ SubscriptionManager.INVALID_SUBSCRIPTION_ID, + /* operator name */ null, displayLabel, /* phone number */ "", /* Country code */ null); } } diff --git a/src/com/android/contacts/model/SimContact.java b/src/com/android/contacts/model/SimContact.java index 7babe27ca..820e3464a 100644 --- a/src/com/android/contacts/model/SimContact.java +++ b/src/com/android/contacts/model/SimContact.java @@ -43,28 +43,28 @@ import java.util.Objects; * Holds data for contacts loaded from the SIM card. */ public class SimContact implements Parcelable { - private final long mId; + private final int mRecordNumber; private final String mName; private final String mPhone; private final String[] mEmails; - public SimContact(long id, String name, String phone) { - this(id, name, phone, null); + public SimContact(int recordNumber, String name, String phone) { + this(recordNumber, name, phone, null); } - public SimContact(long id, String name, String phone, String[] emails) { - mId = id; + public SimContact(int recordNumber, String name, String phone, String[] emails) { + mRecordNumber = recordNumber; mName = name; mPhone = phone == null ? "" : phone.trim(); mEmails = emails; } public SimContact(SimContact other) { - this(other.mId, other.mName, other.mPhone, other.mEmails); + this(other.mRecordNumber, other.mName, other.mPhone, other.mEmails); } - public long getId() { - return mId; + public int getRecordNumber() { + return mRecordNumber; } public String getName() { @@ -117,7 +117,7 @@ public class SimContact implements Parcelable { } public void appendAsContactRow(MatrixCursor cursor) { - cursor.newRow().add(ContactsContract.Contacts._ID, mId) + cursor.newRow().add(ContactsContract.Contacts._ID, mRecordNumber) .add(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY, mName) .add(ContactsContract.Contacts.LOOKUP_KEY, getLookupKey()); } @@ -152,7 +152,7 @@ public class SimContact implements Parcelable { @Override public String toString() { return "SimContact{" + - "mId=" + mId + + "mId=" + mRecordNumber + ", mName='" + mName + '\'' + ", mPhone='" + mPhone + '\'' + ", mEmails=" + Arrays.toString(mEmails) + @@ -166,13 +166,13 @@ public class SimContact implements Parcelable { final SimContact that = (SimContact) o; - return mId == that.mId && Objects.equals(mName, that.mName) && + return mRecordNumber == that.mRecordNumber && Objects.equals(mName, that.mName) && Objects.equals(mPhone, that.mPhone) && Arrays.equals(mEmails, that.mEmails); } @Override public int hashCode() { - int result = (int) (mId ^ (mId >>> 32)); + int result = (int) (mRecordNumber ^ (mRecordNumber >>> 32)); result = 31 * result + (mName != null ? mName.hashCode() : 0); result = 31 * result + (mPhone != null ? mPhone.hashCode() : 0); result = 31 * result + Arrays.hashCode(mEmails); @@ -186,7 +186,7 @@ public class SimContact implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeLong(mId); + dest.writeInt(mRecordNumber); dest.writeString(mName); dest.writeString(mPhone); dest.writeStringArray(mEmails); @@ -195,11 +195,11 @@ public class SimContact implements Parcelable { public static final Creator<SimContact> CREATOR = new Creator<SimContact>() { @Override public SimContact createFromParcel(Parcel source) { - final long id = source.readLong(); + final int recordNumber = source.readInt(); final String name = source.readString(); final String phone = source.readString(); final String[] emails = source.createStringArray(); - return new SimContact(id, name, phone, emails); + return new SimContact(recordNumber, name, phone, emails); } @Override @@ -253,7 +253,7 @@ public class SimContact implements Parcelable { @Override public int compare(SimContact lhs, SimContact rhs) { // We assume ids are unique. - return Long.compare(lhs.mId, rhs.mId); + return Long.compare(lhs.mRecordNumber, rhs.mRecordNumber); } }; } |