Add secondary FAB for GPS trip#79495
Conversation
|
Hey, I noticed you changed If you want to automatically generate translations for other locales, an Expensify employee will have to:
Alternatively, if you are an external contributor, you can run the translation script locally with your own OpenAI API key. To learn more, try running: npx ts-node ./scripts/generateTranslations.ts --helpTypically, you'd want to translate only what you changed by running |
|
|
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
🦜 Polyglot Parrot! 🦜Squawk! Looks like you added some shiny new English strings. Allow me to parrot them back to you in other tongues: View the translation diffdiff --git a/src/languages/de.ts b/src/languages/de.ts
index eed35d8c..0773f0fd 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -7989,11 +7989,8 @@ Hier ist ein *Testbeleg*, um dir zu zeigen, wie es funktioniert:`,
subtitle: 'Protokolliere Meilen oder Kilometer automatisch mit GPS und verwandle Fahrten sofort in Ausgaben.',
button: 'App herunterladen',
},
- notification: {
- title: 'GPS tracking in progress',
- body: 'Go to the app to finish',
- },
- fabGpsTripExplained: 'Go to GPS screen (Floating action)',
+ notification: {title: 'GPS-Tracking läuft', body: 'Zur App gehen, um abzuschließen'},
+ fabGpsTripExplained: 'Zur GPS-Ansicht wechseln (Schnellaktion)',
},
};
// IMPORTANT: This line is manually replaced in generate translation files by scripts/generateTranslations.ts,
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 3c246ef4..9992c257 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -7994,11 +7994,8 @@ Voici un *reçu test* pour vous montrer comment cela fonctionne :`,
subtitle: 'Enregistrez automatiquement les miles ou kilomètres avec le GPS et transformez instantanément vos trajets en dépenses.',
button: 'Télécharger l’application',
},
- notification: {
- title: 'GPS tracking in progress',
- body: 'Go to the app to finish',
- },
- fabGpsTripExplained: 'Go to GPS screen (Floating action)',
+ notification: {title: 'Suivi GPS en cours', body: 'Allez dans l’application pour terminer'},
+ fabGpsTripExplained: 'Aller à l’écran GPS (action flottante)',
},
};
// IMPORTANT: This line is manually replaced in generate translation files by scripts/generateTranslations.ts,
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 28504111..bc27d434 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -7971,11 +7971,8 @@ Ecco una *ricevuta di prova* per mostrarti come funziona:`,
subtitle: 'Registra automaticamente miglia o chilometri con il GPS e trasforma i viaggi in spese all’istante.',
button: 'Scarica l’app',
},
- notification: {
- title: 'GPS tracking in progress',
- body: 'Go to the app to finish',
- },
- fabGpsTripExplained: 'Go to GPS screen (Floating action)',
+ notification: {title: 'Tracciamento GPS in corso', body: "Vai all'app per terminare"},
+ fabGpsTripExplained: 'Vai alla schermata GPS (azione flottante)',
},
};
// IMPORTANT: This line is manually replaced in generate translation files by scripts/generateTranslations.ts,
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 127786ff..4b7acf99 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -7890,11 +7890,8 @@ Expensify の使い方をお見せするための*テストレシート*がこ
},
preciseLocationRequiredModal: {title: '正確な位置情報が必要です', prompt: 'GPS距離の追跡を開始するには、デバイスの設定で「正確な位置情報」を有効にしてください。'},
desktop: {title: 'スマートフォンで距離を記録する', subtitle: 'GPS で自動的にマイルまたはキロメートルを記録し、移動をすぐに経費に変換します。', button: 'アプリをダウンロード'},
- notification: {
- title: 'GPS tracking in progress',
- body: 'Go to the app to finish',
- },
- fabGpsTripExplained: 'Go to GPS screen (Floating action)',
+ notification: {title: 'GPS追跡を実行中', body: '完了するにはアプリに移動'},
+ fabGpsTripExplained: 'GPS画面へ移動(フローティングアクション)',
},
};
// IMPORTANT: This line is manually replaced in generate translation files by scripts/generateTranslations.ts,
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 93efd34a..ee9d879d 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -7942,7 +7942,6 @@ Hier is een *testbon* om je te laten zien hoe het werkt:`,
confirm: 'Afstandstracking negeren',
},
zeroDistanceTripModal: {title: 'Kan geen uitgave aanmaken', prompt: 'Je kunt geen uitgave aanmaken met dezelfde begin- en eindlocatie.'},
-
locationRequiredModal: {
title: 'Locatietoegang vereist',
prompt: 'Sta locatietoegang toe in de instellingen van je apparaat om GPS-afstandsregistratie te starten.',
@@ -7954,11 +7953,8 @@ Hier is een *testbon* om je te laten zien hoe het werkt:`,
},
preciseLocationRequiredModal: {title: 'Precieze locatie vereist', prompt: 'Schakel "precieze locatie" in de instellingen van je apparaat in om GPS-afstandsregistratie te starten.'},
desktop: {title: 'Volg afstand op je telefoon', subtitle: 'Leg kilometers of mijlen automatisch vast met GPS en zet ritten direct om in uitgaven.', button: 'Download de app'},
- notification: {
- title: 'GPS tracking in progress',
- body: 'Go to the app to finish',
- },
- fabGpsTripExplained: 'Go to GPS screen (Floating action)',
+ notification: {title: 'GPS-tracking bezig', body: 'Ga naar de app om te voltooien'},
+ fabGpsTripExplained: 'Ga naar GPS-scherm (Zwevende actie)',
},
};
// IMPORTANT: This line is manually replaced in generate translation files by scripts/generateTranslations.ts,
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 19f1477d..a2764d1f 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -7917,7 +7917,6 @@ Oto *paragon testowy*, który pokazuje, jak to działa:`,
confirm: 'Odrzuć śledzenie dystansu',
},
zeroDistanceTripModal: {title: 'Nie można utworzyć wydatku', prompt: 'Nie możesz utworzyć wydatku z tym samym miejscem początkowym i końcowym.'},
-
locationRequiredModal: {
title: 'Wymagany dostęp do lokalizacji',
prompt: 'Aby rozpocząć śledzenie dystansu GPS, zezwól na dostęp do lokalizacji w ustawieniach swojego urządzenia.',
@@ -7936,11 +7935,8 @@ Oto *paragon testowy*, który pokazuje, jak to działa:`,
subtitle: 'Automatycznie rejestruj mile lub kilometry za pomocą GPS i natychmiast zamieniaj podróże w wydatki.',
button: 'Pobierz aplikację',
},
- notification: {
- title: 'GPS tracking in progress',
- body: 'Go to the app to finish',
- },
- fabGpsTripExplained: 'Go to GPS screen (Floating action)',
+ notification: {title: 'Śledzenie GPS w toku', body: 'Przejdź do aplikacji, aby dokończyć'},
+ fabGpsTripExplained: 'Przejdź do ekranu GPS (przycisk akcji)',
},
};
// IMPORTANT: This line is manually replaced in generate translation files by scripts/generateTranslations.ts,
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index aa35cb95..f573f47b 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -7929,7 +7929,6 @@ Aqui está um *recibo de teste* para mostrar como funciona:`,
confirm: 'Descartar rastreamento de distância',
},
zeroDistanceTripModal: {title: 'Não é possível criar a despesa', prompt: 'Você não pode criar uma despesa com o mesmo local de partida e de chegada.'},
-
locationRequiredModal: {
title: 'Acesso à localização necessário',
prompt: 'Permita o acesso à localização nas configurações do seu dispositivo para iniciar o rastreamento de distância por GPS.',
@@ -7948,11 +7947,8 @@ Aqui está um *recibo de teste* para mostrar como funciona:`,
subtitle: 'Registre milhas ou quilômetros automaticamente com o GPS e transforme viagens em despesas instantaneamente.',
button: 'Baixar o app',
},
- notification: {
- title: 'GPS tracking in progress',
- body: 'Go to the app to finish',
- },
- fabGpsTripExplained: 'Go to GPS screen (Floating action)',
+ notification: {title: 'Rastreamento por GPS em andamento', body: 'Ir para o app para finalizar'},
+ fabGpsTripExplained: 'Ir para a tela de GPS (Ação flutuante)',
},
};
// IMPORTANT: This line is manually replaced in generate translation files by scripts/generateTranslations.ts,
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index d33f00dd..3c60843b 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -7741,11 +7741,8 @@ ${reportName}
androidBackgroundLocationRequiredModal: {title: '需要后台位置访问权限', prompt: '请在设备设置中允许应用使用“始终允许”位置访问权限,以开始 GPS 距离跟踪。'},
preciseLocationRequiredModal: {title: '需要精确位置', prompt: '请在设备设置中启用“精确位置”以开始 GPS 距离跟踪。'},
desktop: {title: '在手机上跟踪距离', subtitle: '使用 GPS 自动记录英里或公里,并将行程即时转换为报销费用。', button: '下载应用程序'},
- notification: {
- title: 'GPS tracking in progress',
- body: 'Go to the app to finish',
- },
- fabGpsTripExplained: 'Go to GPS screen (Floating action)',
+ notification: {title: '正在进行 GPS 跟踪', body: '前往应用完成'},
+ fabGpsTripExplained: '前往 GPS 屏幕(悬浮操作)',
},
};
// IMPORTANT: This line is manually replaced in generate translation files by scripts/generateTranslations.ts,
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
|
@dukenv0307 Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
@heyjennahay please ignore, @AndrewGable will review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: dfc4aa5f41
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| } | ||
|
|
||
| const navigateToGpsScreen = () => { | ||
| const optimisticReportID = generateReportID(); |
There was a problem hiding this comment.
Should we get it from transactionDraft?
There was a problem hiding this comment.
Yeah, makes sense, thanks
There was a problem hiding this comment.
Actually transactionDraft can be overwritten when user navigates to a different Track distance tab, I'll think about what's the best solution here 🤔
|
@GCyganek Left some comments. The rest looks good |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppScreen.Recording.2026-01-20.at.22.09.20.movAndroid: mWeb ChromeiOS: HybridAppScreen.Recording.2026-01-20.at.22.02.49.moviOS: mWeb SafariMacOS: Chrome / Safari |
|
The UI looks good, can you please take a look @Expensify/design ? |
|
UI is looking good to me - though I assume handling that tooltip dismissal is part of a different PR (it shouldn't keep popping up like that every time)? cc @dubielzyk-expensify for eyes too! |
Yes, there will be a PR that handles tooltip soon :) |
|
@dukenv0307 I decided to add |
|
Sound good! Thank you @GCyganek |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
What is going on here? CleanShot.2026-01-21.at.09.28.48.mp4 |
I just checked and it looks the same before the changes from this PR were merged with camera floating button only. Could be an emulator related artifact, I do not have access to any iOS device today, but I can check tomorrow if it happens on a real device. on Android it looks fine |
|
🚀 Deployed to staging by https://github.com/AndrewGable in version: 9.3.6-0 🚀
|
|
🚀 Deployed to production by https://github.com/Beamanator in version: 9.3.6-4 🚀
|
Explanation of Change
Adding secondary FAB for the GPS trip when there is one ongoing
Fixed Issues
$ #77221 (comment)
PROPOSAL: N/A
Tests
Startto start the tripOffline tests
QA Steps
Same as tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Screen.Recording.2026-01-13.at.16.35.41.mov
iOS: Native
Screen.Recording.2026-01-13.at.17.08.13.mov