woocommerce / woocommerce-android

WooCommerce Android app
https://www.woocommerce.com/mobile
GNU General Public License v2.0
262 stars 133 forks source link

Save shipping methods locally #11527

Closed atorresveiga closed 2 weeks ago

atorresveiga commented 2 weeks ago

This PR depends on this FluxC PR

Closes: #11515

Description

This PR adds support for caching shipping methods and improves the perceived performance when displaying shipping methods. With these changes, the source of truth will be the local data, and on background, we will refresh the shipping methods info. I also added support for refreshing the info using the pull-to-refresh pattern.

Testing instructions

TC1

  1. Open the app
  2. Go to orders
  3. Tap on add new order (+)
  4. Add a product to enable the the shipping section
  5. Tap on Add shipping
  6. Tap on Select method to navigate to the select method screen
  7. Check that if is the first time that the screen is opened the data is fetched and displayed form a network request
  8. Check that the n time the screen is opened the data is displayed from the DB (on background we make a request to refresh the data)

TC2

  1. Additionally you can test the refresh scenario

Images/gif

https://github.com/woocommerce/woocommerce-android/assets/18119390/9ac62a5a-5b6f-40eb-8e29-2e000c5109aa

dangermattic commented 2 weeks ago
1 Warning
:warning: This PR is assigned to the milestone 18.7. This milestone is due in less than 2 days.
Please make sure to get it merged by then or assign it to a milestone with a later deadline.

Generated by :no_entry_sign: Danger

wpmobilebot commented 2 weeks ago

📲 You can test the changes from this Pull Request in WooCommerce Android by scanning the QR code below to install the corresponding build.

App Name WooCommerce Android
FlavorJalapeno
Build TypeDebug
Commite311c3593c47b18fb50241e241c5eeb5d991e415
Direct Downloadwoocommerce-prototype-build-pr11527-e311c35.apk
codecov-commenter commented 2 weeks ago

Codecov Report

Attention: Patch coverage is 75.80645% with 15 lines in your changes are missing coverage. Please review.

Project coverage is 40.84%. Comparing base (535d184) to head (a9c2c08). Report is 10 commits behind head on trunk.

:exclamation: Current head a9c2c08 differs from pull request most recent head e311c35. Consider uploading reports for the commit e311c35 to get more accurate results

Files Patch % Lines
...creation/shipping/OrderShippingMethodsViewModel.kt 57.69% 8 Missing and 3 partials :warning:
...ers/creation/shipping/ShippingMethodsRepository.kt 91.30% 0 Missing and 2 partials :warning:
.../orders/creation/shipping/GetShippingMethodById.kt 66.66% 0 Missing and 1 partial :warning:
...orders/creation/shipping/RefreshShippingMethods.kt 85.71% 0 Missing and 1 partial :warning:
Additional details and impacted files ```diff @@ Coverage Diff @@ ## trunk #11527 +/- ## ============================================ + Coverage 40.46% 40.84% +0.37% + Complexity 5191 5186 -5 ============================================ Files 1083 1070 -13 Lines 62928 62335 -593 Branches 8626 8505 -121 ============================================ - Hits 25466 25461 -5 + Misses 35171 34583 -588 Partials 2291 2291 ```

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

wpmobilebot commented 2 weeks ago

Found 1 violations:

The PR caused the following dependency changes:

expand

```diff -+--- org.wordpress:fluxc:3008-f3ff9689a0a998537a624ce9a77b930a341bee48 -| +--- org.wordpress:wellsql:2.0.0 -| | +--- androidx.annotation:annotation:1.2.0 -> 1.7.0 (*) -| | \--- org.wordpress.wellsql:wellsql-annotations:2.0.0 -| +--- org.wordpress.fluxc:fluxc-annotations:3008-f3ff9689a0a998537a624ce9a77b930a341bee48 -| +--- org.greenrobot:eventbus:3.3.1 (*) -| +--- com.squareup.okhttp3:okhttp:4.9.0 -> 4.12.0 (*) -| +--- com.android.volley:volley:1.1.1 -> 1.2.0 -| +--- androidx.paging:paging-runtime:2.1.2 -| | +--- androidx.paging:paging-common:2.1.2 -| | | +--- androidx.annotation:annotation:1.0.0 -> 1.7.0 (*) -| | | \--- androidx.arch.core:core-common:2.0.0 -> 2.2.0 (*) -| | +--- androidx.arch.core:core-runtime:2.0.0 -> 2.2.0 (*) -| | +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.6.2 (*) -| | +--- androidx.lifecycle:lifecycle-livedata:2.0.0 -> 2.6.2 (*) -| | \--- androidx.recyclerview:recyclerview:1.0.0 -> 1.3.2 (*) -| +--- com.goterl:lazysodium-android:5.0.2 -| +--- net.java.dev.jna:jna:5.5.0 -| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.20 -> 1.9.10 (*) -| +--- org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.6.20 -> 1.9.22 -| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*) -| +--- androidx.appcompat:appcompat:1.0.2 -> 1.6.1 (*) -| +--- androidx.recyclerview:recyclerview:1.0.0 -> 1.3.2 (*) -| +--- androidx.exifinterface:exifinterface:1.0.0 -> 1.3.6 -| | \--- androidx.annotation:annotation:1.2.0 -> 1.7.0 (*) -| +--- androidx.security:security-crypto:1.0.0 -> 1.1.0-alpha03 -| | +--- androidx.annotation:annotation:1.1.0 -> 1.7.0 (*) -| | +--- com.google.crypto.tink:tink-android:1.5.0 -| | \--- androidx.collection:collection:1.1.0 -> 1.4.0 (*) -| +--- com.squareup.okhttp3:okhttp-urlconnection:4.9.0 -| | +--- com.squareup.okhttp3:okhttp:4.9.0 -> 4.12.0 (*) -| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10 -> 1.9.10 (*) -| +--- com.google.code.gson:gson:2.8.5 -> 2.10.1 -| +--- org.apache.commons:commons-text:1.10.0 (*) -| +--- androidx.room:room-runtime:2.4.2 -> 2.5.2 (*) -| +--- androidx.room:room-ktx:2.4.2 -> 2.5.2 -| | +--- androidx.room:room-common:2.5.2 (*) -| | +--- androidx.room:room-runtime:2.5.2 (*) -| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.20 -> 1.9.22 (*) -| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*) -| +--- com.google.dagger:dagger:2.42 -> 2.50 -| | \--- javax.inject:javax.inject:1 -| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9 -> 1.7.3 (*) -| \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9 -> 1.7.3 (*) ++--- org.wordpress:fluxc:trunk-14fcce73130015f14125e9e13837f84ff4171bb3 +| +--- org.wordpress:wellsql:2.0.0 +| | +--- androidx.annotation:annotation:1.2.0 -> 1.7.0 (*) +| | \--- org.wordpress.wellsql:wellsql-annotations:2.0.0 +| +--- org.wordpress.fluxc:fluxc-annotations:trunk-14fcce73130015f14125e9e13837f84ff4171bb3 +| +--- org.greenrobot:eventbus:3.3.1 (*) +| +--- com.squareup.okhttp3:okhttp:4.9.0 -> 4.12.0 (*) +| +--- com.android.volley:volley:1.1.1 -> 1.2.0 +| +--- androidx.paging:paging-runtime:2.1.2 +| | +--- androidx.paging:paging-common:2.1.2 +| | | +--- androidx.annotation:annotation:1.0.0 -> 1.7.0 (*) +| | | \--- androidx.arch.core:core-common:2.0.0 -> 2.2.0 (*) +| | +--- androidx.arch.core:core-runtime:2.0.0 -> 2.2.0 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.6.2 (*) +| | +--- androidx.lifecycle:lifecycle-livedata:2.0.0 -> 2.6.2 (*) +| | \--- androidx.recyclerview:recyclerview:1.0.0 -> 1.3.2 (*) +| +--- com.goterl:lazysodium-android:5.0.2 +| +--- net.java.dev.jna:jna:5.5.0 +| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.20 -> 1.9.10 (*) +| +--- org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.6.20 -> 1.9.22 +| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*) +| +--- androidx.appcompat:appcompat:1.0.2 -> 1.6.1 (*) +| +--- androidx.recyclerview:recyclerview:1.0.0 -> 1.3.2 (*) +| +--- androidx.exifinterface:exifinterface:1.0.0 -> 1.3.6 +| | \--- androidx.annotation:annotation:1.2.0 -> 1.7.0 (*) +| +--- androidx.security:security-crypto:1.0.0 -> 1.1.0-alpha03 +| | +--- androidx.annotation:annotation:1.1.0 -> 1.7.0 (*) +| | +--- com.google.crypto.tink:tink-android:1.5.0 +| | \--- androidx.collection:collection:1.1.0 -> 1.4.0 (*) +| +--- com.squareup.okhttp3:okhttp-urlconnection:4.9.0 +| | +--- com.squareup.okhttp3:okhttp:4.9.0 -> 4.12.0 (*) +| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10 -> 1.9.10 (*) +| +--- com.google.code.gson:gson:2.8.5 -> 2.10.1 +| +--- org.apache.commons:commons-text:1.10.0 (*) +| +--- androidx.room:room-runtime:2.4.2 -> 2.5.2 (*) +| +--- androidx.room:room-ktx:2.4.2 -> 2.5.2 +| | +--- androidx.room:room-common:2.5.2 (*) +| | +--- androidx.room:room-runtime:2.5.2 (*) +| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.20 -> 1.9.22 (*) +| | \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4 -> 1.7.3 (*) +| +--- com.google.dagger:dagger:2.42 -> 2.50 +| | \--- javax.inject:javax.inject:1 +| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9 -> 1.7.3 (*) +| \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9 -> 1.7.3 (*) -\--- org.wordpress.fluxc.plugins:woocommerce:3008-f3ff9689a0a998537a624ce9a77b930a341bee48 - +--- org.wordpress:wellsql:2.0.0 (*) - +--- org.wordpress.fluxc:fluxc-annotations:3008-f3ff9689a0a998537a624ce9a77b930a341bee48 - +--- androidx.room:room-ktx:2.4.2 -> 2.5.2 (*) - +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.20 -> 1.9.10 (*) - +--- org.wordpress:fluxc:3008-f3ff9689a0a998537a624ce9a77b930a341bee48 (*) - +--- com.google.code.gson:gson:2.8.5 -> 2.10.1 - +--- com.google.dagger:dagger:2.42 -> 2.50 (*) - +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9 -> 1.7.3 (*) - +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9 -> 1.7.3 (*) - \--- androidx.room:room-runtime:2.4.2 -> 2.5.2 (*) +\--- org.wordpress.fluxc.plugins:woocommerce:trunk-14fcce73130015f14125e9e13837f84ff4171bb3 + +--- org.wordpress:wellsql:2.0.0 (*) + +--- org.wordpress.fluxc:fluxc-annotations:trunk-14fcce73130015f14125e9e13837f84ff4171bb3 + +--- androidx.room:room-ktx:2.4.2 -> 2.5.2 (*) + +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.20 -> 1.9.10 (*) + +--- org.wordpress:fluxc:trunk-14fcce73130015f14125e9e13837f84ff4171bb3 (*) + +--- com.google.code.gson:gson:2.8.5 -> 2.10.1 + +--- com.google.dagger:dagger:2.42 -> 2.50 (*) + +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9 -> 1.7.3 (*) + +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9 -> 1.7.3 (*) + \--- androidx.room:room-runtime:2.4.2 -> 2.5.2 (*) ```

Please review and act accordingly