Revert "InputConnectionWrapper never supports null target."

This reverts commit 90bd36363c.

Seems that the semantics of InputConnectionWrapper#setTarget() is more
complicated than I thought.  At least the following cases have worked
fine.

  case 1:
    InputConnectionWrapper wrapper =
            new InputConnectionWrapper(null, false);
    wrapper.SetTarget(ic);
    ...

  case 2:
    InputConnectionWrapper wrapper =
            new InputConnectionWrapper(null, true);
    wrapper.SetTarget(ic);
    ...

  case 3:
    InputConnectionWrapper wrapper =
            new InputConnectionWrapper(ic, true);
    wrapper.SetTarget(null);
    wrapper.SetTarget(ic2);
    ...

The previous code did not intended to break existing code.  Let's revert
it we decide how to deal with above cases.

Bug: 27407697
Change-Id: I8bc84d484ab0b27a02e74f11110430f70646e69a
This commit is contained in:
Yohei Yukawa
2016-02-29 13:35:59 -08:00
parent 82197c33a2
commit abc4b8f035

View File

@@ -16,47 +16,33 @@
package android.view.inputmethod;
import android.annotation.NonNull;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import static com.android.internal.util.Preconditions.checkNotNull;
/**
* <p>Wrapper class for proxying calls to another InputConnection. Subclass
* and have fun!
*/
public class InputConnectionWrapper implements InputConnection {
@NonNull
private InputConnection mTarget;
final boolean mMutable;
/**
* Initializes the wrapper for the given {@link InputConnection}.
* @param target the {@link InputConnection} to be wrapped.
* @param mutable {@code true} if the wrapper is to be mutable.
* @throws NullPointerException if {@code target} is {@code null}.
*/
public InputConnectionWrapper(@NonNull InputConnection target, boolean mutable) {
checkNotNull(target);
public InputConnectionWrapper(InputConnection target, boolean mutable) {
mMutable = mutable;
mTarget = target;
}
/**
* Change the target of the input connection.
* @param target the {@link InputConnection} to be wrapped.
* @throws NullPointerException if {@code target} is {@code null}.
*/
public void setTarget(@NonNull InputConnection target) {
checkNotNull(target);
public void setTarget(InputConnection target) {
if (mTarget != null && !mMutable) {
throw new SecurityException("not mutable");
}
mTarget = target;
}
public CharSequence getTextBeforeCursor(int n, int flags) {
return mTarget.getTextBeforeCursor(n, flags);
}