diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index 91b10f7f..e5d6d0c2 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -14,12 +14,13 @@ jobs: - name: Setup Java uses: actions/setup-java@v4 with: - java-version: 17.x + java-version: '17' + distribution: 'oracle' - name: Setup Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: 3 + ruby-version: '3.2' - name: Setup Flutter uses: subosito/flutter-action@v2 @@ -63,7 +64,7 @@ jobs: flutter build linux --release cd flatpak/scripts dart pub get - dart flatpak_packager.dart --meta ../flatpak_meta.json --github + dart flatpak_packager.dart --meta ../flatpak_meta.json --github --addTodaysVersion ${{ env.VERSION }} - name: Build AAB run: flutter build appbundle --release @@ -71,9 +72,9 @@ jobs: WGER_API_KEY: ${{ secrets.WGER_API_KEY }} - name: Upload build to Play Store - uses: maierj/fastlane-action@v3.0.0 - with: - lane: production + run: | + bundle install + bundle exec fastlane android production - name: Make Github release uses: softprops/action-gh-release@v1 @@ -120,6 +121,6 @@ jobs: git add pubspec.yaml git commit -m "Bump version to $( flutter pub run cider version )" git tag ${{ env.VERSION }} - git push ${{ env.VERSION }} - git push --delete ${{ env.VERSION_V }} + git push origin ${{ env.VERSION }} + git push origin --delete ${{ env.VERSION_V }} git push \ No newline at end of file diff --git a/AUTHORS.md b/AUTHORS.md index 5940c34d..b617a4a7 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -23,10 +23,14 @@ - artchiee - - Tejas Bir Singh - - Abhishek Saini - +- Hanaa Allohibi - - Shey Alnasrawi - ## Translators +- Saudi Arabian + - Hanaa Allohibi + - German - mondstern (2) diff --git a/Gemfile.lock b/Gemfile.lock index c8df7aea..e0b3d076 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,25 +3,25 @@ GEM specs: CFPropertyList (3.0.6) rexml - addressable (2.8.5) + addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) artifactory (3.0.15) atomos (0.1.3) - aws-eventstream (1.2.0) - aws-partitions (1.853.0) - aws-sdk-core (3.187.0) - aws-eventstream (~> 1, >= 1.0.2) + aws-eventstream (1.3.0) + aws-partitions (1.877.0) + aws-sdk-core (3.190.2) + aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) - aws-sigv4 (~> 1.5) + aws-sigv4 (~> 1.8) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.72.0) - aws-sdk-core (~> 3, >= 3.184.0) + aws-sdk-kms (1.76.0) + aws-sdk-core (~> 3, >= 3.188.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.137.0) - aws-sdk-core (~> 3, >= 3.181.0) + aws-sdk-s3 (1.142.0) + aws-sdk-core (~> 3, >= 3.189.0) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.6) - aws-sigv4 (1.6.1) + aws-sigv4 (~> 1.8) + aws-sigv4 (1.8.0) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) claide (1.1.0) @@ -32,10 +32,10 @@ GEM declarative (0.0.20) digest-crc (0.6.5) rake (>= 12.0.0, < 14.0.0) - domain_name (0.6.20231109) + domain_name (0.6.20240107) dotenv (2.8.1) emoji_regex (3.2.3) - excon (0.104.0) + excon (0.109.0) faraday (1.10.3) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) @@ -64,8 +64,8 @@ GEM faraday-retry (1.0.3) faraday_middleware (1.2.0) faraday (~> 1.0) - fastimage (2.2.7) - fastlane (2.217.0) + fastimage (2.3.0) + fastlane (2.219.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -84,6 +84,7 @@ GEM gh_inspector (>= 1.1.2, < 2.0.0) google-apis-androidpublisher_v3 (~> 0.3) google-apis-playcustomapp_v1 (~> 0.1) + google-cloud-env (>= 1.6.0, < 2.0.0) google-cloud-storage (~> 1.31) highline (~> 2.0) http-cookie (~> 1.0.5) @@ -92,7 +93,7 @@ GEM mini_magick (>= 4.9.4, < 5.0.0) multipart-post (>= 2.0.0, < 3.0.0) naturally (~> 2.2) - optparse (~> 0.1.1) + optparse (>= 0.1.1) plist (>= 3.1.0, < 4.0.0) rubyzip (>= 2.0.0, < 3.0.0) security (= 0.1.3) @@ -107,7 +108,7 @@ GEM xcpretty-travis-formatter (>= 0.0.3) fastlane-plugin-versioning (0.5.2) gh_inspector (1.1.3) - google-apis-androidpublisher_v3 (0.52.0) + google-apis-androidpublisher_v3 (0.54.0) google-apis-core (>= 0.11.0, < 2.a) google-apis-core (0.11.2) addressable (~> 2.5, >= 2.5.1) @@ -122,19 +123,19 @@ GEM google-apis-core (>= 0.11.0, < 2.a) google-apis-playcustomapp_v1 (0.13.0) google-apis-core (>= 0.11.0, < 2.a) - google-apis-storage_v1 (0.29.0) + google-apis-storage_v1 (0.31.0) google-apis-core (>= 0.11.0, < 2.a) - google-cloud-core (1.6.0) - google-cloud-env (~> 1.0) + google-cloud-core (1.6.1) + google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) google-cloud-errors (1.3.1) - google-cloud-storage (1.45.0) + google-cloud-storage (1.47.0) addressable (~> 2.8) digest-crc (~> 0.4) google-apis-iamcredentials_v1 (~> 0.1) - google-apis-storage_v1 (~> 0.29.0) + google-apis-storage_v1 (~> 0.31.0) google-cloud-core (~> 1.6) googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) @@ -149,7 +150,7 @@ GEM domain_name (~> 0.5) httpclient (2.8.3) jmespath (1.6.2) - json (2.6.3) + json (2.7.1) jwt (2.7.1) mini_magick (4.12.0) mini_mime (1.1.5) @@ -157,9 +158,9 @@ GEM multipart-post (2.3.0) nanaimo (0.3.0) naturally (2.2.1) - optparse (0.1.1) + optparse (0.4.0) os (1.1.4) - plist (3.7.0) + plist (3.7.1) public_suffix (5.0.4) rake (13.1.0) representable (3.2.0) @@ -185,7 +186,7 @@ GEM unicode-display_width (>= 1.1.1, < 3) trailblazer-option (0.1.2) tty-cursor (0.7.1) - tty-screen (0.8.1) + tty-screen (0.8.2) tty-spinner (0.9.3) tty-cursor (~> 0.7) uber (0.1.0) diff --git a/fastlane/metadata/android/ca/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/ca/images/phoneScreenshots/01 - dashboard.png index d3c5fff7..94309dd1 100644 Binary files a/fastlane/metadata/android/ca/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/ca/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/ca/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/ca/images/phoneScreenshots/02 - workout detail.png index dde86efc..6fe046a8 100644 Binary files a/fastlane/metadata/android/ca/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/ca/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/ca/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/ca/images/phoneScreenshots/03 - gym mode.png index c4eb428c..35ec1a78 100644 Binary files a/fastlane/metadata/android/ca/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/ca/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/ca/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/ca/images/phoneScreenshots/04 - measurements.png index 68a85478..157f90d0 100644 Binary files a/fastlane/metadata/android/ca/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/ca/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/ca/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/ca/images/phoneScreenshots/05 - nutritional plan.png index 8099005f..05b9ff04 100644 Binary files a/fastlane/metadata/android/ca/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/ca/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/ca/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/ca/images/phoneScreenshots/06 - weight.png index 1d519720..b6d9455d 100644 Binary files a/fastlane/metadata/android/ca/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/ca/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/ca/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/ca/images/tenInchScreenshots/01 - dashboard.png index 61372e4e..27908569 100644 Binary files a/fastlane/metadata/android/ca/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/ca/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/ca/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/ca/images/tenInchScreenshots/02 - workout detail.png index 097161f0..445e575d 100644 Binary files a/fastlane/metadata/android/ca/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/ca/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/ca/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/ca/images/tenInchScreenshots/03 - gym mode.png index fcf79544..461e8f9b 100644 Binary files a/fastlane/metadata/android/ca/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/ca/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/ca/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/ca/images/tenInchScreenshots/04 - measurements.png index 808a77bc..42b37da3 100644 Binary files a/fastlane/metadata/android/ca/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/ca/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/ca/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/ca/images/tenInchScreenshots/05 - nutritional plan.png index 34f96c72..aa12a8d6 100644 Binary files a/fastlane/metadata/android/ca/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/ca/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/ca/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/ca/images/tenInchScreenshots/06 - weight.png index df0b3d91..f6419c32 100644 Binary files a/fastlane/metadata/android/ca/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/ca/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/01 - dashboard.png index bf3a8ece..83bef4fd 100644 Binary files a/fastlane/metadata/android/de-DE/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/02 - workout detail.png index 070220ea..f30bdc39 100644 Binary files a/fastlane/metadata/android/de-DE/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/03 - gym mode.png index d3ecec56..99cf8bb4 100644 Binary files a/fastlane/metadata/android/de-DE/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/04 - measurements.png index 36e3161d..92bc0439 100644 Binary files a/fastlane/metadata/android/de-DE/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/05 - nutritional plan.png index ad569028..01df4c80 100644 Binary files a/fastlane/metadata/android/de-DE/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/06 - weight.png index 681bbb0a..634da29f 100644 Binary files a/fastlane/metadata/android/de-DE/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/de-DE/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/de-DE/images/tenInchScreenshots/01 - dashboard.png index 947f780a..df1bca97 100644 Binary files a/fastlane/metadata/android/de-DE/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/de-DE/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/de-DE/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/de-DE/images/tenInchScreenshots/02 - workout detail.png index 6b5d1bb9..1d5a6907 100644 Binary files a/fastlane/metadata/android/de-DE/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/de-DE/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/de-DE/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/de-DE/images/tenInchScreenshots/03 - gym mode.png index 7daa84e7..3e33192d 100644 Binary files a/fastlane/metadata/android/de-DE/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/de-DE/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/de-DE/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/de-DE/images/tenInchScreenshots/04 - measurements.png index c85c18e4..df92f03c 100644 Binary files a/fastlane/metadata/android/de-DE/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/de-DE/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/de-DE/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/de-DE/images/tenInchScreenshots/05 - nutritional plan.png index 681db0c8..e1fc2281 100644 Binary files a/fastlane/metadata/android/de-DE/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/de-DE/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/de-DE/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/de-DE/images/tenInchScreenshots/06 - weight.png index 059aa620..0ac0f2fa 100644 Binary files a/fastlane/metadata/android/de-DE/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/de-DE/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/01 - dashboard.png index 9a646423..591f9586 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/02 - workout detail.png index 4f099a13..d4052db6 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/03 - gym mode.png index 9bcf025e..51c15478 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/04 - measurements.png index f92f0292..b48cad2c 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/05 - nutritional plan.png index dfdd5f79..7d20ebc9 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/06 - weight.png index 174f3078..943a98dd 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/en-US/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/en-US/images/tenInchScreenshots/01 - dashboard.png index c2d8c6d9..486afa89 100644 Binary files a/fastlane/metadata/android/en-US/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/en-US/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/en-US/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/en-US/images/tenInchScreenshots/02 - workout detail.png index 1846b51e..f94cbb22 100644 Binary files a/fastlane/metadata/android/en-US/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/en-US/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/en-US/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/en-US/images/tenInchScreenshots/03 - gym mode.png index d2c1e70b..825c85b0 100644 Binary files a/fastlane/metadata/android/en-US/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/en-US/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/en-US/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/en-US/images/tenInchScreenshots/04 - measurements.png index 99e2fad8..09d47fd8 100644 Binary files a/fastlane/metadata/android/en-US/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/en-US/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/en-US/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/en-US/images/tenInchScreenshots/05 - nutritional plan.png index d9b2dcfe..370eb146 100644 Binary files a/fastlane/metadata/android/en-US/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/en-US/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/en-US/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/en-US/images/tenInchScreenshots/06 - weight.png index 8e56083e..8dcfa0ca 100644 Binary files a/fastlane/metadata/android/en-US/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/en-US/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/01 - dashboard.png index 0e2fab9a..a7707302 100644 Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/02 - workout detail.png index 19053690..e3b438f6 100644 Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/03 - gym mode.png index 0245db19..1318ae44 100644 Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/04 - measurements.png index e21483d2..191d1337 100644 Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/05 - nutritional plan.png index c830d563..76fd0663 100644 Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/06 - weight.png index 2f0a7937..7d3f9515 100644 Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/es-ES/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/es-ES/images/tenInchScreenshots/01 - dashboard.png index 8b7205e0..0ad31865 100644 Binary files a/fastlane/metadata/android/es-ES/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/es-ES/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/es-ES/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/es-ES/images/tenInchScreenshots/02 - workout detail.png index 5db7020d..2642a0d3 100644 Binary files a/fastlane/metadata/android/es-ES/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/es-ES/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/es-ES/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/es-ES/images/tenInchScreenshots/03 - gym mode.png index 7f044e3a..c6ac7483 100644 Binary files a/fastlane/metadata/android/es-ES/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/es-ES/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/es-ES/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/es-ES/images/tenInchScreenshots/04 - measurements.png index 959c6b1e..689a2d20 100644 Binary files a/fastlane/metadata/android/es-ES/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/es-ES/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/es-ES/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/es-ES/images/tenInchScreenshots/05 - nutritional plan.png index 1d4e48a3..28ad6f65 100644 Binary files a/fastlane/metadata/android/es-ES/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/es-ES/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/es-ES/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/es-ES/images/tenInchScreenshots/06 - weight.png index 75c398c7..700e746e 100644 Binary files a/fastlane/metadata/android/es-ES/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/es-ES/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/01 - dashboard.png index 614385a7..1911c4b9 100644 Binary files a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/02 - workout detail.png index f196593a..09ba2e03 100644 Binary files a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/03 - gym mode.png index 7de86c3f..e53727fa 100644 Binary files a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/04 - measurements.png index b0f61a0c..7811ff11 100644 Binary files a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/05 - nutritional plan.png index 9b856c1a..2f3af904 100644 Binary files a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/06 - weight.png index a90d5f75..82bf994c 100644 Binary files a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/01 - dashboard.png index 5a2065f0..0bc569fc 100644 Binary files a/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/02 - workout detail.png index 9fbea689..6fb043d4 100644 Binary files a/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/03 - gym mode.png index f5f2f355..2bbf89bf 100644 Binary files a/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/04 - measurements.png index b907f735..1b3a23fe 100644 Binary files a/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/05 - nutritional plan.png index 17e487cf..062a42cd 100644 Binary files a/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/06 - weight.png index 1bd13e2c..87ee976b 100644 Binary files a/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/01 - dashboard.png index 6424a776..44a8673b 100644 Binary files a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/02 - workout detail.png index 53633b50..1c10efc5 100644 Binary files a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/03 - gym mode.png index 556e8d9f..66d765a5 100644 Binary files a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/04 - measurements.png index 37fe29b1..0ab424a7 100644 Binary files a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/05 - nutritional plan.png index fade0968..60a06e73 100644 Binary files a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/06 - weight.png index 6fc7b59d..9f160979 100644 Binary files a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/01 - dashboard.png index 186619e3..8cf19109 100644 Binary files a/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/02 - workout detail.png index e64e6696..599a8496 100644 Binary files a/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/03 - gym mode.png index f6b42328..83187365 100644 Binary files a/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/04 - measurements.png index 1d886453..2800a103 100644 Binary files a/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/05 - nutritional plan.png index bbe6b5af..09efe851 100644 Binary files a/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/06 - weight.png index efaa837e..d45c1acc 100644 Binary files a/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/hi-IN/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/hr/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/hr/images/phoneScreenshots/01 - dashboard.png index 610e9b17..0ca52983 100644 Binary files a/fastlane/metadata/android/hr/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/hr/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/hr/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/hr/images/phoneScreenshots/02 - workout detail.png index 83ed0bab..9ef5d174 100644 Binary files a/fastlane/metadata/android/hr/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/hr/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/hr/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/hr/images/phoneScreenshots/03 - gym mode.png index 4483d31a..98ac1539 100644 Binary files a/fastlane/metadata/android/hr/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/hr/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/hr/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/hr/images/phoneScreenshots/04 - measurements.png index 043b8d8b..7dafde01 100644 Binary files a/fastlane/metadata/android/hr/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/hr/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/hr/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/hr/images/phoneScreenshots/05 - nutritional plan.png index 64a4cb30..cf64316d 100644 Binary files a/fastlane/metadata/android/hr/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/hr/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/hr/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/hr/images/phoneScreenshots/06 - weight.png index 56f2f84f..0a299658 100644 Binary files a/fastlane/metadata/android/hr/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/hr/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/hr/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/hr/images/tenInchScreenshots/01 - dashboard.png index a9af66e5..f289e417 100644 Binary files a/fastlane/metadata/android/hr/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/hr/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/hr/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/hr/images/tenInchScreenshots/02 - workout detail.png index 089e1559..e0e6269b 100644 Binary files a/fastlane/metadata/android/hr/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/hr/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/hr/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/hr/images/tenInchScreenshots/03 - gym mode.png index 2addbe6e..2d24f17e 100644 Binary files a/fastlane/metadata/android/hr/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/hr/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/hr/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/hr/images/tenInchScreenshots/04 - measurements.png index f1a56388..958bd135 100644 Binary files a/fastlane/metadata/android/hr/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/hr/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/hr/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/hr/images/tenInchScreenshots/05 - nutritional plan.png index 89e57d23..08f4b0a6 100644 Binary files a/fastlane/metadata/android/hr/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/hr/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/hr/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/hr/images/tenInchScreenshots/06 - weight.png index 37fe0afa..7291963c 100644 Binary files a/fastlane/metadata/android/hr/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/hr/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/it-IT/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/it-IT/images/phoneScreenshots/01 - dashboard.png index 96369bd3..bab882df 100644 Binary files a/fastlane/metadata/android/it-IT/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/it-IT/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/it-IT/images/phoneScreenshots/02 - workout detail.png index 559cc831..77362ce1 100644 Binary files a/fastlane/metadata/android/it-IT/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/it-IT/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/it-IT/images/phoneScreenshots/03 - gym mode.png index f7cb9e10..1968f99e 100644 Binary files a/fastlane/metadata/android/it-IT/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/it-IT/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/it-IT/images/phoneScreenshots/04 - measurements.png index 0a6f75bf..fd8ec59b 100644 Binary files a/fastlane/metadata/android/it-IT/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/it-IT/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/it-IT/images/phoneScreenshots/05 - nutritional plan.png index ee0d5a46..ec303fcd 100644 Binary files a/fastlane/metadata/android/it-IT/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/it-IT/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/it-IT/images/phoneScreenshots/06 - weight.png index 009444be..277d4f49 100644 Binary files a/fastlane/metadata/android/it-IT/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/it-IT/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/it-IT/images/tenInchScreenshots/01 - dashboard.png index 5aba2d21..aef866a2 100644 Binary files a/fastlane/metadata/android/it-IT/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/it-IT/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/it-IT/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/it-IT/images/tenInchScreenshots/02 - workout detail.png index 7252a3e5..c2f2e469 100644 Binary files a/fastlane/metadata/android/it-IT/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/it-IT/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/it-IT/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/it-IT/images/tenInchScreenshots/03 - gym mode.png index d452dd63..ca36f3e9 100644 Binary files a/fastlane/metadata/android/it-IT/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/it-IT/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/it-IT/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/it-IT/images/tenInchScreenshots/04 - measurements.png index 7030caaa..52f05aaf 100644 Binary files a/fastlane/metadata/android/it-IT/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/it-IT/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/it-IT/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/it-IT/images/tenInchScreenshots/05 - nutritional plan.png index 683286a3..8198830a 100644 Binary files a/fastlane/metadata/android/it-IT/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/it-IT/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/it-IT/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/it-IT/images/tenInchScreenshots/06 - weight.png index b0e9a213..8044c26b 100644 Binary files a/fastlane/metadata/android/it-IT/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/it-IT/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/01 - dashboard.png index 48e04cfd..23bbd7ca 100644 Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/02 - workout detail.png index d374796c..a31ea7f4 100644 Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/03 - gym mode.png index 9190a4de..51c15478 100644 Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/04 - measurements.png index 4a986a80..2e5a1730 100644 Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/05 - nutritional plan.png index 56d3b93f..4998bf60 100644 Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/06 - weight.png index 4980efb8..709723a5 100644 Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/01 - dashboard.png index 850463cf..4de775fe 100644 Binary files a/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/02 - workout detail.png index b7af8d5a..5c291750 100644 Binary files a/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/03 - gym mode.png index d2c1e70b..825c85b0 100644 Binary files a/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/04 - measurements.png index 48ab7797..a81fcab7 100644 Binary files a/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/05 - nutritional plan.png index 6b49ea40..9f6032cd 100644 Binary files a/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/06 - weight.png index 86e9bd1f..ecad5360 100644 Binary files a/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/nb-NO/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/01 - dashboard.png index 1cd483b5..8083a3e9 100644 Binary files a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/02 - workout detail.png index 819a449a..2d881923 100644 Binary files a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/03 - gym mode.png index be469d83..47882b26 100644 Binary files a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/04 - measurements.png index a5116383..52e0dcfd 100644 Binary files a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/05 - nutritional plan.png index 617c5e0c..cdef0d8a 100644 Binary files a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/06 - weight.png index 11dbaefe..c4cba25b 100644 Binary files a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/01 - dashboard.png index d835451c..624ee0fd 100644 Binary files a/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/02 - workout detail.png index 9f9780c5..031ad0d9 100644 Binary files a/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/03 - gym mode.png index e3400420..fc382ac2 100644 Binary files a/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/04 - measurements.png index 81fef6e7..957698f3 100644 Binary files a/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/05 - nutritional plan.png index 1eb5b30d..203ab3d2 100644 Binary files a/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/06 - weight.png index aeeb6557..1bafd3e4 100644 Binary files a/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/pl-PL/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/01 - dashboard.png index 71e6f369..c5a2f9ae 100644 Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/02 - workout detail.png index ca0e53e9..e12183f3 100644 Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/03 - gym mode.png index b64be4fb..0a8b7518 100644 Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/04 - measurements.png index 9b54dad2..c2b28f20 100644 Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/05 - nutritional plan.png index 1d8b4471..a5dd947d 100644 Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/06 - weight.png index dd836bdd..3eae44a4 100644 Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/01 - dashboard.png index b194ca8b..81875ef5 100644 Binary files a/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/02 - workout detail.png index 947e9d54..e5511614 100644 Binary files a/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/03 - gym mode.png index b5a9b512..bdbf913b 100644 Binary files a/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/04 - measurements.png index 98245bea..1d254684 100644 Binary files a/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/05 - nutritional plan.png index 4198415b..a92d6787 100644 Binary files a/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/06 - weight.png index ce03527b..a082674b 100644 Binary files a/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/pt-BR/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/01 - dashboard.png index de3acf8b..278058da 100644 Binary files a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/02 - workout detail.png index ea2a9803..7a70103e 100644 Binary files a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/03 - gym mode.png index 9fa452b2..2320f167 100644 Binary files a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/04 - measurements.png index 456ba8db..14ea73ea 100644 Binary files a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/05 - nutritional plan.png index b7f00522..b4eef810 100644 Binary files a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/06 - weight.png index 263d102f..2b258801 100644 Binary files a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/01 - dashboard.png index b61252b7..092aa6b7 100644 Binary files a/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/02 - workout detail.png index 54319748..9c295b60 100644 Binary files a/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/03 - gym mode.png index 560499b8..d3b06a15 100644 Binary files a/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/04 - measurements.png index 59c48ad5..9a818f6d 100644 Binary files a/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/05 - nutritional plan.png index 80f6313d..bfb4795a 100644 Binary files a/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/06 - weight.png index 032318fb..36a31f50 100644 Binary files a/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/ru-RU/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/01 - dashboard.png index 13c48997..f79654c2 100644 Binary files a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/02 - workout detail.png index 3b17cab5..fd1a4703 100644 Binary files a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/03 - gym mode.png index 9d2e2754..fb1b8587 100644 Binary files a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/04 - measurements.png index d8ece96b..7296b352 100644 Binary files a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/05 - nutritional plan.png index 5b345f02..f7027918 100644 Binary files a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/06 - weight.png index fb063595..11e4f81c 100644 Binary files a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/01 - dashboard.png index 8ec0b4ed..98dd2b01 100644 Binary files a/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/02 - workout detail.png index fbd397eb..f0744c78 100644 Binary files a/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/03 - gym mode.png index d87e7cdc..49db309a 100644 Binary files a/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/04 - measurements.png index f5fea997..3dd47075 100644 Binary files a/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/05 - nutritional plan.png index a67946bd..01cd830c 100644 Binary files a/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/06 - weight.png index dd927851..7e2d8564 100644 Binary files a/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/tr-TR/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/uk/images/phoneScreenshots/01 - dashboard.png index dc092b53..0fae328e 100644 Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/uk/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/uk/images/phoneScreenshots/02 - workout detail.png index b8dcc9e8..dae3dee7 100644 Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/uk/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/uk/images/phoneScreenshots/03 - gym mode.png index a9acbb6f..fd7815e7 100644 Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/uk/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/uk/images/phoneScreenshots/04 - measurements.png index 5cd1d469..6d3d57d9 100644 Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/uk/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/uk/images/phoneScreenshots/05 - nutritional plan.png index 2fcacdbd..a220ec72 100644 Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/uk/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/uk/images/phoneScreenshots/06 - weight.png index e71214d8..bc6a75f1 100644 Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/uk/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/uk/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/uk/images/tenInchScreenshots/01 - dashboard.png index 8d975fd9..358c0816 100644 Binary files a/fastlane/metadata/android/uk/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/uk/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/uk/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/uk/images/tenInchScreenshots/02 - workout detail.png index 3417db38..760674d1 100644 Binary files a/fastlane/metadata/android/uk/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/uk/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/uk/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/uk/images/tenInchScreenshots/03 - gym mode.png index 253354da..2d6894fa 100644 Binary files a/fastlane/metadata/android/uk/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/uk/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/uk/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/uk/images/tenInchScreenshots/04 - measurements.png index c6bd5dcf..2a519ada 100644 Binary files a/fastlane/metadata/android/uk/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/uk/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/uk/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/uk/images/tenInchScreenshots/05 - nutritional plan.png index 26d5d891..e8927051 100644 Binary files a/fastlane/metadata/android/uk/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/uk/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/uk/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/uk/images/tenInchScreenshots/06 - weight.png index 9478427b..9ce072eb 100644 Binary files a/fastlane/metadata/android/uk/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/uk/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/01 - dashboard.png index 108a7e27..ae692319 100644 Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/01 - dashboard.png and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/02 - workout detail.png index f5e079ba..b2a2764a 100644 Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/02 - workout detail.png and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/03 - gym mode.png index 7b4e1435..1247c72e 100644 Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/04 - measurements.png index 9ade4727..50a908ed 100644 Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/04 - measurements.png and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/05 - nutritional plan.png index 314092a3..15d75a91 100644 Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/06 - weight.png index 8d2c64b8..9341c45a 100644 Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/06 - weight.png and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/01 - dashboard.png b/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/01 - dashboard.png index edc5ea27..731c23a8 100644 Binary files a/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/01 - dashboard.png and b/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/02 - workout detail.png b/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/02 - workout detail.png index 595a2e67..0ad30071 100644 Binary files a/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/02 - workout detail.png and b/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/03 - gym mode.png b/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/03 - gym mode.png index 73ddb549..9d7d5ddb 100644 Binary files a/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/03 - gym mode.png and b/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/04 - measurements.png b/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/04 - measurements.png index ed711674..2c7edec4 100644 Binary files a/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/04 - measurements.png and b/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/05 - nutritional plan.png index d16422ef..08f3cd1d 100644 Binary files a/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/05 - nutritional plan.png and b/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/06 - weight.png b/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/06 - weight.png index 216bf860..379d1888 100644 Binary files a/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/06 - weight.png and b/fastlane/metadata/android/zh-CN/images/tenInchScreenshots/06 - weight.png differ diff --git a/fastlane/report.xml b/fastlane/report.xml index c04fdec0..ec8e75e9 100644 --- a/fastlane/report.xml +++ b/fastlane/report.xml @@ -5,12 +5,12 @@ - + - + diff --git a/flatpak/de.wger.flutter.appdata.xml b/flatpak/de.wger.flutter.metainfo.xml similarity index 100% rename from flatpak/de.wger.flutter.appdata.xml rename to flatpak/de.wger.flutter.metainfo.xml diff --git a/flatpak/flatpak_meta.json b/flatpak/flatpak_meta.json index 5d408ead..253cf82e 100644 --- a/flatpak/flatpak_meta.json +++ b/flatpak/flatpak_meta.json @@ -3,14 +3,8 @@ "lowercaseAppName": "wger", "githubReleaseOrganization": "wger-project", "githubReleaseProject": "flutter", - "localReleases": [ - - ], - "localReleaseAssets": [ - - ], "localLinuxBuildDir": "../build/linux", - "appDataPath": "de.wger.flutter.appdata.xml", + "appStreamPath": "de.wger.flutter.metainfo.xml", "desktopPath": "de.wger.flutter.desktop", "icons": { "64x64": "logo64.png", diff --git a/flatpak/scripts/flatpak_packager.dart b/flatpak/scripts/flatpak_packager.dart index 5346a605..92cf2768 100644 --- a/flatpak/scripts/flatpak_packager.dart +++ b/flatpak/scripts/flatpak_packager.dart @@ -1,17 +1,27 @@ // ignore_for_file: avoid_print import 'dart:io'; - import 'flatpak_shared.dart'; +/// Creates an archive containing all the sources for the Flatpak package for a +/// specific architecture. +/// /// arguments: /// --meta [file] +/// Required argument for providing the metadata file for this script. + /// --github +/// Use this option to pull release info from Github rather than the metadata file. + +/// --addTodaysVersion [version] +/// If pulling data from Github, this provides a way to specify the release to be released today. + void main(List arguments) async { - if (Platform.isWindows) { - throw Exception('Must be run under a UNIX-like operating system.'); + if (!Platform.isLinux) { + throw Exception('Must be run under Linux'); } + // PARSE ARGUMENTS final metaIndex = arguments.indexOf('--meta'); if (metaIndex == -1) { throw Exception( @@ -22,123 +32,136 @@ void main(List arguments) async { } final metaFile = File(arguments[metaIndex + 1]); - if (!metaFile.existsSync()) { + if (!(await metaFile.exists())) { throw Exception('The provided metadata file does not exist.'); } - final meta = FlatpakMeta.fromJson(metaFile); - final fetchFromGithub = arguments.contains('--github'); + final addTodaysVersionIndex = arguments.indexOf('--addTodaysVersion'); + if (addTodaysVersionIndex != -1 && arguments.length == addTodaysVersionIndex + 1) { + throw Exception('The --addTodaysVersion flag must be followed by the version name.'); + } + + final addedTodaysVersion = + addTodaysVersionIndex != -1 ? arguments[addTodaysVersionIndex + 1] : null; + + // GENERATE PACKAGE + + final meta = FlatpakMeta.fromJson(metaFile, skipLocalReleases: fetchFromGithub); + final outputDir = Directory('${Directory.current.path}/flatpak_generator_exports'); - outputDir.createSync(); + await outputDir.create(); - final packageGenerator = PackageGenerator(inputDir: metaFile.parent, meta: meta); + final packageGenerator = PackageGenerator( + inputDir: metaFile.parent, meta: meta, addedTodaysVersion: addedTodaysVersion); - packageGenerator.generatePackage( - outputDir, - PackageGenerator.runningOnARM() ? CPUArchitecture.aarch64 : CPUArchitecture.x86_64, - fetchFromGithub, - ); + await packageGenerator.generatePackage( + outputDir, + await PackageGenerator.runningOnARM() ? CPUArchitecture.aarch64 : CPUArchitecture.x86_64, + fetchFromGithub); } class PackageGenerator { final Directory inputDir; final FlatpakMeta meta; - final Map shaByArch = {}; + final String? addedTodaysVersion; - PackageGenerator({required this.inputDir, required this.meta}); + PackageGenerator({required this.inputDir, required this.meta, required this.addedTodaysVersion}); Future generatePackage( Directory outputDir, CPUArchitecture arch, bool fetchReleasesFromGithub) async { - final tempDir = outputDir.createTempSync('flutter_generator_temp'); + final tempDir = await outputDir.createTemp('flutter_generator_temp'); final appId = meta.appId; // desktop file final desktopFile = File('${inputDir.path}/${meta.desktopPath}'); - if (!desktopFile.existsSync()) { + if (!(await desktopFile.exists())) { throw Exception( 'The desktop file does not exist under the specified path: ${desktopFile.path}'); } - desktopFile.copySync('${tempDir.path}/$appId.desktop'); + await desktopFile.copy('${tempDir.path}/$appId.desktop'); // icons final iconTempDir = Directory('${tempDir.path}/icons'); for (final icon in meta.icons) { final iconFile = File('${inputDir.path}/${icon.path}'); - if (!iconFile.existsSync()) { + if (!(await iconFile.exists())) { throw Exception('The icon file ${iconFile.path} does not exist.'); } final iconSubdir = Directory('${iconTempDir.path}/${icon.type}'); - iconSubdir.createSync(recursive: true); - iconFile.copySync('${iconSubdir.path}/${icon.getFilename(appId)}'); + await iconSubdir.create(recursive: true); + await iconFile.copy('${iconSubdir.path}/${icon.getFilename(appId)}'); } - // appdata file - final origAppDataFile = File('${inputDir.path}/${meta.appDataPath}'); - if (!origAppDataFile.existsSync()) { + // AppStream metainfo file + final origAppStreamFile = File('${inputDir.path}/${meta.appStreamPath}'); + if (!(await origAppStreamFile.exists())) { throw Exception( - 'The app data file does not exist under the specified path: ${origAppDataFile.path}'); + 'The app data file does not exist under the specified path: ${origAppStreamFile.path}'); } - final editedAppDataContent = AppDataModifier.replaceVersions( - origAppDataFile.readAsStringSync(), await meta.getReleases(fetchReleasesFromGithub)); + final editedAppStreamContent = AppStreamModifier.replaceVersions( + await origAppStreamFile.readAsString(), + await meta.getReleases(fetchReleasesFromGithub, addedTodaysVersion)); - final editedAppDataFile = File('${tempDir.path}/$appId.appdata.xml'); - editedAppDataFile.writeAsStringSync(editedAppDataContent); + final editedAppStreamFile = File('${tempDir.path}/$appId.metainfo.xml'); + await editedAppStreamFile.writeAsString(editedAppStreamContent); // build files final bundlePath = '${inputDir.path}/${meta.localLinuxBuildDir}/${arch.flutterDirName}/release/bundle'; final buildDir = Directory(bundlePath); - if (!buildDir.existsSync()) { + if (!(await buildDir.exists())) { throw Exception( 'The linux build directory does not exist under the specified path: ${buildDir.path}'); } final destDir = Directory('${tempDir.path}/bin'); - destDir.createSync(); + await destDir.create(); - final baseFileName = '${meta.lowercaseAppName}-linux-${arch.flatpakArchCode}'; + final baseFilename = '${meta.lowercaseAppName}-linux-${arch.flatpakArchCode}'; + final packagePath = '${outputDir.absolute.path}/$baseFilename.tar.gz'; + final shaPath = '${outputDir.absolute.path}/$baseFilename.sha256'; + + await Process.run('cp', ['-r', '${buildDir.absolute.path}/.', destDir.absolute.path]); + await Process.run('tar', ['-czvf', packagePath, '.'], workingDirectory: tempDir.absolute.path); - final packagePath = '${outputDir.absolute.path}/$baseFileName.tar.gz'; - Process.runSync('cp', ['-r', '${buildDir.absolute.path}/.', destDir.absolute.path]); - Process.runSync('tar', ['-czvf', packagePath, '.'], workingDirectory: tempDir.absolute.path); print('Generated $packagePath'); - final preShasum = Process.runSync('shasum', ['-a', '256', packagePath]); - final sha256 = preShasum.stdout.toString().split(' ').first; + final preShasum = await Process.run('shasum', ['-a', '256', packagePath]); + final shasum = preShasum.stdout.toString().split(' ').first; - final shaFile = await File('${outputDir.path}/$baseFileName.sha256').writeAsString(sha256); - print('Generated ${shaFile.path}'); + await File(shaPath).writeAsString(shasum); - shaByArch.putIfAbsent(arch, () => sha256); + print('Generated $shaPath'); - tempDir.deleteSync(recursive: true); + await tempDir.delete(recursive: true); } - static bool runningOnARM() { - final unameRes = Process.runSync('uname', ['-m']); + static Future runningOnARM() async { + final unameRes = await Process.run('uname', ['-m']); final unameString = unameRes.stdout.toString().trimLeft(); return unameString.startsWith('arm') || unameString.startsWith('aarch'); } } -// updates releases in ${appName}.appdata.xml -class AppDataModifier { - static String replaceVersions(String origAppDataContent, List versions) { +// updates releases in ${appName}.metainfo.xml +class AppStreamModifier { + static String replaceVersions(String origAppStreamContent, List versions) { final joinedReleases = versions.map((v) => '\t\t').join('\n'); - final releasesSection = '\n$joinedReleases\n\t'; //todo check this - if (origAppDataContent.contains('') .replaceFirst(RegExp(''), releasesSection) .replaceAll('<~>', '\n'); } else { - return origAppDataContent.replaceFirst('', '\n\t$releasesSection\n'); + return origAppStreamContent.replaceFirst( + '', '\n\t$releasesSection\n'); } } } diff --git a/flatpak/scripts/flatpak_shared.dart b/flatpak/scripts/flatpak_shared.dart index f411aabe..d3ad12ad 100644 --- a/flatpak/scripts/flatpak_shared.dart +++ b/flatpak/scripts/flatpak_shared.dart @@ -3,20 +3,21 @@ import 'dart:io'; import 'package:http/http.dart' as http; +/// Shared files for the two Flatpak-related scripts. + class Release { final String version; - final String date; //todo add resources + final String date; //TODO add resources Release({required this.version, required this.date}); } enum CPUArchitecture { x86_64('x86_64', 'x64'), - aarch64('aarch64', 'aarch64'); + aarch64('aarch64', 'arm64'); final String flatpakArchCode; final String flutterDirName; - const CPUArchitecture(this.flatpakArchCode, this.flutterDirName); } @@ -43,8 +44,9 @@ class Icon { _fileExtension = path.split('.').last; } - String getFilename(String appId) => - (type == _symbolicType) ? '$appId-symbolic.$_fileExtension' : '$appId.$_fileExtension'; + String getFilename(String appId) => (type == _symbolicType) + ? '$appId-symbolic.$_fileExtension' + : '$appId.$_fileExtension'; } class GithubReleases { @@ -55,25 +57,26 @@ class GithubReleases { GithubReleases(this.githubReleaseOrganization, this.githubReleaseProject); - Future> getReleases() async { + Future> getReleases(bool canBeEmpty) async { if (_releases == null) { - await _fetchReleasesAndAssets(); + await _fetchReleasesAndAssets(canBeEmpty); } return _releases!; } Future?> getLatestReleaseAssets() async { if (_releases == null) { - await _fetchReleasesAndAssets(); + await _fetchReleasesAndAssets(false); } return _latestReleaseAssets; } - Future _fetchReleasesAndAssets() async { + Future _fetchReleasesAndAssets(bool canBeEmpty) async { final releaseJsonContent = (await http.get(Uri( scheme: 'https', host: 'api.github.com', - path: '/repos/$githubReleaseOrganization/$githubReleaseProject/releases'))) + path: + '/repos/$githubReleaseOrganization/$githubReleaseProject/releases'))) .body; final decodedJson = jsonDecode(releaseJsonContent) as List; @@ -84,27 +87,33 @@ class GithubReleases { await Future.forEach(decodedJson, (dynamic releaseDynamic) async { final releaseMap = releaseDynamic as Map; - final releaseDateAndTime = DateTime.parse(releaseMap['published_at'] as String); - final releaseDateString = releaseDateAndTime.toIso8601String().split('T').first; + final releaseDateAndTime = + DateTime.parse(releaseMap['published_at'] as String); + final releaseDateString = + releaseDateAndTime.toIso8601String().split('T').first; if (latestReleaseAssetDate == null || (latestReleaseAssetDate?.compareTo(releaseDateAndTime) == -1)) { - final assets = await _parseReleaseAssets(releaseMap['assets'] as List); + final assets = + await _parseGithubReleaseAssets(releaseMap['assets'] as List); if (assets != null) { _latestReleaseAssets = assets; latestReleaseAssetDate = releaseDateAndTime; } } - releases.add(Release(version: releaseMap['name'] as String, date: releaseDateString)); + releases.add(Release( + version: releaseMap['name'] as String, date: releaseDateString)); }); - if (releases.isNotEmpty) { + if (releases.isNotEmpty || canBeEmpty) { _releases = releases; + } else { + throw Exception("Github must contain at least 1 release."); } } - Future?> _parseReleaseAssets(List assetMaps) async { + Future?> _parseGithubReleaseAssets(List assetMaps) async { String? x64TarballUrl; String? x64Sha; String? aarch64TarballUrl; @@ -115,7 +124,8 @@ class GithubReleases { final downloadUrl = amMap['browser_download_url'] as String; final filename = amMap['name'] as String; final fileExtension = filename.substring(filename.indexOf('.') + 1); - final filenameWithoutExtension = filename.substring(0, filename.indexOf('.')); + final filenameWithoutExtension = + filename.substring(0, filename.indexOf('.')); final arch = filenameWithoutExtension.endsWith('aarch64') ? CPUArchitecture.aarch64 @@ -166,15 +176,14 @@ class GithubReleases { return res.isEmpty ? null : res; } - Future _readSha(String shaUrl) async { - return (await http.get(Uri.parse(shaUrl))).body.split(' ').first; - } + Future _readSha(String shaUrl) async => + (await http.get(Uri.parse(shaUrl))).body.split(' ').first; } class FlatpakMeta { final String appId; final String lowercaseAppName; - final String appDataPath; + final String appStreamPath; final String desktopPath; final List icons; @@ -202,7 +211,7 @@ class FlatpakMeta { required List? localReleases, required List? localReleaseAssets, required this.localLinuxBuildDir, - required this.appDataPath, + required this.appStreamPath, required this.desktopPath, required this.icons, required this.freedesktopRuntime, @@ -212,88 +221,117 @@ class FlatpakMeta { : _localReleases = localReleases, _localReleaseAssets = localReleaseAssets { if (githubReleaseOrganization != null && githubReleaseProject != null) { - _githubReleases = GithubReleases(githubReleaseOrganization!, githubReleaseProject!); + _githubReleases = + GithubReleases(githubReleaseOrganization!, githubReleaseProject!); } } - Future> getReleases(bool fetchReleasesFromGithub) async { + Future> getReleases( + bool fetchReleasesFromGithub, String? addedTodaysVersion) async { + final releases = List.empty(growable: true); + if (addedTodaysVersion != null) { + releases.add(Release( + version: addedTodaysVersion, + date: DateTime.now().toIso8601String().split("T").first)); + } if (fetchReleasesFromGithub) { if (_githubReleases == null) { throw Exception( 'Metadata must include Github repository info if fetching releases from Github.'); } - return await _githubReleases!.getReleases(); + releases.addAll( + await _githubReleases!.getReleases(addedTodaysVersion != null)); } else { - if (_localReleases == null) { - throw Exception('Metadata must include releases if not fetching releases from Github.'); + if (_localReleases == null && addedTodaysVersion == null) { + throw Exception( + 'Metadata must include releases if not fetching releases from Github.'); + } + if (_localReleases?.isNotEmpty ?? false) { + releases.addAll(_localReleases!); } - return _localReleases!; } + return releases; } - Future?> getReleaseAssets(bool fetchReleasesFromGithub) async { + Future?> getLatestReleaseAssets( + bool fetchReleasesFromGithub) async { if (fetchReleasesFromGithub) { if (_githubReleases == null) { throw Exception( 'Metadata must include Github repository info if fetching releases from Github.'); } - return _githubReleases!.getLatestReleaseAssets(); + return await _githubReleases!.getLatestReleaseAssets(); } else { if (_localReleases == null) { - throw Exception('Metadata must include releases if not fetching releases from Github.'); + throw Exception( + 'Metadata must include releases if not fetching releases from Github.'); } return _localReleaseAssets; } } - static FlatpakMeta fromJson(File jsonFile) { + static FlatpakMeta fromJson(File jsonFile, {bool skipLocalReleases = false}) { try { final dynamic json = jsonDecode(jsonFile.readAsStringSync()); return FlatpakMeta( appId: json['appId'] as String, lowercaseAppName: json['lowercaseAppName'] as String, - githubReleaseOrganization: json['githubReleaseOrganization'] as String?, + githubReleaseOrganization: + json['githubReleaseOrganization'] as String?, githubReleaseProject: json['githubReleaseProject'] as String?, - localReleases: (json['localReleases'] as List?)?.map((dynamic r) { - final rMap = r as Map; - return Release(version: rMap['version'] as String, date: rMap['date'] as String); - }).toList(), - localReleaseAssets: (json['localReleaseAssets'] as List?)?.map((dynamic ra) { - final raMap = ra as Map; - final archString = raMap['arch'] as String; - final arch = (archString == CPUArchitecture.x86_64.flatpakArchCode) - ? CPUArchitecture.x86_64 - : (archString == CPUArchitecture.aarch64.flatpakArchCode) - ? CPUArchitecture.aarch64 - : null; - if (arch == null) { - throw Exception( - 'Architecture must be either "${CPUArchitecture.x86_64.flatpakArchCode}" or "${CPUArchitecture.aarch64.flatpakArchCode}"'); - } - final tarballPath = '${jsonFile.parent.path}/${raMap['tarballPath'] as String}'; - final preShasum = Process.runSync('shasum', ['-a', '256', tarballPath]); - final shasum = preShasum.stdout.toString().split(' ').first; - if (preShasum.exitCode != 0) { - throw Exception(preShasum.stderr); - } - return ReleaseAsset( - arch: arch, - tarballUrlOrPath: tarballPath, - isRelativeLocalPath: true, - tarballSha256: shasum); - }).toList(), + localReleases: skipLocalReleases + ? null + : (json['localReleases'] as List?)?.map((dynamic r) { + final rMap = r as Map; + return Release( + version: rMap['version'] as String, + date: rMap['date'] as String); + }).toList(), + localReleaseAssets: skipLocalReleases + ? null + : (json['localReleaseAssets'] as List?)?.map((dynamic ra) { + final raMap = ra as Map; + final archString = raMap['arch'] as String; + final arch = (archString == + CPUArchitecture.x86_64.flatpakArchCode) + ? CPUArchitecture.x86_64 + : (archString == CPUArchitecture.aarch64.flatpakArchCode) + ? CPUArchitecture.aarch64 + : null; + if (arch == null) { + throw Exception( + 'Architecture must be either "${CPUArchitecture.x86_64.flatpakArchCode}" or "${CPUArchitecture.aarch64.flatpakArchCode}"'); + } + final tarballFile = File( + '${jsonFile.parent.path}/${raMap['tarballPath'] as String}'); + final tarballPath = tarballFile.absolute.path; + final preShasum = + Process.runSync('shasum', ['-a', '256', tarballPath]); + final shasum = preShasum.stdout.toString().split(' ').first; + if (preShasum.exitCode != 0) { + throw Exception(preShasum.stderr); + } + return ReleaseAsset( + arch: arch, + tarballUrlOrPath: tarballPath, + isRelativeLocalPath: true, + tarballSha256: shasum); + }).toList(), localLinuxBuildDir: json['localLinuxBuildDir'] as String, - appDataPath: json['appDataPath'] as String, + appStreamPath: json['appStreamPath'] as String, desktopPath: json['desktopPath'] as String, icons: (json['icons'] as Map).entries.map((mapEntry) { - return Icon(type: mapEntry.key as String, path: mapEntry.value as String); + return Icon( + type: mapEntry.key as String, path: mapEntry.value as String); }).toList(), freedesktopRuntime: json['freedesktopRuntime'] as String, buildCommandsAfterUnpack: (json['buildCommandsAfterUnpack'] as List?) ?.map((dynamic bc) => bc as String) .toList(), extraModules: json['extraModules'] as List?, - finishArgs: (json['finishArgs'] as List).map((dynamic fa) => fa as String).toList()); + finishArgs: (json['finishArgs'] as List) + .map((dynamic fa) => fa as String) + .toList()); } catch (e) { throw Exception('Could not parse JSON file, due to this error:\n$e'); } diff --git a/flatpak/scripts/manifest_generator.dart b/flatpak/scripts/manifest_generator.dart index da27f860..8957a3d1 100644 --- a/flatpak/scripts/manifest_generator.dart +++ b/flatpak/scripts/manifest_generator.dart @@ -1,8 +1,20 @@ +// ignore_for_file: avoid_print + import 'dart:convert'; import 'dart:io'; - import 'flatpak_shared.dart'; +/// Generates the Flatpak manifest. +/// (Separate from the package generation, as those are generated per each +/// architecture.) +/// +/// arguments: +/// --meta [file] +/// Required argument for providing the metadata file for this script. + +/// --github +/// Use this option to pull release info from Github rather than the metadata file. + void main(List arguments) async { if (Platform.isWindows) { throw Exception('Must be run under a UNIX-like operating system.'); @@ -14,7 +26,8 @@ void main(List arguments) async { 'You must run this script with a metadata file argument, using the --meta flag.'); } if (arguments.length == metaIndex + 1) { - throw Exception('The --meta flag must be followed by the path to the metadata file.'); + throw Exception( + 'The --meta flag must be followed by the path to the metadata file.'); } final metaFile = File(arguments[metaIndex + 1]); @@ -22,21 +35,25 @@ void main(List arguments) async { throw Exception('The provided metadata file does not exist.'); } - final meta = FlatpakMeta.fromJson(metaFile); - final fetchFromGithub = arguments.contains('--github'); - final outputDir = Directory('${Directory.current.path}/flatpak_generator_exports'); + final meta = + FlatpakMeta.fromJson(metaFile, skipLocalReleases: fetchFromGithub); + + final outputDir = + Directory('${Directory.current.path}/flatpak_generator_exports'); outputDir.createSync(); final manifestGenerator = FlatpakManifestGenerator(meta); - final manifestContent = await manifestGenerator.generateFlatpakManifest(fetchFromGithub); + final manifestContent = + await manifestGenerator.generateFlatpakManifest(fetchFromGithub); final manifestPath = '${outputDir.path}/${meta.appId}.json'; final manifestFile = File(manifestPath); manifestFile.writeAsStringSync(manifestContent); print('Generated $manifestPath'); - final flathubJsonContent = await manifestGenerator.generateFlathubJson(fetchFromGithub); + final flathubJsonContent = + await manifestGenerator.generateFlathubJson(fetchFromGithub); if (flathubJsonContent != null) { final flathubJsonPath = '${outputDir.path}/flathub.json'; final flathubJsonFile = File(flathubJsonPath); @@ -56,7 +73,7 @@ class FlatpakManifestGenerator { Future generateFlatpakManifest(bool fetchFromGithub) async { final appName = meta.lowercaseAppName; final appId = meta.appId; - final assets = await meta.getReleaseAssets(fetchFromGithub); + final assets = await meta.getLatestReleaseAssets(fetchFromGithub); if (assets == null) { throw Exception('There are no associated assets.'); @@ -88,7 +105,7 @@ class FlatpakManifestGenerator { ...meta.icons.map((icon) => 'install -Dm644 $appName/icons/${icon.type}/${icon.getFilename(appId)} /app/share/icons/hicolor/${icon.type}/apps/${icon.getFilename(appId)}'), 'install -Dm644 $appName/$appId.desktop /app/share/applications/$appId.desktop', - 'install -Dm644 $appName/$appId.appdata.xml /app/share/applications/$appId.appdata.xml' + 'install -Dm644 $appName/$appId.metainfo.xml /app/share/metainfo/$appId.metainfo.xml' ], 'sources': assets .map((a) => { @@ -105,7 +122,7 @@ class FlatpakManifestGenerator { } Future generateFlathubJson(bool fetchFromGithub) async { - final assets = await meta.getReleaseAssets(fetchFromGithub); + final assets = await meta.getLatestReleaseAssets(fetchFromGithub); if (assets == null) { throw Exception('There are no associated assets.'); @@ -115,7 +132,8 @@ class FlatpakManifestGenerator { const encoder = JsonEncoder.withIndent(' '); - final onlyArchListInput = fetchFromGithub ? _githubArchSupport! : _localArchSupport!; + final onlyArchListInput = + fetchFromGithub ? _githubArchSupport! : _localArchSupport!; final onlyArchList = List.empty(growable: true); for (final e in onlyArchListInput.entries) { @@ -131,7 +149,8 @@ class FlatpakManifestGenerator { } } - void _lazyGenerateArchSupportMap(bool fetchFromGithub, List assets) { + void _lazyGenerateArchSupportMap( + bool fetchFromGithub, List assets) { if (fetchFromGithub) { if (_githubArchSupport == null) { _githubArchSupport = { diff --git a/flatpak/scripts/pubspec.lock b/flatpak/scripts/pubspec.lock index d3d4f846..4da5d192 100644 --- a/flatpak/scripts/pubspec.lock +++ b/flatpak/scripts/pubspec.lock @@ -13,18 +13,18 @@ packages: dependency: transitive description: name: collection - sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.1" + version: "1.18.0" http: dependency: "direct main" description: name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" url: "https://pub.dev" source: hosted - version: "0.13.5" + version: "0.13.6" http_parser: dependency: transitive description: @@ -37,10 +37,10 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.11.0" path: dependency: transitive description: @@ -77,9 +77,9 @@ packages: dependency: transitive description: name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" sdks: - dart: ">=2.18.5 <4.0.0" + dart: ">=2.19.0 <4.0.0" diff --git a/integration_test/1_dashboard.dart b/integration_test/1_dashboard.dart index 31578858..cbd5d2ab 100644 --- a/integration_test/1_dashboard.dart +++ b/integration_test/1_dashboard.dart @@ -14,13 +14,14 @@ import '../test/nutrition/nutritional_plan_form_test.mocks.dart'; import '../test/workout/weight_unit_form_widget_test.mocks.dart'; import '../test/workout/workout_form_test.mocks.dart'; import '../test_data/body_weight.dart'; +import '../test_data/exercises.dart'; import '../test_data/measurements.dart'; import '../test_data/nutritional_plans.dart'; import '../test_data/workouts.dart'; Widget createDashboardScreen({locale = 'en'}) { final mockWorkoutProvider = MockWorkoutPlansProvider(); - when(mockWorkoutProvider.activePlan).thenReturn(getWorkout()); + when(mockWorkoutProvider.activePlan).thenReturn(getWorkout(exercises: getScreenshotExercises())); final Map logs = { 'results': [ diff --git a/integration_test/2_workout.dart b/integration_test/2_workout.dart index 3b6f4fa9..ede8fe71 100644 --- a/integration_test/2_workout.dart +++ b/integration_test/2_workout.dart @@ -7,13 +7,14 @@ import 'package:wger/screens/workout_plan_screen.dart'; import 'package:wger/theme/theme.dart'; import '../test/workout/workout_form_test.mocks.dart'; +import '../test_data/exercises.dart'; import '../test_data/workouts.dart'; Widget createWorkoutDetailScreen({locale = 'en'}) { final key = GlobalKey(); final mockWorkoutProvider = MockWorkoutPlansProvider(); - final workout = getWorkout(); + final workout = getWorkout(exercises: getScreenshotExercises()); when(mockWorkoutProvider.activePlan).thenReturn(workout); when(mockWorkoutProvider.fetchAndSetWorkoutPlanFull(1)).thenAnswer((_) => Future.value(workout)); @@ -33,7 +34,7 @@ Widget createWorkoutDetailScreen({locale = 'en'}) { home: TextButton( onPressed: () => key.currentState!.push( MaterialPageRoute( - settings: RouteSettings(arguments: getWorkout()), + settings: RouteSettings(arguments: workout), builder: (_) => WorkoutPlanScreen(), ), ), diff --git a/integration_test/3_gym_mode.dart b/integration_test/3_gym_mode.dart index 9c158882..51ccbc75 100644 --- a/integration_test/3_gym_mode.dart +++ b/integration_test/3_gym_mode.dart @@ -16,7 +16,7 @@ import '../test_data/workouts.dart'; Widget createGymModeScreen({locale = 'en'}) { final key = GlobalKey(); final bases = getTestExerciseBases(); - final workout = getWorkout(); + final workout = getWorkout(exercises: getScreenshotExercises()); final mockExerciseProvider = MockExercisesProvider(); diff --git a/integration_test/README.md b/integration_test/README.md index d4fcea9c..cdc6a593 100644 --- a/integration_test/README.md +++ b/integration_test/README.md @@ -1,10 +1,12 @@ -Start emulator and run +This will generate some screenshots and save them to the Play Store metadata folder. -`flutter drive --driver=test_driver/screenshot_driver.dart --target=integration_test/make_screenshots_test.dart` +1) Set the correct value for the device size by setting the `destination` variable +2) Start the correct emulator and + run `flutter drive --driver=test_driver/screenshot_driver.dart --target=integration_test/make_screenshots_test.dart` +3) If you get errors or the screenshots are not written to disk, edit the + `languages` list and comment some of the languages -This will generate some screenshots and save them to the Play Store metadata folder - -See +See also * * diff --git a/integration_test/make_screenshots_test.dart b/integration_test/make_screenshots_test.dart index 633d34d4..5dcddb1e 100644 --- a/integration_test/make_screenshots_test.dart +++ b/integration_test/make_screenshots_test.dart @@ -19,6 +19,7 @@ enum DeviceType { tvScreenshots, wearScreenshots } + final destination = DeviceType.phoneScreenshots.name; Future takeScreenshot(tester, binding, String language, String name) async { @@ -33,21 +34,26 @@ Future takeScreenshot(tester, binding, String language, String name) async // Available languages in weblate for the fastlane/metadata/android folder (not necessarily // those for which the application is translated) const languages = [ - //'de-DE', - // Note: it seems if too many languages are processed at once, some processes // disappear and no images are written. Doing this in smaller steps works fine + /* 'ca', 'de-DE', + 'el-GR', 'en-US', 'es-ES', - 'fr-FR', + */ + + /* + 'fr-FR', 'hi-IN', 'hr', 'it-IT', 'pt-BR', + */ + 'nb-NO', 'pl-PL', 'ru-RU', diff --git a/ios/Podfile.lock b/ios/Podfile.lock index d8fa7f91..b8acaa9e 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,9 +1,13 @@ PODS: + - camera_avfoundation (0.0.1): + - Flutter - Flutter (1.0.0) - flutter_barcode_scanner (2.0.0): - Flutter - flutter_keyboard_visibility (0.0.1): - Flutter + - flutter_zxing (0.0.1): + - Flutter - image_picker_ios (0.0.1): - Flutter - integration_test (0.0.1): @@ -19,26 +23,33 @@ PODS: - Flutter - video_player_avfoundation (0.0.1): - Flutter + - FlutterMacOS DEPENDENCIES: + - camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`) - Flutter (from `Flutter`) - flutter_barcode_scanner (from `.symlinks/plugins/flutter_barcode_scanner/ios`) - flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`) + - flutter_zxing (from `.symlinks/plugins/flutter_zxing/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - integration_test (from `.symlinks/plugins/integration_test/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - rive_common (from `.symlinks/plugins/rive_common/ios`) - - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/ios`) + - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - - video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/ios`) + - video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`) EXTERNAL SOURCES: + camera_avfoundation: + :path: ".symlinks/plugins/camera_avfoundation/ios" Flutter: :path: Flutter flutter_barcode_scanner: :path: ".symlinks/plugins/flutter_barcode_scanner/ios" flutter_keyboard_visibility: :path: ".symlinks/plugins/flutter_keyboard_visibility/ios" + flutter_zxing: + :path: ".symlinks/plugins/flutter_zxing/ios" image_picker_ios: :path: ".symlinks/plugins/image_picker_ios/ios" integration_test: @@ -48,24 +59,26 @@ EXTERNAL SOURCES: rive_common: :path: ".symlinks/plugins/rive_common/ios" shared_preferences_foundation: - :path: ".symlinks/plugins/shared_preferences_foundation/ios" + :path: ".symlinks/plugins/shared_preferences_foundation/darwin" url_launcher_ios: :path: ".symlinks/plugins/url_launcher_ios/ios" video_player_avfoundation: - :path: ".symlinks/plugins/video_player_avfoundation/ios" + :path: ".symlinks/plugins/video_player_avfoundation/darwin" SPEC CHECKSUMS: + camera_avfoundation: 3125e8cd1a4387f6f31c6c63abb8a55892a9eeeb Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 flutter_barcode_scanner: 7a1144744c28dc0c57a8de7218ffe5ec59a9e4bf flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069 + flutter_zxing: 19a866d17c8a87ee1026d68521c69d2f008635f6 image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5 - integration_test: a1e7d09bd98eca2fc37aefd79d4f41ad37bdbbe5 - package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e - rive_common: b5b1aa30c63b8f0f00f32cddc9ea394d3d3473b5 - shared_preferences_foundation: 986fc17f3d3251412d18b0265f9c64113a8c2472 - url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4 - video_player_avfoundation: 81e49bb3d9fb63dccf9fa0f6d877dc3ddbeac126 + integration_test: 13825b8a9334a850581300559b8839134b124670 + package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85 + rive_common: 3a4c254c6e4db7e4b9e05daeb3d1f47ae4f7bf76 + shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 + url_launcher_ios: 68d46cc9766d0c41dbdc884310529557e3cd7a86 + video_player_avfoundation: 8563f13d8fc8b2c29dc2d09e60b660e4e8128837 PODFILE CHECKSUM: 4e8f8b2be68aeea4c0d5beb6ff1e79fface1d048 -COCOAPODS: 1.12.0 +COCOAPODS: 1.14.3 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 7bccdc01..08905a67 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -155,7 +155,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1430; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -204,6 +204,7 @@ files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 3db53b6e..b52b2e69 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ getServerUrlFromPrefs() async { final prefs = await SharedPreferences.getInstance(); if (!prefs.containsKey('lastServer')) { - return DEFAULT_SERVER; + return DEFAULT_SERVER_PROD; } final userData = json.decode(prefs.getString('lastServer')!); diff --git a/lib/providers/gallery.dart b/lib/providers/gallery.dart index f843e044..f55a8119 100644 --- a/lib/providers/gallery.dart +++ b/lib/providers/gallery.dart @@ -31,8 +31,7 @@ class GalleryProvider extends WgerBaseProvider with ChangeNotifier { List images = []; - GalleryProvider(super.auth, List entries, [super.client]) - : images = entries; + GalleryProvider(super.auth, List entries, [super.client]) : images = entries; /// Clears all lists void clear() { diff --git a/lib/screens/auth_screen.dart b/lib/screens/auth_screen.dart index 06ed58fe..92df4713 100644 --- a/lib/screens/auth_screen.dart +++ b/lib/screens/auth_screen.dart @@ -16,6 +16,7 @@ * along with this program. If not, see . */ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -124,7 +125,8 @@ class _AuthCardState extends State { final _passwordController = TextEditingController(); final _password2Controller = TextEditingController(); final _emailController = TextEditingController(); - final _serverUrlController = TextEditingController(text: DEFAULT_SERVER); + final _serverUrlController = + TextEditingController(text: kDebugMode ? DEFAULT_SERVER_TEST : DEFAULT_SERVER_PROD); @override void initState() { @@ -144,6 +146,21 @@ class _AuthCardState extends State { } on PlatformException { _canRegister = false; } + _preFillTextfields(); + } + + void _preFillTextfields() { + if (kDebugMode && _authMode == AuthMode.Login) { + setState(() { + _usernameController.text = TESTSERVER_USER_NAME; + _passwordController.text = TESTSERVER_PASSWORD; + }); + } + } + + void _resetTextfields() { + _usernameController.clear(); + _passwordController.clear(); } void _submit(BuildContext context) async { @@ -204,7 +221,7 @@ class _AuthCardState extends State { void _switchAuthMode() { if (!_canRegister) { - launchURL(DEFAULT_SERVER, context); + launchURL(DEFAULT_SERVER_PROD, context); return; } @@ -212,10 +229,12 @@ class _AuthCardState extends State { setState(() { _authMode = AuthMode.Signup; }); + _resetTextfields(); } else { setState(() { _authMode = AuthMode.Login; }); + _preFillTextfields(); } } @@ -384,7 +403,8 @@ class _AuthCardState extends State { IconButton( icon: const Icon(Icons.undo), onPressed: () { - _serverUrlController.text = DEFAULT_SERVER; + _serverUrlController.text = + kDebugMode ? DEFAULT_SERVER_TEST : DEFAULT_SERVER_PROD; }, ), Text(AppLocalizations.of(context).reset) diff --git a/lib/screens/exercises_screen.dart b/lib/screens/exercises_screen.dart index f37b69b1..d98c3d57 100644 --- a/lib/screens/exercises_screen.dart +++ b/lib/screens/exercises_screen.dart @@ -18,6 +18,18 @@ class ExercisesScreen extends StatefulWidget { class _ExercisesScreenState extends State { late final TextEditingController _exerciseNameController; + @override + void initState() { + _exerciseNameController = TextEditingController(); + super.initState(); + } + + @override + void dispose() { + _exerciseNameController.dispose(); + super.dispose(); + } + @override Widget build(BuildContext context) { //final size = MediaQuery.of(context).size; @@ -43,12 +55,6 @@ class _ExercisesScreenState extends State { ), ); } - - @override - void dispose() { - _exerciseNameController.dispose(); - super.dispose(); - } } class _ExercisesList extends StatelessWidget { diff --git a/lib/widgets/add_exercise/preview_images.dart b/lib/widgets/add_exercise/preview_images.dart index 65a46567..7b4efc2f 100644 --- a/lib/widgets/add_exercise/preview_images.dart +++ b/lib/widgets/add_exercise/preview_images.dart @@ -18,41 +18,39 @@ class PreviewExerciseImages extends StatelessWidget with ExerciseImagePickerMixi return SizedBox( height: 300, child: ListView(scrollDirection: Axis.horizontal, children: [ - ...selectedImages - .map( - (file) => SizedBox( - height: 200, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Stack( - children: [ - Image.file(file), - Positioned( - bottom: 0, - right: 0, - child: Padding( - padding: const EdgeInsets.all(3.0), - child: Container( - decoration: BoxDecoration( - color: Colors.grey.withOpacity(0.5), - borderRadius: const BorderRadius.all(Radius.circular(20)), - ), - child: IconButton( - iconSize: 20, - onPressed: () => - context.read().removeExercise(file.path), - color: Colors.white, - icon: const Icon(Icons.delete), - ), - ), + ...selectedImages.map( + (file) => SizedBox( + height: 200, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Stack( + children: [ + Image.file(file), + Positioned( + bottom: 0, + right: 0, + child: Padding( + padding: const EdgeInsets.all(3.0), + child: Container( + decoration: BoxDecoration( + color: Colors.grey.withOpacity(0.5), + borderRadius: const BorderRadius.all(Radius.circular(20)), + ), + child: IconButton( + iconSize: 20, + onPressed: () => + context.read().removeExercise(file.path), + color: Colors.white, + icon: const Icon(Icons.delete), ), ), - ], + ), ), - ), + ], ), - ) - , + ), + ), + ), const SizedBox( width: 10, ), diff --git a/lib/widgets/add_exercise/steps/step2variations.dart b/lib/widgets/add_exercise/steps/step2variations.dart index f69a95d9..fbcf6133 100644 --- a/lib/widgets/add_exercise/steps/step2variations.dart +++ b/lib/widgets/add_exercise/steps/step2variations.dart @@ -28,40 +28,35 @@ class Step2Variations extends StatelessWidget { child: Column( children: [ // Exercise bases with variations - ...exerciseProvider.exerciseBasesByVariation.keys - .map( - (key) => Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Flexible( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - //mainAxisSize: MainAxisSize.max, - children: [ - ...exerciseProvider.exerciseBasesByVariation[key]! - .map( - (base) => Text( - base - .getExercise( - Localizations.localeOf(context).languageCode) - .name, - overflow: TextOverflow.ellipsis, - ), - ) - , - const SizedBox(height: 20), - ], + ...exerciseProvider.exerciseBasesByVariation.keys.map( + (key) => Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + //mainAxisSize: MainAxisSize.max, + children: [ + ...exerciseProvider.exerciseBasesByVariation[key]!.map( + (base) => Text( + base + .getExercise(Localizations.localeOf(context).languageCode) + .name, + overflow: TextOverflow.ellipsis, + ), ), - ), - Consumer( - builder: (ctx, provider, __) => Switch( - value: provider.variationId == key, - onChanged: (state) => provider.variationId = key), - ), - ], + const SizedBox(height: 20), + ], + ), ), - ) - , + Consumer( + builder: (ctx, provider, __) => Switch( + value: provider.variationId == key, + onChanged: (state) => provider.variationId = key), + ), + ], + ), + ), // Exercise bases without variations ...exerciseProvider.exercises .where((b) => b.variationId == null) @@ -92,8 +87,7 @@ class Step2Variations extends StatelessWidget { ), ], ), - ) - , + ), ], ), ), diff --git a/lib/widgets/core/about.dart b/lib/widgets/core/about.dart index fa64f8ed..b5979f18 100644 --- a/lib/widgets/core/about.dart +++ b/lib/widgets/core/about.dart @@ -23,8 +23,43 @@ import 'package:provider/provider.dart'; import 'package:wger/helpers/misc.dart'; import 'package:wger/providers/auth.dart'; +class AboutEntry extends StatelessWidget { + final String url; + final String title; + final String content; + final Icon icon; + + const AboutEntry({ + required this.title, + required this.content, + required this.url, + required this.icon, + }); + + @override + Widget build(BuildContext context) { + return ListTile( + leading: icon, + title: Text(title), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(content), + Text( + url, + style: const TextStyle(color: Colors.blue), + ), + ], + ), + contentPadding: EdgeInsets.zero, + onTap: () async => launchURL(url, context), + ); + } +} + class AboutPage extends StatefulWidget { static String routeName = '/AboutPage'; + const AboutPage({super.key}); @override @@ -89,91 +124,47 @@ class _AboutPageState extends State { AppLocalizations.of(context).aboutDescription, style: Theme.of(context).textTheme.bodyMedium!.copyWith(fontSize: 16), ), - SizedBox(height: 0.04 * deviceSize.height), - ListTile( - leading: const Icon(Icons.code), - title: Text(AppLocalizations.of(context).aboutSourceTitle), - subtitle: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(AppLocalizations.of(context).aboutSourceText), - const Text( - 'https://github.com/wger-project', - style: TextStyle(color: Colors.blue), - ), - ], - ), - contentPadding: EdgeInsets.zero, - onTap: () async => launchURL('https://github.com/wger-project', context), + const SizedBox(height: 10), + AboutEntry( + title: AppLocalizations.of(context).aboutSourceTitle, + content: AppLocalizations.of(context).aboutSourceText, + url: 'https://github.com/wger-project', + icon: const Icon(Icons.code), ), const SizedBox(height: 10), - ListTile( - leading: const Icon(Icons.bug_report), - title: Text(AppLocalizations.of(context).aboutBugsTitle), - subtitle: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(AppLocalizations.of(context).aboutBugsText), - const Text( - 'https://github.com/wger-project/flutter/issues/new/choose', - style: TextStyle(color: Colors.blue), - ) - ], - ), - contentPadding: EdgeInsets.zero, - onTap: () async => - launchURL('https://github.com/wger-project/flutter/issues/new/choose', context), + AboutEntry( + title: AppLocalizations.of(context).aboutBugsTitle, + content: AppLocalizations.of(context).aboutBugsText, + url: 'https://github.com/wger-project/flutter/issues/new/choose', + icon: const Icon(Icons.bug_report), ), const SizedBox(height: 10), - ListTile( - leading: const Icon(FontAwesomeIcons.discord), - title: Text(AppLocalizations.of(context).aboutContactUsTitle), - subtitle: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(AppLocalizations.of(context).aboutContactUsText), - const Text( - 'https://discord.gg/rPWFv6W', - style: TextStyle(color: Colors.blue), - ), - ], - ), - contentPadding: EdgeInsets.zero, - onTap: () async => launchURL('https://discord.gg/rPWFv6W', context), + AboutEntry( + title: AppLocalizations.of(context).aboutContactUsTitle, + content: AppLocalizations.of(context).aboutContactUsText, + url: 'https://discord.gg/rPWFv6W', + icon: const Icon(FontAwesomeIcons.discord), ), const SizedBox(height: 10), - ListTile( - leading: const Icon(FontAwesomeIcons.mastodon), - title: Text(AppLocalizations.of(context).aboutMastodonTitle), - subtitle: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(AppLocalizations.of(context).aboutMastodonText), - const Text( - 'https://fosstodon.org/@wger', - style: TextStyle(color: Colors.blue), - ), - ], - ), - contentPadding: EdgeInsets.zero, - onTap: () async => launchURL('https://fosstodon.org/@wger', context), + AboutEntry( + title: AppLocalizations.of(context).aboutMastodonTitle, + content: AppLocalizations.of(context).aboutMastodonText, + url: 'https://fosstodon.org/@wger', + icon: const Icon(FontAwesomeIcons.mastodon), ), const SizedBox(height: 10), - ListTile( - leading: const Icon(Icons.translate), - title: Text(AppLocalizations.of(context).aboutTranslationTitle), - subtitle: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(AppLocalizations.of(context).aboutTranslationText), - const Text( - 'https://hosted.weblate.org/engage/wger/', - style: TextStyle(color: Colors.blue), - ), - ], - ), - contentPadding: EdgeInsets.zero, - onTap: () async => launchURL('https://hosted.weblate.org/engage/wger/', context), + AboutEntry( + title: AppLocalizations.of(context).aboutTranslationTitle, + content: AppLocalizations.of(context).aboutTranslationText, + url: 'https://hosted.weblate.org/engage/wger', + icon: const Icon(Icons.translate), + ), + const SizedBox(height: 10), + AboutEntry( + title: AppLocalizations.of(context).aboutDonateTitle, + content: AppLocalizations.of(context).aboutDonateText, + url: 'https://www.buymeacoffee.com/wger', + icon: const Icon(FontAwesomeIcons.moneyBill1), ), ListTile( leading: const Icon(Icons.article), diff --git a/lib/widgets/dashboard/calendar.dart b/lib/widgets/dashboard/calendar.dart index f7ba8ba6..60f30c45 100644 --- a/lib/widgets/dashboard/calendar.dart +++ b/lib/widgets/dashboard/calendar.dart @@ -250,27 +250,25 @@ class _DashboardCalendarWidgetState extends State valueListenable: _selectedEvents, builder: (context, value, _) => Column( children: [ - ...value - .map((event) => ListTile( - title: Text((() { - switch (event.type) { - case EventType.caloriesDiary: - return AppLocalizations.of(context).nutritionalDiary; + ...value.map((event) => ListTile( + title: Text((() { + switch (event.type) { + case EventType.caloriesDiary: + return AppLocalizations.of(context).nutritionalDiary; - case EventType.session: - return AppLocalizations.of(context).workoutSession; + case EventType.session: + return AppLocalizations.of(context).workoutSession; - case EventType.weight: - return AppLocalizations.of(context).weight; + case EventType.weight: + return AppLocalizations.of(context).weight; - case EventType.measurement: - return AppLocalizations.of(context).measurement; - } - })()), - subtitle: Text(event.description), - //onTap: () => print('$event tapped!'), - )) - + case EventType.measurement: + return AppLocalizations.of(context).measurement; + } + })()), + subtitle: Text(event.description), + //onTap: () => print('$event tapped!'), + )) ], ), ), diff --git a/lib/widgets/exercises/exercises.dart b/lib/widgets/exercises/exercises.dart index 8110221e..a77ccb81 100644 --- a/lib/widgets/exercises/exercises.dart +++ b/lib/widgets/exercises/exercises.dart @@ -341,12 +341,9 @@ class MuscleWidget extends StatelessWidget { return Stack( children: [ SvgPicture.asset('assets/images/muscles/$background.svg'), - ...muscles - .map((m) => SvgPicture.asset('assets/images/muscles/main/muscle-${m.id}.svg')) - , + ...muscles.map((m) => SvgPicture.asset('assets/images/muscles/main/muscle-${m.id}.svg')), ...musclesSecondary - .map((m) => SvgPicture.asset('assets/images/muscles/secondary/muscle-${m.id}.svg')) - , + .map((m) => SvgPicture.asset('assets/images/muscles/secondary/muscle-${m.id}.svg')), ], ); } diff --git a/lib/widgets/nutrition/charts.dart b/lib/widgets/nutrition/charts.dart index e4ec2dd2..b7f9b257 100644 --- a/lib/widgets/nutrition/charts.dart +++ b/lib/widgets/nutrition/charts.dart @@ -158,7 +158,7 @@ class NutritionalDiaryChartWidgetFl extends StatefulWidget { const NutritionalDiaryChartWidgetFl({ super.key, required NutritionalPlan nutritionalPlan, - }) : _nutritionalPlan = nutritionalPlan; + }) : _nutritionalPlan = nutritionalPlan; final NutritionalPlan _nutritionalPlan; @@ -397,7 +397,7 @@ class FlNutritionalDiaryChartWidget extends StatefulWidget { const FlNutritionalDiaryChartWidget({ super.key, required NutritionalPlan nutritionalPlan, - }) : _nutritionalPlan = nutritionalPlan; + }) : _nutritionalPlan = nutritionalPlan; final Color barColor = Colors.red; final Color touchedBarColor = Colors.deepOrange; diff --git a/lib/widgets/workouts/log.dart b/lib/widgets/workouts/log.dart index 523016c9..9810659e 100644 --- a/lib/widgets/workouts/log.dart +++ b/lib/widgets/workouts/log.dart @@ -124,23 +124,21 @@ class _DayLogWidgetState extends State { ) else Container(), - ...widget._exerciseData[base]! - .map( - (log) => Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text(log.singleLogRepTextNoNl), - IconButton( - icon: const Icon(Icons.delete), - onPressed: () async { - showDeleteDialog( - context, exercise.name, log, exercise, widget._exerciseData); - }, - ), - ], + ...widget._exerciseData[base]!.map( + (log) => Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(log.singleLogRepTextNoNl), + IconButton( + icon: const Icon(Icons.delete), + onPressed: () async { + showDeleteDialog( + context, exercise.name, log, exercise, widget._exerciseData); + }, ), - ) - , + ], + ), + ), Padding( padding: const EdgeInsets.symmetric(horizontal: 15), child: ExerciseLogChart(base, widget._date), diff --git a/pubspec.yaml b/pubspec.yaml index c6e4a8c5..f168e86e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -21,7 +21,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # - the version number is taken from the git tag vX.Y.Z # - the build number is computed by reading the last one from the play store # and increasing by one -version: 1.6.3+38 +version: 1.6.4+39 environment: sdk: '>=3.0.0 <4.0.0' diff --git a/test_data/exercises.dart b/test_data/exercises.dart index 89bedf97..7efe05df 100644 --- a/test_data/exercises.dart +++ b/test_data/exercises.dart @@ -23,6 +23,8 @@ import 'package:wger/models/exercises/language.dart'; import 'package:wger/models/exercises/muscle.dart'; import 'package:wger/models/exercises/translation.dart'; +import 'screenshots_exercises.dart'; + const tLanguage1 = Language(id: 1, shortName: 'de', fullName: 'Deutsch'); const tLanguage2 = Language(id: 2, shortName: 'en', fullName: 'English'); const tLanguage3 = Language(id: 3, shortName: 'fr', fullName: 'Français'); @@ -211,3 +213,14 @@ List getTestExerciseBases() { return [benchPress, crunches, deadLift, curls, squats, sideRaises]; } + +List getScreenshotExercises() { + benchPress.translations = benchPressTranslations; + crunches.translations = crunchesTranslations; + deadLift.translations = deadLiftTranslations; + curls.translations = curlsTranslations; + squats.translations = squatsTranslations; + sideRaises.translations = raisesTranslations; + + return [benchPress, crunches, deadLift, curls, squats, sideRaises]; +} diff --git a/test_data/screenshots_exercises.dart b/test_data/screenshots_exercises.dart new file mode 100644 index 00000000..475866ca --- /dev/null +++ b/test_data/screenshots_exercises.dart @@ -0,0 +1,572 @@ +// Autogenerated by extract-i18n-flutter-exercises.py do not edit! +import 'package:wger/models/exercises/language.dart'; +import 'package:wger/models/exercises/translation.dart'; + +const tLanguage21 = Language( + id: 21, + shortName: 'he', + fullName: 'עברית', +); +const tLanguage5 = Language( + id: 5, + shortName: 'ru', + fullName: 'Русский', +); +const tLanguage16 = Language( + id: 16, + shortName: 'tr', + fullName: 'Türkçe', +); +const tLanguage22 = Language( + id: 22, + shortName: 'hr', + fullName: 'Hrvatski jezik', +); +const tLanguage9 = Language( + id: 9, + shortName: 'cs', + fullName: 'Čeština', +); +const tLanguage4 = Language( + id: 4, + shortName: 'es', + fullName: 'Español', +); +const tLanguage24 = Language( + id: 24, + shortName: 'zh', + fullName: '漢語', +); +const tLanguage17 = Language( + id: 17, + shortName: 'ar', + fullName: 'اَللُّغَةُ اَلْعَرَبِيَّة', +); +const tLanguage8 = Language( + id: 8, + shortName: 'el', + fullName: 'Ελληνικά', +); +const tLanguage2 = Language( + id: 2, + shortName: 'en', + fullName: 'English', +); +const tLanguage13 = Language( + id: 13, + shortName: 'it', + fullName: 'Italian', +); +const tLanguage12 = Language( + id: 12, + shortName: 'fr', + fullName: 'Français', +); +const tLanguage1 = Language( + id: 1, + shortName: 'de', + fullName: 'Deutsch', +); +const tLanguage23 = Language( + id: 23, + shortName: 'id', + fullName: 'Bahasa Indonesia', +); +const tLanguage6 = Language( + id: 6, + shortName: 'nl', + fullName: 'Nederlands', +); +const tLanguage7 = Language( + id: 7, + shortName: 'pt', + fullName: 'Português', +); + +final squatsPT = Translation( + id: 1598, + uuid: '620fef1e-19c5-4bfe-bc8d-9dac6764c386', + created: DateTime(2021, 1, 15), + name: 'Agachamento de impulso', + description: + '''

