Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions RELEASE-NOTES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
23.4
-----
- [*] Fixed an issue where Blaze campaign creation could fail for products using PDF thumbnails as images [https://github.com/woocommerce/woocommerce-android/pull/14642]
- [*] Fixed a rare media upload error [https://github.com/woocommerce/woocommerce-android/pull/14716]

23.3.1
-----
Expand Down
1,301 changes: 337 additions & 964 deletions WooCommerce/src/main/res/values-ar/strings.xml

Large diffs are not rendered by default.

715 changes: 44 additions & 671 deletions WooCommerce/src/main/res/values-de/strings.xml

Large diffs are not rendered by default.

713 changes: 43 additions & 670 deletions WooCommerce/src/main/res/values-es/strings.xml

Large diffs are not rendered by default.

1,389 changes: 381 additions & 1,008 deletions WooCommerce/src/main/res/values-fr/strings.xml

Large diffs are not rendered by default.

1,303 changes: 338 additions & 965 deletions WooCommerce/src/main/res/values-he/strings.xml

Large diffs are not rendered by default.

1,443 changes: 408 additions & 1,035 deletions WooCommerce/src/main/res/values-id/strings.xml

Large diffs are not rendered by default.

713 changes: 43 additions & 670 deletions WooCommerce/src/main/res/values-it/strings.xml

Large diffs are not rendered by default.

1,227 changes: 300 additions & 927 deletions WooCommerce/src/main/res/values-ja/strings.xml

Large diffs are not rendered by default.

711 changes: 42 additions & 669 deletions WooCommerce/src/main/res/values-ko/strings.xml

Large diffs are not rendered by default.

1,347 changes: 360 additions & 987 deletions WooCommerce/src/main/res/values-nl/strings.xml

Large diffs are not rendered by default.

1,489 changes: 431 additions & 1,058 deletions WooCommerce/src/main/res/values-pt-rBR/strings.xml

Large diffs are not rendered by default.

1,471 changes: 422 additions & 1,049 deletions WooCommerce/src/main/res/values-ru/strings.xml

Large diffs are not rendered by default.

711 changes: 42 additions & 669 deletions WooCommerce/src/main/res/values-sv/strings.xml

Large diffs are not rendered by default.

711 changes: 42 additions & 669 deletions WooCommerce/src/main/res/values-tr/strings.xml

Large diffs are not rendered by default.

711 changes: 42 additions & 669 deletions WooCommerce/src/main/res/values-zh-rCN/strings.xml

Large diffs are not rendered by default.

711 changes: 42 additions & 669 deletions WooCommerce/src/main/res/values-zh-rTW/strings.xml

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions fastlane/metadata/android/ar/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4:
تم تحسين تجربة حملة Blaze! يمكن الآن إنشاء الحملات بسلاسة لجميع المنتجات، بما في ذلك تلك التي تحتوي على صور مصغرة بصيغة PDF. يمكنك التحديث اليوم للاستمتاع بتجربة إعلانية أكثر موثوقية.
2 changes: 2 additions & 0 deletions fastlane/metadata/android/de-DE/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4:
Wir haben das Erlebnis mit Blaze-Kampagnen verbessert! Das Erstellen von Kampagnen funktioniert jetzt reibungslos für alle Produkte, auch mit PDF-Vorschaubildern. Führe noch heute ein Update durch, um ein zuverlässigeres Werbeerlebnis zu erhalten.
2 changes: 2 additions & 0 deletions fastlane/metadata/android/es-ES/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4:
Hemos mejorado la experiencia de campañas de Blaze. La creación de campañas ahora funciona a la perfección en todos los productos, incluidos los que tienen miniaturas en PDF. Actualiza ya tu versión para disfrutar de una experiencia publicitaria más fiable.
2 changes: 2 additions & 0 deletions fastlane/metadata/android/fr-FR/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4 :
Nous avons amélioré l’expérience de campagne Blaze ! La création de campagnes fonctionne désormais sans accroc pour tous les produits, y compris ceux avec des miniatures PDF. Mettez à jour dès aujourd’hui pour une expérience publicitaire plus fiable.
2 changes: 2 additions & 0 deletions fastlane/metadata/android/id/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4:
Pengalaman kampanye Blaze sekarang makin ciamik! Pembuatan kampanye untuk produk apa pun kini lancar jaya, termasuk produk dengan gambar mini PDF. Perbarui sekarang juga dan rasakan cara beriklan yang lebih andal.
2 changes: 2 additions & 0 deletions fastlane/metadata/android/it-IT/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4:
Abbiamo migliorato l'esperienza della campagna Blaze! La creazione di campagne ora funziona senza problemi per tutti i prodotti, inclusi quelli con miniature PDF. Aggiorna oggi stesso per un'esperienza pubblicitaria più affidabile.
2 changes: 2 additions & 0 deletions fastlane/metadata/android/iw-IL/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4:
שיפרנו את חוויית הקמפיין של Blaze! יצירת קמפיינים פועלת כעת באופן חלק עבור כל המוצרים, כולל קמפיינים עם תמונות ממוזערות של PDF. כדאי לעדכן היום כדי ליהנות מחוויית פרסום יציבה יותר.
2 changes: 2 additions & 0 deletions fastlane/metadata/android/ja-JP/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4:
Blaze キャンペーンのエクスペリエンスが向上しました。キャンペーンの作成が、PDF のサムネイルを含むすべての商品でスムーズに機能するようになりました。今すぐ更新して、より信頼性の高い広告エクスペリエンスを実現しましょう。
3 changes: 3 additions & 0 deletions fastlane/metadata/android/ko-KR/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
23.4:
Blaze 경험이 개선되었습니다! PDF 썸네일이 포함된 상품을 포함한 모든 상품에서 수월하게 캠페인을 만들 수 있습니다. 지금 업데이트하면 더욱 안정적인 광고 경험을 이용할 수 있습니다.

2 changes: 2 additions & 0 deletions fastlane/metadata/android/nl-NL/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4:
We hebben de campagne-ervaring van Blaze verbeterd! Campagnes maken werkt nu probleemloos voor alle producten, inclusief die met pdf-miniaturen. Update vandaag nog voor een betrouwbaardere advertentie-ervaring.
2 changes: 2 additions & 0 deletions fastlane/metadata/android/pt-BR/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4:
Melhoramos a experiência da campanha no Blaze! Agora a criação de campanhas funciona perfeitamente para todos os produtos, incluindo aqueles com miniaturas de PDF. Atualize hoje para ter uma experiência publicitária mais confiável.
2 changes: 2 additions & 0 deletions fastlane/metadata/android/ru-RU/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4:
Кампании Blaze стали ещё лучше! Теперь при создании кампаний не будет проблем даже с теми товарами, у которых имеются миниатюры в формате PDF. Установите обновление, чтобы ваша реклама работала без сбоев.
2 changes: 2 additions & 0 deletions fastlane/metadata/android/sv-SE/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4:
Vi har förbättrat Blaze-kampanjupplevelsen! Att skapa kampanjer fungerar nu smidigt för alla produkter, inklusive de med PDF-miniatyrer. Uppdatera idag för en mer tillförlitlig annonseringsupplevelse.
2 changes: 2 additions & 0 deletions fastlane/metadata/android/tr-TR/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4:
Blaze kampanyası deneyimi iyileştirildi! Kampanyalar oluşturmak artık PDF küçük resimli olanlar dahil tüm ürünler için sorunsuz bir şekilde çalışır. Daha güvenilir bir reklam deneyimi için hemen bugün güncelleyin.
2 changes: 2 additions & 0 deletions fastlane/metadata/android/zh-CN/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4:
我们优化了 Blaze 广告活动体验!现在,使用所有产品(包括带有 PDF 缩略图的产品)均能顺畅地创建广告活动。立即更新,享受更可靠的广告体验。
2 changes: 2 additions & 0 deletions fastlane/metadata/android/zh-TW/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
23.4:
我們已提升 Blaze 行銷活動體驗!現在可順暢為所有產品建立行銷活動,包括具備 PDF 縮圖的產品。立即更新即可享有更可靠的廣告體驗。
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package org.wordpress.android.fluxc.network.rest.wpcom.wc

import org.wordpress.android.fluxc.model.SiteModel
import org.wordpress.android.fluxc.network.BaseRequest
import org.wordpress.android.fluxc.network.rest.wpapi.WPAPINetwork
import org.wordpress.android.fluxc.network.rest.wpapi.WPAPINetworkError
import org.wordpress.android.fluxc.network.rest.wpapi.WPAPINetworkingMode
import org.wordpress.android.fluxc.network.rest.wpapi.WPAPIResponse
import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.ApplicationPasswordsConfiguration
import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.ApplicationPasswordsNetwork
import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.ApplicationPasswordsStore
import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.JetpackApplicationPasswordsErrorHandler
import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.JetpackApplicationPasswordsSupport
import org.wordpress.android.fluxc.network.rest.wpcom.JetpackTunnelWPAPINetwork
import org.wordpress.android.util.AppLog
import java.security.GeneralSecurityException
import javax.inject.Inject
import javax.inject.Singleton

Expand Down Expand Up @@ -140,7 +143,19 @@ class WooNetwork @Inject constructor(
)
}

return when (val appPasswordsResponse = applicationPasswordsNetwork.request()) {
val appPasswordsResponse = try {
applicationPasswordsNetwork.request()
} catch (e: GeneralSecurityException) {
AppLog.e(AppLog.T.API, "Error setting up Application Passwords encryption", e)
WPAPIResponse.Error(
error = WPAPINetworkError(
baseError = BaseRequest.BaseNetworkError(BaseRequest.GenericErrorType.UNKNOWN),
errorCode = ApplicationPasswordsStore.APPLICATION_PASSWORDS_KEYSTORE_ENCRYPTION_ERROR
)
)
}

return when (appPasswordsResponse) {
is WPAPIResponse.Success<*> -> {
(appPasswordsResponse as WPAPIResponse<T>).copyWith(
networkingMode = WPAPINetworkingMode.ApplicationPasswordsWithJetpack
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package org.wordpress.android.fluxc.network.rest.wpcom.wc
import org.assertj.core.api.Assertions.assertThat
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.argThat
import org.mockito.kotlin.eq
import org.mockito.kotlin.given
import org.mockito.kotlin.mock
import org.mockito.kotlin.never
Expand All @@ -14,10 +16,12 @@ import org.wordpress.android.fluxc.network.rest.wpapi.WPAPINetworkError
import org.wordpress.android.fluxc.network.rest.wpapi.WPAPIResponse
import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.ApplicationPasswordsConfiguration
import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.ApplicationPasswordsNetwork
import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.ApplicationPasswordsStore
import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.JetpackApplicationPasswordsErrorHandler
import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.JetpackApplicationPasswordsSupport
import org.wordpress.android.fluxc.network.rest.wpcom.JetpackTunnelWPAPINetwork
import org.wordpress.android.fluxc.test
import java.security.GeneralSecurityException

@RunWith(RobolectricTestRunner::class)
class WooNetworkTest {
Expand Down Expand Up @@ -138,6 +142,33 @@ class WooNetworkTest {
verify(jetpackApplicationPasswordsErrorHandler).handleError(testSite, appPasswordsNetworkError)
}

@Test
fun `when a KeyStore error occurs, then fallback to Jetpack Tunnel`() = test {
given(jetpackApplicationPasswordsSupport.supportsAppPasswords(testSite)).willReturn(true)
given(
applicationPasswordsNetwork.executeGetGsonRequest(
testSite,
testPath,
SampleResponse::class.java
)
).willAnswer {
throw GeneralSecurityException()
}
givenJetpackTunnelResponse(WPAPIResponse.Success(SampleResponse("value"), emptyList()))

val response = sut.executeGetGsonRequest(
site = testSite,
path = testPath,
clazz = SampleResponse::class.java
)

assertThat((response as WPAPIResponse.Success).data).isEqualTo(SampleResponse("value"))
verify(jetpackApplicationPasswordsErrorHandler).handleError(
eq(testSite),
argThat { errorCode == ApplicationPasswordsStore.APPLICATION_PASSWORDS_KEYSTORE_ENCRYPTION_ERROR }
)
}

private suspend fun givenAppPasswordsResponse(response: WPAPIResponse<SampleResponse>) {
given(
applicationPasswordsNetwork.executeGetGsonRequest(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,6 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.yarolegovich.wellsql.core.Identifiable;
import com.yarolegovich.wellsql.core.annotation.Column;
import com.yarolegovich.wellsql.core.annotation.PrimaryKey;
import com.yarolegovich.wellsql.core.annotation.RawConstraints;
import com.yarolegovich.wellsql.core.annotation.Table;

import org.wordpress.android.fluxc.Payload;
import org.wordpress.android.fluxc.model.LocalOrRemoteId.LocalId;
import org.wordpress.android.fluxc.model.LocalOrRemoteId.RemoteId;
Expand All @@ -26,6 +20,12 @@
import java.util.Arrays;
import java.util.Objects;

import com.yarolegovich.wellsql.core.Identifiable;
import com.yarolegovich.wellsql.core.annotation.Column;
import com.yarolegovich.wellsql.core.annotation.PrimaryKey;
import com.yarolegovich.wellsql.core.annotation.RawConstraints;
import com.yarolegovich.wellsql.core.annotation.Table;

// WARN: This class is used within WordPress-MediaPicker-Android, do not remove!
@Table
@RawConstraints({"UNIQUE (SITE_ID, URL)"})
Expand Down Expand Up @@ -257,7 +257,7 @@ public class SiteModel extends Payload<BaseNetworkError> implements Identifiable
@Column
private String mApplicationPasswordsAuthorizeUrl;
@Column
private Boolean mCanBlaze;
private boolean mCanBlaze;
// Comma-separated list of active features in the site's plan
@Column
private String mPlanActiveFeatures;
Expand Down Expand Up @@ -1109,11 +1109,11 @@ public void setPublishedStatus(int publishedStatus) {
this.mPublishedStatus = publishedStatus;
}

public Boolean getCanBlaze() {
public boolean getCanBlaze() {
return mCanBlaze;
}

public void setCanBlaze(Boolean canBlaze) {
public void setCanBlaze(boolean canBlaze) {
this.mCanBlaze = canBlaze;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class ApplicationPasswordsStore @Inject constructor(
private const val USERNAME_PREFERENCE_KEY_PREFIX = "username_"
private const val PASSWORD_PREFERENCE_KEY_PREFIX = "app_password_"
private const val UUID_PREFERENCE_KEY_PREFIX = "app_password_uuid_"
const val APPLICATION_PASSWORDS_KEYSTORE_ENCRYPTION_ERROR = "application_passwords_keystore_encryption_error"
}

@Inject internal lateinit var configuration: ApplicationPasswordsConfiguration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ class JetpackApplicationPasswordsErrorHandler @Inject constructor(
httpStatusCode == TOO_MANY_REQUESTS ||
apiErrorCode == "incorrect_password" ||
apiErrorCode == ApplicationPasswordsManager.APPLICATION_PASSWORDS_DISABLED_ERROR_CODE ||
apiErrorCode == ApplicationPasswordsManager.APPLICATION_PASSWORDS_DISABLED_USER_ERROR_CODE
apiErrorCode == ApplicationPasswordsManager.APPLICATION_PASSWORDS_DISABLED_USER_ERROR_CODE ||
apiErrorCode == ApplicationPasswordsStore.APPLICATION_PASSWORDS_KEYSTORE_ENCRYPTION_ERROR
) {
appLogWrapper.w(
AppLog.T.API,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ data class MediaWPRESTResponse(
val height: Int,
val file: String?,
val sizes: Sizes?
)
) : JsonObjectOrEmptyArray()

data class Sizes(
val medium: ImageSize?,
Expand Down Expand Up @@ -80,9 +80,9 @@ fun MediaWPRESTResponse.toMediaModel(localSiteId: Int) = MediaModel(
StringEscapeUtils.unescapeHtml4(altText),
mediaDetails.width,
mediaDetails.height,
0,
null,
false,
0,
null,
false,
if (MediaWPComRestResponse.DELETED_STATUS == status) {
MediaUploadState.DELETED
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,4 +175,20 @@ class JetpackApplicationPasswordsErrorHandlerTests {
)
)
}

@Test
fun `given KeyStore error, when handling error, then flag site as unsupported`() {
// Given
val baseError = BaseNetworkError(mock<VolleyError>())
val networkError = WPAPINetworkError(
baseError,
ApplicationPasswordsStore.APPLICATION_PASSWORDS_KEYSTORE_ENCRYPTION_ERROR
)

// When
errorHandler.handleError(testSite, networkError)

// Then
verify(jetpackApplicationPasswordsSupport).flagAsUnsupported(testSite)
}
}
4 changes: 2 additions & 2 deletions version.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
versionName=23.4-rc-2
versionCode=698
versionName=23.4
versionCode=699
Loading