MainActivity.java 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. //% IMPORTS
  2. import android.view.ViewGroup;
  3. import android.text.Editable;
  4. import android.text.Spannable;
  5. import android.text.SpanWatcher;
  6. import android.text.Spanned;
  7. import android.text.TextWatcher;
  8. import android.widget.EditText;
  9. import android.widget.TextView;
  10. import android.view.inputmethod.BaseInputConnection;
  11. import java.util.HashMap;
  12. import autosuggest.InvisibleInputView;
  13. import autosuggest.CustomInputConnection;
  14. //% END
  15. //% MAIN_ACTIVITY_BODY
  16. private ViewGroup rootView;
  17. private HashMap<Integer, InvisibleInputView> editors;
  18. native static void onInitEdit(int id);
  19. public void createComposer(final int id) {
  20. Log.d("darkfi", "createComposer() -> " + id);
  21. final InvisibleInputView iv = new InvisibleInputView(this, id);
  22. editors.put(id, iv);
  23. runOnUiThread(new Runnable() {
  24. @Override
  25. public void run() {
  26. rootView.addView(iv);
  27. iv.clearFocus();
  28. onInitEdit(id);
  29. }
  30. });
  31. }
  32. public boolean focus(final int id) {
  33. final InvisibleInputView iv = editors.get(id);
  34. if (iv == null) {
  35. return false;
  36. }
  37. runOnUiThread(new Runnable() {
  38. @Override
  39. public void run() {
  40. boolean isFocused = iv.requestFocus();
  41. // Just Android things ;)
  42. if (!isFocused) {
  43. Log.w("darkfi", "error requesting focus for id=" + id + ": " + iv);
  44. }
  45. InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
  46. imm.showSoftInput(iv, InputMethodManager.SHOW_IMPLICIT);
  47. }
  48. });
  49. return true;
  50. }
  51. public CustomInputConnection getInputConnect(int id) {
  52. InvisibleInputView iv = editors.get(id);
  53. if (iv == null) {
  54. return null;
  55. }
  56. return iv.inputConnection;
  57. }
  58. public boolean setText(final int id, final String txt) {
  59. final InvisibleInputView iv = editors.get(id);
  60. if (iv == null || iv.inputConnection == null) {
  61. return false;
  62. }
  63. // Maybe do this on the UI thread?
  64. iv.inputConnection.setEditableText(txt, txt.length(), txt.length(), 0, 0);
  65. return true;
  66. }
  67. /*
  68. // Editable string with the spans displayed inline
  69. public String getDebugEditableStr() {
  70. String edit = view.inputConnection.debugEditableStr();
  71. Log.d("darkfi", "getDebugEditableStr() -> " + edit);
  72. return edit;
  73. }
  74. */
  75. public String getAppDataPath() {
  76. return getApplicationContext().getDataDir().getAbsolutePath();
  77. }
  78. public String getExternalStoragePath() {
  79. return getApplicationContext().getExternalFilesDir(null).getAbsolutePath();
  80. }
  81. public int getKeyboardHeight() {
  82. WindowInsets windowInsets = view.getRootWindowInsets();
  83. if (windowInsets == null) {
  84. return 0;
  85. }
  86. Insets imeInsets = windowInsets.getInsets(WindowInsets.Type.ime());
  87. Insets navInsets = windowInsets.getInsets(WindowInsets.Type.navigationBars());
  88. return Math.max(0, imeInsets.bottom - navInsets.bottom);
  89. }
  90. //% END
  91. //% MAIN_ACTIVITY_ON_CREATE
  92. rootView = layout;
  93. editors = new HashMap<>();
  94. view.setFocusable(false);
  95. view.setFocusableInTouchMode(false);
  96. view.clearFocus();
  97. //% END