diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanFragment.kt index 6346dbf378a8..027eb34b1297 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanFragment.kt @@ -30,7 +30,6 @@ import org.wordpress.android.ui.pages.SnackbarMessageHolder import org.wordpress.android.ui.prefs.EmptyViewRecyclerView import org.wordpress.android.ui.prefs.experimentalfeatures.ExperimentalFeatures import org.wordpress.android.ui.utils.UiHelpers -import org.wordpress.android.util.ColorUtils import org.wordpress.android.util.extensions.getSerializableCompat import org.wordpress.android.util.extensions.getSerializableExtraCompat import org.wordpress.android.util.image.ImageManager @@ -94,28 +93,27 @@ class ScanFragment : Fragment(R.layout.scan_fragment) { private fun ScanFragmentBinding.setupObservers() { viewModel.uiState.observe( - viewLifecycleOwner, - { uiState -> - uiHelpers.updateVisibility(progressBar, uiState.loadingVisible) - uiHelpers.updateVisibility(recyclerView, uiState.contentVisible) - uiHelpers.updateVisibility(actionableEmptyView, uiState.errorVisible) - - when (uiState) { - is ContentUiState -> updateContentLayout(uiState) - - is FullScreenLoadingUiState -> { // Do Nothing - } - - is ErrorUiState.NoConnection, - is ErrorUiState.GenericRequestFailed, - is ErrorUiState.ScanRequestFailed, - is ErrorUiState.MultisiteNotSupported, - is ErrorUiState.VaultPressActiveOnSite -> updateErrorLayout(uiState as ErrorUiState) + viewLifecycleOwner + ) { uiState -> + uiHelpers.updateVisibility(progressBar, uiState.loadingVisible) + uiHelpers.updateVisibility(recyclerView, uiState.contentVisible) + uiHelpers.updateVisibility(actionableEmptyView, uiState.errorVisible) + + when (uiState) { + is ContentUiState -> updateContentLayout(uiState) + + is FullScreenLoadingUiState -> { // Do Nothing } + + is ErrorUiState.NoConnection, + is ErrorUiState.GenericRequestFailed, + is ErrorUiState.ScanRequestFailed, + is ErrorUiState.MultisiteNotSupported, + is ErrorUiState.VaultPressActiveOnSite -> updateErrorLayout(uiState) } - ) + } - viewModel.snackbarEvents.observeEvent(viewLifecycleOwner, { it.showSnackbar() }) + viewModel.snackbarEvents.observeEvent(viewLifecycleOwner) { it.showSnackbar() } viewModel.navigationEvents.observeEvent( viewLifecycleOwner @@ -147,10 +145,6 @@ class ScanFragment : Fragment(R.layout.scan_fragment) { private fun ScanFragmentBinding.updateErrorLayout(state: ErrorUiState) { uiHelpers.setTextOrHide(actionableEmptyView.title, state.title) uiHelpers.setTextOrHide(actionableEmptyView.subtitle, state.subtitle) - actionableEmptyView.image.setImageResource(state.image) - state.imageColorResId?.let { - ColorUtils.setImageResourceWithTint(actionableEmptyView.image, state.image, it) - } ?: actionableEmptyView.image.setImageResource(state.image) state.buttonText?.let { uiHelpers.setTextOrHide(actionableEmptyView.button, state.buttonText) } state.action?.let { action -> actionableEmptyView.button.setOnClickListener { action.invoke() } } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanViewModel.kt index c580a91eb9b2..3da14e4196aa 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanViewModel.kt @@ -1,7 +1,5 @@ package org.wordpress.android.ui.jetpack.scan -import androidx.annotation.ColorRes -import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.lifecycle.LiveData import androidx.lifecycle.MediatorLiveData @@ -366,53 +364,35 @@ class ScanViewModel @Inject constructor( data class ContentUiState(val items: List) : UiState(contentVisible = true) sealed class ErrorUiState : UiState(errorVisible = true) { - abstract val image: Int - open val imageColorResId: Int? = null abstract val title: UiString abstract val subtitle: UiString open val buttonText: UiString? = null open val action: (() -> Unit)? = null data class NoConnection(override val action: () -> Unit) : ErrorUiState() { - @DrawableRes - override val image = R.drawable.img_illustration_cloud_off_152dp override val title = UiStringRes(R.string.scan_no_network_title) override val subtitle = UiStringRes(R.string.scan_no_network_subtitle) override val buttonText = UiStringRes(R.string.retry) } data class GenericRequestFailed(override val action: () -> Unit) : ErrorUiState() { - @DrawableRes - override val image = R.drawable.img_illustration_cloud_off_152dp override val title = UiStringRes(R.string.scan_request_failed_title) override val subtitle = UiStringRes(R.string.scan_request_failed_subtitle) override val buttonText = UiStringRes(R.string.contact_support) } data class ScanRequestFailed(override val action: () -> Unit) : ErrorUiState() { - @DrawableRes - override val image = R.drawable.img_illustration_empty_results_216dp override val title = UiStringRes(R.string.scan_start_request_failed_title) override val subtitle = UiStringRes(R.string.scan_start_request_failed_subtitle) override val buttonText = UiStringRes(R.string.contact_support) } object MultisiteNotSupported : ErrorUiState() { - @DrawableRes - override val image = R.drawable.ic_baseline_security_white_24dp - - @ColorRes - override val imageColorResId = R.color.gray override val title = UiStringRes(R.string.scan_multisite_not_supported_title) override val subtitle = UiStringRes(R.string.scan_multisite_not_supported_subtitle) } data class VaultPressActiveOnSite(override val action: () -> Unit) : ErrorUiState() { - @DrawableRes - override val image = R.drawable.ic_shield_warning_white - - @ColorRes - override val imageColorResId = R.color.error_60 override val title = UiStringRes(R.string.scan_vault_press_active_on_site_title) override val subtitle = UiStringRes(R.string.scan_vault_press_active_on_site_subtitle) override val buttonText = UiStringRes(R.string.scan_vault_press_active_on_site_button_text) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/history/ScanHistoryFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/history/ScanHistoryFragment.kt index d026838b50bb..86de81b541ce 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/history/ScanHistoryFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/history/ScanHistoryFragment.kt @@ -96,8 +96,7 @@ class ScanHistoryFragment : Fragment(R.layout.scan_history_fragment), MenuProvid private fun FullscreenErrorWithRetryBinding.updateErrorLayout(uiState: ErrorUiState) { uiHelpers.setTextOrHide(errorTitle, uiState.title) - uiHelpers.updateVisibility(errorImage, true) - errorImage.setImageResource(uiState.img) + uiHelpers.updateVisibility(errorImage, false) errorRetry.setOnClickListener { uiState.retry.invoke() } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/history/ScanHistoryViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/history/ScanHistoryViewModel.kt index 830f16fdcd75..f6378dd6a79e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/history/ScanHistoryViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/history/ScanHistoryViewModel.kt @@ -2,7 +2,6 @@ package org.wordpress.android.ui.jetpack.scan.history import android.annotation.SuppressLint import android.os.Parcelable -import androidx.annotation.DrawableRes import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import dagger.hilt.android.lifecycle.HiltViewModel @@ -90,21 +89,14 @@ class ScanHistoryViewModel @Inject constructor( sealed class ErrorUiState : UiState(errorVisible = true) { abstract val title: UiString - abstract val img: Int abstract val retry: () -> Unit data class NoConnection(override val retry: () -> Unit) : ErrorUiState() { override val title: UiString = UiStringRes(R.string.scan_history_no_connection) - - @DrawableRes - override val img: Int = R.drawable.img_illustration_cloud_off_152dp } data class RequestFailed(override val retry: () -> Unit) : ErrorUiState() { override val title: UiString = UiStringRes(R.string.scan_history_request_failed) - - @DrawableRes - override val img: Int = R.drawable.img_illustration_cloud_off_152dp } } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteItemsViewModelSlice.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteItemsViewModelSlice.kt index 57e54f3533e4..c6adba59e38e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteItemsViewModelSlice.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteItemsViewModelSlice.kt @@ -60,18 +60,18 @@ class SiteItemsViewModelSlice @Inject constructor( private suspend fun rebuildSiteItemsForJetpackCapabilities(site: SiteModel) { jetpackCapabilitiesUseCase.getJetpackPurchasedProducts(site.siteId).collect { purchasedProducts -> // if the site has scan or backup enabled, then only rebuild the site items - if(purchasedProducts.scan || purchasedProducts.backup) { + if (purchasedProducts.scan || purchasedProducts.backup) { val items = siteItemsBuilder.build( getParams( shouldEnableFocusPoints = false, site = site, backupAvailable = purchasedProducts.backup, - scanAvailable = purchasedProducts.scan && !site.isWPCom && !site.isWPComAtomic + scanAvailable = purchasedProducts.scan ) ) _uiModel.postValue(items) } - } // end collect + } } fun getParams( diff --git a/WordPress/src/main/res/layout/scan_fragment.xml b/WordPress/src/main/res/layout/scan_fragment.xml index 9f95381402d1..2722d2670eb3 100644 --- a/WordPress/src/main/res/layout/scan_fragment.xml +++ b/WordPress/src/main/res/layout/scan_fragment.xml @@ -11,7 +11,6 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" - app:aevImage="@drawable/img_illustration_empty_results_216dp" app:aevTitle="@string/loading" tools:visibility="visible" /> diff --git a/WordPress/src/main/res/values/colors_semantic.xml b/WordPress/src/main/res/values/colors_semantic.xml index 24f34506645f..d1fbd164bf4c 100644 --- a/WordPress/src/main/res/values/colors_semantic.xml +++ b/WordPress/src/main/res/values/colors_semantic.xml @@ -6,7 +6,6 @@ @color/red_50 @color/red_50 - @color/red_60 @color/gray_50 @color/gray_0 diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index 6665572faaca..aa457924908a 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -1263,11 +1263,11 @@ @string/no_network_title @string/no_network_message Something went wrong - @string/request_failed_message + Failed to start the scan @string/scan_request_failed_title - Jetpack Scan couldn\'t complete a scan of your site. Please check to see if your site is down – if it\'s not, try again. If it is, or if Jetpack Scan is still having problems, contact our support team. + Jetpack Scan couldn\'t complete a scan of your site. Please check to see if your site is down. WordPress multisites are not supported - We\'re sorry, Jetpack Scan is not compatible with multisite WordPress installations at this time. + We\'re sorry, Jetpack Scan is not compatible with multisite WordPress installations Your site has VaultPress Your site already is protected by VaultPress. You can find a link to your VaultPress dashboard below. Visit Dashboard diff --git a/WordPress/src/test/java/org/wordpress/android/ui/jetpack/scan/ScanViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/jetpack/scan/ScanViewModelTest.kt index f6bce1194074..362302fe9a11 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/jetpack/scan/ScanViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/jetpack/scan/ScanViewModelTest.kt @@ -181,7 +181,6 @@ class ScanViewModelTest : BaseUnitTest() { val error = observers.uiStates.last() as ErrorUiState with(error) { - assertThat(image).isEqualTo(R.drawable.img_illustration_cloud_off_152dp) assertThat(title).isEqualTo(UiStringRes(R.string.scan_no_network_title)) assertThat(subtitle).isEqualTo(UiStringRes(R.string.scan_no_network_subtitle)) assertThat(buttonText).isEqualTo(UiStringRes(R.string.retry)) @@ -220,7 +219,6 @@ class ScanViewModelTest : BaseUnitTest() { val state = observers.uiStates.last() as ErrorUiState with(state) { - assertThat(image).isEqualTo(R.drawable.img_illustration_cloud_off_152dp) assertThat(title).isEqualTo(UiStringRes(R.string.scan_request_failed_title)) assertThat(subtitle).isEqualTo(UiStringRes(R.string.scan_request_failed_subtitle)) assertThat(buttonText).isEqualTo(UiStringRes(R.string.contact_support)) @@ -326,8 +324,6 @@ class ScanViewModelTest : BaseUnitTest() { val state = observers.uiStates.last() as ErrorUiState with(state) { - assertThat(image).isEqualTo(R.drawable.ic_baseline_security_white_24dp) - assertThat(imageColorResId).isEqualTo(R.color.gray) assertThat(title).isEqualTo(UiStringRes(R.string.scan_multisite_not_supported_title)) assertThat(subtitle).isEqualTo(UiStringRes(R.string.scan_multisite_not_supported_subtitle)) } @@ -352,8 +348,6 @@ class ScanViewModelTest : BaseUnitTest() { val state = observers.uiStates.last() as ErrorUiState with(state) { - assertThat(image).isEqualTo(R.drawable.ic_shield_warning_white) - assertThat(imageColorResId).isEqualTo(R.color.error_60) assertThat(title).isEqualTo(UiStringRes(R.string.scan_vault_press_active_on_site_title)) assertThat(subtitle).isEqualTo(UiStringRes(R.string.scan_vault_press_active_on_site_subtitle)) } @@ -446,7 +440,6 @@ class ScanViewModelTest : BaseUnitTest() { val errorState = observers.uiStates.last() as ErrorUiState with(errorState) { - assertThat(image).isEqualTo(R.drawable.img_illustration_empty_results_216dp) assertThat(title).isEqualTo(UiStringRes(R.string.scan_start_request_failed_title)) assertThat(subtitle).isEqualTo(UiStringRes(R.string.scan_start_request_failed_subtitle)) assertThat(buttonText).isEqualTo(UiStringRes(R.string.contact_support)) diff --git a/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/listitem/SiteItemsViewModelSliceTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/listitem/SiteItemsViewModelSliceTest.kt index 272428622985..9f917be50133 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/listitem/SiteItemsViewModelSliceTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/listitem/SiteItemsViewModelSliceTest.kt @@ -113,7 +113,6 @@ class SiteItemsViewModelSliceTest : BaseUnitTest() { whenever(blazeFeatureUtils.isSiteBlazeEligible(site)).thenReturn(true) val captor = argumentCaptor() - // When siteItemsViewModelSlice.buildSiteItems(site = site) advanceUntilIdle() @@ -131,6 +130,7 @@ class SiteItemsViewModelSliceTest : BaseUnitTest() { // When siteItemsViewModelSlice.buildSiteItems(site = site) + advanceUntilIdle() // Then verify(siteItemsBuilder).build(captor.capture())