From e5f23c3869c5ed2b4cc6cc6d5d22b50be24570c6 Mon Sep 17 00:00:00 2001 From: Fabian Date: Tue, 11 Aug 2026 22:48:23 +0100 Subject: [PATCH 1/5] tests --- .gitignore | 4 +++- buildozer.spec | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 30a75d3..024474f 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,6 @@ test.* test1.* .* !/.github/ -old_app_src \ No newline at end of file +old_app_src +home* +widgets.py \ No newline at end of file diff --git a/buildozer.spec b/buildozer.spec index 5c8b7b0..63c3764 100644 --- a/buildozer.spec +++ b/buildozer.spec @@ -8,9 +8,9 @@ package.name = waller #package.domain = app.vercel package.domain = org.wally author = Fabian © Copyright Info -# Don't use pattern 0.0.0.0 i get some Gradle Error "can't find application path waller." -version = 1.0.9 - +# Don't use pattern 0.0.0.0 i get some Gradle Error "can't find application path waller." unless using android.numeric_version +version = 1.0.9.1 +android.numeric_version = 102410010 source.dir = app_src From 9dac0b966bcc88d3fe2522e967b3bcc3bcf0bc32 Mon Sep 17 00:00:00 2001 From: Fabian Date: Tue, 11 Aug 2026 22:48:45 +0100 Subject: [PATCH 2/5] cleanup: deduplicate android CI into reusable android-build workflow --- .github/workflows/android-build.yml | 146 ++++++++++++++++++++++++++ .github/workflows/android-debug.yml | 94 +---------------- .github/workflows/android-release.yml | 138 +----------------------- 3 files changed, 155 insertions(+), 223 deletions(-) create mode 100644 .github/workflows/android-build.yml diff --git a/.github/workflows/android-build.yml b/.github/workflows/android-build.yml new file mode 100644 index 0000000..6f7b23b --- /dev/null +++ b/.github/workflows/android-build.yml @@ -0,0 +1,146 @@ +name: Build Android APK + +on: + workflow_call: + inputs: + build_type: + description: "android build target: debug or release" + required: true + type: string + secrets: + KEYSTORE_BASE64: + required: false + ALIAS_NAME: + required: false + KS_PASS: + required: false + KEY_PASS: + required: false + +permissions: + contents: write + +jobs: + build-android: + runs-on: ubuntu-22.04 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Get version + id: version + if: inputs.build_type == 'release' + run: | + VERSION=$(grep -Po '^version\s*=\s*\K\S+' buildozer.spec) + echo "VERSION=$VERSION" >> $GITHUB_OUTPUT + echo "Building version $VERSION" + + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + - name: Install system dependencies + run: | + sudo apt update + sudo apt install -y \ + git zip unzip python3-pip \ + autoconf libtool pkg-config zlib1g-dev \ + libncurses-dev libtinfo6 cmake \ + libffi-dev libssl-dev wget + + - name: Add local bin to PATH + run: echo "$HOME/.local/bin" >> $GITHUB_PATH + + - name: Setup Python + Buildozer + run: | + python3 -m venv venv + source venv/bin/activate + pip install --upgrade pip + pip install git+https://github.com/kivy/buildozer \ + Cython==0.29.34 android-widgets legacy-cgi setuptools + + - name: Prepare Android SDK folder + run: mkdir -p ~/.buildozer/android/platform/android-sdk + + - name: Install Android cmdline tools + run: | + cd ~/.buildozer/android/platform/android-sdk + wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip + unzip -q commandlinetools-linux-*.zip + mkdir -p cmdline-tools/latest + mv cmdline-tools/* cmdline-tools/latest || true + + mkdir -p tools/bin + ln -s ~/.buildozer/android/platform/android-sdk/cmdline-tools/latest/bin/sdkmanager tools/bin/sdkmanager + ln -s ~/.buildozer/android/platform/android-sdk/cmdline-tools/latest/bin/avdmanager tools/bin/avdmanager + + - name: Accept Android licenses + run: yes | ~/.buildozer/android/platform/android-sdk/tools/bin/sdkmanager --licenses + + - name: Install Android build-tools + run: yes | ~/.buildozer/android/platform/android-sdk/tools/bin/sdkmanager "build-tools;29.0.0" + + - name: Build APK + run: | + source venv/bin/activate + buildozer -v android ${{ inputs.build_type }} + + - name: Decode keystore + if: inputs.build_type == 'release' + run: echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > my-release-key.jks + + - name: Locate APK + id: apk + run: | + if [ "${{ inputs.build_type }}" = "release" ]; then + APK=$(find ./bin -name "*-release-unsigned.apk" | head -n 1) + else + APK=$(find ./bin -name "*-debug.apk" | head -n 1) + fi + echo "APK=$APK" >> $GITHUB_OUTPUT + echo "Found APK: $APK" + + - name: Zipalign APK + if: inputs.build_type == 'release' + run: | + BUILD_TOOLS=$(ls -d ~/.buildozer/android/platform/android-sdk/build-tools/* | sort -V | tail -n1) + $BUILD_TOOLS/zipalign -v -p 4 "${{ steps.apk.outputs.APK }}" bin/aligned.apk + + - name: Sign APK + if: inputs.build_type == 'release' + run: | + BUILD_TOOLS=$(ls -d ~/.buildozer/android/platform/android-sdk/build-tools/* | sort -V | tail -n1) + "$BUILD_TOOLS/apksigner" sign \ + --ks my-release-key.jks \ + --ks-key-alias ${{ secrets.ALIAS_NAME }} \ + --ks-pass pass:${{ secrets.KS_PASS }} \ + --key-pass pass:${{ secrets.KEY_PASS }} \ + --out bin/waller.apk \ + bin/aligned.apk + + - name: Verify APK + if: inputs.build_type == 'release' + run: | + BUILD_TOOLS=$(ls -d ~/.buildozer/android/platform/android-sdk/build-tools/* | sort -V | tail -n1) + "$BUILD_TOOLS/apksigner" verify --verbose bin/waller.apk + + - name: Create GitHub Release + if: inputs.build_type == 'release' + uses: softprops/action-gh-release@v2 + with: + tag_name: v${{ steps.version.outputs.VERSION }} + name: Release v${{ steps.version.outputs.VERSION }} + body_path: .github/version-notes/release-note-v${{ steps.version.outputs.VERSION }}.txt + files: | + bin/waller.apk + .github/version-notes/update-note-v${{ steps.version.outputs.VERSION }}.txt + + - name: Upload APK artifact + if: inputs.build_type == 'debug' + uses: actions/upload-artifact@v4 + with: + name: waller-debug-apk + path: ${{ steps.apk.outputs.APK }} diff --git a/.github/workflows/android-debug.yml b/.github/workflows/android-debug.yml index 6f72d8c..deda16c 100644 --- a/.github/workflows/android-debug.yml +++ b/.github/workflows/android-debug.yml @@ -1,95 +1,11 @@ -name: Build +name: Build Debug APK on: workflow_dispatch: -permissions: - contents: write - jobs: build-android: - runs-on: ubuntu-22.04 - - steps: - # Checkout repository - - name: Checkout repository - uses: actions/checkout@v4 - - # Setup Java 17 (required for sdkmanager) - - name: Setup Java - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: 17 - - # Install Linux dependencies - - name: Install system dependencies - run: | - sudo apt update - sudo apt install -y \ - git zip unzip python3-pip \ - autoconf libtool pkg-config zlib1g-dev \ - libncurses-dev libtinfo6 cmake \ - libffi-dev libssl-dev wget - - # Add ~/.local/bin to PATH - - name: Add local bin to PATH - run: echo "$HOME/.local/bin" >> $GITHUB_PATH - - # Setup Python environment - - name: Setup Python + Buildozer - run: | - python3 -m venv venv - source venv/bin/activate - pip install --upgrade pip - pip install Cython==0.29.33 buildozer android-widgets - - # Prepare Buildozer SDK folder - - name: Prepare Android SDK folder - run: | - mkdir -p ~/.buildozer/android/platform/android-sdk - - # Install Android command line tools - - name: Install Android cmdline tools - run: | - cd ~/.buildozer/android/platform/android-sdk - - wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip - unzip -q commandlinetools-linux-*.zip - - mkdir -p cmdline-tools/latest - mv cmdline-tools/* cmdline-tools/latest || true - - # Buildozer expects old tools/bin/sdkmanager - mkdir -p tools/bin - - ln -s ~/.buildozer/android/platform/android-sdk/cmdline-tools/latest/bin/sdkmanager tools/bin/sdkmanager - ln -s ~/.buildozer/android/platform/android-sdk/cmdline-tools/latest/bin/avdmanager tools/bin/avdmanager - - # Accept Android licenses - - name: Accept Android licenses - run: | - yes | ~/.buildozer/android/platform/android-sdk/tools/bin/sdkmanager --licenses - - # Install build-tools required for aidl - - name: Install Android build-tools - run: | - yes | ~/.buildozer/android/platform/android-sdk/tools/bin/sdkmanager "build-tools;29.0.0" - - # Build APK - - name: Build APK - id: build - run: | - source venv/bin/activate - pip install android-widgets git+https://github.com/kivy/buildozer legacy-cgi setuptools cython==0.29.34 - buildozer android debug - APK=$(find ./bin -name "*-debug.apk" | head -n 1) - echo "apk=$APK" >> $GITHUB_OUTPUT - echo "Built APK: $APK" - - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: package - path: ${{ steps.build.outputs.apk }} + uses: ./.github/workflows/android-build.yml + with: + build_type: debug + secrets: inherit diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index 6af5a71..2e60ca2 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -3,139 +3,9 @@ name: Build Release APK on: workflow_dispatch: -permissions: - contents: write - jobs: build-android: - runs-on: ubuntu-22.04 - - steps: - # Checkout repository - - name: Checkout repository - uses: actions/checkout@v4 - - # Get version from buildozer.spec (early fail if version is missing) - - name: Get version - id: version - run: | - VERSION=$(grep -Po '^version\s*=\s*\K\S+' buildozer.spec) - echo "VERSION=$VERSION" >> $GITHUB_OUTPUT - echo "Building version $VERSION" - - # Setup Java 17 (required for sdkmanager) - - name: Setup Java - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: 17 - - # Install Linux dependencies - - name: Install system dependencies - run: | - sudo apt update - sudo apt install -y \ - git zip unzip python3-pip \ - autoconf libtool pkg-config zlib1g-dev \ - libncurses-dev libtinfo6 cmake \ - libffi-dev libssl-dev wget - - # Add ~/.local/bin to PATH - - name: Add local bin to PATH - run: echo "$HOME/.local/bin" >> $GITHUB_PATH - - # Setup Python environment - - name: Setup Python + Buildozer - run: | - python3 -m venv venv - source venv/bin/activate - pip install --upgrade pip - pip install Cython==0.29.33 buildozer android-widgets - - # Prepare Buildozer SDK folder - - name: Prepare Android SDK folder - run: | - mkdir -p ~/.buildozer/android/platform/android-sdk - - # Install Android command line tools - - name: Install Android cmdline tools - run: | - cd ~/.buildozer/android/platform/android-sdk - - wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip - unzip -q commandlinetools-linux-*.zip - - mkdir -p cmdline-tools/latest - mv cmdline-tools/* cmdline-tools/latest || true - - # Buildozer expects old tools/bin/sdkmanager - mkdir -p tools/bin - - ln -s ~/.buildozer/android/platform/android-sdk/cmdline-tools/latest/bin/sdkmanager tools/bin/sdkmanager - ln -s ~/.buildozer/android/platform/android-sdk/cmdline-tools/latest/bin/avdmanager tools/bin/avdmanager - - # Accept Android licenses - - name: Accept Android licenses - run: | - yes | ~/.buildozer/android/platform/android-sdk/tools/bin/sdkmanager --licenses - - # Install build-tools required for aidl - - name: Install Android build-tools - run: | - yes | ~/.buildozer/android/platform/android-sdk/tools/bin/sdkmanager "build-tools;29.0.0" - - # Decode keystore - - name: Decode keystore - run: | - echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > my-release-key.jks - - # Build APK - - name: Build APK - run: | - source venv/bin/activate - pip install android-widgets git+https://github.com/kivy/buildozer legacy-cgi setuptools cython==0.29.34 - buildozer -v android release - - # Find unsigned APK - - name: Locate APK - id: apk - run: | - APK=$(find ./bin -name "*-release-unsigned.apk" | head -n 1) - echo "APK=$APK" >> $GITHUB_OUTPUT - echo "Found APK: $APK" - - # Zipalign APK - - name: Zipalign APK - run: | - BUILD_TOOLS=$(ls -d ~/.buildozer/android/platform/android-sdk/build-tools/* | sort -V | tail -n1) - $BUILD_TOOLS/zipalign -v -p 4 "${{ steps.apk.outputs.APK }}" bin/aligned.apk - - # Sign APK - - name: Sign APK - run: | - BUILD_TOOLS=$(ls -d ~/.buildozer/android/platform/android-sdk/build-tools/* | sort -V | tail -n1) - echo "Signing APK with $BUILD_TOOLS/apksigner" - "$BUILD_TOOLS/apksigner" sign \ - --ks my-release-key.jks \ - --ks-key-alias ${{ secrets.ALIAS_NAME }} \ - --ks-pass pass:${{ secrets.KS_PASS }} \ - --key-pass pass:${{ secrets.KEY_PASS }} \ - --out bin/waller.apk \ - bin/aligned.apk - - # Verify APK - - name: Verify APK - run: | - BUILD_TOOLS=$(ls -d ~/.buildozer/android/platform/android-sdk/build-tools/* | sort -V | tail -n1) - "$BUILD_TOOLS/apksigner" verify --verbose bin/waller.apk - - # Create GitHub release - - name: Create GitHub Release - uses: softprops/action-gh-release@v2 - with: - tag_name: v${{ steps.version.outputs.VERSION }} - name: Release v${{ steps.version.outputs.VERSION }} - body_path: .github/version-notes/release-note-v${{ steps.version.outputs.VERSION }}.txt - files: | - bin/waller.apk - .github/version-notes/update-note-v${{ steps.version.outputs.VERSION }}.txt + uses: ./.github/workflows/android-build.yml + with: + build_type: release + secrets: inherit From 2426a33fbe96ed017aaef7f3d71fca2df88ad2f4 Mon Sep 17 00:00:00 2001 From: Fabian Date: Tue, 11 Aug 2026 23:28:01 +0100 Subject: [PATCH 3/5] tested on android 15 --- app_src/ui/screens/full_screen.py | 31 ++++++++++++++++++++++-- app_src/ui/widgets/layouts.py | 40 ++++++++++++++++++++++++++++--- 2 files changed, 66 insertions(+), 5 deletions(-) diff --git a/app_src/ui/screens/full_screen.py b/app_src/ui/screens/full_screen.py index f2b1488..1274f3a 100644 --- a/app_src/ui/screens/full_screen.py +++ b/app_src/ui/screens/full_screen.py @@ -30,6 +30,8 @@ from kivy.loader import Loader from utils.logger import app_logger from kivy.core.window import Window +from android_notify.internal.java_classes import autoclass +from android_notify.config import get_python_activity_context, on_android_platform my_config=ConfigManager() @@ -318,7 +320,7 @@ def __init__(self, **kwargs): # Bind events self.btn_delete.bind(on_release=lambda x:dialog_popup.show(img_texture=self.carousel.current_slide.texture)) self.btn_info.bind(on_release=self.show_info) - self.btn_fullscreen.bind(on_release=self.toggle_fullscreen) + self.btn_fullscreen.bind(on_release=self.enter_preview_mode) # self.set_wallpaper_btn.bind(on_release=lambda x: change_wallpaper(self.carousel.current_slide.higher_format)) self.set_wallpaper_btn.bind(on_release=self.set_as_wallpaper) @@ -343,7 +345,7 @@ def _set_theme_color(self, _, theme): self.btn_fullscreen.icon_color = tc self.share_btn.icon_color = tc - def toggle_fullscreen(self, *_): + def enter_preview_mode(self, *_): self.is_fullscreen = True self.carousel.size_hint = (1, 1) @@ -359,6 +361,9 @@ def toggle_fullscreen(self, *_): img.fit_mode = "cover" self.layout.do_layout() + if on_android_platform(): + self.hide_system_ui() + self.generic_status_bar_spacer.status_bar_height=0 def handle_going_back(self, *_): if self.is_fullscreen: @@ -562,6 +567,9 @@ def leave_preview_mode(self,*_): for img in self.carousel.slides: img.fit_mode = "contain" + if on_android_platform(): + self.show_system_ui() + self.generic_status_bar_spacer.status_bar_height=self.status_bar_height def back_to_gallery_screen(self,*_): if self.showing_info_modal: self.info_popup.dismiss() @@ -573,3 +581,22 @@ def back_to_gallery_screen(self,*_): def patch_resolution(proxy_image, image_object): image_object.texture = proxy_image.image.texture + +def hide_nav_btn_and_status_bar(): + if not on_android_platform(): + return + try: + View = autoclass('android.view.View') + decor_view = get_python_activity_context().getWindow().getDecorView() + decor_view.setSystemUiVisibility( + View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + ) + except Exception as error_hiding_nav_btn_and_status_bar: + app_logger.exception(error_hiding_nav_btn_and_status_bar) + + diff --git a/app_src/ui/widgets/layouts.py b/app_src/ui/widgets/layouts.py index 738a7a8..1876349 100644 --- a/app_src/ui/widgets/layouts.py +++ b/app_src/ui/widgets/layouts.py @@ -5,7 +5,7 @@ # from kivy.uix.floatlayout import FloatLayout from kivymd.uix.widget import MDWidget -from android_notify.config import on_android_platform, autoclass +from android_notify.config import on_android_platform, autoclass, get_python_activity_context from kivy.metrics import dp from kivy.properties import ListProperty, DictProperty, NumericProperty from kivymd.uix.boxlayout import MDBoxLayout @@ -30,6 +30,28 @@ # Add this before creating your main widget or in your build method Window.softinput_mode = 'below_target' # or 'pan' +if on_android_platform(): + View = autoclass("android.view.View") + from jnius import PythonJavaClass, java_method + class _SystemUiRunnable(PythonJavaClass): + __javainterfaces__ = ['java/lang/Runnable'] + __javacontext__ = 'app' + + def __init__(self, flags): + super().__init__() + self.flags = flags + + @java_method('()V') + def run(self): + PythonActivity = autoclass("org.kivy.android.PythonActivity") + activity = PythonActivity.mActivity + decor = activity.getWindow().getDecorView() + decor.setSystemUiVisibility(self.flags) + + +def _set_system_ui_visibility(flags): + activity = get_python_activity_context() + activity.runOnUiThread(_SystemUiRunnable(flags)) class Row(MDBoxLayout): my_widgets = ListProperty([]) @@ -418,7 +440,19 @@ def on_leave(self, *args): Window.unbind(on_key_down=self._on_key_down) Window.unbind(on_key_up=self._on_key_up) # app_logger.info(f"[BackKey] MyMDScreen.on_leave screen='{self.name}' -> unbound on_key_down + on_key_up") - + + def show_system_ui(self): + _set_system_ui_visibility(0) + self.screen_content.padding = [0,0,0,self.nav_bar_height] + + def hide_system_ui(self): + _set_system_ui_visibility( + View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + ) + self.screen_content.padding = [0,0,0,0] + class GenericStatusBarSpacer(MDWidget): status_bar_height=NumericProperty(0) @@ -427,7 +461,7 @@ def __init__(self, **kwargs): self.size_hint=[1, None] self.pos_hint={'center_x': .5, 'top': 1} self.height=self.status_bar_height - self.bind(height=lambda _,value: setattr(self, 'height', value)) + self.bind(status_bar_height=lambda _,value: setattr(self, 'height', value)) # NOTE this from kivymd.uix.button import MDButton has line color feature # Still Useful for Element with No Button Behavior From a697510534535d3b2d7dab3979d18c8347079048 Mon Sep 17 00:00:00 2001 From: Fabian Date: Tue, 11 Aug 2026 23:37:42 +0100 Subject: [PATCH 4/5] fix: use WindowInsetsController for system ui visibility on API 30+ --- app_src/ui/widgets/layouts.py | 48 +++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/app_src/ui/widgets/layouts.py b/app_src/ui/widgets/layouts.py index 1876349..e10b0a1 100644 --- a/app_src/ui/widgets/layouts.py +++ b/app_src/ui/widgets/layouts.py @@ -32,26 +32,42 @@ if on_android_platform(): View = autoclass("android.view.View") + WindowInsetsType = autoclass("android.view.WindowInsets$Type") + WindowInsetsController = autoclass("android.view.WindowInsetsController") from jnius import PythonJavaClass, java_method class _SystemUiRunnable(PythonJavaClass): __javainterfaces__ = ['java/lang/Runnable'] __javacontext__ = 'app' - def __init__(self, flags): + def __init__(self, hide): super().__init__() - self.flags = flags + self.hide = hide @java_method('()V') def run(self): - PythonActivity = autoclass("org.kivy.android.PythonActivity") - activity = PythonActivity.mActivity - decor = activity.getWindow().getDecorView() - decor.setSystemUiVisibility(self.flags) - - -def _set_system_ui_visibility(flags): + decor = get_python_activity_context().getWindow().getDecorView() + if BuildVersion.SDK_INT >= 30: + controller = decor.getWindowInsetsController() + bars = WindowInsetsType.statusBars() | WindowInsetsType.navigationBars() + if self.hide: + controller.setSystemBarsBehavior( + WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + ) + controller.hide(bars) + else: + controller.show(bars) + else: + flags = ( + View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + ) if self.hide else 0 + decor.setSystemUiVisibility(flags) + + +def _set_system_ui_visibility(hide): activity = get_python_activity_context() - activity.runOnUiThread(_SystemUiRunnable(flags)) + activity.runOnUiThread(_SystemUiRunnable(hide)) class Row(MDBoxLayout): my_widgets = ListProperty([]) @@ -442,15 +458,15 @@ def on_leave(self, *args): # app_logger.info(f"[BackKey] MyMDScreen.on_leave screen='{self.name}' -> unbound on_key_down + on_key_up") def show_system_ui(self): - _set_system_ui_visibility(0) + if not on_android_platform(): + return + _set_system_ui_visibility(False) self.screen_content.padding = [0,0,0,self.nav_bar_height] def hide_system_ui(self): - _set_system_ui_visibility( - View.SYSTEM_UI_FLAG_FULLSCREEN - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY - ) + if not on_android_platform(): + return + _set_system_ui_visibility(True) self.screen_content.padding = [0,0,0,0] From 6757726621407ea6f5ea753160f392a77c87bc50 Mon Sep 17 00:00:00 2001 From: Fabian Date: Tue, 11 Aug 2026 23:48:52 +0100 Subject: [PATCH 5/5] ci: build debug apk on pull requests as a test --- .github/workflows/android-debug.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/android-debug.yml b/.github/workflows/android-debug.yml index deda16c..d7cadeb 100644 --- a/.github/workflows/android-debug.yml +++ b/.github/workflows/android-debug.yml @@ -2,6 +2,11 @@ name: Build Debug APK on: workflow_dispatch: + pull_request: + +concurrency: + group: debug-build-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true jobs: build-android: