Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 35d29333 authored by Leland Miller's avatar Leland Miller
Browse files

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
parent bc17e4b3
Loading
Loading
Loading
Loading
+11 −62
Original line number Diff line number Diff line
@@ -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<RcsTypeIdPair> 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<RcsTypeIdPair> 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<RcsMessage> getMessages() {
        List<RcsMessage> 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<RcsMessageQueryResult> CREATOR =
            new Creator<RcsMessageQueryResult>() {
                @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());
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -17,4 +17,4 @@

package android.telephony.ims;

parcelable RcsMessageQueryResult;
parcelable RcsMessageQueryResultParcelable;
+74 −0
Original line number Diff line number Diff line
/*
 * 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<RcsTypeIdPair> mMessageTypeIdPairs;

    public RcsMessageQueryResultParcelable(
            RcsQueryContinuationToken continuationToken,
            List<RcsTypeIdPair> 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<RcsMessageQueryResultParcelable> CREATOR =
            new Creator<RcsMessageQueryResultParcelable>() {
                @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);
    }
}
+4 −2
Original line number Diff line number Diff line
@@ -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)));
    }

    /**
+3 −1
Original line number Diff line number Diff line
@@ -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)));
    }

    /**
Loading