From 35d29333f16ecb803dd31868230966b9b9300f60 Mon Sep 17 00:00:00 2001 From: Leland Miller Date: Fri, 22 Mar 2019 14:19:25 -0700 Subject: [PATCH] Create new RcsMessageQueryResultParcelable This parcelable class now backes RcsMessageQueryResult. This change will allow injection of API layer dependencies into RcsMessageQueryResult. Change-Id: I4bb58413a814a51f4e79490e740f51cc92bb1073 Test: Existing tests pass Bug: 123699565 --- .../telephony/ims/RcsMessageQueryResult.java | 73 +++--------------- ...l => RcsMessageQueryResultParcelable.aidl} | 2 +- .../ims/RcsMessageQueryResultParcelable.java | 74 +++++++++++++++++++ .../telephony/ims/RcsMessageStore.java | 6 +- .../java/android/telephony/ims/RcsThread.java | 4 +- .../java/android/telephony/ims/aidl/IRcs.aidl | 6 +- 6 files changed, 96 insertions(+), 69 deletions(-) rename telephony/java/android/telephony/ims/{RcsMessageQueryResult.aidl => RcsMessageQueryResultParcelable.aidl} (93%) create mode 100644 telephony/java/android/telephony/ims/RcsMessageQueryResultParcelable.java diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryResult.java b/telephony/java/android/telephony/ims/RcsMessageQueryResult.java index 5df929baad523..aa551c11a9d29 100644 --- a/telephony/java/android/telephony/ims/RcsMessageQueryResult.java +++ b/telephony/java/android/telephony/ims/RcsMessageQueryResult.java @@ -20,13 +20,9 @@ import static android.provider.Telephony.RcsColumns.RcsUnifiedMessageColumns.MES import android.annotation.NonNull; import android.annotation.Nullable; -import android.os.Parcel; -import android.os.Parcelable; -import com.android.ims.RcsTypeIdPair; - -import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * The result of a {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParams)} @@ -35,23 +31,11 @@ import java.util.List; * * @hide */ -public final class RcsMessageQueryResult implements Parcelable { - // The token to continue the query to get the next batch of results - private RcsQueryContinuationToken mContinuationToken; - // The message type and message ID pairs for all the messages in this query result - private List mMessageTypeIdPairs; +public final class RcsMessageQueryResult { + private final RcsMessageQueryResultParcelable mRcsMessageQueryResultParcelable; - /** - * Internal constructor for {@link com.android.internal.telephony.ims.RcsMessageStoreController} - * to create query results - * - * @hide - */ - public RcsMessageQueryResult( - RcsQueryContinuationToken continuationToken, - List messageTypeIdPairs) { - mContinuationToken = continuationToken; - mMessageTypeIdPairs = messageTypeIdPairs; + RcsMessageQueryResult(RcsMessageQueryResultParcelable rcsMessageQueryResultParcelable) { + mRcsMessageQueryResultParcelable = rcsMessageQueryResultParcelable; } /** @@ -61,7 +45,7 @@ public final class RcsMessageQueryResult implements Parcelable { */ @Nullable public RcsQueryContinuationToken getContinuationToken() { - return mContinuationToken; + return mRcsMessageQueryResultParcelable.mContinuationToken; } /** @@ -71,45 +55,10 @@ public final class RcsMessageQueryResult implements Parcelable { */ @NonNull public List getMessages() { - List messages = new ArrayList<>(); - for (RcsTypeIdPair typeIdPair : mMessageTypeIdPairs) { - if (typeIdPair.getType() == MESSAGE_TYPE_INCOMING) { - messages.add(new RcsIncomingMessage(typeIdPair.getId())); - } else { - messages.add(new RcsOutgoingMessage(typeIdPair.getId())); - } - } - - return messages; - } - - private RcsMessageQueryResult(Parcel in) { - mContinuationToken = in.readParcelable( - RcsQueryContinuationToken.class.getClassLoader()); - in.readTypedList(mMessageTypeIdPairs, RcsTypeIdPair.CREATOR); - } - - public static final @android.annotation.NonNull Creator CREATOR = - new Creator() { - @Override - public RcsMessageQueryResult createFromParcel(Parcel in) { - return new RcsMessageQueryResult(in); - } - - @Override - public RcsMessageQueryResult[] newArray(int size) { - return new RcsMessageQueryResult[size]; - } - }; - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeParcelable(mContinuationToken, flags); - dest.writeTypedList(mMessageTypeIdPairs); + return mRcsMessageQueryResultParcelable.mMessageTypeIdPairs.stream() + .map(typeIdPair -> typeIdPair.getType() == MESSAGE_TYPE_INCOMING + ? new RcsIncomingMessage(typeIdPair.getId()) + : new RcsOutgoingMessage(typeIdPair.getId())) + .collect(Collectors.toList()); } } diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryResult.aidl b/telephony/java/android/telephony/ims/RcsMessageQueryResultParcelable.aidl similarity index 93% rename from telephony/java/android/telephony/ims/RcsMessageQueryResult.aidl rename to telephony/java/android/telephony/ims/RcsMessageQueryResultParcelable.aidl index a73ba50b6591d..86928bfa41b85 100644 --- a/telephony/java/android/telephony/ims/RcsMessageQueryResult.aidl +++ b/telephony/java/android/telephony/ims/RcsMessageQueryResultParcelable.aidl @@ -17,4 +17,4 @@ package android.telephony.ims; -parcelable RcsMessageQueryResult; +parcelable RcsMessageQueryResultParcelable; diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryResultParcelable.java b/telephony/java/android/telephony/ims/RcsMessageQueryResultParcelable.java new file mode 100644 index 0000000000000..4972f9bc49562 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsMessageQueryResultParcelable.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.telephony.ims; + +import android.os.Parcel; +import android.os.Parcelable; + +import com.android.ims.RcsTypeIdPair; + +import java.util.ArrayList; +import java.util.List; + +/** + * @hide - used only for internal communication with the ircs service + */ +public class RcsMessageQueryResultParcelable implements Parcelable { + // The token to continue the query to get the next batch of results + final RcsQueryContinuationToken mContinuationToken; + // The message type and message ID pairs for all the messages in this query result + final List mMessageTypeIdPairs; + + public RcsMessageQueryResultParcelable( + RcsQueryContinuationToken continuationToken, + List messageTypeIdPairs) { + mContinuationToken = continuationToken; + mMessageTypeIdPairs = messageTypeIdPairs; + } + + private RcsMessageQueryResultParcelable(Parcel in) { + mContinuationToken = in.readParcelable( + RcsQueryContinuationToken.class.getClassLoader()); + + mMessageTypeIdPairs = new ArrayList<>(); + in.readTypedList(mMessageTypeIdPairs, RcsTypeIdPair.CREATOR); + } + + public static final Creator CREATOR = + new Creator() { + @Override + public RcsMessageQueryResultParcelable createFromParcel(Parcel in) { + return new RcsMessageQueryResultParcelable(in); + } + + @Override + public RcsMessageQueryResultParcelable[] newArray(int size) { + return new RcsMessageQueryResultParcelable[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeParcelable(mContinuationToken, flags); + dest.writeTypedList(mMessageTypeIdPairs); + } +} diff --git a/telephony/java/android/telephony/ims/RcsMessageStore.java b/telephony/java/android/telephony/ims/RcsMessageStore.java index 6fcb62b7c0928..0aaec7f7eeb72 100644 --- a/telephony/java/android/telephony/ims/RcsMessageStore.java +++ b/telephony/java/android/telephony/ims/RcsMessageStore.java @@ -104,7 +104,8 @@ public class RcsMessageStore { @NonNull public RcsMessageQueryResult getRcsMessages( @Nullable RcsMessageQueryParams queryParameters) throws RcsMessageStoreException { - return RcsControllerCall.call(iRcs -> iRcs.getMessages(queryParameters)); + return new RcsMessageQueryResult( + RcsControllerCall.call(iRcs -> iRcs.getMessages(queryParameters))); } /** @@ -118,7 +119,8 @@ public class RcsMessageStore { @NonNull public RcsMessageQueryResult getRcsMessages( @NonNull RcsQueryContinuationToken continuationToken) throws RcsMessageStoreException { - return RcsControllerCall.call(iRcs -> iRcs.getMessagesWithToken(continuationToken)); + return new RcsMessageQueryResult( + RcsControllerCall.call(iRcs -> iRcs.getMessagesWithToken(continuationToken))); } /** diff --git a/telephony/java/android/telephony/ims/RcsThread.java b/telephony/java/android/telephony/ims/RcsThread.java index cf1dc76fedfbe..2495f670d1b6c 100644 --- a/telephony/java/android/telephony/ims/RcsThread.java +++ b/telephony/java/android/telephony/ims/RcsThread.java @@ -33,6 +33,7 @@ import com.android.internal.annotations.VisibleForTesting; public abstract class RcsThread { /** * The rcs_participant_thread_id that represents this thread in the database + * * @hide */ protected int mThreadId; @@ -110,7 +111,8 @@ public abstract class RcsThread { public RcsMessageQueryResult getMessages() throws RcsMessageStoreException { RcsMessageQueryParams queryParameters = new RcsMessageQueryParams.Builder().setThread(this).build(); - return RcsControllerCall.call(iRcs -> iRcs.getMessages(queryParameters)); + return new RcsMessageQueryResult( + RcsControllerCall.call(iRcs -> iRcs.getMessages(queryParameters))); } /** diff --git a/telephony/java/android/telephony/ims/aidl/IRcs.aidl b/telephony/java/android/telephony/ims/aidl/IRcs.aidl index 50dc587821fac..6eb966ada230e 100644 --- a/telephony/java/android/telephony/ims/aidl/IRcs.aidl +++ b/telephony/java/android/telephony/ims/aidl/IRcs.aidl @@ -23,7 +23,7 @@ import android.telephony.ims.RcsFileTransferCreationParams; import android.telephony.ims.RcsIncomingMessageCreationParams; import android.telephony.ims.RcsMessageSnippet; import android.telephony.ims.RcsMessageQueryParams; -import android.telephony.ims.RcsMessageQueryResult; +import android.telephony.ims.RcsMessageQueryResultParcelable; import android.telephony.ims.RcsOutgoingMessageCreationParams; import android.telephony.ims.RcsParticipantQueryParams; import android.telephony.ims.RcsParticipantQueryResultParcelable; @@ -49,9 +49,9 @@ interface IRcs { RcsParticipantQueryResultParcelable getParticipantsWithToken( in RcsQueryContinuationToken continuationToken); - RcsMessageQueryResult getMessages(in RcsMessageQueryParams queryParams); + RcsMessageQueryResultParcelable getMessages(in RcsMessageQueryParams queryParams); - RcsMessageQueryResult getMessagesWithToken( + RcsMessageQueryResultParcelable getMessagesWithToken( in RcsQueryContinuationToken continuationToken); RcsEventQueryResultDescriptor getEvents(in RcsEventQueryParams queryParams);