Commit Graph

13 Commits

Author SHA1 Message Date
b4c2e19988 Android: fix OpenPGP service bind for modern Keychain.
Keychain 6.0.4 no longer exports the legacy
org.openintents.openpgp.api.OpenPgpService action, so the OpenPgpServiceConnection
from openpgp-api.jar bound nothing and every encrypt/decrypt died with a
NullPointerException in OpenPgpApi.executeApi.

Bind our own ServiceConnection against org.openintents.openpgp.IOpenPgpService
(falling back to the legacy action for older Keychain releases), and queue
API calls until the service is actually connected instead of racing the
async bind.

Also fix the //go:generate recipe: it built one jar containing both
PgpConnect and Permissions, which collides with Permissions.jar when gogio
dexes every *.jar in the repo root.
2026-08-26 18:11:10 -04:00
4c337ff06d Guard the JNI fragment registration against the null detach view.
Gio's GioView.onDestroyView signals detach with ViewEvent{View: 0};
handleEvent already filters these, but add defense in depth so any
caller forwarding the event unfiltered cannot drive the JNI path
(GetObjectClass on a null ref aborts the process, the recents-wipe
SIGABRT). Completes the intent of PR #1, whose handleEvent guard is
already in master from the migration commit.

Fixes: recents-wipe crash defense (PR #1 superseded).
2026-08-21 15:29:24 -04:00
dc7661e226 Android: launch the 'All files access' settings screen at startup.
MANAGE_EXTERNAL_STORAGE (needed to read the store at
/storage/emulated/0/...) cannot be requested with a runtime
permission dialog; the user must toggle it in system settings.
Port the mechanism from the pad app:

- Permissions.java: a Fragment registered at window attach that
  launches Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
  (per-app settings screen) when Environment.isExternalStorageManager()
  is false on API 30+ (runtime READ_EXTERNAL_STORAGE request on
  older APIs). The guard means the screen appears only until the
  user grants it.
- The compiled classes ship in PgpConnect.jar's directory jar
  (Permissions.jar); gogio picks *.jar up from the package dir and
  dexes them. go:generate now rebuilds it.
- jni_android.c/h: registerPermissionsFragment(), mirroring
  registerFragment() for PgpConnect.
- Impl wiring: call it from the AndroidViewEvent handler right
  after InitPgp.

Verified on the x86_64 emulator: with the appop denied the system
settings screen opens automatically on launch; after granting it,
launch is clean and list + OpenKeychain decryption from
/sdcard/Pass work end to end.
2026-08-21 14:44:38 -04:00
af1b878308 passgo package: modernize for go 1.24; reset store.Empty in GetStore.
- Update to //go:build tags, gofmt, and the android-35 javac template
  in //go:generate.
- GetStore: reset store.Empty when the store directory exists (it was
  only set true when the dir was missing, so a reconfigured store kept
  the stale 'Empty' state and showed the configure button).
- Rebuild PgpConnect.jar (android-35).
2026-08-21 13:00:04 -04:00
ec0b64f5f5 Migrating to new Gio version (non-working version). 2020-08-31 17:03:07 -04:00
94cfbbeb41 Update Gio version. Working Android implementation. 2019-11-26 13:24:03 -05:00
4fc504b89a Restructure for automatic Fragment registration by Gio. 2019-11-21 18:18:47 -05:00
23df75fd15 Add permissions request, comment out debug print statements. 2019-11-20 16:44:28 -05:00
8aacb243d2 Implement Clip on Android. 2019-11-20 14:56:11 -05:00
8611bfb5e0 Cleanups in Android implementation. 2019-11-20 13:53:40 -05:00
46c76ed065 Start of Android implementation. 2019-11-20 11:52:19 -05:00
12b57d263f go fmt 2019-09-10 11:36:03 -04:00
2c4c708b3a Re-arrange platform-dependent code. 2019-09-10 11:31:57 -04:00