Posição inicial:

Comece na posição de prancha alta:costas, braços e pernas retos e as mãos afastadas alinhadas aos ombros.

Passos:

  1. Pule jogando seus pés para frente entre os braços, mantendo as costas reta.
  2. Mantendo suas mãos no chão, retorne suas pernas para a posição de prancha altas.
  3. Repita.
''', + baseId: 616, + language: tLanguage7, +); + +final squatsNL = Translation( + id: 1599, + uuid: 'ad8d8323-6f73-4215-9510-4d0f0c8d09d1', + created: DateTime(2021, 1, 15), + name: 'Hurkstoten', + description: + '''

Startpositie:

Begin in hoge plankpositie:rug, armen en benen recht en handen op schouderbreedte uit elkaar.

Stap:

  1. Spring met je voeten naar voren tussen je armen en houd je rug plat.
  2. Houd je handen op de vloer, spring je benen terug in hoge plank positie.
  3. Herhalen.
''', + baseId: 616, + language: tLanguage6, +); + +final squatsID = Translation( + id: 1600, + uuid: '74df4b83-df24-4d87-9abd-18c74e56ebff', + created: DateTime(2021, 1, 15), + name: 'Jongkok menyodorkan', + description: + '''

Posisi awal:

Mulailah dengan posisi papan tinggi:punggung, lengan, dan kaki lurus dan tangan selebar bahu.

Langkah:

  1. Lompati kaki Anda ke depan di antara kedua lengan, jaga punggung tetap rata.
  2. Menjaga tangan Anda di lantai, melompat kaki Anda kembali ke posisi papan tinggi.
  3. Ulangi.
''', + baseId: 616, + language: tLanguage23, +); + +final squatsDE = Translation( + id: 1601, + uuid: '707e4acd-2068-416a-9c1d-c1c3c09fdafd', + created: DateTime(2021, 1, 15), + name: 'Kniebeugen', + description: + '''

Ausgangsposition:

Beginne in der hohen Plank-Position:Rücken, Arme und Beine sind gestreckt, die Hände sind schulterbreit auseinander.

Schritte:

  1. Springe mit den Füßen zwischen den Armen nach vorne und halte den Rücken flach.
  2. Lasse die Hände auf dem Boden und springe mit den Beinen zurück in die hohe Plank-Position.
  3. Wiederhole die Übung.
''', + baseId: 616, + language: tLanguage1, +); + +final squatsFR = Translation( + id: 1602, + uuid: 'de068084-3779-4946-9ace-80efa23b7f89', + created: DateTime(2021, 1, 15), + name: 'Poussées de squat', + description: '''''', + baseId: 616, + language: tLanguage12, +); + +final squatsIT = Translation( + id: 1603, + uuid: 'ab2193fb-0c9c-46a3-9b6b-fada20eb5eaa', + created: DateTime(2021, 1, 15), + name: 'Spinte squat', + description: + '''

Posizione di partenza:

Iniziare in posizione di plank alto:schiena, braccia e gambe dritte e mani alla larghezza delle spalle.

Passi:

  1. Saltare i piedi in avanti tra le braccia, mantenendo la schiena piatta.
  2. Tenendo le mani sul pavimento, saltare le gambe indietro in posizione di plank alto.
  3. Ripetere.
''', + baseId: 616, + language: tLanguage13, +); + +final squatsEN = Translation( + id: 795, + uuid: '85e6baf6-f8a3-48ea-9365-ef2bf5b3c6d1', + created: DateTime(2021, 1, 15), + name: 'Squat Thrust', + description: + '''The burpee, or squat thrust, is a full body exercise used in strength training and as an aerobic exercise. The basic movement is performed in four steps and known as a four-count burpee: Begin in a standing position. Move into a squat position with your hands on the ground. (count 1) Kick your feet back into a plank position, while keeping your arms extended. (count 2) Immediately return your feet into squat position. (count 3) Stand up from the squat position (count 4)''', + baseId: 616, + language: tLanguage2, +); + +final squatsEL = Translation( + id: 1604, + uuid: 'fd6ac5d0-08da-4dc7-87b7-af316504dcda', + created: DateTime(2021, 1, 15), + name: 'Ωθήσεις βαθέος καθίσματος', + description: + '''

Θέση εκκίνησης:

Εκκίνηση σε θέση υψηλής σανίδας:πλάτη, χέρια και πόδια είναι ίσια, και τα χέρια βρίσκονται στο πλάτος των ώμων.

Βήματα:

  1. Πηδήξτε με τα πόδια προς τα εμπρός ανάμεσα στα χέρια, κρατώντας την πλάτη επίπεδη.
  2. Διατηρώντας τα χέρια στο πάτωμα, πηδήξτε με τα πόδια σας πίσω σε θέση υψηλής σανίδας.
  3. Επαναλάβετε.
''', + baseId: 616, + language: tLanguage8, +); + +final squatsAR = Translation( + id: 1605, + uuid: 'ae573182-e32f-434f-829d-536947e966fb', + created: DateTime(2021, 1, 15), + name: 'دفعات القرفصاء', + description: + '''

وضع البداية:

ابدأ في وضع اللوح الخشبي المرتفع:الظهر والذراعين والساقين مستقيمين واليدين متباعدتين بعرض الكتفين.

الخطوات:

  1. اقفز قدميك للأمام بين ذراعيك ، مع الحفاظ على ظهرك مسطحًا.
  2. إبقاء يديك على الأرض ، واقفز رجليك إلى الوراء في وضع اللوح الخشبي العالي.
  3. كرر.
''', + baseId: 616, + language: tLanguage17, +); + +final squatsZH = Translation( + id: 1606, + uuid: '3c39e44c-4832-4937-bcad-ff6678c02203', + created: DateTime(2021, 1, 15), + name: '俯卧撑腿屈伸', + description: + '''

起始姿势:以高位平板支撑姿势开始:背部、手臂和腿均伸直,双手分开与肩同宽。

步骤:

  1. 双脚向双臂的方向向前跳,保持背部平直。
  2. 双手撑地,双腿跳回高位平板支撑位置。
  3. 重复。
''', + baseId: 616, + language: tLanguage24, +); + +final squatsTranslations = [ + squatsPT, + squatsNL, + squatsID, + squatsDE, + squatsFR, + squatsIT, + squatsEN, + squatsEL, + squatsAR, + squatsZH +]; + +final benchPressDE = Translation( + id: 15, + uuid: '198dcb2e-e35f-4b69-ae8b-e1124d438eae', + created: DateTime(2021, 1, 15), + name: 'Bankdrücken LH', + description: + '''

Lege dich auf die Bank, die Stange direkt über die Augen, die Knie etwas angewinkelt und die Füße fest auf dem Boden. Greife die Stange breit und lasse sie langsam und kontrolliert runter, dabei sollte die Stange kurz auf Brustwarzenhöhe den Körper berühren. Dann das Gewicht wieder hochdrücken bis die Arme durchgestreckt sind.

+

Bei hohem Gewicht, empfielt sich natürlich einen Spotter zu haben, der einen hilft falls man die Stange nicht alleine hochdrücken kann.

+

Mit der Breite des Griffs kann außerdem kontrolliert werden, welcher Bereich der Brust stärker belastet wird:

+
    +
  • breiter Griff: äußere Brustmuskeln
  • +
  • enger Griff: innere Brustmuskeln und Trizeps
  • +
''', + baseId: 73, + language: tLanguage1, +); + +final benchPressEN = Translation( + id: 192, + uuid: '5da6340b-22ec-4c1b-a443-eef2f59f92f0', + created: DateTime(2021, 1, 15), + name: 'Bench Press', + description: + '''

Lay down on a bench, the bar should be directly above your eyes, the knees are somewhat angled and the feet are firmly on the floor. Concentrate, breath deeply and grab the bar more than shoulder wide. Bring it slowly down till it briefly touches your chest at the height of your nipples. Push the bar up.

+

If you train with a high weight it is advisable to have a spotter that can help you up if you can't lift the weight on your own.

+

With the width of the grip you can also control which part of the chest is trained more:

+
    +
  • wide grip: outer chest muscles
  • +
  • narrow grip: inner chest muscles and triceps
  • +
''', + baseId: 73, + language: tLanguage2, +); + +final benchPressIT = Translation( + id: 1218, + uuid: '92fd2bf0-9cf8-40fc-8a69-e5e16136327d', + created: DateTime(2021, 1, 15), + name: 'Distensione Panca Piana con Bilanciere', + description: '''Distensione Panca Piana con BilanciereDistensione Panca Piana con Bilanciere''', + baseId: 73, + language: tLanguage13, +); + +final benchPressTranslations = [benchPressDE, benchPressEN, benchPressIT]; + +final deadLiftEN = Translation( + id: 105, + uuid: '22cca8fc-cfaf-4941-b0f7-faf9f2937c52', + created: DateTime(2021, 1, 15), + name: 'Deadlifts', + description: + '''

Stand firmly, with your feet slightly more than shoulder wide apart. Stand directly behind the bar where it should barely touch your shin, your feet pointing a bit out. Bend down with a straight back, the knees also pointing somewhat out. Grab the bar with a shoulder wide grip, one underhand, one reverse grip.

+

Pull the weight up. At the highest point make a slight hollow back and pull the bar back. Hold 1 or 2 seconds that position. Go down, making sure the back is not bent. Once down you can either go back again as soon as the weights touch the floor, or make a pause, depending on the weight.

''', + baseId: 184, + language: tLanguage2, +); + +final deadLiftDE = Translation( + id: 9, + uuid: '521a5e4f-6f35-43e5-9d1c-6e75c4956e96', + created: DateTime(2021, 1, 15), + name: 'Kreuzheben', + description: + '''

Stelle dich mit etwas mehr als schulterbreitem Stand vor der Stange, die Füße zeigen leicht nach außen, die Stange ist direkt darüber und sehr nahe am Schienbein. Beuge die Knie (zeigen ebenfalls etwas nach außen) und neige den Oberkörper (bleibt während der ganzen Übung gerade). Greife die Stange schulterbreit mit einem Unter- und einem Obergriff.

+

Ziehe nun die Stange nach oben. An der höchsten Stelle mache ein leichtes Hohlkreuz und drücke die Schultern nach hinten. Gehe wieder runter, wobei du darauf achtest, dass der Rücken gerade bleibt und sich nicht krümmt. Du kannst unten angekommen eine kleine Pause einlegen oder sofort weitermachen.

''', + baseId: 184, + language: tLanguage1, +); + +final deadLiftPT = Translation( + id: 1401, + uuid: 'e570cd82-5a8f-4768-a2f3-8d60bad5c6e8', + created: DateTime(2021, 1, 15), + name: 'Levantamento terra', + description: + '''Fique firme, com os pés ligeiramente mais afastados do que os ombros. Fique diretamente atrás da barra, onde ela mal deve tocar sua canela, com os pés apontando um pouco para fora. Curve-se com as costas retas, os joelhos também apontando um pouco para fora. Agarre a barra com uma pegada na largura dos ombros, uma pegada por baixo e uma pegada reversa. + +Puxe o peso para cima. No ponto mais alto, faça uma leve depressão para trás e puxe a barra para trás. Segure 1 ou 2 segundos nessa posição. Desça, certificando-se de que as costas não estão dobradas. Depois de descer, você pode voltar assim que os pesos tocarem o chão ou fazer uma pausa, dependendo do peso.''', + baseId: 184, + language: tLanguage7, +); + +final deadLiftIT = Translation( + id: 1402, + uuid: '7c088d54-6732-4d5e-aae8-9be8d4a1f111', + created: DateTime(2021, 1, 15), + name: 'Stacco', + description: '''StaccoStacco +Stacco''', + baseId: 184, + language: tLanguage13, +); + +final deadLiftTranslations = [deadLiftEN, deadLiftDE, deadLiftPT, deadLiftIT]; + +final crunchesPT = Translation( + id: 1381, + uuid: '332b844f-816c-486d-8ef4-f58517514061', + created: DateTime(2021, 1, 15), + name: 'Abdominal', + description: + '''
  1. Deite-se de barriga para cima no chão com os joelhos dobrados.
  2. Curve os ombros em direção a pélvis. As mãos podem ficar atrás ou do lado do pescoço ou cruzadas sobre o peito.
  3. Repita
