aboutsummaryrefslogtreecommitdiff
path: root/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java')
-rw-r--r--src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java b/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java
index d3e8063e..7563f641 100644
--- a/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java
+++ b/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java
@@ -56,6 +56,7 @@ import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
+import java.util.Optional;
import java.util.function.Predicate;
/**
@@ -166,6 +167,29 @@ public class EabControllerImpl implements EabController {
}
/**
+ * Retrieve the contacts' capabilities from the EAB database including expired capabilities.
+ */
+ @Override
+ public @NonNull List<EabCapabilityResult> getCapabilitiesIncludingExpired(
+ @NonNull List<Uri> uris) {
+ Objects.requireNonNull(uris);
+ if (mIsSetDestroyedFlag) {
+ Log.d(TAG, "EabController destroyed.");
+ return generateDestroyedResult(uris);
+ }
+
+ Log.d(TAG, "getCapabilitiesIncludingExpired uri size=" + uris.size());
+ List<EabCapabilityResult> capabilityResultList = new ArrayList();
+
+ for (Uri uri : uris) {
+ EabCapabilityResult result = generateEabResultIncludingExpired(uri,
+ this::isCapabilityExpired);
+ capabilityResultList.add(result);
+ }
+ return capabilityResultList;
+ }
+
+ /**
* Retrieve the contact's capabilities from the availability cache.
*/
@Override
@@ -182,6 +206,23 @@ public class EabControllerImpl implements EabController {
}
/**
+ * Retrieve the contact's capabilities from the availability cache including expired
+ * capabilities.
+ */
+ @Override
+ public @NonNull EabCapabilityResult getAvailabilityIncludingExpired(@NonNull Uri contactUri) {
+ Objects.requireNonNull(contactUri);
+ if (mIsSetDestroyedFlag) {
+ Log.d(TAG, "EabController destroyed.");
+ return new EabCapabilityResult(
+ contactUri,
+ EabCapabilityResult.EAB_CONTROLLER_DESTROYED_FAILURE,
+ null);
+ }
+ return generateEabResultIncludingExpired(contactUri, this::isAvailabilityExpired);
+ }
+
+ /**
* Update the availability catch and save the capabilities to the EAB database.
*/
@Override
@@ -299,6 +340,52 @@ public class EabControllerImpl implements EabController {
return result;
}
+ private EabCapabilityResult generateEabResultIncludingExpired(Uri contactUri,
+ Predicate<Cursor> isExpiredMethod) {
+ RcsUceCapabilityBuilderWrapper builder = null;
+ EabCapabilityResult result;
+ Optional<Boolean> isExpired = Optional.empty();
+
+ // query EAB provider
+ Uri queryUri = Uri.withAppendedPath(
+ Uri.withAppendedPath(EabProvider.ALL_DATA_URI, String.valueOf(mSubId)),
+ getNumberFromUri(mContext, contactUri));
+ Cursor cursor = mContext.getContentResolver().query(queryUri, null, null, null, null);
+
+ if (cursor != null && cursor.getCount() != 0) {
+ while (cursor.moveToNext()) {
+ // Record whether it has expired.
+ if (!isExpired.isPresent()) {
+ isExpired = Optional.of(isExpiredMethod.test(cursor));
+ }
+ if (builder == null) {
+ builder = createNewBuilder(contactUri, cursor);
+ } else {
+ updateCapability(contactUri, cursor, builder);
+ }
+ }
+ cursor.close();
+
+ // Determine the query result
+ int eabResult = EabCapabilityResult.EAB_QUERY_SUCCESSFUL;
+ if (isExpired.orElse(false)) {
+ eabResult = EabCapabilityResult.EAB_CONTACT_EXPIRED_FAILURE;
+ }
+
+ if (builder.getMechanism() == CAPABILITY_MECHANISM_PRESENCE) {
+ PresenceBuilder presenceBuilder = builder.getPresenceBuilder();
+ result = new EabCapabilityResult(contactUri, eabResult, presenceBuilder.build());
+ } else {
+ OptionsBuilder optionsBuilder = builder.getOptionsBuilder();
+ result = new EabCapabilityResult(contactUri, eabResult, optionsBuilder.build());
+ }
+ } else {
+ result = new EabCapabilityResult(contactUri,
+ EabCapabilityResult.EAB_CONTACT_NOT_FOUND_FAILURE, null);
+ }
+ return result;
+ }
+
private void updateCapability(Uri contactUri, Cursor cursor,
RcsUceCapabilityBuilderWrapper builderWrapper) {
if (builderWrapper.getMechanism() == CAPABILITY_MECHANISM_PRESENCE) {