Skip to content

Commit f9a59e0

Browse files
adalpariclaude
andauthored
Update wordpress-rs to 4fac42b1a2 (#22662)
* Update wordpress-rs to 4fac42b1a2 The library now requires a NetworkAvailabilityProvider to distinguish between offline devices and non-existent sites on DNS failures. Also adapts to the AutoDiscoveryAttemptSuccess API change where the applicationPasswordsAuthenticationUrl field was replaced by a DiscoveredAuthenticationMechanism enum. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix import ordering and use named parameters for consistency Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix import ordering in ApplicationModule to pass checkstyle Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 7a1d0a2 commit f9a59e0

File tree

16 files changed

+110
-24
lines changed

16 files changed

+110
-24
lines changed

WordPress/src/main/java/org/wordpress/android/modules/ApplicationModule.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.wordpress.android.util.config.RemoteConfigWrapper;
3939
import org.wordpress.android.util.wizard.WizardManager;
4040
import org.wordpress.android.fluxc.network.TrackNetworkRequestsInterceptor;
41+
import org.wordpress.android.fluxc.network.rest.wpapi.rs.WpNetworkAvailabilityProvider;
4142
import org.wordpress.android.viewmodel.helpers.ConnectionStatus;
4243
import org.wordpress.android.viewmodel.helpers.ConnectionStatusLiveData;
4344

@@ -156,8 +157,12 @@ public static RecordingStrategy provideVoiceToContentRecordingStrategy() {
156157

157158
@Provides
158159
public static WpLoginClient provideWpLoginClient(
159-
@NonNull TrackNetworkRequestsInterceptor trackNetworkRequestsInterceptor
160+
@NonNull TrackNetworkRequestsInterceptor trackNetworkRequestsInterceptor,
161+
@NonNull WpNetworkAvailabilityProvider networkAvailabilityProvider
160162
) {
161-
return new WpLoginClient(Collections.singletonList(trackNetworkRequestsInterceptor));
163+
return new WpLoginClient(
164+
Collections.singletonList(trackNetworkRequestsInterceptor),
165+
networkAvailabilityProvider
166+
);
162167
}
163168
}

WordPress/src/main/java/org/wordpress/android/networking/restapi/WpComApiClientProvider.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.wordpress.android.networking.restapi
22

33
import okhttp3.OkHttpClient
4+
import org.wordpress.android.fluxc.network.rest.wpapi.rs.WpNetworkAvailabilityProvider
45
import rs.wordpress.api.kotlin.WpComApiClient
56
import rs.wordpress.api.kotlin.WpHttpClient
67
import rs.wordpress.api.kotlin.WpRequestExecutor
@@ -12,7 +13,9 @@ import javax.inject.Inject
1213
private const val READ_WRITE_TIMEOUT = 60L
1314
private const val CONNECT_TIMEOUT = 30L
1415

15-
class WpComApiClientProvider @Inject constructor() {
16+
class WpComApiClientProvider @Inject constructor(
17+
private val networkAvailabilityProvider: WpNetworkAvailabilityProvider,
18+
) {
1619
fun getWpComApiClient(accessToken: String): WpComApiClient {
1720
val okHttpClient = OkHttpClient.Builder()
1821
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
@@ -21,7 +24,10 @@ class WpComApiClientProvider @Inject constructor() {
2124
.build()
2225

2326
return WpComApiClient(
24-
requestExecutor = WpRequestExecutor(httpClient = WpHttpClient.CustomOkHttpClient(okHttpClient)),
27+
requestExecutor = WpRequestExecutor(
28+
httpClient = WpHttpClient.CustomOkHttpClient(okHttpClient),
29+
networkAvailabilityProvider = networkAvailabilityProvider
30+
),
2531
authProvider = WpAuthenticationProvider.staticWithAuth(WpAuthentication.Bearer(token = accessToken)
2632
)
2733
)

WordPress/src/main/java/org/wordpress/android/ui/accounts/applicationpassword/ApplicationPasswordsViewModel.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import org.wordpress.android.R
1010
import org.wordpress.android.fluxc.model.SiteModel
1111
import org.wordpress.android.fluxc.network.TrackNetworkRequestsInterceptor
1212
import org.wordpress.android.fluxc.network.rest.wpapi.rs.WpApiClientProvider
13+
import org.wordpress.android.fluxc.network.rest.wpapi.rs.WpNetworkAvailabilityProvider
1314
import org.wordpress.android.fluxc.store.AccountStore
1415
import org.wordpress.android.fluxc.utils.AppLogWrapper
1516
import org.wordpress.android.modules.IO_THREAD
@@ -43,6 +44,7 @@ class ApplicationPasswordsViewModel @Inject constructor(
4344
networkUtilsWrapper: NetworkUtilsWrapper,
4445
@Named(IO_THREAD) ioDispatcher: CoroutineDispatcher,
4546
trackNetworkRequestsInterceptor: TrackNetworkRequestsInterceptor,
47+
networkAvailabilityProvider: WpNetworkAvailabilityProvider,
4648
) : DataViewViewModel(
4749
mainDispatcher = mainDispatcher,
4850
appLogWrapper = appLogWrapper,
@@ -51,7 +53,8 @@ class ApplicationPasswordsViewModel @Inject constructor(
5153
selectedSiteRepository = selectedSiteRepository,
5254
accountStore = accountStore,
5355
ioDispatcher = ioDispatcher,
54-
trackNetworkRequestsInterceptor = trackNetworkRequestsInterceptor
56+
trackNetworkRequestsInterceptor = trackNetworkRequestsInterceptor,
57+
networkAvailabilityProvider = networkAvailabilityProvider
5558
) {
5659
init {
5760
initialize()

WordPress/src/main/java/org/wordpress/android/ui/accounts/login/ApplicationPasswordLoginHelper.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import org.wordpress.android.util.BuildConfigWrapper
1616
import org.wordpress.android.util.UrlUtils
1717
import rs.wordpress.api.kotlin.ApiDiscoveryResult
1818
import rs.wordpress.api.kotlin.WpLoginClient
19+
import uniffi.wp_api.applicationPasswordsUrl
1920
import javax.inject.Inject
2021
import javax.inject.Named
2122

@@ -260,7 +261,12 @@ class ApplicationPasswordLoginHelper @Inject constructor(
260261
class DiscoverSuccessWrapper @Inject constructor() {
261262
fun getApiRootUrl(successObject: ApiDiscoveryResult.Success) = successObject.success.apiRootUrl.url()
262263

263-
fun getApplicationPasswordsAuthenticationUrl(successObject: ApiDiscoveryResult.Success) =
264-
successObject.success.applicationPasswordsAuthenticationUrl.url()
264+
fun getApplicationPasswordsAuthenticationUrl(
265+
successObject: ApiDiscoveryResult.Success
266+
): String = requireNotNull(
267+
applicationPasswordsUrl(successObject.success.authentication)?.url()
268+
) {
269+
"Application passwords authentication URL is required"
270+
}
265271
}
266272
}

WordPress/src/main/java/org/wordpress/android/ui/dataview/DataViewViewModel.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import org.wordpress.android.ui.mysite.SelectedSiteRepository
2222
import org.wordpress.android.util.AppLog
2323
import org.wordpress.android.util.NetworkUtilsWrapper
2424
import org.wordpress.android.fluxc.network.TrackNetworkRequestsInterceptor
25+
import org.wordpress.android.fluxc.network.rest.wpapi.rs.WpNetworkAvailabilityProvider
2526
import org.wordpress.android.viewmodel.ScopedViewModel
2627
import rs.wordpress.api.kotlin.WpComApiClient
2728
import uniffi.wp_api.WpApiParamOrder
@@ -45,6 +46,7 @@ open class DataViewViewModel @Inject constructor(
4546
private val accountStore: AccountStore,
4647
@Named(IO_THREAD) protected val ioDispatcher: CoroutineDispatcher,
4748
private val trackNetworkRequestsInterceptor: TrackNetworkRequestsInterceptor,
49+
private val networkAvailabilityProvider: WpNetworkAvailabilityProvider,
4850
) : ScopedViewModel(mainDispatcher) {
4951
private val _uiState = MutableStateFlow(DataViewUiState())
5052
val uiState: StateFlow<DataViewUiState> = _uiState.asStateFlow()
@@ -88,7 +90,8 @@ open class DataViewViewModel @Inject constructor(
8890
WpAuthentication.Bearer(token = token)
8991
}
9092
),
91-
interceptors = listOf(trackNetworkRequestsInterceptor)
93+
interceptors = listOf(trackNetworkRequestsInterceptor),
94+
networkAvailabilityProvider = networkAvailabilityProvider
9295
)
9396
}
9497

WordPress/src/main/java/org/wordpress/android/ui/jetpackrestconnection/JetpackConnectionHelper.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.wordpress.android.ui.jetpackrestconnection
33
import org.wordpress.android.fluxc.model.SiteModel
44
import org.wordpress.android.fluxc.network.TrackNetworkRequestsInterceptor
55
import org.wordpress.android.fluxc.network.rest.wpapi.rs.WpApiClientProvider
6+
import org.wordpress.android.fluxc.network.rest.wpapi.rs.WpNetworkAvailabilityProvider
67
import org.wordpress.android.fluxc.utils.AppLogWrapper
78
import org.wordpress.android.util.AppLog
89
import rs.wordpress.api.kotlin.WpApiClient
@@ -19,6 +20,7 @@ class JetpackConnectionHelper @Inject constructor(
1920
private val wpApiClientProvider: WpApiClientProvider,
2021
private val appLogWrapper: AppLogWrapper,
2122
private val trackNetworkRequestsInterceptor: TrackNetworkRequestsInterceptor,
23+
private val networkAvailabilityProvider: WpNetworkAvailabilityProvider,
2224
) {
2325
fun initWpApiClient(site: SiteModel): WpApiClient {
2426
requireRestCredentials(site)
@@ -30,7 +32,10 @@ class JetpackConnectionHelper @Inject constructor(
3032

3133
val delegate = WpApiClientDelegate(
3234
authProvider = createRestAuthProvider(site),
33-
requestExecutor = WpRequestExecutor(interceptors = listOf(trackNetworkRequestsInterceptor)),
35+
requestExecutor = WpRequestExecutor(
36+
interceptors = listOf(trackNetworkRequestsInterceptor),
37+
networkAvailabilityProvider = networkAvailabilityProvider
38+
),
3439
middlewarePipeline = WpApiMiddlewarePipeline(emptyList()),
3540
appNotifier = InvalidAuthNotifier()
3641
)

WordPress/src/main/java/org/wordpress/android/ui/postsrs/data/WpServiceProvider.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.content.Context
44
import dagger.hilt.android.qualifiers.ApplicationContext
55
import org.wordpress.android.fluxc.model.SiteModel
66
import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.WpAppNotifierHandler
7+
import org.wordpress.android.fluxc.network.rest.wpapi.rs.WpNetworkAvailabilityProvider
78
import org.wordpress.android.fluxc.network.rest.wpapi.rs.createWpComAuthProvider
89
import org.wordpress.android.fluxc.store.AccountStore
910
import rs.wordpress.api.kotlin.WpRequestExecutor
@@ -29,6 +30,7 @@ class WpServiceProvider @Inject constructor(
2930
@ApplicationContext private val context: Context,
3031
private val wpAppNotifierHandler: WpAppNotifierHandler,
3132
private val accountStore: AccountStore,
33+
private val networkAvailabilityProvider: WpNetworkAvailabilityProvider,
3234
) {
3335
private val services = mutableMapOf<Int, WpService>()
3436
private var cache: WordPressApiCache? = null
@@ -69,7 +71,10 @@ class WpServiceProvider @Inject constructor(
6971

7072
return WpApiClientDelegate(
7173
authProvider = authProvider,
72-
requestExecutor = WpRequestExecutor(emptyList()),
74+
requestExecutor = WpRequestExecutor(
75+
interceptors = emptyList(),
76+
networkAvailabilityProvider = networkAvailabilityProvider
77+
),
7378
middlewarePipeline = WpApiMiddlewarePipeline(emptyList()),
7479
appNotifier = object : WpAppNotifier {
7580
override suspend fun requestedWithInvalidAuthentication(requestUrl: String) {

WordPress/src/main/java/org/wordpress/android/ui/subscribers/AddSubscribersViewModel.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import kotlinx.coroutines.flow.asStateFlow
77
import kotlinx.coroutines.withContext
88
import org.wordpress.android.R
99
import org.wordpress.android.fluxc.network.TrackNetworkRequestsInterceptor
10+
import org.wordpress.android.fluxc.network.rest.wpapi.rs.WpNetworkAvailabilityProvider
1011
import org.wordpress.android.fluxc.store.AccountStore
1112
import org.wordpress.android.fluxc.utils.AppLogWrapper
1213
import org.wordpress.android.modules.BG_THREAD
@@ -31,6 +32,7 @@ class AddSubscribersViewModel @Inject constructor(
3132
private val appLogWrapper: AppLogWrapper,
3233
private val toastUtilsWrapper: ToastUtilsWrapper,
3334
private val trackNetworkRequestsInterceptor: TrackNetworkRequestsInterceptor,
35+
private val networkAvailabilityProvider: WpNetworkAvailabilityProvider,
3436
) : ScopedViewModel(bgDispatcher) {
3537
@Inject
3638
@Named(IO_THREAD)
@@ -50,7 +52,8 @@ class AddSubscribersViewModel @Inject constructor(
5052
WpAuthenticationProvider.staticWithAuth(
5153
WpAuthentication.Bearer(token = accountStore.accessToken!!)
5254
),
53-
interceptors = listOf(trackNetworkRequestsInterceptor)
55+
interceptors = listOf(trackNetworkRequestsInterceptor),
56+
networkAvailabilityProvider = networkAvailabilityProvider
5457
)
5558
}
5659

WordPress/src/main/java/org/wordpress/android/ui/subscribers/SubscribersViewModel.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import kotlinx.coroutines.flow.asStateFlow
99
import kotlinx.coroutines.withContext
1010
import org.wordpress.android.R
1111
import org.wordpress.android.fluxc.network.TrackNetworkRequestsInterceptor
12+
import org.wordpress.android.fluxc.network.rest.wpapi.rs.WpNetworkAvailabilityProvider
1213
import org.wordpress.android.fluxc.store.AccountStore
1314
import org.wordpress.android.fluxc.utils.AppLogWrapper
1415
import org.wordpress.android.models.wrappers.SimpleDateFormatWrapper
@@ -45,6 +46,7 @@ class SubscribersViewModel @Inject constructor(
4546
accountStore: AccountStore,
4647
@Named(IO_THREAD) ioDispatcher: CoroutineDispatcher,
4748
trackNetworkRequestsInterceptor: TrackNetworkRequestsInterceptor,
49+
networkAvailabilityProvider: WpNetworkAvailabilityProvider,
4850
) : DataViewViewModel(
4951
mainDispatcher = mainDispatcher,
5052
appLogWrapper = appLogWrapper,
@@ -53,7 +55,8 @@ class SubscribersViewModel @Inject constructor(
5355
selectedSiteRepository = selectedSiteRepository,
5456
accountStore = accountStore,
5557
ioDispatcher = ioDispatcher,
56-
trackNetworkRequestsInterceptor = trackNetworkRequestsInterceptor
58+
trackNetworkRequestsInterceptor = trackNetworkRequestsInterceptor,
59+
networkAvailabilityProvider = networkAvailabilityProvider
5760
) {
5861
private val _subscriberStats = MutableStateFlow<IndividualSubscriberStats?>(null)
5962
val subscriberStats = _subscriberStats.asStateFlow()

WordPress/src/main/java/org/wordpress/android/ui/taxonomies/TermsViewModel.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import org.wordpress.android.fluxc.model.TermModel
2121
import org.wordpress.android.fluxc.model.TermsModel
2222
import org.wordpress.android.fluxc.network.TrackNetworkRequestsInterceptor
2323
import org.wordpress.android.fluxc.network.rest.wpapi.rs.WpApiClientProvider
24+
import org.wordpress.android.fluxc.network.rest.wpapi.rs.WpNetworkAvailabilityProvider
2425
import org.wordpress.android.fluxc.store.AccountStore
2526
import org.wordpress.android.fluxc.store.TaxonomyStore
2627
import org.wordpress.android.fluxc.store.TaxonomyStore.DEFAULT_TAXONOMY_CATEGORY
@@ -89,6 +90,7 @@ class TermsViewModel @Inject constructor(
8990
networkUtilsWrapper: NetworkUtilsWrapper,
9091
@Named(IO_THREAD) ioDispatcher: CoroutineDispatcher,
9192
trackNetworkRequestsInterceptor: TrackNetworkRequestsInterceptor,
93+
networkAvailabilityProvider: WpNetworkAvailabilityProvider,
9294
) : DataViewViewModel(
9395
mainDispatcher = mainDispatcher,
9496
appLogWrapper = appLogWrapper,
@@ -97,7 +99,8 @@ class TermsViewModel @Inject constructor(
9799
selectedSiteRepository = selectedSiteRepository,
98100
accountStore = accountStore,
99101
ioDispatcher = ioDispatcher,
100-
trackNetworkRequestsInterceptor = trackNetworkRequestsInterceptor
102+
trackNetworkRequestsInterceptor = trackNetworkRequestsInterceptor,
103+
networkAvailabilityProvider = networkAvailabilityProvider
101104
) {
102105
private var taxonomySlug: String = ""
103106
private var isHierarchical: Boolean = false

0 commit comments

Comments
 (0)