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;
1422f731c5585391e94dc80cbf19ce3fea1b088d322Tarandeep Singh        /**
1432f731c5585391e94dc80cbf19ce3fea1b088d322Tarandeep Singh         * Indicates that focused view in the current window is not an editor.
1442f731c5585391e94dc80cbf19ce3fea1b088d322Tarandeep Singh         */
1452f731c5585391e94dc80cbf19ce3fea1b088d322Tarandeep Singh        int ERROR_NO_EDITOR = 12;
1462553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    }
1472553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
1482553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    @ResultCode
1492553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public final int result;
1502553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The input method service.
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final IInputMethodSession method;
155c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown
156c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown    /**
157c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown     * The input channel used to send input events to this IME.
158c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown     */
159c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown    public final InputChannel channel;
160c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The ID for this input method, as found in InputMethodInfo; null if
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * no input method will be bound.
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final String id;
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sequence number of this binding.
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final int sequence;
1713d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa
1723d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa    /**
1733d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa     * Sequence number of user action notification.
1743d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa     */
1753d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa    public final int userActionNotificationSequenceNumber;
1763d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa
1772553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public InputBindResult(@ResultCode int _result,
1782553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            IInputMethodSession _method, InputChannel _channel,
1793d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa            String _id, int _sequence, int _userActionNotificationSequenceNumber) {
1802553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        result = _result;
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        method = _method;
182c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        channel = _channel;
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        id = _id;
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sequence = _sequence;
1853d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa        userActionNotificationSequenceNumber = _userActionNotificationSequenceNumber;
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1872553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    InputBindResult(Parcel source) {
1892553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        result = source.readInt();
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        method = IInputMethodSession.Stub.asInterface(source.readStrongBinder());
191c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        if (source.readInt() != 0) {
192c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown            channel = InputChannel.CREATOR.createFromParcel(source);
193c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        } else {
194c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown            channel = null;
195c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        }
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        id = source.readString();
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sequence = source.readInt();
1983d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa        userActionNotificationSequenceNumber = source.readInt();
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
200c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
2032553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        return "InputBindResult{result=" + getResultString() + " method="+ method + " id=" + id
2042553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                + " sequence=" + sequence
2052553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                + " userActionNotificationSequenceNumber=" + userActionNotificationSequenceNumber
2063d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa                + "}";
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Used to package this object into a {@link Parcel}.
211c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown     *
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param dest The {@link Parcel} to be written.
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flags The flags used for parceling.
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
215c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown    @Override
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel dest, int flags) {
2172553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        dest.writeInt(result);
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeStrongInterface(method);
219c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        if (channel != null) {
220c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown            dest.writeInt(1);
2211951ce86c21445ac191e4d2d95233f4f5c096b56Jeff Brown            channel.writeToParcel(dest, flags);
222c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        } else {
223c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown            dest.writeInt(0);
224c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        }
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(id);
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(sequence);
2273d1e8129ebd69db49d80e5d598f608c59b884cdfYohei Yukawa        dest.writeInt(userActionNotificationSequenceNumber);
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Used to make this class parcelable.
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
233c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown    public static final Parcelable.Creator<InputBindResult> CREATOR =
234c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown            new Parcelable.Creator<InputBindResult>() {
235c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        @Override
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public InputBindResult createFromParcel(Parcel source) {
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new InputBindResult(source);
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
240c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        @Override
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public InputBindResult[] newArray(int size) {
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new InputBindResult[size];
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
246c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown    @Override
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
248c28867a1d67121ce5963de135e3ae2b1dbd9a33dJeff Brown        return channel != null ? channel.describeContents() : 0;
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2502553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
2512553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public String getResultString() {
2522553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        switch (result) {
2532553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.SUCCESS_WITH_IME_SESSION:
2542553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "SUCCESS_WITH_IME_SESSION";
2552553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.SUCCESS_WAITING_IME_SESSION:
2562553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "SUCCESS_WAITING_IME_SESSION";
2572553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.SUCCESS_WAITING_IME_BINDING:
2582553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "SUCCESS_WAITING_IME_BINDING";
2592553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.SUCCESS_REPORT_WINDOW_FOCUS_ONLY:
2602553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "SUCCESS_REPORT_WINDOW_FOCUS_ONLY";
2612553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_NULL:
2622553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_NULL";
2632553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_NO_IME:
2642553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_NO_IME";
2652f731c5585391e94dc80cbf19ce3fea1b088d322Tarandeep Singh            case ResultCode.ERROR_NO_EDITOR:
2662f731c5585391e94dc80cbf19ce3fea1b088d322Tarandeep Singh                return "ERROR_NO_EDITOR";
2672553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_INVALID_PACKAGE_NAME:
2682553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_INVALID_PACKAGE_NAME";
2692553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_SYSTEM_NOT_READY:
2702553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_SYSTEM_NOT_READY";
2712553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_IME_NOT_CONNECTED:
2722553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_IME_NOT_CONNECTED";
2732553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_INVALID_USER:
2742553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_INVALID_USER";
2752553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_NULL_EDITOR_INFO:
2762553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_NULL_EDITOR_INFO";
2772553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            case ResultCode.ERROR_NOT_IME_TARGET_WINDOW:
2782553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "ERROR_NOT_IME_TARGET_WINDOW";
2792553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            default:
2802553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa                return "Unknown(" + result + ")";
2812553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        }
2822553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    }
2832553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
2842553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    private static InputBindResult error(@ResultCode int result) {
2852553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa        return new InputBindResult(result, null, null, null, -1, -1);
2862553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    }
2872553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
2882553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    /**
2892553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     * Predefined error object for {@link ResultCode#ERROR_NULL}.
2902553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     */
2912553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public static final InputBindResult NULL = error(ResultCode.ERROR_NULL);
2922553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    /**
2932553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     * Predefined error object for {@link ResultCode#NO_IME}.
2942553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     */
2952553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public static final InputBindResult NO_IME = error(ResultCode.ERROR_NO_IME);
2962553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    /**
2972f731c5585391e94dc80cbf19ce3fea1b088d322Tarandeep Singh     * Predefined error object for {@link ResultCode#NO_EDITOR}.
2982f731c5585391e94dc80cbf19ce3fea1b088d322Tarandeep Singh     */
2992f731c5585391e94dc80cbf19ce3fea1b088d322Tarandeep Singh    public static final InputBindResult NO_EDITOR = error(ResultCode.ERROR_NO_EDITOR);
3002f731c5585391e94dc80cbf19ce3fea1b088d322Tarandeep Singh    /**
3012553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     * Predefined error object for {@link ResultCode#ERROR_INVALID_PACKAGE_NAME}.
3022553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     */
3032553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public static final InputBindResult INVALID_PACKAGE_NAME =
3042553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            error(ResultCode.ERROR_INVALID_PACKAGE_NAME);
3052553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    /**
3062553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     * Predefined error object for {@link ResultCode#ERROR_NULL_EDITOR_INFO}.
3072553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     */
3082553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public static final InputBindResult NULL_EDITOR_INFO = error(ResultCode.ERROR_NULL_EDITOR_INFO);
3092553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    /**
3102553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     * Predefined error object for {@link ResultCode#ERROR_NOT_IME_TARGET_WINDOW}.
3112553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     */
3122553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public static final InputBindResult NOT_IME_TARGET_WINDOW =
3132553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            error(ResultCode.ERROR_NOT_IME_TARGET_WINDOW);
3142553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    /**
3152553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     * Predefined error object for {@link ResultCode#ERROR_IME_NOT_CONNECTED}.
3162553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     */
3172553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public static final InputBindResult IME_NOT_CONNECTED =
3182553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa            error(ResultCode.ERROR_IME_NOT_CONNECTED);
3192553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    /**
3202553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     * Predefined error object for {@link ResultCode#ERROR_INVALID_USER}.
3212553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa     */
3222553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa    public static final InputBindResult INVALID_USER = error(ResultCode.ERROR_INVALID_USER);
3232553e48886958039f038d4d10cfb0f7f22b3eb5bYohei Yukawa
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
325