Skip to content

Feat/material3 expressive redesign - #2

Merged
zelbloo merged 4 commits into
mainfrom
feat/material3-expressive-redesign
Jul 26, 2026
Merged

Feat/material3 expressive redesign#2
zelbloo merged 4 commits into
mainfrom
feat/material3-expressive-redesign

Conversation

@zelbloo

@zelbloo zelbloo commented Jul 26, 2026

Copy link
Copy Markdown
Owner

No description provided.

zelbloo added 4 commits July 26, 2026 21:26
Assembles both variants, uploads them as artifacts, then runs lint.

- JDK 21, to match the project's compileOptions.
- The Android SDK packages are pinned to platform 37 / build-tools 36.0.0,
  so a runner image update cannot silently change what we compile against.
  The step also accepts the SDK licenses, which is what lets AGP fetch
  anything else it needs.
- The wrapper is checksum-validated before it is executed.
- Lint runs after the artifact uploads, so a lint regression still leaves
  an installable APK attached to the run.
- Concurrency is per branch with cancel-in-progress: a newer push makes the
  running build irrelevant.

The release variant is signed with the debug key, as the project is set up
today (app/build.gradle.kts), so these artifacts are for testing and cannot
upgrade an install signed with a real release key.
Triggered by a v* tag: builds the release variant, attaches the APK to a
GitHub release with generated notes, and marks tags containing a hyphen
(v1.05-beta1) as pre-releases. workflow_dispatch runs the same build and
uploads the APK as an artifact without publishing, so the signing setup can
be checked before a tag is pushed.

Release signing comes from repository secrets, which required a change to
app/build.gradle.kts: the release buildType hardcoded the debug signing
config. It now uses a release config built from KEYSTORE_FILE and friends,
falling back to the debug key when those are unset, so local builds behave
exactly as they did before. To sign for real, set these secrets:

  KEYSTORE_BASE64    base64 of the .jks   (base64 -w0 release.jks)
  KEYSTORE_PASSWORD
  KEY_ALIAS
  KEY_PASSWORD

Without them the workflow still succeeds, but it annotates the run and the
release body with a warning that the APK carries the debug signature.

The keystore is written to RUNNER_TEMP, deleted straight after the build,
and the release notes carry the APK's SHA-256 so a sideloaded download can
be checked.
The first run failed in the Android SDK step: there is no
'platforms;android-37' package. AGP 9 uses minor-versioned platforms, so
the id is 'platforms;android-37.0', and pinning it here duplicates what
compileSdk already states.

Let AGP resolve and download the platform and build-tools it needs, which
it does once the licenses are accepted, and leave this step to accept
them.
Permission is granted outside this screen — Shizuku shows its own dialog —
so nothing was telling the app about it. The list stayed empty behind the
"permissions required" dialog until the app was restarted.

- UserServiceProvider exposes the bind state as a StateFlow, updated by
  Connection on connect and disconnect. MainScreenVm watches it and loads
  the list as soon as the privileged service binds. The current value is
  dropped: if the service was already bound at startup, the load kicked off
  in init succeeds by itself.
- Pull to refresh on the app list. The empty state is rendered as a
  full-height item inside the LazyColumn rather than a plain Box, so it
  stays scrollable and can be pulled too, which is exactly the state you
  are in before access has been granted.

The permission request had a second dead end. It ran once in onCreate and
only if Shizuku's binder was already alive, so opening this app before
starting Shizuku meant permission was never requested at all, and onResume
only ever bound an already-granted service. "Proceed" then just re-ran the
detection and found the same nothing.

- The request now runs on every resume, guarded by a flag so a declined
  dialog is not re-shown, seeded from savedInstanceState so a rotation does
  not re-ask.
- "Proceed" asks Shizuku for permission instead of only re-detecting.
@zelbloo
zelbloo merged commit 991faca into main Jul 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant