InputBindResult.java revision 2553e48886958039f038d4d10cfb0f7f22b3eb5b
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 com.android.internal.view;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
192553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawaimport static java.lang.annotation.RetentionPolicy.SOURCE;
202553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
212553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawaimport android.annotation.IntDef;
222553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawaimport android.content.ComponentName;
232553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawaimport android.content.Intent;
242553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawaimport android.content.ServiceConnection;
252553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawaimport android.os.IBinder;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
282553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawaimport android.os.UserHandle;
29c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brownimport android.view.InputChannel;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
312553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawaimport java.lang.annotation.Retention;
322553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bundle of information returned by input method manager about a successful
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * binding to an input method.
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class InputBindResult implements Parcelable {
382553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
392553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    @Retention(SOURCE)
402553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    @IntDef({
412553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            ResultCode.SUCCESS_WITH_IME_SESSION,
422553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            ResultCode.SUCCESS_WAITING_IME_SESSION,
432553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            ResultCode.SUCCESS_WAITING_IME_BINDING,
442553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            ResultCode.SUCCESS_REPORT_WINDOW_FOCUS_ONLY,
452553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            ResultCode.ERROR_NULL,
462553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            ResultCode.ERROR_NO_IME,
472553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            ResultCode.ERROR_INVALID_PACKAGE_NAME,
482553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            ResultCode.ERROR_SYSTEM_NOT_READY,
492553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            ResultCode.ERROR_IME_NOT_CONNECTED,
502553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            ResultCode.ERROR_INVALID_USER,
512553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            ResultCode.ERROR_NULL_EDITOR_INFO,
522553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            ResultCode.ERROR_NOT_IME_TARGET_WINDOW,
532553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    })
542553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public @interface ResultCode {
552553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        /**
562553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * Indicates that everything in this result object including {@link #method} is valid.
572553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         */
582553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        int SUCCESS_WITH_IME_SESSION = 0;
592553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        /**
602553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * Indicates that this is a temporary binding until the
612553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * {@link android.inputmethodservice.InputMethodService} (IMS) establishes a valid session
622553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * to {@link com.android.server.InputMethodManagerService} (IMMS).
632553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         *
642553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * <p>Note that in this state the IMS is already bound to IMMS but the logical session
652553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * is not yet established on top of the IPC channel.</p>
662553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         *
672553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * <p>Some of fields such as {@link #channel} is not yet available.</p>
682553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         *
692553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * @see android.inputmethodservice.InputMethodService##onCreateInputMethodSessionInterface()
702553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         **/
712553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        int SUCCESS_WAITING_IME_SESSION = 1;
722553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        /**
732553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * Indicates that this is a temporary binding until the
742553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * {@link android.inputmethodservice.InputMethodService} (IMS) establishes a valid session
752553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * to {@link com.android.server.InputMethodManagerService} (IMMS).
762553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         *
772553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * <p>Note that in this state the IMMS has already initiated a connection to the IMS but
782553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * the binding process is not completed yet.</p>
792553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         *
802553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * <p>Some of fields such as {@link #channel} is not yet available.</p>
812553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * @see android.content.ServiceConnection#onServiceConnected(ComponentName, IBinder)
822553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         */
832553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        int SUCCESS_WAITING_IME_BINDING = 2;
842553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        /**
852553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * Indicates that this is not intended for starting input but just for reporting window
862553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * focus change from the application process.
872553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         *
882553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * <p>All other fields do not have meaningful value.</p>
892553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         */
902553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        int SUCCESS_REPORT_WINDOW_FOCUS_ONLY = 3;
912553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        /**
922553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * Indicates somehow
932553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * {@link com.android.server.InputMethodManagerService#startInputOrWindowGainedFocus} is
942553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * trying to return null {@link InputBindResult}, which must never happen.
952553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         */
962553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        int ERROR_NULL = 4;
972553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        /**
982553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * Indicates that {@link com.android.server.InputMethodManagerService} recognizes no IME.
992553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         */
1002553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        int ERROR_NO_IME = 5;
1012553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        /**
1022553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * Indicates that {@link android.view.inputmethod.EditorInfo#packageName} does not match
1032553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * the caller UID.
1042553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         *
1052553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * @see android.view.inputmethod.EditorInfo#packageName
1062553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         */
1072553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        int ERROR_INVALID_PACKAGE_NAME = 6;
1082553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        /**
1092553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * Indicates that the system is still in an early stage of the boot process and any 3rd
1102553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * party application is not allowed to run.
1112553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         *
1122553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * @see com.android.server.SystemService#PHASE_THIRD_PARTY_APPS_CAN_START
1132553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         */
1142553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        int ERROR_SYSTEM_NOT_READY = 7;
1152553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        /**
1162553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * Indicates that {@link com.android.server.InputMethodManagerService} tried to connect to
1172553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * an {@link android.inputmethodservice.InputMethodService} but failed.
1182553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         *
1192553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * @see android.content.Context#bindServiceAsUser(Intent, ServiceConnection, int, UserHandle)
1202553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         */
1212553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        int ERROR_IME_NOT_CONNECTED = 8;
1222553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        /**
1232553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * Indicates that the caller is not the foreground user (or does not have
1242553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission).
1252553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         */
1262553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        int ERROR_INVALID_USER = 9;
1272553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        /**
1282553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * Indicates that the caller should have specified non-null
1292553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * {@link android.view.inputmethod.EditorInfo}.
1302553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         */
1312553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        int ERROR_NULL_EDITOR_INFO = 10;
1322553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        /**
1332553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * Indicates that the target window the client specified cannot be the IME target right now.
1342553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         *
1352553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * <p>Due to the asynchronous nature of Android OS, we cannot completely avoid this error.
1362553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * The client should try to restart input when its {@link android.view.Window} is focused
1372553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * again.</p>
1382553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         *
1392553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         * @see com.android.server.wm.WindowManagerService#inputMethodClientHasFocus(IInputMethodClient)
1402553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa         */
1412553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        int ERROR_NOT_IME_TARGET_WINDOW = 11;
1422553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    }
1432553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
1442553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    @ResultCode
1452553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public final int result;
1462553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The input method service.
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final IInputMethodSession method;
151c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown
152c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown    /**
153c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown     * The input channel used to send input events to this IME.
154c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown     */
155c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown    public final InputChannel channel;
156c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The ID for this input method, as found in InputMethodInfo; null if
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * no input method will be bound.
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final String id;
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sequence number of this binding.
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final int sequence;
1673d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa
1683d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa    /**
1693d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa     * Sequence number of user action notification.
1703d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa     */
1713d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa    public final int userActionNotificationSequenceNumber;
1723d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa
1732553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public InputBindResult(@ResultCode int _result,
1742553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            IInputMethodSession _method, InputChannel _channel,
1753d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa            String _id, int _sequence, int _userActionNotificationSequenceNumber) {
1762553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        result = _result;
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        method = _method;
178c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        channel = _channel;
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        id = _id;
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sequence = _sequence;
1813d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa        userActionNotificationSequenceNumber = _userActionNotificationSequenceNumber;
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1832553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    InputBindResult(Parcel source) {
1852553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        result = source.readInt();
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        method = IInputMethodSession.Stub.asInterface(source.readStrongBinder());
187c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        if (source.readInt() != 0) {
188c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown            channel = InputChannel.CREATOR.createFromParcel(source);
189c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        } else {
190c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown            channel = null;
191c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        }
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        id = source.readString();
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sequence = source.readInt();
1943d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa        userActionNotificationSequenceNumber = source.readInt();
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
196c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
1992553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        return "InputBindResult{result=" + getResultString() + " method="+ method + " id=" + id
2002553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                + " sequence=" + sequence
2012553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                + " userActionNotificationSequenceNumber=" + userActionNotificationSequenceNumber
2023d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa                + "}";
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Used to package this object into a {@link Parcel}.
207c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown     *
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param dest The {@link Parcel} to be written.
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flags The flags used for parceling.
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
211c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown    @Override
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel dest, int flags) {
2132553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        dest.writeInt(result);
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeStrongInterface(method);
215c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        if (channel != null) {
216c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown            dest.writeInt(1);
2171951ce86c21445ac191e4d2d95233f4f5c096b56Jeff Brown            channel.writeToParcel(dest, flags);
218c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        } else {
219c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown            dest.writeInt(0);
220c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        }
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(id);
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(sequence);
2233d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa        dest.writeInt(userActionNotificationSequenceNumber);
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Used to make this class parcelable.
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
229c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown    public static final Parcelable.Creator<InputBindResult> CREATOR =
230c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown            new Parcelable.Creator<InputBindResult>() {
231c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        @Override
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public InputBindResult createFromParcel(Parcel source) {
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new InputBindResult(source);
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
236c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        @Override
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public InputBindResult[] newArray(int size) {
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new InputBindResult[size];
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
242c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown    @Override
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
244c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        return channel != null ? channel.describeContents() : 0;
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2462553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
2472553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public String getResultString() {
2482553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        switch (result) {
2492553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.SUCCESS_WITH_IME_SESSION:
2502553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "SUCCESS_WITH_IME_SESSION";
2512553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.SUCCESS_WAITING_IME_SESSION:
2522553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "SUCCESS_WAITING_IME_SESSION";
2532553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.SUCCESS_WAITING_IME_BINDING:
2542553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "SUCCESS_WAITING_IME_BINDING";
2552553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.SUCCESS_REPORT_WINDOW_FOCUS_ONLY:
2562553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "SUCCESS_REPORT_WINDOW_FOCUS_ONLY";
2572553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_NULL:
2582553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_NULL";
2592553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_NO_IME:
2602553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_NO_IME";
2612553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_INVALID_PACKAGE_NAME:
2622553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_INVALID_PACKAGE_NAME";
2632553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_SYSTEM_NOT_READY:
2642553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_SYSTEM_NOT_READY";
2652553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_IME_NOT_CONNECTED:
2662553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_IME_NOT_CONNECTED";
2672553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_INVALID_USER:
2682553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_INVALID_USER";
2692553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_NULL_EDITOR_INFO:
2702553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_NULL_EDITOR_INFO";
2712553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_NOT_IME_TARGET_WINDOW:
2722553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_NOT_IME_TARGET_WINDOW";
2732553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            default:
2742553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "Unknown(" + result + ")";
2752553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        }
2762553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    }
2772553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
2782553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    private static InputBindResult error(@ResultCode int result) {
2792553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        return new InputBindResult(result, null, null, null, -1, -1);
2802553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    }
2812553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
2822553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    /**
2832553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     * Predefined error object for {@link ResultCode#ERROR_NULL}.
2842553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     */
2852553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public static final InputBindResult NULL = error(ResultCode.ERROR_NULL);
2862553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    /**
2872553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     * Predefined error object for {@link ResultCode#NO_IME}.
2882553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     */
2892553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public static final InputBindResult NO_IME = error(ResultCode.ERROR_NO_IME);
2902553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    /**
2912553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     * Predefined error object for {@link ResultCode#ERROR_INVALID_PACKAGE_NAME}.
2922553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     */
2932553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public static final InputBindResult INVALID_PACKAGE_NAME =
2942553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            error(ResultCode.ERROR_INVALID_PACKAGE_NAME);
2952553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    /**
2962553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     * Predefined error object for {@link ResultCode#ERROR_NULL_EDITOR_INFO}.
2972553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     */
2982553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public static final InputBindResult NULL_EDITOR_INFO = error(ResultCode.ERROR_NULL_EDITOR_INFO);
2992553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    /**
3002553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     * Predefined error object for {@link ResultCode#ERROR_NOT_IME_TARGET_WINDOW}.
3012553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     */
3022553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public static final InputBindResult NOT_IME_TARGET_WINDOW =
3032553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            error(ResultCode.ERROR_NOT_IME_TARGET_WINDOW);
3042553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    /**
3052553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     * Predefined error object for {@link ResultCode#ERROR_IME_NOT_CONNECTED}.
3062553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     */
3072553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public static final InputBindResult IME_NOT_CONNECTED =
3082553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            error(ResultCode.ERROR_IME_NOT_CONNECTED);
3092553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    /**
3102553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     * Predefined error object for {@link ResultCode#ERROR_INVALID_USER}.
3112553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     */
3122553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public static final InputBindResult INVALID_USER = error(ResultCode.ERROR_INVALID_USER);
3132553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
315