• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kivy / kivy / 30202678850
60%

Build:
DEFAULT BRANCH: master
Ran 26 Jul 2026 12:58PM UTC
Jobs 2
Files 346
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

26 Jul 2026 12:45PM UTC coverage: 60.361% (+0.1%) from 60.228%
30202678850

push

github

web-flow
kivy.mobile: pull the Android Activity from the bootstrap instead of a hardcoded PythonActivity (#9352)

* kivy.mobile: pull the Android Activity from the bootstrap

The Android backend reflected a hardcoded org.kivy.android.PythonActivity.  That
is a python-for-android implementation detail, and it silently breaks any build
whose activity is named something else, including p4a's own
--activity-class-name.

Kivy now names no activity class.  It imports a top-level `_kivy_bootstrap`
module supplied by whoever built the APK and pulls the Activity from it on every
access, so nothing goes stale when Android recreates the Activity on rotation,
configuration change or process death.  A missing module while an Android
runtime is present raises ActivityProviderMissing rather than degrading to
plausible-looking defaults, since it can only mean the app was built by
something that does not support Kivy 3; off-device the getters keep returning
their documented defaults.

Kivy pulls rather than the bootstrap registering a provider at startup.  p4a
runs the app's main.py as the process entry point, so it has no Python of its
own to register from, and registering would mean importing Kivy before the app
could set its KIVY_* environment and config.

Two optional members keep bootstraps that differ from p4a working: get_context()
for processes that never have an Activity, and remove_presplash(), because
dismissing a splash belongs to the bootstrap -- p4a removes an overlaid View,
while a bootstrap using the Android 12 system splash has no such method to
offer.  base.py's remove_android_splash now goes through that hook.

app.py and clipboard_android.py move off PythonActivity onto the backend, which
gains run_on_ui_thread(), get_files_dir() and get_cache_dir() so neither needs
jnius boilerplate or an Activity of its own; the clipboard also stops stashing
state on the Activity class.  Afterwards no PythonActivity or mActivity
reference remains outside the test harness.... (continued)

3289 of 6511 branches covered (50.51%)

159 of 193 new or added lines in 4 files covered. (82.38%)

23 existing lines in 9 files now uncovered.

29689 of 49186 relevant lines covered (60.36%)

1.19 hits per line

Uncovered Changes

Lines Coverage ∆ File
20
0.0
0.0% kivy/core/clipboard/clipboard_android.py
9
91.45
-2.08% kivy/mobile/_platform/android.py
4
63.55
1.17% kivy/app.py
1
98.88
0.01% kivy/tests/test_mobile.py

Coverage Regressions

Lines Coverage ∆ File
4
51.68
-1.34% kivy/core/__init__.py
4
74.6
-2.38% kivy/core/video/__init__.py
4
64.96
-1.02% kivy/modules/inspector.py
3
0.0
-100.0% kivy/core/video/video_null.py
2
71.15
66.35% kivy/core/audio_output/audio_ffpyplayer.py
2
45.87
43.8% kivy/core/video/video_ffpyplayer.py
2
49.68
-0.26% kivy/data/style.kv
1
0.0
0.0% kivy/core/clipboard/clipboard_android.py
1
93.18
56.82% kivy/tests/test_audio.py
Jobs
ID Job ID Ran Files Coverage
1 30202678850.1 26 Jul 2026 12:58PM UTC 346
60.32
GitHub Action Run
2 30202678850.2 26 Jul 2026 01:00PM UTC 346
58.89
GitHub Action Run
Source Files on build 30202678850
  • Tree
  • List 346
  • Changed 6
  • Source Changed 6
  • Coverage Changed 6
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #30202678850
  • d6c598ca on github
  • Prev Build on master (#30072869306)
  • Next Build on master (#30280648899)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc