package pw.qlm.sample;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import pw.qlm.inputmethodholder.OnInputMethodListener;
import pw.qlm.inputmethodholder.InputMethodHolder;
public class MainActivity extends AppCompatActivity {
OnInputMethodListener onInputMethodListener;
EditText et;
Button btnHook;
Button btnClose;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = (EditText) findViewById(R.id.et);
btnHook = (Button) findViewById(R.id.btn_init);
btnClose = (Button) findViewById(R.id.btn_close_input);
onInputMethodListener = new OnInputMethodListener() {
@Override
public void onShow(boolean result) {
Toast.makeText(MainActivity.this, "Show input method! " + result, Toast.LENGTH_SHORT).show();
}
@Override
public void onHide(boolean result) {
Toast.makeText(MainActivity.this, "Hide input method! " + result, Toast.LENGTH_SHORT).show();
}
};
InputMethodHolder.registerListener(onInputMethodListener);
//FIXME 在这初始化会失败,目前只能在Application中
// Caused by: java.lang.IllegalArgumentException: unknown client android.os.BinderProxy@2df668f
// at android.os.Parcel.readException(Parcel.java:1624)
// at android.os.Parcel.readException(Parcel.java:1573)
// at com.android.internal.view.IInputMethodManager$Stub$Proxy.windowGainedFocus(IInputMethodManager.java:733)
// at java.lang.reflect.Method.invoke(Native Method)
// at pw.qlm.inputmethodholder.hook.InputMethodManagerHook.invoke(InputMethodManagerHook.java:38)
// at java.lang.reflect.Proxy.invoke(Proxy.java:393)
// at $Proxy1.windowGainedFocus(Unknown Source)
// at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1226)
// at android.view.inputmethod.InputMethodManager.onPostWindowFocus(InputMethodManager.java:1445)
// at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3394)
// at android.os.Handler.dispatchMessage(Handler.java:102)
// at android.os.Looper.loop(Looper.java:148)
// at android.app.ActivityThread.main(ActivityThread.java:5461)
// at java.lang.reflect.Method.invoke(Native Method)
// at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
// at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
btnHook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
InputMethodHolder.init(getApplication().getBaseContext());
}
});
btnClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(et.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
InputMethodHolder.unregisterListener(onInputMethodListener);
InputMethodHolder.release();
}
}