''', + baseId: 167, + language: tLanguage7, +); + +final crunchesES = Translation( + id: 1382, + uuid: 'ca89f09f-e7d0-4490-bf43-b539fd86c6ee', + created: DateTime(2021, 1, 15), + name: 'Abdominales', + description: + '''
  1. Acuéstese boca arriba en el suelo con las rodillas dobladas.
  2. Flexione los hombros hacia la pelvis. Las manos pueden estar detrás o al costado del cuello o cruzadas sobre el pecho.
  3. Repita
''', + baseId: 167, + language: tLanguage4, +); + +final crunchesFR = Translation( + id: 1383, + uuid: '5973bc39-5589-436d-aa68-f0cb22b6f385', + created: DateTime(2021, 1, 15), + name: 'Abdominaux', + description: + '''
  1. Allongez-vous sur le sol, face contre terre, genoux pliés.
  2. Courbez les épaules vers le bassin. Les mains peuvent être derrière ou à côté du cou ou croisées sur la poitrine.
  3. Répétez
''', + baseId: 167, + language: tLanguage12, +); + +final crunchesIT = Translation( + id: 1384, + uuid: 'd09f38a4-2c88-46ef-a847-cb66289d250b', + created: DateTime(2021, 1, 15), + name: 'Addominali', + description: + '''
  1. Sdraiati a pancia in su sul pavimento con le ginocchia piegate.
  2. Solleva il busto verso il bacino, a 30° / 40° dal suolo. Le mani possono essere dietro o accanto al collo o incrociate sul petto.
  3. Ripeti
''', + baseId: 167, + language: tLanguage13, +); + +final crunchesNL = Translation( + id: 1385, + uuid: '930864f4-6200-4a7f-a8b0-7bdb6d401ef5', + created: DateTime(2021, 1, 15), + name: 'Crunch', + description: + '''
  1. Ga op je rug liggen en buig je knieën.
  2. Draai je schouders richting je bekken. Houd je handen achter of naast je nek of kruislings over je borstkas.
  3. Herhaal
''', + baseId: 167, + language: tLanguage6, +); + +final crunchesID = Translation( + id: 1386, + uuid: '447d0191-1f05-4e9b-8a17-6fdb4434359e', + created: DateTime(2021, 1, 15), + name: 'Crunch', + description: + '''
  1. Tiarap di lantai dengan lutut bengkok.
  2. Ikatkan bahumu ke pinggulnya. Tangan bisa berada di belakang atau di samping leher atau menyeberang di atas dada.
  3. Ulangi
''', + baseId: 167, + language: tLanguage23, +); + +final crunchesDE = Translation( + id: 4, + uuid: '0e10ac9b-ed1d-42c9-b8cc-123c22ccc5d5', + created: DateTime(2021, 1, 15), + name: 'Crunches', + description: + '''

Lege dich auf eine Matte mit angewinkelten Beinen. Die Füße werden irgendwie festgehalten (Partner, Lanhghantel, o.Ä.) und die Hände werden hinter dem Nacken verschränkt. Aus dieser Position führe den Oberkörper so weit nach oben, bis Kopf oder Ellenbogen die angewinkelten Beine berühren.

+

Es ist wichtig, dass dieser Vorgang mit einer rollenden Bewegung durchgeführt wird: die Wirbelsäule sollte sich Wirbel für Wirbel von der Matte lösen. Ein Hohlkreuz ist stets zu vermeiden.

''', + baseId: 167, + language: tLanguage1, +); + +final crunchesEN = Translation( + id: 91, + uuid: 'd325dd5c-6833-41c7-8eea-6b95c4871133', + created: DateTime(2021, 1, 15), + name: 'Crunches', + description: + '''

Lay down on your back a soft surface, the feet are on the floor. Ask a partner or use some other help (barbell, etc.) to keep them fixed, your hands are behind your head. From this position move your upper body up till your head or elbows touch your knees. Do this movement by rolling up your back.

''', + baseId: 167, + language: tLanguage2, +); + +final crunchesCS = Translation( + id: 1387, + uuid: 'bba98d12-499b-462a-982b-4be3875ec91f', + created: DateTime(2021, 1, 15), + name: 'Sedolehy', + description: + '''
  1. Lehni si na zem hlavou nahoru s pokrčenými koleny.Zvedni záda tak, aby se tvá ramena co nejblíže přiblížily ke kolenům. Plosky nohou včetně prstů by měly zůstat na zemi. Ruce mohou být za hlavou nebo přeložené v kříž na hrudi.
  2. Opakuj
''', + baseId: 167, + language: tLanguage9, +); + +final crunchesHR = Translation( + id: 1388, + uuid: '8a564835-465b-47b5-a636-a086e390b310', + created: DateTime(2021, 1, 15), + name: 'Trbušnjaci', + description: '''''', + baseId: 167, + language: tLanguage22, +); + +final crunchesTR = Translation( + id: 1389, + uuid: 'c53a1e4f-c067-440a-a872-d4f48322e520', + created: DateTime(2021, 1, 15), + name: 'Yarım mekik', + description: + '''
  1. Dizlerinizi bükerek yere sırtüstü yatın.
  2. Omuzları leğen kemiğine doğru bükün. Eller boynun arkasında veya yanında olabilir ya da göğsün üzerinden geçebilir.
  3. Tekrarlayın
''', + baseId: 167, + language: tLanguage16, +); + +final crunchesEL = Translation( + id: 1390, + uuid: 'f818817e-2564-4f65-bf62-dcb2673565b6', + created: DateTime(2021, 1, 15), + name: 'Κοιλιακοί', + description: + '''
  1. Ξαπλώστε ανάσκελα στο πάτωμα με τα γόνατα λυγισμένα.
  2. Κυρτώστε τους ώμους προς τη λεκάνη. Τα χέρια μπορεί να είναι πίσω ή δίπλα από τον αυχένα ή σταυρωμένα πάνω από το στήθος.
  3. Επαναλάβετε
''', + baseId: 167, + language: tLanguage8, +); + +final crunchesRU = Translation( + id: 1391, + uuid: 'f9d9d264-dcb9-4f6f-96d6-8df325dabdfe', + created: DateTime(2021, 1, 15), + name: 'Скручивания', + description: '''''', + baseId: 167, + language: tLanguage5, +); + +final crunchesHE = Translation( + id: 1392, + uuid: '1e79bbb1-e310-42d0-8e25-043fbf12043a', + created: DateTime(2021, 1, 15), + name: 'כפיפות בטן', + description: '''''', + baseId: 167, + language: tLanguage21, +); + +final crunchesAR = Translation( + id: 1393, + uuid: '25129a40-e28f-418e-ba90-c0259b7b91d7', + created: DateTime(2021, 1, 15), + name: 'الطحن', + description: + '''
  1. الاستلقاء على الأرض مع ثني الركبتين.
  2. لف الكتفين نحو الحوض. يمكن أن تكون اليدين خلف العنق أو بجانبه أو متقاطعتين فوق الصدر.
  3. كرر التمرين
''', + baseId: 167, + language: tLanguage17, +); + +final crunchesZH = Translation( + id: 1394, + uuid: '45db81d5-df0f-4be1-9e3c-08d2291cfd88', + created: DateTime(2021, 1, 15), + name: '仰卧起坐', + description: + '''

起始姿势:膝盖弯曲,脸朝上躺在地板上。

步骤:

  1. 朝骨盆方向弯曲肩膀。 双手可以放在脖子后面或脖子旁边,也可以交叉在胸前。2.回到初始姿势。
  2. 重复。
''', + baseId: 167, + language: tLanguage24, +); + +final crunchesTranslations = [ + crunchesPT, + crunchesES, + crunchesFR, + crunchesIT, + crunchesNL, + crunchesID, + crunchesDE, + crunchesEN, + crunchesCS, + crunchesHR, + crunchesTR, + crunchesEL, + crunchesRU, + crunchesHE, + crunchesAR, + crunchesZH +]; + +final curlsEN = Translation( + id: 81, + uuid: '48a59aa8-4568-409c-8afe-f8cb99c558ea', + created: DateTime(2021, 1, 15), + name: 'Biceps Curls With Dumbbell', + description: + '''

Hold two barbells, the arms are streched, the hands are on your side, the palms face inwards. Bend the arms and bring the weight with a fast movement up. At the same time, rotate your arms by 90 degrees at the very beginning of the movement. At the highest point, rotate a little the weights further outwards. Without a pause, bring them down, slowly.

+

Don't allow your body to swing during the exercise, all work is done by the biceps, which are the only mucles that should move (pay attention to the elbows).

''', + baseId: 92, + language: tLanguage2, +); + +final curlsDE = Translation( + id: 26, + uuid: '8cbbffcc-1989-43de-9200-03869480398c', + created: DateTime(2021, 1, 15), + name: 'Bizeps KH-Curls', + description: + '''

Halte zwei Kurzhantel mit ausgestreckten Armen neben dem Körper, die Handflächen zeigen nach innen. Beuge die Arme und brige die Hanteln mit einer schnellen Bewegung nach oben wobei sie gleichzeitig um 90 Grad gedreht werden. Am höchsten Punkt kann man die Hanteln ganz leicht weiter nach außen drehen. Ohne Pause wird das Gewicht nun kontrolliert nach unten gebracht. Beachte, dass die Bewegung nach oben schneller ist als nach unten.

+

Während des Bewegungablaufs darf der Körper nicht mitschwingen. Die Ellenbogen bleiben dabei immer an der Stelle.

''', + baseId: 92, + language: tLanguage1, +); + +final curlsES = Translation( + id: 1213, + uuid: 'a3ed40fb-83d3-4901-889f-6bba313e8c80', + created: DateTime(2021, 1, 15), + name: 'Curl de bíceps con mancuerna', + description: + '''Sujeta dos pesas, los brazos estirados, las manos a los lados, las palmas hacia dentro. Flexiona los brazos y sube el peso con un movimiento rápido. Al mismo tiempo, gira los brazos 90 grados al principio del movimiento. En el punto más alto, gira un poco las pesas hacia fuera. Sin pausa, bájalas lentamente.No permitas que tu cuerpo se balancee durante el ejercicio, todo el trabajo lo realizan los bíceps, que son los únicos músculos que deben moverse (presta atención a los codos).''', + baseId: 92, + language: tLanguage4, +); + +final curlsTranslations = [curlsEN, curlsDE, curlsES]; + +final raisesIT = Translation( + id: 1426, + uuid: '28bf0f7b-ceba-47a6-8807-3cbd3312c82f', + created: DateTime(2021, 1, 15), + name: 'Alzate Laterali', + description: '''Alzate LateraliAlzate Laterali''', + baseId: 348, + language: tLanguage13, +); + +final raisesEN = Translation( + id: 148, + uuid: '5345766a-c092-457a-aa21-8ee6ffa855d4', + created: DateTime(2021, 1, 15), + name: 'Lateral Raises', + description: + '''This exercise works the deltoid muscle of the shoulder. The movement starts with the arms straight, and the hands holding weights at the sides or in front of the body. Body is in a slight forward-leaning position with hips and knees bent a little. Arms are kept straight or slightly bent, and raised through an arc of movement in the coronal plane that terminates when the hands are at approximately shoulder height. Weights are lowered to the starting position, completing one rep. When using a cable machine the individual stands with the coronal plane in line with the pulley, which is at or near the ground.[9] The exercise can be completed one shoulder at a time (with the other hand used to stabilize the body against the weight moved), or with both hands simultaneously if two parallel pulleys are available.''', + baseId: 348, + language: tLanguage2, +); + +final raisesDE = Translation( + id: 20, + uuid: '72e78f4d-65f7-4ddd-9247-cdc1e133fa80', + created: DateTime(2021, 1, 15), + name: 'Seitheben KH', + description: '''
    +
  1. Aufrechter Stand, Kopf nach vorne gerichtet, eine Kurzhantel in jeder Hand.
  2. +
  3. Handflächen nach innen, in Richtung des Körpers, gerichtet.
  4. +
  5. Hebe die Hanteln seitlich nach oben, ohne Schwung zu holen. Atme aus. Die Ellenbogen sind leicht gebeugt. Hebe die Kurzhanteln soweit, bis die Arme parallel zum Boden sind.
  6. +
  7. Am obersten Punkt sollten deine Handflächen nach unten zeigen.
  8. +
  9. Am höchsten Punkt hältst du für 1-2 Sekunden inne und ziehst deine Schulterblätter zusammen.
  10. +
  11. Führe die Hanteln langsam wieder nach unten in die Ausgangsposition und atme ein.
  12. +
''', + baseId: 348, + language: tLanguage1, +); + +final raisesTranslations = [raisesIT, raisesEN, raisesDE]; diff --git a/test_data/workouts.dart b/test_data/workouts.dart index b38f52c9..eb1c1ea8 100644 --- a/test_data/workouts.dart +++ b/test_data/workouts.dart @@ -16,6 +16,7 @@ * along with this program. If not, see . */ +import 'package:wger/models/exercises/base.dart'; import 'package:wger/models/workouts/day.dart'; import 'package:wger/models/workouts/log.dart'; import 'package:wger/models/workouts/repetition_unit.dart'; @@ -32,8 +33,8 @@ const weightUnit2 = WeightUnit(id: 2, name: 'metric tonnes'); const RepetitionUnit repetitionUnit1 = RepetitionUnit(id: 1, name: 'Repetitions'); const RepetitionUnit repetitionUnit2 = RepetitionUnit(id: 2, name: 'Hours'); -WorkoutPlan getWorkout() { - final testBases = getTestExerciseBases(); +WorkoutPlan getWorkout({List? exercises}) { + final testBases = exercises ?? getTestExerciseBases(); final log1 = Log.empty() ..id = 1