From 89a9bfe4c0e80336ca996125d5112609e0ce71ba Mon Sep 17 00:00:00 2001 From: Leland Miller Date: Fri, 22 Mar 2019 14:20:50 -0700 Subject: [PATCH] Create new RcsThreadQueryResultParcelable This parcelable class now backes RcsThreadQueryResult. This change will allow injection of API layer dependencies into RcsThreadQueryResult. Change-Id: I2c273513e2a3bfcab7cd84fc7a2f89cc2ad12c75 Test: Existing tests pass Bug: 123699565 --- .../android/telephony/ims/RcsMessageStore.java | 9 +-- .../telephony/ims/RcsThreadQueryResult.java | 76 ++++------------------ ...lt.aidl => RcsThreadQueryResultParcelable.aidl} | 2 +- .../ims/RcsThreadQueryResultParcelable.java | 70 ++++++++++++++++++++ .../java/android/telephony/ims/aidl/IRcs.aidl | 6 +- 5 files changed, 91 insertions(+), 72 deletions(-) rename telephony/java/android/telephony/ims/{RcsThreadQueryResult.aidl => RcsThreadQueryResultParcelable.aidl} (93%) create mode 100644 telephony/java/android/telephony/ims/RcsThreadQueryResultParcelable.java diff --git a/telephony/java/android/telephony/ims/RcsMessageStore.java b/telephony/java/android/telephony/ims/RcsMessageStore.java index 311165232158..3cceddf24838 100644 --- a/telephony/java/android/telephony/ims/RcsMessageStore.java +++ b/telephony/java/android/telephony/ims/RcsMessageStore.java @@ -41,7 +41,8 @@ public class RcsMessageStore { @NonNull public RcsThreadQueryResult getRcsThreads(@Nullable RcsThreadQueryParams queryParameters) throws RcsMessageStoreException { - return RcsControllerCall.call(iRcs -> iRcs.getRcsThreads(queryParameters)); + return new RcsThreadQueryResult( + RcsControllerCall.call(iRcs -> iRcs.getRcsThreads(queryParameters))); } /** @@ -55,7 +56,8 @@ public class RcsMessageStore { @NonNull public RcsThreadQueryResult getRcsThreads(@NonNull RcsQueryContinuationToken continuationToken) throws RcsMessageStoreException { - return RcsControllerCall.call(iRcs -> iRcs.getRcsThreadsWithToken(continuationToken)); + return new RcsThreadQueryResult( + RcsControllerCall.call(iRcs -> iRcs.getRcsThreadsWithToken(continuationToken))); } /** @@ -121,7 +123,7 @@ public class RcsMessageStore { * Returns the first chunk of existing {@link RcsEvent}s in the common storage. * * @param queryParams Parameters to specify to return a subset of all RcsEvents. - * Passing a value of null will return all events. + * Passing a value of null will return all events. * @throws RcsMessageStoreException if the query could not be completed on the storage */ @WorkerThread @@ -152,7 +154,6 @@ public class RcsMessageStore { * * @param persistableEvent The {@link RcsEvent} to persist into storage. * @throws RcsMessageStoreException if the query could not be completed on the storage - * * @see RcsGroupThreadNameChangedEvent * @see RcsGroupThreadIconChangedEvent * @see RcsGroupThreadParticipantJoinedEvent diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryResult.java b/telephony/java/android/telephony/ims/RcsThreadQueryResult.java index c2c2d3a8758e..c77bdb32eb7d 100644 --- a/telephony/java/android/telephony/ims/RcsThreadQueryResult.java +++ b/telephony/java/android/telephony/ims/RcsThreadQueryResult.java @@ -20,13 +20,10 @@ import static android.provider.Telephony.RcsColumns.RcsUnifiedThreadColumns.THRE 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#getRcsThreads(RcsThreadQueryParams)} @@ -35,23 +32,11 @@ import java.util.List; * * @hide */ -public final class RcsThreadQueryResult implements Parcelable { - // A token for the caller to continue their query for the next batch of results - private RcsQueryContinuationToken mContinuationToken; - // The list of thread IDs returned with this query - private List mRcsThreadIds; +public final class RcsThreadQueryResult { + private final RcsThreadQueryResultParcelable mRcsThreadQueryResultParcelable; - /** - * Internal constructor for {@link com.android.internal.telephony.ims.RcsMessageStoreController} - * to create query results - * - * @hide - */ - public RcsThreadQueryResult( - RcsQueryContinuationToken continuationToken, - List rcsThreadIds) { - mContinuationToken = continuationToken; - mRcsThreadIds = rcsThreadIds; + RcsThreadQueryResult(RcsThreadQueryResultParcelable rcsThreadQueryResultParcelable) { + mRcsThreadQueryResultParcelable = rcsThreadQueryResultParcelable; } /** @@ -61,7 +46,7 @@ public final class RcsThreadQueryResult implements Parcelable { */ @Nullable public RcsQueryContinuationToken getContinuationToken() { - return mContinuationToken; + return mRcsThreadQueryResultParcelable.mContinuationToken; } /** @@ -71,47 +56,10 @@ public final class RcsThreadQueryResult implements Parcelable { */ @NonNull public List getThreads() { - List rcsThreads = new ArrayList<>(); - - for (RcsTypeIdPair typeIdPair : mRcsThreadIds) { - if (typeIdPair.getType() == THREAD_TYPE_1_TO_1) { - rcsThreads.add(new Rcs1To1Thread(typeIdPair.getId())); - } else { - rcsThreads.add(new RcsGroupThread(typeIdPair.getId())); - } - } - - return rcsThreads; - } - - private RcsThreadQueryResult(Parcel in) { - mContinuationToken = in.readParcelable( - RcsQueryContinuationToken.class.getClassLoader()); - mRcsThreadIds = new ArrayList<>(); - in.readList(mRcsThreadIds, Integer.class.getClassLoader()); - } - - public static final @android.annotation.NonNull Creator CREATOR = - new Creator() { - @Override - public RcsThreadQueryResult createFromParcel(Parcel in) { - return new RcsThreadQueryResult(in); - } - - @Override - public RcsThreadQueryResult[] newArray(int size) { - return new RcsThreadQueryResult[size]; - } - }; - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeParcelable(mContinuationToken, flags); - dest.writeList(mRcsThreadIds); + return mRcsThreadQueryResultParcelable.mRcsThreadIds.stream() + .map(typeIdPair -> typeIdPair.getType() == THREAD_TYPE_1_TO_1 + ? new Rcs1To1Thread(typeIdPair.getId()) + : new RcsGroupThread(typeIdPair.getId())) + .collect(Collectors.toList()); } } diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryResult.aidl b/telephony/java/android/telephony/ims/RcsThreadQueryResultParcelable.aidl similarity index 93% rename from telephony/java/android/telephony/ims/RcsThreadQueryResult.aidl rename to telephony/java/android/telephony/ims/RcsThreadQueryResultParcelable.aidl index b1d5cf4c7211..05bd61de73e3 100644 --- a/telephony/java/android/telephony/ims/RcsThreadQueryResult.aidl +++ b/telephony/java/android/telephony/ims/RcsThreadQueryResultParcelable.aidl @@ -17,4 +17,4 @@ package android.telephony.ims; -parcelable RcsThreadQueryResult; +parcelable RcsThreadQueryResultParcelable; diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryResultParcelable.java b/telephony/java/android/telephony/ims/RcsThreadQueryResultParcelable.java new file mode 100644 index 000000000000..89dd1d48ef9b --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsThreadQueryResultParcelable.java @@ -0,0 +1,70 @@ +/* + * 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 + */ +public final class RcsThreadQueryResultParcelable implements Parcelable { + final RcsQueryContinuationToken mContinuationToken; + final List mRcsThreadIds; + + public RcsThreadQueryResultParcelable( + RcsQueryContinuationToken continuationToken, + List rcsThreadIds) { + mContinuationToken = continuationToken; + mRcsThreadIds = rcsThreadIds; + } + + private RcsThreadQueryResultParcelable(Parcel in) { + mContinuationToken = in.readParcelable(RcsQueryContinuationToken.class.getClassLoader()); + mRcsThreadIds = new ArrayList<>(); + in.readList(mRcsThreadIds, RcsTypeIdPair.class.getClassLoader()); + } + + public static final Parcelable.Creator CREATOR = + new Parcelable.Creator() { + @Override + public RcsThreadQueryResultParcelable createFromParcel(Parcel in) { + return new RcsThreadQueryResultParcelable(in); + } + + @Override + public RcsThreadQueryResultParcelable[] newArray(int size) { + return new RcsThreadQueryResultParcelable[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeParcelable(mContinuationToken, flags); + dest.writeList(mRcsThreadIds); + } +} diff --git a/telephony/java/android/telephony/ims/aidl/IRcs.aidl b/telephony/java/android/telephony/ims/aidl/IRcs.aidl index 6ab01c2a0eea..4aa23670cb38 100644 --- a/telephony/java/android/telephony/ims/aidl/IRcs.aidl +++ b/telephony/java/android/telephony/ims/aidl/IRcs.aidl @@ -29,7 +29,7 @@ import android.telephony.ims.RcsParticipantQueryParams; import android.telephony.ims.RcsParticipantQueryResult; import android.telephony.ims.RcsQueryContinuationToken; import android.telephony.ims.RcsThreadQueryParams; -import android.telephony.ims.RcsThreadQueryResult; +import android.telephony.ims.RcsThreadQueryResultParcelable; /** * RPC definition between RCS storage APIs and phone process. @@ -39,9 +39,9 @@ interface IRcs { ///////////////////////// // RcsMessageStore APIs ///////////////////////// - RcsThreadQueryResult getRcsThreads(in RcsThreadQueryParams queryParams); + RcsThreadQueryResultParcelable getRcsThreads(in RcsThreadQueryParams queryParams); - RcsThreadQueryResult getRcsThreadsWithToken( + RcsThreadQueryResultParcelable getRcsThreadsWithToken( in RcsQueryContinuationToken continuationToken); RcsParticipantQueryResult getParticipants(in RcsParticipantQueryParams queryParams); -- 2.11.0