feat(android): Java activity for keyboard text and the system file dialog (Issue #42)

InkActivity extends NativeActivity:
- An invisible view with its own input connection receives the soft
  keyboard's text (commitText, deleteSurroundingText), so characters
  without a key event (umlauts by long press, ...) arrive as well. The
  field is a visible-password field, so keyboards commit each character
  instead of composing words.
- Import and "insert image" open the system file dialog
  (ACTION_OPEN_DOCUMENT); the chosen file is copied to the cache folder
  and handed to Rust by path.

src/android_bridge.rs calls the activity through JNI and receives its
native calls; package-android.sh compiles the class with javac and d8.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
haraldandClaude Opus 5.5 committed 2026-10-27 21:23:52 +01:00
1 parent a8aef30db7
commit 0be321837c
10 files changed
+472 -20

No files matched your search

+4 -3
View File
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Manifest of the Android app (Issue #42). scripts/package-android.sh fills in the version.
NativeActivity loads libink_notes.so, whose android_main runs the app. -->
InkActivity (packaging/android/java) extends NativeActivity, which loads libink_notes.so;
its android_main runs the app. -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="eu.pansi.inknotes"
android:versionCode="@VERSION_CODE@"
@@ -11,13 +12,13 @@
<application
android:label="ink-notes"
android:icon="@mipmap/ic_launcher"
android:hasCode="false"
android:hasCode="true"
android:extractNativeLibs="true"
android:theme="@android:style/Theme.Material.Light.NoActionBar">
<!-- configChanges: rotating the tablet or attaching a keyboard must not restart the
activity; the app adapts to the new window size itself -->
<activity
android:name="android.app.NativeActivity"
android:name="eu.pansi.inknotes.InkActivity"
android:exported="true"
android:launchMode="singleTask"
android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|keyboard|keyboardHidden|navigation|density|uiMode|fontScale|locale|layoutDirection">