Conversation
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Regtest APKDownload bitkit-dev-debug universal APK (expires in 30 days). |
jvsena42
left a comment
There was a problem hiding this comment.
Approved — no HIGH/MEDIUM findings at head c9be3ec33. (Posted as a comment because GitHub does not allow approving your own PR.)
Checked: Every one of the 22 BitrefillCategory entries keeps its route string byte-for-byte (buy/apparel through buy/voip, including buy/health-beauty and buy/food-delivery), so the Bitrefill pages loaded by the web view are unchanged. A git grep at head shows the enum's only consumer is ShopTabContent in ShopDiscoverScreen.kt; no other main, test or androidTest code read the removed title field. The resolved string feeds both the row label and Routes.ShopWebView.title, which ShopWebViewScreen.kt only uses as display text in the top bar (line 57), never in a URL. VoIP is translatable="false", & is escaped correctly, and the 22 new keys sit in alphabetical order before other__shop__discover__*.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
# Conflicts: # journeys/README.md
# Conflicts: # journeys/README.md
jvsena42
left a comment
There was a problem hiding this comment.
Approved — no blocking HIGH/MEDIUM findings at head fe1f4fd1f. (Posted as a comment because GitHub does not allow approving your own PR.)
Inline: LOW — Journey passes unchanged on master, so it cannot detect a revert to hardcoded titles
Checked: Round 4 (f2663e4, new journey): Reviewed the journey commit f2663e4. The route in works on the dev build: bitkit://screen/shop-discover resolves through ScreenDeepLinks (enabled only in the debug ScreenDeepLinkRuntime, queued behind dev mode), Routes.ShopDiscover is deepLinkableComposable, and nothing geoblocks or flag-gates the Shop routes. Tab-shop and Tab-map come from CustomTabRowWithSpacing ("Tab-${tab.name.lowercase()}"), the header is Text13Up upper-casing "Gift card categories", the 22 rows match the enum order and the default strings, the web view top bar is "${nav_title} $title" = "Shop Food Delivery", and values-de has other__shop__discover__tabs__map = "Karte", so the locale switch is confirmed on screen. The README suite row and the cross-platform "not ported" row are both present. The one gap: no step fails if the enum goes back to hardcoded English.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jvsena42
left a comment
There was a problem hiding this comment.
Approved — no blocking HIGH/MEDIUM findings at head 6646dde27. (Posted as a comment because GitHub does not allow approving your own PR.)
Checked: Follow-up: Reviewed 6646dde only. The description no longer claims the journey proves resource-backed titles and states that a pass is not proof of localization. Its cited facts hold at head: the 22 other__shop__categories__* values sit at values/strings.xml:572-593 with the same English text the enum carried, only values/strings.xml defines those keys, and localeFilters.addAll(androidLocales) is at app/build.gradle.kts:276. The German step now expects all 22 rows in order with English text and "Karte" for the Map tab (values-de other__shop__discover__tabs__map), which is what the app renders, so a runner gets neither a false fail nor a claimed localization pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jvsena42
left a comment
There was a problem hiding this comment.
Approved — no blocking HIGH/MEDIUM findings at head 124c2959e. (Posted as a comment because GitHub does not allow approving your own PR.)
Checked: Follow-up on 124c295: test-only. BitrefillCategoryTest pins each enum entry to the string resource named after it, requires distinct non-blank labels, and requires every route to be a distinct buy/<slug> path, which is the regression guard the journey cannot provide until translations land.
|
@jvsena42 conflicts |
# Conflicts: # journeys/README.md
# Conflicts: # journeys/README.md
There was a problem hiding this comment.
Verdict: ✅ Approve
Reaudit: diff 1 file.
Counterpart synonymdev/bitkit-ios#722: not compared.
Findings:
N/A
Audit:
Already done in comment.
QA: emu-1 Pixel 10 Pro emulator on Android 16/API 36, dev debug build app-dev-arm64-v8a-debug.apk
-
✅ passed: All 22 category titles remained ordered in English, and Health & Beauty rendered unescaped.
-
✅ passed: Food Delivery opened with the Shop Food Delivery title and loaded Bitrefill listings.
-
✅ passed: German locale kept the app running, translated the chrome, and fell back to English category titles.
-
✅ passed: Both the Travel card and Travel category row opened the loaded Bitrefill Travel page.
Ticked Manual Tests 1-4 in the PR body.
Tip
Test 1 worth a journey:
- Open the drawer and tap Shop
- Continue past the Shop intro
- Verify the Shop and Map tabs and the gift card categories header
- Scroll from Apparel to VoIP and verify all 22 titles stay in order
- Verify Health & Beauty shows an ampersand
Test 2 worth a journey:
- Open Shop Discover
- Scroll to Food Delivery
- Tap Food Delivery
- Verify the top bar reads Shop Food Delivery
- Wait for Bitrefill and verify the Food Delivery listings load
Test 3 worth a journey:
- Leave the Food Delivery page with the device back button
- Set the Bitkit app locale to German
- Force-stop and relaunch Bitkit
- Open Shop Discover with the screen deeplink
- Verify translated chrome includes Karte
- Scroll through all 22 category rows and verify they stay in English and in order
- Clear the app locale and relaunch
- Verify the English wallet overview returns
Test 4 worth a journey:
- Open Shop Discover
- Tap the large Travel card
- Verify the Shop Travel header and loaded Bitrefill Travel listings
- Return to Shop Discover
- Scroll to the Travel category row
- Tap the Travel category row
- Verify the Shop Travel header and loaded Bitrefill Travel listings again
Coverage:
QA: 4 of 4 manual tests passed
Reviewed by gpt-5.6-sol-high via gh-pr-review-loop skill
Commands: @ovi-reviewer review · test · retest · audit (author or owner)





Fixes #715
Related to #1275
This PR moves the Shop gift card category titles into string resources so they can be translated.
Description
Out of Scope
values-*/strings.xml: translations for the new keys arrive with the next Transifex pull; until then every locale shows the English titles.other__shop__categories__travel: kept as its own key next toother__shop__discover__travel__titleso every category follows one naming scheme, even though both read "Travel".journeys/shop/gift-card-category-titles.xml: the journey written during device verification is committed with this PR and its row added tojourneys/README.md; the diff is inlined below too.Design
Preview
Test-only build with a temporary, uncommitted
values-deoverride for three keys, showing the resources are wired end to end:QA Notes
Manual Tests
regression:App locale set to a non-English language → Shop Discover: no crash; chrome is translated and category rows fall back to English until Transifex sync.regression:Shop Discover → Travel card and Travel category row: both open the Bitrefill travel page.The journey covers tests 1 to 3. It was run against this branch and every step passed, and it is committed at
journeys/shop/gift-card-category-titles.xml; the same diff is inlined below.gift-card-category-titles.xml
Automated Checks
BitrefillCategoryTest.kt: Robolectric test pinned toen-rUSthat asserts each of the 22BitrefillCategoryentries points at the string resource named after it, that the resolved labels are distinct and non-blank, and that the routes are distinctbuy/paths. Negative control: swapping theAPPARELandAUTOMOBILESids fails the resource-name check and passes the other two.values-*translations.just compile,just testandjust lintpass.