First stable release. Merging this bumps versionName to 1.0.0 and triggers the release pipeline (F-Droid, Codeberg, Play). **App** - CalDAV sync built in, with Agendula's own task store; OpenTasks / tasks.org stay available and can be copied over in Settings → Storage - repeating tasks, several reminders per task, lists managed in the app, iCalendar import/export, widget and Quick Settings tile - a list can be kept out of the smart lists (#18) and gets its own notification channel (#17) - duplicate a task with its subtasks (#16) - HTML descriptions shown as plain text (#15) - relative day words in reminder notifications (#14) - asks for exact-alarm access instead of claiming USE_EXACT_ALARM, and re-arms reminders when that access changes **Release plumbing** - floret-kit bumped to v0.4.0; the old pin was never pushed, so a clean clone couldn't check out the submodule. 0.4.0 drops CrashConfig.issueTitle (crash issues are always filed in English) - prebuilt .so files ship unstripped, so the build no longer depends on whether an NDK is installed; now checked by check_reproducible_release.sh - official F-Droid recipe in docs/fdroid-official/, to submit to fdroiddata once v1.0.0 is tagged - Google Play: fastlane uploads the AAB and every locale's What's New after the F-Droid release; a separate listing lane pushes text and graphics from the fastlane tree, which CI now checks against Play's limits - store listing: title "Agendula: Tasks" in every locale, icon, feature graphic, screenshots and 1.0.0 changelogs in en-US, en-GB, de-DE and pt-BR crash_report_issue_title is now unused but stays until Weblate removes the translated copies. Closes #14, closes #15, closes #16, closes #17, closes #18 Co-authored-by: Jean-Luc Makiola <business@jeanlucmakiola.de> Reviewed-on: https://codeberg.org/jlmakiola/agendula/pulls/20
36 lines
1.5 KiB
Bash
Executable File
36 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Capture the emulator screen and frame it in the AVD's device skin, like
|
|
# Android Studio's "Take screenshot" with the device frame on.
|
|
#
|
|
# usage: scripts/emulator_screenshot.sh <name> [serial]
|
|
# writes design/store/raw/<name>.png and design/store/framed/<name>.png
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
|
|
NAME="${1:?need a name, e.g. 01-today}"
|
|
SERIAL="${2:-emulator-5554}"
|
|
SDK="${ANDROID_HOME:-$HOME/Android/Sdk}"
|
|
|
|
AVD=$(adb -s "$SERIAL" emu avd name | head -1 | tr -d '\r')
|
|
SKIN=$(grep -oP '^skin.path=\K.*' "$HOME/.android/avd/$AVD.avd/config.ini" || true)
|
|
[ -n "$SKIN" ] || SKIN="$SDK/skins/$(grep -oP '^skin.name=\K.*' "$HOME/.android/avd/$AVD.avd/config.ini")"
|
|
[ -f "$SKIN/layout" ] || { echo "No skin layout for $AVD at $SKIN" >&2; exit 1; }
|
|
|
|
# Screen offset inside the frame: the `device` part of the portrait layout.
|
|
read -r X Y < <(awk '/part2/{p=1} p&&/ x /{x=$2} p&&/ y /{print x, $2; exit}' "$SKIN/layout")
|
|
|
|
mkdir -p design/store/raw design/store/framed
|
|
RAW="design/store/raw/$NAME.png"
|
|
OUT="design/store/framed/$NAME.png"
|
|
adb -s "$SERIAL" exec-out screencap -p > "$RAW"
|
|
|
|
BACK=$(ls "$SKIN"/back.* | head -1)
|
|
MASK=$(ls "$SKIN"/mask.* 2>/dev/null | head -1 || true)
|
|
magick "$BACK" -alpha set -background none \
|
|
\( -size "$(magick identify -format '%wx%h' "$BACK")" xc:none \
|
|
"$RAW" -geometry "+$X+$Y" -composite \
|
|
${MASK:+"$MASK" -geometry "+$X+$Y" -composite} \) \
|
|
+swap -composite "$OUT"
|
|
|
|
echo "$OUT ($(magick identify -format '%wx%h' "$OUT"), frame $(basename "$SKIN"))"
|