Skip to content

Remove flight photos from Android

The owner asked (2026-10-20) to make flight photos on Android work as on iOS, without the manual “Add photos…”, or else to remove the feature from Android.

The iOS way is not possible on Android under Google Play’s rules, so the feature leaves Android.

iOSAndroid today
How photos are foundAutomatically: PhotoKit reads the library for the photos taken during the flight, each time the flight opensThe pilot picks them with the system photo picker (⋮ › Photos › Add photos…), kept per flight in Room (decisions §9 D6)
PermissionPhoto library accessNone (the picker needs no permission)

To search the library by date, Android needs READ_MEDIA_IMAGES (and ACCESS_MEDIA_LOCATION to read where a photo was taken). Since 28 May 2025, Google Play’s Photo and Video Permissions policy lets an app request it only when the system photo picker cannot provide the app’s core functionality, which is in practice gallery and photo editing apps. Every other app must use the picker, and an app that requests the permission without an accepted declaration can be removed from Play. Photos on the flight map are not Vulture’s core function, and the picker can serve it (Android does that today), so the declaration would be refused. In addition, the library on the phone only holds photos stored on the device, not the ones that only exist in Google Photos’ cloud.

Sources: Details on Google Play’s Photo and Video Permissions policy, Policy preview (both read 2026-10-20).

On Android, after this change:

  • The flight map’s ⋮ menu has no Photos submenu (Add photos…, Show your photos).
  • The flight map draws no photo markers, and there is no photo pager.
  • Settings › Flight display has no Show your photos row.
  • Photos picked before are forgotten. Only the links to them are removed; the photos themselves stay on the phone.
  • iOS does not change.
DataChange
Room flight_photo (local, not synced, P8B-D3)Dropped in a migration (schema 4 → 5)
Synced setting arePhotosVisible (iOS “Show your photos”)Kept in SyncedSettings and the codec, without a row on Android, so a value set on an iPhone round-trips unchanged

None. Android’s WeGlide upload sends no photos (it has no stories, P7-D18).

The photo strings that only Android used (photos_message_skipped and the Photos submenu’s) can go. Strings shared with iOS through strings_ios.xml stay, as that file mirrors iOS.

#QuestionDecisionDate
1Flight photos as on iOS, without a manual add?Not possible within Google Play’s policy (see above), so photos leave Android (owner: “otherwise I want this feature out of android”).2026-10-20
2Photos picked beforeForgotten: the table is dropped, nothing is migrated.2026-10-20
3The synced “Show your photos” settingKept and round-tripped, with no row on Android.2026-10-20

Decisions 2 and 3 are defaults taken while writing this up; the owner can overrule them. Decision 1 replaces decisions §9 D6 and D17 (Coil for the pager).

None.

No changes.

Code (vulture-android)Change
feature/photos (PhotoAdding.kt, PhotoPager.kt, data/, model/), settings.gradle.kts, app/build.gradle.kts, feature/flightmap/build.gradle.ktsRemove the module
gradle/libs.versions.tomlRemove Coil, which only the pager uses
feature/flightmap/.../data/FlightMapPhotos.kt, di/FlightMapModule.kt, FlightMapViewModel.kt, FlightMapUiState.kt, FlightMapScreen.kt, topbar/OverflowMenu.ktRemove the photo state, the Photos submenu and the pager
core/map/.../flightmap/PhotoFeatures.kt, FlightMapController.kt, MapboxFlightMapController.ktRemove the photos source, its layers and its tap handling (photos were checked before thermals)
data/db (FlightPhotoEntity, FlightPhotoDao, VultureDatabase, Migrations.kt, FlightRepository, SyncDao)Drop flight_photo in migration 4 → 5; remove the entity and DAO
feature/settings/.../flightdisplay/Remove the Show your photos row
app/src/debug/.../lab/PhotoLab.kt, MapLab.kt, GestureLab.ktRemove the photo lab and the photo parts of the others
data/prefs (SyncedSettings.arePhotosVisible), domain/sync/SettingsCodec.ktKeep (decision 3)

Tests: the migration drops the table; the menu, settings and map tests without photos; screenshots. READMEs of the touched modules. Changelog, under Removed: “Your photos on the flight map: Android does not let Vulture find the photos of a flight by itself, as the iPhone does”.

No changes.

  • vulture-android: remove the photos feature, the module and Coil; the migration; tests; screenshots; READMEs; changelog (2026-10-20). exifinterface went too (only the photos read EXIF); photos_message_skipped and the submenu’s strings left with :feature:photos.
  • vulture-docs: when built, set Android to not-planned on Flight photos (with this analysis in notes), update decisions §9 D6/D17 and P8B-D3 in Port decisions, Flight screens where it describes Android’s photos, and set status: shipped.