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.window;
18 
19 import android.annotation.NonNull;
20 import android.annotation.Nullable;
21 import android.annotation.TestApi;
22 import android.os.IBinder;
23 import android.os.Parcel;
24 import android.os.Parcelable;
25 
26 /**
27  * Interface to communicate between window manager and {@link TaskFragmentOrganizer}.
28  * <p>
29  * Window manager will dispatch TaskFragment information updates via this interface.
30  * It is necessary because {@link ITaskFragmentOrganizer} aidl interface can not be used as a
31  * {@link TestApi}.
32  * @hide
33  */
34 @TestApi
35 public final class TaskFragmentOrganizerToken implements Parcelable {
36     private final ITaskFragmentOrganizer mRealToken;
37 
TaskFragmentOrganizerToken(ITaskFragmentOrganizer realToken)38     TaskFragmentOrganizerToken(ITaskFragmentOrganizer realToken) {
39         mRealToken = realToken;
40     }
41 
42     /** @hide */
asBinder()43     public IBinder asBinder() {
44         return mRealToken.asBinder();
45     }
46 
47     /** @hide */
48     @Override
writeToParcel(Parcel dest, int flags)49     public void writeToParcel(Parcel dest, int flags) {
50         dest.writeStrongInterface(mRealToken);
51     }
52 
53     /** @hide */
54     @Override
describeContents()55     public int describeContents() {
56         return 0;
57     }
58 
59     @NonNull
60     public static final Creator<TaskFragmentOrganizerToken> CREATOR =
61             new Creator<TaskFragmentOrganizerToken>() {
62                 @Override
63                 public TaskFragmentOrganizerToken createFromParcel(Parcel in) {
64                     final ITaskFragmentOrganizer realToken =
65                             ITaskFragmentOrganizer.Stub.asInterface(in.readStrongBinder());
66                     // The TaskFragmentOrganizerToken may be null for TaskOrganizer or
67                     // DisplayAreaOrganizer.
68                     if (realToken == null) {
69                         return null;
70                     }
71                     return new TaskFragmentOrganizerToken(realToken);
72                 }
73 
74                 @Override
75                 public TaskFragmentOrganizerToken[] newArray(int size) {
76                     return new TaskFragmentOrganizerToken[size];
77                 }
78             };
79 
80     @Override
hashCode()81     public int hashCode() {
82         return mRealToken.asBinder().hashCode();
83     }
84 
85     @Override
toString()86     public String toString() {
87         return "TaskFragmentOrganizerToken{" + mRealToken + "}";
88     }
89 
90     @Override
equals(@ullable Object obj)91     public boolean equals(@Nullable Object obj) {
92         if (!(obj instanceof TaskFragmentOrganizerToken)) {
93             return false;
94         }
95         return mRealToken.asBinder() == ((TaskFragmentOrganizerToken) obj).asBinder();
96     }
97 }
98