1b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project/*
2b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project * Copyright (C) 2007-2008 The Android Open Source Project
3b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project *
4b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project * use this file except in compliance with the License. You may obtain a copy of
6b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project * the License at
7b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project *
8b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0
9b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project *
10b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project * License for the specific language governing permissions and limitations under
14b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project * the License.
15b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project */
16b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
17b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Projectpackage android.view.inputmethod;
18b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
19b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Projectimport android.os.Bundle;
20b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Projectimport android.view.KeyEvent;
21b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
22b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project/**
23b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project * <p>Wrapper class for proxying calls to another InputConnection.  Subclass
24b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project * and have fun!
25b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project */
26b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Projectpublic class InputConnectionWrapper implements InputConnection {
2751bf077883df4f5cc816fbfec6d19eedffc26d70Dianne Hackborn    private InputConnection mTarget;
2851bf077883df4f5cc816fbfec6d19eedffc26d70Dianne Hackborn    final boolean mMutable;
29b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
3051bf077883df4f5cc816fbfec6d19eedffc26d70Dianne Hackborn    public InputConnectionWrapper(InputConnection target, boolean mutable) {
3151bf077883df4f5cc816fbfec6d19eedffc26d70Dianne Hackborn        mMutable = mutable;
3251bf077883df4f5cc816fbfec6d19eedffc26d70Dianne Hackborn        mTarget = target;
3351bf077883df4f5cc816fbfec6d19eedffc26d70Dianne Hackborn    }
3451bf077883df4f5cc816fbfec6d19eedffc26d70Dianne Hackborn
3551bf077883df4f5cc816fbfec6d19eedffc26d70Dianne Hackborn    /**
3651bf077883df4f5cc816fbfec6d19eedffc26d70Dianne Hackborn     * Change the target of the input connection.
3751bf077883df4f5cc816fbfec6d19eedffc26d70Dianne Hackborn     */
3851bf077883df4f5cc816fbfec6d19eedffc26d70Dianne Hackborn    public void setTarget(InputConnection target) {
3951bf077883df4f5cc816fbfec6d19eedffc26d70Dianne Hackborn        if (mTarget != null && !mMutable) {
4051bf077883df4f5cc816fbfec6d19eedffc26d70Dianne Hackborn            throw new SecurityException("not mutable");
4151bf077883df4f5cc816fbfec6d19eedffc26d70Dianne Hackborn        }
42b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        mTarget = target;
43b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
44b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
45b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public CharSequence getTextBeforeCursor(int n, int flags) {
46b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.getTextBeforeCursor(n, flags);
47b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
48b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
49b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public CharSequence getTextAfterCursor(int n, int flags) {
50b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.getTextAfterCursor(n, flags);
51b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
52b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
53a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani    public CharSequence getSelectedText(int flags) {
54a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani        return mTarget.getSelectedText(flags);
55a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani    }
56a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani
57b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public int getCursorCapsMode(int reqModes) {
58b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.getCursorCapsMode(reqModes);
59b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
60b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
61e3797a15fbf769a0abcbe121cfd33b4b658aea1esatok    public ExtractedText getExtractedText(ExtractedTextRequest request, int flags) {
62b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.getExtractedText(request, flags);
63b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
64b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
650c95dd3f4f02564fab9b86a221bbcbb4aafc2981Fabrice Di Meglio    public boolean deleteSurroundingText(int beforeLength, int afterLength) {
660c95dd3f4f02564fab9b86a221bbcbb4aafc2981Fabrice Di Meglio        return mTarget.deleteSurroundingText(beforeLength, afterLength);
67b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
68b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
69b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public boolean setComposingText(CharSequence text, int newCursorPosition) {
70b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.setComposingText(text, newCursorPosition);
71b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
72b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
73a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani    public boolean setComposingRegion(int start, int end) {
74a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani        return mTarget.setComposingRegion(start, end);
75a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani    }
76a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani
77b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public boolean finishComposingText() {
78b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.finishComposingText();
79b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
80b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
81b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public boolean commitText(CharSequence text, int newCursorPosition) {
82b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.commitText(text, newCursorPosition);
83b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
84b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
85b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public boolean commitCompletion(CompletionInfo text) {
86b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.commitCompletion(text);
87cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    }
88cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne
89cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    public boolean commitCorrection(CorrectionInfo correctionInfo) {
90cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        return mTarget.commitCorrection(correctionInfo);
91b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
92b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
93b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public boolean setSelection(int start, int end) {
94b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.setSelection(start, end);
95b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
96b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
97b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public boolean performEditorAction(int editorAction) {
98b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.performEditorAction(editorAction);
99b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
100b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
101b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public boolean performContextMenuAction(int id) {
102b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.performContextMenuAction(id);
103b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
104b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
105b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public boolean beginBatchEdit() {
106b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.beginBatchEdit();
107b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
108b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
109b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public boolean endBatchEdit() {
110b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.endBatchEdit();
111b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
112b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
113b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public boolean sendKeyEvent(KeyEvent event) {
114b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.sendKeyEvent(event);
115b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
116b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
117b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public boolean clearMetaKeyStates(int states) {
118b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.clearMetaKeyStates(states);
119b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
120b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
121b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public boolean reportFullscreenMode(boolean enabled) {
122b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.reportFullscreenMode(enabled);
123b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
124b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
125b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public boolean performPrivateCommand(String action, Bundle data) {
126b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        return mTarget.performPrivateCommand(action, data);
127b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
128b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project}
129