v0.9.3: notification_send posts on the phone, and Java helpers have a home
The tool was the last Android one that never worked on the NX789J: it would fail with "Notification.Builder.build() failed: no exception detail" and the shade stayed empty. The detail was the whole story -- Qt clears a Java exception before C++ gets to look at it, so a build() that throws and a build() that returns null look exactly the same from here, and the only way to catch the difference is to let Java catch it. - app/android/src/xyz/whcself/cstagent/Notifier.java: the builder, the PendingIntent, build() and notify() in one try/catch that returns "" or the throwable's class and message. androiddeployqt copies app/android/ with the rest of the package source and Qt's Gradle template puts its src/ on java.srcDirs, so a class dropped there needs no build-script change (the first one is this; the foreground service of the next step goes there too). - AndroidTools.cpp keeps what it can see from C++ (the context, the channel on API 26+, the small icon looked up by name, the launch intent) and calls Notifier.post(); the result line now carries the Java failure when there is one. The javaErrorText() helper of the previous attempt is gone: reading a pending exception from C++ is exactly what does not work here. - On the device: the tool answers "notification sent", the system holds the record (channel cst-agent, importance 3, the framework small icon, the tap intent back into the app). Earlier attempts in the same session are in the transcript next to it: four failures from the old path, then this one. Docs: docs/android.md gets the Java-helper mechanism (and why the tool has to be wrapped in Java at all) and no longer lists notification_send as missing; app/README.md's platform table and the Android note say where a Java class goes. Version 0.9.3.
This commit is contained in:
+15
-7
@@ -164,17 +164,25 @@ have, so the script rewrites the shebang of the build-tools wrappers.
|
||||
being asked for the key again. Rotation keeps the session; the sidebar
|
||||
appears in landscape.
|
||||
* Platform tools behind `app:android` (`app/src/platform/android/AndroidTools.cpp`):
|
||||
`clipboard_get` / `clipboard_set` under the engine's own tool names and
|
||||
`share` (`ACTION_SEND` + chooser) both work on the device. The file
|
||||
`notification_send`, `clipboard_get` / `clipboard_set` under the engine's
|
||||
own tool names and `share` (`ACTION_SEND` + chooser) all work on the device.
|
||||
The file
|
||||
card's **Open** builds a `content://` URI through the app's FileProvider
|
||||
(`<package>.qtprovider`, Qt's `@xml/qtprovider_paths`), checks
|
||||
`resolveActivity()` before starting `ACTION_VIEW` and grants the reader
|
||||
permission; **Share** reuses the share sheet.
|
||||
`notification_send` still fails on the NX789J: the channel and the small
|
||||
icon are found, `Notification.Builder.build()` returns null, and Qt clears
|
||||
the Java exception before C++ can read it ("no exception detail"). Catching
|
||||
it needs the call to be wrapped in Java (a small `app/android/src/...`
|
||||
helper class), which is the next step there.
|
||||
* **Java helpers**: a notification built entirely through `QJniObject` posted
|
||||
nothing on the NX789J -- `Notification.Builder.build()` came back null and
|
||||
the tool could only say "failed: no exception detail", because Qt clears a
|
||||
Java exception before C++ gets to look at it. The one step that has to fail
|
||||
visibly (a builder, a `PendingIntent`, `build()`, `notify()`) now lives in
|
||||
`app/android/src/xyz/whcself/cstagent/Notifier.java`, which catches the
|
||||
throwable and hands the text back for the tool result; the device then
|
||||
reported `notification sent` and the shade had it. androiddeployqt copies
|
||||
`app/android/` with the rest of the package source and Qt's Gradle template
|
||||
puts its `src/` on `java.srcDirs`, so **a class dropped in that directory
|
||||
needs no build-script change** -- the front service of the next step goes
|
||||
there too.
|
||||
* A session's transcript replays a delivered file (`deliver_file`) as a card
|
||||
with Open and Share -- the copy lives next to the session, marked `for_user`
|
||||
so no request ever contains it (see `app/README.md`, "Files the agent
|
||||
|
||||
Reference in New Issue
Block a user