Expose telecom API for retrieving photo uri
This API is queried when the async contact query for telecom
is performed, however, it is not currently exposed to users.
However, dialer apps sometimes need this information so they
resort to doing the exact same query that telecom does on their
own, adding significant latency to their incoming/outgoing call
latencies.
Bug: 240341306
Test: Manual, verified the data is sent with logs.
Change-Id: I029077ac587fad9651efa0c786ee0119ea500424
diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java
index 5cef2cb..bbdc890 100644
--- a/telecomm/java/android/telecom/Call.java
+++ b/telecomm/java/android/telecom/Call.java
@@ -738,6 +738,7 @@
private final String mContactDisplayName;
private final @CallDirection int mCallDirection;
private final @Connection.VerificationStatus int mCallerNumberVerificationStatus;
+ private final Uri mContactPhotoUri;
/**
* Whether the supplied capabilities supports the specified capability.
@@ -945,6 +946,17 @@
}
/**
+ * @return The contact photo URI which corresponds to
+ * {@link android.provider.ContactsContract.PhoneLookup#PHOTO_URI}, or {@code null} if the
+ * lookup is not yet complete, if there's no contacts entry for the caller,
+ * or if the {@link InCallService} does not hold the
+ * {@link android.Manifest.permission#READ_CONTACTS} permission.
+ */
+ public @Nullable Uri getContactPhotoUri() {
+ return mContactPhotoUri;
+ }
+
+ /**
* The display name for the caller.
* <p>
* This is the name as reported by the {@link ConnectionService} associated with this call.
@@ -1143,7 +1155,8 @@
Objects.equals(mContactDisplayName, d.mContactDisplayName) &&
Objects.equals(mCallDirection, d.mCallDirection) &&
Objects.equals(mCallerNumberVerificationStatus,
- d.mCallerNumberVerificationStatus);
+ d.mCallerNumberVerificationStatus) &&
+ Objects.equals(mContactPhotoUri, d.mContactPhotoUri);
}
return false;
}
@@ -1168,7 +1181,8 @@
mCreationTimeMillis,
mContactDisplayName,
mCallDirection,
- mCallerNumberVerificationStatus);
+ mCallerNumberVerificationStatus,
+ mContactPhotoUri);
}
/** {@hide} */
@@ -1192,7 +1206,8 @@
long creationTimeMillis,
String contactDisplayName,
int callDirection,
- int callerNumberVerificationStatus) {
+ int callerNumberVerificationStatus,
+ Uri contactPhotoUri) {
mState = state;
mTelecomCallId = telecomCallId;
mHandle = handle;
@@ -1213,6 +1228,7 @@
mContactDisplayName = contactDisplayName;
mCallDirection = callDirection;
mCallerNumberVerificationStatus = callerNumberVerificationStatus;
+ mContactPhotoUri = contactPhotoUri;
}
/** {@hide} */
@@ -1237,7 +1253,9 @@
parcelableCall.getCreationTimeMillis(),
parcelableCall.getContactDisplayName(),
parcelableCall.getCallDirection(),
- parcelableCall.getCallerNumberVerificationStatus());
+ parcelableCall.getCallerNumberVerificationStatus(),
+ parcelableCall.getContactPhotoUri()
+ );
}
@Override
@@ -2644,7 +2662,8 @@
mDetails.getCreationTimeMillis(),
mDetails.getContactDisplayName(),
mDetails.getCallDirection(),
- mDetails.getCallerNumberVerificationStatus()
+ mDetails.getCallerNumberVerificationStatus(),
+ mDetails.getContactPhotoUri()
);
fireDetailsChanged(mDetails);
}