/*
* Copyright (C) 2007-2008 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.view.inputmethod;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Information given to an {@link InputMethod} about a client connecting
* to it.
*/
public final class InputBinding implements Parcelable {
static final String TAG = "InputBinding";
/**
* The connection back to the client.
*/
final InputConnection mConnection;
/**
* A remotable token for the connection back to the client.
*/
final IBinder mConnectionToken;
/**
* The UID where this binding came from.
*/
final int mUid;
/**
* The PID where this binding came from.
*/
final int mPid;
/**
* Constructor.
*
* @param conn The interface for communicating back with the application.
* @param connToken A remoteable token for communicating across processes.
* @param uid The user id of the client of this binding.
* @param pid The process id of where the binding came from.
*/
public InputBinding(InputConnection conn, IBinder connToken,
int uid, int pid) {
mConnection = conn;
mConnectionToken = connToken;
mUid = uid;
mPid = pid;
}
/**
* Constructor from an existing InputBinding taking a new local input
* connection interface.
*
* @param conn The new connection interface.
* @param binding Existing binding to copy.
*/
public InputBinding(InputConnection conn, InputBinding binding) {
mConnection = conn;
mConnectionToken = binding.getConnectionToken();
mUid = binding.getUid();
mPid = binding.getPid();
}
InputBinding(Parcel source) {
mConnection = null;
mConnectionToken = source.readStrongBinder();
mUid = source.readInt();
mPid = source.readInt();
}
/**
* Return the connection for interacting back with the application.
*/
public InputConnection getConnection() {
return mConnection;
}
/**
* Return the token for the connection back to the application. You can
* not use this directly, it must be converted to a {@link InputConnection}
* for you.
*/
public IBinder getConnectionToken() {
return mConnectionToken;
}
/**
* Return the user id of the client associated with this binding.
*/
public int getUid() {
return mUid;
}
/**
* Return the process id where this binding came from.
*/
public int getPid() {
return mPid;
}
@Override
public String toString() {
return "InputBinding{" + mConnectionToken
+ " / uid " + mUid + " / pid " + mPid + "}";
}
/**
* Used to package this object into a {@link Parcel}.
*
* @param dest The {@link Parcel} to be written.
* @param flags The flags used for parceling.
*/
public void writeToParcel(Parcel dest, int flags) {
dest.writeStrongBinder(mConnectionToken);
dest.writeInt(mUid);
dest.writeInt(mPid);
}
/**
* Used to make this class parcelable.
*/
public static final Parcelable.Creator<InputBinding> CREATOR = new Parcelable.Creator<InputBinding>() {
public InputBinding createFromParcel(Parcel source) {
return new InputBinding(source);
}
public InputBinding[] newArray(int size) {
return new InputBinding[size];
}
};
public int describeContents() {
return 0;
}
}