diff --git a/WordPress/src/main/java/org/wordpress/android/networking/restapi/AppWpComLanguageProvider.kt b/WordPress/src/main/java/org/wordpress/android/networking/restapi/AppWpComLanguageProvider.kt new file mode 100644 index 000000000000..e66d0a12c931 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/networking/restapi/AppWpComLanguageProvider.kt @@ -0,0 +1,23 @@ +package org.wordpress.android.networking.restapi + +import org.wordpress.android.util.PerAppLocaleManager +import rs.wordpress.api.kotlin.fromLocale +import uniffi.wp_api.WpComLanguage +import uniffi.wp_api.WpComLanguageProvider +import javax.inject.Inject + +/** + * Reports the language that WordPress.com should localize its responses to. + * + * Reads the app's own language preference, falling back to the device language when + * the user hasn't chosen one. The locale is read on every request, so a language + * change part-way through a session takes effect without rebuilding the client. + * Returns `null` when the language has no WordPress.com equivalent, which sends no + * locale and leaves the choice to the server. + */ +class AppWpComLanguageProvider @Inject constructor( + private val perAppLocaleManager: PerAppLocaleManager +) : WpComLanguageProvider { + override fun currentLanguage(): WpComLanguage? = + WpComLanguage.fromLocale(perAppLocaleManager.getCurrentLocale()) +} diff --git a/WordPress/src/main/java/org/wordpress/android/networking/restapi/WpComApiClientProvider.kt b/WordPress/src/main/java/org/wordpress/android/networking/restapi/WpComApiClientProvider.kt index 39d2c70b2921..9b60b07b7657 100644 --- a/WordPress/src/main/java/org/wordpress/android/networking/restapi/WpComApiClientProvider.kt +++ b/WordPress/src/main/java/org/wordpress/android/networking/restapi/WpComApiClientProvider.kt @@ -1,6 +1,7 @@ package org.wordpress.android.networking.restapi import okhttp3.OkHttpClient +import org.wordpress.android.fluxc.network.TrackNetworkRequestsInterceptor import org.wordpress.android.fluxc.network.rest.wpapi.rs.WpNetworkAvailabilityProvider import org.wordpress.android.fluxc.network.rest.wpapi.rs.applyWpRsTimeouts import rs.wordpress.api.kotlin.WpComApiClient @@ -12,10 +13,13 @@ import javax.inject.Inject class WpComApiClientProvider @Inject constructor( private val networkAvailabilityProvider: WpNetworkAvailabilityProvider, + private val languageProvider: AppWpComLanguageProvider, + private val trackNetworkRequestsInterceptor: TrackNetworkRequestsInterceptor, ) { fun getWpComApiClient(accessToken: String): WpComApiClient { val okHttpClient = OkHttpClient.Builder() .applyWpRsTimeouts() + .addInterceptor(trackNetworkRequestsInterceptor) .build() return WpComApiClient( @@ -24,7 +28,8 @@ class WpComApiClientProvider @Inject constructor( networkAvailabilityProvider = networkAvailabilityProvider ), authProvider = WpAuthenticationProvider.staticWithAuth(WpAuthentication.Bearer(token = accessToken) - ) + ), + languageProvider = languageProvider ) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0f8f2054e36e..ac9cd0220fe7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -101,7 +101,7 @@ wellsql = '2.0.0' wordpress-aztec = 'v2.1.4' wordpress-lint = '2.2.0' wordpress-persistent-edittext = '1.0.2' -wordpress-rs = '0.7.0' +wordpress-rs = '1590-af9a28ec86d13203855db032d85e608b00b645c0' wordpress-utils = '3.14.0' automattic-ucrop = '2.2.11' zendesk = '5.5.3'