1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.app.assist; 18 19 import android.annotation.NonNull; 20 import android.annotation.Nullable; 21 import android.annotation.SystemApi; 22 import android.annotation.TestApi; 23 import android.os.IBinder; 24 import android.os.Parcel; 25 import android.os.Parcelable; 26 import android.service.contentcapture.ContentCaptureService; 27 import android.view.contentcapture.ContentCaptureContext; 28 import android.view.translation.UiTranslationManager; 29 30 import com.android.internal.annotations.Immutable; 31 32 /** 33 * The class is used to identify an instance of an Activity. The system provides this to services 34 * that need to request operations on a specific Activity. For example, the system provides this in 35 * {@link ContentCaptureContext} to {@link ContentCaptureService} which can use it to issue requests 36 * like {@link UiTranslationManager#startTranslation}. 37 * 38 * @hide 39 */ 40 @Immutable 41 @SystemApi 42 @TestApi 43 public final class ActivityId implements Parcelable { 44 45 /** 46 * The identifier of the task this activity is in. 47 */ 48 private final int mTaskId; 49 /** 50 * The identifier of the activity. 51 */ 52 @Nullable 53 private final IBinder mActivityId; 54 55 /** 56 * @hide 57 */ 58 @TestApi ActivityId(int taskId, @Nullable IBinder activityId)59 public ActivityId(int taskId, @Nullable IBinder activityId) { 60 mTaskId = taskId; 61 mActivityId = activityId; 62 } 63 64 /** 65 * @hide 66 */ ActivityId(@onNull Parcel source)67 public ActivityId(@NonNull Parcel source) { 68 mTaskId = source.readInt(); 69 mActivityId = source.readStrongBinder(); 70 } 71 72 /** 73 * The identifier of the task this activity is in. 74 * @hide 75 */ 76 @TestApi getTaskId()77 public int getTaskId() { 78 return mTaskId; 79 } 80 81 /** 82 * The identifier of the activity. In some case, this value may be null, e.g. the child session 83 * of content capture. 84 * @hide 85 */ 86 @Nullable 87 @TestApi getToken()88 public IBinder getToken() { 89 return mActivityId; 90 } 91 92 /** 93 * {@inheritDoc} 94 */ 95 @Override describeContents()96 public int describeContents() { 97 return 0; 98 } 99 100 /** 101 * {@inheritDoc} 102 */ 103 @Override writeToParcel(@onNull Parcel dest, int flags)104 public void writeToParcel(@NonNull Parcel dest, int flags) { 105 dest.writeInt(mTaskId); 106 dest.writeStrongBinder(mActivityId); 107 } 108 109 /** 110 * Creates {@link ActivityId} instances from parcels. 111 */ 112 @NonNull 113 public static final Parcelable.Creator<ActivityId> CREATOR = 114 new Parcelable.Creator<ActivityId>() { 115 @Override 116 public ActivityId createFromParcel(Parcel parcel) { 117 return new ActivityId(parcel); 118 } 119 120 @Override 121 public ActivityId[] newArray(int size) { 122 return new ActivityId[size]; 123 } 124 }; 125 126 @Override toString()127 public String toString() { 128 return "ActivityId { taskId = " + mTaskId + ", activityId = " + mActivityId + " }"; 129 } 130 131 @Override equals(@ullable Object o)132 public boolean equals(@Nullable Object o) { 133 if (this == o) { 134 return true; 135 } 136 if (o == null || getClass() != o.getClass()) { 137 return false; 138 } 139 ActivityId that = (ActivityId) o; 140 if (mTaskId != that.mTaskId) { 141 return false; 142 } 143 return mActivityId != null 144 ? mActivityId.equals(that.mActivityId) 145 : that.mActivityId == null; 146 } 147 148 @Override hashCode()149 public int hashCode() { 150 int result = mTaskId; 151 result = 31 * result + (mActivityId != null ? mActivityId.hashCode() : 0); 152 return result; 153 } 154 } 155