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

Commit 9e4b9c84 authored by Julia Reynolds's avatar Julia Reynolds Committed by Android (Google) Code Review
Browse files

Merge "Add a status API for conversations"

parents 89dc5f67 071f0a46
Loading
Loading
Loading
Loading
+47 −0
Original line number Diff line number Diff line
@@ -7826,6 +7826,52 @@ package android.app.job {
}
package android.app.people {
  public final class ConversationStatus implements android.os.Parcelable {
    method public int describeContents();
    method public int getActivity();
    method public int getAvailability();
    method @Nullable public CharSequence getDescription();
    method public long getEndTimeMillis();
    method @Nullable public android.graphics.drawable.Icon getIcon();
    method @NonNull public String getId();
    method public long getStartTimeMillis();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field public static final int ACTIVITY_ANNIVERSARY = 2; // 0x2
    field public static final int ACTIVITY_BIRTHDAY = 1; // 0x1
    field public static final int ACTIVITY_GAME = 5; // 0x5
    field public static final int ACTIVITY_LOCATION = 6; // 0x6
    field public static final int ACTIVITY_MEDIA = 4; // 0x4
    field public static final int ACTIVITY_NEW_STORY = 3; // 0x3
    field public static final int ACTIVITY_OTHER = 0; // 0x0
    field public static final int ACTIVITY_UPCOMING_BIRTHDAY = 7; // 0x7
    field public static final int AVAILABILITY_AVAILABLE = 0; // 0x0
    field public static final int AVAILABILITY_BUSY = 1; // 0x1
    field public static final int AVAILABILITY_OFFLINE = 2; // 0x2
    field public static final int AVAILABILITY_UNKNOWN = -1; // 0xffffffff
    field @NonNull public static final android.os.Parcelable.Creator<android.app.people.ConversationStatus> CREATOR;
  }
  public static final class ConversationStatus.Builder {
    ctor public ConversationStatus.Builder(@NonNull String, @NonNull int);
    method @NonNull public android.app.people.ConversationStatus build();
    method @NonNull public android.app.people.ConversationStatus.Builder setAvailability(int);
    method @NonNull public android.app.people.ConversationStatus.Builder setDescription(@Nullable CharSequence);
    method @NonNull public android.app.people.ConversationStatus.Builder setEndTimeMillis(long);
    method @NonNull public android.app.people.ConversationStatus.Builder setIcon(@Nullable android.graphics.drawable.Icon);
    method @NonNull public android.app.people.ConversationStatus.Builder setStartTimeMillis(long);
  }
  public final class PeopleManager {
    method public void addOrUpdateStatus(@NonNull String, @NonNull android.app.people.ConversationStatus);
    method public void clearStatus(@NonNull String, @NonNull String);
    method public void clearStatuses(@NonNull String);
    method @NonNull public java.util.List<android.app.people.ConversationStatus> getStatuses(@NonNull String);
  }
}
package android.app.role {
  public final class RoleManager {
@@ -10315,6 +10361,7 @@ package android.content {
    field public static final String NFC_SERVICE = "nfc";
    field public static final String NOTIFICATION_SERVICE = "notification";
    field public static final String NSD_SERVICE = "servicediscovery";
    field public static final String PEOPLE_SERVICE = "people";
    field public static final String POWER_SERVICE = "power";
    field public static final String PRINT_SERVICE = "print";
    field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1
+8 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.app.blob.BlobStoreManagerFrameworkInitializer;
import android.app.contentsuggestions.ContentSuggestionsManager;
import android.app.contentsuggestions.IContentSuggestionsManager;
import android.app.job.JobSchedulerFrameworkInitializer;
import android.app.people.PeopleManager;
import android.app.prediction.AppPredictionManager;
import android.app.role.RoleControllerManager;
import android.app.role.RoleManager;
@@ -586,6 +587,13 @@ public final class SystemServiceRegistry {
                return new NsdManager(ctx.getOuterContext(), service);
            }});

        registerService(Context.PEOPLE_SERVICE, PeopleManager.class,
                new CachedServiceFetcher<PeopleManager>() {
            @Override
            public PeopleManager createService(ContextImpl ctx) throws ServiceNotFoundException {
                return new PeopleManager(ctx);
            }});

        registerService(Context.POWER_SERVICE, PowerManager.class,
                new CachedServiceFetcher<PowerManager>() {
            @Override
+19 −0
Original line number Diff line number Diff line
/**
 * Copyright (c) 2021, 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.app.people;

parcelable ConversationStatus;
 No newline at end of file
+240 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 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.app.people;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.graphics.drawable.Icon;
import android.os.Parcel;
import android.os.Parcelable;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Objects;

public final class ConversationStatus implements Parcelable {
    private static final String TAG = "ConversationStatus";

    /** @hide */
    @IntDef(prefix = { "ACTIVITY_" }, value = {
            ACTIVITY_OTHER,
            ACTIVITY_BIRTHDAY,
            ACTIVITY_ANNIVERSARY,
            ACTIVITY_NEW_STORY,
            ACTIVITY_MEDIA,
            ACTIVITY_GAME,
            ACTIVITY_LOCATION,
            ACTIVITY_UPCOMING_BIRTHDAY
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface ActivityType {}

    public static final int ACTIVITY_OTHER = 0;
    public static final int ACTIVITY_BIRTHDAY = 1;
    public static final int ACTIVITY_ANNIVERSARY = 2;
    public static final int ACTIVITY_NEW_STORY = 3;
    public static final int ACTIVITY_MEDIA = 4;
    public static final int ACTIVITY_GAME = 5;
    public static final int ACTIVITY_LOCATION = 6;
    public static final int ACTIVITY_UPCOMING_BIRTHDAY = 7;

    /** @hide */
    @IntDef(prefix = { "AVAILABILITY_" }, value = {
            AVAILABILITY_UNKNOWN,
            AVAILABILITY_AVAILABLE,
            AVAILABILITY_BUSY,
            AVAILABILITY_OFFLINE
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface Availability {}

    public static final int AVAILABILITY_UNKNOWN = -1;
    public static final int AVAILABILITY_AVAILABLE = 0;
    public static final int AVAILABILITY_BUSY = 1;
    public static final int AVAILABILITY_OFFLINE = 2;

    private final String mId;
    private final int mActivity;

    private int mAvailability;
    private CharSequence mDescription;
    private Icon mIcon;
    private long mStartTimeMs;
    private long mEndTimeMs;

    private ConversationStatus(Builder b) {
        mId = b.mId;
        mActivity = b.mActivity;
        mAvailability = b.mAvailability;
        mDescription = b.mDescription;
        mIcon = b.mIcon;
        mStartTimeMs = b.mStartTimeMs;
        mEndTimeMs = b.mEndTimeMs;
    }

    private ConversationStatus(Parcel p) {
        mId = p.readString();
        mActivity = p.readInt();
        mAvailability = p.readInt();
        mDescription = p.readCharSequence();
        mIcon = p.readParcelable(Icon.class.getClassLoader());
        mStartTimeMs = p.readLong();
        mEndTimeMs = p.readLong();
    }

    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeString(mId);
        dest.writeInt(mActivity);
        dest.writeInt(mAvailability);
        dest.writeCharSequence(mDescription);
        dest.writeParcelable(mIcon, flags);
        dest.writeLong(mStartTimeMs);
        dest.writeLong(mEndTimeMs);
    }

    public @NonNull String getId() {
        return mId;
    }

    public @ActivityType int getActivity() {
        return mActivity;
    }

    public @Availability
    int getAvailability() {
        return mAvailability;
    }

    public @Nullable
    CharSequence getDescription() {
        return mDescription;
    }

    public @Nullable Icon getIcon() {
        return mIcon;
    }

    public long getStartTimeMillis() {
        return mStartTimeMs;
    }

    public long getEndTimeMillis() {
        return mEndTimeMs;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        ConversationStatus that = (ConversationStatus) o;
        return mActivity == that.mActivity &&
                mAvailability == that.mAvailability &&
                mStartTimeMs == that.mStartTimeMs &&
                mEndTimeMs == that.mEndTimeMs &&
                mId.equals(that.mId) &&
                Objects.equals(mDescription, that.mDescription) &&
                Objects.equals(mIcon, that.mIcon);
    }

    @Override
    public int hashCode() {
        return Objects.hash(mId, mActivity, mAvailability, mDescription, mIcon, mStartTimeMs,
                mEndTimeMs);
    }

    @Override
    public String toString() {
        return "ConversationStatus{" +
                "mId='" + mId + '\'' +
                ", mActivity=" + mActivity +
                ", mAvailability=" + mAvailability +
                ", mDescription=" + mDescription +
                ", mIcon=" + mIcon +
                ", mStartTimeMs=" + mStartTimeMs +
                ", mEndTimeMs=" + mEndTimeMs +
                '}';
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public static final @NonNull Creator<ConversationStatus> CREATOR
            = new Creator<ConversationStatus>() {
        public ConversationStatus createFromParcel(Parcel source) {
            return new ConversationStatus(source);
        }

        public ConversationStatus[] newArray(int size) {
            return new ConversationStatus[size];
        }
    };

    public static final class Builder {
        final String mId;
        final int mActivity;
        int mAvailability = AVAILABILITY_UNKNOWN;
        CharSequence mDescription;
        Icon mIcon;
        long mStartTimeMs = -1;
        long mEndTimeMs = -1;

        /**
         * Creates a new builder.
         *
         * @param id The unique id for this status
         * @param activity The type of status
         */
        public Builder(@NonNull String id, @ActivityType @NonNull int activity) {
            mId = id;
            mActivity = activity;
        }


        public @NonNull Builder setAvailability(@Availability int availability) {
            mAvailability = availability;
            return this;
        }

        public @NonNull Builder setDescription(@Nullable CharSequence description) {
            mDescription = description;
            return this;
        }

        public @NonNull Builder setIcon(@Nullable Icon icon) {
            mIcon = icon;
            return this;
        }

        public @NonNull Builder setStartTimeMillis(long startTimeMs) {
            mStartTimeMs = startTimeMs;
            return this;
        }

        public @NonNull Builder setEndTimeMillis(long endTimeMs) {
            mEndTimeMs = endTimeMs;
            return this;
        }

        public @NonNull ConversationStatus build() {
            return new ConversationStatus(this);
        }
    }
}
+6 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.app.people;

import android.app.people.ConversationStatus;
import android.content.pm.ParceledListSlice;
import android.net.Uri;
import android.os.IBinder;
@@ -45,4 +46,9 @@ interface IPeopleManager {
     * conversation can't be found or no interactions have been recorded, returns 0L.
     */
    long getLastInteraction(in String packageName, int userId, in String shortcutId);

    void addOrUpdateStatus(in String packageName, int userId, in String conversationId, in ConversationStatus status);
    void clearStatus(in String packageName, int userId, in String conversationId, in String statusId);
    void clearStatuses(in String packageName, int userId, in String conversationId);
    ParceledListSlice getStatuses(in String packageName, int userId, in String conversationId);
}
Loading