summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2021-02-08 19:42:26 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-02-08 19:42:26 +0000
commit46a22c8af1cb8d05952abfe3fd4b3368c14e7194 (patch)
tree664169d0d89d743094cd3cd95f33136c6357aecd /src
parente60e6472e5e8809a3de16af87e8d0540fae23e57 (diff)
parent7342d6d5fa6b29c25b12035d3d627e7e6a15d047 (diff)
downloadContacts-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.java5
-rw-r--r--src/com/android/contacts/database/SimContactDaoImpl.java56
-rw-r--r--src/com/android/contacts/model/SimCard.java12
-rw-r--r--src/com/android/contacts/model/SimContact.java32
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);
}
};
}