Add Glovo, hidden Diagnostics gesture, and food provider picker - #83
Merged
Merged
Conversation
Confirmed via CI logs (release.yml run for v1.0.0.41) that KEYSTORE_FILE/KEYSTORE_PASSWORD/KEY_ALIAS/KEY_PASSWORD are all empty in this repo, so app/build.gradle's release build falls back to debug signing. Each GitHub Actions job runs on a fresh, ephemeral VM with no persisted ~/.android/debug.keystore, so that fallback generates a new, different debug keystore on every run - meaning every published GitHub Release APK is signed with a different certificate than the previous one. Android refuses to install an update whose signing certificate doesn't match the currently-installed app's, so the in-app "Update to latest" flow always downloads the new APK successfully and then always fails at install time, regardless of network conditions or device. Add a guard step that fails the workflow with a clear error instead of silently publishing another release nobody can update to, until the real signing secrets are configured in the repo. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01147MnP2Vf5sDY2BT7UhBbn
- Comparison configuration section in Settings (above Updates): pick exactly 2 of Uber Eats / Bolt Food / Glovo to compare on "Search Food". Tapping a third option swaps out whichever of the current 2 was picked least recently, so the pair never drops below or exceeds 2. Persisted via a new ComparisonConfigRepository (SharedPreferences), defaulting to Uber Eats + Bolt Food. - Added Glovo as a third food delivery provider: package name (com.glovo) confirmed via the Play Store listing, search deep link is a best-effort guess (documented, along with everything else known about these deep links, in docs/DEEP_LINKS.md #5) since no shipped manifest was available to verify a host against, unlike Bolt Food. - Generalized the food search plumbing (FoodDeliveryProvider enum, FoodDeepLinks.createSearchLink, MainViewModel, MainActivity) from a hardcoded Uber Eats/Bolt Food pair to whichever 2 providers are currently selected. - Fixed a latent package-visibility bug found while wiring this up: the manifest's <queries> block only listed the ride apps, so PackageManager.getPackageInfo() for the food apps (isAppInstalled) would throw NameNotFoundException on API 30+ regardless of whether they were actually installed. Added all three food package names. - Diagnostics (Bolt Link Lab) in Settings is now hidden until the Settings title is tapped 10 times, keeping it out of regular users' way while still reachable for on-device deep-link debugging. - Changed the main screen's primary button text from "Compare" to "Compare Trips". Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01147MnP2Vf5sDY2BT7UhBbn
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
ComparisonConfigRepository(SharedPreferences), defaulting to Uber Eats + Bolt Food.com.glovo) confirmed via the Play Store listing; the search deep link is a best-effort guess since no shipped manifest was available to verify a host against (unlike Bolt Food's confirmed/searchApp Link). Fully documented, including confidence level, indocs/DEEP_LINKS.md(Bolt deep link is broken #5).FoodDeliveryProviderenum,FoodDeepLinks.createSearchLink,MainViewModel,MainActivity) from a hardcoded Uber Eats/Bolt Food pair to whichever 2 providers are currently selected.Bonus fix
While wiring up
isAppInstalled()for the food providers, found that the manifest's<queries>block only listed the ride apps (com.ubercab,ee.mtakso.client) - on API 30+,PackageManager.getPackageInfo()for any package not in that list throwsNameNotFoundExceptionregardless of whether it's actually installed, which means the food-app "installed" warnings were silently broken on modern Android. Addedcom.ubercab.eats,com.bolt.deliveryclient, andcom.glovoto<queries>.Test plan
FoodDeepLinksTest,MainViewModelFoodSearchTest,ComparisonConfigRepositoryImplTest(new),SettingsViewModelTest(new, covers the 10-tap gesture and the exactly-2 swap logic)MainActivityEspressoTestfor the new button text./gradlew test/lintlocally in this sandbox (network egress todl.google.comfor the Android Gradle Plugin is blocked here) - relying on CI (PR Checkworkflow) to validate🤖 Generated with Claude Code
https://claude.ai/code/session_01147MnP2Vf5sDY2BT7UhBbn
Generated by Claude Code