1 /*
2  * Copyright (C) 2007-2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy of
6  * 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, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations under
14  * the License.
15  */
16 
17 package android.view.inputmethod;
18 
19 import android.os.IBinder;
20 import android.os.Parcel;
21 import android.os.Parcelable;
22 
23 /**
24  * Information given to an {@link InputMethod} about a client connecting
25  * to it.
26  */
27 public final class InputBinding implements Parcelable {
28     static final String TAG = "InputBinding";
29 
30     /**
31      * The connection back to the client.
32      */
33     final InputConnection mConnection;
34 
35     /**
36      * A remotable token for the connection back to the client.
37      */
38     final IBinder mConnectionToken;
39 
40     /**
41      * The UID where this binding came from.
42      */
43     final int mUid;
44 
45     /**
46      * The PID where this binding came from.
47      */
48     final int mPid;
49 
50     /**
51      * Constructor.
52      *
53      * @param conn The interface for communicating back with the application.
54      * @param connToken A remoteable token for communicating across processes.
55      * @param uid The user id of the client of this binding.
56      * @param pid The process id of where the binding came from.
57      */
InputBinding(InputConnection conn, IBinder connToken, int uid, int pid)58     public InputBinding(InputConnection conn, IBinder connToken,
59             int uid, int pid) {
60         mConnection = conn;
61         mConnectionToken = connToken;
62         mUid = uid;
63         mPid = pid;
64     }
65 
66     /**
67      * Constructor from an existing InputBinding taking a new local input
68      * connection interface.
69      *
70      * @param conn The new connection interface.
71      * @param binding Existing binding to copy.
72      */
InputBinding(InputConnection conn, InputBinding binding)73     public InputBinding(InputConnection conn, InputBinding binding) {
74         mConnection = conn;
75         mConnectionToken = binding.getConnectionToken();
76         mUid = binding.getUid();
77         mPid = binding.getPid();
78     }
79 
InputBinding(Parcel source)80     InputBinding(Parcel source) {
81         mConnection = null;
82         mConnectionToken = source.readStrongBinder();
83         mUid = source.readInt();
84         mPid = source.readInt();
85     }
86 
87     /**
88      * Return the connection for interacting back with the application.
89      */
getConnection()90     public InputConnection getConnection() {
91         return mConnection;
92     }
93 
94     /**
95      * Return the token for the connection back to the application.  You can
96      * not use this directly, it must be converted to a {@link InputConnection}
97      * for you.
98      */
getConnectionToken()99     public IBinder getConnectionToken() {
100         return mConnectionToken;
101     }
102 
103     /**
104      * Return the user id of the client associated with this binding.
105      */
getUid()106     public int getUid() {
107         return mUid;
108     }
109 
110     /**
111      * Return the process id where this binding came from.
112      */
getPid()113     public int getPid() {
114         return mPid;
115     }
116 
117     @Override
toString()118     public String toString() {
119         return "InputBinding{" + mConnectionToken
120                 + " / uid " + mUid + " / pid " + mPid + "}";
121     }
122 
123     /**
124      * Used to package this object into a {@link Parcel}.
125      *
126      * @param dest The {@link Parcel} to be written.
127      * @param flags The flags used for parceling.
128      */
writeToParcel(Parcel dest, int flags)129     public void writeToParcel(Parcel dest, int flags) {
130         dest.writeStrongBinder(mConnectionToken);
131         dest.writeInt(mUid);
132         dest.writeInt(mPid);
133     }
134 
135     /**
136      * Used to make this class parcelable.
137      */
138     public static final @android.annotation.NonNull Parcelable.Creator<InputBinding> CREATOR = new Parcelable.Creator<InputBinding>() {
139         public InputBinding createFromParcel(Parcel source) {
140             return new InputBinding(source);
141         }
142 
143         public InputBinding[] newArray(int size) {
144             return new InputBinding[size];
145         }
146     };
147 
describeContents()148     public int describeContents() {
149         return 0;
150     }
151 }
152