From 344ca3e08984254ed6c573ad3ea64b4be23780fd Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sun, 28 Apr 2024 21:09:26 +1000 Subject: [PATCH] Android: Add unused UI backend file and split out CCView class --- android/app/CMakeLists.txt | 5 +- .../java/com/classicube/MainActivity.java | 209 ++++++------------ 2 files changed, 76 insertions(+), 138 deletions(-) diff --git a/android/app/CMakeLists.txt b/android/app/CMakeLists.txt index e52a98984..13b63048f 100644 --- a/android/app/CMakeLists.txt +++ b/android/app/CMakeLists.txt @@ -22,7 +22,7 @@ set(${CMAKE_C_FLAGS}, "${CMAKE_C_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -Wall -Werror") add_library(classicube SHARED - ../../src/Program.c + ../../src/main.c ../../src/IsometricDrawer.c ../../src/Builder.c ../../src/ExtMath.c @@ -99,6 +99,9 @@ add_library(classicube SHARED ../../src/LBackend.c ../../src/SystemFonts.c ../../src/Commands.c + ../../src/EntityRenderers.c + ../../src/AudioBackend.c + ../../src/TouchUI.c ) # add lib dependencies diff --git a/android/app/src/main/java/com/classicube/MainActivity.java b/android/app/src/main/java/com/classicube/MainActivity.java index f3a0a068e..2e39cdd81 100644 --- a/android/app/src/main/java/com/classicube/MainActivity.java +++ b/android/app/src/main/java/com/classicube/MainActivity.java @@ -57,6 +57,7 @@ import android.view.inputmethod.InputMethodManager; // implements InputQueue.Callback public class MainActivity extends Activity { + public boolean launcher; // ================================================================== // ---------------------------- COMMANDS ---------------------------- // ================================================================== @@ -72,21 +73,29 @@ public class MainActivity extends Activity NativeCmdArgs args = freeCmds.poll(); return args != null ? args : new NativeCmdArgs(); } - - void pushCmd(int cmd) { + + public void pushCmd(int cmd) { NativeCmdArgs args = getCmdArgs(); args.cmd = cmd; pending.add(args); } - - void pushCmd(int cmd, int a1) { + + public void pushCmd(int cmd, int a1) { NativeCmdArgs args = getCmdArgs(); args.cmd = cmd; args.arg1 = a1; pending.add(args); } + + public void pushCmd(int cmd, int a1, int a2) { + NativeCmdArgs args = getCmdArgs(); + args.cmd = cmd; + args.arg1 = a1; + args.arg2 = a2; + pending.add(args); + } - void pushCmd(int cmd, int a1, int a2, int a3, int a4) { + public void pushCmd(int cmd, int a1, int a2, int a3, int a4) { NativeCmdArgs args = getCmdArgs(); args.cmd = cmd; args.arg1 = a1; @@ -96,45 +105,58 @@ public class MainActivity extends Activity pending.add(args); } - void pushCmd(int cmd, String text) { + public void pushCmd(int cmd, String text) { NativeCmdArgs args = getCmdArgs(); args.cmd = cmd; args.str = text; pending.add(args); } - - void pushCmd(int cmd, Surface surface) { + + public void pushCmd(int cmd, int a1, String str) { + NativeCmdArgs args = getCmdArgs(); + args.cmd = cmd; + args.arg1 = a1; + args.str = str; + pending.add(args); + } + + public void pushCmd(int cmd, Surface surface) { NativeCmdArgs args = getCmdArgs(); args.cmd = cmd; args.sur = surface; pending.add(args); } - final static int CMD_KEY_DOWN = 0; - final static int CMD_KEY_UP = 1; - final static int CMD_KEY_CHAR = 2; - final static int CMD_POINTER_DOWN = 3; - final static int CMD_POINTER_UP = 4; - final static int CMD_POINTER_MOVE = 5; - - final static int CMD_WIN_CREATED = 6; - final static int CMD_WIN_DESTROYED = 7; - final static int CMD_WIN_RESIZED = 8; - final static int CMD_WIN_REDRAW = 9; + public final static int CMD_KEY_DOWN = 0; + public final static int CMD_KEY_UP = 1; + public final static int CMD_KEY_CHAR = 2; + public final static int CMD_POINTER_DOWN = 3; + public final static int CMD_POINTER_UP = 4; + public final static int CMD_POINTER_MOVE = 5; - final static int CMD_APP_START = 10; - final static int CMD_APP_STOP = 11; - final static int CMD_APP_RESUME = 12; - final static int CMD_APP_PAUSE = 13; - final static int CMD_APP_DESTROY = 14; + public final static int CMD_WIN_CREATED = 6; + public final static int CMD_WIN_DESTROYED = 7; + public final static int CMD_WIN_RESIZED = 8; + public final static int CMD_WIN_REDRAW = 9; - final static int CMD_GOT_FOCUS = 15; - final static int CMD_LOST_FOCUS = 16; - final static int CMD_CONFIG_CHANGED = 17; - final static int CMD_LOW_MEMORY = 18; + public final static int CMD_APP_START = 10; + public final static int CMD_APP_STOP = 11; + public final static int CMD_APP_RESUME = 12; + public final static int CMD_APP_PAUSE = 13; + public final static int CMD_APP_DESTROY = 14; - final static int CMD_KEY_TEXT = 19; - final static int CMD_OFD_RESULT = 20; + public final static int CMD_GOT_FOCUS = 15; + public final static int CMD_LOST_FOCUS = 16; + public final static int CMD_CONFIG_CHANGED = 17; + public final static int CMD_LOW_MEMORY = 18; + + public final static int CMD_KEY_TEXT = 19; + public final static int CMD_OFD_RESULT = 20; + + public final static int CMD_UI_CREATED = 21; + public final static int CMD_UI_CLICKED = 22; + public final static int CMD_UI_CHANGED = 23; + public final static int CMD_UI_STRING = 24; // ==================================================================== @@ -385,7 +407,15 @@ public class MainActivity extends Activity // static to persist across activity destroy/create static final Semaphore winDestroyedSem = new Semaphore(0, true); SurfaceHolder.Callback callback; - CCView curView; + public View curView; + + public void setActiveView(View view) { + // setContentView, requestFocus - API level 1 + curView = view; + setContentView(view); + curView.requestFocus(); + if (fullscreen) setUIVisibility(FULLSCREEN_FLAGS); + } // SurfaceHolder.Callback - API level 1 class CCSurfaceCallback implements SurfaceHolder.Callback { @@ -449,107 +479,11 @@ public class MainActivity extends Activity void attachSurface() { // setContentView, requestFocus, getHolder, addCallback, RGBX_8888 - API level 1 createSurfaceCallback(); - curView = new CCView(this); - curView.getHolder().addCallback(callback); - curView.getHolder().setFormat(PixelFormat.RGBX_8888); - - setContentView(curView); - curView.requestFocus(); - if (fullscreen) setUIVisibility(FULLSCREEN_FLAGS); - } + CCView view = new CCView(this); + view.getHolder().addCallback(callback); + view.getHolder().setFormat(PixelFormat.RGBX_8888); - class CCView extends SurfaceView { - SpannableStringBuilder kbText; - - public CCView(Context context) { - // setFocusable, setFocusableInTouchMode - API level 1 - super(context); - setFocusable(true); - setFocusableInTouchMode(true); - } - - @Override - public boolean dispatchTouchEvent(MotionEvent ev) { - return MainActivity.this.handleTouchEvent(ev) || super.dispatchTouchEvent(ev); - } - - @Override - public InputConnection onCreateInputConnection(EditorInfo attrs) { - // BaseInputConnection, IME_ACTION_GO, IME_FLAG_NO_EXTRACT_UI - API level 3 - attrs.actionLabel = null; - attrs.inputType = MainActivity.this.getKeyboardType(); - attrs.imeOptions = MainActivity.this.getKeyboardOptions(); - - kbText = new SpannableStringBuilder(MainActivity.this.keyboardText); - - InputConnection ic = new BaseInputConnection(this, true) { - boolean inited; - void updateText() { MainActivity.this.pushCmd(CMD_KEY_TEXT, kbText.toString()); } - - @Override - public Editable getEditable() { - if (!inited) { - // needed to set selection, otherwise random crashes later with backspacing - // set selection to end, so backspacing after opening keyboard with text still works - Selection.setSelection(kbText, kbText.toString().length()); - inited = true; - } - return kbText; - } - - @Override - public boolean setComposingText(CharSequence text, int newCursorPosition) { - boolean success = super.setComposingText(text, newCursorPosition); - updateText(); - return success; - } - - @Override - public boolean deleteSurroundingText(int beforeLength, int afterLength) { - - boolean success = super.deleteSurroundingText(beforeLength, afterLength); - updateText(); - return success; - } - - @Override - public boolean commitText(CharSequence text, int newCursorPosition) { - boolean success = super.commitText(text, newCursorPosition); - updateText(); - return success; - } - - @Override - public boolean sendKeyEvent(KeyEvent ev) { - // getSelectionStart - API level 1 - if (ev.getAction() != KeyEvent.ACTION_DOWN) return super.sendKeyEvent(ev); - int code = ev.getKeyCode(); - int uni = ev.getUnicodeChar(); - - // start is -1 sometimes, and trying to insert/delete there crashes - int start = Selection.getSelectionStart(kbText); - if (start == -1) start = kbText.toString().length(); - - if (code == KeyEvent.KEYCODE_ENTER) { - // enter maps to \n but that should not be intercepted - } else if (code == KeyEvent.KEYCODE_DEL) { - if (start <= 0) return false; - kbText.delete(start - 1, start); - updateText(); - return false; - } else if (uni != 0) { - kbText.insert(start, String.valueOf((char)uni)); - updateText(); - return false; - } - return super.sendKeyEvent(ev); - } - - }; - //String text = MainActivity.this.keyboardText; - //if (text != null) ic.setComposingText(text, 0); - return ic; - } + setActiveView(view); } @@ -655,8 +589,9 @@ public class MainActivity extends Activity if (curView == null) return; // Try to avoid restarting input if possible - if (curView.kbText != null) { - String curText = curView.kbText.toString(); + CCView view = (CCView)curView; + if (view.kbText != null) { + String curText = view.kbText.toString(); if (text.equals(curText)) return; } @@ -668,9 +603,9 @@ public class MainActivity extends Activity input.restartInput(curView); } - public int getKeyboardType() { + public static int calcKeyboardType(int kbType) { // TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_TEXT_VARIATION_PASSWORD - API level 3 - int type = keyboardType & 0xFF; + int type = kbType & 0xFF; if (type == 2) return InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD; if (type == 1) return InputType.TYPE_CLASS_NUMBER; // KEYBOARD_TYPE_NUMERIC @@ -678,9 +613,9 @@ public class MainActivity extends Activity return InputType.TYPE_CLASS_TEXT; } - public int getKeyboardOptions() { + public static int calcKeyboardOptions(int kbType) { // IME_ACTION_GO, IME_FLAG_NO_EXTRACT_UI - API level 3 - if ((keyboardType & 0x100) != 0) { + if ((kbType & 0x100) != 0) { return EditorInfo.IME_ACTION_SEND | EditorInfo.IME_FLAG_NO_EXTRACT_UI; } else { return EditorInfo.IME_ACTION_GO | EditorInfo.IME_FLAG_NO_EXTRACT_UI;