19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007-2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); you may not
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use this file except in compliance with the License. You may obtain a copy of
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * License for the specific language governing permissions and limitations under
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.view.inputmethod;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.IBinder;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information given to an {@link InputMethod} about a client connecting
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to it.
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class InputBinding implements Parcelable {
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final String TAG = "InputBinding";
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The connection back to the client.
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    final InputConnection mConnection;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * A remotable token for the connection back to the client.
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    final IBinder mConnectionToken;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The UID where this binding came from.
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    final int mUid;
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The PID where this binding came from.
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    final int mPid;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Constructor.
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param conn The interface for communicating back with the application.
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param connToken A remoteable token for communicating across processes.
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user id of the client of this binding.
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process id of where the binding came from.
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public InputBinding(InputConnection conn, IBinder connToken,
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int uid, int pid) {
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mConnection = conn;
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mConnectionToken = connToken;
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mUid = uid;
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPid = pid;
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Constructor from an existing InputBinding taking a new local input
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * connection interface.
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param conn The new connection interface.
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param binding Existing binding to copy.
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public InputBinding(InputConnection conn, InputBinding binding) {
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mConnection = conn;
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mConnectionToken = binding.getConnectionToken();
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mUid = binding.getUid();
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPid = binding.getPid();
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    InputBinding(Parcel source) {
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mConnection = null;
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mConnectionToken = source.readStrongBinder();
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mUid = source.readInt();
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPid = source.readInt();
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the connection for interacting back with the application.
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public InputConnection getConnection() {
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mConnection;
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the token for the connection back to the application.  You can
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not use this directly, it must be converted to a {@link InputConnection}
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for you.
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public IBinder getConnectionToken() {
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mConnectionToken;
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the user id of the client associated with this binding.
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getUid() {
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mUid;
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the process id where this binding came from.
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getPid() {
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mPid;
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return "InputBinding{" + mConnectionToken
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + " / uid " + mUid + " / pid " + mPid + "}";
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Used to package this object into a {@link Parcel}.
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param dest The {@link Parcel} to be written.
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flags The flags used for parceling.
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel dest, int flags) {
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeStrongBinder(mConnectionToken);
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(mUid);
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(mPid);
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Used to make this class parcelable.
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Parcelable.Creator<InputBinding> CREATOR = new Parcelable.Creator<InputBinding>() {
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public InputBinding createFromParcel(Parcel source) {
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new InputBinding(source);
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public InputBinding[] newArray(int size) {
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new InputBinding[size];
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
153