Home | History | Annotate | Download | only in view
      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 com.android.internal.view;
     18 
     19 import android.os.Parcel;
     20 import android.os.Parcelable;
     21 import android.view.InputChannel;
     22 
     23 /**
     24  * Bundle of information returned by input method manager about a successful
     25  * binding to an input method.
     26  */
     27 public final class InputBindResult implements Parcelable {
     28     static final String TAG = "InputBindResult";
     29 
     30     /**
     31      * The input method service.
     32      */
     33     public final IInputMethodSession method;
     34 
     35     /**
     36      * The input channel used to send input events to this IME.
     37      */
     38     public final InputChannel channel;
     39 
     40     /**
     41      * The ID for this input method, as found in InputMethodInfo; null if
     42      * no input method will be bound.
     43      */
     44     public final String id;
     45 
     46     /**
     47      * Sequence number of this binding.
     48      */
     49     public final int sequence;
     50 
     51     /**
     52      * Sequence number of user action notification.
     53      */
     54     public final int userActionNotificationSequenceNumber;
     55 
     56     public InputBindResult(IInputMethodSession _method, InputChannel _channel,
     57             String _id, int _sequence, int _userActionNotificationSequenceNumber) {
     58         method = _method;
     59         channel = _channel;
     60         id = _id;
     61         sequence = _sequence;
     62         userActionNotificationSequenceNumber = _userActionNotificationSequenceNumber;
     63     }
     64 
     65     InputBindResult(Parcel source) {
     66         method = IInputMethodSession.Stub.asInterface(source.readStrongBinder());
     67         if (source.readInt() != 0) {
     68             channel = InputChannel.CREATOR.createFromParcel(source);
     69         } else {
     70             channel = null;
     71         }
     72         id = source.readString();
     73         sequence = source.readInt();
     74         userActionNotificationSequenceNumber = source.readInt();
     75     }
     76 
     77     @Override
     78     public String toString() {
     79         return "InputBindResult{" + method + " " + id
     80                 + " sequence:" + sequence
     81                 + " userActionNotificationSequenceNumber:" + userActionNotificationSequenceNumber
     82                 + "}";
     83     }
     84 
     85     /**
     86      * Used to package this object into a {@link Parcel}.
     87      *
     88      * @param dest The {@link Parcel} to be written.
     89      * @param flags The flags used for parceling.
     90      */
     91     @Override
     92     public void writeToParcel(Parcel dest, int flags) {
     93         dest.writeStrongInterface(method);
     94         if (channel != null) {
     95             dest.writeInt(1);
     96             channel.writeToParcel(dest, flags);
     97         } else {
     98             dest.writeInt(0);
     99         }
    100         dest.writeString(id);
    101         dest.writeInt(sequence);
    102         dest.writeInt(userActionNotificationSequenceNumber);
    103     }
    104 
    105     /**
    106      * Used to make this class parcelable.
    107      */
    108     public static final Parcelable.Creator<InputBindResult> CREATOR =
    109             new Parcelable.Creator<InputBindResult>() {
    110         @Override
    111         public InputBindResult createFromParcel(Parcel source) {
    112             return new InputBindResult(source);
    113         }
    114 
    115         @Override
    116         public InputBindResult[] newArray(int size) {
    117             return new InputBindResult[size];
    118         }
    119     };
    120 
    121     @Override
    122     public int describeContents() {
    123         return channel != null ? channel.describeContents() : 0;
    124     }
    125 }
    126