diff options
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.java | 87 |
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) { |