diff options
Diffstat (limited to 'src/java/com/android/ims/rcs/uce/request/CapabilityRequestResponse.java')
-rw-r--r-- | src/java/com/android/ims/rcs/uce/request/CapabilityRequestResponse.java | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/java/com/android/ims/rcs/uce/request/CapabilityRequestResponse.java b/src/java/com/android/ims/rcs/uce/request/CapabilityRequestResponse.java index 00b11278..817db461 100644 --- a/src/java/com/android/ims/rcs/uce/request/CapabilityRequestResponse.java +++ b/src/java/com/android/ims/rcs/uce/request/CapabilityRequestResponse.java @@ -16,20 +16,25 @@ package com.android.ims.rcs.uce.request; +import android.net.Uri; import android.telephony.ims.RcsContactTerminatedReason; import android.telephony.ims.RcsContactUceCapability; import android.telephony.ims.RcsUceAdapter; import android.telephony.ims.RcsUceAdapter.ErrorCode; import android.telephony.ims.stub.RcsCapabilityExchangeImplBase; import android.telephony.ims.stub.RcsCapabilityExchangeImplBase.CommandCode; +import android.util.Log; import com.android.ims.rcs.uce.presence.pidfparser.PidfParserUtils; import com.android.ims.rcs.uce.util.NetworkSipCode; +import com.android.ims.rcs.uce.util.UceUtils; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -39,6 +44,9 @@ import java.util.stream.Collectors; * The container of the result of the capabilities request. */ public class CapabilityRequestResponse { + + private static final String LOG_TAG = UceUtils.getLogPrefix() + "CapabilityRequestResp"; + // The error code when the request encounters internal errors. private @ErrorCode Optional<Integer> mRequestInternalError; @@ -72,6 +80,9 @@ public class CapabilityRequestResponse { // The list of the remote contact's capability. private Set<String> mRemoteCaps; + // The collection to record whether the request contacts have received the capabilities updated. + private Map<Uri, Boolean> mContactCapsReceived; + public CapabilityRequestResponse() { mRequestInternalError = Optional.empty(); mCommandError = Optional.empty(); @@ -85,6 +96,22 @@ public class CapabilityRequestResponse { mCachedCapabilityList = new ArrayList<>(); mUpdatedCapabilityList = new ArrayList<>(); mRemoteCaps = new HashSet<>(); + mContactCapsReceived = new HashMap<>(); + } + + /** + * Set the request contacts which is expected to receive the capabilities updated. + */ + public synchronized void setRequestContacts(List<Uri> contactUris) { + contactUris.stream().forEach(contact -> mContactCapsReceived.put(contact, Boolean.FALSE)); + Log.d(LOG_TAG, "setRequestContacts: size=" + mContactCapsReceived.size()); + } + + /** + * Set the request contacts which is expected to receive the capabilities updated. + */ + public synchronized boolean haveAllRequestCapsUpdatedBeenReceived() { + return !(mContactCapsReceived.containsValue(Boolean.FALSE)); } /** @@ -201,6 +228,10 @@ public class CapabilityRequestResponse { */ public synchronized void addCachedCapabilities(List<RcsContactUceCapability> capabilityList) { mCachedCapabilityList.addAll(capabilityList); + + // Record which contact has received the capabilities updated. + capabilityList.stream().forEach(cap -> + mContactCapsReceived.computeIfPresent(cap.getContactUri(), (k, v) -> Boolean.TRUE)); } /** @@ -222,6 +253,10 @@ public class CapabilityRequestResponse { */ public synchronized void addUpdatedCapabilities(List<RcsContactUceCapability> capabilityList) { mUpdatedCapabilityList.addAll(capabilityList); + + // Record which contact has received the capabilities updated. + capabilityList.stream().forEach(cap -> + mContactCapsReceived.computeIfPresent(cap.getContactUri(), (k, v) -> Boolean.TRUE)); } /** @@ -251,6 +286,10 @@ public class CapabilityRequestResponse { // Save the terminated resource. mTerminatedResource.addAll(capabilityList); + + // Record which contact has received the capabilities updated. + capabilityList.stream().forEach(cap -> + mContactCapsReceived.computeIfPresent(cap.getContactUri(), (k, v) -> Boolean.TRUE)); } /* |