• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of 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,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.view.inputmethod;
18 
19 import android.os.Bundle;
20 import android.os.Handler;
21 import android.view.KeyEvent;
22 
23 /**
24  * <p>Wrapper class for proxying calls to another InputConnection.  Subclass and have fun!
25  */
26 public class InputConnectionWrapper implements InputConnection {
27     private InputConnection mTarget;
28     final boolean mMutable;
29     @InputConnectionInspector.MissingMethodFlags
30     private int mMissingMethodFlags;
31 
32     /**
33      * Initializes a wrapper.
34      *
35      * <p><b>Caveat:</b> Although the system can accept {@code (InputConnection) null} in some
36      * places, you cannot emulate such a behavior by non-null {@link InputConnectionWrapper} that
37      * has {@code null} in {@code target}.</p>
38      * @param target the {@link InputConnection} to be proxied.
39      * @param mutable set {@code true} to protect this object from being reconfigured to target
40      * another {@link InputConnection}.  Note that this is ignored while the target is {@code null}.
41      */
InputConnectionWrapper(InputConnection target, boolean mutable)42     public InputConnectionWrapper(InputConnection target, boolean mutable) {
43         mMutable = mutable;
44         mTarget = target;
45         mMissingMethodFlags = InputConnectionInspector.getMissingMethodFlags(target);
46     }
47 
48     /**
49      * Change the target of the input connection.
50      *
51      * <p><b>Caveat:</b> Although the system can accept {@code (InputConnection) null} in some
52      * places, you cannot emulate such a behavior by non-null {@link InputConnectionWrapper} that
53      * has {@code null} in {@code target}.</p>
54      * @param target the {@link InputConnection} to be proxied.
55      * @throws SecurityException when this wrapper has non-null target and is immutable.
56      */
setTarget(InputConnection target)57     public void setTarget(InputConnection target) {
58         if (mTarget != null && !mMutable) {
59             throw new SecurityException("not mutable");
60         }
61         mTarget = target;
62         mMissingMethodFlags = InputConnectionInspector.getMissingMethodFlags(target);
63     }
64 
65     /**
66      * @hide
67      */
68     @InputConnectionInspector.MissingMethodFlags
getMissingMethodFlags()69     public int getMissingMethodFlags() {
70         return mMissingMethodFlags;
71     }
72 
73     /**
74      * {@inheritDoc}
75      * @throws NullPointerException if the target is {@code null}.
76      */
77     @Override
getTextBeforeCursor(int n, int flags)78     public CharSequence getTextBeforeCursor(int n, int flags) {
79         return mTarget.getTextBeforeCursor(n, flags);
80     }
81 
82     /**
83      * {@inheritDoc}
84      * @throws NullPointerException if the target is {@code null}.
85      */
86     @Override
getTextAfterCursor(int n, int flags)87     public CharSequence getTextAfterCursor(int n, int flags) {
88         return mTarget.getTextAfterCursor(n, flags);
89     }
90 
91     /**
92      * {@inheritDoc}
93      * @throws NullPointerException if the target is {@code null}.
94      */
95     @Override
getSelectedText(int flags)96     public CharSequence getSelectedText(int flags) {
97         return mTarget.getSelectedText(flags);
98     }
99 
100     /**
101      * {@inheritDoc}
102      * @throws NullPointerException if the target is {@code null}.
103      */
104     @Override
getCursorCapsMode(int reqModes)105     public int getCursorCapsMode(int reqModes) {
106         return mTarget.getCursorCapsMode(reqModes);
107     }
108 
109     /**
110      * {@inheritDoc}
111      * @throws NullPointerException if the target is {@code null}.
112      */
113     @Override
getExtractedText(ExtractedTextRequest request, int flags)114     public ExtractedText getExtractedText(ExtractedTextRequest request, int flags) {
115         return mTarget.getExtractedText(request, flags);
116     }
117 
118     /**
119      * {@inheritDoc}
120      * @throws NullPointerException if the target is {@code null}.
121      */
122     @Override
deleteSurroundingTextInCodePoints(int beforeLength, int afterLength)123     public boolean deleteSurroundingTextInCodePoints(int beforeLength, int afterLength) {
124         return mTarget.deleteSurroundingTextInCodePoints(beforeLength, afterLength);
125     }
126 
127     /**
128      * {@inheritDoc}
129      * @throws NullPointerException if the target is {@code null}.
130      */
131     @Override
deleteSurroundingText(int beforeLength, int afterLength)132     public boolean deleteSurroundingText(int beforeLength, int afterLength) {
133         return mTarget.deleteSurroundingText(beforeLength, afterLength);
134     }
135 
136     /**
137      * {@inheritDoc}
138      * @throws NullPointerException if the target is {@code null}.
139      */
140     @Override
setComposingText(CharSequence text, int newCursorPosition)141     public boolean setComposingText(CharSequence text, int newCursorPosition) {
142         return mTarget.setComposingText(text, newCursorPosition);
143     }
144 
145     /**
146      * {@inheritDoc}
147      * @throws NullPointerException if the target is {@code null}.
148      */
149     @Override
setComposingRegion(int start, int end)150     public boolean setComposingRegion(int start, int end) {
151         return mTarget.setComposingRegion(start, end);
152     }
153 
154     /**
155      * {@inheritDoc}
156      * @throws NullPointerException if the target is {@code null}.
157      */
158     @Override
finishComposingText()159     public boolean finishComposingText() {
160         return mTarget.finishComposingText();
161     }
162 
163     /**
164      * {@inheritDoc}
165      * @throws NullPointerException if the target is {@code null}.
166      */
167     @Override
commitText(CharSequence text, int newCursorPosition)168     public boolean commitText(CharSequence text, int newCursorPosition) {
169         return mTarget.commitText(text, newCursorPosition);
170     }
171 
172     /**
173      * {@inheritDoc}
174      * @throws NullPointerException if the target is {@code null}.
175      */
176     @Override
commitCompletion(CompletionInfo text)177     public boolean commitCompletion(CompletionInfo text) {
178         return mTarget.commitCompletion(text);
179     }
180 
181     /**
182      * {@inheritDoc}
183      * @throws NullPointerException if the target is {@code null}.
184      */
185     @Override
commitCorrection(CorrectionInfo correctionInfo)186     public boolean commitCorrection(CorrectionInfo correctionInfo) {
187         return mTarget.commitCorrection(correctionInfo);
188     }
189 
190     /**
191      * {@inheritDoc}
192      * @throws NullPointerException if the target is {@code null}.
193      */
194     @Override
setSelection(int start, int end)195     public boolean setSelection(int start, int end) {
196         return mTarget.setSelection(start, end);
197     }
198 
199     /**
200      * {@inheritDoc}
201      * @throws NullPointerException if the target is {@code null}.
202      */
203     @Override
performEditorAction(int editorAction)204     public boolean performEditorAction(int editorAction) {
205         return mTarget.performEditorAction(editorAction);
206     }
207 
208     /**
209      * {@inheritDoc}
210      * @throws NullPointerException if the target is {@code null}.
211      */
212     @Override
performContextMenuAction(int id)213     public boolean performContextMenuAction(int id) {
214         return mTarget.performContextMenuAction(id);
215     }
216 
217     /**
218      * {@inheritDoc}
219      * @throws NullPointerException if the target is {@code null}.
220      */
221     @Override
beginBatchEdit()222     public boolean beginBatchEdit() {
223         return mTarget.beginBatchEdit();
224     }
225 
226     /**
227      * {@inheritDoc}
228      * @throws NullPointerException if the target is {@code null}.
229      */
230     @Override
endBatchEdit()231     public boolean endBatchEdit() {
232         return mTarget.endBatchEdit();
233     }
234 
235     /**
236      * {@inheritDoc}
237      * @throws NullPointerException if the target is {@code null}.
238      */
239     @Override
sendKeyEvent(KeyEvent event)240     public boolean sendKeyEvent(KeyEvent event) {
241         return mTarget.sendKeyEvent(event);
242     }
243 
244     /**
245      * {@inheritDoc}
246      * @throws NullPointerException if the target is {@code null}.
247      */
248     @Override
clearMetaKeyStates(int states)249     public boolean clearMetaKeyStates(int states) {
250         return mTarget.clearMetaKeyStates(states);
251     }
252 
253     /**
254      * {@inheritDoc}
255      * @throws NullPointerException if the target is {@code null}.
256      */
257     @Override
reportFullscreenMode(boolean enabled)258     public boolean reportFullscreenMode(boolean enabled) {
259         return mTarget.reportFullscreenMode(enabled);
260     }
261 
262     /**
263      * {@inheritDoc}
264      * @throws NullPointerException if the target is {@code null}.
265      */
266     @Override
performPrivateCommand(String action, Bundle data)267     public boolean performPrivateCommand(String action, Bundle data) {
268         return mTarget.performPrivateCommand(action, data);
269     }
270 
271     /**
272      * {@inheritDoc}
273      * @throws NullPointerException if the target is {@code null}.
274      */
275     @Override
requestCursorUpdates(int cursorUpdateMode)276     public boolean requestCursorUpdates(int cursorUpdateMode) {
277         return mTarget.requestCursorUpdates(cursorUpdateMode);
278     }
279 
280     /**
281      * {@inheritDoc}
282      * @throws NullPointerException if the target is {@code null}.
283      */
284     @Override
getHandler()285     public Handler getHandler() {
286         return mTarget.getHandler();
287     }
288 
289     /**
290      * {@inheritDoc}
291      * @throws NullPointerException if the target is {@code null}.
292      */
293     @Override
closeConnection()294     public void closeConnection() {
295         mTarget.closeConnection();
296     }
297 
298     /**
299      * {@inheritDoc}
300      * @throws NullPointerException if the target is {@code null}.
301      */
302     @Override
commitContent(InputContentInfo inputContentInfo, int flags, Bundle opts)303     public boolean commitContent(InputContentInfo inputContentInfo, int flags, Bundle opts) {
304         return mTarget.commitContent(inputContentInfo, flags, opts);
305     }
306 }
307