From e4ce59d0e8b51c6139107a1b5cbb1e2aba60b7fd Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Thu, 13 Aug 2026 12:29:21 -0400 Subject: [PATCH 01/16] CMM-2302: Remove the shadowed Jetpack feature-removal phases One, Two and Three The WordPress app fetches these flags from https://public-api.wordpress.com/wpcom/v2/mobile/feature-flags. In production jp_removal_self_hosted is true, and getCurrentPhase() checks it first, so the resolved phase is always PhaseSelfHostedUsers. Phases One, Two and Three are shadowed and can never be reached, even though their flags are also true. Removed: - PhaseOne/PhaseTwo/PhaseThree and their configs, BuildConfig fields and remote fields (jp_deadline, phase_two_blog_post) - The per-feature overlay path: JetpackFeatureOverlayContentBuilder.build(), JetpackFeatureOverlayContentBuilderParams, and the overlay frequency throttling (JetpackOverlayConnectedFeature, JetpackFeatureRemovalOverlayPhase) - The showJetpackOverlay plumbing in the Reader, Notifications, Stats and Stats-detail view models and fragments - The phase-three deadline countdown branding and JetpackBrandingUiState - The My Site Jetpack badge, which only ever showed in phases One to Three - shouldShowDashboard() and shouldShowQuickStart(), which had no callers - 21 orphaned string keys across 31 locales Collapsed shouldShowJetpackBrandingForPhaseOne/ForPhaseTwo into a single shouldShowJetpackBanner(), and getBrandingTextForScreen(screen) into getBrandingText(), since every branch resolved to the same string. Incidentally fixes two latent bugs by deleting the code they lived in: the swapped NOTIFICATIONS/READER SharedPrefs keys in JetpackFeatureOverlayShownTracker and the `else -> TODO()` in JetpackFeatureOverlayContentBuilder. No behaviour change: every removed branch was unreachable under PhaseSelfHostedUsers. --- WordPress/build.gradle | 3 - .../detail/ActivityLogDetailFragment.kt | 2 +- .../list/ActivityLogListActivity.kt | 2 +- .../DeepLinkingIntentReceiverActivity.java | 2 - .../android/ui/jetpack/scan/ScanActivity.kt | 4 +- .../scan/history/ScanHistoryFragment.kt | 4 +- .../jetpackoverlay/JetpackBrandingUiState.kt | 52 --- ...JetpackFeatureFullScreenOverlayFragment.kt | 13 - ...etpackFeatureFullScreenOverlayViewModel.kt | 90 +---- .../JetpackFeatureOverlayContentBuilder.kt | 224 +---------- .../JetpackFeatureOverlayShownTracker.kt | 49 +-- .../JetpackFeatureRemovalBrandingUtil.kt | 121 +----- .../JetpackFeatureRemovalOverlayUtil.kt | 156 +------- .../JetpackFeatureRemovalPhaseHelper.kt | 133 +------ .../jetpackoverlay/JetpackOverlayUIState.kt | 14 - .../wordpress/android/ui/main/MeFragment.kt | 2 +- .../android/ui/main/WPMainActivity.java | 4 - .../android/ui/mysite/MySiteAdapter.kt | 4 - .../ui/mysite/MySiteAdapterDiffCallback.kt | 2 - .../android/ui/mysite/MySiteCardAndItem.kt | 7 - .../android/ui/mysite/MySiteFragment.kt | 5 +- .../JetpackFeatureCardHelper.kt | 7 +- .../items/DashboardItemsViewModelSlice.kt | 11 +- .../JetpackBadgeViewModelSlice.kt | 45 --- .../MySiteJetpackBadgeViewHolder.kt | 20 - .../NotificationsListFragment.kt | 11 +- .../NotificationsListViewModel.kt | 14 - .../android/ui/people/PeopleListFragment.java | 4 +- .../ui/people/PersonDetailFragment.java | 4 +- .../android/ui/prefs/AppSettingsFragment.java | 2 +- .../NotificationsSettingsFragment.java | 2 +- .../ui/publicize/PublicizeListFragment.java | 2 +- .../android/ui/reader/ReaderFragment.kt | 14 +- .../ui/reader/ReaderPostDetailFragment.kt | 2 +- .../ui/reader/ReaderPostListFragment.kt | 2 +- .../ui/reader/ReaderPostPagerActivity.kt | 2 - .../ui/reader/viewmodels/ReaderViewModel.kt | 10 - .../android/ui/stats/refresh/StatsFragment.kt | 20 +- .../ui/stats/refresh/StatsViewModel.kt | 12 - .../lists/detail/StatsDetailFragment.kt | 10 +- .../lists/detail/StatsDetailViewModel.kt | 14 - .../ui/themes/ThemeBrowserActivity.java | 4 +- .../android/util/JetpackBrandingUtils.kt | 17 +- .../JetpackFeatureRemovalPhaseOneConfig.kt | 19 - .../JetpackFeatureRemovalPhaseThreeConfig.kt | 19 - .../JetpackFeatureRemovalPhaseTwoConfig.kt | 19 - .../JetpackFeatureRemovalRemoteFields.kt | 46 --- .../main/res/layout/jetpack_feature_card.xml | 4 +- WordPress/src/main/res/values-ar/strings.xml | 19 - WordPress/src/main/res/values-cs/strings.xml | 19 - WordPress/src/main/res/values-de/strings.xml | 19 - .../src/main/res/values-en-rCA/strings.xml | 19 - .../src/main/res/values-en-rGB/strings.xml | 19 - .../src/main/res/values-es-rCL/strings.xml | 19 - .../src/main/res/values-es-rCO/strings.xml | 19 - .../src/main/res/values-es-rMX/strings.xml | 6 - WordPress/src/main/res/values-es/strings.xml | 19 - .../src/main/res/values-fr-rCA/strings.xml | 19 - WordPress/src/main/res/values-fr/strings.xml | 19 - WordPress/src/main/res/values-gl/strings.xml | 19 - WordPress/src/main/res/values-he/strings.xml | 19 - WordPress/src/main/res/values-id/strings.xml | 19 - WordPress/src/main/res/values-it/strings.xml | 19 - WordPress/src/main/res/values-ja/strings.xml | 19 - WordPress/src/main/res/values-ko/strings.xml | 19 - WordPress/src/main/res/values-lv/strings.xml | 19 - WordPress/src/main/res/values-nl/strings.xml | 19 - WordPress/src/main/res/values-pl/strings.xml | 19 - .../src/main/res/values-pt-rBR/strings.xml | 19 - WordPress/src/main/res/values-ro/strings.xml | 19 - WordPress/src/main/res/values-ru/strings.xml | 19 - WordPress/src/main/res/values-sq/strings.xml | 19 - WordPress/src/main/res/values-sr/strings.xml | 2 - WordPress/src/main/res/values-sv/strings.xml | 19 - WordPress/src/main/res/values-tr/strings.xml | 19 - .../src/main/res/values-zh-rCN/strings.xml | 19 - .../src/main/res/values-zh-rHK/strings.xml | 19 - .../src/main/res/values-zh-rTW/strings.xml | 19 - WordPress/src/main/res/values/strings.xml | 21 - ...JetpackFeatureOverlayContentBuilderTest.kt | 149 ------- .../JetpackFeatureRemovalBrandingUtilTest.kt | 375 ------------------ .../JetpackFeatureRemovalOverlayUtilTest.kt | 189 --------- .../JetpackFeatureRemovalPhaseHelperTest.kt | 45 --- .../DashboardItemsViewModelSliceTest.kt | 8 - .../JetpackFeatureCardHelperTest.kt | 15 +- .../JetpackBadgeViewModelSliceTest.kt | 94 ----- .../NotificationsListViewModelTest.kt | 5 - .../reader/viewmodels/ReaderViewModelTest.kt | 5 - .../ui/stats/refresh/StatsViewModelTest.kt | 32 -- .../util/config/JPDeadlineConfigStub.kt | 8 - 90 files changed, 77 insertions(+), 2638 deletions(-) delete mode 100644 WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackBrandingUiState.kt delete mode 100644 WordPress/src/main/java/org/wordpress/android/ui/mysite/items/jetpackBadge/JetpackBadgeViewModelSlice.kt delete mode 100644 WordPress/src/main/java/org/wordpress/android/ui/mysite/jetpackbadge/MySiteJetpackBadgeViewHolder.kt delete mode 100644 WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseOneConfig.kt delete mode 100644 WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseThreeConfig.kt delete mode 100644 WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseTwoConfig.kt delete mode 100644 WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilderTest.kt delete mode 100644 WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtilTest.kt delete mode 100644 WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtilTest.kt delete mode 100644 WordPress/src/test/java/org/wordpress/android/ui/mysite/items/jetpackBadge/JetpackBadgeViewModelSliceTest.kt delete mode 100644 WordPress/src/test/java/org/wordpress/android/util/config/JPDeadlineConfigStub.kt diff --git a/WordPress/build.gradle b/WordPress/build.gradle index 43fc9e7c5f09..b12dc547ef19 100644 --- a/WordPress/build.gradle +++ b/WordPress/build.gradle @@ -140,9 +140,6 @@ android { buildConfigField "boolean", "JETPACK_READER_SAVED_POSTS", "true" buildConfigField "boolean", "JETPACK_PROVIDER_SYNC", "true" buildConfigField "boolean", "JETPACK_MIGRATION_FLOW", "false" - buildConfigField "boolean", "JETPACK_FEATURE_REMOVAL_PHASE_ONE", "false" - buildConfigField "boolean", "JETPACK_FEATURE_REMOVAL_PHASE_TWO", "false" - buildConfigField "boolean", "JETPACK_FEATURE_REMOVAL_PHASE_THREE", "false" buildConfigField "boolean", "JETPACK_FEATURE_REMOVAL_PHASE_FOUR", "false" buildConfigField "boolean", "JETPACK_FEATURE_REMOVAL_NEW_USERS", "false" buildConfigField "boolean", "JETPACK_FEATURE_REMOVAL_STATIC_POSTERS", "false" diff --git a/WordPress/src/main/java/org/wordpress/android/ui/activitylog/detail/ActivityLogDetailFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/activitylog/detail/ActivityLogDetailFragment.kt index f02c2236eb06..1e9d821900dc 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/activitylog/detail/ActivityLogDetailFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/activitylog/detail/ActivityLogDetailFragment.kt @@ -100,7 +100,7 @@ class ActivityLogDetailFragment : Fragment(R.layout.activity_log_item_detail) { jetpackBadge.root.isVisible = true jetpackBadge.jetpackPoweredBadge.text = uiHelpers.getTextOfUiString( requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) + jetpackBrandingUtils.getBrandingText() ) if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/activitylog/list/ActivityLogListActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/activitylog/list/ActivityLogListActivity.kt index 6f30d340761c..3f67f6ebf3d9 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/activitylog/list/ActivityLogListActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/activitylog/list/ActivityLogListActivity.kt @@ -75,7 +75,7 @@ class ActivityLogListActivity : BaseAppCompatActivity(), ScrollableViewInitializ jetpackBrandingUtils.initJetpackBannerAnimation(jetpackBannerView, scrollableView) binding?.jetpackBanner?.jetpackBannerText?.text = uiHelpers.getTextOfUiString( this, - jetpackBrandingUtils.getBrandingTextForScreen(screen) + jetpackBrandingUtils.getBrandingText() ) if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/DeepLinkingIntentReceiverActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/DeepLinkingIntentReceiverActivity.java index 66939626a198..dfca830e2863 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/DeepLinkingIntentReceiverActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/DeepLinkingIntentReceiverActivity.java @@ -128,9 +128,7 @@ private void observeOverlayEvents() { private void showOverlay() { JetpackFeatureFullScreenOverlayFragment .newInstance( - null, true, - false, JetpackFeatureCollectionOverlaySource.UNSPECIFIED) .show(getSupportFragmentManager(), JetpackFeatureFullScreenOverlayFragment.TAG); } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanActivity.kt index f508a91da225..57d5eafd4655 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanActivity.kt @@ -54,7 +54,7 @@ class ScanActivity : BaseAppCompatActivity(), ScrollableViewInitializedListener } private fun initJetpackBanner(scrollableContainerId: Int) { - if (jetpackBrandingUtils.shouldShowJetpackBrandingForPhaseOne()) { + if (jetpackBrandingUtils.shouldShowJetpackBanner()) { val screen = JetpackPoweredScreen.WithDynamicText.SCAN binding?.root?.post { val jetpackBannerView = binding?.jetpackBanner?.root ?: return@post @@ -65,7 +65,7 @@ class ScanActivity : BaseAppCompatActivity(), ScrollableViewInitializedListener jetpackBrandingUtils.initJetpackBannerAnimation(jetpackBannerView, scrollableView) binding?.jetpackBanner?.jetpackBannerText?.text = uiHelpers.getTextOfUiString( this, - jetpackBrandingUtils.getBrandingTextForScreen(screen) + jetpackBrandingUtils.getBrandingText() ) if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { 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 ce3239a0f662..c1504a59b0b9 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 @@ -158,7 +158,7 @@ class ScanHistoryFragment : Fragment(R.layout.scan_history_fragment), MenuProvid } private fun initJetpackBanner(scrollableContainerId: Int) { - if (jetpackBrandingUtils.shouldShowJetpackBrandingForPhaseOne()) { + if (jetpackBrandingUtils.shouldShowJetpackBanner()) { val screen = JetpackPoweredScreen.WithDynamicText.SCAN binding?.root?.post { val jetpackBannerView = binding?.jetpackBanner?.root ?: return@post @@ -169,7 +169,7 @@ class ScanHistoryFragment : Fragment(R.layout.scan_history_fragment), MenuProvid jetpackBrandingUtils.initJetpackBannerAnimation(jetpackBannerView, scrollableView) binding?.jetpackBanner?.jetpackBannerText?.text = uiHelpers.getTextOfUiString( requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) + jetpackBrandingUtils.getBrandingText() ) if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackBrandingUiState.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackBrandingUiState.kt deleted file mode 100644 index 0ea23d466929..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackBrandingUiState.kt +++ /dev/null @@ -1,52 +0,0 @@ -package org.wordpress.android.ui.jetpackoverlay - -import org.wordpress.android.R -import java.time.LocalDate -import java.time.temporal.ChronoUnit - -sealed class JetpackBrandingUiState { - sealed interface Indeterminate - sealed interface Pluralisable { - val number: Long - val oneRes: Int - val otherRes: Int - - companion object { - val RES_ARE_MOVING_IN = R.string.wp_jetpack_powered_phase_3_feature_are_moving_in - val RES_IS_MOVING_IN = R.string.wp_jetpack_powered_phase_3_feature_is_moving_in - } - } - - object Soon : JetpackBrandingUiState(), Indeterminate { - val RES_ARE_MOVING_SOON = R.string.wp_jetpack_powered_phase_3_feature_are_moving_soon - val RES_IS_MOVING_SOON = R.string.wp_jetpack_powered_phase_3_feature_is_moving_soon - } - - data class Weeks(override val number: Long) : JetpackBrandingUiState(), Pluralisable { - override val oneRes = R.string.weeks_quantity_one - override val otherRes = R.string.weeks_quantity_other - } - - data class Days(override val number: Long) : JetpackBrandingUiState(), Pluralisable { - override val oneRes = R.string.days_quantity_one - override val otherRes = R.string.days_quantity_other - } - - object Unknown : JetpackBrandingUiState(), Indeterminate - object Passed : JetpackBrandingUiState() - - companion object { - val RES_JP_POWERED = R.string.wp_jetpack_powered - - fun between(startDate: LocalDate, endDate: LocalDate): JetpackBrandingUiState { - val days = ChronoUnit.DAYS.between(startDate, endDate) - return when { - days > ChronoUnit.MONTHS.duration.toDays() -> Soon - days >= ChronoUnit.WEEKS.duration.toDays() -> Weeks(ChronoUnit.WEEKS.between(startDate, endDate)) - days >= 1 || startDate == endDate -> Days(days.coerceAtLeast(1)) - days < 0 -> Passed - else -> Unknown - } - } - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayFragment.kt index df93b4ade2f3..e0ea15d29265 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayFragment.kt @@ -18,7 +18,6 @@ import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureOverlayActions.Forw import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureOverlayActions.OpenMigrationInfoLink import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureOverlayActions.OpenPlayStore import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureCollectionOverlaySource -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureOverlayScreenType import org.wordpress.android.ui.utils.UiHelpers import org.wordpress.android.util.RtlUtils import org.wordpress.android.util.UrlUtils @@ -54,9 +53,7 @@ class JetpackFeatureFullScreenOverlayFragment : BottomSheetDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) viewModel.init( - getSiteScreen(), getIfDeepLinkOverlay(), - getIfFeatureCollectionOverlay(), getFeatureCollectionOverlaysSource(), RtlUtils.isRtl(view.context) ) @@ -64,12 +61,8 @@ class JetpackFeatureFullScreenOverlayFragment : BottomSheetDialogFragment() { (dialog as? BottomSheetDialog)?.fillScreen() } - private fun getSiteScreen() = arguments?.getSerializableCompat(OVERLAY_SCREEN_TYPE) - private fun getIfDeepLinkOverlay() = arguments?.getBoolean(IS_DEEP_LINK_OVERLAY) ?: false - private fun getIfFeatureCollectionOverlay() = arguments?.getBoolean(IS_FEATURE_COLLECTION_OVERLAY) ?: false - private fun getFeatureCollectionOverlaysSource() = requireNotNull( arguments?.getSerializableCompat(FEATURE_COLLECTION_OVERLAY_SOURCE) ) @@ -168,23 +161,17 @@ class JetpackFeatureFullScreenOverlayFragment : BottomSheetDialogFragment() { companion object { const val TAG = "JETPACK_POWERED_OVERLAY_FULL_SCREEN_FRAGMENT" - private const val OVERLAY_SCREEN_TYPE = "KEY_JETPACK_OVERLAY_SCREEN" private const val IS_DEEP_LINK_OVERLAY = "KEY_IS_DEEP_LINK_OVERLAY" - private const val IS_FEATURE_COLLECTION_OVERLAY = "KEY_IS_FEATURE_COLLECTION_OVERLAY" private const val FEATURE_COLLECTION_OVERLAY_SOURCE = "KEY_FEATURE_COLLECTION_OVERLAY_SOURCE" @JvmStatic fun newInstance( - jetpackFeatureOverlayScreenType: JetpackFeatureOverlayScreenType? = null, isDeepLinkOverlay: Boolean = false, - isFeatureCollectionOverlay: Boolean = false, featureCollectionOverlaySource: JetpackFeatureCollectionOverlaySource? = JetpackFeatureCollectionOverlaySource.UNSPECIFIED ) = JetpackFeatureFullScreenOverlayFragment().apply { arguments = Bundle().apply { - putSerializable(OVERLAY_SCREEN_TYPE, jetpackFeatureOverlayScreenType) putBoolean(IS_DEEP_LINK_OVERLAY, isDeepLinkOverlay) - putBoolean(IS_FEATURE_COLLECTION_OVERLAY, isFeatureCollectionOverlay) putSerializable(FEATURE_COLLECTION_OVERLAY_SOURCE, featureCollectionOverlaySource) } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayViewModel.kt index 03268132545a..c4cb23fad1df 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayViewModel.kt @@ -6,28 +6,20 @@ import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureOverlayActions.OpenMigrationInfoLink import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureCollectionOverlaySource -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureOverlayScreenType import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackOverlayDismissalType.CLOSE_BUTTON import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackOverlayDismissalType.CONTINUE_BUTTON -import org.wordpress.android.util.config.JPDeadlineConfig import org.wordpress.android.util.config.PhaseFourBlogPostLinkConfig -import org.wordpress.android.util.config.PhaseThreeBlogPostLinkConfig -import org.wordpress.android.util.config.PhaseTwoBlogPostLinkConfig import org.wordpress.android.viewmodel.ScopedViewModel import org.wordpress.android.viewmodel.SingleLiveEvent import javax.inject.Inject import javax.inject.Named @HiltViewModel -@Suppress("LongParameterList") class JetpackFeatureFullScreenOverlayViewModel @Inject constructor( @Named(UI_THREAD) mainDispatcher: CoroutineDispatcher, private val jetpackFeatureOverlayContentBuilder: JetpackFeatureOverlayContentBuilder, private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper, private val jetpackFeatureRemovalOverlayUtil: JetpackFeatureRemovalOverlayUtil, - private val jpDeadlineConfig: JPDeadlineConfig, - private val phaseTwoBlogPostLinkConfig: PhaseTwoBlogPostLinkConfig, - private val phaseThreeBlogPostLinkConfig: PhaseThreeBlogPostLinkConfig, private val phaseFourBlogPostLinkConfig: PhaseFourBlogPostLinkConfig ) : ScopedViewModel(mainDispatcher) { private val _uiState = SingleLiveEvent() @@ -36,9 +28,7 @@ class JetpackFeatureFullScreenOverlayViewModel @Inject constructor( private val _action = SingleLiveEvent() val action: LiveData = _action - private lateinit var screenType: JetpackFeatureOverlayScreenType private var isDeepLinkOverlayScreen: Boolean = false - private var isFeatureCollectionOverlayScreen: Boolean = false private var featureCollectionOverlayOrigin: JetpackFeatureCollectionOverlaySource = JetpackFeatureCollectionOverlaySource.UNSPECIFIED @@ -46,46 +36,32 @@ class JetpackFeatureFullScreenOverlayViewModel @Inject constructor( if (isDeepLinkOverlayScreen) { _action.value = JetpackFeatureOverlayActions.ForwardToJetpack jetpackFeatureRemovalOverlayUtil.trackInstallJetpackTappedInDeepLinkOverlay() - } else if (isFeatureCollectionOverlayScreen) { + } else { _action.value = JetpackFeatureOverlayActions.OpenPlayStore jetpackFeatureRemovalOverlayUtil.trackInstallJetpackTappedInFeatureCollectionOverlay( featureCollectionOverlayOrigin ) - } else { - _action.value = JetpackFeatureOverlayActions.OpenPlayStore - jetpackFeatureRemovalOverlayUtil.trackInstallJetpackTapped(screenType) } } - fun continueToFeature() { - _action.value = JetpackFeatureOverlayActions.DismissDialog - if (isDeepLinkOverlayScreen) - jetpackFeatureRemovalOverlayUtil.trackBottomSheetDismissedInDeepLinkOverlay(CONTINUE_BUTTON) - else if (isFeatureCollectionOverlayScreen) - jetpackFeatureRemovalOverlayUtil.trackBottomSheetDismissedInFeatureCollectionOverlay( - featureCollectionOverlayOrigin, - CONTINUE_BUTTON - ) - else jetpackFeatureRemovalOverlayUtil.trackBottomSheetDismissed(screenType, CONTINUE_BUTTON) - } + fun continueToFeature() = dismiss(CONTINUE_BUTTON) + + fun closeBottomSheet() = dismiss(CLOSE_BUTTON) - fun closeBottomSheet() { + private fun dismiss(dismissalType: JetpackFeatureRemovalOverlayUtil.JetpackOverlayDismissalType) { _action.value = JetpackFeatureOverlayActions.DismissDialog - if (isDeepLinkOverlayScreen) - jetpackFeatureRemovalOverlayUtil.trackBottomSheetDismissedInDeepLinkOverlay(CLOSE_BUTTON) - else if (isFeatureCollectionOverlayScreen) + if (isDeepLinkOverlayScreen) { + jetpackFeatureRemovalOverlayUtil.trackBottomSheetDismissedInDeepLinkOverlay(dismissalType) + } else { jetpackFeatureRemovalOverlayUtil.trackBottomSheetDismissedInFeatureCollectionOverlay( featureCollectionOverlayOrigin, - CLOSE_BUTTON + dismissalType ) - else jetpackFeatureRemovalOverlayUtil.trackBottomSheetDismissed(screenType, CLOSE_BUTTON) + } } - @Suppress("ReturnCount", "LongParameterList") fun init( - overlayScreenType: JetpackFeatureOverlayScreenType?, isDeepLinkOverlay: Boolean, - isFeatureCollectionOverlay: Boolean, featureCollectionOverlaySource: JetpackFeatureCollectionOverlaySource, rtlLayout: Boolean ) { @@ -96,54 +72,30 @@ class JetpackFeatureFullScreenOverlayViewModel @Inject constructor( return } - if (isFeatureCollectionOverlay) { - val currentPhase = getCurrentPhase() - ?: return _action.postValue(JetpackFeatureOverlayActions.DismissDialog) - isFeatureCollectionOverlayScreen = true - featureCollectionOverlayOrigin = featureCollectionOverlaySource - _uiState.postValue( - jetpackFeatureOverlayContentBuilder.buildFeatureCollectionOverlayState( - rtlLayout, - currentPhase, - getBlogPostLinkForTheCurrentPhase() - ) - ) - jetpackFeatureRemovalOverlayUtil.onFeatureCollectionOverlayShown(featureCollectionOverlaySource) - return - } - val currentPhase = getCurrentPhase() ?: return _action.postValue(JetpackFeatureOverlayActions.DismissDialog) - screenType = overlayScreenType ?: return - val params = JetpackFeatureOverlayContentBuilderParams( - currentPhase = currentPhase, - isRtl = rtlLayout, - feature = overlayScreenType, - jpDeadlineDate = jpDeadlineConfig.getValue(), - phaseTwoBlogPostLink = phaseTwoBlogPostLinkConfig.getValue(), - phaseThreeBlogPostLink = phaseThreeBlogPostLinkConfig.getValue() + featureCollectionOverlayOrigin = featureCollectionOverlaySource + _uiState.postValue( + jetpackFeatureOverlayContentBuilder.buildFeatureCollectionOverlayState( + rtlLayout, + currentPhase, + getBlogPostLinkForTheCurrentPhase() + ) ) - _uiState.postValue(jetpackFeatureOverlayContentBuilder.build(params = params)) - jetpackFeatureRemovalOverlayUtil.onOverlayShown(overlayScreenType) + jetpackFeatureRemovalOverlayUtil.onFeatureCollectionOverlayShown(featureCollectionOverlaySource) } private fun getCurrentPhase() = jetpackFeatureRemovalPhaseHelper.getCurrentPhase() fun openJetpackMigrationInfoLink(migrationInfoRedirectUrl: String) { - if (isFeatureCollectionOverlayScreen) { - jetpackFeatureRemovalOverlayUtil.trackLearnMoreAboutMigrationClickedInFeatureCollectionOverlay( - featureCollectionOverlayOrigin - ) - } else { - jetpackFeatureRemovalOverlayUtil.trackLearnMoreAboutMigrationClicked(screenType) - } + jetpackFeatureRemovalOverlayUtil.trackLearnMoreAboutMigrationClickedInFeatureCollectionOverlay( + featureCollectionOverlayOrigin + ) _action.value = OpenMigrationInfoLink(migrationInfoRedirectUrl) } private fun getBlogPostLinkForTheCurrentPhase(): String? { return when (getCurrentPhase()) { - JetpackFeatureRemovalPhase.PhaseTwo -> phaseTwoBlogPostLinkConfig.getValue() - JetpackFeatureRemovalPhase.PhaseThree -> phaseThreeBlogPostLinkConfig.getValue() JetpackFeatureRemovalPhase.PhaseFour -> phaseFourBlogPostLinkConfig.getValue() else -> null } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt index a0c3290e5ddc..ca616969d7fd 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt @@ -1,212 +1,15 @@ package org.wordpress.android.ui.jetpackoverlay import org.wordpress.android.R -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureOverlayScreenType -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseOne -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseThree -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseTwo import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseNewUsers import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseSelfHostedUsers -import org.wordpress.android.ui.utils.HtmlMessageUtils -import org.wordpress.android.ui.utils.UiString import org.wordpress.android.ui.utils.UiString.UiStringRes -import org.wordpress.android.ui.utils.UiString.UiStringText -import org.wordpress.android.util.DateTimeUtilsWrapper import javax.inject.Inject import javax.inject.Singleton -// Format 2020-12-22 -const val JETPACK_OVERLAY_ORIGINAL_DATE_FORMAT = "yyyy-MM-dd" - -// Format Decemeber 22, 2020 -const val JETPACK_OVERLAY_TARGET_DATE_FORMAT = "MMMM dd, yyyy" - @Singleton -class JetpackFeatureOverlayContentBuilder @Inject constructor( - private val htmlMessageUtils: HtmlMessageUtils, - private val dateTimeUtilsWrapper: DateTimeUtilsWrapper -) { - fun build(params: JetpackFeatureOverlayContentBuilderParams): JetpackFeatureOverlayUIState { - return when (params.currentPhase) { - is PhaseOne -> getStateForPhaseOne(params, params.feature!!) - is PhaseTwo -> getStateForPhaseTwo(params) - is PhaseThree -> getStateForPhaseThree(params) - else -> TODO() - } - } - - private fun getStateForPhaseThree( - params: JetpackFeatureOverlayContentBuilderParams - ): JetpackFeatureOverlayUIState { - val componentVisibility = JetpackFeatureOverlayComponentVisibility.PhaseThree() - val content = when (params.feature!!) { - JetpackFeatureOverlayScreenType.STATS -> getStateForPhaseTwoStats( - params, - params.jpDeadlineDate, - params.phaseThreeBlogPostLink - ) - JetpackFeatureOverlayScreenType.NOTIFICATIONS -> getStateForPhaseTwoNotifications( - params, - params.jpDeadlineDate, - params.phaseThreeBlogPostLink - ) - JetpackFeatureOverlayScreenType.READER -> getStateForPhaseTwoReader( - params, - params.jpDeadlineDate, - params.phaseThreeBlogPostLink - ) - }.copy( - migrationText = R.string.wp_jetpack_feature_removal_overlay_migration_helper_text - ) - return JetpackFeatureOverlayUIState(componentVisibility, content) - } - - private fun getStateForPhaseTwo( - params: JetpackFeatureOverlayContentBuilderParams - ): JetpackFeatureOverlayUIState { - val componentVisibility = JetpackFeatureOverlayComponentVisibility.PhaseTwo() - val content = when (params.feature!!) { - JetpackFeatureOverlayScreenType.STATS -> getStateForPhaseTwoStats( - params, - params.jpDeadlineDate, - params.phaseTwoBlogPostLink - ) - JetpackFeatureOverlayScreenType.NOTIFICATIONS -> getStateForPhaseTwoNotifications( - params, - params.jpDeadlineDate, - params.phaseTwoBlogPostLink - ) - JetpackFeatureOverlayScreenType.READER -> getStateForPhaseTwoReader( - params, - params.jpDeadlineDate, - params.phaseTwoBlogPostLink - ) - } - return JetpackFeatureOverlayUIState(componentVisibility, content) - } - - private fun getStateForPhaseTwoStats( - params: JetpackFeatureOverlayContentBuilderParams, - jpDeadlineDate: String?, - blogPostLink: String? - ): JetpackFeatureOverlayContent { - return JetpackFeatureOverlayContent( - illustration = if (params.isRtl) R.raw.jp_stats_rtl else R.raw.jp_stats_left, - title = R.string.wp_jetpack_feature_removal_overlay_phase_two_and_three_title_stats, - caption = getCaptionForPhaseTwoAndThree(jpDeadlineDate), - migrationInfoText = if (!blogPostLink.isNullOrEmpty()) - R.string.wp_jetpack_feature_removal_overlay_learn_more_migration_text else null, - migrationInfoUrl = blogPostLink, - primaryButtonText = R.string.wp_jetpack_feature_removal_overlay_switch_to_new_jetpack_app, - secondaryButtonText = R.string.wp_jetpack_continue_to_stats - ) - } - - private fun getStateForPhaseTwoReader( - params: JetpackFeatureOverlayContentBuilderParams, - jpDeadlineDate: String?, - blogPostLink: String? - ): JetpackFeatureOverlayContent { - return JetpackFeatureOverlayContent( - illustration = if (params.isRtl) R.raw.jp_reader_rtl else R.raw.jp_reader_left, - title = R.string.wp_jetpack_feature_removal_overlay_phase_two_and_three_title_reader, - caption = getCaptionForPhaseTwoAndThree(jpDeadlineDate), - migrationInfoText = if (!blogPostLink.isNullOrEmpty()) - R.string.wp_jetpack_feature_removal_overlay_learn_more_migration_text else null, - migrationInfoUrl = blogPostLink, - primaryButtonText = R.string.wp_jetpack_feature_removal_overlay_switch_to_new_jetpack_app, - secondaryButtonText = R.string.wp_jetpack_continue_to_reader - ) - } - - private fun getStateForPhaseTwoNotifications( - params: JetpackFeatureOverlayContentBuilderParams, - jpDeadlineDate: String?, - blogPostLink: String? - ): JetpackFeatureOverlayContent { - return JetpackFeatureOverlayContent( - illustration = if (params.isRtl) R.raw.jp_notifications_rtl else R.raw.jp_notifications_left, - title = R.string.wp_jetpack_feature_removal_overlay_phase_two_and_three_title_notifications, - caption = getCaptionForPhaseTwoAndThree(jpDeadlineDate), - migrationInfoText = if (!blogPostLink.isNullOrEmpty()) - R.string.wp_jetpack_feature_removal_overlay_learn_more_migration_text else null, - migrationInfoUrl = blogPostLink, - primaryButtonText = R.string.wp_jetpack_feature_removal_overlay_switch_to_new_jetpack_app, - secondaryButtonText = R.string.wp_jetpack_continue_to_notifications - ) - } - - private fun getCaptionForPhaseTwoAndThree(jpDeadlineDate: String?): UiString { - return if (jpDeadlineDate.isNullOrEmpty()) getPhaseTwoAndThreeCaptionWithoutDeadline() - else { - val deadlineDate = dateTimeUtilsWrapper.convertDateFormat( - jpDeadlineDate, - JETPACK_OVERLAY_ORIGINAL_DATE_FORMAT, - JETPACK_OVERLAY_TARGET_DATE_FORMAT - ) - if (deadlineDate.isNullOrEmpty()) - return getPhaseTwoAndThreeCaptionWithoutDeadline() - getPhaseTwoAndThreeCaptionWithDeadline(deadlineDate) - } - } - - private fun getPhaseTwoAndThreeCaptionWithDeadline(jpDeadlineDate: String): UiString { - return UiStringText( - htmlMessageUtils.getHtmlMessageFromStringFormatResId( - R.string.wp_jetpack_feature_removal_overlay_phase_two_and_three_description_with_deadline, - "$jpDeadlineDate" - ) - ) - } - - private fun getPhaseTwoAndThreeCaptionWithoutDeadline() = UiStringRes( - R.string.wp_jetpack_feature_removal_overlay_phase_two_and_three_description_without_deadline - ) - - private fun getStateForPhaseOne( - params: JetpackFeatureOverlayContentBuilderParams, - feature: JetpackFeatureOverlayScreenType - ): JetpackFeatureOverlayUIState { - val componentVisibility = JetpackFeatureOverlayComponentVisibility.PhaseOne() - val content = when (feature) { - JetpackFeatureOverlayScreenType.STATS -> getStateForPhaseOneStats(params.isRtl) - JetpackFeatureOverlayScreenType.NOTIFICATIONS -> getStateForPhaseOneNotifications(params.isRtl) - JetpackFeatureOverlayScreenType.READER -> getStateForPhaseOneReader(params.isRtl) - } - return JetpackFeatureOverlayUIState(componentVisibility, content) - } - - private fun getStateForPhaseOneStats(rtl: Boolean): JetpackFeatureOverlayContent { - return JetpackFeatureOverlayContent( - illustration = if (rtl) R.raw.jp_stats_rtl else R.raw.jp_stats_left, - title = R.string.wp_jetpack_feature_removal_overlay_phase_one_title_stats, - caption = UiStringRes(R.string.wp_jetpack_feature_removal_overlay_phase_one_description_stats), - primaryButtonText = R.string.wp_jetpack_feature_removal_overlay_switch_to_new_jetpack_app, - secondaryButtonText = R.string.wp_jetpack_continue_to_stats - ) - } - - private fun getStateForPhaseOneReader(rtl: Boolean): JetpackFeatureOverlayContent { - return JetpackFeatureOverlayContent( - illustration = if (rtl) R.raw.jp_reader_rtl else R.raw.jp_reader_left, - title = R.string.wp_jetpack_feature_removal_overlay_phase_one_title_reader, - caption = UiStringRes(R.string.wp_jetpack_feature_removal_overlay_phase_one_description_reader), - primaryButtonText = R.string.wp_jetpack_feature_removal_overlay_switch_to_new_jetpack_app, - secondaryButtonText = R.string.wp_jetpack_continue_to_reader - ) - } - - private fun getStateForPhaseOneNotifications(rtl: Boolean): JetpackFeatureOverlayContent { - return JetpackFeatureOverlayContent( - illustration = if (rtl) R.raw.jp_notifications_rtl else R.raw.jp_notifications_left, - title = R.string.wp_jetpack_feature_removal_overlay_phase_one_title_notifications, - caption = UiStringRes(R.string.wp_jetpack_feature_removal_overlay_phase_one_description_notifications), - primaryButtonText = R.string.wp_jetpack_feature_removal_overlay_switch_to_new_jetpack_app, - secondaryButtonText = R.string.wp_jetpack_continue_to_notifications - ) - } - +class JetpackFeatureOverlayContentBuilder @Inject constructor() { fun buildDeepLinkOverlayState(isRtl: Boolean): JetpackFeatureOverlayUIState { return getStateForDeepLink(isRtl) } @@ -241,7 +44,6 @@ class JetpackFeatureOverlayContentBuilder @Inject constructor( blogPostLink: String? ): JetpackFeatureOverlayUIState { val componentVisibility = when (currentPhase) { - PhaseThree -> JetpackFeatureOverlayComponentVisibility.FeatureCollectionPhase.PhaseThree() PhaseFour -> JetpackFeatureOverlayComponentVisibility.FeatureCollectionPhase.PhaseFour() PhaseNewUsers -> JetpackFeatureOverlayComponentVisibility.FeatureCollectionPhase.PhaseNewUsers() PhaseSelfHostedUsers -> @@ -259,7 +61,6 @@ class JetpackFeatureOverlayContentBuilder @Inject constructor( currentPhase: JetpackFeatureRemovalPhase ): JetpackFeatureOverlayContent { return when (currentPhase) { - is PhaseThree -> getJetpackFeatureOverlayContentForPhaseThree(isRtl, blogPostLink) is PhaseFour -> getJetpackFeatureOverlayContentForPhaseFour(isRtl, blogPostLink) is PhaseNewUsers -> getJetpackFeatureOverlayContentForNewUsers(isRtl) is PhaseSelfHostedUsers -> getJetpackFeatureOverlayContentForSelfHostedUsers(isRtl) @@ -305,27 +106,4 @@ class JetpackFeatureOverlayContentBuilder @Inject constructor( secondaryButtonText = R.string.wp_jetpack_feature_removal_overlay_continue_without_jetpack ) - private fun getJetpackFeatureOverlayContentForPhaseThree( - isRtl: Boolean, - blogPostLink: String? - ) = JetpackFeatureOverlayContent( - illustration = if (isRtl) R.raw.jp_all_features_rtl else R.raw.jp_all_features_left, - title = R.string.wp_jetpack_feature_removal_overlay_phase_two_and_three_title_all_features, - caption = UiStringRes(R.string.wp_jetpack_feature_removal_overlay_phase_three_all_features_description), - migrationText = R.string.wp_jetpack_feature_removal_overlay_migration_helper_text, - migrationInfoText = if (!blogPostLink.isNullOrEmpty()) - R.string.wp_jetpack_feature_removal_overlay_learn_more_migration_text else null, - migrationInfoUrl = blogPostLink, - primaryButtonText = R.string.wp_jetpack_feature_removal_overlay_switch_to_the_jetpack_app, - secondaryButtonText = R.string.wp_jetpack_feature_removal_overlay_continue_without_jetpack - ) } - -data class JetpackFeatureOverlayContentBuilderParams( - val currentPhase: JetpackFeatureRemovalPhase, - val isRtl: Boolean = true, - val feature: JetpackFeatureOverlayScreenType?, - val jpDeadlineDate: String? = null, - val phaseTwoBlogPostLink: String? = null, - val phaseThreeBlogPostLink: String? = null -) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayShownTracker.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayShownTracker.kt index e30127d0b4c5..5db8b1925425 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayShownTracker.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayShownTracker.kt @@ -2,45 +2,14 @@ package org.wordpress.android.ui.jetpackoverlay import android.content.SharedPreferences import androidx.core.content.edit -import org.wordpress.android.ui.jetpackoverlay.JetpackOverlayConnectedFeature.NOTIFICATIONS -import org.wordpress.android.ui.jetpackoverlay.JetpackOverlayConnectedFeature.READER -import org.wordpress.android.ui.jetpackoverlay.JetpackOverlayConnectedFeature.STATS import javax.inject.Inject import javax.inject.Singleton @Singleton class JetpackFeatureOverlayShownTracker @Inject constructor(private val sharedPrefs: SharedPreferences) { - fun getTheLastShownOverlayTimeStamp(phase: JetpackFeatureRemovalOverlayPhase): Long? { - val overlayShownTimeStampList: ArrayList = arrayListOf() - getFeatureOverlayShownTimeStamp(STATS, phase)?.let { overlayShownTimeStampList.add(it) } - getFeatureOverlayShownTimeStamp(NOTIFICATIONS, phase)?.let { overlayShownTimeStampList.add(it) } - getFeatureOverlayShownTimeStamp(READER, phase)?.let { overlayShownTimeStampList.add(it) } - // No jetpack connected feature is accessed yet - if (overlayShownTimeStampList.isEmpty()) return null - return overlayShownTimeStampList.maxOf { it } - } - - fun getFeatureOverlayShownTimeStamp( - jetpackOverlayConnectedFeature: JetpackOverlayConnectedFeature, - phase: JetpackFeatureRemovalOverlayPhase - ): Long? { - val overlayShownTime = sharedPrefs.getLong(jetpackOverlayConnectedFeature.getPreferenceKey(phase), 0L) - // jetpack connected feature is not accessed yet - if (overlayShownTime == 0L) return null - return overlayShownTime - } - - fun setFeatureOverlayShownTimeStamp( - jetpackOverlayConnectedFeature: JetpackOverlayConnectedFeature, - phase: JetpackFeatureRemovalOverlayPhase, - timeStamp: Long - ) { - sharedPrefs.edit { putLong(jetpackOverlayConnectedFeature.getPreferenceKey(phase), timeStamp) } - } - fun setFeatureCollectionOverlayShown(phase: JetpackFeatureRemovalPhase) { sharedPrefs.edit { putBoolean(buildFeatureCollectionOverlayShownKey(phase), true) } - if(phase == JetpackFeatureRemovalPhase.PhaseFour) { + if (phase == JetpackFeatureRemovalPhase.PhaseFour) { setPhaseFourOverlayShownTimeStamp(System.currentTimeMillis()) } } @@ -66,19 +35,3 @@ class JetpackFeatureOverlayShownTracker @Inject constructor(private val sharedPr const val KEY_PHASE_FOUR_OVERLAY_SHOWN_TIME_STAMP = "KEY_PHASE_FOUR_OVERLAY_SHOWN_TIME_STAMP" } } - -enum class JetpackOverlayConnectedFeature(private val featureSpecificPreferenceKey: String) { - STATS("STATS_OVERLAY_SHOWN_TIME_STAMP_KEY"), - NOTIFICATIONS("READER_OVERLAY_SHOWN_TIME_STAMP_KEY"), - READER("NOTIFICATIONS_OVERLAY_SHOWN_TIME_STAMP_KEY"); - - fun getPreferenceKey(phase: JetpackFeatureRemovalOverlayPhase): String { - return featureSpecificPreferenceKey.plus(phase.preferenceKey) - } -} - -enum class JetpackFeatureRemovalOverlayPhase(val preferenceKey: String) { - PHASE_ONE("JETPACK_FEATURE_PHASE_ONE"), - PHASE_TWO("JETPACK_FEATURE_PHASE_TWO"), - PHASE_THREE("JETPACK_FEATURE_PHASE_THREE") -} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt index 57690049e111..3f43a7987bd4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt @@ -1,136 +1,23 @@ package org.wordpress.android.ui.jetpackoverlay import org.wordpress.android.R -import org.wordpress.android.models.JetpackPoweredScreen -import org.wordpress.android.ui.jetpackoverlay.JetpackBrandingUiState.Days -import org.wordpress.android.ui.jetpackoverlay.JetpackBrandingUiState.Indeterminate -import org.wordpress.android.ui.jetpackoverlay.JetpackBrandingUiState.Passed -import org.wordpress.android.ui.jetpackoverlay.JetpackBrandingUiState.Pluralisable -import org.wordpress.android.ui.jetpackoverlay.JetpackBrandingUiState.Soon -import org.wordpress.android.ui.jetpackoverlay.JetpackBrandingUiState.Weeks import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseOne -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseThree -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseTwo import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseStaticPosters import org.wordpress.android.ui.utils.UiString -import org.wordpress.android.ui.utils.UiString.UiStringPluralRes import org.wordpress.android.ui.utils.UiString.UiStringRes -import org.wordpress.android.ui.utils.UiString.UiStringResWithParams -import org.wordpress.android.util.DateTimeUtilsWrapper -import org.wordpress.android.util.config.JPDeadlineConfig -import java.time.LocalDate -import java.time.ZoneId -import java.util.Date import javax.inject.Inject class JetpackFeatureRemovalBrandingUtil @Inject constructor( - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper, - private val jpDeadlineConfig: JPDeadlineConfig, - private val dateTimeUtilsWrapper: DateTimeUtilsWrapper + private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper ) { - private val jpDeadlineDate: String by lazy { - jpDeadlineConfig.getValue() - } - fun isInRemovalPhase() = jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures() - fun shouldShowBrandingInDashboard() = jetpackFeatureRemovalPhaseHelper.shouldShowJetpackBrandingInDashboard() - - fun shouldShowPhaseOneBranding(): Boolean { + fun shouldShowBranding(): Boolean { return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - PhaseOne, - PhaseTwo, - PhaseThree, - PhaseStaticPosters, - PhaseFour -> true + PhaseStaticPosters, PhaseFour -> true else -> false } } - fun shouldShowPhaseTwoBranding(): Boolean { - return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - PhaseTwo, - PhaseThree, - PhaseStaticPosters, - PhaseFour -> true - else -> false - } - } - - fun getBrandingTextByPhase(screen: JetpackPoweredScreen): UiString { - return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - PhaseStaticPosters -> UiStringRes(R.string.wp_jetpack_powered) - PhaseThree -> (screen as? JetpackPoweredScreen.WithDynamicText)?.let { screenWithDynamicText -> - getDynamicBrandingForScreen(screenWithDynamicText) - } ?: UiStringRes(JetpackBrandingUiState.RES_JP_POWERED) - PhaseTwo -> UiStringRes(R.string.wp_jetpack_powered_phase_2) - else -> UiStringRes(JetpackBrandingUiState.RES_JP_POWERED) - } - } - - private fun getDynamicBrandingForScreen(screen: JetpackPoweredScreen.WithDynamicText): UiString { - val deadline = retrieveDeadline() - - return when (deadline == null) { - true -> getPhaseThreeMovingSoonBranding(screen) - false -> getPhaseThreeMovingInBranding(screen, deadline) - } - } - - private fun getPhaseThreeMovingInBranding( - screen: JetpackPoweredScreen.WithDynamicText, - deadline: LocalDate, - ): UiString { - val today = dateTimeUtilsWrapper.getTodaysDate().toLocalDate() - return when (val interval = JetpackBrandingUiState.between(today, deadline)) { - is Indeterminate -> getPhaseThreeMovingSoonBranding(screen) - is Weeks -> getMovingInUiString(screen, getQuantityUiString(interval)) - is Days -> getMovingInUiString(screen, getQuantityUiString(interval)) - is Passed -> UiStringRes(JetpackBrandingUiState.RES_JP_POWERED) - } - } - - private fun retrieveDeadline(): LocalDate? = jpDeadlineDate.takeIf { it.isNotBlank() }?.let { - dateTimeUtilsWrapper.parseDateString(it, JETPACK_OVERLAY_ORIGINAL_DATE_FORMAT)?.toLocalDate() - } - - private fun Date.toLocalDate() = toInstant().atZone(ZoneId.systemDefault()).toLocalDate() - - private fun getPhaseThreeMovingSoonBranding(screen: JetpackPoweredScreen.WithDynamicText) = UiStringResWithParams( - stringRes = when (screen.isPlural) { - true -> Soon.RES_ARE_MOVING_SOON - false -> Soon.RES_IS_MOVING_SOON - }, - screen.featureName - ) - - private fun getMovingInUiString( - screen: JetpackPoweredScreen.WithDynamicText, - quantityUiString: UiStringPluralRes - ) = UiStringResWithParams( - stringRes = when (screen.isPlural) { - true -> Pluralisable.RES_ARE_MOVING_IN - false -> Pluralisable.RES_IS_MOVING_IN - }, - screen.featureName, - quantityUiString - ) - - private fun getQuantityUiString(interval: Pluralisable): UiStringPluralRes { - return when (interval) { - is Weeks -> UiStringPluralRes( - zeroRes = interval.otherRes, - oneRes = interval.oneRes, - otherRes = interval.otherRes, - count = interval.number.toInt(), - ) - is Days -> UiStringPluralRes( - zeroRes = interval.otherRes, - oneRes = interval.oneRes, - otherRes = interval.otherRes, - count = interval.number.toInt(), - ) - } - } + fun getBrandingText(): UiString = UiStringRes(R.string.wp_jetpack_powered) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt index 5cacd95e10bd..a7aae18cd3d6 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt @@ -1,24 +1,11 @@ package org.wordpress.android.ui.jetpackoverlay import org.wordpress.android.analytics.AnalyticsTracker -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayPhase.PHASE_ONE -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayPhase.PHASE_THREE -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayPhase.PHASE_TWO import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureCollectionOverlaySource.APP_OPEN -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureOverlayScreenType.NOTIFICATIONS -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureOverlayScreenType.READER -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureOverlayScreenType.STATS import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseNewUsers -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseOne import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseSelfHostedUsers -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseThree -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseTwo -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseStaticPosters -import org.wordpress.android.ui.mysite.SelectedSiteRepository -import org.wordpress.android.util.BuildConfigWrapper import org.wordpress.android.util.DateTimeUtilsWrapper -import org.wordpress.android.util.SiteUtilsWrapper import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import java.util.Date import javax.inject.Inject @@ -27,24 +14,12 @@ private const val CURRENT_PHASE_KEY = "phase" private const val SCREEN_TYPE_KEY = "source" private const val DISMISSAL_TYPE_KEY = "dismissal_type" -@Suppress("LongParameterList", "TooManyFunctions") class JetpackFeatureRemovalOverlayUtil @Inject constructor( private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper, private val jetpackFeatureOverlayShownTracker: JetpackFeatureOverlayShownTracker, - private val selectedSiteRepository: SelectedSiteRepository, - private val siteUtilsWrapper: SiteUtilsWrapper, - private val buildConfigWrapper: BuildConfigWrapper, private val dateTimeUtilsWrapper: DateTimeUtilsWrapper, private val analyticsTrackerWrapper: AnalyticsTrackerWrapper ) { - fun shouldShowFeatureSpecificJetpackOverlay(feature: JetpackOverlayConnectedFeature): Boolean { - return !buildConfigWrapper.isJetpackApp && isWpComSite() && - isInFeatureSpecificRemovalPhase() && hasExceededOverlayFrequency( - feature, - getCurrentPhasePreference()!! - ) - } - fun shouldHideJetpackFeatures(): Boolean { return jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures() } @@ -56,7 +31,7 @@ class JetpackFeatureRemovalOverlayUtil @Inject constructor( private fun shouldShowFeatureCollectionOverlayInCurrentPhase(phase: JetpackFeatureRemovalPhase): Boolean { return when (phase) { - PhaseThree, PhaseNewUsers, PhaseSelfHostedUsers -> + PhaseNewUsers, PhaseSelfHostedUsers -> !jetpackFeatureOverlayShownTracker.getFeatureCollectionOverlayShown(phase) PhaseFour -> shouldShowPhaseFourFeatureCollectionOverlay() else -> false @@ -83,125 +58,6 @@ class JetpackFeatureRemovalOverlayUtil @Inject constructor( return false } - private fun isInFeatureSpecificRemovalPhase(): Boolean { - return jetpackFeatureRemovalPhaseHelper.getCurrentPhase() != null && - when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - null -> false - PhaseOne, PhaseTwo, PhaseThree -> true - PhaseStaticPosters, PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> false - } - } - - private fun hasExceededOverlayFrequency( - feature: JetpackOverlayConnectedFeature, - currentPhasePreference: JetpackFeatureRemovalOverlayPhase - ): Boolean { - return (hasExceededFeatureSpecificOverlayFrequency(feature, currentPhasePreference) && - hasExceededGlobalOverlayFrequency(currentPhasePreference)) - } - - private fun hasExceededFeatureSpecificOverlayFrequency( - feature: JetpackOverlayConnectedFeature, - phase: JetpackFeatureRemovalOverlayPhase - ): Boolean { - // Feature Overlay is never shown - val overlayShownDate = jetpackFeatureOverlayShownTracker.getFeatureOverlayShownTimeStamp( - feature, - phase - )?.let { Date(it) } ?: return true - val daysPastOverlayShown = dateTimeUtilsWrapper.daysBetween( - overlayShownDate, - dateTimeUtilsWrapper.getTodaysDate() - ) - return daysPastOverlayShown >= PhaseOne.featureSpecificOverlayFrequency - } - - private fun hasExceededGlobalOverlayFrequency(phase: JetpackFeatureRemovalOverlayPhase): Boolean { - // Overlay is never shown - val lastOverlayShownDate = - jetpackFeatureOverlayShownTracker.getTheLastShownOverlayTimeStamp(phase) - ?.let { Date(it) } ?: return true - val daysPastOverlayShown = dateTimeUtilsWrapper.daysBetween( - lastOverlayShownDate, - dateTimeUtilsWrapper.getTodaysDate() - ) - return daysPastOverlayShown >= PhaseOne.globalOverlayFrequency - } - - private fun isWpComSite(): Boolean { - val selectedSite = selectedSiteRepository.getSelectedSite() - return selectedSite != null && siteUtilsWrapper.isAccessedViaWPComRest(selectedSite) - } - - private fun getCurrentPhasePreference(): JetpackFeatureRemovalOverlayPhase? { - return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - PhaseOne -> PHASE_ONE - PhaseTwo -> PHASE_TWO - PhaseThree -> PHASE_THREE - else -> null - } - } - - private fun onFeatureSpecificOverlayShown(feature: JetpackOverlayConnectedFeature) { - if (isInFeatureSpecificRemovalPhase()) - jetpackFeatureOverlayShownTracker.setFeatureOverlayShownTimeStamp( - feature, - getCurrentPhasePreference()!!, - System.currentTimeMillis() - ) - } - - fun onOverlayShown(overlayScreenType: JetpackFeatureOverlayScreenType?) { - overlayScreenType?.let { - when (it) { - STATS -> onFeatureSpecificOverlayShown(JetpackOverlayConnectedFeature.STATS) - NOTIFICATIONS -> onFeatureSpecificOverlayShown(JetpackOverlayConnectedFeature.NOTIFICATIONS) - READER -> onFeatureSpecificOverlayShown(JetpackOverlayConnectedFeature.READER) - } - trackOverlayShown(overlayScreenType) - } - } - - enum class JetpackFeatureOverlayScreenType(val trackingName: String) { - STATS("stats"), - NOTIFICATIONS("notifications"), - READER("reader") - } - - private fun trackOverlayShown(jetpackFeatureOverlayScreenType: JetpackFeatureOverlayScreenType) { - analyticsTrackerWrapper.track( - AnalyticsTracker.Stat.JETPACK_REMOVE_FEATURE_OVERLAY_DISPLAYED, - mapOf( - CURRENT_PHASE_KEY to jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.trackingName, - SCREEN_TYPE_KEY to jetpackFeatureOverlayScreenType.trackingName - ) - ) - } - - fun trackBottomSheetDismissed( - jetpackFeatureOverlayScreenType: JetpackFeatureOverlayScreenType, - dismissalType: JetpackOverlayDismissalType - ) { - analyticsTrackerWrapper.track( - AnalyticsTracker.Stat.JETPACK_REMOVE_FEATURE_OVERLAY_DISMISSED, - mapOf( - CURRENT_PHASE_KEY to jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.trackingName, - SCREEN_TYPE_KEY to jetpackFeatureOverlayScreenType.trackingName, - DISMISSAL_TYPE_KEY to dismissalType.trackingName - ) - ) - } - - fun trackInstallJetpackTapped(screenType: JetpackFeatureOverlayScreenType) { - analyticsTrackerWrapper.track( - AnalyticsTracker.Stat.JETPACK_REMOVE_FEATURE_OVERLAY_BUTTON_GET_JETPACK_APP_TAPPED, - mapOf( - CURRENT_PHASE_KEY to jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.trackingName, - SCREEN_TYPE_KEY to screenType.trackingName - ) - ) - } - fun trackDeepLinkOverlayShown() { analyticsTrackerWrapper.track( AnalyticsTracker.Stat.JETPACK_DEEP_LINK_OVERLAY_DISPLAYED, @@ -232,16 +88,6 @@ class JetpackFeatureRemovalOverlayUtil @Inject constructor( ) } - fun trackLearnMoreAboutMigrationClicked(screenType: JetpackFeatureOverlayScreenType) { - analyticsTrackerWrapper.track( - AnalyticsTracker.Stat.JETPACK_REMOVE_FEATURE_OVERLAY_LEARN_MORE_TAPPED, - mapOf( - CURRENT_PHASE_KEY to jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.trackingName, - SCREEN_TYPE_KEY to screenType.trackingName - ) - ) - } - fun onFeatureCollectionOverlayShown(source: JetpackFeatureCollectionOverlaySource) { if (source == APP_OPEN) { jetpackFeatureOverlayShownTracker.setFeatureCollectionOverlayShown( diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt index a6c1a45c8d2c..230344fae2f8 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt @@ -4,9 +4,6 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseNewUsers -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseOne -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseThree -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseTwo import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseSelfHostedUsers import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseStaticPosters import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalSiteCreationPhase.PHASE_ONE @@ -16,30 +13,15 @@ import org.wordpress.android.util.BuildConfigWrapper import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.util.config.JetpackFeatureRemovalNewUsersConfig import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseFourConfig -import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseOneConfig -import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseThreeConfig -import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseTwoConfig import org.wordpress.android.util.config.JetpackFeatureRemovalSelfHostedUsersConfig import org.wordpress.android.util.config.JetpackFeatureRemovalStaticPostersConfig import org.wordpress.android.util.config.PhaseFourOverlayFrequencyConfig import javax.inject.Inject -private const val PHASE_ONE_GLOBAL_OVERLAY_FREQUENCY_IN_DAYS = 2 -private const val PHASE_ONE_FEATURE_OVERLAY_FREQUENCY_IN_DAYS = 7 - -private const val PHASE_TWO_GLOBAL_OVERLAY_FREQUENCY_IN_DAYS = 2 -private const val PHASE_TWO_FEATURE_OVERLAY_FREQUENCY_IN_DAYS = 7 - -private const val PHASE_THREE_GLOBAL_OVERLAY_FREQUENCY_IN_DAYS = 1 -private const val PHASE_THREE_FEATURE_OVERLAY_FREQUENCY_IN_DAYS = 4 - // Class used to find the current phase // of the Jetpack powered migration class JetpackFeatureRemovalPhaseHelper @Inject constructor( private val buildConfigWrapper: BuildConfigWrapper, - private val jetpackFeatureRemovalPhaseOneConfig: JetpackFeatureRemovalPhaseOneConfig, - private val jetpackFeatureRemovalPhaseTwoConfig: JetpackFeatureRemovalPhaseTwoConfig, - private val jetpackFeatureRemovalPhaseThreeConfig: JetpackFeatureRemovalPhaseThreeConfig, private val jetpackFeatureRemovalPhaseFourConfig: JetpackFeatureRemovalPhaseFourConfig, private val jetpackFeatureRemovalNewUsersConfig: JetpackFeatureRemovalNewUsersConfig, private val jetpackFeatureRemovalSelfHostedUsersConfig: JetpackFeatureRemovalSelfHostedUsersConfig, @@ -53,16 +35,13 @@ class JetpackFeatureRemovalPhaseHelper @Inject constructor( else if (jetpackFeatureRemovalNewUsersConfig.isEnabled()) PhaseNewUsers else if (jetpackFeatureRemovalPhaseFourConfig.isEnabled()) PhaseFour else if (jetpackFeatureRemovalStaticPostersConfig.isEnabled()) PhaseStaticPosters - else if (jetpackFeatureRemovalPhaseThreeConfig.isEnabled()) PhaseThree - else if (jetpackFeatureRemovalPhaseTwoConfig.isEnabled()) PhaseTwo - else if (jetpackFeatureRemovalPhaseOneConfig.isEnabled()) PhaseOne else null } fun getDeepLinkPhase(): JetpackFeatureRemovalSiteCreationPhase? { val currentPhase = getCurrentPhase() ?: return null return when (currentPhase) { - is PhaseOne, PhaseTwo, PhaseThree, PhaseStaticPosters -> PHASE_ONE + is PhaseStaticPosters -> PHASE_ONE is PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> PHASE_TWO } } @@ -71,57 +50,17 @@ class JetpackFeatureRemovalPhaseHelper @Inject constructor( val currentPhase = getCurrentPhase() ?: return false return when (currentPhase) { is PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> true - is PhaseOne, PhaseTwo, PhaseThree, PhaseStaticPosters -> false + is PhaseStaticPosters -> false } } - fun shouldShowDashboard(): Boolean { - val currentPhase = getCurrentPhase() ?: return true - return when (currentPhase) { - is PhaseStaticPosters, PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> false - else -> true - } - } + fun shouldShowJetpackPoweredEditorFeatures(): Boolean = getCurrentPhase() == null - fun shouldShowJetpackPoweredEditorFeatures(): Boolean { - val currentPhase = getCurrentPhase() ?: return true - return when (currentPhase) { - is PhaseStaticPosters, PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> false - else -> true - } - } + fun shouldShowTemplateSelectionInPages(): Boolean = getCurrentPhase() == null - fun shouldShowTemplateSelectionInPages(): Boolean { - val currentPhase = getCurrentPhase() ?: return true - return when (currentPhase) { - is PhaseStaticPosters, PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> false - else -> true - } - } + fun shouldShowPublishedPostStatsButton(): Boolean = getCurrentPhase() == null - fun shouldShowPublishedPostStatsButton(): Boolean { - val currentPhase = getCurrentPhase() ?: return true - return when (currentPhase) { - is PhaseStaticPosters, PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> false - else -> true - } - } - - fun shouldShowJetpackBrandingInDashboard(): Boolean { - val currentPhase = getCurrentPhase() ?: return false - return when (currentPhase) { - is PhaseStaticPosters, PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> false - else -> true - } - } - - fun shouldShowStaticPage(): Boolean { - val currentPhase = getCurrentPhase() ?: return false - return when (currentPhase) { - is PhaseStaticPosters -> true - is PhaseOne, PhaseTwo, PhaseThree, PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> false - } - } + fun shouldShowStaticPage(): Boolean = getCurrentPhase() is PhaseStaticPosters @JvmOverloads fun trackPageAccessedEventIfNeeded(pageType: PageType, site: SiteModel? = null) { @@ -143,29 +82,9 @@ class JetpackFeatureRemovalPhaseHelper @Inject constructor( } } - fun shouldShowNotifications(): Boolean { - val currentPhase = getCurrentPhase() ?: return true - return when (currentPhase) { - is PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> false - is PhaseOne, PhaseTwo, PhaseThree, PhaseStaticPosters -> true - } - } - - fun shouldShowQuickStart(): Boolean { - val currentPhase = getCurrentPhase() ?: return true - return when (currentPhase) { - is PhaseStaticPosters, PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> false - else -> true - } - } + fun shouldShowNotifications(): Boolean = !shouldRemoveJetpackFeatures() - fun shouldShowHelpAndSupportOnEditor(): Boolean { - val currentPhase = getCurrentPhase() ?: return true - return when (currentPhase) { - is PhaseStaticPosters, PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> false - else -> true - } - } + fun shouldShowHelpAndSupportOnEditor(): Boolean = getCurrentPhase() == null fun getPhaseFourOverlayFrequency(): Int { return jetpackPhaseFourOverlayFrequencyConfig.getValue() @@ -173,38 +92,12 @@ class JetpackFeatureRemovalPhaseHelper @Inject constructor( private fun arePosterizedPagesVisible() = !shouldShowStaticPage() } -// Global overlay frequency is the frequency at which the overlay is shown across the features -// no matter which feature was accessed last time -// Feature specific overlay frequency is the frequency at which the overlay is shown for a specific feature - -sealed class JetpackFeatureRemovalPhase( - val globalOverlayFrequency: Int = 0, - val featureSpecificOverlayFrequency: Int = 0, - val trackingName: String -) { - object PhaseOne : JetpackFeatureRemovalPhase( - PHASE_ONE_GLOBAL_OVERLAY_FREQUENCY_IN_DAYS, - PHASE_ONE_FEATURE_OVERLAY_FREQUENCY_IN_DAYS, - "one" - ) - - object PhaseTwo : JetpackFeatureRemovalPhase( - PHASE_TWO_GLOBAL_OVERLAY_FREQUENCY_IN_DAYS, - PHASE_TWO_FEATURE_OVERLAY_FREQUENCY_IN_DAYS, - "two" - ) - - object PhaseThree : JetpackFeatureRemovalPhase( - PHASE_THREE_GLOBAL_OVERLAY_FREQUENCY_IN_DAYS, - PHASE_THREE_FEATURE_OVERLAY_FREQUENCY_IN_DAYS, - "three" - ) - - object PhaseStaticPosters : JetpackFeatureRemovalPhase(trackingName = "static_posters") - object PhaseFour : JetpackFeatureRemovalPhase(trackingName = "four") - object PhaseNewUsers : JetpackFeatureRemovalPhase(trackingName = "new_users") - object PhaseSelfHostedUsers : JetpackFeatureRemovalPhase(trackingName = "self_hosted") +sealed class JetpackFeatureRemovalPhase(val trackingName: String) { + object PhaseStaticPosters : JetpackFeatureRemovalPhase("static_posters") + object PhaseFour : JetpackFeatureRemovalPhase("four") + object PhaseNewUsers : JetpackFeatureRemovalPhase("new_users") + object PhaseSelfHostedUsers : JetpackFeatureRemovalPhase("self_hosted") } enum class JetpackFeatureRemovalSiteCreationPhase(val trackingName: String) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt index 56b8762bb157..96eac005fe24 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt @@ -16,25 +16,11 @@ sealed class JetpackFeatureOverlayComponentVisibility( open val migrationInfoText: Boolean = false, open val newUsersContent: Boolean = false ) { - class PhaseOne : JetpackFeatureOverlayComponentVisibility() - class PhaseTwo(override val migrationInfoText: Boolean = true) : JetpackFeatureOverlayComponentVisibility() - class PhaseThree( - override val migrationInfoText: Boolean = true, - override val closeButton: Boolean = false, - override val migrationText: Boolean = true - ) : JetpackFeatureOverlayComponentVisibility() - sealed class DeepLinkPhase : JetpackFeatureOverlayComponentVisibility() { class All : DeepLinkPhase() } sealed class FeatureCollectionPhase : JetpackFeatureOverlayComponentVisibility() { - class PhaseThree( - override val migrationInfoText: Boolean = true, - override val closeButton: Boolean = false, - override val migrationText: Boolean = true - ) : FeatureCollectionPhase() - class PhaseFour( override val migrationInfoText: Boolean = true, override val closeButton: Boolean = false, diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/MeFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/main/MeFragment.kt index 95f17d0d9449..7b741cca29e9 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/MeFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/MeFragment.kt @@ -364,7 +364,7 @@ class MeFragment : Fragment(R.layout.me_fragment), OnScrollToTopListener { jetpackBadge.isVisible = true jetpackBadge.text = uiHelpers.getTextOfUiString( requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) + jetpackBrandingUtils.getBrandingText() ) if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { jetpackBadge.setOnClickListener { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java index df7757d306e9..fc46f40afb8d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java @@ -521,9 +521,7 @@ private void showJetpackFeatureOverlayAccessedInCorrectly(Map tr mAnalyticsTrackerWrapper.track( Stat.JETPACK_FEATURE_INCORRECTLY_ACCESSED, trackingProperties); JetpackFeatureFullScreenOverlayFragment.newInstance( - null, false, - true, JetpackFeatureCollectionOverlaySource.DISABLED_ENTRY_POINT ).show(getSupportFragmentManager(), JetpackFeatureFullScreenOverlayFragment.TAG); } @@ -576,9 +574,7 @@ private void showSignInForResultBasedOnIsJetpackAppBuildConfig(Activity activity private void displayJetpackFeatureCollectionOverlayIfNeeded() { if (mJetpackFeatureRemovalOverlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()) { JetpackFeatureFullScreenOverlayFragment.newInstance( - null, false, - true, JetpackFeatureCollectionOverlaySource.APP_OPEN ).show(getSupportFragmentManager(), JetpackFeatureFullScreenOverlayFragment.TAG); } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapter.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapter.kt index 03535d836876..b545032e2705 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapter.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapter.kt @@ -30,7 +30,6 @@ import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.CategoryHeaderItem import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.InfoItem import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.ListItem import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.SingleActionCard -import org.wordpress.android.ui.mysite.MySiteCardAndItem.JetpackBadge import org.wordpress.android.ui.mysite.cards.blaze.BlazeCampaignsCardViewHolder import org.wordpress.android.ui.mysite.cards.blaze.PromoteWithBlazeCardViewHolder import org.wordpress.android.ui.mysite.cards.dashboard.activity.ActivityCardViewHolder @@ -58,7 +57,6 @@ import org.wordpress.android.ui.mysite.items.categoryheader.MySiteCategoryItemVi import org.wordpress.android.ui.mysite.items.infoitem.MySiteInfoItemViewHolder import org.wordpress.android.ui.mysite.items.listitem.MySiteListItemViewHolder import org.wordpress.android.ui.mysite.items.singleactioncard.SingleActionCardViewHolder -import org.wordpress.android.ui.mysite.jetpackbadge.MySiteJetpackBadgeViewHolder import org.wordpress.android.ui.utils.UiHelpers import org.wordpress.android.util.HtmlCompatWrapper import org.wordpress.android.util.image.ImageManager @@ -117,7 +115,6 @@ class MySiteAdapter( MySiteCardAndItem.Type.PAGES_CARD.ordinal -> PagesCardViewHolder(parent, uiHelpers) MySiteCardAndItem.Type.ACTIVITY_CARD.ordinal -> ActivityCardViewHolder(parent, uiHelpers) - MySiteCardAndItem.Type.JETPACK_BADGE.ordinal -> MySiteJetpackBadgeViewHolder(parent, uiHelpers) MySiteCardAndItem.Type.SINGLE_ACTION_CARD.ordinal -> SingleActionCardViewHolder(parent) MySiteCardAndItem.Type.JETPACK_FEATURE_CARD.ordinal -> JetpackFeatureCardViewHolder(parent, uiHelpers) MySiteCardAndItem.Type.JETPACK_SWITCH_CARD.ordinal -> SwitchToJetpackMenuCardViewHolder(parent) @@ -142,7 +139,6 @@ class MySiteAdapter( is MySiteCategoryItemViewHolder -> holder.bind(getItem(position) as CategoryHeaderItem) is MySiteCategoryItemEmptyViewHolder -> holder.bind(getItem(position) as CategoryEmptyHeaderItem) is MySiteListItemViewHolder -> holder.bind(getItem(position) as ListItem) - is MySiteJetpackBadgeViewHolder -> holder.bind(getItem(position) as JetpackBadge) is ErrorCardViewHolder -> holder.bind(getItem(position) as ErrorCard) is ErrorWithinCardViewHolder -> holder.bind(getItem(position) as ErrorWithinCard) is TodaysStatsCardViewHolder -> holder.bind(getItem(position) as TodaysStatsCardWithData) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapterDiffCallback.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapterDiffCallback.kt index c86cd26dbe70..03b7aa0adf0e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapterDiffCallback.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapterDiffCallback.kt @@ -26,7 +26,6 @@ import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.CategoryHeaderItem import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.InfoItem import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.ListItem import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.SingleActionCard -import org.wordpress.android.ui.mysite.MySiteCardAndItem.JetpackBadge @Suppress("ComplexMethod") object MySiteAdapterDiffCallback : DiffUtil.ItemCallback() { @@ -52,7 +51,6 @@ object MySiteAdapterDiffCallback : DiffUtil.ItemCallback() { oldItem is DashboardPlansCard && updatedItem is DashboardPlansCard -> true oldItem is PagesCard && updatedItem is PagesCard -> true oldItem is ActivityCard && updatedItem is ActivityCard -> true - oldItem is JetpackBadge && updatedItem is JetpackBadge -> true oldItem is SingleActionCard && updatedItem is SingleActionCard -> { oldItem.textResource == updatedItem.textResource && oldItem.imageResource == updatedItem.imageResource diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteCardAndItem.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteCardAndItem.kt index 4589826e8ed5..e4b5bb66f7dc 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteCardAndItem.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteCardAndItem.kt @@ -9,7 +9,6 @@ import org.wordpress.android.ui.mysite.MySiteCardAndItem.Type.CATEGORY_HEADER_IT import org.wordpress.android.ui.mysite.MySiteCardAndItem.Type.DOMAIN_REGISTRATION_CARD import org.wordpress.android.ui.mysite.MySiteCardAndItem.Type.DYNAMIC_DASHBOARD_CARD import org.wordpress.android.ui.mysite.MySiteCardAndItem.Type.INFO_ITEM -import org.wordpress.android.ui.mysite.MySiteCardAndItem.Type.JETPACK_BADGE import org.wordpress.android.ui.mysite.MySiteCardAndItem.Type.JETPACK_FEATURE_CARD import org.wordpress.android.ui.mysite.MySiteCardAndItem.Type.LIST_ITEM import org.wordpress.android.ui.mysite.MySiteCardAndItem.Type.QUICK_LINK_RIBBON @@ -47,7 +46,6 @@ sealed class MySiteCardAndItem(open val type: Type) { PAGES_CARD_ERROR, PAGES_CARD, ACTIVITY_CARD, - JETPACK_BADGE, SINGLE_ACTION_CARD, JETPACK_FEATURE_CARD, JETPACK_SWITCH_CARD, @@ -404,9 +402,4 @@ sealed class MySiteCardAndItem(open val type: Type) { val listItemAction: ListItemAction ) : Item(LIST_ITEM) } - - data class JetpackBadge( - val text: UiString, - val onClick: ListItemInteraction? = null, - ) : MySiteCardAndItem(JETPACK_BADGE) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteFragment.kt index 81912a03400c..6effb8911599 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteFragment.kt @@ -802,10 +802,7 @@ class MySiteFragment : Fragment(R.layout.my_site_fragment), source: JetpackFeatureRemovalOverlayUtil.JetpackFeatureCollectionOverlaySource ) { JetpackFeatureFullScreenOverlayFragment - .newInstance( - isFeatureCollectionOverlay = true, - featureCollectionOverlaySource = source - ) + .newInstance(featureCollectionOverlaySource = source) .show(requireActivity().supportFragmentManager, JetpackFeatureFullScreenOverlayFragment.TAG) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelper.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelper.kt index facdd574a1c9..2ac39de2caa3 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelper.kt @@ -5,7 +5,6 @@ import org.wordpress.android.analytics.AnalyticsTracker.Stat import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseNewUsers import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseSelfHostedUsers -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseThree import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper import org.wordpress.android.ui.prefs.AppPrefsWrapper import org.wordpress.android.ui.utils.UiString @@ -41,22 +40,20 @@ class JetpackFeatureCardHelper @Inject constructor( fun shouldShowFeatureCardAtTop(): Boolean { return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - is PhaseThree, PhaseSelfHostedUsers -> true + is PhaseSelfHostedUsers -> true else -> false } } private fun shouldShowJetpackFeatureCardInCurrentPhase(): Boolean { return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - is PhaseThree, PhaseNewUsers, PhaseSelfHostedUsers -> true + is PhaseNewUsers, PhaseSelfHostedUsers -> true else -> false } } fun getCardContent(): UiString.UiStringRes? { return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - is PhaseThree -> - UiString.UiStringRes(R.string.jetpack_feature_card_content_phase_three) is PhaseNewUsers, PhaseSelfHostedUsers -> UiString.UiStringRes(R.string.jetpack_feature_card_content_phase_self_hosted_and_new_users) else -> null diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/DashboardItemsViewModelSlice.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/DashboardItemsViewModelSlice.kt index 6e3f7b9cb5af..af00437dbd44 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/DashboardItemsViewModelSlice.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/DashboardItemsViewModelSlice.kt @@ -12,7 +12,6 @@ import org.wordpress.android.modules.BG_THREAD import org.wordpress.android.ui.mysite.MySiteCardAndItem import org.wordpress.android.ui.mysite.cards.jetpackfeature.JetpackFeatureCardHelper import org.wordpress.android.ui.mysite.cards.sotw2023.WpSotw2023NudgeCardViewModelSlice -import org.wordpress.android.ui.mysite.items.jetpackBadge.JetpackBadgeViewModelSlice import org.wordpress.android.ui.mysite.items.jetpackSwitchmenu.JetpackSwitchMenuViewModelSlice import org.wordpress.android.ui.mysite.items.jetpackfeaturecard.JetpackFeatureCardViewModelSlice import org.wordpress.android.ui.mysite.items.listitem.SiteItemsViewModelSlice @@ -24,7 +23,6 @@ class DashboardItemsViewModelSlice @Inject constructor( @param:Named(BG_THREAD) private val bgDispatcher: CoroutineDispatcher, private val jetpackFeatureCardViewModelSlice: JetpackFeatureCardViewModelSlice, private val jetpackSwitchMenuViewModelSlice: JetpackSwitchMenuViewModelSlice, - private val jetpackBadgeViewModelSlice: JetpackBadgeViewModelSlice, private val siteItemsViewModelSlice: SiteItemsViewModelSlice, private val sotw2023NudgeCardViewModelSlice: WpSotw2023NudgeCardViewModelSlice, private val jetpackFeatureCardHelper: JetpackFeatureCardHelper @@ -43,7 +41,6 @@ class DashboardItemsViewModelSlice @Inject constructor( val onNavigation = merge( jetpackFeatureCardViewModelSlice.onNavigation, jetpackSwitchMenuViewModelSlice.onNavigation, - jetpackBadgeViewModelSlice.onNavigation, siteItemsViewModelSlice.onNavigation, sotw2023NudgeCardViewModelSlice.onNavigation ) @@ -51,14 +48,12 @@ class DashboardItemsViewModelSlice @Inject constructor( val uiModel: MutableLiveData> = merge( jetpackFeatureCardViewModelSlice.uiModel, jetpackSwitchMenuViewModelSlice.uiModel, - jetpackBadgeViewModelSlice.uiModel, siteItemsViewModelSlice.uiModel, sotw2023NudgeCardViewModelSlice.uiModel - ) { jetpackFeatureCard, jetpackSwitchMenu, jetpackBadge, siteItems, sotw2023NudgeCard -> + ) { jetpackFeatureCard, jetpackSwitchMenu, siteItems, sotw2023NudgeCard -> mergeUiModels( jetpackFeatureCard, jetpackSwitchMenu, - jetpackBadge, siteItems, sotw2023NudgeCard ) @@ -74,7 +69,6 @@ class DashboardItemsViewModelSlice @Inject constructor( private fun mergeUiModels( jetpackFeatureCard: MySiteCardAndItem.Card.JetpackFeatureCard?, jetpackSwitchMenu: MySiteCardAndItem.Card.JetpackSwitchMenu?, - jetpackBadge: MySiteCardAndItem.JetpackBadge?, siteItems: List?, sotw2023NudgeCard: MySiteCardAndItem.Card.WpSotw2023NudgeCardModel? ): List { @@ -86,7 +80,6 @@ class DashboardItemsViewModelSlice @Inject constructor( if (jetpackFeatureCardHelper.shouldShowFeatureCardAtTop()) jetpackFeatureCard?.let { add(0, jetpackFeatureCard) } else jetpackFeatureCard?.let { add(jetpackFeatureCard) } - jetpackBadge?.let { add(jetpackBadge) } }.toList() if(dasbhboardSiteItems.isNotEmpty()) trackShown(dasbhboardSiteItems) return dasbhboardSiteItems @@ -98,7 +91,6 @@ class DashboardItemsViewModelSlice @Inject constructor( _isRefreshing.postValue(true) jetpackFeatureCardViewModelSlice.buildJetpackFeatureCard() jetpackSwitchMenuViewModelSlice.buildJetpackSwitchMenu() - jetpackBadgeViewModelSlice.buildJetpackBadge() siteItemsViewModelSlice.buildSiteItems(site) sotw2023NudgeCardViewModelSlice.buildCard() _isRefreshing.postValue(false) @@ -108,7 +100,6 @@ class DashboardItemsViewModelSlice @Inject constructor( fun clearValue() { jetpackFeatureCardViewModelSlice.clearValue() jetpackSwitchMenuViewModelSlice.clearValue() - jetpackBadgeViewModelSlice.clearValue() siteItemsViewModelSlice.clearValue() sotw2023NudgeCardViewModelSlice.clearValue() } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/jetpackBadge/JetpackBadgeViewModelSlice.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/jetpackBadge/JetpackBadgeViewModelSlice.kt deleted file mode 100644 index b6988527d8b4..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/jetpackBadge/JetpackBadgeViewModelSlice.kt +++ /dev/null @@ -1,45 +0,0 @@ -package org.wordpress.android.ui.mysite.items.jetpackBadge - -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.distinctUntilChanged -import org.wordpress.android.models.JetpackPoweredScreen -import org.wordpress.android.ui.mysite.MySiteCardAndItem -import org.wordpress.android.ui.mysite.SiteNavigationAction -import org.wordpress.android.ui.utils.ListItemInteraction -import org.wordpress.android.util.JetpackBrandingUtils -import org.wordpress.android.viewmodel.Event -import javax.inject.Inject - -class JetpackBadgeViewModelSlice @Inject constructor( - private val jetpackBrandingUtils: JetpackBrandingUtils -){ - private val _onNavigation = MutableLiveData>() - val onNavigation = _onNavigation - - private val _uiModel = MutableLiveData() - val uiModel = _uiModel.distinctUntilChanged() - - val screen = JetpackPoweredScreen.WithStaticText.HOME - - suspend fun buildJetpackBadge(){ - if(jetpackBrandingUtils.shouldShowJetpackBrandingInDashboard().not()) - return _uiModel.postValue(null) - _uiModel.postValue(MySiteCardAndItem.JetpackBadge( - text = jetpackBrandingUtils.getBrandingTextForScreen(screen), - onClick = if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - ListItemInteraction.create(screen, this::onJetpackBadgeClick) - } else { - null - } - )) - } - - private fun onJetpackBadgeClick(screen: JetpackPoweredScreen) { - jetpackBrandingUtils.trackBadgeTapped(screen) - _onNavigation.value = Event(SiteNavigationAction.OpenJetpackPoweredBottomSheet) - } - - fun clearValue() { - _uiModel.postValue(null) - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/jetpackbadge/MySiteJetpackBadgeViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/jetpackbadge/MySiteJetpackBadgeViewHolder.kt deleted file mode 100644 index 33f78e7eb486..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/jetpackbadge/MySiteJetpackBadgeViewHolder.kt +++ /dev/null @@ -1,20 +0,0 @@ -package org.wordpress.android.ui.mysite.jetpackbadge - -import android.view.ViewGroup -import org.wordpress.android.databinding.JetpackBadgeBinding -import org.wordpress.android.ui.mysite.MySiteCardAndItem.JetpackBadge -import org.wordpress.android.ui.mysite.MySiteCardAndItemViewHolder -import org.wordpress.android.ui.utils.UiHelpers -import org.wordpress.android.util.extensions.viewBinding - -class MySiteJetpackBadgeViewHolder( - parent: ViewGroup, - private val uiHelpers: UiHelpers, -) : MySiteCardAndItemViewHolder(parent.viewBinding(JetpackBadgeBinding::inflate)) { - fun bind(item: JetpackBadge) = with(binding) { - jetpackPoweredBadge.text = uiHelpers.getTextOfUiString(binding.jetpackPoweredBadge.context, item.text) - item.onClick?.run { - jetpackPoweredBadge.setOnClickListener { click() } - } - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListFragment.kt index d9599d68913b..50c409afe9d6 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListFragment.kt @@ -46,7 +46,6 @@ import org.wordpress.android.ui.RequestCodes import org.wordpress.android.ui.ScrollableViewInitializedListener import org.wordpress.android.ui.WPWebViewActivity import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureFullScreenOverlayFragment -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureOverlayScreenType import org.wordpress.android.ui.jetpackrestconnection.JetpackRestConnectionActivity import org.wordpress.android.ui.jetpackrestconnection.JetpackRestConnectionViewModel import org.wordpress.android.ui.main.WPMainActivity @@ -147,13 +146,6 @@ class NotificationsListFragment : Fragment(R.layout.notifications_list_fragment) .newInstance(it, PageType.NOTIFS) .show(childFragmentManager, JetpackPoweredBottomSheetFragment.TAG) } - - viewModel.showJetpackOverlay.observeEvent(viewLifecycleOwner) { - if (savedInstanceState == null) - JetpackFeatureFullScreenOverlayFragment - .newInstance(JetpackFeatureOverlayScreenType.NOTIFICATIONS) - .show(childFragmentManager, JetpackFeatureFullScreenOverlayFragment.TAG) - } } override fun onDestroyView() { @@ -179,7 +171,6 @@ class NotificationsListFragment : Fragment(R.layout.notifications_list_fragment) setSelectedTab(lastTabPosition) setNotificationPermissionWarning() } - viewModel.onResume() } private fun fetchRemoteNotes() { @@ -420,7 +411,7 @@ class NotificationsListFragment : Fragment(R.layout.notifications_list_fragment) jetpackBrandingUtils.initJetpackBannerAnimation(jetpackBannerView, scrollableView) binding?.jetpackBanner?.jetpackBannerText?.text = uiHelpers.getTextOfUiString( requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) + jetpackBrandingUtils.getBrandingText() ) if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListViewModel.kt index 966fdd683df5..e08115bfb40c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListViewModel.kt @@ -20,8 +20,6 @@ import org.wordpress.android.models.Notification.PostLike import org.wordpress.android.modules.BG_THREAD import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.push.GCMMessageHandler -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil -import org.wordpress.android.ui.jetpackoverlay.JetpackOverlayConnectedFeature.NOTIFICATIONS import org.wordpress.android.ui.notifications.NotificationEvents.NotificationsChanged import org.wordpress.android.ui.notifications.NotificationEvents.OnNoteCommentLikeChanged import org.wordpress.android.ui.notifications.utils.NotificationsActionsWrapper @@ -44,7 +42,6 @@ class NotificationsListViewModel @Inject constructor( @Named(BG_THREAD) bgDispatcher: CoroutineDispatcher, @Named(UI_THREAD) private val mainDispatcher: CoroutineDispatcher, private val appPrefsWrapper: AppPrefsWrapper, - private val jetpackFeatureRemovalOverlayUtil: JetpackFeatureRemovalOverlayUtil, private val gcmMessageHandler: GCMMessageHandler, private val networkUtilsWrapper: NetworkUtilsWrapper, private val toastUtilsWrapper: ToastUtilsWrapper, @@ -63,8 +60,6 @@ class NotificationsListViewModel @Inject constructor( private val _showJetpackPoweredBottomSheet = MutableLiveData>() val showJetpackPoweredBottomSheet: LiveData> = _showJetpackPoweredBottomSheet - private val _showJetpackOverlay = MutableLiveData>() - val showJetpackOverlay: LiveData> = _showJetpackOverlay private val _updatedNote = MutableLiveData() val updatedNote: LiveData = _updatedNote @@ -74,15 +69,6 @@ class NotificationsListViewModel @Inject constructor( val isNotificationsPermissionsWarningDismissed get() = appPrefsWrapper.notificationPermissionsWarningDismissed - fun onResume() { - if (jetpackFeatureRemovalOverlayUtil.shouldShowFeatureSpecificJetpackOverlay(NOTIFICATIONS)) - showJetpackOverlay() - } - - private fun showJetpackOverlay() { - _showJetpackOverlay.value = Event(true) - } - fun onNotificationsPermissionWarningDismissed() { appPrefsWrapper.notificationPermissionsWarningDismissed = true } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java index 84163bde0266..b891db949605 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -137,14 +137,14 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa } private void showJetpackBannerIfNeeded(final View rootView) { - if (mJetpackBrandingUtils.shouldShowJetpackBrandingForPhaseTwo()) { + if (mJetpackBrandingUtils.shouldShowJetpackBanner()) { final JetpackPoweredScreen screen = JetpackPoweredScreen.WithStaticText.PERSON; View jetpackBannerView = rootView.findViewById(R.id.jetpack_banner); TextView jetpackBannerTextView = jetpackBannerView.findViewById(R.id.jetpack_banner_text); jetpackBannerTextView.setText( mUiHelpers.getTextOfUiString( requireContext(), - mJetpackBrandingUtils.getBrandingTextForScreen(screen)) + mJetpackBrandingUtils.getBrandingText()) ); RecyclerView scrollableView = mRecyclerView; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index f5855a315849..9757b6c51c58 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -144,14 +144,14 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa setHasOptionsMenu(true); } - if (mJetpackBrandingUtils.shouldShowJetpackBrandingForPhaseTwo()) { + if (mJetpackBrandingUtils.shouldShowJetpackBanner()) { final JetpackPoweredScreen screen = JetpackPoweredScreen.WithStaticText.PERSON; View jetpackBadgeContainer = rootView.findViewById(R.id.jetpack_badge); TextView jetpackBadge = jetpackBadgeContainer.findViewById(R.id.jetpack_powered_badge); jetpackBadge.setText( mUiHelpers.getTextOfUiString( requireContext(), - mJetpackBrandingUtils.getBrandingTextForScreen(screen)) + mJetpackBrandingUtils.getBrandingText()) ); jetpackBadgeContainer.setVisibility(View.VISIBLE); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/prefs/AppSettingsFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/prefs/AppSettingsFragment.java index 2bc319f1c6c2..ae0f046af2c4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/prefs/AppSettingsFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/prefs/AppSettingsFragment.java @@ -265,7 +265,7 @@ private void addJetpackBadgeAsFooterIfEnabled(LayoutInflater inflater, ListView binding.footerJetpackBadge.jetpackPoweredBadge.setText( mUiHelpers.getTextOfUiString( getContext(), - mJetpackBrandingUtils.getBrandingTextForScreen(screen) + mJetpackBrandingUtils.getBrandingText() ) ); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/prefs/notifications/NotificationsSettingsFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/prefs/notifications/NotificationsSettingsFragment.java index 02c6aa885b11..046e173eb1bc 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/prefs/notifications/NotificationsSettingsFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/prefs/notifications/NotificationsSettingsFragment.java @@ -239,7 +239,7 @@ private void addJetpackBadgeAsFooterIfEnabled(ListView listView) { binding.footerJetpackBadge.jetpackPoweredBadge.setText( mUiHelpers.getTextOfUiString( context, - mJetpackBrandingUtils.getBrandingTextForScreen(screen) + mJetpackBrandingUtils.getBrandingText() ) ); if (mJetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListFragment.java index 07d9803f7d62..87bee1d39eca 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListFragment.java @@ -133,7 +133,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa jetpackBadge.setText( mUiHelpers.getTextOfUiString( requireContext(), - mJetpackBrandingUtils.getBrandingTextForScreen(screen) + mJetpackBrandingUtils.getBrandingText() ) ); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderFragment.kt index b86852b30956..cb6c4e801c88 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderFragment.kt @@ -25,7 +25,6 @@ import org.wordpress.android.models.ReaderTag import org.wordpress.android.ui.ScrollableViewInitializedListener import org.wordpress.android.ui.compose.theme.AppThemeM3 import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureFullScreenOverlayFragment -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureOverlayScreenType import org.wordpress.android.ui.main.WPMainActivity.OnScrollToTopListener import org.wordpress.android.ui.main.WPMainNavigationView.PageType.READER import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment @@ -284,8 +283,6 @@ class ReaderFragment : Fragment(R.layout.reader_fragment_layout), ScrollableView .show(childFragmentManager, JetpackPoweredBottomSheetFragment.TAG) } - observeJetpackOverlayEvent(savedInstanceState) - viewModel.start(savedInstanceState) } @@ -333,15 +330,6 @@ class ReaderFragment : Fragment(R.layout.reader_fragment_layout), ScrollableView } } - private fun observeJetpackOverlayEvent(savedInstanceState: Bundle?) { - if (savedInstanceState == null) - viewModel.showJetpackOverlay.observeEvent(viewLifecycleOwner) { - JetpackFeatureFullScreenOverlayFragment - .newInstance(JetpackFeatureOverlayScreenType.READER) - .show(childFragmentManager, JetpackFeatureFullScreenOverlayFragment.TAG) - } - } - fun requestBookmarkTab() { if (!::viewModel.isInitialized) { viewModel = ViewModelProvider(this@ReaderFragment, viewModelFactory)[ReaderViewModel::class.java] @@ -391,7 +379,7 @@ class ReaderFragment : Fragment(R.layout.reader_fragment_layout), ScrollableView jetpackBrandingUtils.initJetpackBannerAnimation(jetpackBannerView, scrollableView) binding?.jetpackBanner?.jetpackBannerText?.text = uiHelpers.getTextOfUiString( requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) + jetpackBrandingUtils.getBrandingText() ) if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostDetailFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostDetailFragment.kt index 783cfa72bbf8..b2c625908dc3 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostDetailFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostDetailFragment.kt @@ -819,7 +819,7 @@ class ReaderPostDetailFragment : ViewPagerFragment(), binding.jetpackBadge.root.isVisible = true binding.jetpackBadge.jetpackPoweredBadge.text = uiHelpers.getTextOfUiString( requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) + jetpackBrandingUtils.getBrandingText() ) if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { binding.jetpackBadge.jetpackPoweredBadge.setOnClickListener { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.kt index 534f9b35f295..c788f08408d8 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.kt @@ -1303,7 +1303,7 @@ class ReaderPostListFragment : ViewPagerFragment(), OnPostSelectedListener, OnFo jetpackBanner.findViewById(R.id.jetpack_banner_text) jetpackBannerTextView.text = uiHelpers.getTextOfUiString( requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) + jetpackBrandingUtils.getBrandingText() ) if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.kt index a9e301a328c4..1682f193b1e1 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.kt @@ -638,9 +638,7 @@ class ReaderPostPagerActivity : BaseAppCompatActivity() { deepLinkOpenWebLinksWithJetpackHelper.onOverlayShown() newInstance( - null, isDeepLinkOverlay = true, - isFeatureCollectionOverlay = false, featureCollectionOverlaySource = JetpackFeatureCollectionOverlaySource.UNSPECIFIED ) .show(supportFragmentManager, JetpackFeatureFullScreenOverlayFragment.TAG) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModel.kt index 826708ef8515..954b2eb5cc09 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModel.kt @@ -21,8 +21,6 @@ import org.wordpress.android.models.ReaderTagList import org.wordpress.android.modules.BG_THREAD import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.reader.views.compose.dropdown.JetpackMenuElementData -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil -import org.wordpress.android.ui.jetpackoverlay.JetpackOverlayConnectedFeature.READER import org.wordpress.android.ui.prefs.AppPrefs import org.wordpress.android.ui.prefs.AppPrefsWrapper import org.wordpress.android.ui.reader.ReaderEvents @@ -63,7 +61,6 @@ class ReaderViewModel @Inject constructor( private val readerTracker: ReaderTracker, private val accountStore: AccountStore, private val jetpackBrandingUtils: JetpackBrandingUtils, - private val jetpackFeatureRemovalOverlayUtil: JetpackFeatureRemovalOverlayUtil, private val readerTopBarMenuHelper: ReaderTopBarMenuHelper, private val urlUtilsWrapper: UrlUtilsWrapper, private val readerTagsFeedFeatureConfig: ReaderTagsFeedFeatureConfig, @@ -94,8 +91,6 @@ class ReaderViewModel @Inject constructor( private val _showJetpackPoweredBottomSheet = MutableLiveData>() val showJetpackPoweredBottomSheet: LiveData> = _showJetpackPoweredBottomSheet - private val _showJetpackOverlay = MutableLiveData>() - val showJetpackOverlay: LiveData> = _showJetpackOverlay private var readerTagsList = ReaderTagList() @@ -260,11 +255,6 @@ class ReaderViewModel @Inject constructor( appPrefsWrapper.getReaderTag()?.let { trackReaderTabShownIfNecessary(it) } - if (jetpackFeatureRemovalOverlayUtil.shouldShowFeatureSpecificJetpackOverlay(READER)) showJetpackOverlay() - } - - private fun showJetpackOverlay() { - _showJetpackOverlay.value = Event(true) } @Suppress("UNUSED_PARAMETER") diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsFragment.kt index 8a7868b890cc..edae11caab11 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsFragment.kt @@ -30,8 +30,6 @@ import org.wordpress.android.models.JetpackPoweredScreen import org.wordpress.android.ui.ScrollableViewInitializedListener import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureFullScreenOverlayFragment import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureOverlayScreenType -import org.wordpress.android.ui.jetpackoverlay.JetpackOverlayConnectedFeature import org.wordpress.android.ui.main.WPMainNavigationView.PageType.MY_SITE import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment import org.wordpress.android.ui.newstats.NewStatsActivity @@ -170,13 +168,9 @@ class StatsFragment : Fragment(R.layout.stats_fragment), ScrollableViewInitializ if (appPrefsWrapper.getStatsNewStatsSuggestionShown()) return // Don't nag users who deliberately switched back to old Stats. if (newStatsRouting.hasOptedOut()) return - // Avoid stacking on top of the Jetpack-powered bottom sheet or the feature-removal overlay, - // both of which may show on a fresh Stats activity launch. + // Avoid stacking on top of the Jetpack-powered bottom sheet, which may show on a fresh + // Stats activity launch. if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) return - if (jetpackFeatureRemovalOverlayUtil.shouldShowFeatureSpecificJetpackOverlay( - JetpackOverlayConnectedFeature.STATS - ) - ) return val lastDismissedAt = appPrefsWrapper.getStatsNewStatsSuggestionLastDismissedAt() val isSecondAttempt = lastDismissedAt > 0L if (isSecondAttempt && @@ -264,14 +258,6 @@ class StatsFragment : Fragment(R.layout.stats_fragment), ScrollableViewInitializ .show(childFragmentManager, JetpackPoweredBottomSheetFragment.TAG) } } - - viewModel.showJetpackOverlay.observeEvent(viewLifecycleOwner) { - if (isFirstStart) { - JetpackFeatureFullScreenOverlayFragment - .newInstance(JetpackFeatureOverlayScreenType.STATS) - .show(childFragmentManager, JetpackFeatureFullScreenOverlayFragment.TAG) - } - } } private fun StatsFragmentBinding.setupObservers(activity: FragmentActivity) { @@ -425,7 +411,7 @@ class StatsFragment : Fragment(R.layout.stats_fragment), ScrollableViewInitializ jetpackBrandingUtils.initJetpackBannerAnimation(jetpackBannerView, scrollableView) binding?.jetpackBanner?.jetpackBannerText?.text = uiHelpers.getTextOfUiString( requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) + jetpackBrandingUtils.getBrandingText() ) if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsViewModel.kt index 5f6d1c028192..4f2a8b3c53ca 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsViewModel.kt @@ -29,8 +29,6 @@ import org.wordpress.android.modules.BG_THREAD import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.push.NotificationType import org.wordpress.android.push.NotificationsProcessingService.ARG_NOTIFICATION_TYPE -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil -import org.wordpress.android.ui.jetpackoverlay.JetpackOverlayConnectedFeature.STATS import org.wordpress.android.ui.notifications.SystemNotificationsTracker import org.wordpress.android.ui.pages.SnackbarMessageHolder import org.wordpress.android.ui.stats.StatsTimeframe @@ -82,7 +80,6 @@ class StatsViewModel private val statsModuleActivateUseCase: StatsModuleActivateUseCase, private val notificationsTracker: SystemNotificationsTracker, private val jetpackBrandingUtils: JetpackBrandingUtils, - private val jetpackFeatureRemovalOverlayUtil: JetpackFeatureRemovalOverlayUtil, private val statsTrafficSubscribersTabsFeatureConfig: StatsTrafficSubscribersTabsFeatureConfig ) : ScopedViewModel(mainDispatcher) { private val _isRefreshing = MutableLiveData() @@ -113,8 +110,6 @@ class StatsViewModel private val _showJetpackPoweredBottomSheet = MutableLiveData>() val showJetpackPoweredBottomSheet: LiveData> = _showJetpackPoweredBottomSheet - private val _showJetpackOverlay = MutableLiveData>() - val showJetpackOverlay: LiveData> = _showJetpackOverlay fun start(intent: Intent, restart: Boolean = false) { val localSiteId = intent.getIntExtra(WordPress.LOCAL_SITE_ID, 0) @@ -249,9 +244,6 @@ class StatsViewModel } if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) showJetpackPoweredBottomSheet() - - if (jetpackFeatureRemovalOverlayUtil.shouldShowFeatureSpecificJetpackOverlay(STATS)) - showJetpackOverlay() } private fun updateSelectedSectionByTrafficSubscribersTabFeatureConfig() { @@ -269,10 +261,6 @@ class StatsViewModel } } - private fun showJetpackOverlay() { - _showJetpackOverlay.value = Event(true) - } - private fun showJetpackPoweredBottomSheet() { // _showJetpackPoweredBottomSheet.value = Event(true) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailFragment.kt index 6c53b40058e7..17eb5c5a05ac 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailFragment.kt @@ -71,7 +71,7 @@ class StatsDetailFragment : Fragment(R.layout.stats_detail_fragment) { jetpackBrandingUtils.initJetpackBannerAnimation(jetpackBannerView, scrollableView) jetpackBanner.jetpackBannerText.text = uiHelpers.getTextOfUiString( requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) + jetpackBrandingUtils.getBrandingText() ) if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { @@ -118,13 +118,5 @@ class StatsDetailFragment : Fragment(R.layout.stats_detail_fragment) { swipeToRefreshHelper.isRefreshing = isRefreshing } } - - viewModel.showJetpackOverlay.observeEvent(viewLifecycleOwner) { - if (isFirstStart) { - JetpackFeatureFullScreenOverlayFragment - .newInstance(JetpackFeatureRemovalOverlayUtil.JetpackFeatureOverlayScreenType.STATS) - .show(childFragmentManager, JetpackFeatureFullScreenOverlayFragment.TAG) - } - } } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailViewModel.kt index 553705b62d29..900809af53b0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailViewModel.kt @@ -6,8 +6,6 @@ import androidx.lifecycle.MutableLiveData import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.R import org.wordpress.android.modules.UI_THREAD -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil -import org.wordpress.android.ui.jetpackoverlay.JetpackOverlayConnectedFeature import org.wordpress.android.ui.pages.SnackbarMessageHolder import org.wordpress.android.ui.stats.refresh.BLOCK_DETAIL_USE_CASE import org.wordpress.android.ui.stats.refresh.lists.BaseListUseCase @@ -32,7 +30,6 @@ class StatsDetailViewModel private val statsPostProvider: StatsPostProvider, private val networkUtilsWrapper: NetworkUtilsWrapper, private val analyticsTrackerWrapper: AnalyticsTrackerWrapper, - private val jetpackFeatureRemovalOverlayUtil: JetpackFeatureRemovalOverlayUtil ) : ScopedViewModel(mainDispatcher) { private val _isRefreshing = MutableLiveData() val isRefreshing: LiveData = _isRefreshing @@ -44,8 +41,6 @@ class StatsDetailViewModel ) val showSnackbarMessage: LiveData = _showSnackbarMessage - private val _showJetpackOverlay = MutableLiveData>() - val showJetpackOverlay: LiveData> = _showJetpackOverlay fun init( postId: Long, @@ -59,15 +54,6 @@ class StatsDetailViewModel ) statsPostProvider.init(postId, postType, postTitle, postUrl) - - if (jetpackFeatureRemovalOverlayUtil.shouldShowFeatureSpecificJetpackOverlay( - JetpackOverlayConnectedFeature.STATS)) { - showJetpackOverlay() - } - } - - private fun showJetpackOverlay() { - _showJetpackOverlay.value = Event(true) } fun refresh() { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java index 4c633695c931..1e110eaf6ec7 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java @@ -202,7 +202,7 @@ public void onSwipeToRefresh() { @Override public void onScrollableViewInitialized(int containerId) { - if (mJetpackBrandingUtils.shouldShowJetpackBrandingForPhaseTwo()) { + if (mJetpackBrandingUtils.shouldShowJetpackBanner()) { final JetpackPoweredScreen screen = JetpackPoweredScreen.WithDynamicText.THEMES; findViewById(R.id.root_view).post(() -> { View jetpackBannerView = findViewById(R.id.jetpack_banner); @@ -210,7 +210,7 @@ public void onScrollableViewInitialized(int containerId) { jetpackBannerTextView.setText( mUiHelpers.getTextOfUiString( this, - mJetpackBrandingUtils.getBrandingTextForScreen(screen)) + mJetpackBrandingUtils.getBrandingText()) ); HeaderGridView scrollableView = findViewById(containerId); diff --git a/WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt b/WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt index 1063f9aa8e56..e0acc302c84b 100644 --- a/WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt +++ b/WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt @@ -29,26 +29,15 @@ class JetpackBrandingUtils @Inject constructor( && !jetpackFeatureRemovalBrandingUtil.isInRemovalPhase() } - fun shouldShowJetpackBrandingInDashboard(): Boolean { - return isWpComSite() && jetpackPoweredFeatureConfig.isEnabled() && !buildConfigWrapper.isJetpackApp - && jetpackFeatureRemovalBrandingUtil.shouldShowBrandingInDashboard() - } - - fun shouldShowJetpackBrandingForPhaseOne(): Boolean { - return shouldShowJetpackBranding() && jetpackFeatureRemovalBrandingUtil.shouldShowPhaseOneBranding() - } - - fun shouldShowJetpackBrandingForPhaseTwo(): Boolean { - return shouldShowJetpackBranding() && jetpackFeatureRemovalBrandingUtil.shouldShowPhaseTwoBranding() + fun shouldShowJetpackBanner(): Boolean { + return shouldShowJetpackBranding() && jetpackFeatureRemovalBrandingUtil.shouldShowBranding() } fun shouldShowJetpackPoweredBottomSheet(): Boolean { return isWpComSite() && jetpackPoweredBottomSheetFeatureConfig.isEnabled() && !buildConfigWrapper.isJetpackApp } - fun getBrandingTextForScreen(screen: JetpackPoweredScreen): UiString { - return jetpackFeatureRemovalBrandingUtil.getBrandingTextByPhase(screen) - } + fun getBrandingText(): UiString = jetpackFeatureRemovalBrandingUtil.getBrandingText() fun showJetpackBannerIfScrolledToTop(banner: View, scrollableView: RecyclerView) { banner.isVisible = true diff --git a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseOneConfig.kt b/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseOneConfig.kt deleted file mode 100644 index e846aaf6cb5a..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseOneConfig.kt +++ /dev/null @@ -1,19 +0,0 @@ -package org.wordpress.android.util.config - -import org.wordpress.android.BuildConfig -import org.wordpress.android.annotation.Feature -import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseOneConfig.Companion.JETPACK_FEATURE_REMOVAL_PHASE_ONE_REMOTE_FIELD -import javax.inject.Inject - -@Feature(JETPACK_FEATURE_REMOVAL_PHASE_ONE_REMOTE_FIELD, false) -class JetpackFeatureRemovalPhaseOneConfig @Inject constructor( - appConfig: AppConfig -) : FeatureConfig( - appConfig, - BuildConfig.JETPACK_FEATURE_REMOVAL_PHASE_ONE, - JETPACK_FEATURE_REMOVAL_PHASE_ONE_REMOTE_FIELD -) { - companion object { - const val JETPACK_FEATURE_REMOVAL_PHASE_ONE_REMOTE_FIELD = "jp_removal_one" - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseThreeConfig.kt b/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseThreeConfig.kt deleted file mode 100644 index 54ee145d8727..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseThreeConfig.kt +++ /dev/null @@ -1,19 +0,0 @@ -package org.wordpress.android.util.config - -import org.wordpress.android.BuildConfig -import org.wordpress.android.annotation.Feature -import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseThreeConfig.Companion.JETPACK_FEATURE_REMOVAL_PHASE_THREE_REMOTE_FIELD -import javax.inject.Inject - -@Feature(JETPACK_FEATURE_REMOVAL_PHASE_THREE_REMOTE_FIELD, false) -class JetpackFeatureRemovalPhaseThreeConfig @Inject constructor( - appConfig: AppConfig -) : FeatureConfig( - appConfig, - BuildConfig.JETPACK_FEATURE_REMOVAL_PHASE_THREE, - JETPACK_FEATURE_REMOVAL_PHASE_THREE_REMOTE_FIELD -) { - companion object { - const val JETPACK_FEATURE_REMOVAL_PHASE_THREE_REMOTE_FIELD = "jp_removal_three" - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseTwoConfig.kt b/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseTwoConfig.kt deleted file mode 100644 index 715a46735c9b..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseTwoConfig.kt +++ /dev/null @@ -1,19 +0,0 @@ -package org.wordpress.android.util.config - -import org.wordpress.android.BuildConfig -import org.wordpress.android.annotation.Feature -import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseTwoConfig.Companion.JETPACK_FEATURE_REMOVAL_PHASE_TWO_REMOTE_FIELD -import javax.inject.Inject - -@Feature(JETPACK_FEATURE_REMOVAL_PHASE_TWO_REMOTE_FIELD, false) -class JetpackFeatureRemovalPhaseTwoConfig @Inject constructor( - appConfig: AppConfig -) : FeatureConfig( - appConfig, - BuildConfig.JETPACK_FEATURE_REMOVAL_PHASE_TWO, - JETPACK_FEATURE_REMOVAL_PHASE_TWO_REMOTE_FIELD -) { - companion object { - const val JETPACK_FEATURE_REMOVAL_PHASE_TWO_REMOTE_FIELD = "jp_removal_two" - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalRemoteFields.kt b/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalRemoteFields.kt index b5b127509852..db20bf816013 100644 --- a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalRemoteFields.kt +++ b/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalRemoteFields.kt @@ -3,26 +3,6 @@ package org.wordpress.android.util.config import org.wordpress.android.annotation.RemoteFieldDefaultGenerater import javax.inject.Inject -const val JP_DEADLINE_REMOTE_FIELD = "jp_deadline" -const val JP_DEADLINE_DEFAULT = "" - -@RemoteFieldDefaultGenerater(remoteField = JP_DEADLINE_REMOTE_FIELD, defaultValue = JP_DEADLINE_DEFAULT) -class JPDeadlineConfig @Inject constructor(appConfig: AppConfig) : - RemoteConfigField( - appConfig, - JP_DEADLINE_REMOTE_FIELD - ) - -const val PHASE_TWO_BLOG_POST_REMOTE_FIELD = "phase_two_blog_post" -const val PHASE_TWO_BLOG_POST_DEFAULT = "" - -@RemoteFieldDefaultGenerater(remoteField = PHASE_TWO_BLOG_POST_REMOTE_FIELD, PHASE_TWO_BLOG_POST_DEFAULT) -class PhaseTwoBlogPostLinkConfig @Inject constructor(appConfig: AppConfig) : - RemoteConfigField( - appConfig, - PHASE_TWO_BLOG_POST_REMOTE_FIELD - ) - const val PHASE_THREE_BLOG_POST_LINK_REMOTE_FIELD = "phase_three_blog_post" const val PHASE_THREE_BLOG_POST_LINK_DEFAULT_VALUE = "" @@ -49,32 +29,6 @@ class PhaseFourBlogPostLinkConfig @Inject constructor(appConfig: AppConfig) : PHASE_FOUR_BLOG_POST_LINK_REMOTE_FIELD ) -const val PHASE_NEW_USERS_BLOG_POST_LINK = "phase_new_users_blog_post" -const val PHASE_NEW_USERS_BLOG_POST_LINK_DEFAULT_VALUE = "" - -@RemoteFieldDefaultGenerater( - remoteField = PHASE_NEW_USERS_BLOG_POST_LINK, - defaultValue = PHASE_NEW_USERS_BLOG_POST_LINK_DEFAULT_VALUE -) -class PhaseNewUsersBlogPostLinkConfig @Inject constructor(appConfig: AppConfig) : - RemoteConfigField( - appConfig, - PHASE_NEW_USERS_BLOG_POST_LINK - ) - -const val PHASE_SELF_HOSTED_BLOG_POST_LINK_REMOTE_FIELD = "phase_self_hosted_blog_post" -const val PHASE_SELF_HOSTED_BLOG_POST_LINK_DEFAULT_VALUE = "" - -@RemoteFieldDefaultGenerater( - remoteField = PHASE_SELF_HOSTED_BLOG_POST_LINK_REMOTE_FIELD, - defaultValue = PHASE_SELF_HOSTED_BLOG_POST_LINK_DEFAULT_VALUE -) -class PhaseSelfHostedPostLinkConfig @Inject constructor(appConfig: AppConfig) : - RemoteConfigField( - appConfig, - PHASE_SELF_HOSTED_BLOG_POST_LINK_REMOTE_FIELD - ) - const val PHASE_FOUR_OVERLAY_FREQUENCY_IN_DAYS_REMOTE_FIELD = "phase_four_overlay_frequency_in_days" const val PHASE_FOUR_OVERLAY_FREQUENCY_IN_DAYS_DEFAULT_VALUE = "-1" diff --git a/WordPress/src/main/res/layout/jetpack_feature_card.xml b/WordPress/src/main/res/layout/jetpack_feature_card.xml index eb0660d59ecc..12d74b801c9b 100644 --- a/WordPress/src/main/res/layout/jetpack_feature_card.xml +++ b/WordPress/src/main/res/layout/jetpack_feature_card.xml @@ -45,13 +45,13 @@ android:ellipsize="end" android:lineSpacingMultiplier="1.2" android:maxLines="5" - android:text="@string/jetpack_feature_card_content_phase_three" + android:text="@string/jetpack_feature_card_content_phase_self_hosted_and_new_users" android:textAlignment="viewStart" android:textAppearance="?attr/textAppearanceSubtitle1" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/my_site_jetpack_feature_card_logo" - tools:text="@string/jetpack_feature_card_content_phase_three" /> + tools:text="@string/jetpack_feature_card_content_phase_self_hosted_and_new_users" /> التبديل إلى Jetpack تمت إزالة ميزات الإحصاءات والقارئ والتنبيهات وغيرها من الميزات التي يدعمها Jetpack من تطبيق ووردبريس. لقد انتقلت ميزات Jetpack. - ستنتقل ⁦%1$s⁩ في غضون ⁦%2$s⁩ - ستنتقل ⁦%1$s⁩ قريبًا سينتقل ⁦%1$s⁩ قريبًا - سينتقل ⁦%1$s⁩ في غضون ⁦%2$s⁩ - تنزيل تطبيق Jetpack عرض كل الردود ⁦%1$s⁩ أقل من الأيام الـ 7 السابقة ⁦%1$s⁩ أعلى من الأيام الـ 7 السابقة @@ -1071,26 +1067,17 @@ Language: ar إن مشاهداتك في آخر 7 أيام أعلى بنسبة ⁦%1$s⁩ من الأيام الـ 7 السابقة. الأيام الـ 7 السابقة آخر 7 أيام - %d من الأسابيع - أسبوع واحد من <b>Day One</b> ذكرني لاحقًا التبديل إلى تطبيق Jetpack معرفة المزيد على jetpack.com التبديل مجاني، ولا يستغرق سوى بضع دقائق. - ستتم إزالة ميزات الإحصاءات والقارئ والتنبيهات وغيرها من الميزات التي يدعمها Jetpack من تطبيق ووردبريس قريبًا. ستنتقل ميزات الإحصاءات والقارئ والتنبيهات وغيرها من الميزات قريبًا إلى تطبيق Jetpack للهاتف المحمول. - ستتم إزالة ميزات الإحصاءات والقارئ والتنبيهات وغيرها من الميزات التي يدعمها Jetpack من تطبيق ووردبريس في %s. - ستنتقل ميزات Jetpack قريبًا. - ستنتقل ميزة التنبيهات إلى Jetpack - ستنتقل ميزة القارئ إلى تطبيق Jetpack - التبديل إلى تطبيق Jetpack الجديد حدث خطأ في أثناء تحميل المطالبات. عذرًا لا توجد مطالبات بعد %d من الإجابات إجابة واحدة - ستنتقل ميزة الإحصاءات لديك إلى تطبيق Jetpack 0 من الإجابات ✓ تم الرد المطالبات @@ -1111,12 +1098,6 @@ Language: ar الاستمرار من دون Jetpack روابط الويب روابط عناوين uri - قم بالتبديل إلى تطبيق Jetpack للاستمرار في تلقي من التنبيهات في الوقت الفعلي على جهازك. - قم بالتبديل إلى تطبيق Jetpack للعثور على كل المواقع والتدوينات التي تفضّلها ومتابعتها والإعجاب بها باستخدام القارئ. - قم بالتبديل إلى تطبيق Jetpack لمراقبة نمو حركة المرور في موقعك من خلال الإحصاءات والرؤى. - تلقي تنبيهاتك من خلال تطبيق Jetpack - متابعة أي موقع باستخدام تطبيق Jetpack - الحصول على إحصاءاتك باستخدام تطبيق Jetpack جديد يتعذر تعطيل فتح الروابط في Jetpack يتعذر تمكين فتح الروابط في Jetpack فتح الروابط في Jetpack diff --git a/WordPress/src/main/res/values-cs/strings.xml b/WordPress/src/main/res/values-cs/strings.xml index c6e8626015a6..70a3d87d4191 100644 --- a/WordPress/src/main/res/values-cs/strings.xml +++ b/WordPress/src/main/res/values-cs/strings.xml @@ -1081,11 +1081,7 @@ Language: cs_CZ Přejděte na Jetpack Statistiky, čtečka, upozornění a další funkce poháněné Jetpack byly z aplikace WordPress odstraněny. Funkce Jetpacku se přesunuly - %1$s se přesunou za %2$s - %1$s se přesune za %2$s - %1$s se brzy přesunou %1$s se brzy přesune - Získejte aplikaci Jetpack Zobrazit všechny odpovědi %1$s méně než za předchozích 7 dní %1$s vyšší než za předchozích 7 dní @@ -1095,21 +1091,12 @@ Language: cs_CZ Počet zhlédnutí za posledních 7 dní je o %1$s vyšší než za předchozích 7 dní. Předchozích 7 dní Posledních 7 dní - %d týdnů - 1 týden Od <b>Day One</b> Připomenout později Přepněte do aplikace Jetpack Více se dozvíte na jetpack.com Přepínání je zdarma a trvá jen minutu. - Statistiky, čtečka, upozornění a další funkce poháněné Jetpack budou z aplikace WordPress brzy odstraněny. - Statistiky, čtečka, upozornění a další funkce poháněné Jetpack budou z aplikace WordPress odstraněny na %s. Statistiky, čtečka, upozornění a další funkce se brzy přesunou do mobilní aplikace Jetpack. - Funkce Jetpacku se brzy přesunou. - Oznámení se přesouvají do Jetpacku - Čtečka se přesouvá do aplikace Jetpack - Vaše statistiky se přesouvají do aplikace Jetpack - Přepněte na novou aplikaci Jetpack Došlo k chybě při načítání to se mi líbí Jejda Zatím žádné výzvy @@ -1135,12 +1122,6 @@ Language: cs_CZ Pokračujte bez Jetpacku weblinks urilinks - Přepněte na aplikaci Jetpack, abyste do svého zařízení nadále dostávali upozornění v reálném čase. - Přepněte do aplikace Jetpack a najděte, sledujte a lajkujte všechny své oblíbené stránky a příspěvky pomocí aplikace Reader. - Přepněte do aplikace Jetpack a sledujte, jak návštěvnost vašeho webu roste pomocí statistik a statistik. - Získejte oznámení pomocí aplikace Jetpack - Sledujte libovolnou stránku pomocí aplikace Jetpack - Získejte své statistiky pomocí nové aplikace Jetpack Nelze zakázat otevřené odkazy v Jetpacku Nelze povolit otevřené odkazy v Jetpacku Otevřít odkazy v Jetpacku diff --git a/WordPress/src/main/res/values-de/strings.xml b/WordPress/src/main/res/values-de/strings.xml index 931bf7608258..13c4decaaecb 100644 --- a/WordPress/src/main/res/values-de/strings.xml +++ b/WordPress/src/main/res/values-de/strings.xml @@ -1081,11 +1081,7 @@ Language: de Zu Jetpack wechseln Statistiken, der Reader, Benachrichtigungen und weitere von Jetpack unterstützte Funktionen wurden aus der WordPress-App entfernt. Jetpack-Funktionen wurden verschoben. - %1$s werden in %2$s verschoben - %1$s wird in %2$s verschoben - %1$s werden demnächst verschoben %1$s wird demnächst verschoben - Jetpack-App sichern Alle Antworten anzeigen %1$s niedriger als in den vorherigen 7 Tagen %1$s höher als in den vorherigen 7 Tagen @@ -1095,21 +1091,12 @@ Language: de Deine Aufrufe in den letzten 7 Tagen sind %1$s höher als in den vorherigen 7 Tagen. Vorherige 7 Tage Letzte 7 Tage - %d Wochen - 1 Woche Von <b>Day One</b> Später daran erinnern Die Statistiken, der Reader, die Benachrichtigungen und weitere Funktionen werden bald in die Jetpack-Mobil-App verschoben. Zur Jetpack-App wechseln Mehr erfahren auf jetpack.com Der Wechsel ist kostenlos und dauert nur eine Minute. - Statistiken, der Reader, Benachrichtigungen und weitere, von Jetpack unterstützte Funktionen werden bald aus der WordPress-App entfernt. - Statistiken, der Reader, Benachrichtigungen und weitere, von Jetpack unterstützte Funktionen werden am %s aus der WordPress-App entfernt. - Jetpack-Funktionen werden in Kürze verschoben. - Benachrichtigungen werden in die Jetpack-App verschoben - Der Reader wird in die Jetpack-App verschoben - Deine Statistiken werden in die Jetpack-App verschoben - Zur neuen Jetpack-App wechseln Beim Laden der Schreibanregungen ist ein Fehler aufgetreten. Ups Noch keine Schreibanregungen @@ -1135,12 +1122,6 @@ Language: de Ohne Jetpack fortfahren weblinks urilinks - Wechsle zur Jetpack-App, um weiterhin Benachrichtigungen in Echtzeit auf deinem Gerät zu erhalten. - Wechsle zur Jetpack-App, um mit dem Reader all deine Lieblings-Websites und -Beiträge zu finden, ihnen zu folgen und Likes dafür zu vergeben. - Wechsle zur Jetpack-App, um dir Statistiken und Einblicke zum Wachstum deines Website-Traffics anzusehen. - Benachrichtigungen in der Jetpack-App erhalten - Mit der Jetpack-App beliebigen Websites folgen - Statistiken in der neuen Jetpack-App ansehen Die Option „Links in Jetpack öffnen“ konnte nicht deaktiviert werden Die Option „Links in Jetpack öffnen“ konnte nicht aktiviert werden Links in Jetpack öffnen diff --git a/WordPress/src/main/res/values-en-rCA/strings.xml b/WordPress/src/main/res/values-en-rCA/strings.xml index 878289d521d4..cab4db0fb8db 100644 --- a/WordPress/src/main/res/values-en-rCA/strings.xml +++ b/WordPress/src/main/res/values-en-rCA/strings.xml @@ -704,9 +704,6 @@ Language: en_CA Jetpack features have moved. Do this later Switch to Jetpack - %1$s are moving in %2$s - %1$s are moving soon - %1$s is moving in %2$s %1$s is moving soon View all responses %1$s lower than the previous 7-days @@ -717,15 +714,10 @@ Language: en_CA Your visitors in the last 7-days are %1$s higher than the previous 7-days. Last 7-days Previous 7-days - 1 week - %d weeks - Get the Jetpack app From <b>Day One</b> Remind me later Learn more at jetpack.com Switching is free and only takes a minute. - Stats, Reader, Notifications and other Jetpack powered features will be removed from the WordPress app on %s. - Stats, Reader, Notifications and other Jetpack powered features will be removed from the WordPress app soon. Switch to the Jetpack app Stats, Reader, Notifications and other features will soon move to the Jetpack mobile app. There was an error loading prompts. @@ -734,11 +726,6 @@ Language: en_CA 1 answer %d answers 0 answers - Jetpack features are moving soon. - Notifications are moving to Jetpack - Reader is moving to the Jetpack app - Your stats are moving to the Jetpack app - Switch to the new Jetpack app ✓ Answered Prompts close @@ -758,15 +745,9 @@ Language: en_CA Open links in WordPress It looks like you have the Jetpack app installed.\n\nWould you like to open links in the Jetpack app in the future?\n\nYou can always change this in App Settings > Open links in Jetpack Open links in Jetpack? - Switch to the Jetpack app to keep receiving realtime notifications on your device. - Switch to the Jetpack app to find, follow, and like all your favorite sites and posts with Reader. - Switch to the Jetpack app to watch your site’s traffic grow with stats and insights. Open links in Jetpack Unable to disable open links in Jetpack Unable to enable open links in Jetpack - Get your notifications with the Jetpack app - Follow any site with the Jetpack app - Get your stats using the new Jetpack app Please contact support or try again later. We’re sorry but something didn’t go as planned. Your data is safe, but we’re unable to transfer it at this time. We are unable to transfer your data and settings without a network connection. diff --git a/WordPress/src/main/res/values-en-rGB/strings.xml b/WordPress/src/main/res/values-en-rGB/strings.xml index 666e20f6d7ff..e221d39a2284 100644 --- a/WordPress/src/main/res/values-en-rGB/strings.xml +++ b/WordPress/src/main/res/values-en-rGB/strings.xml @@ -1081,11 +1081,7 @@ Language: en_GB Switch to Jetpack Stats, Reader, Notifications and other Jetpack powered features have been removed from the WordPress app. Jetpack features have moved. - %1$s are moving in %2$s - %1$s is moving in %2$s - %1$s are moving soon %1$s is moving soon - Get the Jetpack app View all responses %1$s lower than the previous 7 days %1$s higher than the previous 7 days @@ -1095,21 +1091,12 @@ Language: en_GB Your views in the last 7 days are %1$s higher than the previous 7 days. Previous 7 days Last 7 days - %d weeks - 1 week From <b>Day One</b> Remind me later Stats, Reader, Notifications and other features will soon move to the Jetpack mobile app. Switch to the Jetpack app Learn more at jetpack.com Switching is free and only takes a minute. - Stats, Reader, Notifications and other Jetpack-powered features will be removed from the WordPress app soon. - Stats, Reader, Notifications and other Jetpack-powered features will be removed from the WordPress app on %s. - Jetpack features are moving soon. - Notifications are moving to Jetpack - Reader is moving to the Jetpack app - Your stats are moving to the Jetpack app - Switch to the new Jetpack app There was an error loading prompts. Oops No prompts yet @@ -1135,12 +1122,6 @@ Language: en_GB Continue without Jetpack weblinks urilinks - Switch to the Jetpack app to keep receiving realtime notifications on your device. - Switch to the Jetpack app to find, follow, and like all your favourite sites and posts with Reader. - Switch to the Jetpack app to watch your site’s traffic grow with stats and insights. - Get your notifications with the Jetpack app - Follow any site with the Jetpack app - Get your stats using the new Jetpack app Unable to disable open links in Jetpack Unable to enable open links in Jetpack Open links in Jetpack diff --git a/WordPress/src/main/res/values-es-rCL/strings.xml b/WordPress/src/main/res/values-es-rCL/strings.xml index a2b2341bf741..cda7b4da3f31 100644 --- a/WordPress/src/main/res/values-es-rCL/strings.xml +++ b/WordPress/src/main/res/values-es-rCL/strings.xml @@ -599,9 +599,6 @@ Language: es_CL Las características de Jetpack se han trasladado. Hacerlo más tarde Cambiar a Jetpack - %1$s se trasladarán a %2$s - %1$s se trasladarán pronto - %1$s se trasladará a %2$s %1$s se trasladará pronto Ver todas las respuestas %1$s es menor que la semana anterior @@ -612,16 +609,11 @@ Language: es_CL Tus visitantes en los últimos siete días son %1$s más que en los siete días anteriores. Últimos siete días Siete días anteriores - 1 semana - %d semanas - Obtén la aplicación de Jetpack Desde <b>Day One</b> Algunas funciones, como estadísticas, lector o avisos, se trasladarán pronto a la aplicación móvil de Jetpack. Recuérdamelo más tarde Más información en jetpack.com El cambio es gratuito y solo lleva un minuto. - Se van a retirar de la aplicación de WordPress las estadísticas, lectura, avisos y otras funcionalidades de Jetpack el %s. - Pronto se van a retirar de la aplicación de WordPress las estadísticas, lectura, avisos y otras funcionalidades de Jetpack. Cambiar a la aplicación de Jetpack Se ha producido un error al cargar las indicaciones. ¡Oh! @@ -629,11 +621,6 @@ Language: es_CL 1 respuesta %d respuestas 0 respuestas - Las funciones de Jetpack se trasladarán pronto. - Los avisos se están trasladando a la aplicación de Jetpack - El lector se está trasladando a la aplicación de Jetpack - La estadísticas se están trasladado a la aplicación de Jetpack - Cambiar a la nueva aplicación de Jetpack ✓ Respondido Peticiones cerrar @@ -653,15 +640,9 @@ Language: es_CL Abrir enlaces en WordPress Parece que tienes instalada la aplicación de Jetpack.\n\n¿Quieres abrir enlaces en la aplicación de Jetpack en el futuro?\n\nPuedes cambiar esta opción en cualquier momento desde Ajustes de la aplicación > Abrir enlaces en Jetpack. ¿Quieres abrir enlaces en Jetpack? - Cambia a la aplicación de Jetpack para seguir recibiendo notificaciones en tiempo real en tu dispositivo. - Cambia a la aplicación de Jetpack para buscar tus entradas y sitios favoritos, seguirlos e indicar que te gustan con el Lector. - Cambia a la aplicación de Jetpack para ver cómo crece el tráfico de tu sitio con estadísticas y detalles. Abrir enlaces en Jetpack No se puede desactivar Abrir enlaces en Jetpack No se puede activar Abrir enlaces en Jetpack - Recibe tus notificaciones con la aplicación de Jetpack - Sigue cualquier sitio con la aplicación de Jetpack - Obtén tus estadísticas con la nueva aplicación de Jetpack Contacta con el equipo de soporte o inténtalo de nuevo más tarde. Algo no ha ido como estaba previsto. Tus datos están protegidos, pero no podemos transferirlos en este momento. No podemos transferir tus datos y ajustes sin una conexión de red. diff --git a/WordPress/src/main/res/values-es-rCO/strings.xml b/WordPress/src/main/res/values-es-rCO/strings.xml index 674501302964..c9d83b753b88 100644 --- a/WordPress/src/main/res/values-es-rCO/strings.xml +++ b/WordPress/src/main/res/values-es-rCO/strings.xml @@ -1081,11 +1081,7 @@ Language: es_CO Cambiar a Jetpack Algunas características de Jetpack como Estadísticas, Lector o Notificaciones, entre otras, han sido eliminadas de la app de WordPress. Las características de Jetpack se han trasladado. - %1$s se trasladarán a %2$s - %1$s se trasladará a %2$s - %1$s se trasladarán pronto %1$s se trasladará pronto - Obtén la aplicación de Jetpack Ver todas las respuestas %1$s es menor que la semana anterior %1$s es mayor que la semana anterior @@ -1095,21 +1091,12 @@ Language: es_CO Tus visitas en los últimos siete días son %1$s más que en los siete días anteriores. Siete días anteriores Últimos siete días - %d semanas - 1 semana Desde <b>Day One</b> Recuérdamelo más tarde Algunas funciones, como estadísticas, lector o avisos, se trasladarán pronto a la aplicación móvil de Jetpack. Cambiar a la aplicación de Jetpack Más información en jetpack.com El cambio es gratuito y solo lleva un minuto. - Pronto se van a retirar de la aplicación de WordPress las estadísticas, lectura, avisos y otras funcionalidades de Jetpack. - Se van a retirar de la aplicación de WordPress las estadísticas, lectura, avisos y otras funcionalidades de Jetpack el %s. - Las funciones de Jetpack se trasladarán pronto. - Los avisos se están trasladando a la aplicación de Jetpack - El lector se está trasladando a la aplicación de Jetpack - La estadísticas se están trasladado a la aplicación de Jetpack - Cambiar a la nueva aplicación de Jetpack Se ha producido un error al cargar las indicaciones. ¡Vaya! Todavía no hay sugerencias @@ -1135,12 +1122,6 @@ Language: es_CO Continuar sin Jetpack enlaces web enlaces URI - Cambia a la aplicación de Jetpack para continuar recibiendo las notificaciones actualizadas en su dispositivo. - Cambia a la aplicación de Jetpack para encontrar, seguir y poner like en todos sus sitios favoritos y posts con el Lector. - Cambiar a la aplicación de Jetpack para ver el tráfico de su sitio crece con estadísticas y detalles. - Recibir sus notificaciones en la aplicación de Jetpack. - Seguir cualquier sitio con la aplicación de Jetpack. - Recibir sus estadísticas de la aplicación nuevo Jetpack. No se puede deshabilitar las ligas abiertas en Jetpack. No se puede activar las ligas abiertas en Jetpack. Abrir las ligas en Jetpack. diff --git a/WordPress/src/main/res/values-es-rMX/strings.xml b/WordPress/src/main/res/values-es-rMX/strings.xml index a51644375be5..1a05a8b04f24 100644 --- a/WordPress/src/main/res/values-es-rMX/strings.xml +++ b/WordPress/src/main/res/values-es-rMX/strings.xml @@ -20,12 +20,6 @@ Language: es_MX Continúe sin Jetpack Enlances Enlances URI - Cambia a la aplicación de Jetpack para continuar recibiendo las notificaciones actualizadas en su dispositivo. - Cambia a la aplicación de Jetpack para encontrar, seguir y poner like en todos sus sitios favoritos y posts con el Lector. - Cambiar a la aplicación de Jetpack para ver el tráfico de su sitio crece con estadísticas y detalles. - Recibir sus notificaciones en la aplicación de Jetpack. - Seguir cualquier sitio con la aplicación de Jetpack. - Recibir sus estadísticas de la aplicación nuevo Jetpack. No se puede deshabilitar las ligas abiertas en Jetpack. No se puede activar las ligas abiertas en Jetpack. Abrir las ligas en Jetpack. diff --git a/WordPress/src/main/res/values-es/strings.xml b/WordPress/src/main/res/values-es/strings.xml index dba9daf36012..cf482cfaabbc 100644 --- a/WordPress/src/main/res/values-es/strings.xml +++ b/WordPress/src/main/res/values-es/strings.xml @@ -1081,11 +1081,7 @@ Language: es Cambiar a Jetpack Algunas características de Jetpack como Estadísticas, Lector o Notificaciones, entre otras, han sido eliminadas de la app de WordPress. Las características de Jetpack se han trasladado. - %1$s se trasladarán a %2$s - %1$s se trasladará a %2$s - %1$s se trasladarán pronto %1$s se trasladará pronto - Obtén la aplicación de Jetpack Ver todas las respuestas %1$s es menor que la semana anterior %1$s es mayor que la semana anterior @@ -1095,21 +1091,12 @@ Language: es Tus visitas en los últimos siete días son %1$s más que en los siete días anteriores. Siete días anteriores Últimos siete días - %d semanas - 1 semana Desde <b>Day One</b> Recuérdamelo más tarde Algunas funciones, como estadísticas, lector o avisos, se trasladarán pronto a la aplicación móvil de Jetpack. Cambiar a la aplicación de Jetpack Más información en jetpack.com El cambio es gratuito y solo lleva un minuto. - Pronto se van a retirar de la aplicación de WordPress las estadísticas, lectura, avisos y otras funcionalidades de Jetpack. - Se van a retirar de la aplicación de WordPress las estadísticas, lectura, avisos y otras funcionalidades de Jetpack el %s. - Las funciones de Jetpack se trasladarán pronto. - Los avisos se están trasladando a la aplicación de Jetpack - El lector se está trasladando a la aplicación de Jetpack - La estadísticas se están trasladado a la aplicación de Jetpack - Cambiar a la nueva aplicación de Jetpack Se ha producido un error al cargar las indicaciones. ¡Vaya! Todavía no hay sugerencias @@ -1135,12 +1122,6 @@ Language: es Continuar sin Jetpack enlaces web enlaces URI - Cambia a la aplicación de Jetpack para seguir recibiendo notificaciones en tiempo real en tu dispositivo. - Cambia a la aplicación de Jetpack para buscar tus entradas y sitios favoritos, seguirlos e indicar que te gustan con el Lector. - Cambia a la aplicación de Jetpack para ver cómo crece el tráfico de tu sitio con estadísticas y detalles. - Recibe tus notificaciones con la aplicación de Jetpack - Sigue cualquier sitio con la aplicación de Jetpack - Obtén tus estadísticas con la nueva aplicación de Jetpack No se puede desactivar Abrir enlaces en Jetpack No se puede activar Abrir enlaces en Jetpack Abrir enlaces en Jetpack diff --git a/WordPress/src/main/res/values-fr-rCA/strings.xml b/WordPress/src/main/res/values-fr-rCA/strings.xml index 7020d33b81e0..f6bd943ca0f1 100644 --- a/WordPress/src/main/res/values-fr-rCA/strings.xml +++ b/WordPress/src/main/res/values-fr-rCA/strings.xml @@ -1055,11 +1055,7 @@ Language: fr Passer à Jetpack Les statistiques, le lecteur, les notifications et d’autres fonctionnalités reposant sur Jetpack ont été supprimées de l’application WordPress. Les fonctionnalités Jetpack ont été déplacées. - %1$s vont être déplacés dans %2$s - %1$s is moving in %2$s - %1$s vont bientôt être déplacées %1$s va bientôt être déplacée - Obtenir l’application Jetpack Consulter les réponses du formulaire inférieur de %1$s par rapport à la semaine précédente %1$s en hausse par rapport aux 7 jours précédents @@ -1069,21 +1065,12 @@ Language: fr Au cours des 7 derniers jours, vous avez enregistré %1$s de vues en plus par rapport aux 7 jours précédents. 7 jours précédents 7 derniers jours - %d semaines - 1 semaine De <b>Day One</b> Me rappeler ultérieurement Les statistiques, le lecteur, les notifications et d’autres fonctionnalités seront bientôt transférées vers l’application mobile Jetpack. Passer à l’application Jetpack Lire la suite sur jetpack.com Passer d’une application à l’autre est gratuit et ne prend qu’une minute. - Les statistiques, le lecteur, les notifications et d’autres fonctionnalités reposant sur Jetpack seront bientôt supprimées de l’application WordPress. - Les statistiques, le lecteur, les notifications et d’autres fonctionnalités reposant sur Jetpack seront supprimés de l’application WordPress le %s. - Les fonctionnalités Jetpack vont bientôt être déplacées. - Les notifications vont être déplacées dans Jetpack - Le lecteur va être déplacé dans l’application Jetpack - Les statistiques vont être déplacées dans l’application Jetpack - Passer à la nouvelle application Jetpack Un problème est survenu lors du chargement des incitations. Oups Pas encore d’incitation @@ -1109,12 +1096,6 @@ Language: fr Continuer sans Jetpack liens Web liens URI - Passez à l\'application Jetpack pour continuer de recevoir des notifications en temps réel sur votre appareil. - Passez à l\'application Jetpack pour trouver, suivre et aimer tous vos sites et articles favoris avec le Lecteur. - Passez à l\'application Jetpack pour avoir le contrôle du trafic de votre site grâce aux statistiques et aux tendances. - Obtenir des notifications avec l\'application JetPack - Suivre un site à l\'aide de l\'application Jetpack - Obtenir des statistiques grâce à la nouvelle application Jetpack Impossible de désactiver l’ouverture des liens dans Jetpack Impossible d’activer l’ouverture des liens dans Jetpack Ouvrir les liens dans Jetpack diff --git a/WordPress/src/main/res/values-fr/strings.xml b/WordPress/src/main/res/values-fr/strings.xml index 7020d33b81e0..f6bd943ca0f1 100644 --- a/WordPress/src/main/res/values-fr/strings.xml +++ b/WordPress/src/main/res/values-fr/strings.xml @@ -1055,11 +1055,7 @@ Language: fr Passer à Jetpack Les statistiques, le lecteur, les notifications et d’autres fonctionnalités reposant sur Jetpack ont été supprimées de l’application WordPress. Les fonctionnalités Jetpack ont été déplacées. - %1$s vont être déplacés dans %2$s - %1$s is moving in %2$s - %1$s vont bientôt être déplacées %1$s va bientôt être déplacée - Obtenir l’application Jetpack Consulter les réponses du formulaire inférieur de %1$s par rapport à la semaine précédente %1$s en hausse par rapport aux 7 jours précédents @@ -1069,21 +1065,12 @@ Language: fr Au cours des 7 derniers jours, vous avez enregistré %1$s de vues en plus par rapport aux 7 jours précédents. 7 jours précédents 7 derniers jours - %d semaines - 1 semaine De <b>Day One</b> Me rappeler ultérieurement Les statistiques, le lecteur, les notifications et d’autres fonctionnalités seront bientôt transférées vers l’application mobile Jetpack. Passer à l’application Jetpack Lire la suite sur jetpack.com Passer d’une application à l’autre est gratuit et ne prend qu’une minute. - Les statistiques, le lecteur, les notifications et d’autres fonctionnalités reposant sur Jetpack seront bientôt supprimées de l’application WordPress. - Les statistiques, le lecteur, les notifications et d’autres fonctionnalités reposant sur Jetpack seront supprimés de l’application WordPress le %s. - Les fonctionnalités Jetpack vont bientôt être déplacées. - Les notifications vont être déplacées dans Jetpack - Le lecteur va être déplacé dans l’application Jetpack - Les statistiques vont être déplacées dans l’application Jetpack - Passer à la nouvelle application Jetpack Un problème est survenu lors du chargement des incitations. Oups Pas encore d’incitation @@ -1109,12 +1096,6 @@ Language: fr Continuer sans Jetpack liens Web liens URI - Passez à l\'application Jetpack pour continuer de recevoir des notifications en temps réel sur votre appareil. - Passez à l\'application Jetpack pour trouver, suivre et aimer tous vos sites et articles favoris avec le Lecteur. - Passez à l\'application Jetpack pour avoir le contrôle du trafic de votre site grâce aux statistiques et aux tendances. - Obtenir des notifications avec l\'application JetPack - Suivre un site à l\'aide de l\'application Jetpack - Obtenir des statistiques grâce à la nouvelle application Jetpack Impossible de désactiver l’ouverture des liens dans Jetpack Impossible d’activer l’ouverture des liens dans Jetpack Ouvrir les liens dans Jetpack diff --git a/WordPress/src/main/res/values-gl/strings.xml b/WordPress/src/main/res/values-gl/strings.xml index 7a5d4309e412..af69767bf2a8 100644 --- a/WordPress/src/main/res/values-gl/strings.xml +++ b/WordPress/src/main/res/values-gl/strings.xml @@ -734,18 +734,12 @@ Language: gl_ES Facelo máis tarde Cambiar a Jetpack %1$s trasladarase pronto - %1$s trasladaranse pronto - %1$s trasladarase a %2$s - %1$s trasladaranse a %2$s As características de Jetpack trasladáronse. Por favor, instala a Google Play Store para obter a app de Jetpack Algunhas características de Jetpack como Estatísticas, Lector ou Notificacións, entre outras, elimináronse da app de WordPress. - 1 semana - %d semanas Últimos sete días Sete días anteriores Ver todas as respostas - Obtén a aplicación de Jetpack %1$s é menor que a semana anterior %1$s é maior que a semana anterior As túas visitas nos últimos sete días son %1$s menos que nos sete días anteriores. @@ -757,20 +751,13 @@ Language: gl_ES Cambiar á aplicación de Jetpack Máis información en jetpack.com O cambio é gratuíto e só leva un minuto. - Vanse a retirar pronto da aplicación de WordPress as estatísticas, lectura, avisos e outras funcionalidades de Jetpack. - Vanse a retirar da aplicación de WordPress as estatísticas, lectura, avisos e outras funcionalidades de Jetpack o %s. As estatísticas, o lector, as notificacións e outras características trasladaranse pronto á aplicación móbil de Jetpack. Vaia! 1 resposta 0 respostas %d respostas Aínda non hai suxerencias - Cambiar á nova aplicación de Jetpack - As funcións de Jetpack trasladaranse pronto. - Os avisos estanse trasladando á aplicación de Jetpack - O lector estase trasladando á aplicación de Jetpack Produciuse un erro ao cargar as indicacións. - A estatísticas estanse trasladado á aplicación de Jetpack Peticións ✓ Respondido pechar @@ -790,15 +777,9 @@ Language: gl_ES Continuar sen Jetpack urilinks weblinks - Muda para a aplicación Jetpack para continuar a recibir notificacións en tempo real no seu dispositivo. - Muda para a aplicación Jetpack para encontrar, seguir e gustar todas as túas publicacións e sitios favoritos co Lector. - Muda para a aplicación Jetpack para observar o crecemento do tráfico do teu sitio con estatísticas e outros detalles. Abrir ligazóns en Jetpack - Segue calquera sitio coa aplicación de Jetpack Non se pode activar abrir as ligazóns en Jetpack Non se pode desactivar abrir as ligazóns en Jetpack - Obtén as túas estatísticas coa nova aplicación de Jetpack - Recibe as túas notificacións coa aplicación de Jetpack Non se puido conectar a Internet. Contacta co equipo de soporte ou inténtao de novo máis tarde. Comproba a túa conexión de rede para asegurarte de que funcione e volve a intentalo. diff --git a/WordPress/src/main/res/values-he/strings.xml b/WordPress/src/main/res/values-he/strings.xml index c00191818a4c..2ccca2342145 100644 --- a/WordPress/src/main/res/values-he/strings.xml +++ b/WordPress/src/main/res/values-he/strings.xml @@ -1068,11 +1068,7 @@ Language: he_IL לעבור ל-Jetpack נתונים סטטיסטיים, Reader, הודעות ואפשרויות אחרות שמופעלות על ידי Jetpack הוסרו מאפליקציית WordPress. האפשרויות של Jetpack הועברו. - האפשרויות ⁦%1$s⁩ עוברות בתאריך ⁦%2$s⁩ - האפשרות ⁦%1$s⁩ עוברת בתאריך ⁦%2$s⁩ - האפשרויות ⁦%1$s⁩ יועברו בקרוב האפשרות ⁦%1$s⁩ תועבר בקרוב - להוריד את האפליקציה של Jetpack להציג את כל התשובות ⁦%1$s⁩ פחות לעומת שבעת הימים הקודמים ⁦%1$s⁩ יותר משבעת הימים הקודמים @@ -1082,21 +1078,12 @@ Language: he_IL כמות הצפיות באתר במהלך שבעת הימים האחרונים הייתה גבוהה בשיעור של ⁦%1$s⁩ מהכמות בשבעת הימים שקדמו להם. שבעת הימים הקודמים שבעת הימים האחרונים - %d שבועות - שבוע אחד מ-<b>Day One</b> הזכירו לי מאוחר יותר האפשרויות של נתונים סטטיסטיים, Reader, הודעות ואפשרויות אחרות יועברו בקרוב אל האפליקציה של Jetpack לנייד. החלפה לאפליקציה של Jetpack מידע נוסף באתר Jetpack.com ההחלפה היא חינמית ואורכת דקה בלבד. - נתונים סטטיסטיים, Reader, הודעות וכלים אחרים שמופעלים על ידי Jetpack יוסרו מאפליקציית WordPress בקרוב. - נתונים סטטיסטיים, Reader, הודעות וכלים אחרים שמופעלים על ידי Jetpack יוסרו מאפליקציית WordPress בתאריך %s. - האפשרויות של Jetpack יועברו בקרוב. - ההודעות עוברות ל-Jetpack - הכלי Reader עובר לאפליקציה של Jetpack - הנתונים הסטטיסטיים שלך עוברים לאפליקציה של Jetpack - לעבור לאפליקציה החדשה של Jetpack אירעה שגיאה בטעינת ההצעות. אופס עדיין אין הצעות @@ -1122,12 +1109,6 @@ Language: he_IL להמשיך בלי Jetpack weblinks urilinks - יש לעבור לאפליקציה של Jetpack כדי להמשיך לקבל התראות בזמן אמת אל המכשיר שלך. - כדאי לעבור לאפליקציה של Jetpack כדי למצוא, לעקוב ולסמן לייק בכל האתרים והפוסטים האהובים עליך עם Reader. - יש לעבור לאפליקציה של Jetpack כדי לראות איך התעבורה של האתר שלך גדלה הודות לנתונים סטטיסטיים ולתובנות. - אפשר לקבל הודעות דרך האפליקציה של Jetpack - אפשר לעקוב אחרי כל אתר דרך האפליקציה של Jetpack - אפשר לקבל את הנתונים הסטטיסטיים שלך דרך האפליקציה החדשה של Jetpack אין אפשרות להשבית את פתיחת הקישורים ב-Jetpack אין אפשרות להפעיל את פתיחת הקישורים ב-Jetpack לפתוח את הקישורים ב-Jetpack diff --git a/WordPress/src/main/res/values-id/strings.xml b/WordPress/src/main/res/values-id/strings.xml index 70a0669d26cf..ab5abde71c06 100644 --- a/WordPress/src/main/res/values-id/strings.xml +++ b/WordPress/src/main/res/values-id/strings.xml @@ -1070,11 +1070,7 @@ Language: id Ganti ke Jetpack Statistik, Reader, Pemberitahuan, dan beragam fitur lain berbasis Jetpack telah dihapus dari aplikasi WordPress. Fitur-fitur Jetpack telah berpindah. - %1$s berpindah %2$s - %1$s berpindah %2$s - %1$s segera berpindah %1$s segera berpindah - Dapatkan aplikasi Jetpack Lihat semua tanggapan %1$s lebih rendah dari 7 hari sebelumnya %1$s lebih tinggi dari 7 hari sebelumnya @@ -1084,21 +1080,12 @@ Language: id Penayangan Anda dalam 7 hari terakhir %1$s lebih tinggi dari 7 hari sebelumnya. 7 hari sebelumnya 7 hari terakhir - %d minggu - 1 minggu Dari <b>Day One</b> Ingatkan saya nanti Statistik, Reader, Pemberitahuan, dan berbagai fitur lain akan segera berpindah ke aplikasi ponsel Jetpack. Ganti ke aplikasi Jetpack Baca selengkapnya di jetpack.com Bergantilah ke aplikasi—gratis dan prosesnya cepat! - Statistik, Reader, Pemberitahuan, dan beragam fitur lain berbasis Jetpack akan segera dihapus dari aplikasi WordPress. - Statistik, Reader, Pemberitahuan, dan beragam fitur lain berbasis Jetpack akan dihapus dari aplikasi WordPress pada %s. - Beragam fitur Jetpack akan segera berpindah. - Pemberitahuan akan berpindah ke Jetpack - Reader akan berpindah ke aplikasi Jetpack - Statistik Anda akan berpindah ke aplikasi Jetpack - Beralih ke aplikasi Jetpack baru Terjadi eror saat memuat prompt. Waduh Belum ada prompt @@ -1124,12 +1111,6 @@ Language: id Lanjutkan tanpa Jetpack tautanweb tautanuri - Ganti ke aplikasi Jetpack agar dapat tetap menerima notifikasi real-time langsung di perangkat Anda. - Ganti ke aplikasi Jetpack untuk menemukan, mengikuti, dan memberi suka ke situs dan pos favorit lewat Reader. - Ganti ke aplikasi Jetpack untuk memantau perkembangan situs dengan fitur statistik dan wawasan. - Dapatkan pemberitahuan dengan aplikasi Jetpack - Ikuti situs apa pun dengan aplikasi Jetpack - Dapatkan statistik situs Anda lewat aplikasi Jetpack baru Tidak dapat menonaktifkan fitur buka tautan di Jetpack Tidak dapat mengaktifkan fitur buka tautan di Jetpack Buka tautan di Jetpack diff --git a/WordPress/src/main/res/values-it/strings.xml b/WordPress/src/main/res/values-it/strings.xml index 8f4e9b80999d..a19f29845de4 100644 --- a/WordPress/src/main/res/values-it/strings.xml +++ b/WordPress/src/main/res/values-it/strings.xml @@ -1081,11 +1081,7 @@ Language: it Passa a Jetpack Statistiche, Reader, Notifiche e altre funzionalità basate su Jetpack sono state rimosse dall\'app WordPress. Le funzionalità di Jetpack sono state trasferite. - %1$s si stanno trasferendo a %2$s - %1$s si sta trasferendo a %2$s - %1$s si trasferiranno presto %1$s si trasferirà presto - Ottieni l\'app di Jetpack Visualizza tutte le risposte %1$s in meno rispetto ai 7 giorni precedenti %1$s in più rispetto ai 7 giorni precedenti @@ -1095,21 +1091,12 @@ Language: it Le tue visualizzazioni negli ultimi 7 giorni sono %1$s in più rispetto ai 7 giorni precedenti. 7 giorni precedenti Ultimi 7 giorni - %d settimane - 1 settimana Da <b>Day One</b> Ricordamelo più tardi Statistiche, Reader, Notifiche e altre funzionalità passeranno presto all\'app mobile Jetpack. Passa all\'app Jetpack Maggiori informazioni su jetpack.com Il passaggio è gratuito e richiede solo un minuto. - Statistiche, Reader, Notifiche e altre funzionalità basate su Jetpack saranno rimosse presto dall\'app WordPress. - Statistiche, Reader, Notifiche e altre funzionalità basate su Jetpack saranno rimosse dall\'app WordPress il %s. - Le funzionalità di Jetpack si trasferiranno presto. - Le notifiche si stanno spostando su Jetpack - Le notifiche si stanno spostando sull\'app Jetpack - Le tue statistiche si stanno spostando sull\'app Jetpack - Passa alla nuova app Jetpack Si è verificato un errore durante il caricamento delle richieste. Ops Ancora nessuna richiesta @@ -1135,12 +1122,6 @@ Language: it Continua senza Jetpack link web link url - Passa all\'app Jetpack per continuare a ricevere notifiche in tempo reale sul tuo dispositivo. - Passa all\'app Jetpack per trovare, seguire e mettere mi piace a tutti i tuoi siti e post preferiti con Reader. - Passa all\'app Jetpack per vedere crescere il traffico del tuo sito con statistiche e approfondimenti. - Ricevi le tue notifiche con l\'app Jetpack - Segui qualsiasi sito con l\'app Jetpack - Ottieni le statistiche usando la nuova app di Jetpack Impossibile disabilitare i collegamenti aperti in Jetpack Impossibile abilitare i collegamenti aperti in Jetpack Apri i collegamenti in Jetpack diff --git a/WordPress/src/main/res/values-ja/strings.xml b/WordPress/src/main/res/values-ja/strings.xml index 99fb6cf5e7a5..6f59d1c622fe 100644 --- a/WordPress/src/main/res/values-ja/strings.xml +++ b/WordPress/src/main/res/values-ja/strings.xml @@ -1061,11 +1061,7 @@ Language: ja_JP Jetpack に切り替える 統計、Reader、通知などの Jetpack 機能は、WordPress アプリから削除されました。 Jetpack 機能が移動しました。 - %1$s がまもなく %2$s に移動します - %1$s がまもなく %2$s に移動します - %1$s がまもなく移動します %1$s がまもなく移動します - Jetpack アプリを入手 すべての回答を表示 前の7日間と比べて%1$s 減少 前の7日間と比べて%1$s 増加 @@ -1075,21 +1071,12 @@ Language: ja_JP 過去7日間の表示数は、その前の7日間よりも%1$s人増えました。 前の7日間 過去7日間 - %d週 - 1週 <b>Day One</b> から 後で再通知 統計、Reader、通知などの機能は、まもなく Jetpack モバイルアプリに移動します。 Jetpack アプリに切り替える 詳細は jetpack.com をご覧ください 切り替えは無料で、数分で終わります。 - 統計、Reader、通知などの Jetpack 機能は、まもなく WordPress アプリから削除されます。 - 統計、Reader、通知などの Jetpack 機能は、%sに WordPress アプリから削除されます。 - Jetpack 機能はまもなく移動します。 - 通知は Jetpack アプリに移動しています - Reader は Jetpack アプリに移動しています - 統計は Jetpack アプリに移動しています - 新しい Jetpack アプリに切り替える プロンプトの読み込みでエラーが発生しました。 エラーです プロンプトはまだありません @@ -1115,12 +1102,6 @@ Language: ja_JP Jetpack なしで連携 weblinks urilinks - 端末で リアルタイムの通知を引き続き受信するには、Jetpack アプリに切り替えてください。 - Jetpack アプリに切り替えると、Reader を使用してお気に入りのサイトや投稿をすべて検索、フォロー、「いいね」できます。 - Jetpack アプリに切り替えて、統計と統計概要を使用してサイトのトラフィックの増加を確認してください。 - Jetpack アプリで通知を受け取る - Jetpack アプリで任意のサイトをフォロー - 新しい Jetpack アプリを使用して統計を入手する 「Jetpack でリンクを開く」を無効にできません 「Jetpack でリンクを開く」を有効にできません Jetpack でリンクを開く diff --git a/WordPress/src/main/res/values-ko/strings.xml b/WordPress/src/main/res/values-ko/strings.xml index 947a400f67f1..a98f8d73a31c 100644 --- a/WordPress/src/main/res/values-ko/strings.xml +++ b/WordPress/src/main/res/values-ko/strings.xml @@ -1072,11 +1072,7 @@ Language: ko_KR 젯팩으로 전환 통계, 리더, 알림 및 기타 젯팩에서 제공되는 기능이 워드프레스 앱에서 제거되었습니다. 젯팩 기능이 제거되었습니다. - %2$s에 %1$s 이동 - %2$s에 %1$s 이동 - 곧 %1$s 이동 예정 곧 %1$s 이동 예정 - 젯팩 앱 받기 모든 응답 보기 이전 7일보다 %1$s 적음 이전 7일보다 %1$s 많음 @@ -1086,21 +1082,12 @@ Language: ko_KR 최근 7일의 조회수가 이전 7일보다 %1$s 많습니다. 이전 7일 최근 7일 - %d주 - 1주 출처: <b>Day One</b> 나중에 다시 알림 곧 통계, 리더, 알림 및 기타 기능이 젯팩 모바일 앱으로 이동됩니다. 젯팩 앱으로 전환 jetpack.com에서 더 알아보기 전환은 무료이며 1분밖에 걸리지 않습니다. - 통계, 리더, 알림 및 기타 젯팩에서 제공되는 기능이 조만간 워드프레스 앱에서 제거됩니다. - 통계, 리더, 알림 및 기타 젯팩에서 제공되는 기능이 %s에 워드프레스 앱에서 제거됩니다. - 젯팩 기능이 곧 이동합니다. - 젯팩으로 알림 이동 중 - 젯팩 앱으로 리더 이동 중 - 젯팩 앱으로 통계 이동 중 - 새 젯팩 앱으로 전환 프롬프트 로드 중 오류가 발생했습니다. 죄송합니다. 아직 프롬프트 없음 @@ -1126,12 +1113,6 @@ Language: ko_KR 젯팩 없이 계속 웹 링크 URL 링크 - 젯팩 앱으로 전환하여 계속 기기에서 실시간 알림을 받으세요. - 젯팩 앱으로 전환하여 리더를 통해 좋아하는 모든 사이트와 글을 찾고, 팔로우하고, 좋아요를 표시하세요. - 젯팩 앱으로 전환하여 통계와 인사이트를 통해 사이트의 트래픽 증가를 지켜보세요. - 젯팩 앱으로 알림 받기 - 젯팩 앱으로 사이트 팔로우 - 새 젯팩 앱을 사용하여 통계 받기 젯팩에서 링크 열기를 비활성화할 수 없음 젯팩에서 링크 여기를 활성화할 수 없음 젯팩에서 링크 열기 diff --git a/WordPress/src/main/res/values-lv/strings.xml b/WordPress/src/main/res/values-lv/strings.xml index 83362ff6f86d..f511679d9718 100644 --- a/WordPress/src/main/res/values-lv/strings.xml +++ b/WordPress/src/main/res/values-lv/strings.xml @@ -615,16 +615,11 @@ Language: lv Saņemiet palīdzību no mūsu brīvprātīgo grupas. Izslēgt uzvednes %1$s drīzumā tiks pārvietots - %1$s drīzumā tiks pārvietoti - %1$s pārvietojas uz %2$s - %1$s pārvietojas uz %2$s Jetpack funkcijas ir pārvietotas. Statistika, lasītājs, paziņojumi un citas Jetpack darbināmas funkcijas ir noņemtas no WordPress lietotnes. Pārslēdzieties uz Jetpack Lūdzu, instalējiet Google Play veikalu, lai iegūtu lietotni Jetpack Dariet to vēlāk - 1 nedēļa - %d nedēļas Pēdējās 7 dienas Iepriekšējās 7 dienas Jūsu skatījumu skaits pēdējo 7 dienu laikā ir par %1$s lielāks nekā iepriekšējās 7 dienās. @@ -634,14 +629,11 @@ Language: lv Par %1$s vairāk nekā iepriekšējās 7 dienās Par %1$s mazāk nekā iepriekšējās 7 dienās Skatīt visas atbildes - Iegūst Jetpack lietotni No <b>Pirmās dienas</b> Pārslēgšanās ir bezmaksas un aizņem tikai minūti. Uzziniet vairāk vietnē jetpack.com Pārslēdzieties uz Jetpack lietotni Atgādināt vēlāk - Statistika, Lasītājs, paziņojumi un citas Jetpack darbināmas funkcijas tiks noņemtas no WordPress lietotnes vietnē %s. - Statistika, Lasītājs, paziņojumi un citas Jetpack darbināmas funkcijas drīzumā tiks noņemtas no WordPress lietotnes. Statistika, Lasītājs, Paziņojumi un citi līdzekļi drīzumā tiks pārvietoti uz Jetpack mobilo lietotni. 0 atbildes 1 atbilde @@ -649,11 +641,6 @@ Language: lv Vēl nav uzvedņu Hmm… Ielādējot uzvednes, radās kļūda. - Pārslēdzieties uz jauno Jetpack lietotni - Jūsu statistika tiek pārvietota uz Jetpack lietotni - Lasītājs pāriet uz Jetpack lietotni - Paziņojumi tiek pārvietoti uz Jetpack - Jetpack funkcijas drīzumā tiks pārvietotas. aizvērt Uzvednes ✓ Atbildēts @@ -667,21 +654,15 @@ Language: lv Ziņot par šo lietotāju Bloķēt lietotāju Ziņas no šī lietotāja vairs netiks rādītas - Pārslēdzieties uz Jetpack lietotni, lai turpinātu saņemt reāllaika paziņojumus savā ierīcē. tīmekļa saites Turpiniet bez Jetpack Vai atvērt saites pakalpojumā Jetpack? urilinks Izskatās, ka jums ir instalēta Jetpack lietotne.\n\nVai vēlaties nākotnē atvērt saites Jetpack lietotnē?\n\nTo vienmēr varat mainīt sadaļā Lietotnes iestatījumi > Atvērt saites Jetpack. Atveriet saites pakalpojumā WordPress - Pārslēdzieties uz lietotni Jetpack, lai, izmantojot statistiku un ieskatus, vērotu savas vietnes datplūsmas pieaugumu. - Pārslēdzieties uz lietotni Jetpack, lai atrastu, sekotu un patīk visām savām iecienītākajām vietnēm un ziņām, izmantojot programmu Reader.\nPārslēdzieties uz Jetpack lietotni, lai atrastu, sekotu un skatītu visas iecienītākās vietnes un ziņojumus, izmantojot Lasītāju. - Saņemiet paziņojumus, izmantojot Jetpack lietotni Atveriet saites pakalpojumā Jetpack Nevar iespējot atvērtās saites pakalpojumā Jetpack Nevar atspējot atvērtās saites pakalpojumā Jetpack - Iegūstiet savu statistiku, izmantojot jauno Jetpack lietotni - Sekojiet jebkurai vietnei, izmantojot Jetpack lietotni Atvainojiet, bet kaut kas neizdevās kā plānots. Jūsu dati ir drošībā, taču mēs pašlaik nevaram tos pārsūtīt. Lūdzu, sazinieties ar atbalsta dienestu vai vēlāk mēģiniet vēlreiz. Nevar izveidot savienojumu ar internetu. diff --git a/WordPress/src/main/res/values-nl/strings.xml b/WordPress/src/main/res/values-nl/strings.xml index dbebb13c28ba..38a676e5c576 100644 --- a/WordPress/src/main/res/values-nl/strings.xml +++ b/WordPress/src/main/res/values-nl/strings.xml @@ -1081,11 +1081,7 @@ Language: nl Overstappen naar Jetpack Statistieken, Reader, meldingen en andere functies die door Jetpack aangedreven worden, zijn verwijderd uit de WordPress-app. Jetpack functies zijn verplaatst. - %1$s worden over %2$s verplaatst - %1$s wordt over %2$s verplaatst - %1$s worden binnenkort verplaatst %1$s wordt binnenkort verplaatst - Verkrijg de Jetpack app Alle reacties bekijken %1$s minder dan de vorige 7 dagen %1$s meer dan de vorige 7 dagen @@ -1095,21 +1091,12 @@ Language: nl Je hebt de afgelopen 7 dagen %1$s meer weergaven gehad dan de vorige 7 dagen. Vorige 7 dagen Afgelopen 7 dagen - %d weken - 1 week Van <b>Day One</b> Herinner mij hier later aan Statistieken, Lezer, Meldingen en andere functies worden binnenkort verplaatst naar de mobiele Jetpack-app. Schakel over naar de Jetpack-app Lees verder op jetpack.com Overstappen is gratis en duurt maar een minuut. - Statistieken, Reader, Meldingen en andere functies die door Jetpack aangedreven worden, zullen binnenkort uit de WordPress-app worden verwijderd. - Statistieken, Reader, Meldingen en andere functies die door Jetpack aangedreven worden op %s uit de WordPress-app worden verwijderd. - Jetpack functies worden binnenkort verplaatst. - Meldingen zullen naar Jetpack worden verplaatst - Reader zal naar de Jetpack app worden verplaatst - Je statistieken zullen naar de Jetpack app worden verplaatst - Schakel over naar de nieuwe Jetpack app Er is een fout opgetreden bij het laden van opdrachten. Oeps Er zijn nog geen opdrachten @@ -1135,12 +1122,6 @@ Language: nl Doorgaan zonder Jetpack weblinks urilinks - Schakel over naar de Jetpack-app om realtime meldingen te blijven ontvangen op je apparaat. - Schakel over naar de Jetpack-app om je favoriete sites en berichten te vinden, te volgen en een like te geven met Reader. - Ga naar de Jetpack app om het verkeer op je site te zien groeien met statistieken en inzichten. - Verkrijg je meldingen met de Jetpack app - Sites met de Jetpack app volgen - Verkrijg je stats met de nieuwe Jetpack app Kan links openen in Jetpack niet uitschakelen Kan links openen in Jetpack niet inschakelen Links in Jetpack openen diff --git a/WordPress/src/main/res/values-pl/strings.xml b/WordPress/src/main/res/values-pl/strings.xml index 077c5f4ad9ab..d5a99e374d92 100644 --- a/WordPress/src/main/res/values-pl/strings.xml +++ b/WordPress/src/main/res/values-pl/strings.xml @@ -1081,11 +1081,7 @@ Language: pl Przejdź na Jetpack Statystyki, Czytnik, Powiadomienia i inne funkcje zasilane przez Jetpack zostały usunięte z aplikacji WordPress. Funkcje jetpacka zostały przeniesione. - %1$s porusza się w %2$s - %1$s porusza się w %2$s - %1$s wkrótce się przeniesie %1$s wkrótce się przeniesie - Uzyskaj aplikację Jetpack Zobacz wszystkie odpowiedzi %1$s niższa niż w ciągu poprzednich 7 dni %1$s wyższa niż w ciągu poprzednich 7 dni @@ -1095,21 +1091,12 @@ Language: pl Liczba wyświetleń w ciągu ostatnich 7 dni jest o %1$s wyższa niż w ciągu poprzednich 7 dni. Poprzednie 7 dni Ostatnie 7 dni - %d tygodni - 1 tydzień Od <b>Pierwszego Dnia</b> Przypomnij mi później Statystyki, Czytnik, Powiadomienia i inne funkcje przejdą wkrótce do aplikacji mobilnej Jetpack. Przejdź na aplikację Jetpack Dowiedz się więcej na jetpack.com Przejście jest darmowe i zajmuje chwilę. - Statystyki, Czytnik, Powiadomienia i inne funkcje zasilane przez Jetpack zostaną wkrótce usunięte z aplikacji WordPress. - Statystyki, Czytnik, Powiadomienia i inne funkcje zasilane przez Jetpack zostaną usunięte z aplikacji WordPress dnia %s. - Funkcje jetpacka wkrótce się przeniosą. - Powiadomienia przenoszą się do aplikacji Jetpack - Czytnik przenosi się do aplikacji Jetpack - Twoje statystyki przenoszą się do aplikacji Jetpack - Przejdź na aplikację Jetpack Wystąpił błąd podczas wczytywania monitów. Ups Brak monitów @@ -1135,12 +1122,6 @@ Language: pl Kontynuuj bez Jetpacka odnośniki internetowe urilinki - Przełącz się na aplikację Jetpack, żeby dalej dostawać powiadomienia w czasie rzeczywistym na swoim urządzeniu. - Przełącz się na aplikację Jetpack, aby używać Czytnika do wyszukiwania, obserwowania i dodawania polubień wszystkich swoich ulubionych stron i wpisów. - Przełącz się na aplikację Jetpack, aby obserwować jak wzrasta ruch na swojej witrynie dzięki statystykom i szczegółom. - Otrzymuj powiadomienia dzięki aplikacji Jetpack - Subskrybuj dowolną witrynę za pomocą aplikacji Jetpack - Uzyskaj dostęp do statystyk za pomocą nowej aplikacji Jetpack Nie można wyłączyć otwartych odnośników w Jetpacku Nie mogę włączyć otwierania odnośników w Jetpacku Otwórz odnośniki w Jetpack diff --git a/WordPress/src/main/res/values-pt-rBR/strings.xml b/WordPress/src/main/res/values-pt-rBR/strings.xml index 14956d0806ba..41d244d403d5 100644 --- a/WordPress/src/main/res/values-pt-rBR/strings.xml +++ b/WordPress/src/main/res/values-pt-rBR/strings.xml @@ -775,11 +775,7 @@ Language: pt_BR Mudar para o Jetpack Estatísticas, Leitor, Notificações e outras funcionalidades com tecnologia Jetpack foram removidas do aplicativo WordPress. Recursos do Jetpack foram movidos. - %1$s serão movidos em %2$s - %1$s será movido em %2$s - %1$s serão movidos em breve %1$s será movido em breve - Obtenha o aplicativo do Jetpack Ver todas as respostas %1$s menor do que nos sete dias anteriores %1$s maior do que nos sete dias anteriores @@ -789,21 +785,12 @@ Language: pt_BR O número de visualizações nos últimos sete dias é %1$s maior do que nos sete dias anteriores. 7 dias anteriores Últimos 7 dias - %d semanas - 1 semana Do <b>Day One</b> Lembre-me depois As estatísticas, o Leitor, as notificações e outras funcionalidades em breve irão para o aplicativo móvel do Jetpack. Mudar para o aplicativo do Jetpack Saiba mais em br.jetpack.com A migração é gratuita e leva apenas um minuto. - As estatísticas, o Leitor, as notificações e outras funcionalidades com tecnologia Jetpack serão removidas do aplicativo WordPress em breve. - As estatísticas, o Leitor, as notificações e outras funcionalidades com tecnologia Jetpack serão removidas do aplicativo WordPress em %s. - Recursos do Jetpack serão movidos em breve. - As notificações estão migrando para o aplicativo Jetpack - O Leitor está migrando para o aplicativo Jetpack - Suas estatísticas estão migrando para o aplicativo Jetpack - Mudar para o novo aplicativo do Jetpack Ocorreu um erro ao carregar as sugestões. Opa Nenhuma sugestão ainda @@ -829,12 +816,6 @@ Language: pt_BR Continuar sem Jetpack weblinks urilinks - Mude para o aplicativo Jetpack para continuar recebendo notificações em tempo real no seu dispositivo. - Mude para o aplicativo Jetpack para encontrar, seguir e curtir todas as suas publicações e sites favoritos com o Leitor. - Mude para o aplicativo Jetpack para observar o crescimento do tráfego de seu site com estatísticas e informações. - Receba notificações com o aplicativo Jetpack - Siga qualquer site com o aplicativo Jetpack - Acesse suas estatísticas com o novo aplicativo Jetpack Não é possível desabilitar links abertos no Jetpack Não é possível habilitar links abertos no Jetpack Abrir links no Jetpack diff --git a/WordPress/src/main/res/values-ro/strings.xml b/WordPress/src/main/res/values-ro/strings.xml index 85f2a3d0b010..f3eeb565b238 100644 --- a/WordPress/src/main/res/values-ro/strings.xml +++ b/WordPress/src/main/res/values-ro/strings.xml @@ -1082,11 +1082,6 @@ Language: ro Fă asta mai târziu Te rog instalează Google Play Store pentru a obține aplicația Jetpack %1$s se mută în curând - %1$s se mută în curând - %1$s se mută în %2$s - %1$s se mută în %2$s - O săptămână - %d săptămâni Ultimele 7 zile 7 zile anterioare Vizualizările din ultimele 7 zile sunt cu %1$s mai mari decât cele din 7 zile anterioare. @@ -1096,26 +1091,18 @@ Language: ro Cu %1$s mai mult decât în ultimele 7 zile Cu %1$s mai puțin decât în ultimele 7 zile Vezi toate răspunsurile - Ia aplicația Jetpack De la <b>Day One</b> Comutarea este gratuită și durează numai un minut. Află mai multe la jetpack.com Comută la aplicația Jetpack Amintește-mi mai târziu În curând, Statistici, Cititor, Notificări și alte funcționalități se vor muta în aplicația Jetpack pentru mobil. - În curând, Statistici, Cititor, Notificări și alte funcționalități propulsate de Jetpack vor fi înlăturate din aplicația WordPress. - Statistici, Cititor, Notificări și alte funcționalități propulsate de Jetpack vor fi înlăturate din aplicația WordPress pe %s. Niciun răspuns Un răspuns %d răspunsuri Niciun îndemn încă Hopa A fost o eroare la încărcarea îndemnurilor. - Comută la noua aplicație Jetpack - Statisticile se mută în aplicația Jetpack - Cititorul a fost mutat în aplicația Jetpack - Notificările au fost mutate în Jetpack - Funcționalitățile Jetpack se mută în curând. închide Îndemnuri ✓ Am răspuns @@ -1132,18 +1119,12 @@ Language: ro legături web Continuă fără Jetpack Deschizi legăturile în Jetpack? - Comută la aplicația Jetpack pentru a continua să primești notificări în timp real pe dispozitivul tău. urilinks Se pare că ai aplicația Jetpack instalată.\n\nÎn viitor vrei să deschizi legăturile în aplicația Jetpack?\n\nPoți schimba oricând asta în Setări aplicație > Deschide legăturile în Jetpack Deschide legăturile în WordPress - Comută la aplicația Jetpack pentru a urmări creșterea traficului de pe site cu statistici și priviri generale. - Comută la aplicația Jetpack pentru a găsi, urmări și aprecia toate site-urile și articolele tale preferate din Cititor. Nu pot activa deschiderea legăturilor în Jetpack Nu pot dezactiva deschiderea legăturilor în Jetpack Deschide legăturile în Jetpack - Cu aplicația Jetpack, primești notificări - Cu aplicația Jetpack, poți să urmărești orice site - Cu aplicația Jetpack, îți vezi statisticile Nu mă pot conecta la internet. Ne pare rău, dar ceva nu a mers conform planului. Datele tale sunt în siguranță, dar nu le putem transfera momentan. Te rog contactează suportul sau încearcă din nou mai târziu. diff --git a/WordPress/src/main/res/values-ru/strings.xml b/WordPress/src/main/res/values-ru/strings.xml index ecefb190b4fb..a1e426cd9dfa 100644 --- a/WordPress/src/main/res/values-ru/strings.xml +++ b/WordPress/src/main/res/values-ru/strings.xml @@ -1081,11 +1081,7 @@ Language: ru Перейти на Jetpack Статистика, Чтиво, Уведомления и другие функции Jetpack удалены из приложения WordPress. Возможности Jetpack переехали. - %1$s переедут через %2$s - %1$s переедет через %2$s - %1$s скоро переедут %1$s скоро переедет - Получить приложение Jetpack Показать все ответы На %1$s меньше, чем в предыдущие 7 дней На %1$s больше, чем в предыдущие 7 дней @@ -1095,21 +1091,12 @@ Language: ru Просмотров за последние 7 дней на %1$s больше, чем в предыдущие. Предыдущие 7 дней Последние 7 дней - %d нед. - 1 неделя От <b>В Первый День</b> Напомнить мне позже Статистика, Чтиво, Уведомления и другие функции скоро переедут в мобильное приложение Jetpack. Перейти в новое приложение Jetpack Узнайте больше на Jetpack.com Переход бесплатен и займет всего минуту. - Статистика, Чтиво, Уведомления и другие функции Jetpack скоро будут удалены из приложения WordPress. - Статистика, Чтиво, Уведомления и другие функции Jetpack скоро будут удалены из приложения WordPress %s. - Возможности Jetpack скоро переедут. - Уведомления переезжают в Jetpack - Чтиво переезжает в приложение Jetpack - Статистика переезжает в приложение Jetpack - Перейти в новое приложение Jetpack При загрузке подсказок возникла ошибка. Ой! Пока нет подсказок @@ -1135,12 +1122,6 @@ Language: ru Продолжить без Jetpack веб-ссылки URI-ссылки - Перейдите в приложение Jetpack, чтобы получать на устройство уведомления в реальном времени. - Перейдите в приложение Jetpack, чтобы найти, подписаться и поставить отметки «Нравится» любимым сайтам и записям в Чтиве. - Перейдите в приложение Jetpack, чтобы следить за ростом посещаемости в разделах «Статистика» и «Обзор». - Получайте уведомления в приложении Jetpack - Подпишитесь на любые сайты в приложении Jetpack - Просматривайте статистику в новом приложении Jetpack Не удалось отключить открытие ссылок в Jetpack Не удалось включить открытие ссылок в Jetpack Открывать ссылки в Jetpack diff --git a/WordPress/src/main/res/values-sq/strings.xml b/WordPress/src/main/res/values-sq/strings.xml index b49a5db682a7..94c398b02f4d 100644 --- a/WordPress/src/main/res/values-sq/strings.xml +++ b/WordPress/src/main/res/values-sq/strings.xml @@ -973,11 +973,7 @@ Language: sq_AL Kalo te Jetpack Statistikat, Lexuesi, Njoftimet dhe të tjera veçorit të fuqishme të Jetpack-ut janë hequr nga aplikacioni WordPress. Veçori të Jetpack-ut janë lëvizur. - %1$s po kalohet në %2$s - %1$s po kalohet në %2$s - Së shpejti %1$s do të lëvizen Së shpejti %1$s do të lëvizet - Merrni aplikacionin Jetpack Shihni krejt përgjigjet %1$s më poshtë se 7 ditët e mëparshme %1$s më sipër se 7 ditët e mëparshme @@ -987,21 +983,12 @@ Language: sq_AL Parjet tuaja gjatë 7 ditëve të fundit janë %1$s më lart se ato të 7 ditëve të kaluara. 7 ditët e mëparshme 7 ditët e fundit - %d javë - 1 javë Nga <b>Dita e Parë</b> Kujtoma më vonë Statistikat, Lexuesi, Njoftimet dhe të tjera veçorit të Jetpack-ut së shpejti do të kalohen te aplikacioni Jetpack për celular. Kaloni te aplikacioni Jetpack Mësoni më tepër, te jetpack.com Kalimi është falas dhe do vetëm një minutë. - Statistikat, Lexuesi, Njoftimet dhe të tjera veçorit të fuqishme të Jetpack-ut do të hiqen së shpejti nga aplikacioni WordPress. - Statistikat, Lexuesi, Njoftimet dhe të tjera veçorit të fuqishme të Jetpack-ut do të hiqen nga aplikacioni WordPress në %s. - Veçoritë Jetpack së shpejti do të shpërngulen. - Njoftimet po kalojnë te aplikacioni Jetpack - Lexuesi po kalohet te aplikacioni Jetpack - Statistikat tuaja po kalojnë te aplikacioni Jetpack - Kaloni në aplikacionin e ri Jetpack Pati një gabim në ngarkim cytjesh. Hëm Ende pa cytje @@ -1027,12 +1014,6 @@ Language: sq_AL Vazhdo pa Jetpack-un lidhje web lidhje URI - Që të vazhdoni të merrni në pajisjen tuaj njoftime të atypëratyshme, kaloni te aplikacioni Jetpack. - Që të gjeni, ndiqni dhe pëlqeni krejt sajtet dhe postimet tuaj të parapëlqyer me Lexuesin, kaloni te aplikacioni Jetpack. - Që të shihni shtim trafiku në sajtin tuaj, përmes statistikash dhe prirjesh, kaloni te aplikacioni Jetpack. - Merrini njoftimet tuaja me aplikacionin Jetpack - Ndiqni çfarëdo sajti, me aplikacionin Jetpack - Merrni statistikat tuaja duke përdorur aplikacionin e ri Jetpack S’arrihet të çaktivizohet hapje lidhjesh në Jetpack S’arrihet të aktivizohet hapje lidhjesh në Jetpack Lidhjet hapi në Jetpack diff --git a/WordPress/src/main/res/values-sr/strings.xml b/WordPress/src/main/res/values-sr/strings.xml index f8f83f5c4836..a3d606a81f8d 100644 --- a/WordPress/src/main/res/values-sr/strings.xml +++ b/WordPress/src/main/res/values-sr/strings.xml @@ -60,8 +60,6 @@ Language: sr_RS Види све одговоре Последњих 7 дана Претходних 7 дана - %d седмица - 1 седмица Подсети ме касније Упс Надређена страна diff --git a/WordPress/src/main/res/values-sv/strings.xml b/WordPress/src/main/res/values-sv/strings.xml index efd136d9a75a..f84444b07501 100644 --- a/WordPress/src/main/res/values-sv/strings.xml +++ b/WordPress/src/main/res/values-sv/strings.xml @@ -1081,11 +1081,7 @@ Language: sv_SE Byt till Jetpack Statistik, läsare, aviseringar och andra Jetpack-drivna funktioner har tagits bort från WordPress-appen. Jetpack-funktioner har flyttat. - %1$s flyttar om %2$s - %1$s flyttar om %2$s - %1$s flyttar snart %1$s flyttar snart - Skaffa Jetpack-appen Visa alla svar %1$s lägre än under de föregående 7 dagarna %1$s högre än under de föregående 7 dagarna @@ -1095,21 +1091,12 @@ Language: sv_SE Antalet visningar under de senaste 7 dagarna är %1$s högre än under de föregående 7 dagarna. De föregående 7 dagarna Senaste 7 dagarna - %d veckor - 1 vecka Från <b>Day One</b> Påminn mig senare Statistik, läsare, aviseringar och andra funktioner kommer snart att flyttas till Jetpacks mobilapp. Byt till Jetpack-appen Läs mer på jetpack.com Bytet är gratis och tar bara en minut. - Statistik, läsare, aviseringar och andra Jetpack-drivna funktioner kommer snart att tas bort från WordPress-appen. - Statistik, läsare, aviseringar och andra Jetpack-drivna funktioner kommer att tas bort från WordPress-appen den %s. - Jetpack-funktioner flyttas snart. - Aviseringar flyttar till Jetpack - Läsaren flyttar till Jetpack-appen - Din statistik flyttas till Jetpack-appen - Byt till den nya Jetpack-appen Det var ett problem att ladda in förslag. Hoppsan Inga förslag än @@ -1135,12 +1122,6 @@ Language: sv_SE Fortsätt utan Jetpack weblinks urilinks - Byt till Jetpack-appen för att fortsätta ta emot aviseringar i realtid på din enhet. - Byt till Jetpack-appen för att hitta, följa och gilla alla dina favoritwebbplatser och inlägg med läsare. - Byt till Jetpack-appen för att se insikter och statistik över hur webbplatsens trafik ökar. - Få dina aviseringar med Jetpack-appen - Följ vilken webbplats som helst med Jetpack-appen - Få din statistik med den nya Jetpack-appen Det gick inte att inaktivera öppning av länkar i Jetpack Det gick inte att aktivera öppning av länkar i Jetpack Öppna länkar i Jetpack diff --git a/WordPress/src/main/res/values-tr/strings.xml b/WordPress/src/main/res/values-tr/strings.xml index a720c2203ff1..33533f636ca8 100644 --- a/WordPress/src/main/res/values-tr/strings.xml +++ b/WordPress/src/main/res/values-tr/strings.xml @@ -1081,11 +1081,7 @@ Language: tr Jetpack kullanmaya geç İstatistikler, Okuyucu, Bildirimler ve Jetpack destekli diğer özellikler, yakında WordPress uygulamasından kaldırıldı. Jetpack özellikleri taşındı. - %1$s %2$s içinde taşınıyor - %1$s %2$s içinde taşınıyor - %1$s yakında taşınıyor %1$s yakında taşınıyor - Jetpack uygulamasını edinin Tüm yanıtları görüntüle Son 7 güne göre %1$s daha düşük Son 7 güne göre %1$s daha yüksek @@ -1095,21 +1091,12 @@ Language: tr Son 7 gündeki görüntülemeleriniz, önceki 7 güne göre %1$s daha yüksek. Önceki 7 gün Son 7 gün - %d hafta - 1 hafta <b>Birinci günden</b> Daha sonra hatırlat İstatistikler, Okuyucu, Bildirimler ve diğer özellikler yakında Jetpack mobil uygulamasına taşınacak. Jetpack uygulamasına geçin Jetpack.com üzerinden ayrıntılı bilgi alın Geçiş ücretsizdir ve yalnızca bir dakika sürer. - İstatistikler, Okuyucu, Bildirimler ve Jetpack destekli diğer özellikler, yakında WordPress uygulamasından kaldırılacak. - İstatistikler, Okuyucu, Bildirimler ve Jetpack destekli diğer özellikler, %s tarihinde WordPress uygulamasından kaldırılacak. - Jetpack özellikleri yakında taşınıyor. - Bildirimler Jetpack uygulamasına taşınıyor - Okuyucu, Jetpack uygulamasına taşınıyor - İstatistikleriniz Jetpack uygulamasına taşınıyor - Yeni Jetpack uygulamasına geçiş yapın İstemler yüklenirken bir sorun çıktı. Eyvah Henüz bir istem yok @@ -1135,12 +1122,6 @@ Language: tr Jetpack kullanmadan ilerle weblinks urilinks - Aygıtınızda gerçek zamanlı bildirimler almayı sürdürmek için Jetpack uygulamasına geçin. - Okuyucu ile tüm beğendiğiniz siteleri ve yazıları bulmak, takip etmek ve beğenmek için Jetpack uygulamasına geçin. - İstatistikler ve bilgilerle sitenizin trafiğinin büyümesini izlemek için Jetpack uygulamasına geçin. - Bildirimlerinizi Jetpack uygulamasıyla alın - Jetpack uygulamasıyla istediğiniz siteyi takip edin - Yeni Jetpack uygulamasını kullanarak istatistiklerinizi alın Bağlantıları Jetpack ile açma özelliği kapatılamadı Bağlantıları Jetpack ile açma özelliği açılamadı Bağlantıları Jetpack ile aç diff --git a/WordPress/src/main/res/values-zh-rCN/strings.xml b/WordPress/src/main/res/values-zh-rCN/strings.xml index 80fc4083fd95..1e6b9a28cad7 100644 --- a/WordPress/src/main/res/values-zh-rCN/strings.xml +++ b/WordPress/src/main/res/values-zh-rCN/strings.xml @@ -1076,11 +1076,7 @@ Language: zh_CN 切换至 Jetpack 统计信息、阅读器、通知和其他由 Jetpack 提供支持的功能已从 WordPress 应用程序上删除。 Jetpack 功能已移动。 - %1$s 将在 %2$s后移动 - %1$s 将在 %2$s后移动 - %1$s 即将移动 %1$s 即将移动 - 获取 Jetpack 应用程序 查看所有回复 比上一个 7 天低 %1$s 比上一个 7 天高 %1$s @@ -1090,21 +1086,12 @@ Language: zh_CN 您过去 7 天的查看数比上一个 7 天高 %1$s。 上一个 7 天 过去 7 天 - %d 周 - 1 周 来自 <b>Day One</b> 稍后提醒我 统计信息、阅读器、通知和其他功能即将移至 Jetpack 移动应用。 切换到 Jetpack 应用 请访问 jetpack.com 以了解详情 切换免费,只需一会儿。 - 统计信息、阅读器、通知和其他 Jetpack 提供的功能即将从 WordPress 应用上删除。 - 统计信息、阅读器、通知和其他 Jetpack 提供的功能将于 %s从 WordPress 应用上删除。 - Jetpack 功能即将移动。 - 通知即将移至 Jetpack - 阅读器即将移至 Jetpack 应用 - 统计信息即将移至 Jetpack 应用 - 切换到新版 Jetpack 应用 加载提示时出错。 糟糕 尚无提示 @@ -1130,12 +1117,6 @@ Language: zh_CN 继续,不使用 Jetpack 网络链接 URI 链接 - 切换到 Jetpack 应用,以在设备上接收 实时通知。 - 切换到 Jetpack 应用,使用阅读器来查找、关注和点赞所有您喜欢的站点和文章。 - 切换到 Jetpack 应用,通过统计数据和数据分析查看站点的流量增长情况。 - 使用 Jetpack 应用获取通知 - 借助 Jetpack 应用以关注任何站点状况 - 使用新版 Jetpack 应用获取统计数据 无法禁用在 Jetpack 中打开链接 无法启用在 Jetpack 中打开链接 在 Jetpack 中打开链接 diff --git a/WordPress/src/main/res/values-zh-rHK/strings.xml b/WordPress/src/main/res/values-zh-rHK/strings.xml index 84c9c548dd71..dccb635ef7af 100644 --- a/WordPress/src/main/res/values-zh-rHK/strings.xml +++ b/WordPress/src/main/res/values-zh-rHK/strings.xml @@ -1071,11 +1071,7 @@ Language: zh_TW 切換至 Jetpack WordPress 應用程式已移除「統計資料」、「閱讀器」、「通知」和其他 Jetpack 提供的功能。 Jetpack 功能已經搬遷。 - %1$s 即將於 %2$s後搬遷 - %1$s 即將於 %2$s後搬遷 - %1$s 即將搬遷 %1$s 即將搬遷 - 取得 Jetpack 應用程式 檢視所有回應 較先前 7 天低 %1$s 較先前 7 天高 %1$s @@ -1085,21 +1081,12 @@ Language: zh_TW 你在過去 7 天內的檢視數比更早之前 7 天的檢視數高 %1$s。 更早之前 7 天 過去 7 天 - %d 週 - 1 週 來自 <b>Day One</b> 稍後再提醒我 「統計資料」、「閱讀器」、「通知」及其他功能即將搬遷至 Jetpack 行動應用程式。 切換至 Jetpack 應用程式 前往 jetpack.com 深入瞭解 切換完全免費,只要 1 分鐘就能完成。 - WordPress 應用程式即將移除「統計資料」、「閱讀器」、「通知」和 Jetpack 提供的其他功能。 - WordPress 應用程式將於 %s 移除「統計資料」、「閱讀器」、「通知」和 Jetpack 提供的其他功能。 - Jetpack 功能即將搬遷了。 - 「通知」將轉移至 Jetpack 應用程式 - 「閱讀器」將轉移至 Jetpack 應用程式 - 你的統計資料將轉移至 Jetpack 應用程式 - 切換至全新 Jetpack 應用程式 載入提示時發生錯誤。 糟糕 尚無提示 @@ -1125,12 +1112,6 @@ Language: zh_TW 繼續但不使用 Jetpack 網頁連結 URI 連結 - 切換至 Jetpack 應用程式,以便繼續 在你的裝置上接收即時通知。 - 切換至 Jetpack 應用程式,以便透過閱讀器搜尋、追蹤並按讚所有喜愛的網站及文章。 - 切換至 Jetpack 應用程式,以便透過統計資料和洞察報告,查看網站流量成長。 - 透過 Jetpack 應用程式接收通知 - 透過 Jetpack 應用程式追蹤任何網站 - 使用全新 Jetpack 應用程式取得統計資料 無法停用在 Jetpack 中開啟連結 無法啟用在 Jetpack 中開啟連結 在 Jetpack 中開啟連結 diff --git a/WordPress/src/main/res/values-zh-rTW/strings.xml b/WordPress/src/main/res/values-zh-rTW/strings.xml index 84c9c548dd71..dccb635ef7af 100644 --- a/WordPress/src/main/res/values-zh-rTW/strings.xml +++ b/WordPress/src/main/res/values-zh-rTW/strings.xml @@ -1071,11 +1071,7 @@ Language: zh_TW 切換至 Jetpack WordPress 應用程式已移除「統計資料」、「閱讀器」、「通知」和其他 Jetpack 提供的功能。 Jetpack 功能已經搬遷。 - %1$s 即將於 %2$s後搬遷 - %1$s 即將於 %2$s後搬遷 - %1$s 即將搬遷 %1$s 即將搬遷 - 取得 Jetpack 應用程式 檢視所有回應 較先前 7 天低 %1$s 較先前 7 天高 %1$s @@ -1085,21 +1081,12 @@ Language: zh_TW 你在過去 7 天內的檢視數比更早之前 7 天的檢視數高 %1$s。 更早之前 7 天 過去 7 天 - %d 週 - 1 週 來自 <b>Day One</b> 稍後再提醒我 「統計資料」、「閱讀器」、「通知」及其他功能即將搬遷至 Jetpack 行動應用程式。 切換至 Jetpack 應用程式 前往 jetpack.com 深入瞭解 切換完全免費,只要 1 分鐘就能完成。 - WordPress 應用程式即將移除「統計資料」、「閱讀器」、「通知」和 Jetpack 提供的其他功能。 - WordPress 應用程式將於 %s 移除「統計資料」、「閱讀器」、「通知」和 Jetpack 提供的其他功能。 - Jetpack 功能即將搬遷了。 - 「通知」將轉移至 Jetpack 應用程式 - 「閱讀器」將轉移至 Jetpack 應用程式 - 你的統計資料將轉移至 Jetpack 應用程式 - 切換至全新 Jetpack 應用程式 載入提示時發生錯誤。 糟糕 尚無提示 @@ -1125,12 +1112,6 @@ Language: zh_TW 繼續但不使用 Jetpack 網頁連結 URI 連結 - 切換至 Jetpack 應用程式,以便繼續 在你的裝置上接收即時通知。 - 切換至 Jetpack 應用程式,以便透過閱讀器搜尋、追蹤並按讚所有喜愛的網站及文章。 - 切換至 Jetpack 應用程式,以便透過統計資料和洞察報告,查看網站流量成長。 - 透過 Jetpack 應用程式接收通知 - 透過 Jetpack 應用程式追蹤任何網站 - 使用全新 Jetpack 應用程式取得統計資料 無法停用在 Jetpack 中開啟連結 無法啟用在 Jetpack 中開啟連結 在 Jetpack 中開啟連結 diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index b5cf97b2070a..f65d3bd7b170 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -624,8 +624,6 @@ Newest first 1 day %d days - 1 week - %d weeks https:\/\/ Close Submit @@ -4197,16 +4195,11 @@ translators: %s: Select control option value e.g: "Auto, 25%". --> Jetpack powered - Get the Jetpack app %1$s is moving soon - %1$s are moving soon - %1$s is moving in %2$s - %1$s are moving in %2$s - WordPress is better with Jetpack The new Jetpack app has Stats, Reader, Notifications, and more that make your WordPress better. @@ -4259,26 +4252,12 @@ translators: %s: Select control option value e.g: "Auto, 25%". --> Unable to disable open links in Jetpack - Get your stats using the new Jetpack app - Follow any site with the Jetpack app - Get your notifications with the Jetpack app - Switch to the Jetpack app to watch your site’s traffic grow with stats and insights. - Switch to the Jetpack app to find, follow, and like all your favorite sites and posts with Reader. - Switch to the Jetpack app to keep receiving realtime notifications on your device. - Switch to the new Jetpack app - Your stats are moving to the Jetpack app - Reader is moving to the Jetpack app - Notifications are moving to Jetpack - Jetpack features are moving soon. Jetpack features have moved. Stats, Reader, Notifications and other Jetpack powered features have been removed from the WordPress app. - Stats, Reader, Notifications and other Jetpack powered features will be removed from the WordPress app on %s. - Stats, Reader, Notifications and other Jetpack powered features will be removed from the WordPress app soon. Switching is free and only takes a minute. Learn more at jetpack.com Switch to the Jetpack app @string/wp_jetpack_continue_without_jetpack - @string/wp_jetpack_feature_removal_overlay_phase_two_and_three_description_without_deadline Switch to Jetpack Do this later Give WordPress a boost with Jetpack diff --git a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilderTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilderTest.kt deleted file mode 100644 index 6181b7a1b5bf..000000000000 --- a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilderTest.kt +++ /dev/null @@ -1,149 +0,0 @@ -package org.wordpress.android.ui.jetpackoverlay - -import androidx.arch.core.executor.testing.InstantTaskExecutorRule -import org.junit.Assert.assertEquals -import org.junit.Before -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.Mock -import org.mockito.junit.MockitoJUnitRunner -import org.mockito.kotlin.whenever -import org.wordpress.android.R -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureOverlayScreenType.STATS -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseOne -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseTwo -import org.wordpress.android.ui.utils.HtmlMessageUtils -import org.wordpress.android.ui.utils.UiString.UiStringRes -import org.wordpress.android.ui.utils.UiString.UiStringText -import org.wordpress.android.util.DateTimeUtilsWrapper - -private const val PHASE_TWO_BLOG_POST_LINK = "www.jetpack.com" -private const val JP_DEADLINE_MESSAGE = "Stats, Reader, Notifications and other Jetpack powered features will " + - "be removed from the WordPress app on January 1, 2020 " - -@RunWith(MockitoJUnitRunner::class) -class JetpackFeatureOverlayContentBuilderTest { - @Mock - private lateinit var htmlMessageUtils: HtmlMessageUtils - - @Mock - private lateinit var dateTimeUtilsWrapper: DateTimeUtilsWrapper - - @Rule - @JvmField - val rule = InstantTaskExecutorRule() - - private lateinit var jetpackFeatureOverlayContentBuilder: JetpackFeatureOverlayContentBuilder - - @Before - fun setup() { - jetpackFeatureOverlayContentBuilder = JetpackFeatureOverlayContentBuilder( - htmlMessageUtils, - dateTimeUtilsWrapper - ) - } - - @Test - fun `given phase one started, when content is built, should return phase one overlay content`() { - val phaseOneStats = jetpackFeatureOverlayContentBuilder.build( - JetpackFeatureOverlayContentBuilderParams( - PhaseOne, - false, - STATS - ) - ) - - assertEquals(phaseOneStats.overlayContent, getPhaseOneStats()) - } - - @Suppress("MaxLineLength") - @Test - fun `given phase two without remote field post link, when content is built, should return phase two overlay content`() { - val phaseTwoStats = jetpackFeatureOverlayContentBuilder.build( - JetpackFeatureOverlayContentBuilderParams( - PhaseTwo, - false, - STATS - ) - ) - - assertEquals(phaseTwoStats.overlayContent, getPhaseTwoStatsWithoutMigrationInfo()) - } - - @Suppress("MaxLineLength") - @Test - fun `given phase two with remote field post link, when content is built, should return phase two overlay content`() { - val phaseTwoStats = jetpackFeatureOverlayContentBuilder.build( - JetpackFeatureOverlayContentBuilderParams( - PhaseTwo, - false, - STATS, - phaseTwoBlogPostLink = PHASE_TWO_BLOG_POST_LINK - ) - ) - val actual = getPhaseTwoStatsWithoutMigrationInfo().copy( - migrationInfoUrl = PHASE_TWO_BLOG_POST_LINK, - migrationInfoText = R.string.wp_jetpack_feature_removal_overlay_learn_more_migration_text - ) - - assertEquals(phaseTwoStats.overlayContent, actual) - } - - @Suppress("MaxLineLength") - @Test - fun `given phase two with deadline, when content is built, should return phase two overlay content`() { - val jpDeadlineDateFromRemoteConfig = "2020-01-01" - val jpDeadlineDateToBeShownOnOverlay = "January 1, 2020" - val jpDeadlineDateToBeShownOnOverlayWithFormat = "January 1, 2020" - whenever( - htmlMessageUtils.getHtmlMessageFromStringFormatResId( - R.string.wp_jetpack_feature_removal_overlay_phase_two_and_three_description_with_deadline, - jpDeadlineDateToBeShownOnOverlayWithFormat - ) - ).thenReturn(JP_DEADLINE_MESSAGE) - whenever( - dateTimeUtilsWrapper.convertDateFormat( - jpDeadlineDateFromRemoteConfig, - JETPACK_OVERLAY_ORIGINAL_DATE_FORMAT, - JETPACK_OVERLAY_TARGET_DATE_FORMAT - ) - ).thenReturn(jpDeadlineDateToBeShownOnOverlay) - - val actualOverlayUiState = jetpackFeatureOverlayContentBuilder.build( - JetpackFeatureOverlayContentBuilderParams( - PhaseTwo, - false, - STATS, - jpDeadlineDate = jpDeadlineDateFromRemoteConfig - ) - ) - val expectedOverlayContent = getPhaseTwoStatsWithoutMigrationInfo().copy( - caption = UiStringText(JP_DEADLINE_MESSAGE) - ) - - assertEquals(expectedOverlayContent, actualOverlayUiState.overlayContent) - } - - private fun getPhaseOneStats(): JetpackFeatureOverlayContent { - return JetpackFeatureOverlayContent( - illustration = R.raw.jp_stats_left, - title = R.string.wp_jetpack_feature_removal_overlay_phase_one_title_stats, - caption = UiStringRes(R.string.wp_jetpack_feature_removal_overlay_phase_one_description_stats), - primaryButtonText = R.string.wp_jetpack_feature_removal_overlay_switch_to_new_jetpack_app, - secondaryButtonText = R.string.wp_jetpack_continue_to_stats - ) - } - - private fun getPhaseTwoStatsWithoutMigrationInfo(): JetpackFeatureOverlayContent { - return JetpackFeatureOverlayContent( - illustration = R.raw.jp_stats_left, - title = R.string.wp_jetpack_feature_removal_overlay_phase_two_and_three_title_stats, - caption = UiStringRes( - R.string.wp_jetpack_feature_removal_overlay_phase_two_and_three_description_without_deadline - ), - primaryButtonText = R.string.wp_jetpack_feature_removal_overlay_switch_to_new_jetpack_app, - secondaryButtonText = R.string.wp_jetpack_continue_to_stats - ) - } -} diff --git a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtilTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtilTest.kt deleted file mode 100644 index 52c3f5934c79..000000000000 --- a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtilTest.kt +++ /dev/null @@ -1,375 +0,0 @@ -package org.wordpress.android.ui.jetpackoverlay - -import androidx.annotation.StringRes -import androidx.arch.core.executor.testing.InstantTaskExecutorRule -import org.assertj.core.api.Assertions.assertThat -import org.junit.Assert.assertFalse -import org.junit.Assert.assertTrue -import org.junit.Before -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.junit.MockitoJUnitRunner -import org.mockito.kotlin.any -import org.mockito.kotlin.eq -import org.mockito.kotlin.mock -import org.mockito.kotlin.times -import org.mockito.kotlin.verify -import org.mockito.kotlin.verifyNoInteractions -import org.mockito.kotlin.whenever -import org.wordpress.android.R -import org.wordpress.android.models.JetpackPoweredScreen -import org.wordpress.android.ui.jetpackoverlay.JetpackBrandingUiState.Days -import org.wordpress.android.ui.jetpackoverlay.JetpackBrandingUiState.Pluralisable -import org.wordpress.android.ui.jetpackoverlay.JetpackBrandingUiState.Soon -import org.wordpress.android.ui.jetpackoverlay.JetpackBrandingUiState.Weeks -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseOne -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseThree -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseTwo -import org.wordpress.android.ui.utils.UiString -import org.wordpress.android.ui.utils.UiString.UiStringPluralRes -import org.wordpress.android.ui.utils.UiString.UiStringRes -import org.wordpress.android.ui.utils.UiString.UiStringResWithParams -import org.wordpress.android.util.DateTimeUtilsWrapper -import org.wordpress.android.util.config.JPDeadlineConfigStub -import java.time.ZoneId -import java.util.Date - -@RunWith(MockitoJUnitRunner::class) -class JetpackFeatureRemovalBrandingUtilTest { - private val jpDeadlineConfig = JPDeadlineConfigStub() - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper = mock() - private val dateTimeUtilsWrapper: DateTimeUtilsWrapper = mock() - - @Rule - @JvmField - val rule = InstantTaskExecutorRule() - - private lateinit var classToTest: JetpackFeatureRemovalBrandingUtil - - private val screensWithStaticText = JetpackPoweredScreen.WithStaticText.values().toList() - private val screensWithDynamicText = JetpackPoweredScreen.WithDynamicText.values().toList() - private val allJpScreens: List = screensWithStaticText + screensWithDynamicText - - @Before - fun setup() { - classToTest = JetpackFeatureRemovalBrandingUtil( - jetpackFeatureRemovalPhaseHelper, - jpDeadlineConfig.instance, - dateTimeUtilsWrapper, - ) - } - - // region Branding Visibility - @Test - fun `given phase one started, when phase one branding is checked, should return true`() { - givenPhase(PhaseOne) - - val shouldShowBranding = classToTest.shouldShowPhaseOneBranding() - - assertTrue(shouldShowBranding) - } - - @Test - fun `given phase one not started, when phase one branding is checked, should return false`() { - givenPhase(null) - val shouldShowBranding = classToTest.shouldShowPhaseOneBranding() - - assertFalse(shouldShowBranding) - } - - @Test - fun `given phase one not started, when phase two branding is checked, should return false`() { - givenPhase(null) - val shouldShowBranding = classToTest.shouldShowPhaseTwoBranding() - - assertFalse(shouldShowBranding) - } - - @Test - fun `given phase one started, when phase two branding is checked, should return false`() { - whenever(jetpackFeatureRemovalPhaseHelper.getCurrentPhase()).thenReturn(PhaseOne) - val shouldShowBranding = classToTest.shouldShowPhaseTwoBranding() - - assertFalse(shouldShowBranding) - } - - @Test - fun `given phase two started, when phase two branding is checked, should return true`() { - whenever(jetpackFeatureRemovalPhaseHelper.getCurrentPhase()).thenReturn(PhaseTwo) - val shouldShowBranding = classToTest.shouldShowPhaseTwoBranding() - - assertTrue(shouldShowBranding) - } - // endregion - - // region Branding Text - - @Test - fun `given phase 1 not started, all banners and badges should be Jetpack powered`() { - givenPhase(null) - - val actual = allJpScreens.map(classToTest::getBrandingTextByPhase) - - actual.assertAllMatch(R.string.wp_jetpack_powered) - } - - @Test - fun `given phase 1 started, all banners and badges should be Jetpack powered`() { - givenPhase(PhaseOne) - - val actual = allJpScreens.map(classToTest::getBrandingTextByPhase) - - actual.assertAllMatch(R.string.wp_jetpack_powered) - } - - @Test - fun `given phase 2 started, all banners and badges should be Get the Jetpack app`() { - givenPhase(PhaseTwo) - - val actual = allJpScreens.map(classToTest::getBrandingTextByPhase) - - actual.assertAllMatch(R.string.wp_jetpack_powered_phase_2) - } - - @Test - fun `given phase 3 started, on screens without dynamic branding, some branding should be Jetpack powered`() { - givenPhase(PhaseThree) - - val actual = screensWithStaticText.map(classToTest::getBrandingTextByPhase) - - actual.assertAllMatch(R.string.wp_jetpack_powered) - } - - @Test - fun `given phase 3 started, when deadline unknown, all other branding should be {Feature} {is,are} moving soon`() { - givenPhase(PhaseThree) - whenJpDeadlineIs(null) - - val actual = screensWithDynamicText.map { - classToTest.getBrandingTextByPhase(it) as UiStringResWithParams - } - - actual.assertDynamicTexts( - expectedPluralRes = Soon.RES_ARE_MOVING_SOON, - expectedSingularRes = Soon.RES_IS_MOVING_SOON, - expectedToHaveQuantity = false, - ) - verifyNoInteractions(dateTimeUtilsWrapper) - } - - @Test - fun `given phase 3 started, when deadline 32 days, all other branding should be {Feature} {is,are} moving soon`() { - givenPhase(PhaseThree) - whenJpDeadlineIs(32) - - val actual = screensWithDynamicText.map { - classToTest.getBrandingTextByPhase(it) as UiStringResWithParams - } - - actual.assertDynamicTexts( - expectedPluralRes = Soon.RES_ARE_MOVING_SOON, - expectedSingularRes = Soon.RES_IS_MOVING_SOON, - expectedToHaveQuantity = false, - ) - verifyDaysUntilDeadlineCounted() - } - - @Test - fun `given phase 3, when deadline in 29 days, other branding should be {Feature} {is,are} moving in {n} weeks`() { - givenPhase(PhaseThree) - val expectedInterval = Weeks(4) - whenJpDeadlineIs(29) - - val actual = screensWithDynamicText.map { - classToTest.getBrandingTextByPhase(it) as UiStringResWithParams - } - - actual.assertDynamicTexts( - expectedPluralRes = Pluralisable.RES_ARE_MOVING_IN, - expectedSingularRes = Pluralisable.RES_IS_MOVING_IN, - expectedToHaveQuantity = true, - ) - actual.assertQuantityTexts(expectedInterval) - verifyDaysUntilDeadlineCounted() - } - - @Suppress("MaxLineLength") - @Test - fun `given phase 3 started, when deadline is in 1 week, all other branding should be {Feature} {is,are} moving in 1 week`() { - givenPhase(PhaseThree) - val expectedInterval = Weeks(1) - whenJpDeadlineIs(13) - - val actual = screensWithDynamicText.map { - classToTest.getBrandingTextByPhase(it) as UiStringResWithParams - } - - actual.assertDynamicTexts( - expectedPluralRes = Pluralisable.RES_ARE_MOVING_IN, - expectedSingularRes = Pluralisable.RES_IS_MOVING_IN, - expectedToHaveQuantity = true, - ) - actual.assertQuantityTexts(expectedInterval) - verifyDaysUntilDeadlineCounted() - } - - @Suppress("MaxLineLength") - @Test - fun `given phase 3 started, when deadline is in 6 days, all other branding should be {Feature} {is,are} moving in n days`() { - givenPhase(PhaseThree) - val expectedInterval = Days(6) - whenJpDeadlineIs(expectedInterval.number.toInt()) - - val actual = screensWithDynamicText.map { - classToTest.getBrandingTextByPhase(it) as UiStringResWithParams - } - - actual.assertDynamicTexts( - expectedPluralRes = Pluralisable.RES_ARE_MOVING_IN, - expectedSingularRes = Pluralisable.RES_IS_MOVING_IN, - expectedToHaveQuantity = true, - ) - actual.assertQuantityTexts(expectedInterval) - verifyDaysUntilDeadlineCounted() - } - - @Suppress("MaxLineLength") - @Test - fun `given phase 3 started, when deadline is in 1 day, all other branding should be {Feature} {is,are} moving in 1 day`() { - givenPhase(PhaseThree) - val expectedInterval = Days(1) - whenJpDeadlineIs(expectedInterval.number.toInt()) - - val actual = screensWithDynamicText.map { - classToTest.getBrandingTextByPhase(it) as UiStringResWithParams - } - - actual.assertDynamicTexts( - expectedPluralRes = Pluralisable.RES_ARE_MOVING_IN, - expectedSingularRes = Pluralisable.RES_IS_MOVING_IN, - expectedToHaveQuantity = true, - ) - actual.assertQuantityTexts(expectedInterval) - verifyDaysUntilDeadlineCounted() - } - - @Suppress("MaxLineLength") - @Test - fun `given phase 3 started, when deadline is in 0 days, all other branding should be {Feature} {is,are} moving in 1 day`() { - givenPhase(PhaseThree) - val expectedInterval = Days(1) - whenJpDeadlineIs(0) - - val actual = screensWithDynamicText.map { - classToTest.getBrandingTextByPhase(it) as UiStringResWithParams - } - - actual.assertDynamicTexts( - expectedPluralRes = Pluralisable.RES_ARE_MOVING_IN, - expectedSingularRes = Pluralisable.RES_IS_MOVING_IN, - expectedToHaveQuantity = true, - ) - actual.assertQuantityTexts(expectedInterval) - verifyDaysUntilDeadlineCounted() - } - - @Test - fun `given phase 3 started, when deadline has passed, all other branding should be Jetpack powered`() { - givenPhase(PhaseThree) - whenJpDeadlineIs(-15) - - val actual = screensWithDynamicText.map(classToTest::getBrandingTextByPhase) - - actual.assertAllMatch(R.string.wp_jetpack_powered) - verifyDaysUntilDeadlineCounted() - } - - @Test - fun `given phase 4 started, all banners and badges should be Jetpack powered`() { - givenPhase(PhaseFour) - - val actual = allJpScreens.map(classToTest::getBrandingTextByPhase) - - actual.assertAllMatch(R.string.wp_jetpack_powered) - verifyNoInteractions(dateTimeUtilsWrapper) - } - - @Test - fun `given static posters phase started, all banners and badges should be Jetpack powered`() { - givenPhase(JetpackFeatureRemovalPhase.PhaseStaticPosters) - - val actual = allJpScreens.map(classToTest::getBrandingTextByPhase) - - actual.assertAllMatch(R.string.wp_jetpack_powered) - verifyNoInteractions(dateTimeUtilsWrapper) - } - - // endregion - - // region Helpers - - private fun givenPhase(phase: JetpackFeatureRemovalPhase?) { - whenever(jetpackFeatureRemovalPhaseHelper.getCurrentPhase()).thenReturn(phase) - } - - private fun whenJpDeadlineIs(daysAway: Int?) { - whenever(jpDeadlineConfig.appConfig.getRemoteFieldConfigValue(any())).thenReturn(daysAway?.toString() ?: "") - daysAway?.toLong()?.let { - val today = Date(System.currentTimeMillis()) - val deadline = Date.from(today.toInstant().atZone(ZoneId.systemDefault()).plusDays(it).toInstant()) - whenever(dateTimeUtilsWrapper.getTodaysDate()).thenReturn(today) - whenever(dateTimeUtilsWrapper.parseDateString(any(), any())).thenReturn(deadline) - } - } - - private fun List.assertAllMatch(@StringRes expected: Int) { - assertThat(this).allMatch { it == UiStringRes(expected) } - } - - private fun List.assertDynamicTexts( - @StringRes expectedPluralRes: Int, - @StringRes expectedSingularRes: Int, - expectedToHaveQuantity: Boolean, - ) { - val actualFeatureNames = map { it.params[0] } - val expectedFeatureNames = screensWithDynamicText.map { it.featureName } - assertThat(actualFeatureNames).isEqualTo(expectedFeatureNames) - - val actualStringRes = map { it.stringRes } - - // Assert plurals stringRes - val actualPlurals = actualStringRes.filter { it == expectedPluralRes } - assertThat(actualPlurals).containsOnly(expectedPluralRes) - assertThat(actualPlurals).hasSameSizeAs(screensWithDynamicText.filter { it.isPlural }) - - // Assert singulars stringRes - val actualSingulars = actualStringRes.filter { it == expectedSingularRes } - assertThat(actualSingulars).containsOnly(expectedSingularRes) - assertThat(actualSingulars).hasSameSizeAs(screensWithDynamicText.filter { !it.isPlural }) - - // Assert params - val actualParams = map { it.params } - assertThat(actualParams).allMatch { it.size == if (expectedToHaveQuantity) 2 else 1 } - } - - private fun List.assertQuantityTexts( - expected: Pluralisable, - ) { - val actualQuantity = map { it.params[1] as UiStringPluralRes } - assertThat(actualQuantity.map { it.zeroRes }).containsOnly(expected.otherRes) - assertThat(actualQuantity.map { it.oneRes }).containsOnly(expected.oneRes) - assertThat(actualQuantity.map { it.otherRes }).containsOnly(expected.otherRes) - assertThat(actualQuantity.map { it.count }).containsOnly(expected.number.toInt()) - } - - private fun verifyDaysUntilDeadlineCounted() { - verify(dateTimeUtilsWrapper, times(screensWithDynamicText.size)).getTodaysDate() - verify(dateTimeUtilsWrapper, times(screensWithDynamicText.size)).parseDateString( - any(), - eq(JETPACK_OVERLAY_ORIGINAL_DATE_FORMAT) - ) - } - // endregion -} diff --git a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtilTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtilTest.kt deleted file mode 100644 index 5c097e27c904..000000000000 --- a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtilTest.kt +++ /dev/null @@ -1,189 +0,0 @@ -package org.wordpress.android.ui.jetpackoverlay - -import kotlinx.coroutines.ExperimentalCoroutinesApi -import org.junit.Assert.assertFalse -import org.junit.Assert.assertTrue -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.Mock -import org.mockito.junit.MockitoJUnitRunner -import org.mockito.kotlin.any -import org.mockito.kotlin.whenever -import org.wordpress.android.BaseUnitTest -import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayPhase.PHASE_ONE -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayPhase.PHASE_THREE -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseOne -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseThree -import org.wordpress.android.ui.jetpackoverlay.JetpackOverlayConnectedFeature.STATS -import org.wordpress.android.ui.mysite.SelectedSiteRepository -import org.wordpress.android.util.BuildConfigWrapper -import org.wordpress.android.util.DateTimeUtilsWrapper -import org.wordpress.android.util.SiteUtilsWrapper -import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper -import java.util.Date - -private const val ONE_DAY_TIME_IN_MILLIS = 1000L * 60L * 60L * 24L - -@ExperimentalCoroutinesApi -@RunWith(MockitoJUnitRunner::class) -class JetpackFeatureRemovalOverlayUtilTest : BaseUnitTest() { - @Mock - private lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper - - @Mock - private lateinit var jetpackFeatureOverlayShownTracker: JetpackFeatureOverlayShownTracker - - @Mock - private lateinit var selectedSiteRepository: SelectedSiteRepository - - @Mock - private lateinit var siteUtilsWrapper: SiteUtilsWrapper - - @Mock - private lateinit var buildConfigWrapper: BuildConfigWrapper - - @Mock - private lateinit var dateTimeUtilsWrapper: DateTimeUtilsWrapper - - @Mock - private lateinit var analyticsTrackerWrapper: AnalyticsTrackerWrapper - - private lateinit var jetpackFeatureRemovalOverlayUtil: JetpackFeatureRemovalOverlayUtil - - private val currentMockedDate = Date(System.currentTimeMillis()) - - @Before - fun setup() { - jetpackFeatureRemovalOverlayUtil = JetpackFeatureRemovalOverlayUtil( - jetpackFeatureRemovalPhaseHelper, - jetpackFeatureOverlayShownTracker, - selectedSiteRepository, - siteUtilsWrapper, - buildConfigWrapper, - dateTimeUtilsWrapper, - analyticsTrackerWrapper - ) - } - - // general phase tests - @Test - fun `given jetpack app, shouldShowFeatureSpecificJetpackOverlay invoked, then return false`() { - whenever(buildConfigWrapper.isJetpackApp).thenReturn(true) - - val shouldShowOverlay = jetpackFeatureRemovalOverlayUtil - .shouldShowFeatureSpecificJetpackOverlay(STATS) - - assertFalse(shouldShowOverlay) - } - - @Test - fun `given non wpcomSite, shouldShowFeatureSpecificJetpackOverlay invoked, then return false`() { - val fakeSiteModel = SiteModel() - whenever(selectedSiteRepository.getSelectedSite()).thenReturn(fakeSiteModel) - whenever(siteUtilsWrapper.isAccessedViaWPComRest(fakeSiteModel)).thenReturn(false) - - val shouldShowOverlay = jetpackFeatureRemovalOverlayUtil - .shouldShowFeatureSpecificJetpackOverlay(STATS) - - assertFalse(shouldShowOverlay) - } - - @Test - @Suppress("MaxLineLength") - fun `given feature removal not started, when shouldShowFeatureSpecificJetpackOverlay invoked, then return false`() { - setupMockForWpComSite() - whenever(jetpackFeatureRemovalPhaseHelper.getCurrentPhase()).thenReturn(null) - - val shouldShowOverlay = jetpackFeatureRemovalOverlayUtil - .shouldShowFeatureSpecificJetpackOverlay(STATS) - - assertFalse(shouldShowOverlay) - } - - @Test - @Suppress("MaxLineLength") - fun `given feature removal in phase four, when shouldShowFeatureSpecificJetpackOverlay invoked, then return false`() { - setupMockForWpComSite() - whenever(jetpackFeatureRemovalPhaseHelper.getCurrentPhase()).thenReturn(PhaseFour) - - val shouldShowOverlay = jetpackFeatureRemovalOverlayUtil - .shouldShowFeatureSpecificJetpackOverlay(STATS) - - assertFalse(shouldShowOverlay) - } - - @Test - @Suppress("MaxLineLength") - fun `given feature is never accessed, when shouldShowFeatureSpecificJetpackOverlay invoked, then return true`() { - setupMockForWpComSite() - whenever(jetpackFeatureRemovalPhaseHelper.getCurrentPhase()).thenReturn(PhaseThree) - whenever( - jetpackFeatureOverlayShownTracker.getFeatureOverlayShownTimeStamp( - STATS, - PHASE_THREE - ) - ).thenReturn(null) - whenever( - jetpackFeatureOverlayShownTracker.getTheLastShownOverlayTimeStamp( - PHASE_THREE - ) - ).thenReturn(null) - - val shouldShowOverlay = jetpackFeatureRemovalOverlayUtil - .shouldShowFeatureSpecificJetpackOverlay(STATS) - - assertTrue(shouldShowOverlay) - } - - @Test - @Suppress("MaxLineLength") - fun `given feature is accessed after feature specific frequency, when shouldShowFeatureSpecificJetpackOverlay invoked, then return true`() { - setupMockForWpComSite() - // The passed number should exceed the feature specific overlay frequency - setUpMockForEarliestAccessedFeature(8) - - val shouldShowOverlay = jetpackFeatureRemovalOverlayUtil - .shouldShowFeatureSpecificJetpackOverlay(STATS) - - assertTrue(shouldShowOverlay) - } - - private fun setupMockForWpComSite() { - val fakeSiteModel = SiteModel() - whenever(selectedSiteRepository.getSelectedSite()).thenReturn(fakeSiteModel) - whenever(siteUtilsWrapper.isAccessedViaWPComRest(fakeSiteModel)).thenReturn(true) - } - - private fun setupMockForFeatureAccessed( - noOfDaysPastFeatureAccessed: Long, - ) { - val featureAccessedMockedTimeinMillis = (System.currentTimeMillis() - - (noOfDaysPastFeatureAccessed * ONE_DAY_TIME_IN_MILLIS)) - whenever(jetpackFeatureRemovalPhaseHelper.getCurrentPhase()).thenReturn(PhaseOne) - whenever( - jetpackFeatureOverlayShownTracker.getFeatureOverlayShownTimeStamp( - STATS, - PHASE_ONE - ) - ).thenReturn(featureAccessedMockedTimeinMillis) - whenever(dateTimeUtilsWrapper.getTodaysDate()).thenReturn(currentMockedDate) - whenever( - dateTimeUtilsWrapper.daysBetween( - any(), any() - ) - ).thenReturn(noOfDaysPastFeatureAccessed.toInt()) - } - - private fun setUpMockForEarliestAccessedFeature(noOfDaysPastFeatureAccessed: Long) { - val featureAccessedMockedTimeinMillis = (System.currentTimeMillis() - - (noOfDaysPastFeatureAccessed * ONE_DAY_TIME_IN_MILLIS)) - - whenever(jetpackFeatureOverlayShownTracker.getTheLastShownOverlayTimeStamp(PHASE_ONE)) - .thenReturn(featureAccessedMockedTimeinMillis) - - setupMockForFeatureAccessed(noOfDaysPastFeatureAccessed) - } -} diff --git a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt index d224fc09ed9b..740d895fbfb3 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt @@ -17,18 +17,12 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseNewUsers -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseOne -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseThree -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseTwo import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseSelfHostedUsers import org.wordpress.android.ui.main.WPMainNavigationView import org.wordpress.android.util.BuildConfigWrapper import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.util.config.JetpackFeatureRemovalNewUsersConfig import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseFourConfig -import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseOneConfig -import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseThreeConfig -import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseTwoConfig import org.wordpress.android.util.config.JetpackFeatureRemovalSelfHostedUsersConfig import org.wordpress.android.util.config.JetpackFeatureRemovalStaticPostersConfig import org.wordpress.android.util.config.PhaseFourOverlayFrequencyConfig @@ -39,15 +33,6 @@ class JetpackFeatureRemovalPhaseHelperTest : BaseUnitTest() { @Mock private lateinit var buildConfigWrapper: BuildConfigWrapper - @Mock - private lateinit var jetpackFeatureRemovalPhaseOneConfig: JetpackFeatureRemovalPhaseOneConfig - - @Mock - private lateinit var jetpackFeatureRemovalPhaseTwoConfig: JetpackFeatureRemovalPhaseTwoConfig - - @Mock - private lateinit var jetpackFeatureRemovalPhaseThreeConfig: JetpackFeatureRemovalPhaseThreeConfig - @Mock private lateinit var jetpackFeatureRemovalPhaseFourConfig: JetpackFeatureRemovalPhaseFourConfig @@ -72,9 +57,6 @@ class JetpackFeatureRemovalPhaseHelperTest : BaseUnitTest() { fun setup() { jetpackFeatureRemovalPhaseHelper = JetpackFeatureRemovalPhaseHelper( buildConfigWrapper, - jetpackFeatureRemovalPhaseOneConfig, - jetpackFeatureRemovalPhaseTwoConfig, - jetpackFeatureRemovalPhaseThreeConfig, jetpackFeatureRemovalPhaseFourConfig, jetpackFeatureRemovalNewUsersConfig, jetpackFeatureRemovalSelfHostedUsersConfig, @@ -94,33 +76,6 @@ class JetpackFeatureRemovalPhaseHelperTest : BaseUnitTest() { assertNull(currentPhase) } - @Test - fun `given phase one config true, when current phase is fetched, then return phase one`() { - whenever(jetpackFeatureRemovalPhaseOneConfig.isEnabled()).thenReturn(true) - - val currentPhase = jetpackFeatureRemovalPhaseHelper.getCurrentPhase() - - assertEquals(currentPhase, PhaseOne) - } - - @Test - fun `given phase two config true, when current phase is fetched, then return phase two`() { - whenever(jetpackFeatureRemovalPhaseTwoConfig.isEnabled()).thenReturn(true) - - val currentPhase = jetpackFeatureRemovalPhaseHelper.getCurrentPhase() - - assertEquals(currentPhase, PhaseTwo) - } - - @Test - fun `given phase three config true, when current phase is fetched, then return phase three`() { - whenever(jetpackFeatureRemovalPhaseThreeConfig.isEnabled()).thenReturn(true) - - val currentPhase = jetpackFeatureRemovalPhaseHelper.getCurrentPhase() - - assertEquals(currentPhase, PhaseThree) - } - @Test fun `given phase four config true, when current phase is fetched, then return phase four`() { whenever(jetpackFeatureRemovalPhaseFourConfig.isEnabled()).thenReturn(true) diff --git a/WordPress/src/test/java/org/wordpress/android/ui/mysite/DashboardItemsViewModelSliceTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/mysite/DashboardItemsViewModelSliceTest.kt index 3425fb5ff15b..0e531e950fa6 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/mysite/DashboardItemsViewModelSliceTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/mysite/DashboardItemsViewModelSliceTest.kt @@ -20,7 +20,6 @@ import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.ui.mysite.cards.jetpackfeature.JetpackFeatureCardHelper import org.wordpress.android.ui.mysite.cards.sotw2023.WpSotw2023NudgeCardViewModelSlice import org.wordpress.android.ui.mysite.items.DashboardItemsViewModelSlice -import org.wordpress.android.ui.mysite.items.jetpackBadge.JetpackBadgeViewModelSlice import org.wordpress.android.ui.mysite.items.jetpackSwitchmenu.JetpackSwitchMenuViewModelSlice import org.wordpress.android.ui.mysite.items.jetpackfeaturecard.JetpackFeatureCardViewModelSlice import org.wordpress.android.ui.mysite.items.listitem.SiteItemsViewModelSlice @@ -36,9 +35,6 @@ class DashboardItemsViewModelSliceTest: BaseUnitTest() { @Mock lateinit var jetpackSwitchMenuViewModelSlice: JetpackSwitchMenuViewModelSlice - @Mock - lateinit var jetpackBadgeViewModelSlice: JetpackBadgeViewModelSlice - @Mock lateinit var siteItemsViewModelSlice: SiteItemsViewModelSlice @@ -64,7 +60,6 @@ class DashboardItemsViewModelSliceTest: BaseUnitTest() { fun setup() { whenever(jetpackFeatureCardViewModelSlice.uiModel).thenReturn(MutableLiveData()) whenever(jetpackSwitchMenuViewModelSlice.uiModel).thenReturn(MutableLiveData()) - whenever(jetpackBadgeViewModelSlice.uiModel).thenReturn(MutableLiveData()) whenever(siteItemsViewModelSlice.uiModel).thenReturn(MutableLiveData()) whenever(sotw2023NudgeCardViewModelSlice.uiModel).thenReturn(MutableLiveData()) @@ -72,7 +67,6 @@ class DashboardItemsViewModelSliceTest: BaseUnitTest() { testDispatcher(), jetpackFeatureCardViewModelSlice, jetpackSwitchMenuViewModelSlice, - jetpackBadgeViewModelSlice, siteItemsViewModelSlice, sotw2023NudgeCardViewModelSlice, jetpackFeatureCardHelper @@ -113,7 +107,6 @@ class DashboardItemsViewModelSliceTest: BaseUnitTest() { verify(siteItemsViewModelSlice, atLeastOnce()).buildSiteItems(any()) verify(jetpackFeatureCardViewModelSlice, atMost(1)).buildJetpackFeatureCard() verify(jetpackSwitchMenuViewModelSlice, atMost(1)).buildJetpackSwitchMenu() - verify(jetpackBadgeViewModelSlice, atMost(1)).buildJetpackBadge() verify(siteItemsViewModelSlice, atMost(1)).buildSiteItems(mockSite) verify(sotw2023NudgeCardViewModelSlice, atMost(1)).buildCard() } @@ -126,7 +119,6 @@ class DashboardItemsViewModelSliceTest: BaseUnitTest() { verify(siteItemsViewModelSlice).clearValue() verify(jetpackFeatureCardViewModelSlice).clearValue() verify(jetpackSwitchMenuViewModelSlice).clearValue() - verify(jetpackBadgeViewModelSlice).clearValue() verify(sotw2023NudgeCardViewModelSlice).clearValue() } diff --git a/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelperTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelperTest.kt index 4a03f04aaf9e..8c581d1a4c72 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelperTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelperTest.kt @@ -62,23 +62,14 @@ class JetpackFeatureCardHelperTest { } @Test - fun `when not third phase, then jetpack feature card should not show`() { - setTest(phase = JetpackFeatureRemovalPhase.PhaseTwo) + fun `when static posters phase, then jetpack feature card should not show`() { + setTest(phase = JetpackFeatureRemovalPhase.PhaseStaticPosters) val result = helper.shouldShowJetpackFeatureCard() assertThat(result).isFalse } - @Test - fun `when phase three, then jetpack feature card should show`() { - setTest(phase = JetpackFeatureRemovalPhase.PhaseThree) - - val result = helper.shouldShowJetpackFeatureCard() - - assertThat(result).isTrue - } - @Test fun `when hide card has been set, then jetpack feature card should not shown`() { setTest(isCardHiddenByUser = true) @@ -107,7 +98,7 @@ class JetpackFeatureCardHelperTest { } private fun setTest( - phase: JetpackFeatureRemovalPhase = JetpackFeatureRemovalPhase.PhaseThree, + phase: JetpackFeatureRemovalPhase = JetpackFeatureRemovalPhase.PhaseSelfHostedUsers, isJetpackApp: Boolean = false, isCardHiddenByUser: Boolean = false, lastShownTimestamp: Long = 0L diff --git a/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/jetpackBadge/JetpackBadgeViewModelSliceTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/jetpackBadge/JetpackBadgeViewModelSliceTest.kt deleted file mode 100644 index e08bb1e68125..000000000000 --- a/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/jetpackBadge/JetpackBadgeViewModelSliceTest.kt +++ /dev/null @@ -1,94 +0,0 @@ -package org.wordpress.android.ui.mysite.items.jetpackBadge - -import junit.framework.TestCase.assertEquals -import junit.framework.TestCase.assertNull -import kotlinx.coroutines.ExperimentalCoroutinesApi -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.Mock -import org.mockito.junit.MockitoJUnitRunner -import org.mockito.kotlin.whenever -import org.wordpress.android.BaseUnitTest -import org.wordpress.android.models.JetpackPoweredScreen -import org.wordpress.android.ui.mysite.MySiteCardAndItem -import org.wordpress.android.ui.mysite.SiteNavigationAction -import org.wordpress.android.ui.utils.UiString -import org.wordpress.android.util.JetpackBrandingUtils - -@ExperimentalCoroutinesApi -@RunWith(MockitoJUnitRunner::class) -class JetpackBadgeViewModelSliceTest : BaseUnitTest() { - @Mock - lateinit var jetpackBrandingUtils: JetpackBrandingUtils - - private lateinit var viewModelSlice: JetpackBadgeViewModelSlice - - private lateinit var uiModels: MutableList - - private lateinit var navigationEvents: MutableList - - @Before - fun setUp() { - viewModelSlice = JetpackBadgeViewModelSlice(jetpackBrandingUtils) - - uiModels = mutableListOf() - viewModelSlice.uiModel.observeForever { - uiModels.add(it) - } - - navigationEvents = mutableListOf() - viewModelSlice.onNavigation.observeForever { - it?.let { navigationEvents.add(it.peekContent()) } - } - } - - @Test - fun `given jetpack branding should not be shown, ui model is null`() = test { - // given - whenever(jetpackBrandingUtils.shouldShowJetpackBrandingInDashboard()).thenReturn(false) - - // when - viewModelSlice.buildJetpackBadge() - advanceUntilIdle() - - // then - assertNull(uiModels[0]) - } - - @Test - fun `given jetpack branding should be shown, ui model is not null`() = test { - // given - val brandingText = UiString.UiStringText("Jetpack") - whenever(jetpackBrandingUtils.shouldShowJetpackBrandingInDashboard()).thenReturn(true) - whenever(jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()).thenReturn(true) - whenever(jetpackBrandingUtils.getBrandingTextForScreen(JetpackPoweredScreen.WithStaticText.HOME)) - .thenReturn(brandingText) - - // when - viewModelSlice.buildJetpackBadge() - - // then - assertEquals(1, uiModels.size) - assertEquals(brandingText, uiModels[0]?.text) - } - - @Test - fun `given jetpack branding should be shown, when badge is clicked, then navigation event is emitted`() = test { - // given - val brandingText = UiString.UiStringText("Jetpack") - whenever(jetpackBrandingUtils.shouldShowJetpackBrandingInDashboard()).thenReturn(true) - whenever(jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()).thenReturn(true) - whenever(jetpackBrandingUtils.getBrandingTextForScreen(JetpackPoweredScreen.WithStaticText.HOME)) - .thenReturn(brandingText) - - // when - viewModelSlice.buildJetpackBadge() - uiModels[0]?.onClick?.click() - - // then - assertEquals(1, navigationEvents.size) - assertEquals(SiteNavigationAction.OpenJetpackPoweredBottomSheet, navigationEvents[0]) - } -} - diff --git a/WordPress/src/test/java/org/wordpress/android/ui/notifications/NotificationsListViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/notifications/NotificationsListViewModelTest.kt index 316d94a0f9aa..adb69b285695 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/notifications/NotificationsListViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/notifications/NotificationsListViewModelTest.kt @@ -26,7 +26,6 @@ import org.wordpress.android.fluxc.utils.AppLogWrapper import org.wordpress.android.models.Note import org.wordpress.android.models.ReaderPost import org.wordpress.android.push.GCMMessageHandler -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil import org.wordpress.android.ui.notifications.utils.NotificationsActionsWrapper import org.wordpress.android.ui.notifications.utils.NotificationsUtilsWrapper import org.wordpress.android.ui.prefs.AppPrefsWrapper @@ -44,9 +43,6 @@ class NotificationsListViewModelTest : BaseUnitTest() { @Mock private lateinit var appPrefsWrapper: AppPrefsWrapper - @Mock - private lateinit var jetpackFeatureRemovalOverlayUtil: JetpackFeatureRemovalOverlayUtil - @Mock private lateinit var gcmMessageHandler: GCMMessageHandler @@ -100,7 +96,6 @@ class NotificationsListViewModelTest : BaseUnitTest() { testDispatcher(), testDispatcher(), appPrefsWrapper, - jetpackFeatureRemovalOverlayUtil, gcmMessageHandler, networkUtilsWrapper, toastUtilsWrapper, diff --git a/WordPress/src/test/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModelTest.kt index bcda10450de5..2a8fafa527e2 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModelTest.kt @@ -11,7 +11,6 @@ import org.mockito.kotlin.whenever import org.wordpress.android.BaseUnitTest import org.wordpress.android.fluxc.store.AccountStore import org.wordpress.android.models.ReaderTagList -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil import org.wordpress.android.ui.prefs.AppPrefsWrapper import org.wordpress.android.ui.reader.tracker.ReaderTracker import org.wordpress.android.ui.reader.usecases.LoadReaderItemsUseCase @@ -47,9 +46,6 @@ class ReaderViewModelTest : BaseUnitTest() { @Mock lateinit var jetpackBrandingUtils: JetpackBrandingUtils - @Mock - lateinit var jetpackFeatureRemovalOverlayUtil: JetpackFeatureRemovalOverlayUtil - @Mock lateinit var readerTagsFeedFeatureConfig: ReaderTagsFeedFeatureConfig @@ -66,7 +62,6 @@ class ReaderViewModelTest : BaseUnitTest() { readerTracker, accountStore, jetpackBrandingUtils, - jetpackFeatureRemovalOverlayUtil, ReaderTopBarMenuHelper(readerTagsFeedFeatureConfig), urlUtilsWrapper, readerTagsFeedFeatureConfig, diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/StatsViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/StatsViewModelTest.kt index 77904a2751f1..88d78d38c258 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/StatsViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/StatsViewModelTest.kt @@ -23,8 +23,6 @@ import org.wordpress.android.analytics.AnalyticsTracker.Stat.STATS_PERIOD_YEARS_ import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.network.utils.StatsGranularity import org.wordpress.android.fluxc.store.StatsStore -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil -import org.wordpress.android.ui.jetpackoverlay.JetpackOverlayConnectedFeature.STATS import org.wordpress.android.ui.notifications.SystemNotificationsTracker import org.wordpress.android.ui.pages.SnackbarMessageHolder import org.wordpress.android.ui.stats.refresh.StatsViewModel.StatsModuleUiModel @@ -95,9 +93,6 @@ class StatsViewModelTest : BaseUnitTest() { @Mock lateinit var jetpackBrandingUtils: JetpackBrandingUtils - @Mock - lateinit var jetpackFeatureRemovalOverlayUtil: JetpackFeatureRemovalOverlayUtil - @Mock lateinit var trafficSubscribersTabFeatureConfig: StatsTrafficSubscribersTabsFeatureConfig private lateinit var viewModel: StatsViewModel @@ -126,7 +121,6 @@ class StatsViewModelTest : BaseUnitTest() { statsModuleActivateUseCase, notificationsTracker, jetpackBrandingUtils, - jetpackFeatureRemovalOverlayUtil, trafficSubscribersTabFeatureConfig ) @@ -311,32 +305,6 @@ class StatsViewModelTest : BaseUnitTest() { assertThat(showJetpackPoweredBottomSheetEvent.last().peekContent()).isFalse } - @Test - fun `given wp app, when jetpack overlay feature is false, then jp fullscreen overlay is not shown`() { - val showJetpackOverlayEvent = mutableListOf>(Event(false)) - viewModel.showJetpackOverlay.observeForever { - showJetpackOverlayEvent.add(it) - } - whenever(jetpackFeatureRemovalOverlayUtil.shouldShowFeatureSpecificJetpackOverlay(STATS)).thenReturn(false) - - startViewModel() - - assertThat(showJetpackOverlayEvent.last().peekContent()).isFalse - } - - @Test - fun `given wp app, when jetpack overlay feature is true, then jp fullscreen overlay is shown`() { - val showJetpackOverlayEvent = mutableListOf>(Event(false)) - viewModel.showJetpackOverlay.observeForever { - showJetpackOverlayEvent.add(it) - } - whenever(jetpackFeatureRemovalOverlayUtil.shouldShowFeatureSpecificJetpackOverlay(STATS)).thenReturn(true) - - startViewModel() - - assertThat(showJetpackOverlayEvent.last().peekContent()).isTrue() - } - private fun initObservers(): Observers { val uiModelChangeObserver = mutableListOf() viewModel.statsModuleUiModel.observeForever { uiModelChangeObserver.add(it.peekContent()) } diff --git a/WordPress/src/test/java/org/wordpress/android/util/config/JPDeadlineConfigStub.kt b/WordPress/src/test/java/org/wordpress/android/util/config/JPDeadlineConfigStub.kt deleted file mode 100644 index 1c2d8020f27b..000000000000 --- a/WordPress/src/test/java/org/wordpress/android/util/config/JPDeadlineConfigStub.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.wordpress.android.util.config - -import org.mockito.kotlin.mock - -class JPDeadlineConfigStub( - val appConfig: AppConfig = mock(), - val instance: JPDeadlineConfig = JPDeadlineConfig(appConfig), -) From aa6d35ad8d08636811973e4952b2f86dec07f451 Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Thu, 13 Aug 2026 12:29:21 -0400 Subject: [PATCH 02/16] CMM-2302: Remove the shadowed Jetpack feature-removal static-posters phase The static-posters phase replaced Reader, Notifications and Stats with poster screens on the way to full removal. jp_removal_static_posters is true in production, but jp_removal_self_hosted is checked first in getCurrentPhase(), so PhaseStaticPosters is shadowed and shouldShowStaticPage() is always false. Removed: - PhaseStaticPosters, its config, BuildConfig field and manifest entry - ui/main/jetpack/staticposter/ and JetpackStaticPosterActivity - shouldShowStaticPage() and its 16 call sites, including the bottom navigation's poster/real fragment swapping in WPMainNavigationView - ActivityLauncher.showJetpackStaticPoster(), SiteNavigationAction.ShowJetpackRemovalStaticPostersView, DeepLinkNavigator.NavigateAction.OpenJetpackStaticPosterView and JetpackPoweredScreen.WithStaticPoster - The debug fragment-preview mechanism, whose only registered entry was the static poster: PreviewFragmentActivity, the PREVIEWS registry, UiItem.preview and the preview icon in DebugSettingsItemViewHolder - FeatureCollectionPhase.Final and two else branches that -Werror flagged as redundant once the remaining whens became exhaustive - 8 orphaned string keys across 29 locales Also removes two string keys missed by the previous commit, where a shell append concatenated them into a single malformed entry. No behaviour change: PhaseStaticPosters was already unreachable. --- WordPress/build.gradle | 1 - WordPress/src/debug/AndroidManifest.xml | 3 - WordPress/src/main/AndroidManifest.xml | 5 - .../android/models/JetpackPoweredScreen.kt | 7 - .../android/ui/ActivityLauncher.java | 6 - .../android/ui/ShortcutsNavigator.java | 6 +- .../android/ui/debug/DebugSettingsActivity.kt | 4 - .../ui/debug/DebugSettingsItemViewHolder.kt | 2 - .../ui/debug/DebugSettingsViewModel.kt | 14 +- .../org/wordpress/android/ui/debug/UIState.kt | 2 - .../debug/previews/PreviewFragmentActivity.kt | 50 ------ .../android/ui/deeplinks/DeepLinkNavigator.kt | 3 - .../ui/deeplinks/handlers/StatsLinkHandler.kt | 2 - .../JetpackFeatureOverlayContentBuilder.kt | 5 - .../JetpackFeatureRemovalBrandingUtil.kt | 3 +- .../JetpackFeatureRemovalOverlayUtil.kt | 1 - .../JetpackFeatureRemovalPhaseHelper.kt | 52 +----- .../JetpackFeatureRemovalWidgetHelper.kt | 3 +- .../jetpackoverlay/JetpackOverlayUIState.kt | 2 - .../JetpackStaticPosterActivity.kt | 46 ----- .../android/ui/main/BaseAppCompatActivity.kt | 2 - .../android/ui/main/WPMainActivity.java | 4 - .../android/ui/main/WPMainNavigationView.kt | 42 +---- .../JetpackStaticPosterFragment.kt | 82 --------- .../JetpackStaticPosterViewModel.kt | 90 ---------- .../compose/JetpackStaticPoster.kt | 170 ------------------ .../android/ui/mysite/MySiteFragment.kt | 3 - .../android/ui/mysite/SiteNavigationAction.kt | 1 - .../ui/mysite/cards/ListItemActionHandler.kt | 4 - .../todaysstats/TodaysStatsViewModelSlice.kt | 15 +- .../ui/reader/ReaderPostPagerActivity.kt | 11 +- .../android/ui/stats/refresh/StatsActivity.kt | 7 +- ...etpackFeatureRemovalStaticPostersConfig.kt | 22 --- WordPress/src/main/res/values-ar/strings.xml | 8 - WordPress/src/main/res/values-cs/strings.xml | 8 - WordPress/src/main/res/values-de/strings.xml | 8 - .../src/main/res/values-en-rCA/strings.xml | 8 - .../src/main/res/values-en-rGB/strings.xml | 8 - .../src/main/res/values-es-rCL/strings.xml | 8 - .../src/main/res/values-es-rCO/strings.xml | 8 - WordPress/src/main/res/values-es/strings.xml | 8 - .../src/main/res/values-fr-rCA/strings.xml | 8 - WordPress/src/main/res/values-fr/strings.xml | 8 - WordPress/src/main/res/values-gl/strings.xml | 8 - WordPress/src/main/res/values-he/strings.xml | 8 - WordPress/src/main/res/values-id/strings.xml | 8 - WordPress/src/main/res/values-it/strings.xml | 8 - WordPress/src/main/res/values-ja/strings.xml | 8 - WordPress/src/main/res/values-ko/strings.xml | 8 - WordPress/src/main/res/values-lv/strings.xml | 8 - WordPress/src/main/res/values-nl/strings.xml | 8 - WordPress/src/main/res/values-pl/strings.xml | 8 - .../src/main/res/values-pt-rBR/strings.xml | 8 - WordPress/src/main/res/values-ro/strings.xml | 8 - WordPress/src/main/res/values-ru/strings.xml | 8 - WordPress/src/main/res/values-sq/strings.xml | 8 - WordPress/src/main/res/values-sv/strings.xml | 8 - WordPress/src/main/res/values-tr/strings.xml | 8 - .../src/main/res/values-zh-rCN/strings.xml | 8 - .../src/main/res/values-zh-rHK/strings.xml | 8 - .../src/main/res/values-zh-rTW/strings.xml | 8 - WordPress/src/main/res/values/strings.xml | 9 - .../JetpackFeatureRemovalPhaseHelperTest.kt | 39 +--- .../TodaysStatsViewModelSliceTest.kt | 12 -- .../JetpackFeatureCardHelperTest.kt | 9 - 65 files changed, 26 insertions(+), 937 deletions(-) delete mode 100644 WordPress/src/main/java/org/wordpress/android/ui/debug/previews/PreviewFragmentActivity.kt delete mode 100644 WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackStaticPosterActivity.kt delete mode 100644 WordPress/src/main/java/org/wordpress/android/ui/main/jetpack/staticposter/JetpackStaticPosterFragment.kt delete mode 100644 WordPress/src/main/java/org/wordpress/android/ui/main/jetpack/staticposter/JetpackStaticPosterViewModel.kt delete mode 100644 WordPress/src/main/java/org/wordpress/android/ui/main/jetpack/staticposter/compose/JetpackStaticPoster.kt delete mode 100644 WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalStaticPostersConfig.kt diff --git a/WordPress/build.gradle b/WordPress/build.gradle index b12dc547ef19..766d435bcf3f 100644 --- a/WordPress/build.gradle +++ b/WordPress/build.gradle @@ -142,7 +142,6 @@ android { buildConfigField "boolean", "JETPACK_MIGRATION_FLOW", "false" buildConfigField "boolean", "JETPACK_FEATURE_REMOVAL_PHASE_FOUR", "false" buildConfigField "boolean", "JETPACK_FEATURE_REMOVAL_NEW_USERS", "false" - buildConfigField "boolean", "JETPACK_FEATURE_REMOVAL_STATIC_POSTERS", "false" buildConfigField "boolean", "JETPACK_FEATURE_REMOVAL_SELF_HOSTED_USERS", "false" buildConfigField "boolean", "PREVENT_DUPLICATE_NOTIFS_REMOTE_FIELD", "false" buildConfigField "boolean", "OPEN_WEB_LINKS_WITH_JETPACK_FLOW", "false" diff --git a/WordPress/src/debug/AndroidManifest.xml b/WordPress/src/debug/AndroidManifest.xml index e036ed252073..9bab00a1244e 100644 --- a/WordPress/src/debug/AndroidManifest.xml +++ b/WordPress/src/debug/AndroidManifest.xml @@ -34,9 +34,6 @@ android:supportsRtl="true" tools:replace="android:name,android:supportsRtl" tools:ignore="MissingApplicationIcon"> - - - ActivityLauncher.viewDebugCookies(this@DebugSettingsActivity) - is DebugSettingsViewModel.NavigationAction.PreviewFragment -> { - previewFragmentInActivity(it.name) - } is DebugSettingsViewModel.NavigationAction.DebugFlags -> ActivityLauncher.viewDebugSharedPreferenceFlags(this@DebugSettingsActivity) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsItemViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsItemViewHolder.kt index c2cc646a2c16..87e988ce4fa4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsItemViewHolder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsItemViewHolder.kt @@ -57,8 +57,6 @@ sealed class DebugSettingsItemViewHolder( } featureEnabled.setOnCheckedChangeListener { _, _ -> item.toggleAction.toggle() } itemView.setOnClickListener { item.toggleAction.toggle() } - previewIcon.isVisible = item.preview != null - previewIcon.setOnClickListener { item.preview?.invoke() } } class RemoteFieldConfigViewHolder(parent: ViewGroup) : DebugSettingsItemViewHolder( diff --git a/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsViewModel.kt index 75d12e5fa208..0f9ba8794fa5 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsViewModel.kt @@ -7,7 +7,6 @@ import org.wordpress.android.fluxc.persistence.FeatureFlagConfigDao import org.wordpress.android.modules.BG_THREAD import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.debug.DebugSettingsViewModel.NavigationAction.DebugCookies -import org.wordpress.android.ui.debug.previews.PREVIEWS import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper import org.wordpress.android.ui.notifications.NotificationManagerWrapper import org.wordpress.android.util.DebugUtils @@ -57,13 +56,7 @@ class DebugSettingsViewModel private fun refresh(debugSettingsType: DebugSettingsType) { val uiItems: MutableList = when (debugSettingsType) { - DebugSettingsType.REMOTE_FEATURES -> buildRemoteFeatures().map { - it.apply { - preview = { onFeaturePreviewClick(this.remoteKey) }.takeIf { - state == UiItem.FeatureFlag.State.ENABLED && PREVIEWS.contains(remoteKey) - } - } - }.toMutableList() + DebugSettingsType.REMOTE_FEATURES -> buildRemoteFeatures().toMutableList() DebugSettingsType.REMOTE_FIELD_CONFIGS -> buildRemoteFieldConfigs().toMutableList() DebugSettingsType.FEATURES_IN_DEVELOPMENT -> buildDevelopedFeatures().toMutableList() @@ -75,10 +68,6 @@ class DebugSettingsViewModel _onNavigation.value = Event(DebugCookies) } - private fun onFeaturePreviewClick(key: String) { - _onNavigation.value = Event(NavigationAction.PreviewFragment(key)) - } - fun onForceShowWeeklyRoundupClick() = launch(bgDispatcher) { if (!jetpackFeatureRemovalPhaseHelper.shouldShowNotifications()) return@launch @@ -160,6 +149,5 @@ class DebugSettingsViewModel sealed class NavigationAction { object DebugCookies : NavigationAction() object DebugFlags : NavigationAction() - data class PreviewFragment(val name: String) : NavigationAction() } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/debug/UIState.kt b/WordPress/src/main/java/org/wordpress/android/ui/debug/UIState.kt index e63af1a8235b..fbeb37a2539a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/debug/UIState.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/debug/UIState.kt @@ -39,8 +39,6 @@ sealed class UiItem(open val type: DebugSettingsType) { enum class State { ENABLED, DISABLED, UNKNOWN } - @Suppress("DataClassShouldBeImmutable") // We're not in prod code or diffing here, the rule is moot - var preview: (() -> Unit)? = null } data class Field(val remoteFieldKey: String, val remoteFieldValue: String, val remoteFieldSource: String) : diff --git a/WordPress/src/main/java/org/wordpress/android/ui/debug/previews/PreviewFragmentActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/debug/previews/PreviewFragmentActivity.kt deleted file mode 100644 index 747691fab2a7..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/ui/debug/previews/PreviewFragmentActivity.kt +++ /dev/null @@ -1,50 +0,0 @@ -package org.wordpress.android.ui.debug.previews - -import android.app.Activity -import android.content.Intent -import android.os.Bundle -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentActivity -import androidx.fragment.app.commit -import dagger.hilt.android.AndroidEntryPoint -import org.wordpress.android.ui.main.jetpack.staticposter.JetpackStaticPosterFragment -import org.wordpress.android.ui.main.jetpack.staticposter.UiData -import org.wordpress.android.util.config.JetpackFeatureRemovalStaticPostersConfig.Companion.JETPACK_FEATURE_REMOVAL_STATIC_POSTERS_REMOTE_FIELD -import android.R as AndroidR - -@AndroidEntryPoint -class PreviewFragmentActivity : FragmentActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - supportFragmentManager.commit { - val key = requireNotNull(intent.getStringExtra(KEY)) - val factory = requireNotNull(PREVIEWS[key]) - add(AndroidR.id.content, factory.invoke()) - } - } - - companion object { - const val KEY = "KEY" - - fun Fragment.previewFragmentInActivity(key: String) { - startActivity( - Intent(requireContext(), this@Companion::class.java.enclosingClass).apply { - putExtra(KEY, key) - } - ) - } - - fun Activity.previewFragmentInActivity(key: String) { - startActivity( - Intent(this, this@Companion::class.java.enclosingClass).apply { - putExtra(KEY, key) - } - ) - } - } -} - -val PREVIEWS = mapOf( - JETPACK_FEATURE_REMOVAL_STATIC_POSTERS_REMOTE_FIELD to { JetpackStaticPosterFragment.newInstance(UiData.STATS) }, -) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/DeepLinkNavigator.kt b/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/DeepLinkNavigator.kt index 0ff32ecea192..ddc63f3eb96e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/DeepLinkNavigator.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/DeepLinkNavigator.kt @@ -96,8 +96,6 @@ class DeepLinkNavigator OpenLoginPrologue -> ActivityLauncher.showLoginPrologue(activity) is OpenJetpackForDeepLink -> ActivityLauncher.openJetpackForDeeplink(activity, navigateAction.action, navigateAction.uri) - is NavigateAction.OpenJetpackStaticPosterView -> - ActivityLauncher.showJetpackStaticPoster(activity) is NavigateAction.OpenMediaForSite -> activityNavigator.openMediaInNewStack(activity, navigateAction.site) NavigateAction.OpenMedia -> activityNavigator.openMediaInNewStack(activity) is NavigateAction.OpenMediaPickerForSite -> activityNavigator.openMediaPickerInNewStack( @@ -168,7 +166,6 @@ class DeepLinkNavigator object OpenMySite : NavigateAction() object OpenLoginPrologue : NavigateAction() data class OpenJetpackForDeepLink(val action: String?, val uri: UriWrapper) : NavigateAction() - object OpenJetpackStaticPosterView : NavigateAction() data class OpenMediaForSite(val site: SiteModel) : NavigateAction() object OpenMedia : NavigateAction() data class OpenMediaPickerForSite(val site: SiteModel) : NavigateAction() diff --git a/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/handlers/StatsLinkHandler.kt b/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/handlers/StatsLinkHandler.kt index c083f900c464..f2cb14f36417 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/handlers/StatsLinkHandler.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/handlers/StatsLinkHandler.kt @@ -2,7 +2,6 @@ package org.wordpress.android.ui.deeplinks.handlers import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction -import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.OpenJetpackStaticPosterView import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.OpenStats import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.OpenStatsForSite import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.OpenStatsForSiteAndTimeframe @@ -35,7 +34,6 @@ class StatsLinkHandler val timeframeIndex = if (site == null) (length - 1) else (length - 2) val statsTimeframe = pathSegments.getOrNull(timeframeIndex)?.toStatsTimeframe() return when { - jetpackFeatureRemovalPhaseHelper.shouldShowStaticPage() -> OpenJetpackStaticPosterView site != null && statsTimeframe != null -> { OpenStatsForSiteAndTimeframe(site, statsTimeframe) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt index ca616969d7fd..cf06e7e0966f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt @@ -48,13 +48,11 @@ class JetpackFeatureOverlayContentBuilder @Inject constructor() { PhaseNewUsers -> JetpackFeatureOverlayComponentVisibility.FeatureCollectionPhase.PhaseNewUsers() PhaseSelfHostedUsers -> JetpackFeatureOverlayComponentVisibility.FeatureCollectionPhase.PhaseSelfHostedUsers() - else -> JetpackFeatureOverlayComponentVisibility.FeatureCollectionPhase.Final() } val content = getContentForFeatureCollection(isRtl, blogPostLink, currentPhase) return JetpackFeatureOverlayUIState(componentVisibility, content) } - @Suppress("UseCheckOrError") private fun getContentForFeatureCollection( isRtl: Boolean, blogPostLink: String?, @@ -64,9 +62,6 @@ class JetpackFeatureOverlayContentBuilder @Inject constructor() { is PhaseFour -> getJetpackFeatureOverlayContentForPhaseFour(isRtl, blogPostLink) is PhaseNewUsers -> getJetpackFeatureOverlayContentForNewUsers(isRtl) is PhaseSelfHostedUsers -> getJetpackFeatureOverlayContentForSelfHostedUsers(isRtl) - else -> { - throw IllegalStateException("Invalid phase for feature collection overlay") - } } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt index 3f43a7987bd4..f9657a279ef9 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt @@ -2,7 +2,6 @@ package org.wordpress.android.ui.jetpackoverlay import org.wordpress.android.R import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseStaticPosters import org.wordpress.android.ui.utils.UiString import org.wordpress.android.ui.utils.UiString.UiStringRes import javax.inject.Inject @@ -14,7 +13,7 @@ class JetpackFeatureRemovalBrandingUtil @Inject constructor( fun shouldShowBranding(): Boolean { return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - PhaseStaticPosters, PhaseFour -> true + PhaseFour -> true else -> false } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt index a7aae18cd3d6..f04ba479f23b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt @@ -34,7 +34,6 @@ class JetpackFeatureRemovalOverlayUtil @Inject constructor( PhaseNewUsers, PhaseSelfHostedUsers -> !jetpackFeatureOverlayShownTracker.getFeatureCollectionOverlayShown(phase) PhaseFour -> shouldShowPhaseFourFeatureCollectionOverlay() - else -> false } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt index 230344fae2f8..308c2e5b9b3f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt @@ -2,11 +2,6 @@ package org.wordpress.android.ui.jetpackoverlay import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseNewUsers -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseSelfHostedUsers -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseStaticPosters -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalSiteCreationPhase.PHASE_ONE import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalSiteCreationPhase.PHASE_TWO import org.wordpress.android.ui.main.WPMainNavigationView.PageType import org.wordpress.android.util.BuildConfigWrapper @@ -14,7 +9,6 @@ import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.util.config.JetpackFeatureRemovalNewUsersConfig import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseFourConfig import org.wordpress.android.util.config.JetpackFeatureRemovalSelfHostedUsersConfig -import org.wordpress.android.util.config.JetpackFeatureRemovalStaticPostersConfig import org.wordpress.android.util.config.PhaseFourOverlayFrequencyConfig import javax.inject.Inject @@ -25,34 +19,21 @@ class JetpackFeatureRemovalPhaseHelper @Inject constructor( private val jetpackFeatureRemovalPhaseFourConfig: JetpackFeatureRemovalPhaseFourConfig, private val jetpackFeatureRemovalNewUsersConfig: JetpackFeatureRemovalNewUsersConfig, private val jetpackFeatureRemovalSelfHostedUsersConfig: JetpackFeatureRemovalSelfHostedUsersConfig, - private val jetpackFeatureRemovalStaticPostersConfig: JetpackFeatureRemovalStaticPostersConfig, private val jetpackPhaseFourOverlayFrequencyConfig: PhaseFourOverlayFrequencyConfig, private val analyticsTrackerWrapper: AnalyticsTrackerWrapper ) { fun getCurrentPhase(): JetpackFeatureRemovalPhase? { return if (buildConfigWrapper.isJetpackApp) null - else if (jetpackFeatureRemovalSelfHostedUsersConfig.isEnabled()) PhaseSelfHostedUsers - else if (jetpackFeatureRemovalNewUsersConfig.isEnabled()) PhaseNewUsers - else if (jetpackFeatureRemovalPhaseFourConfig.isEnabled()) PhaseFour - else if (jetpackFeatureRemovalStaticPostersConfig.isEnabled()) PhaseStaticPosters + else if (jetpackFeatureRemovalSelfHostedUsersConfig.isEnabled()) JetpackFeatureRemovalPhase.PhaseSelfHostedUsers + else if (jetpackFeatureRemovalNewUsersConfig.isEnabled()) JetpackFeatureRemovalPhase.PhaseNewUsers + else if (jetpackFeatureRemovalPhaseFourConfig.isEnabled()) JetpackFeatureRemovalPhase.PhaseFour else null } - fun getDeepLinkPhase(): JetpackFeatureRemovalSiteCreationPhase? { - val currentPhase = getCurrentPhase() ?: return null - return when (currentPhase) { - is PhaseStaticPosters -> PHASE_ONE - is PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> PHASE_TWO - } - } + fun getDeepLinkPhase(): JetpackFeatureRemovalSiteCreationPhase? = + getCurrentPhase()?.let { PHASE_TWO } - fun shouldRemoveJetpackFeatures(): Boolean { - val currentPhase = getCurrentPhase() ?: return false - return when (currentPhase) { - is PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> true - is PhaseStaticPosters -> false - } - } + fun shouldRemoveJetpackFeatures(): Boolean = getCurrentPhase() != null fun shouldShowJetpackPoweredEditorFeatures(): Boolean = getCurrentPhase() == null @@ -60,24 +41,12 @@ class JetpackFeatureRemovalPhaseHelper @Inject constructor( fun shouldShowPublishedPostStatsButton(): Boolean = getCurrentPhase() == null - fun shouldShowStaticPage(): Boolean = getCurrentPhase() is PhaseStaticPosters - @JvmOverloads fun trackPageAccessedEventIfNeeded(pageType: PageType, site: SiteModel? = null) { when (pageType) { PageType.MY_SITE -> analyticsTrackerWrapper.track(AnalyticsTracker.Stat.MY_SITE_ACCESSED, site) - PageType.READER -> { - if (arePosterizedPagesVisible()) { - analyticsTrackerWrapper.track(AnalyticsTracker.Stat.READER_ACCESSED) - } - } - - PageType.NOTIFS -> { - if (arePosterizedPagesVisible()) { - analyticsTrackerWrapper.track(AnalyticsTracker.Stat.NOTIFICATIONS_ACCESSED) - } - } - + PageType.READER -> analyticsTrackerWrapper.track(AnalyticsTracker.Stat.READER_ACCESSED) + PageType.NOTIFS -> analyticsTrackerWrapper.track(AnalyticsTracker.Stat.NOTIFICATIONS_ACCESSED) PageType.ME -> analyticsTrackerWrapper.track(AnalyticsTracker.Stat.ME_ACCESSED) } } @@ -89,19 +58,16 @@ class JetpackFeatureRemovalPhaseHelper @Inject constructor( fun getPhaseFourOverlayFrequency(): Int { return jetpackPhaseFourOverlayFrequencyConfig.getValue() } - - private fun arePosterizedPagesVisible() = !shouldShowStaticPage() } sealed class JetpackFeatureRemovalPhase(val trackingName: String) { - object PhaseStaticPosters : JetpackFeatureRemovalPhase("static_posters") object PhaseFour : JetpackFeatureRemovalPhase("four") object PhaseNewUsers : JetpackFeatureRemovalPhase("new_users") object PhaseSelfHostedUsers : JetpackFeatureRemovalPhase("self_hosted") } enum class JetpackFeatureRemovalSiteCreationPhase(val trackingName: String) { - PHASE_ONE("one"), PHASE_TWO("two") + PHASE_TWO("two") } enum class JetpackDeepLinkPhase(val trackingName: String) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalWidgetHelper.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalWidgetHelper.kt index ecf6f8ad0f6d..c209d2b2b21e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalWidgetHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalWidgetHelper.kt @@ -13,8 +13,7 @@ class JetpackFeatureRemovalWidgetHelper @Inject constructor( ) fun disableWidgetReceiversIfNeeded() { - if (jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures() || - jetpackFeatureRemovalPhaseHelper.shouldShowStaticPage()) { + if (jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { widgetReceivers.forEach { packageManagerWrapper.disableComponentEnabledSetting(it) } } else { widgetReceivers.forEach { packageManagerWrapper.enableComponentEnabledSetting(it) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt index 96eac005fe24..cb8e951d888f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt @@ -39,8 +39,6 @@ sealed class JetpackFeatureOverlayComponentVisibility( override val closeButton: Boolean = false, override val migrationText: Boolean = true ) : FeatureCollectionPhase() - - class Final(override val closeButton: Boolean = false) : FeatureCollectionPhase() } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackStaticPosterActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackStaticPosterActivity.kt deleted file mode 100644 index bc4ad7c1756b..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackStaticPosterActivity.kt +++ /dev/null @@ -1,46 +0,0 @@ -package org.wordpress.android.ui.jetpackoverlay - -import android.os.Bundle -import android.view.View.generateViewId -import android.view.ViewGroup -import android.widget.FrameLayout -import androidx.compose.runtime.Composable -import androidx.compose.ui.viewinterop.AndroidView -import androidx.fragment.app.commit -import dagger.hilt.android.AndroidEntryPoint -import org.wordpress.android.models.JetpackPoweredScreen -import org.wordpress.android.ui.main.BaseAppCompatActivity -import org.wordpress.android.ui.main.jetpack.staticposter.JetpackStaticPosterFragment -import org.wordpress.android.util.extensions.setContent - -@AndroidEntryPoint -class JetpackStaticPosterActivity : BaseAppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - setContent { ComposeFrame() } - } - - @Composable - fun ComposeFrame() { - AndroidView( - factory = { context -> - FrameLayout(context).apply { - id = generateViewId() - layoutParams = ViewGroup.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT - ) - } - }, - update = { fragment -> - supportFragmentManager.commit { - replace( - fragment.id, - JetpackStaticPosterFragment.newInstance(JetpackPoweredScreen.WithStaticPoster.STATS) - ) - } - } - ) - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/BaseAppCompatActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/main/BaseAppCompatActivity.kt index 6225fc81a75d..bfba0d011ff1 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/BaseAppCompatActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/BaseAppCompatActivity.kt @@ -13,7 +13,6 @@ import org.wordpress.android.ui.debug.preferences.DebugSharedPreferenceFlagsActi import org.wordpress.android.ui.domains.management.DomainManagementActivity import org.wordpress.android.ui.domains.management.newdomainsearch.NewDomainSearchActivity import org.wordpress.android.ui.domains.management.purchasedomain.PurchaseDomainActivity -import org.wordpress.android.ui.jetpackoverlay.JetpackStaticPosterActivity import org.wordpress.android.ui.main.feedbackform.FeedbackFormActivity import org.wordpress.android.ui.media.MediaPreviewActivity import org.wordpress.android.ui.media.MediaSettingsActivity @@ -90,7 +89,6 @@ private val excludedActivities = listOf( EditJetpackSocialShareMessageActivity::class.java.name, ExperimentalFeaturesActivity::class.java.name, FeedbackFormActivity::class.java.name, - JetpackStaticPosterActivity::class.java.name, MediaPreviewActivity::class.java.name, MenuActivity::class.java.name, NavMenusActivity::class.java.name, diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java index fc46f40afb8d..89992f1c8197 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java @@ -851,10 +851,6 @@ private void handleOpenPageIntent(@NonNull Intent intent) { showJetpackFeatureOverlayAccessedInCorrectly(trackingProperties); break; } - if (mJetpackFeatureRemovalPhaseHelper.shouldShowStaticPage()) { - ActivityLauncher.showJetpackStaticPoster(this); - break; - } mActivityNavigator.openStats(this, getSelectedSite(), (StatsTimeframe) intent.getSerializableExtra(ARG_STATS_TIMEFRAME)); break; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainNavigationView.kt b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainNavigationView.kt index eb49b29c5069..cdd670447e23 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainNavigationView.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainNavigationView.kt @@ -38,8 +38,6 @@ import org.wordpress.android.ui.main.WPMainNavigationView.PageType.ME import org.wordpress.android.ui.main.WPMainNavigationView.PageType.MY_SITE import org.wordpress.android.ui.main.WPMainNavigationView.PageType.NOTIFS import org.wordpress.android.ui.main.WPMainNavigationView.PageType.READER -import org.wordpress.android.ui.main.jetpack.staticposter.JetpackStaticPosterFragment -import org.wordpress.android.ui.main.jetpack.staticposter.UiData import org.wordpress.android.ui.main.utils.MeGravatarLoader import org.wordpress.android.ui.mysite.MySiteFragment import org.wordpress.android.ui.notifications.NotificationsListFragment @@ -483,18 +481,11 @@ class WPMainNavigationView @JvmOverloads constructor( } private inner class NavAdapter { - private fun createFragment(pageType: PageType, helper: JetpackFeatureRemovalPhaseHelper): Fragment { - val shouldUseStaticPostersFragment = helper.shouldShowStaticPage() + private fun createFragment(pageType: PageType): Fragment { val fragment = when (pageType) { MY_SITE -> MySiteFragment.newInstance() - READER -> if (shouldUseStaticPostersFragment) - JetpackStaticPosterFragment.newInstance(UiData.READER) - else ReaderFragment() - - NOTIFS -> if (shouldUseStaticPostersFragment) - JetpackStaticPosterFragment.newInstance(UiData.NOTIFICATIONS) - else NotificationsListFragment.newInstance() - + READER -> ReaderFragment() + NOTIFS -> NotificationsListFragment.newInstance() ME -> MeFragment.newInstance() } fragmentManager?.beginTransaction() @@ -506,32 +497,7 @@ class WPMainNavigationView @JvmOverloads constructor( fun getFragment(position: Int): Fragment? { return pages().getOrNull(position)?.let { pageType -> - val currentFragment = fragmentManager?.findFragmentByTag(getTagForPageType(pageType)) - return currentFragment?.let { - when (it) { - is ReaderFragment, is NotificationsListFragment -> checkAndCreateForStaticPage(it, pageType) - is JetpackStaticPosterFragment -> checkAndCreateForNonStaticPage(it, pageType) - else -> it - } - } ?: createFragment(pageType, jetpackFeatureRemovalPhaseHelper) - } - } - - private fun checkAndCreateForStaticPage(fragment: Fragment, pageType: PageType): Fragment { - return if (jetpackFeatureRemovalPhaseHelper.shouldShowStaticPage()) { - fragmentManager?.beginTransaction()?.remove(fragment)?.commitNow() - createFragment(pageType, jetpackFeatureRemovalPhaseHelper) - } else { - fragment - } - } - - private fun checkAndCreateForNonStaticPage(fragment: Fragment, pageType: PageType): Fragment { - return if (!jetpackFeatureRemovalPhaseHelper.shouldShowStaticPage()) { - fragmentManager?.beginTransaction()?.remove(fragment)?.commitNow() - createFragment(pageType, jetpackFeatureRemovalPhaseHelper) - } else { - fragment + fragmentManager?.findFragmentByTag(getTagForPageType(pageType)) ?: createFragment(pageType) } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/jetpack/staticposter/JetpackStaticPosterFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/main/jetpack/staticposter/JetpackStaticPosterFragment.kt deleted file mode 100644 index 21d84c62bbe4..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/jetpack/staticposter/JetpackStaticPosterFragment.kt +++ /dev/null @@ -1,82 +0,0 @@ -package org.wordpress.android.ui.main.jetpack.staticposter - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.compose.material3.CircularProgressIndicator -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.ui.platform.ComposeView -import androidx.fragment.app.Fragment -import androidx.fragment.app.viewModels -import dagger.hilt.android.AndroidEntryPoint -import org.wordpress.android.ui.ActivityLauncherWrapper -import org.wordpress.android.ui.ActivityLauncherWrapper.Companion.CAMPAIGN_STATIC_POSTER -import org.wordpress.android.ui.ActivityLauncherWrapper.Companion.JETPACK_PACKAGE_NAME -import org.wordpress.android.ui.WPWebViewActivity -import org.wordpress.android.ui.compose.theme.AppThemeM3 -import org.wordpress.android.ui.main.jetpack.staticposter.compose.JetpackStaticPoster -import org.wordpress.android.util.UrlUtils -import org.wordpress.android.util.extensions.getParcelableCompat -import javax.inject.Inject - -@AndroidEntryPoint -class JetpackStaticPosterFragment : Fragment() { - private val viewModel: JetpackStaticPosterViewModel by viewModels() - - @Inject - lateinit var activityLauncher: ActivityLauncherWrapper - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ) = ComposeView(requireContext()).apply { - setContent { - AppThemeM3 { - val uiState by viewModel.uiState.collectAsState() - when (val state = uiState) { - is UiState.Content -> JetpackStaticPoster( - uiState = state, - onPrimaryClick = viewModel::onPrimaryClick, - onSecondaryClick = viewModel::onSecondaryClick, - onBackClick = requireActivity().onBackPressedDispatcher::onBackPressed, - ) - is UiState.Loading -> CircularProgressIndicator() - } - } - } - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - observeEvents() - viewModel.start(requireNotNull(requireArguments().getParcelableCompat(ARG_PARCEL))) - } - - private fun observeEvents() { - viewModel.events.observe(viewLifecycleOwner) { event -> - when (event) { - is Event.PrimaryButtonClick -> activityLauncher.openPlayStoreLink( - requireActivity(), - JETPACK_PACKAGE_NAME, - CAMPAIGN_STATIC_POSTER - ) - is Event.SecondaryButtonClick -> event.url?.let { - WPWebViewActivity.openURL(requireContext(), UrlUtils.addUrlSchemeIfNeeded(it, true)) - } - } - } - } - - companion object { - private const val ARG_PARCEL = "ARG_PARCEL" - - fun newInstance(parcel: UiData) = JetpackStaticPosterFragment().apply { - arguments = Bundle().apply { - putParcelable(ARG_PARCEL, parcel) - } - } - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/jetpack/staticposter/JetpackStaticPosterViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/main/jetpack/staticposter/JetpackStaticPosterViewModel.kt deleted file mode 100644 index 312a21d1aa8b..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/jetpack/staticposter/JetpackStaticPosterViewModel.kt +++ /dev/null @@ -1,90 +0,0 @@ -package org.wordpress.android.ui.main.jetpack.staticposter - -import androidx.lifecycle.LiveData -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow -import org.wordpress.android.analytics.AnalyticsTracker -import org.wordpress.android.models.JetpackPoweredScreen -import org.wordpress.android.modules.UI_THREAD -import org.wordpress.android.ui.utils.UiString -import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper -import org.wordpress.android.util.config.PhaseThreeBlogPostLinkConfig -import org.wordpress.android.viewmodel.ScopedViewModel -import org.wordpress.android.viewmodel.SingleLiveEvent -import javax.inject.Inject -import javax.inject.Named - -private const val KEY_SOURCE = "source" - -@HiltViewModel -class JetpackStaticPosterViewModel @Inject constructor( - @Named(UI_THREAD) mainDispatcher: CoroutineDispatcher, - private val analyticsTrackerWrapper: AnalyticsTrackerWrapper, - private val phaseThreeBlogPostLinkConfig: PhaseThreeBlogPostLinkConfig, -) : ScopedViewModel(mainDispatcher) { - private var isStarted = false - - private val _uiState = MutableStateFlow(UiState.Loading) - val uiState = _uiState.asStateFlow() - - private val _events = SingleLiveEvent() - val events = _events as LiveData - - private lateinit var data: UiData - - fun start(uiData: UiData) { - if (!isStarted || uiData != data) trackStart(uiData.screen.trackingName) - if (isStarted) return else isStarted = true - data = uiData - _uiState.value = data.toContentUiState() - } - - fun onPrimaryClick() { - trackPrimaryClick() - launch { _events.value = Event.PrimaryButtonClick } - } - - fun onSecondaryClick() { - trackSecondaryClick() - launch { _events.value = Event.SecondaryButtonClick(phaseThreeBlogPostLinkConfig.getValue()) } - } - - private fun trackStart(source: String) = analyticsTrackerWrapper.track( - AnalyticsTracker.Stat.REMOVE_STATIC_POSTER_DISPLAYED, - mapOf(KEY_SOURCE to source) - ) - - private fun trackPrimaryClick() = analyticsTrackerWrapper.track( - AnalyticsTracker.Stat.REMOVE_STATIC_POSTER_GET_JETPACK_TAPPED, - mapOf(KEY_SOURCE to data.screen.trackingName) - ) - - private fun trackSecondaryClick() = analyticsTrackerWrapper.track( - AnalyticsTracker.Stat.REMOVE_STATIC_POSTER_LINK_TAPPED, - mapOf(KEY_SOURCE to data.screen.trackingName) - ) -} - -sealed class UiState { - object Loading : UiState() - data class Content( - val showTopBar: Boolean, - val featureName: UiString, - val showPluralTitle: Boolean - ) : UiState() -} - -sealed class Event { - object PrimaryButtonClick : Event() - data class SecondaryButtonClick(val url: String?) : Event() -} - -typealias UiData = JetpackPoweredScreen.WithStaticPoster - -fun UiData.toContentUiState() = UiState.Content( - showTopBar = this == UiData.STATS, - featureName = screen.featureName, - showPluralTitle = screen.isPlural -) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/jetpack/staticposter/compose/JetpackStaticPoster.kt b/WordPress/src/main/java/org/wordpress/android/ui/main/jetpack/staticposter/compose/JetpackStaticPoster.kt deleted file mode 100644 index a6eee4ab006a..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/jetpack/staticposter/compose/JetpackStaticPoster.kt +++ /dev/null @@ -1,170 +0,0 @@ -package org.wordpress.android.ui.main.jetpack.staticposter.compose - -import android.annotation.SuppressLint -import android.content.res.Configuration -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBar -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalConfiguration -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.colorResource -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import com.airbnb.lottie.compose.LottieAnimation -import com.airbnb.lottie.compose.LottieCompositionSpec -import com.airbnb.lottie.compose.rememberLottieComposition -import org.wordpress.android.R -import org.wordpress.android.ui.compose.components.buttons.PrimaryButtonM3 -import org.wordpress.android.ui.compose.components.buttons.SecondaryButtonM3 -import org.wordpress.android.ui.compose.theme.AppColor -import org.wordpress.android.ui.compose.theme.jpColorPalette -import org.wordpress.android.ui.compose.theme.AppThemeM3 -import org.wordpress.android.ui.compose.utils.uiStringText -import org.wordpress.android.ui.main.jetpack.staticposter.UiData -import org.wordpress.android.ui.main.jetpack.staticposter.UiState -import org.wordpress.android.ui.main.jetpack.staticposter.toContentUiState -import org.wordpress.android.util.extensions.isRtl - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") -fun JetpackStaticPoster( - uiState: UiState.Content, - onPrimaryClick: () -> Unit = {}, - onSecondaryClick: () -> Unit = {}, - onBackClick: () -> Unit = {}, -): Unit = with(uiState) { - Scaffold( - topBar = { - if (showTopBar) { - TopAppBar( - title = { }, - navigationIcon = { - IconButton(onClick = onBackClick) { - Icon( - Icons.AutoMirrored.Filled.ArrowBack, - stringResource(R.string.close) - ) - } - }, - ) - } - }, - ) { - val orientation = LocalConfiguration.current.orientation - val verticalPadding = remember(orientation) { - if (orientation == Configuration.ORIENTATION_LANDSCAPE) 60.dp else 30.dp - } - - Column( - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(horizontal = 30.dp, vertical = verticalPadding) - ) { - Column( - horizontalAlignment = Alignment.Start, - verticalArrangement = Arrangement.spacedBy(20.dp), - modifier = Modifier - .padding(bottom = 20.dp) - .fillMaxWidth(), - ) { - val animRes = if (LocalContext.current.isRtl()) R.raw.wp2jp_rtl else R.raw.wp2jp_left - val lottieComposition by rememberLottieComposition(LottieCompositionSpec.RawRes(animRes)) - LottieAnimation(lottieComposition) - Text( - stringResource( - if (showPluralTitle) - R.string.wp_jp_static_poster_title_plural else R.string.wp_jp_static_poster_title, - uiStringText(featureName) - ), - style = MaterialTheme.typography.headlineLarge.copy( - fontSize = 34.sp, - fontWeight = FontWeight.Bold, - lineHeight = 48.sp - ), - ) - Text( - stringResource(R.string.wp_jp_static_poster_message), - style = MaterialTheme.typography.bodyLarge.copy(fontSize = 17.sp), - ) - Text( - stringResource(R.string.wp_jp_static_poster_footnote), - style = MaterialTheme.typography.bodyLarge.copy(colorResource(R.color.gray_50), 17.sp), - ) - } - PrimaryButtonM3( - stringResource(R.string.wp_jp_static_poster_button_primary), - onPrimaryClick, - colors = ButtonDefaults.buttonColors( - containerColor = jpColorPalette().primary, - contentColor = AppColor.White, - ), - padding = PaddingValues(bottom = 15.dp), - textStyle = MaterialTheme.typography.bodyLarge.copy(fontSize = 17.sp, fontWeight = FontWeight.SemiBold), - ) - SecondaryButtonM3( - stringResource(R.string.wp_jp_static_poster_button_secondary), - onSecondaryClick, - colors = ButtonDefaults.buttonColors( - containerColor = Color.Transparent, - contentColor = jpColorPalette().primary, - ), - padding = PaddingValues(0.dp), - textStyle = MaterialTheme.typography.bodyLarge.copy(fontSize = 17.sp), - ) { - Spacer(modifier = Modifier.width(10.dp)) - Icon( - painterResource(R.drawable.ic_external_v2), - stringResource(R.string.icon_desc), - tint = colorResource(R.color.jetpack_green_40) - ) - } - } - } -} - -@Preview( - name = "Light Mode", -) -@Preview( - name = "Dark Mode", - showBackground = true, - uiMode = Configuration.UI_MODE_NIGHT_YES, -) -@Composable -private fun PreviewJetpackStaticPoster() { - AppThemeM3 { - val uiState = UiData.STATS.toContentUiState() - JetpackStaticPoster(uiState) - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteFragment.kt index 6effb8911599..7d2c1cf2125d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteFragment.kt @@ -673,9 +673,6 @@ class MySiteFragment : Fragment(R.layout.my_site_fragment), action.source, action.shouldShowBlazeOverlay ) - is SiteNavigationAction.ShowJetpackRemovalStaticPostersView -> { - ActivityLauncher.showJetpackStaticPoster(requireActivity()) - } is SiteNavigationAction.OpenActivityLogDetail -> ActivityLauncher.viewActivityLogDetailFromDashboardCard( activity, action.site, diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/SiteNavigationAction.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/SiteNavigationAction.kt index 4bc60d2c37f6..cfac453fe40c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/SiteNavigationAction.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/SiteNavigationAction.kt @@ -61,7 +61,6 @@ sealed class SiteNavigationAction { data class OpenPromoteWithBlazeOverlay(val source: BlazeFlowSource, val shouldShowBlazeOverlay: Boolean = false) : SiteNavigationAction() - object ShowJetpackRemovalStaticPostersView : SiteNavigationAction() data class OpenActivityLogDetail(val site: SiteModel, val activityId: String, val isRewindable: Boolean) : SiteNavigationAction() diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/ListItemActionHandler.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/ListItemActionHandler.kt index b2dd5b883503..0487bdcf2ca5 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/ListItemActionHandler.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/ListItemActionHandler.kt @@ -50,10 +50,6 @@ class ListItemActionHandler @Inject constructor( } private fun getStatsNavigationActionForSite(site: SiteModel): SiteNavigationAction = when { - // if we are in static posters phase - we don't want to show any connection/login messages - jetpackFeatureRemovalPhaseHelper.shouldShowStaticPage() -> - SiteNavigationAction.ShowJetpackRemovalStaticPostersView - // If the user is not logged in and the site is already connected to Jetpack, ask to login. !accountStore.hasAccessToken() && site.isJetpackConnected -> SiteNavigationAction.StartWPComLoginForJetpackStats diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSlice.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSlice.kt index 8ce631295681..7c5867369c5a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSlice.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSlice.kt @@ -55,15 +55,11 @@ class TodaysStatsViewModelSlice @Inject constructor( CardsTracker.Type.STATS.label, CardsTracker.StatsSubtype.TODAYS_STATS_NUDGE.label ) - if (jetpackFeatureRemovalPhaseHelper.shouldShowStaticPage()) { - _onNavigation.value = Event(SiteNavigationAction.ShowJetpackRemovalStaticPostersView) - } else { - _onNavigation.value = Event( - SiteNavigationAction.OpenExternalUrl( - TodaysStatsCardBuilder.URL_GET_MORE_VIEWS_AND_TRAFFIC - ) + _onNavigation.value = Event( + SiteNavigationAction.OpenExternalUrl( + TodaysStatsCardBuilder.URL_GET_MORE_VIEWS_AND_TRAFFIC ) - } + ) } private fun onMoreMenuClick() { @@ -89,9 +85,6 @@ class TodaysStatsViewModelSlice @Inject constructor( private fun navigateToTodaysStats() { val navigationAction = when { - jetpackFeatureRemovalPhaseHelper.shouldShowStaticPage() -> - SiteNavigationAction.ShowJetpackRemovalStaticPostersView - newStatsRouting.isNewStatsEnabled() -> SiteNavigationAction.OpenNewStatsForToday else -> SiteNavigationAction.OpenStatsByDay(requireNotNull(selectedSiteRepository.getSelectedSite())) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.kt index 1682f193b1e1..98e435d04101 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.kt @@ -419,17 +419,10 @@ class ReaderPostPagerActivity : BaseAppCompatActivity() { host = uri.host } - if (uri == null || jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures() - || jetpackFeatureRemovalPhaseHelper.shouldShowStaticPage() - ) { + if (uri == null || jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { readerTracker.trackDeepLink(AnalyticsTracker.Stat.DEEP_LINKED, action!!, host!!, uri) // invalid uri so, just show the entry screen - if (jetpackFeatureRemovalPhaseHelper.shouldShowStaticPage()) { - val intent = Intent(this, WPMainActivity::class.java) - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK) - intent.putExtra(WPMainActivity.ARG_OPEN_PAGE, WPMainActivity.ARG_READER) - startActivity(intent) - } else { + run { val intent = Intent(this, WPLaunchActivity::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK) intent.putExtra(WPMainActivity.ARG_OPEN_PAGE, WPMainActivity.ARG_READER) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsActivity.kt index 81045bdc40cb..f58d951ee07d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsActivity.kt @@ -35,12 +35,7 @@ class StatsActivity : BaseAppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - if (jetpackFeatureRemovalPhaseHelper.shouldShowStaticPage()) { - ActivityLauncher.showJetpackStaticPoster(this) - finish() - } else { - setContentView(StatsListActivityBinding.inflate(layoutInflater).root) - } + setContentView(StatsListActivityBinding.inflate(layoutInflater).root) } override fun onOptionsItemSelected(item: MenuItem): Boolean { diff --git a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalStaticPostersConfig.kt b/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalStaticPostersConfig.kt deleted file mode 100644 index ceb3ad5b5f7b..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalStaticPostersConfig.kt +++ /dev/null @@ -1,22 +0,0 @@ -package org.wordpress.android.util.config - -import org.wordpress.android.BuildConfig -import org.wordpress.android.annotation.Feature -import org.wordpress.android.util.config.JetpackFeatureRemovalStaticPostersConfig.Companion.JETPACK_FEATURE_REMOVAL_STATIC_POSTERS_REMOTE_FIELD -import javax.inject.Inject - -/** - * Configuration for Jetpack feature removal phase new users - */ -@Feature(JETPACK_FEATURE_REMOVAL_STATIC_POSTERS_REMOTE_FIELD, false) -class JetpackFeatureRemovalStaticPostersConfig @Inject constructor( - appConfig: AppConfig -) : FeatureConfig( - appConfig, - BuildConfig.JETPACK_FEATURE_REMOVAL_STATIC_POSTERS, - JETPACK_FEATURE_REMOVAL_STATIC_POSTERS_REMOTE_FIELD -) { - companion object { - const val JETPACK_FEATURE_REMOVAL_STATIC_POSTERS_REMOTE_FIELD = "jp_removal_static_posters" - } -} diff --git a/WordPress/src/main/res/values-ar/strings.xml b/WordPress/src/main/res/values-ar/strings.xml index e5cfe3f2bf2d..f51b3d6decb7 100644 --- a/WordPress/src/main/res/values-ar/strings.xml +++ b/WordPress/src/main/res/values-ar/strings.xml @@ -920,9 +920,6 @@ Language: ar لا تتوافر ميزة المشاركة التلقائية على تويتر بعد الآن بسبب التغييرات التي أجرتها تويتر في الشروط والأسعار. لا تتوافر ميزة المشاركة التلقائية في تويتر بعد الآن السماح بالتنبيهات بمواكبة موقعك - يحتوي تطبيق Jetpack على كل وظائف تطبيق ووردبريس، إلى جانب وصول حصري الآن إلى ميزات Stats وReader وNotifications والمزيد. - استخدم ووردبريس مع %s في Jetpack\u00A0app. - استخدم ووردبريس مع %s في Jetpack\u00A0app. لون غير مصنّف. %s آخر نشاط على غرار المثال أعلاه، يسمح النطاق للأشخاص بالعثور على موقعك وزيارته من متصفح الويب لديهم. @@ -977,9 +974,6 @@ Language: ar هذا الموقع يستخدم ⁦%1$s⁩ ⁦%2$s⁩، التي لا تدعم كل ميزات التطبيق حتى الآن. Please install the %3$s. يستخدم ⁦%1$s⁩ ⁦%2$s⁩، التي لا تدعم كل ميزات التطبيق حتى الآن. Please install the %3$s. - التبديل مجاني، ولا يستغرق سوى بضع دقائق. - معرفة المزيد على jetpack.com - التبديل إلى تطبيق Jetpack مسؤول ووردبريس إدارة المحتويات حركة المرور @@ -1057,7 +1051,6 @@ Language: ar التبديل إلى Jetpack تمت إزالة ميزات الإحصاءات والقارئ والتنبيهات وغيرها من الميزات التي يدعمها Jetpack من تطبيق ووردبريس. لقد انتقلت ميزات Jetpack. - سينتقل ⁦%1$s⁩ قريبًا عرض كل الردود ⁦%1$s⁩ أقل من الأيام الـ 7 السابقة ⁦%1$s⁩ أعلى من الأيام الـ 7 السابقة @@ -1072,7 +1065,6 @@ Language: ar التبديل إلى تطبيق Jetpack معرفة المزيد على jetpack.com التبديل مجاني، ولا يستغرق سوى بضع دقائق. - ستنتقل ميزات الإحصاءات والقارئ والتنبيهات وغيرها من الميزات قريبًا إلى تطبيق Jetpack للهاتف المحمول. حدث خطأ في أثناء تحميل المطالبات. عذرًا لا توجد مطالبات بعد diff --git a/WordPress/src/main/res/values-cs/strings.xml b/WordPress/src/main/res/values-cs/strings.xml index 70a3d87d4191..afb138451d21 100644 --- a/WordPress/src/main/res/values-cs/strings.xml +++ b/WordPress/src/main/res/values-cs/strings.xml @@ -944,9 +944,6 @@ Language: cs_CZ Automatické sdílení na Twitteru již není dostupné kvůli změnám podmínek a cen Twitteru. Automatické sdílení na Twitteru již není dostupné Povolte oznámení pro sledování svého webu - Aplikace Jetpack má veškerou funkcionalitu aplikace WordPress a nyní exkluzivní přístup ke statistikám, čtečce, oznámením a dalšímu. - Používejte WordPress s %s v aplikaci Jetpack . - Používejte WordPress s %s v aplikaci Jetpack . Nepojmenovaná barva. %s Nedávná aktivita Stejně jako výše uvedený příklad, doména umožňuje lidem najít a navštívit váš web z jejich webového prohlížeče. @@ -1001,9 +998,6 @@ Language: cs_CZ Tento web %1$s používá aplikaci %2$s, která zatím nepodporuje všechny funkce aplikace. Nainstalujte prosím %3$s. %1$s používá aplikaci %2$s, která zatím nepodporuje všechny funkce aplikace. Nainstalujte %3$s. - Přepínání je zdarma a trvá jen minutu. - Více se dozvíte na Jetpack.com - Přepněte do aplikace Jetpack WP Admin Správa Návštěvnost @@ -1081,7 +1075,6 @@ Language: cs_CZ Přejděte na Jetpack Statistiky, čtečka, upozornění a další funkce poháněné Jetpack byly z aplikace WordPress odstraněny. Funkce Jetpacku se přesunuly - %1$s se brzy přesune Zobrazit všechny odpovědi %1$s méně než za předchozích 7 dní %1$s vyšší než za předchozích 7 dní @@ -1096,7 +1089,6 @@ Language: cs_CZ Přepněte do aplikace Jetpack Více se dozvíte na jetpack.com Přepínání je zdarma a trvá jen minutu. - Statistiky, čtečka, upozornění a další funkce se brzy přesunou do mobilní aplikace Jetpack. Došlo k chybě při načítání to se mi líbí Jejda Zatím žádné výzvy diff --git a/WordPress/src/main/res/values-de/strings.xml b/WordPress/src/main/res/values-de/strings.xml index 13c4decaaecb..b76cc6f3d278 100644 --- a/WordPress/src/main/res/values-de/strings.xml +++ b/WordPress/src/main/res/values-de/strings.xml @@ -944,9 +944,6 @@ Language: de Das automatische Teilen auf Twitter ist aufgrund von Änderungen der Bedingungen und der Preisgestaltung von Twitter nicht länger verfügbar. Das automatische Teilen auf Twitter ist nicht länger verfügbar Benachrichtigungen zulassen, um deine Website auf dem neusten Stand zu halten - Die Jetpack-App verfügt über alle Funktionen der WordPress-App und bietet ab sofort exklusiven Zugriff auf Statistiken, den Reader, Benachrichtigungen und mehr. - Verwende WordPress mit %s in der Jetpack-App. - Verwende WordPress mit %s in der Jetpack-App. Unbenannte Farbe. %s Letzte Aktivität Wie im Beispiel oben ermöglicht eine Domain Personen, deine Website über ihren Webbrowser zu finden. @@ -1001,9 +998,6 @@ Language: de Diese Website %1$s verwendet %2$s, die noch nicht alle Funktionen der App unterstützen. Bitte installiere das %3$s. %1$s verwendet %2$s, das noch nicht alle Funktionen der App unterstützt. Bitte installiere das %3$s. - Der Wechsel ist kostenlos und dauert nur eine Minute. - Mehr erfahren auf Jetpack.com - Zur Jetpack-App wechseln WP Admin Verwalten Traffic @@ -1081,7 +1075,6 @@ Language: de Zu Jetpack wechseln Statistiken, der Reader, Benachrichtigungen und weitere von Jetpack unterstützte Funktionen wurden aus der WordPress-App entfernt. Jetpack-Funktionen wurden verschoben. - %1$s wird demnächst verschoben Alle Antworten anzeigen %1$s niedriger als in den vorherigen 7 Tagen %1$s höher als in den vorherigen 7 Tagen @@ -1093,7 +1086,6 @@ Language: de Letzte 7 Tage Von <b>Day One</b> Später daran erinnern - Die Statistiken, der Reader, die Benachrichtigungen und weitere Funktionen werden bald in die Jetpack-Mobil-App verschoben. Zur Jetpack-App wechseln Mehr erfahren auf jetpack.com Der Wechsel ist kostenlos und dauert nur eine Minute. diff --git a/WordPress/src/main/res/values-en-rCA/strings.xml b/WordPress/src/main/res/values-en-rCA/strings.xml index cab4db0fb8db..71c1517d96b1 100644 --- a/WordPress/src/main/res/values-en-rCA/strings.xml +++ b/WordPress/src/main/res/values-en-rCA/strings.xml @@ -567,9 +567,6 @@ Language: en_CA Twitter auto-sharing is no longer available Twitter auto-sharing is no longer available due to Twitter\'s changes in terms and pricing. Allow notifications to keep up with your site - The Jetpack app has all the WordPress app’s functionality, and now exclusive access to Stats, Reader, Notifications and more. - Use WordPress with %s in the Jetpack\u00A0app. - Use WordPress with %s in the Jetpack\u00A0app. Unlabeled color. %s Recent activity Like the example above, a domain allows people to find and visit your site from their web browser. @@ -624,15 +621,12 @@ Language: en_CA This site %1$s is using %2$s, which don’t support all features of the app yet. Please install the %3$s. %1$s is using %2$s, which doesn’t support all features of the app yet. Please install the %3$s. - Switching is free and only takes a minute. Done Set up Manage Content Traffic WP Admin - Switch to the Jetpack app - Learn more at Jetpack.com Now that Jetpack is installed, we just need to get you set up. This will only take a minute. Blaze this Post Blaze this Page @@ -704,7 +698,6 @@ Language: en_CA Jetpack features have moved. Do this later Switch to Jetpack - %1$s is moving soon View all responses %1$s lower than the previous 7-days %1$s higher than the previous 7-days @@ -719,7 +712,6 @@ Language: en_CA Learn more at jetpack.com Switching is free and only takes a minute. Switch to the Jetpack app - Stats, Reader, Notifications and other features will soon move to the Jetpack mobile app. There was an error loading prompts. Oops No prompts yet diff --git a/WordPress/src/main/res/values-en-rGB/strings.xml b/WordPress/src/main/res/values-en-rGB/strings.xml index e221d39a2284..b5800a32cfa3 100644 --- a/WordPress/src/main/res/values-en-rGB/strings.xml +++ b/WordPress/src/main/res/values-en-rGB/strings.xml @@ -944,9 +944,6 @@ Language: en_GB Twitter auto-sharing is no longer available due to Twitter\'s changes in terms and pricing. Twitter auto-sharing is no longer available Allow notifications to keep up with your site - The Jetpack app has all the WordPress app’s functionality, and now exclusive access to Stats, Reader, Notifications and more. - Use WordPress with %s in the Jetpack\u00A0app. - Use WordPress with %s in the Jetpack\u00A0app. Unlabeled colour. %s Recent activity Like the example above, a domain allows people to find and visit your site from their web browser. @@ -1001,9 +998,6 @@ Language: en_GB This site %1$s is using %2$s, which don’t support all features of the app yet. Please install the %3$s. %1$s is using %2$s, which doesn’t support all features of the app yet. Please install the %3$s. - Switching is free and only takes a minute. - Learn more at Jetpack.com - Switch to the Jetpack app WP Admin Manage Traffic @@ -1081,7 +1075,6 @@ Language: en_GB Switch to Jetpack Stats, Reader, Notifications and other Jetpack powered features have been removed from the WordPress app. Jetpack features have moved. - %1$s is moving soon View all responses %1$s lower than the previous 7 days %1$s higher than the previous 7 days @@ -1093,7 +1086,6 @@ Language: en_GB Last 7 days From <b>Day One</b> Remind me later - Stats, Reader, Notifications and other features will soon move to the Jetpack mobile app. Switch to the Jetpack app Learn more at jetpack.com Switching is free and only takes a minute. diff --git a/WordPress/src/main/res/values-es-rCL/strings.xml b/WordPress/src/main/res/values-es-rCL/strings.xml index cda7b4da3f31..37edcfc7853e 100644 --- a/WordPress/src/main/res/values-es-rCL/strings.xml +++ b/WordPress/src/main/res/values-es-rCL/strings.xml @@ -462,9 +462,6 @@ Language: es_CL Saber más La opción de compartir automáticamente en Twitter ya no está disponible Activa las notificaciones para estar al tanto de lo que sucede en tu sitio - La aplicación de Jetpack tiene todas las funciones de la aplicación de WordPress, y ahora ofrece acceso exclusivo a Estadísticas, Lector, Notificaciones y mucho más. - Usa WordPress con %s en la\u00A0aplicación de Jetpack. - Usa WordPress con %s en la\u00A0aplicación de Jetpack. Actividad reciente Color sin etiquetar. %s Como en el ejemplo superior, un dominio le permite a la gente encontrar y visitar tu sitio desde su navegador. @@ -519,7 +516,6 @@ Language: es_CL %1$s usa %2$s, que todavía no es compatible con todas las funciones de la aplicación. Instala el %3$s. Este sitio %1$s usa %2$s, que todavía no es compatible con todas las funciones de la aplicación. Instala el %3$s. - El cambio es gratuito y solo te llevará un minuto. Hecho Configurar Ahora que Jetpack está instalado, solo tenemos que configurarlo. Solo te llevará un minuto. @@ -527,8 +523,6 @@ Language: es_CL Contenido Gestionar Tráfico - Cambiar a la aplicación de Jetpack - Encontrarás más información en Jetpack.com Promocionar esta página con Blaze Promocionar esta entrada con Blaze Promocionar una entrada con Blaze ahora @@ -599,7 +593,6 @@ Language: es_CL Las características de Jetpack se han trasladado. Hacerlo más tarde Cambiar a Jetpack - %1$s se trasladará pronto Ver todas las respuestas %1$s es menor que la semana anterior %1$s es mayor que la semana anterior @@ -610,7 +603,6 @@ Language: es_CL Últimos siete días Siete días anteriores Desde <b>Day One</b> - Algunas funciones, como estadísticas, lector o avisos, se trasladarán pronto a la aplicación móvil de Jetpack. Recuérdamelo más tarde Más información en jetpack.com El cambio es gratuito y solo lleva un minuto. diff --git a/WordPress/src/main/res/values-es-rCO/strings.xml b/WordPress/src/main/res/values-es-rCO/strings.xml index c9d83b753b88..8da08f89904b 100644 --- a/WordPress/src/main/res/values-es-rCO/strings.xml +++ b/WordPress/src/main/res/values-es-rCO/strings.xml @@ -944,9 +944,6 @@ Language: es_CO La opción de compartir automáticamente en Twitter ya no está disponible debido a las modificaciones que ha sufrido esta red social en lo que respecta a términos y precios. La opción de compartir automáticamente en Twitter ya no está disponible Activa las notificaciones para estar al tanto de lo que sucede en tu sitio - La aplicación de Jetpack tiene todas las funciones de la aplicación de WordPress, y ahora ofrece acceso exclusivo a Estadísticas, Lector, Notificaciones y mucho más. - Usa WordPress con %s en la\u00A0aplicación de Jetpack. - Usa WordPress con %s en la\u00A0aplicación de Jetpack. Color sin etiquetar. %s Actividad reciente Como en el ejemplo superior, un dominio le permite a la gente encontrar y visitar tu sitio desde su navegador. @@ -1001,9 +998,6 @@ Language: es_CO Este sitio %1$s usa %2$s, que todavía no es compatible con todas las funciones de la aplicación. Instala el %3$s. %1$s usa %2$s, que todavía no es compatible con todas las funciones de la aplicación. Instala el %3$s. - El cambio es gratuito y solo te llevará un minuto. - Encontrarás más información en Jetpack.com - Cambiar a la aplicación de Jetpack WP Admin Gestionar Tráfico @@ -1081,7 +1075,6 @@ Language: es_CO Cambiar a Jetpack Algunas características de Jetpack como Estadísticas, Lector o Notificaciones, entre otras, han sido eliminadas de la app de WordPress. Las características de Jetpack se han trasladado. - %1$s se trasladará pronto Ver todas las respuestas %1$s es menor que la semana anterior %1$s es mayor que la semana anterior @@ -1093,7 +1086,6 @@ Language: es_CO Últimos siete días Desde <b>Day One</b> Recuérdamelo más tarde - Algunas funciones, como estadísticas, lector o avisos, se trasladarán pronto a la aplicación móvil de Jetpack. Cambiar a la aplicación de Jetpack Más información en jetpack.com El cambio es gratuito y solo lleva un minuto. diff --git a/WordPress/src/main/res/values-es/strings.xml b/WordPress/src/main/res/values-es/strings.xml index cf482cfaabbc..3f7d6a985608 100644 --- a/WordPress/src/main/res/values-es/strings.xml +++ b/WordPress/src/main/res/values-es/strings.xml @@ -944,9 +944,6 @@ Language: es La opción de compartir automáticamente en Twitter ya no está disponible debido a las modificaciones que ha sufrido esta red social en lo que respecta a términos y precios. La opción de compartir automáticamente en Twitter ya no está disponible Activa las notificaciones para estar al tanto de lo que sucede en tu sitio - La aplicación de Jetpack tiene todas las funciones de la aplicación de WordPress, y ahora ofrece acceso exclusivo a Estadísticas, Lector, Notificaciones y mucho más. - Usa WordPress con %s en la\u00A0aplicación de Jetpack. - Usa WordPress con %s en la\u00A0aplicación de Jetpack. Color sin etiquetar. %s Actividad reciente Como en el ejemplo superior, un dominio le permite a la gente encontrar y visitar tu sitio desde su navegador. @@ -1001,9 +998,6 @@ Language: es Este sitio %1$s usa %2$s, que todavía no es compatible con todas las funciones de la aplicación. Instala el %3$s. %1$s usa %2$s, que todavía no es compatible con todas las funciones de la aplicación. Instala el %3$s. - El cambio es gratuito y solo te llevará un minuto. - Encontrarás más información en Jetpack.com - Cambiar a la aplicación de Jetpack WP Admin Gestionar Tráfico @@ -1081,7 +1075,6 @@ Language: es Cambiar a Jetpack Algunas características de Jetpack como Estadísticas, Lector o Notificaciones, entre otras, han sido eliminadas de la app de WordPress. Las características de Jetpack se han trasladado. - %1$s se trasladará pronto Ver todas las respuestas %1$s es menor que la semana anterior %1$s es mayor que la semana anterior @@ -1093,7 +1086,6 @@ Language: es Últimos siete días Desde <b>Day One</b> Recuérdamelo más tarde - Algunas funciones, como estadísticas, lector o avisos, se trasladarán pronto a la aplicación móvil de Jetpack. Cambiar a la aplicación de Jetpack Más información en jetpack.com El cambio es gratuito y solo lleva un minuto. diff --git a/WordPress/src/main/res/values-fr-rCA/strings.xml b/WordPress/src/main/res/values-fr-rCA/strings.xml index f6bd943ca0f1..d188bae8f47f 100644 --- a/WordPress/src/main/res/values-fr-rCA/strings.xml +++ b/WordPress/src/main/res/values-fr-rCA/strings.xml @@ -918,9 +918,6 @@ Language: fr Le partage automatique sur Twitter n’est plus disponible en raison de modifications des conditions générales et tarifaires de Twitter. Le partage automatique sur Twitter n’est plus disponible Autoriser les notifications pour suivre l’évolution de votre site - L’application Jetpack dispose de toutes les fonctionnalités de l’application WordPress et inclut désormais un accès exclusif aux statistiques, au lecteur, aux notifications, et plus encore. - Utilisez WordPress avec %s dans l’application Jetpack\u00A0. - Utilisez WordPress avec %s dans l’application Jetpack\u00A0. Couleur sans libellé. %s Activité récente Comme le montre l’exemple ci-dessus, un domaine permet aux internautes de trouver et de visiter votre site depuis leur navigateur Web. @@ -975,9 +972,6 @@ Language: fr Ce site %1$s utilise des %2$s, qui ne prennent pas encore en charge toutes les fonctionnalités de l’application. Installez l’%3$s. %1$s utilise une %2$s, qui ne prend pas encore en charge toutes les fonctionnalités de l’application. Installez l’%3$s. - Passer d’une application à l’autre est gratuit et ne prend qu’une minute. - Lire la suite sur Jetpack.com - Passer à l’application Jetpack Administrateur WP Gérer Trafic @@ -1055,7 +1049,6 @@ Language: fr Passer à Jetpack Les statistiques, le lecteur, les notifications et d’autres fonctionnalités reposant sur Jetpack ont été supprimées de l’application WordPress. Les fonctionnalités Jetpack ont été déplacées. - %1$s va bientôt être déplacée Consulter les réponses du formulaire inférieur de %1$s par rapport à la semaine précédente %1$s en hausse par rapport aux 7 jours précédents @@ -1067,7 +1060,6 @@ Language: fr 7 derniers jours De <b>Day One</b> Me rappeler ultérieurement - Les statistiques, le lecteur, les notifications et d’autres fonctionnalités seront bientôt transférées vers l’application mobile Jetpack. Passer à l’application Jetpack Lire la suite sur jetpack.com Passer d’une application à l’autre est gratuit et ne prend qu’une minute. diff --git a/WordPress/src/main/res/values-fr/strings.xml b/WordPress/src/main/res/values-fr/strings.xml index f6bd943ca0f1..d188bae8f47f 100644 --- a/WordPress/src/main/res/values-fr/strings.xml +++ b/WordPress/src/main/res/values-fr/strings.xml @@ -918,9 +918,6 @@ Language: fr Le partage automatique sur Twitter n’est plus disponible en raison de modifications des conditions générales et tarifaires de Twitter. Le partage automatique sur Twitter n’est plus disponible Autoriser les notifications pour suivre l’évolution de votre site - L’application Jetpack dispose de toutes les fonctionnalités de l’application WordPress et inclut désormais un accès exclusif aux statistiques, au lecteur, aux notifications, et plus encore. - Utilisez WordPress avec %s dans l’application Jetpack\u00A0. - Utilisez WordPress avec %s dans l’application Jetpack\u00A0. Couleur sans libellé. %s Activité récente Comme le montre l’exemple ci-dessus, un domaine permet aux internautes de trouver et de visiter votre site depuis leur navigateur Web. @@ -975,9 +972,6 @@ Language: fr Ce site %1$s utilise des %2$s, qui ne prennent pas encore en charge toutes les fonctionnalités de l’application. Installez l’%3$s. %1$s utilise une %2$s, qui ne prend pas encore en charge toutes les fonctionnalités de l’application. Installez l’%3$s. - Passer d’une application à l’autre est gratuit et ne prend qu’une minute. - Lire la suite sur Jetpack.com - Passer à l’application Jetpack Administrateur WP Gérer Trafic @@ -1055,7 +1049,6 @@ Language: fr Passer à Jetpack Les statistiques, le lecteur, les notifications et d’autres fonctionnalités reposant sur Jetpack ont été supprimées de l’application WordPress. Les fonctionnalités Jetpack ont été déplacées. - %1$s va bientôt être déplacée Consulter les réponses du formulaire inférieur de %1$s par rapport à la semaine précédente %1$s en hausse par rapport aux 7 jours précédents @@ -1067,7 +1060,6 @@ Language: fr 7 derniers jours De <b>Day One</b> Me rappeler ultérieurement - Les statistiques, le lecteur, les notifications et d’autres fonctionnalités seront bientôt transférées vers l’application mobile Jetpack. Passer à l’application Jetpack Lire la suite sur jetpack.com Passer d’une application à l’autre est gratuit et ne prend qu’une minute. diff --git a/WordPress/src/main/res/values-gl/strings.xml b/WordPress/src/main/res/values-gl/strings.xml index af69767bf2a8..ba1515aa6713 100644 --- a/WordPress/src/main/res/values-gl/strings.xml +++ b/WordPress/src/main/res/values-gl/strings.xml @@ -599,9 +599,6 @@ Language: gl_ES A opción de compartir automaticamente en Twitter xa non está dispoñible O uso compartido automático de Twitter xa non está disponible debido aos cambios de Twitter nos termos e prezos. Permitir avisos para estar ao día co teu sitio - A aplicación JetPack ten todas as funcionalidades da aplicación WordPress, e agora acceso exclusivo a Estatísticas, Lector, Avisos e máis. - Usar WordPress con %s na aplicación\u00A0JetPack. - Usar WordPress con %s na aplicación\u00A0JetPack. Actividade recente ONomeDaTuaWeb.com Cor sen etiquetar. %s @@ -656,15 +653,12 @@ Language: gl_ES Este sitio %1$s usa %2$s, que aínda non é compatible con todas as funcións da aplicación. Instala o %3$s. %1$s usa %2$s, que aínda non é compatible con todas as funcións da aplicación. Instala o %3$s. - O cambio é gratuíto e só che levará un minuto. Feito Xestionar Configurar Tráfico Contido WP Admin - Encontrarás máis información en Jetpack.com - Cambia á aplicación de Jetpack Agora que Jetpack está instalado, só tenemos que configuralo. Só che levará un minuto. Fai un seguimento do rendemento, inicia e para a actividade promocional de Blaze en calquera momento. Promover unha entrada con Blaze agora @@ -733,7 +727,6 @@ Language: gl_ES Recibe axuda do noso grupo de voluntarios. Facelo máis tarde Cambiar a Jetpack - %1$s trasladarase pronto As características de Jetpack trasladáronse. Por favor, instala a Google Play Store para obter a app de Jetpack Algunhas características de Jetpack como Estatísticas, Lector ou Notificacións, entre outras, elimináronse da app de WordPress. @@ -751,7 +744,6 @@ Language: gl_ES Cambiar á aplicación de Jetpack Máis información en jetpack.com O cambio é gratuíto e só leva un minuto. - As estatísticas, o lector, as notificacións e outras características trasladaranse pronto á aplicación móbil de Jetpack. Vaia! 1 resposta 0 respostas diff --git a/WordPress/src/main/res/values-he/strings.xml b/WordPress/src/main/res/values-he/strings.xml index 2ccca2342145..46602c491ab7 100644 --- a/WordPress/src/main/res/values-he/strings.xml +++ b/WordPress/src/main/res/values-he/strings.xml @@ -931,9 +931,6 @@ Language: he_IL האפשרות לשיתוף אוטומטי בטוויטר כבר לא זמינה עקב השינויים בתנאים ובתמחור של טוויטר. האפשרות לשיתוף אוטומטי בטוויטר כבר לא זמינה לאפשר להודעות להתעדכן מול האתר שלך - באפליקציה של Jetpack יש את כל הפונקציונליות של האפליקציה של WordPress ועכשיו גם גישה בלעדית לנתונים סטטיסטיים, ל-Reader, להודעות ועוד. - להשתמש ב-WordPress עם %s באפליקציה של Jetpack\u00A0. - להשתמש ב-WordPress עם %s באפליקציה של Jetpack\u00A0. צבע ללא תווית. %s פעילות אחרונה כמו הדוגמה שמוצגת למעלה, דומיין מאפשר לאנשים למצוא את האתר שלך ולבקר בו מדפדפן האינטרנט שלהם. @@ -988,9 +985,6 @@ Language: he_IL האתר הזה האתר ⁦%1$s⁩ משתמש ב-⁦%2$s⁩ שעדיין לא תומכים בכל האפשרויות של האפליקציה. יש להתקין את ⁦%3$s⁩. האתר ⁦%1$s⁩ משתמש ב-⁦%2$s⁩ שעדיין לא תומך בכל האפשרויות של האפליקציה. יש להתקין את ⁦%3$s⁩. - ההחלפה היא חינמית ואורכת דקה בלבד. - מידע נוסף באתר Jetpack.com - החלפה לאפליקציה של Jetpack ניהול WP ניהול תעבורה @@ -1068,7 +1062,6 @@ Language: he_IL לעבור ל-Jetpack נתונים סטטיסטיים, Reader, הודעות ואפשרויות אחרות שמופעלות על ידי Jetpack הוסרו מאפליקציית WordPress. האפשרויות של Jetpack הועברו. - האפשרות ⁦%1$s⁩ תועבר בקרוב להציג את כל התשובות ⁦%1$s⁩ פחות לעומת שבעת הימים הקודמים ⁦%1$s⁩ יותר משבעת הימים הקודמים @@ -1080,7 +1073,6 @@ Language: he_IL שבעת הימים האחרונים מ-<b>Day One</b> הזכירו לי מאוחר יותר - האפשרויות של נתונים סטטיסטיים, Reader, הודעות ואפשרויות אחרות יועברו בקרוב אל האפליקציה של Jetpack לנייד. החלפה לאפליקציה של Jetpack מידע נוסף באתר Jetpack.com ההחלפה היא חינמית ואורכת דקה בלבד. diff --git a/WordPress/src/main/res/values-id/strings.xml b/WordPress/src/main/res/values-id/strings.xml index ab5abde71c06..0188f9c564f5 100644 --- a/WordPress/src/main/res/values-id/strings.xml +++ b/WordPress/src/main/res/values-id/strings.xml @@ -933,9 +933,6 @@ Language: id Membagikan otomatis di Twitter tidak lagi tersedia karena perubahan kebijakan dan harga di Twitter. Membagikan otomatis di Twitter tidak lagi tersedia Izinkan pemberitahuan untuk mengikuti perkembangan situs Anda - Aplikasi Jetpack memiliki semua fungsionalitas aplikasi WordPress, dan sekarang memiliki akses eksklusif ke Statistik, Pembaca, Notifikasi, dan lainnya. - Gunakan WordPress dengan %s di aplikasi\u00A0Jetpack. - Gunakan WordPress dengan %s di aplikasi\u00A0Jetpack. Warna tanpa label. %s Aktivitas terbaru Seperti contoh di atas, domain mengizinkan Anda menemukan dan mengunjungi situs Anda dari web browser. @@ -990,9 +987,6 @@ Language: id Situs berikut %1$s ini menggunakan %2$s yang belum mendukung semua fitur dalam aplikasi. Silakan instal %3$s. %1$s ini menggunakan %2$s yang belum mendukung semua fitur dalam aplikasi. Silakan instal %3$s. - Beralihlah ke aplikasi—gratis dan prosesnya cepat! - Baca selengkapnya di Jetpack.com - Ganti ke aplikasi Jetpack Admin WP Kelola Lalu Lintas @@ -1070,7 +1064,6 @@ Language: id Ganti ke Jetpack Statistik, Reader, Pemberitahuan, dan beragam fitur lain berbasis Jetpack telah dihapus dari aplikasi WordPress. Fitur-fitur Jetpack telah berpindah. - %1$s segera berpindah Lihat semua tanggapan %1$s lebih rendah dari 7 hari sebelumnya %1$s lebih tinggi dari 7 hari sebelumnya @@ -1082,7 +1075,6 @@ Language: id 7 hari terakhir Dari <b>Day One</b> Ingatkan saya nanti - Statistik, Reader, Pemberitahuan, dan berbagai fitur lain akan segera berpindah ke aplikasi ponsel Jetpack. Ganti ke aplikasi Jetpack Baca selengkapnya di jetpack.com Bergantilah ke aplikasi—gratis dan prosesnya cepat! diff --git a/WordPress/src/main/res/values-it/strings.xml b/WordPress/src/main/res/values-it/strings.xml index a19f29845de4..7101241017a1 100644 --- a/WordPress/src/main/res/values-it/strings.xml +++ b/WordPress/src/main/res/values-it/strings.xml @@ -944,9 +944,6 @@ Language: it La condivisione automatica di Twitter non è più disponibile a causa delle modifiche nei termini e nei prezzi di Twitter. La condivisione automatica di Twitter non è più disponibile Consenti le notifiche per stare al passo con il tuo sito - L\'app Jetpack offre tutte le funzionalità dell\'app WordPress e ora anche l\'accesso esclusivo a Statistiche, Reader, Notifiche e altro. - Usa WordPress con %s nell\'app Jetpack\u00A0. - Usa WordPress con %s nell\'app Jetpack\u00A0. Colore senza etichetta. %s Attività recente Come nell\'esempio precedente, un dominio consente agli utenti di trovare e visitare il tuo sito dal proprio browser web. @@ -1001,9 +998,6 @@ Language: it Questo sito %1$s utilizza %2$s, che non supportano ancora tutte le funzionalità dell\'app. Please install the %3$s. %1$s utilizza %2$s, che non supportano ancora tutte le funzionalità dell\'app. Please install the %3$s. - Il passaggio è gratuito e richiede solo un minuto. - Maggiori informazioni su jetpack.com - Passa all\'app Jetpack WP Admin Gestisci Traffico @@ -1081,7 +1075,6 @@ Language: it Passa a Jetpack Statistiche, Reader, Notifiche e altre funzionalità basate su Jetpack sono state rimosse dall\'app WordPress. Le funzionalità di Jetpack sono state trasferite. - %1$s si trasferirà presto Visualizza tutte le risposte %1$s in meno rispetto ai 7 giorni precedenti %1$s in più rispetto ai 7 giorni precedenti @@ -1093,7 +1086,6 @@ Language: it Ultimi 7 giorni Da <b>Day One</b> Ricordamelo più tardi - Statistiche, Reader, Notifiche e altre funzionalità passeranno presto all\'app mobile Jetpack. Passa all\'app Jetpack Maggiori informazioni su jetpack.com Il passaggio è gratuito e richiede solo un minuto. diff --git a/WordPress/src/main/res/values-ja/strings.xml b/WordPress/src/main/res/values-ja/strings.xml index 6f59d1c622fe..70b73addaf3f 100644 --- a/WordPress/src/main/res/values-ja/strings.xml +++ b/WordPress/src/main/res/values-ja/strings.xml @@ -924,9 +924,6 @@ Language: ja_JP Twitter の自動共有機能は Twitter の規約と価格に変更があったため利用できなくなりました。 Twitter の自動共有機能は利用できなくなりました サイトを更新するよう通知を許可する - Jetpack アプリで WordPress アプリの全機能に加えて統計、Reader、通知などを特別に利用できるようになりました。 - Jetpack\u00A0app で WordPress と %sを利用できます。 - Jetpack\u00A0app で WordPress と %sを利用できます。 ラベルない色。 %s 最近のアクティビティ 上記の例のように、ドメインを使用するとユーザーは、Web ブラウザーからサイトを見つけてアクセスできます。 @@ -981,9 +978,6 @@ Language: ja_JP このサイト %1$s が使用している %2$s は、まだアプリのすべての機能をサポートしていません。 %3$s をインストールしてください。 %1$s が使用している %2$s は、まだアプリのすべての機能をサポートしていません。 %3$s をインストールしてください。 - 切り替えは無料で、数分で終わります。 - 詳細は Jetpack.com をご覧ください - Jetpack アプリに切り替える WP 管理画面 管理 トラフィック @@ -1061,7 +1055,6 @@ Language: ja_JP Jetpack に切り替える 統計、Reader、通知などの Jetpack 機能は、WordPress アプリから削除されました。 Jetpack 機能が移動しました。 - %1$s がまもなく移動します すべての回答を表示 前の7日間と比べて%1$s 減少 前の7日間と比べて%1$s 増加 @@ -1073,7 +1066,6 @@ Language: ja_JP 過去7日間 <b>Day One</b> から 後で再通知 - 統計、Reader、通知などの機能は、まもなく Jetpack モバイルアプリに移動します。 Jetpack アプリに切り替える 詳細は jetpack.com をご覧ください 切り替えは無料で、数分で終わります。 diff --git a/WordPress/src/main/res/values-ko/strings.xml b/WordPress/src/main/res/values-ko/strings.xml index a98f8d73a31c..3af2cf47e17c 100644 --- a/WordPress/src/main/res/values-ko/strings.xml +++ b/WordPress/src/main/res/values-ko/strings.xml @@ -935,9 +935,6 @@ Language: ko_KR Twitter의 약관 및 가격 변경으로 인해 Twitter 자동 공유를 더 이상 사용할 수 없습니다. Twitter 자동 공유를 더 이상 사용할 수 없습니다. 알림이 사이트에 계속 표시되도록 허용 - 젯팩 앱에서는 워드프레스 앱의 모든 기능을 보유하며, 이제 통계, 리더, 알림 등에 독점적으로 접근할 수 있습니다. - 젯팩\u00A0앱에서 %s과(와) 함께 워드프레스를 사용하세요. - 젯팩\u00A0앱에서 %s과(와) 함께 워드프레스를 사용하세요. 레이블이 없는 색상입니다. %s 최근 활동 위의 예와 같이 사용자가 웹 브라우저에서 도메인을 통해 사이트를 찾고 방문할 수 있습니다. @@ -992,9 +989,6 @@ Language: ko_KR 이 사이트 %1$s에서는 %2$s을(를) 사용하고 있으며 여기에서는 아직 앱의 모든 기능이 지원되지 않습니다. %3$s을(를) 설치하세요. %1$s에서는 %2$s을(를) 사용하고 있으며 여기에서는 아직 앱의 모든 기능이 지원되지 않습니다. %3$s을(를) 설치하세요. - 전환은 무료이며 1분밖에 걸리지 않습니다. - Jetpack.com에서 더 알아보기 - 젯팩 앱으로 전환 WP 관리자 관리 트래픽 @@ -1072,7 +1066,6 @@ Language: ko_KR 젯팩으로 전환 통계, 리더, 알림 및 기타 젯팩에서 제공되는 기능이 워드프레스 앱에서 제거되었습니다. 젯팩 기능이 제거되었습니다. - 곧 %1$s 이동 예정 모든 응답 보기 이전 7일보다 %1$s 적음 이전 7일보다 %1$s 많음 @@ -1084,7 +1077,6 @@ Language: ko_KR 최근 7일 출처: <b>Day One</b> 나중에 다시 알림 - 곧 통계, 리더, 알림 및 기타 기능이 젯팩 모바일 앱으로 이동됩니다. 젯팩 앱으로 전환 jetpack.com에서 더 알아보기 전환은 무료이며 1분밖에 걸리지 않습니다. diff --git a/WordPress/src/main/res/values-lv/strings.xml b/WordPress/src/main/res/values-lv/strings.xml index f511679d9718..3dfca539d231 100644 --- a/WordPress/src/main/res/values-lv/strings.xml +++ b/WordPress/src/main/res/values-lv/strings.xml @@ -481,10 +481,7 @@ Language: lv Automātiskā koplietošana pakalpojumā Twitter vairs nav pieejama Twitter auto-dalīšanās vairs nav pieejama, jo Twitter ir veicis izmaiņas terminos un cenās. Uzzināt vairāk - Jetpack lietotnei ir visi WordPress lietotnes funkcionalitātes, un tagad ekskluzīva piekļuve statistikai, lasītājam, paziņojumiem un citiem resursiem. Ļaujiet saņemt paziņojumus, lai sekotu līdzi jūsu vietnei - Izmantojiet WordPress ar %s Jetpack\u00A0app. - Izmantojiet WordPress ar %s Jetpack\u00A0app. YourSiteName.com Līdzīgi kā iepriekš minētajā piemērā, domēns ļauj cilvēkiem atrast un apmeklēt jūsu vietni savā tīmekļa pārlūkprogrammā. Pēdējā darbība @@ -539,7 +536,6 @@ Language: lv %1$s izmanto %2$s, kas vēl neatbalsta visas lietotnes funkcijas. Lūdzu, instalējiet %3$s. Šī vietne %1$s izmanto %2$s, kas vēl neatbalsta visas lietotnes funkcijas. Lūdzu, instalējiet %3$s. - Pārslēgšanās ir bezmaksas un aizņem tikai minūti. Tagad, kad Jetpack ir instalēts, mums ir tikai jāveic iestatīšana. Tas prasīs tikai minūti. Gatavs Uzstādīt @@ -547,8 +543,6 @@ Language: lv Satiksme Pārvaldīt WP administrators - Pārslēdzieties uz Jetpack lietotni - Uzziniet vairāk vietnē Jetpack.com Sekojiet veiktspējai, iedarbiniet un apturiet savu Blaze jebkurā laikā. Izgaismojiet šo ziņu Izgaismojiet šo lapu @@ -614,7 +608,6 @@ Language: lv Kopienas forumi Saņemiet palīdzību no mūsu brīvprātīgo grupas. Izslēgt uzvednes - %1$s drīzumā tiks pārvietots Jetpack funkcijas ir pārvietotas. Statistika, lasītājs, paziņojumi un citas Jetpack darbināmas funkcijas ir noņemtas no WordPress lietotnes. Pārslēdzieties uz Jetpack @@ -634,7 +627,6 @@ Language: lv Uzziniet vairāk vietnē jetpack.com Pārslēdzieties uz Jetpack lietotni Atgādināt vēlāk - Statistika, Lasītājs, Paziņojumi un citi līdzekļi drīzumā tiks pārvietoti uz Jetpack mobilo lietotni. 0 atbildes 1 atbilde %d atbildes diff --git a/WordPress/src/main/res/values-nl/strings.xml b/WordPress/src/main/res/values-nl/strings.xml index 38a676e5c576..b19f535f4aae 100644 --- a/WordPress/src/main/res/values-nl/strings.xml +++ b/WordPress/src/main/res/values-nl/strings.xml @@ -944,9 +944,6 @@ Language: nl Automatisch delen op Twitter is niet langer beschikbaar vanwege wijzigingen van de voorwaarden en prijzen van Twitter. Automatisch delen op Twitter is niet langer beschikbaar Sta meldingen toe om op de hoogte te blijven van je site - De Jetpack app heeft alle functies van de WordPress app, en nu ook exclusieve toegang tot Statistieken, Reader, Meldingen en meer. - Gebruik WordPress met %s in de Jetpack\u00A0app. - Gebruik WordPress met %s in de Jetpack\u00A0app. Niet-gelabelde kleur. %s Recente activiteit Net als in het voorbeeld hierboven kunnen mensen met een domein je site vinden en bezoeken vanuit hun webbrowser. @@ -1001,9 +998,6 @@ Language: nl Deze site %1$s gebruikt %2$s. Deze ondersteunen nog niet alle functies van de app. Installeer de %3$s. %1$s gebruikt %2$s. Deze ondersteunt nog niet alle functies van de app. Installeer de %3$s. - Overstappen is gratis en duurt maar een minuut. - Lees verder op Jetpack.com - Schakel over naar de Jetpack-app WP Admin Beheren Bezoekersaantallen @@ -1081,7 +1075,6 @@ Language: nl Overstappen naar Jetpack Statistieken, Reader, meldingen en andere functies die door Jetpack aangedreven worden, zijn verwijderd uit de WordPress-app. Jetpack functies zijn verplaatst. - %1$s wordt binnenkort verplaatst Alle reacties bekijken %1$s minder dan de vorige 7 dagen %1$s meer dan de vorige 7 dagen @@ -1093,7 +1086,6 @@ Language: nl Afgelopen 7 dagen Van <b>Day One</b> Herinner mij hier later aan - Statistieken, Lezer, Meldingen en andere functies worden binnenkort verplaatst naar de mobiele Jetpack-app. Schakel over naar de Jetpack-app Lees verder op jetpack.com Overstappen is gratis en duurt maar een minuut. diff --git a/WordPress/src/main/res/values-pl/strings.xml b/WordPress/src/main/res/values-pl/strings.xml index d5a99e374d92..7e0f3492e534 100644 --- a/WordPress/src/main/res/values-pl/strings.xml +++ b/WordPress/src/main/res/values-pl/strings.xml @@ -944,9 +944,6 @@ Language: pl Automatyczje udostępnianie na Twitterze nie jest już dostępne z powodu zmian w regulaminie i cenniku Twittera. Automatyczne udostępnianie w Twitterze nie jest już dostępne Zezwalaj na powiadomienia, aby być na bieżąco ze swoją witryną - Aplikacja Jetpack ma wszystkie funkcje aplikacji WordPress, a teraz ma też ekskluzywny dostęp do Statystyk, Czytnika, Powiadomień i nie tylko. - Użyj WordPressa z %s w aplikacji Jetpack. - Użyj WordPressa z %s w aplikacji Jetpack. Nieoznakowany kolor. %s Ostatnia aktywność Jak w powyższym przykładzie, domena pozwala ludziom znaleźć i przejść na twoją witrynę z ich przeglądarki internetowej. @@ -1001,9 +998,6 @@ Language: pl Ta witryna %1$s używa %2$s, które jeszcze nie obsługują wszystkich funkcji aplikacji. Proszę zainstalować %3$s. %1$s używa %2$s, który nie obsługuje jeszcze wszystkich funkcji aplikacji. Zainstaluj %3$s. - Zmiana jest bezpłatna i zajmie tylko minutę. - Dowiedz się więcej na Jetpack.com - Przejdź na aplikację Jetpack WP Admin Zarządzaj Ruch na blogu @@ -1081,7 +1075,6 @@ Language: pl Przejdź na Jetpack Statystyki, Czytnik, Powiadomienia i inne funkcje zasilane przez Jetpack zostały usunięte z aplikacji WordPress. Funkcje jetpacka zostały przeniesione. - %1$s wkrótce się przeniesie Zobacz wszystkie odpowiedzi %1$s niższa niż w ciągu poprzednich 7 dni %1$s wyższa niż w ciągu poprzednich 7 dni @@ -1093,7 +1086,6 @@ Language: pl Ostatnie 7 dni Od <b>Pierwszego Dnia</b> Przypomnij mi później - Statystyki, Czytnik, Powiadomienia i inne funkcje przejdą wkrótce do aplikacji mobilnej Jetpack. Przejdź na aplikację Jetpack Dowiedz się więcej na jetpack.com Przejście jest darmowe i zajmuje chwilę. diff --git a/WordPress/src/main/res/values-pt-rBR/strings.xml b/WordPress/src/main/res/values-pt-rBR/strings.xml index 41d244d403d5..b89218667680 100644 --- a/WordPress/src/main/res/values-pt-rBR/strings.xml +++ b/WordPress/src/main/res/values-pt-rBR/strings.xml @@ -638,9 +638,6 @@ Language: pt_BR O autocompartilhamento do Twitter não está mais disponível devido a uma mudança nos termos e preços do Twitter. O autocompartilhamento no Twitter não está mais disponível Ative as notificações para acompanhar a atividade do seu site - O aplicativo do Jetpack tem todas as funcionalidades do aplicativo do WordPress e agora acesso exclusivo a Estatísticas, Leitor, Notificações e muito mais. - Use o WordPress com %s no aplicativo do\u00A0Jetpack. - Use o WordPress com %s no aplicativo do\u00A0Jetpack. Cor não rotulada. %s Atividade recente Como no exemplo acima, um domínio permite que as pessoas encontrem e visitem seu site usando um navegador. @@ -695,9 +692,6 @@ Language: pt_BR Este site %1$s está usando %2$s, que ainda não são compatíveis com todas as funcionalidades do aplicativo. Instale o %3$s. %1$s está usando %2$s, que ainda não é compatível com todas as funcionalidades do aplicativo. Instale o %3$s. - A mudança é gratuita e leva apenas um minuto. - Saiba mais em br.jetpack.com - Mudar para o aplicativo do Jetpack Painel WP Admin Gerenciar Tráfego @@ -775,7 +769,6 @@ Language: pt_BR Mudar para o Jetpack Estatísticas, Leitor, Notificações e outras funcionalidades com tecnologia Jetpack foram removidas do aplicativo WordPress. Recursos do Jetpack foram movidos. - %1$s será movido em breve Ver todas as respostas %1$s menor do que nos sete dias anteriores %1$s maior do que nos sete dias anteriores @@ -787,7 +780,6 @@ Language: pt_BR Últimos 7 dias Do <b>Day One</b> Lembre-me depois - As estatísticas, o Leitor, as notificações e outras funcionalidades em breve irão para o aplicativo móvel do Jetpack. Mudar para o aplicativo do Jetpack Saiba mais em br.jetpack.com A migração é gratuita e leva apenas um minuto. diff --git a/WordPress/src/main/res/values-ro/strings.xml b/WordPress/src/main/res/values-ro/strings.xml index f3eeb565b238..6099575fc3d0 100644 --- a/WordPress/src/main/res/values-ro/strings.xml +++ b/WordPress/src/main/res/values-ro/strings.xml @@ -944,9 +944,6 @@ Language: ro Partajarea automată pe Twitter nu mai este disponibilă deoarece Twitter a făcut modificări la termeni și prețuri. Află mai multe Permite ca notificările să continue pe site-ul tău - Aplicația Jetpack are toate funcționalitățile aplicației WordPress, cu acces exclusiv la Statistici, Cititor, Notificări și altele. - Folosește WordPress cu %s în aplicația Jetpack. - Folosește WordPress cu %s în aplicația Jetpack. numelesiteuluitau.com La fel ca în exemplul de mai sus, un domeniu le permite oamenilor să-ți găsească și să-ți viziteze site-ul din navigatoarele lor web. Activitate recentă @@ -1001,7 +998,6 @@ Language: ro Acest site %1$s folosește %2$s, care încă nu suportă toate funcționalitățile aplicației. Te rog instalează %3$s. %1$s folosește %2$s, care încă nu suportă toate funcționalitățile aplicației. Te rog instalează %3$s. - Comutarea este gratuită și durează numai un minut. Acum, după ce ai instalat Jetpack, trebuie doar să te pregătim pentru inițializare. Nu va dura decât un minut. Gata Inițializează @@ -1009,8 +1005,6 @@ Language: ro Trafic Administrează Administrare WP - Comută la aplicația Jetpack - Află mai multe la Jetpack.com Urmărești performanța, pornești și oprești Blaze în orice moment. Promovează acest articol Promovează această pagină @@ -1081,7 +1075,6 @@ Language: ro Comută la Jetpack Fă asta mai târziu Te rog instalează Google Play Store pentru a obține aplicația Jetpack - %1$s se mută în curând Ultimele 7 zile 7 zile anterioare Vizualizările din ultimele 7 zile sunt cu %1$s mai mari decât cele din 7 zile anterioare. @@ -1096,7 +1089,6 @@ Language: ro Află mai multe la jetpack.com Comută la aplicația Jetpack Amintește-mi mai târziu - În curând, Statistici, Cititor, Notificări și alte funcționalități se vor muta în aplicația Jetpack pentru mobil. Niciun răspuns Un răspuns %d răspunsuri diff --git a/WordPress/src/main/res/values-ru/strings.xml b/WordPress/src/main/res/values-ru/strings.xml index a1e426cd9dfa..92aeb6b92973 100644 --- a/WordPress/src/main/res/values-ru/strings.xml +++ b/WordPress/src/main/res/values-ru/strings.xml @@ -944,9 +944,6 @@ Language: ru Автоматическая публикация в Twitter больше не доступна из-за изменения условий использования и цен Twitter. Автоматическая публикация в Twitter больше не доступна Разрешите уведомления, чтобы быть в курсе событий на сайте - Приложение Jetpack обладает всеми возможностями приложения WordPress, а теперь и исключительным доступом к статистике, «Чтиву», уведомлениям и другим функциям. - Используйте WordPress с %s в приложении Jetpack. - Используйте WordPress с %s в приложении Jetpack. Цвет без ярлыка. %s Недавние действия Зная домен, пользователи могут найти сайт с помощью браузера, как в примере выше. @@ -1001,9 +998,6 @@ Language: ru Этот сайт На %1$s используется плагин %2$s, который пока поддерживает не все функции приложения. Установите %3$s. На %1$s используется плагин %2$s, который пока поддерживает не все функции приложения. Установите %3$s. - Переход бесплатен и занимает всего минуту. - Дополнительные сведения см. на Jetpack.com - Перейти в новое приложение Jetpack Консоль Управление Посещаемость @@ -1081,7 +1075,6 @@ Language: ru Перейти на Jetpack Статистика, Чтиво, Уведомления и другие функции Jetpack удалены из приложения WordPress. Возможности Jetpack переехали. - %1$s скоро переедет Показать все ответы На %1$s меньше, чем в предыдущие 7 дней На %1$s больше, чем в предыдущие 7 дней @@ -1093,7 +1086,6 @@ Language: ru Последние 7 дней От <b>В Первый День</b> Напомнить мне позже - Статистика, Чтиво, Уведомления и другие функции скоро переедут в мобильное приложение Jetpack. Перейти в новое приложение Jetpack Узнайте больше на Jetpack.com Переход бесплатен и займет всего минуту. diff --git a/WordPress/src/main/res/values-sq/strings.xml b/WordPress/src/main/res/values-sq/strings.xml index 94c398b02f4d..e565318a04e0 100644 --- a/WordPress/src/main/res/values-sq/strings.xml +++ b/WordPress/src/main/res/values-sq/strings.xml @@ -837,9 +837,6 @@ Language: sq_AL Ndarja e automatizuar me të tjerë që nga Twitter s’mund të përdoret më, për shkak ndryshimesh në kushte dhe çmim nga ana e Twitter-it. Ndarja e automatizuar me të tjerë që nga Twitter s’mund të përdoret më Lejoni njoftime, që të jeni në dijeni se ç’ndodh në sajtin tuaj - Aplikacioni Jetpack ka krejt anët e aplikacionit WordPress dhe tanimë edhe hyrje përjashtimore te Statistika, Lexues, Njoftime, etj. - Përdorni WordPress-in me %s në Jetpack\u00A0app. - Përdorni WordPress-in me %s në Jetpack\u00A0app. Ngjyrë pa etiketë. %s Veprimtari së fundi Në ngjashmëri me shembullin më sipër, një përkatësi u lejon njerëzve të gjejnë dhe vizitojnë sajtin tuaj që nga shfletuesi. @@ -894,9 +891,6 @@ Language: sq_AL Këtë sajt %1$s po përdor %2$s, të cilat nuk i mbulojnë ende krejt veçoritë e aplikacionit. Ju lutemi, instaloni %3$s. %1$s po përdor %2$s, i cili nuk i mbulon ende krejt veçoritë e aplikacionit. Ju lutemi, instaloni %3$s. - Kalimi është falas dhe do vetëm një minutë. - Mësoni më tepër, te Jetpack.com - Kaloni te aplikacioni Jetpack Përgjegjës WP-je Administrojini Trafik @@ -973,7 +967,6 @@ Language: sq_AL Kalo te Jetpack Statistikat, Lexuesi, Njoftimet dhe të tjera veçorit të fuqishme të Jetpack-ut janë hequr nga aplikacioni WordPress. Veçori të Jetpack-ut janë lëvizur. - Së shpejti %1$s do të lëvizet Shihni krejt përgjigjet %1$s më poshtë se 7 ditët e mëparshme %1$s më sipër se 7 ditët e mëparshme @@ -985,7 +978,6 @@ Language: sq_AL 7 ditët e fundit Nga <b>Dita e Parë</b> Kujtoma më vonë - Statistikat, Lexuesi, Njoftimet dhe të tjera veçorit të Jetpack-ut së shpejti do të kalohen te aplikacioni Jetpack për celular. Kaloni te aplikacioni Jetpack Mësoni më tepër, te jetpack.com Kalimi është falas dhe do vetëm një minutë. diff --git a/WordPress/src/main/res/values-sv/strings.xml b/WordPress/src/main/res/values-sv/strings.xml index f84444b07501..d451d55f0530 100644 --- a/WordPress/src/main/res/values-sv/strings.xml +++ b/WordPress/src/main/res/values-sv/strings.xml @@ -944,9 +944,6 @@ Language: sv_SE Automatisk delning på Twitter är inte längre tillgängligt på grund av Twitters ändringar i villkor och pris. Automatisk delning på Twitter är inte längre tillgängligt Tillåt aviseringar för att hålla koll på din webbplats - Jetpack-appen har alla WordPress-appens funktionalitet och nu exklusiv åtkomst till statistik, Läsare, aviseringar och mer. - Använd WordPress med %s i Jetpack-appen. - Använd WordPress med %s i Jetpack-appen. Omärkt färg. %s Senaste aktivitet Precis som i exemplet ovan så låter en domän människor hitta och besöka din webbplats från sina webbläsare. @@ -1001,9 +998,6 @@ Language: sv_SE Denna webbplats %1$sanvänder %2$s, som inte stöder alla funktioner i appen än. Installera %3$s. %1$s använder %2$s, som inte stöder alla funktioner i appen än. Installera %3$s. - Att byta är gratis och tar bara en minut. - Lär dig mer på Jetpack.com - Byt till Jetpack-appen WP-Adminpanel Hantera Trafik @@ -1081,7 +1075,6 @@ Language: sv_SE Byt till Jetpack Statistik, läsare, aviseringar och andra Jetpack-drivna funktioner har tagits bort från WordPress-appen. Jetpack-funktioner har flyttat. - %1$s flyttar snart Visa alla svar %1$s lägre än under de föregående 7 dagarna %1$s högre än under de föregående 7 dagarna @@ -1093,7 +1086,6 @@ Language: sv_SE Senaste 7 dagarna Från <b>Day One</b> Påminn mig senare - Statistik, läsare, aviseringar och andra funktioner kommer snart att flyttas till Jetpacks mobilapp. Byt till Jetpack-appen Läs mer på jetpack.com Bytet är gratis och tar bara en minut. diff --git a/WordPress/src/main/res/values-tr/strings.xml b/WordPress/src/main/res/values-tr/strings.xml index 33533f636ca8..e2f82a91fcaf 100644 --- a/WordPress/src/main/res/values-tr/strings.xml +++ b/WordPress/src/main/res/values-tr/strings.xml @@ -944,9 +944,6 @@ Language: tr X otomatik paylaşım özelliği, X hüküm ve koşulları ile fiyatlandırma değişiklikleri nedeniyle artık kullanılmıyor. X otomatik paylaşım özelliği artık kullanılamıyor Sitenizle ilgili bilgileri almak için bildirimlere izin verin - Jetpack uygulamasının, WordPress uygulamasının tüm işlevleri ile istatistiklere, okuyucuya, bildirimlere ve diğer özelliklere özel erişimi vardır. - Jetpack\u00A0uygulamasından WordPress %s kullanın. - Jetpack\u00A0uygulamasından WordPress %s kullanın. Etiketsiz renk. %s Son etkinlik Yukarıdaki örnekte olduğu gibi, bir etki alanı, kişilerin sitenizi bir tarayıcı üzerinden bulmasını ve ziyaret etmesini sağlar. @@ -1001,9 +998,6 @@ Language: tr Bu site %1$s, henüz uygulamanın tüm özelliklerini desteklemeyen %2$s kullanıyor. Lütfen %3$s kurun. %1$s, henüz uygulamanın tüm özelliklerini desteklemeyen %2$s kullanıyor. Lütfen %3$s kurun. - Geçiş ücretsizdir ve yalnızca bir dakika sürer. - Jetpack.com üzerinden ayrıntılı bilgi alın - Jetpack uygulamasına geçiş yapın Pano Yönet Trafik @@ -1081,7 +1075,6 @@ Language: tr Jetpack kullanmaya geç İstatistikler, Okuyucu, Bildirimler ve Jetpack destekli diğer özellikler, yakında WordPress uygulamasından kaldırıldı. Jetpack özellikleri taşındı. - %1$s yakında taşınıyor Tüm yanıtları görüntüle Son 7 güne göre %1$s daha düşük Son 7 güne göre %1$s daha yüksek @@ -1093,7 +1086,6 @@ Language: tr Son 7 gün <b>Birinci günden</b> Daha sonra hatırlat - İstatistikler, Okuyucu, Bildirimler ve diğer özellikler yakında Jetpack mobil uygulamasına taşınacak. Jetpack uygulamasına geçin Jetpack.com üzerinden ayrıntılı bilgi alın Geçiş ücretsizdir ve yalnızca bir dakika sürer. diff --git a/WordPress/src/main/res/values-zh-rCN/strings.xml b/WordPress/src/main/res/values-zh-rCN/strings.xml index 1e6b9a28cad7..5dd5739648f5 100644 --- a/WordPress/src/main/res/values-zh-rCN/strings.xml +++ b/WordPress/src/main/res/values-zh-rCN/strings.xml @@ -939,9 +939,6 @@ Language: zh_CN 由于 Twitter 更改了条款和定价,Twitter 自动共享功能已无法使用。 Twitter 自动分享功能已无法使用 允许通知,持续关注您的站点 - Jetpack 应用拥有 WordPress 应用的所有功能,现在可以独家访问统计信息、阅读器、通知等功能。 - 在 Jetpack\u00A0应用中结合使用 WordPress 和 %s。 - 在 Jetpack\u00A0应用中结合使用 WordPress 和 %s。 未标记的颜色 %s 近期的动态 如以上示例所示,域名允许访客从其 Web 浏览器查找和访问您的站点。 @@ -996,9 +993,6 @@ Language: zh_CN 此站点 %1$s 使用 %2$s,尚不支持该应用程序的全部功能。 请安装 %3$s。 %1$s 使用 %2$s,尚不支持该应用程序的全部功能。 请安装 %3$s。 - 切换免费,只需一会儿。 - 请访问 Jetpack.com 了解详情 - 切换到 Jetpack 应用程序 WP 管理 管理 流量 @@ -1076,7 +1070,6 @@ Language: zh_CN 切换至 Jetpack 统计信息、阅读器、通知和其他由 Jetpack 提供支持的功能已从 WordPress 应用程序上删除。 Jetpack 功能已移动。 - %1$s 即将移动 查看所有回复 比上一个 7 天低 %1$s 比上一个 7 天高 %1$s @@ -1088,7 +1081,6 @@ Language: zh_CN 过去 7 天 来自 <b>Day One</b> 稍后提醒我 - 统计信息、阅读器、通知和其他功能即将移至 Jetpack 移动应用。 切换到 Jetpack 应用 请访问 jetpack.com 以了解详情 切换免费,只需一会儿。 diff --git a/WordPress/src/main/res/values-zh-rHK/strings.xml b/WordPress/src/main/res/values-zh-rHK/strings.xml index dccb635ef7af..8972b75cbc98 100644 --- a/WordPress/src/main/res/values-zh-rHK/strings.xml +++ b/WordPress/src/main/res/values-zh-rHK/strings.xml @@ -934,9 +934,6 @@ Language: zh_TW 由於 Twitter 變更條款和定價,Twitter 自動分享功能已無法使用。 Twitter 自動分享功能已無法使用 允許通知以掌握你的網站動態 - Jetpack 應用程式具備 WordPress 應用程式所有功能,現在還可獨家使用統計資料、閱讀器、通知等功能。 - 在 Jetpack\u00A0應用程式中使用 WordPress 和 %s。 - 在 Jetpack\u00A0應用程式中使用 WordPress 和 %s。 未標記的顏色。 %s 最近活動 如同上方範例,網域可讓使用者從網頁瀏覽器找到並造訪你的網站。 @@ -991,9 +988,6 @@ Language: zh_TW 本網站 %1$s 正在使用 %2$s,目前尚未支援應用程式的所有功能。 Please install the %3$s. %1$s 正在使用 %2$s,目前尚未支援應用程式的所有功能。 Please install the %3$s. - 切換完全免費,只要 1 分鐘就能完成。 - 前往 jetpack.com 深入瞭解 - 切換至 Jetpack 應用程式 WP 管理員 管理 流量 @@ -1071,7 +1065,6 @@ Language: zh_TW 切換至 Jetpack WordPress 應用程式已移除「統計資料」、「閱讀器」、「通知」和其他 Jetpack 提供的功能。 Jetpack 功能已經搬遷。 - %1$s 即將搬遷 檢視所有回應 較先前 7 天低 %1$s 較先前 7 天高 %1$s @@ -1083,7 +1076,6 @@ Language: zh_TW 過去 7 天 來自 <b>Day One</b> 稍後再提醒我 - 「統計資料」、「閱讀器」、「通知」及其他功能即將搬遷至 Jetpack 行動應用程式。 切換至 Jetpack 應用程式 前往 jetpack.com 深入瞭解 切換完全免費,只要 1 分鐘就能完成。 diff --git a/WordPress/src/main/res/values-zh-rTW/strings.xml b/WordPress/src/main/res/values-zh-rTW/strings.xml index dccb635ef7af..8972b75cbc98 100644 --- a/WordPress/src/main/res/values-zh-rTW/strings.xml +++ b/WordPress/src/main/res/values-zh-rTW/strings.xml @@ -934,9 +934,6 @@ Language: zh_TW 由於 Twitter 變更條款和定價,Twitter 自動分享功能已無法使用。 Twitter 自動分享功能已無法使用 允許通知以掌握你的網站動態 - Jetpack 應用程式具備 WordPress 應用程式所有功能,現在還可獨家使用統計資料、閱讀器、通知等功能。 - 在 Jetpack\u00A0應用程式中使用 WordPress 和 %s。 - 在 Jetpack\u00A0應用程式中使用 WordPress 和 %s。 未標記的顏色。 %s 最近活動 如同上方範例,網域可讓使用者從網頁瀏覽器找到並造訪你的網站。 @@ -991,9 +988,6 @@ Language: zh_TW 本網站 %1$s 正在使用 %2$s,目前尚未支援應用程式的所有功能。 Please install the %3$s. %1$s 正在使用 %2$s,目前尚未支援應用程式的所有功能。 Please install the %3$s. - 切換完全免費,只要 1 分鐘就能完成。 - 前往 jetpack.com 深入瞭解 - 切換至 Jetpack 應用程式 WP 管理員 管理 流量 @@ -1071,7 +1065,6 @@ Language: zh_TW 切換至 Jetpack WordPress 應用程式已移除「統計資料」、「閱讀器」、「通知」和其他 Jetpack 提供的功能。 Jetpack 功能已經搬遷。 - %1$s 即將搬遷 檢視所有回應 較先前 7 天低 %1$s 較先前 7 天高 %1$s @@ -1083,7 +1076,6 @@ Language: zh_TW 過去 7 天 來自 <b>Day One</b> 稍後再提醒我 - 「統計資料」、「閱讀器」、「通知」及其他功能即將搬遷至 Jetpack 行動應用程式。 切換至 Jetpack 應用程式 前往 jetpack.com 深入瞭解 切換完全免費,只要 1 分鐘就能完成。 diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index f65d3bd7b170..de39bf2a6987 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -4196,7 +4196,6 @@ translators: %s: Select control option value e.g: "Auto, 25%". --> Jetpack powered - %1$s is moving soon @@ -4213,13 +4212,6 @@ translators: %s: Select control option value e.g: "Auto, 25%". --> Continue to Reader Continue to Stats Continue to Notifications - Use WordPress with %s in the Jetpack\u00A0app. - Use WordPress with %s in the Jetpack\u00A0app. - Switch to the Jetpack app - Learn more at Jetpack.com - The Jetpack app has all the WordPress app’s functionality, and now exclusive access to Stats, Reader, Notifications and more. - Switching is free and only takes a minute. - Welcome to Jetpack! It looks like you’re switching from the WordPress app. @@ -4284,7 +4276,6 @@ translators: %s: Select control option value e.g: "Auto, 25%". --> Open links in WordPress - Stats, Reader, Notifications and other features will soon move to the Jetpack mobile app. Unlock your site’s full potential. Get stats, notifications and more with Jetpack. @string/learn_more Remind me later diff --git a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt index 740d895fbfb3..9cc2eb166f62 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt @@ -24,7 +24,6 @@ import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.util.config.JetpackFeatureRemovalNewUsersConfig import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseFourConfig import org.wordpress.android.util.config.JetpackFeatureRemovalSelfHostedUsersConfig -import org.wordpress.android.util.config.JetpackFeatureRemovalStaticPostersConfig import org.wordpress.android.util.config.PhaseFourOverlayFrequencyConfig @ExperimentalCoroutinesApi @@ -42,9 +41,6 @@ class JetpackFeatureRemovalPhaseHelperTest : BaseUnitTest() { @Mock private lateinit var jetpackFeatureRemovalSelfHostedUsersConfig: JetpackFeatureRemovalSelfHostedUsersConfig - @Mock - private lateinit var jetpackFeatureRemovalStaticPostersConfig: JetpackFeatureRemovalStaticPostersConfig - @Mock private lateinit var phaseFourOverlayFrequencyConfig: PhaseFourOverlayFrequencyConfig @@ -60,7 +56,6 @@ class JetpackFeatureRemovalPhaseHelperTest : BaseUnitTest() { jetpackFeatureRemovalPhaseFourConfig, jetpackFeatureRemovalNewUsersConfig, jetpackFeatureRemovalSelfHostedUsersConfig, - jetpackFeatureRemovalStaticPostersConfig, phaseFourOverlayFrequencyConfig, analyticsTrackerWrapper ) @@ -104,44 +99,14 @@ class JetpackFeatureRemovalPhaseHelperTest : BaseUnitTest() { } @Test - fun `given static posters config true, when current phase is fetched, then return static posters config`() { - whenever(jetpackFeatureRemovalStaticPostersConfig.isEnabled()).thenReturn(true) - - val currentPhase = jetpackFeatureRemovalPhaseHelper.getCurrentPhase() - - assertEquals(currentPhase, JetpackFeatureRemovalPhase.PhaseStaticPosters) - } - - @Test - fun `given it is the Jetpack app, when we track reader accessed event, then the proper event is tracked`() { - whenever(buildConfigWrapper.isJetpackApp).thenReturn(true) - + fun `when we track reader accessed event, then the proper event is tracked`() { jetpackFeatureRemovalPhaseHelper.trackPageAccessedEventIfNeeded(WPMainNavigationView.PageType.READER) verify(analyticsTrackerWrapper, times(1)).track(AnalyticsTracker.Stat.READER_ACCESSED) } @Test - fun `given we do not show static posters, when we track reader accessed event, then the proper event is tracked`() { - whenever(buildConfigWrapper.isJetpackApp).thenReturn(false) - whenever(jetpackFeatureRemovalStaticPostersConfig.isEnabled()).thenReturn(false) - - jetpackFeatureRemovalPhaseHelper.trackPageAccessedEventIfNeeded(WPMainNavigationView.PageType.READER) - - verify(analyticsTrackerWrapper, times(1)).track(AnalyticsTracker.Stat.READER_ACCESSED) - } - - @Test - fun `given we do show static posters, when we track reader accessed event, then the event is not tracked`() { - whenever(jetpackFeatureRemovalStaticPostersConfig.isEnabled()).thenReturn(true) - - jetpackFeatureRemovalPhaseHelper.trackPageAccessedEventIfNeeded(WPMainNavigationView.PageType.READER) - - verify(analyticsTrackerWrapper, never()).track(AnalyticsTracker.Stat.READER_ACCESSED) - } - - @Test - fun `given we show static posters, when we track my site accessed event, then the proper event is tracked`() { + fun `when we track my site accessed event, then the proper event is tracked`() { val site = SiteModel() jetpackFeatureRemovalPhaseHelper.trackPageAccessedEventIfNeeded(WPMainNavigationView.PageType.MY_SITE, site) diff --git a/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSliceTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSliceTest.kt index e2a03a5365f6..3ceec8875c3f 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSliceTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSliceTest.kt @@ -114,18 +114,6 @@ class TodaysStatsViewModelSliceTest : BaseUnitTest() { assertThat(navigationActions).containsOnly(SiteNavigationAction.OpenNewStatsForToday) } - @Test - fun `given static posters phase, when card item is clicked, then static posters view is shown`() = - test { - whenever(jetpackFeatureRemovalPhaseHelper.shouldShowStaticPage()).thenReturn(true) - - val params = todaysStatsViewModelSlice.getTodaysStatsBuilderParams(null) - - params.onTodaysStatsCardClick() - - assertThat(navigationActions).containsOnly(SiteNavigationAction.ShowJetpackRemovalStaticPostersView) - } - @Test fun `given today's stat card, when get more views url is clicked, then external link is opened`() = test { diff --git a/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelperTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelperTest.kt index 8c581d1a4c72..2fe5e707ab5d 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelperTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelperTest.kt @@ -61,15 +61,6 @@ class JetpackFeatureCardHelperTest { assertThat(result).isFalse } - @Test - fun `when static posters phase, then jetpack feature card should not show`() { - setTest(phase = JetpackFeatureRemovalPhase.PhaseStaticPosters) - - val result = helper.shouldShowJetpackFeatureCard() - - assertThat(result).isFalse - } - @Test fun `when hide card has been set, then jetpack feature card should not shown`() { setTest(isCardHiddenByUser = true) From dafdcddfcc79dfc189f0ab62d5e46df46253eff2 Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Thu, 13 Aug 2026 12:29:21 -0400 Subject: [PATCH 03/16] CMM-2302: Remove the unreachable Jetpack banner on Scan, People and Themes shouldShowJetpackBanner() required shouldShowJetpackBranding(), which requires *not* being in a removal phase, AND shouldShowBranding(), which requires being in PhaseFour. Those cannot both hold, so the banner never showed on the five screens that used it. This predates the branch: on trunk the same screens used shouldShowJetpackBrandingForPhaseOne/ForPhaseTwo, and both underlying methods returned false for every phase that satisfied shouldShowJetpackBranding(). Note the banner is currently hidden on every other screen too, since production resolves to PhaseSelfHostedUsers and shouldShowJetpackBranding() therefore returns false. jetpack_banner.xml and its remaining call sites are left in place because they are still reachable if the removal phase is ever turned off. Removed: - JetpackBrandingUtils.shouldShowJetpackBanner() and JetpackFeatureRemovalBrandingUtil.shouldShowBranding() - The dead banner block and layout include on ScanActivity, ScanHistoryFragment, PeopleListFragment, ThemeBrowserActivity, and the equivalent badge block on PersonDetailFragment - ThemeBrowserActivity's two private banner animation helpers and the injected JetpackBrandingUtils/UiHelpers fields left unused on those screens - ScrollableViewInitializedListener from ScanActivity and ThemeBrowserActivity, where the banner was the only implementation and both were left empty; the dispatching fragments already check the type before calling - The unused JetpackPoweredScreen.WithStaticText constants HOME, PEOPLE, PERSON --- .../android/models/JetpackPoweredScreen.kt | 3 - .../android/ui/jetpack/scan/ScanActivity.kt | 36 +-------- .../scan/history/ScanHistoryFragment.kt | 29 -------- .../JetpackFeatureRemovalBrandingUtil.kt | 8 -- .../android/ui/people/PeopleListFragment.java | 31 -------- .../ui/people/PersonDetailFragment.java | 23 ------ .../ui/themes/ThemeBrowserActivity.java | 73 +------------------ .../android/util/JetpackBrandingUtils.kt | 4 - .../main/res/layout/people_list_fragment.xml | 4 - .../res/layout/person_detail_fragment.xml | 10 --- .../src/main/res/layout/scan_activity.xml | 4 - .../main/res/layout/scan_history_fragment.xml | 4 - .../res/layout/theme_browser_activity.xml | 4 - 13 files changed, 2 insertions(+), 231 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/models/JetpackPoweredScreen.kt b/WordPress/src/main/java/org/wordpress/android/models/JetpackPoweredScreen.kt index 68298d1a4e37..bc3b46a0a45b 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/JetpackPoweredScreen.kt +++ b/WordPress/src/main/java/org/wordpress/android/models/JetpackPoweredScreen.kt @@ -18,10 +18,7 @@ sealed interface JetpackPoweredScreen { override val trackingName: String, ) : JetpackPoweredScreen { APP_SETTINGS(trackingName = "app_settings"), - HOME(trackingName = "home"), ME(trackingName = "me"), - PEOPLE(trackingName = "people"), - PERSON(trackingName = "person"), } enum class WithDynamicText( diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanActivity.kt index 57d5eafd4655..173282deca00 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanActivity.kt @@ -10,11 +10,8 @@ import dagger.hilt.android.AndroidEntryPoint import org.wordpress.android.R import org.wordpress.android.WordPress import org.wordpress.android.databinding.ScanActivityBinding -import org.wordpress.android.models.JetpackPoweredScreen import org.wordpress.android.ui.ActivityLauncher -import org.wordpress.android.ui.ScrollableViewInitializedListener import org.wordpress.android.ui.main.BaseAppCompatActivity -import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment import org.wordpress.android.ui.utils.UiHelpers import org.wordpress.android.util.JetpackBrandingUtils import org.wordpress.android.util.extensions.getSerializableExtraCompat @@ -22,7 +19,7 @@ import javax.inject.Inject import android.R as AndroidR @AndroidEntryPoint -class ScanActivity : BaseAppCompatActivity(), ScrollableViewInitializedListener { +class ScanActivity : BaseAppCompatActivity() { @Inject lateinit var jetpackBrandingUtils: JetpackBrandingUtils @@ -49,37 +46,6 @@ class ScanActivity : BaseAppCompatActivity(), ScrollableViewInitializedListener } } - override fun onScrollableViewInitialized(containerId: Int) { - initJetpackBanner(containerId) - } - - private fun initJetpackBanner(scrollableContainerId: Int) { - if (jetpackBrandingUtils.shouldShowJetpackBanner()) { - val screen = JetpackPoweredScreen.WithDynamicText.SCAN - binding?.root?.post { - val jetpackBannerView = binding?.jetpackBanner?.root ?: return@post - val scrollableView = binding?.root?.findViewById(scrollableContainerId) as? RecyclerView - ?: return@post - - jetpackBrandingUtils.showJetpackBannerIfScrolledToTop(jetpackBannerView, scrollableView) - jetpackBrandingUtils.initJetpackBannerAnimation(jetpackBannerView, scrollableView) - binding?.jetpackBanner?.jetpackBannerText?.text = uiHelpers.getTextOfUiString( - this, - jetpackBrandingUtils.getBrandingText() - ) - - if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - binding?.jetpackBanner?.root?.setOnClickListener { - jetpackBrandingUtils.trackBannerTapped(screen) - JetpackPoweredBottomSheetFragment - .newInstance() - .show(supportFragmentManager, JetpackPoweredBottomSheetFragment.TAG) - } - } - } - } - } - override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == AndroidR.id.home) { onBackPressedDispatcher.onBackPressed() 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 c1504a59b0b9..8eba7b8d050b 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 @@ -20,12 +20,10 @@ import org.wordpress.android.WordPress import org.wordpress.android.databinding.FullscreenErrorWithRetryBinding import org.wordpress.android.databinding.ScanHistoryFragmentBinding import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.models.JetpackPoweredScreen import org.wordpress.android.ui.ScrollableViewInitializedListener import org.wordpress.android.ui.jetpack.scan.history.ScanHistoryViewModel.TabUiState import org.wordpress.android.ui.jetpack.scan.history.ScanHistoryViewModel.UiState.ContentUiState import org.wordpress.android.ui.jetpack.scan.history.ScanHistoryViewModel.UiState.ErrorUiState -import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment import org.wordpress.android.ui.utils.UiHelpers import org.wordpress.android.util.JetpackBrandingUtils import org.wordpress.android.util.extensions.getSerializableCompat @@ -154,33 +152,6 @@ class ScanHistoryFragment : Fragment(R.layout.scan_history_fragment), MenuProvid override fun onScrollableViewInitialized(containerId: Int) { binding?.appbarMain?.liftOnScrollTargetViewId = containerId - initJetpackBanner(containerId) } - private fun initJetpackBanner(scrollableContainerId: Int) { - if (jetpackBrandingUtils.shouldShowJetpackBanner()) { - val screen = JetpackPoweredScreen.WithDynamicText.SCAN - binding?.root?.post { - val jetpackBannerView = binding?.jetpackBanner?.root ?: return@post - val scrollableView = binding?.root?.findViewById(scrollableContainerId) as? RecyclerView - ?: return@post - - jetpackBrandingUtils.showJetpackBannerIfScrolledToTop(jetpackBannerView, scrollableView) - jetpackBrandingUtils.initJetpackBannerAnimation(jetpackBannerView, scrollableView) - binding?.jetpackBanner?.jetpackBannerText?.text = uiHelpers.getTextOfUiString( - requireContext(), - jetpackBrandingUtils.getBrandingText() - ) - - if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - binding?.jetpackBanner?.root?.setOnClickListener { - jetpackBrandingUtils.trackBannerTapped(screen) - JetpackPoweredBottomSheetFragment - .newInstance() - .show(childFragmentManager, JetpackPoweredBottomSheetFragment.TAG) - } - } - } - } - } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt index f9657a279ef9..019fcc16c617 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt @@ -1,7 +1,6 @@ package org.wordpress.android.ui.jetpackoverlay import org.wordpress.android.R -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour import org.wordpress.android.ui.utils.UiString import org.wordpress.android.ui.utils.UiString.UiStringRes import javax.inject.Inject @@ -11,12 +10,5 @@ class JetpackFeatureRemovalBrandingUtil @Inject constructor( ) { fun isInRemovalPhase() = jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures() - fun shouldShowBranding(): Boolean { - return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - PhaseFour -> true - else -> false - } - } - fun getBrandingText(): UiString = UiStringRes(R.string.wp_jetpack_powered) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java index b891db949605..0108469cb8ff 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -28,12 +28,10 @@ import org.wordpress.android.fluxc.model.RoleModel; import org.wordpress.android.fluxc.model.SiteModel; import org.wordpress.android.fluxc.store.SiteStore; -import org.wordpress.android.models.JetpackPoweredScreen; import org.wordpress.android.models.PeopleListFilter; import org.wordpress.android.models.Person; import org.wordpress.android.models.RoleUtils; import org.wordpress.android.ui.ActionableEmptyView; -import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment; import org.wordpress.android.ui.utils.UiHelpers; import org.wordpress.android.util.JetpackBrandingUtils; import org.wordpress.android.util.NetworkUtils; @@ -60,8 +58,6 @@ public class PeopleListFragment extends Fragment { @Inject SiteStore mSiteStore; @Inject ImageManager mImageManager; - @Inject JetpackBrandingUtils mJetpackBrandingUtils; - @Inject UiHelpers mUiHelpers; public static PeopleListFragment newInstance(SiteModel site) { PeopleListFragment peopleListFragment = new PeopleListFragment(); @@ -131,36 +127,9 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL) ); - showJetpackBannerIfNeeded(rootView); - return rootView; } - private void showJetpackBannerIfNeeded(final View rootView) { - if (mJetpackBrandingUtils.shouldShowJetpackBanner()) { - final JetpackPoweredScreen screen = JetpackPoweredScreen.WithStaticText.PERSON; - View jetpackBannerView = rootView.findViewById(R.id.jetpack_banner); - TextView jetpackBannerTextView = jetpackBannerView.findViewById(R.id.jetpack_banner_text); - jetpackBannerTextView.setText( - mUiHelpers.getTextOfUiString( - requireContext(), - mJetpackBrandingUtils.getBrandingText()) - ); - RecyclerView scrollableView = mRecyclerView; - - mJetpackBrandingUtils.showJetpackBannerIfScrolledToTop(jetpackBannerView, scrollableView); - mJetpackBrandingUtils.initJetpackBannerAnimation(jetpackBannerView, scrollableView); - - if (mJetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - jetpackBannerView.setOnClickListener(v -> { - mJetpackBrandingUtils.trackBannerTapped(screen); - new JetpackPoweredBottomSheetFragment() - .show(getChildFragmentManager(), JetpackPoweredBottomSheetFragment.TAG); - }); - } - } - } - @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // important for accessibility - talkback diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 9757b6c51c58..086822ec4f40 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -25,10 +25,8 @@ import org.wordpress.android.fluxc.model.RoleModel; import org.wordpress.android.fluxc.model.SiteModel; import org.wordpress.android.fluxc.store.SiteStore; -import org.wordpress.android.models.JetpackPoweredScreen; import org.wordpress.android.models.Person; import org.wordpress.android.models.RoleUtils; -import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment; import org.wordpress.android.ui.utils.UiHelpers; import org.wordpress.android.util.AppLog; import org.wordpress.android.util.WPAvatarUtils; @@ -65,7 +63,6 @@ public class PersonDetailFragment extends Fragment { @Inject SiteStore mSiteStore; @Inject ImageManager mImageManager; - @Inject JetpackBrandingUtils mJetpackBrandingUtils; @Inject UiHelpers mUiHelpers; public static PersonDetailFragment newInstance(long currentUserId, long personId, int localTableBlogId, @@ -144,26 +141,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa setHasOptionsMenu(true); } - if (mJetpackBrandingUtils.shouldShowJetpackBanner()) { - final JetpackPoweredScreen screen = JetpackPoweredScreen.WithStaticText.PERSON; - View jetpackBadgeContainer = rootView.findViewById(R.id.jetpack_badge); - TextView jetpackBadge = jetpackBadgeContainer.findViewById(R.id.jetpack_powered_badge); - jetpackBadge.setText( - mUiHelpers.getTextOfUiString( - requireContext(), - mJetpackBrandingUtils.getBrandingText()) - ); - - jetpackBadgeContainer.setVisibility(View.VISIBLE); - - if (mJetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - jetpackBadge.setOnClickListener(v -> { - mJetpackBrandingUtils.trackBadgeTapped(screen); - new JetpackPoweredBottomSheetFragment() - .show(requireActivity().getSupportFragmentManager(), JetpackPoweredBottomSheetFragment.TAG); - }); - } - } return rootView; } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java index 1e110eaf6ec7..1e610a062bfa 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java @@ -5,7 +5,6 @@ import android.text.TextUtils; import android.view.MenuItem; import android.view.View; -import android.view.View.OnScrollChangeListener; import android.widget.TextView; import androidx.activity.OnBackPressedCallback; @@ -36,21 +35,17 @@ import org.wordpress.android.fluxc.store.ThemeStore.OnThemeInstalled; import org.wordpress.android.fluxc.store.ThemeStore.OnWpComThemesChanged; import org.wordpress.android.fluxc.store.ThemeStore.SiteThemePayload; -import org.wordpress.android.models.JetpackPoweredScreen; import org.wordpress.android.ui.ActivityId; -import org.wordpress.android.ui.ScrollableViewInitializedListener; import org.wordpress.android.ui.main.BaseAppCompatActivity; import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment; import org.wordpress.android.ui.prefs.AppPrefs; import org.wordpress.android.ui.themes.ThemeBrowserFragment.ThemeBrowserFragmentCallback; -import org.wordpress.android.ui.utils.UiHelpers; import org.wordpress.android.util.AppLog; import org.wordpress.android.util.AppLog.T; import org.wordpress.android.util.JetpackBrandingUtils; import org.wordpress.android.util.ToastUtils; import org.wordpress.android.util.analytics.AnalyticsUtils; import org.wordpress.android.util.extensions.CompatExtensionsKt; -import org.wordpress.android.widgets.HeaderGridView; import java.util.HashMap; import java.util.Map; @@ -60,8 +55,7 @@ import dagger.hilt.android.AndroidEntryPoint; @AndroidEntryPoint -public class ThemeBrowserActivity extends BaseAppCompatActivity implements ThemeBrowserFragmentCallback, - ScrollableViewInitializedListener { +public class ThemeBrowserActivity extends BaseAppCompatActivity implements ThemeBrowserFragmentCallback { public static final int ACTIVATE_THEME = 1; public static final String THEME_ID = "theme_id"; @@ -75,8 +69,6 @@ public class ThemeBrowserActivity extends BaseAppCompatActivity implements Theme @Inject ThemeStore mThemeStore; @Inject Dispatcher mDispatcher; - @Inject JetpackBrandingUtils mJetpackBrandingUtils; - @Inject UiHelpers mUiHelpers; @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -200,69 +192,6 @@ public void onSwipeToRefresh() { fetchWpComThemesIfSyncTimedOut(true); } - @Override - public void onScrollableViewInitialized(int containerId) { - if (mJetpackBrandingUtils.shouldShowJetpackBanner()) { - final JetpackPoweredScreen screen = JetpackPoweredScreen.WithDynamicText.THEMES; - findViewById(R.id.root_view).post(() -> { - View jetpackBannerView = findViewById(R.id.jetpack_banner); - TextView jetpackBannerTextView = jetpackBannerView.findViewById(R.id.jetpack_banner_text); - jetpackBannerTextView.setText( - mUiHelpers.getTextOfUiString( - this, - mJetpackBrandingUtils.getBrandingText()) - ); - - HeaderGridView scrollableView = findViewById(containerId); - - showJetpackBannerIfScrolledToTop(jetpackBannerView, scrollableView); - initJetpackBannerAnimation(jetpackBannerView, scrollableView); - - if (mJetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - jetpackBannerView.setOnClickListener(v -> { - mJetpackBrandingUtils.trackBannerTapped(screen); - new JetpackPoweredBottomSheetFragment() - .show(getSupportFragmentManager(), JetpackPoweredBottomSheetFragment.TAG); - }); - } - }); - } - } - - private void showJetpackBannerIfScrolledToTop(View banner, HeaderGridView scrollableView) { - banner.setVisibility(View.VISIBLE); - - boolean isEmpty = scrollableView.getAdapter().isEmpty(); - int scrollOffset = scrollableView.computeVerticalScrollOffset(); - - float jetpackBannerHeight = banner.getResources().getDimension(R.dimen.jetpack_banner_height); - - float translationY = scrollOffset == 0 || isEmpty ? 0 : jetpackBannerHeight; - banner.setTranslationY(translationY); - } - - private void initJetpackBannerAnimation(View banner, HeaderGridView scrollableView) { - scrollableView.setOnScrollChangeListener(new OnScrollChangeListener() { - private boolean mIsScrollAtTop = true; - - @Override - public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { - int scrollOffset = scrollableView.computeVerticalScrollOffset(); - - if (scrollOffset == 0 && !mIsScrollAtTop) { - // Show the banner by moving up - mIsScrollAtTop = true; - banner.animate().translationY(0f).start(); - } else if (scrollOffset != 0 && mIsScrollAtTop) { - // Hide the banner by moving down - mIsScrollAtTop = false; - float jetpackBannerHeight = banner.getResources().getDimension(R.dimen.jetpack_banner_height); - banner.animate().translationY(jetpackBannerHeight).start(); - } - } - }); - } - @SuppressWarnings("unused") @Subscribe(threadMode = ThreadMode.MAIN) public void onWpComThemesChanged(OnWpComThemesChanged event) { diff --git a/WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt b/WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt index e0acc302c84b..d962bcf76277 100644 --- a/WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt +++ b/WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt @@ -29,10 +29,6 @@ class JetpackBrandingUtils @Inject constructor( && !jetpackFeatureRemovalBrandingUtil.isInRemovalPhase() } - fun shouldShowJetpackBanner(): Boolean { - return shouldShowJetpackBranding() && jetpackFeatureRemovalBrandingUtil.shouldShowBranding() - } - fun shouldShowJetpackPoweredBottomSheet(): Boolean { return isWpComSite() && jetpackPoweredBottomSheetFeatureConfig.isEnabled() && !buildConfigWrapper.isJetpackApp } diff --git a/WordPress/src/main/res/layout/people_list_fragment.xml b/WordPress/src/main/res/layout/people_list_fragment.xml index a84eb51c95f7..3ff3a924eb57 100644 --- a/WordPress/src/main/res/layout/people_list_fragment.xml +++ b/WordPress/src/main/res/layout/people_list_fragment.xml @@ -54,8 +54,4 @@ - - diff --git a/WordPress/src/main/res/layout/person_detail_fragment.xml b/WordPress/src/main/res/layout/person_detail_fragment.xml index d82f46c0cdf6..cbe8e0deadaf 100644 --- a/WordPress/src/main/res/layout/person_detail_fragment.xml +++ b/WordPress/src/main/res/layout/person_detail_fragment.xml @@ -124,14 +124,4 @@ android:layout_below="@id/person_role_container" android:background="?android:attr/listDivider" /> - - diff --git a/WordPress/src/main/res/layout/scan_activity.xml b/WordPress/src/main/res/layout/scan_activity.xml index fdc6fb2d4c68..89a57a55f598 100644 --- a/WordPress/src/main/res/layout/scan_activity.xml +++ b/WordPress/src/main/res/layout/scan_activity.xml @@ -29,9 +29,5 @@ - - diff --git a/WordPress/src/main/res/layout/scan_history_fragment.xml b/WordPress/src/main/res/layout/scan_history_fragment.xml index 6f8d6ff3f2e1..95d111363b16 100644 --- a/WordPress/src/main/res/layout/scan_history_fragment.xml +++ b/WordPress/src/main/res/layout/scan_history_fragment.xml @@ -40,8 +40,4 @@ android:layout_height="match_parent" layout="@layout/fullscreen_error_with_retry" /> - - diff --git a/WordPress/src/main/res/layout/theme_browser_activity.xml b/WordPress/src/main/res/layout/theme_browser_activity.xml index fc0c1ef512ec..591034c80f0d 100644 --- a/WordPress/src/main/res/layout/theme_browser_activity.xml +++ b/WordPress/src/main/res/layout/theme_browser_activity.xml @@ -25,8 +25,4 @@ app:layout_behavior="@string/appbar_scrolling_view_behavior" android:layout_width="match_parent" android:layout_height="match_parent" /> - - From b9c4a4d67a97f090369c500cf88a8f241c9511e3 Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Thu, 13 Aug 2026 12:48:37 -0400 Subject: [PATCH 04/16] CMM-2302: Address review feedback - Add JetpackFeatureRemovalOverlayUtilTest covering the surviving phase-four feature-collection overlay logic: the -1 show-once sentinel, never-shown, frequency elapsed / not elapsed, and the missing-timestamp path. The previous commits deleted the tests for that class because every case targeted the feature-specific overlay, leaving the frequency rules uncovered. - Delete AnalyticsTracker.Stat.JETPACK_REMOVE_FEATURE_OVERLAY_LINK_TAPPED, whose only caller was removed, and its stale mapping in AnalyticsTrackerNosaraTest. It duplicated the event name of ..._LEARN_MORE_TAPPED, which remains in use. - Unwrap a leftover no-op `run { }` in ReaderPostPagerActivity.handleDeepLinking. - Collapse five double blank lines left behind where properties were removed. - Restore the short-name phase imports in getCurrentPhase() instead of fully qualifying them, which had pushed one line to the 120-character limit. --- .../JetpackFeatureRemovalPhaseHelper.kt | 9 +- .../NotificationsListViewModel.kt | 1 - .../ui/people/PersonDetailFragment.java | 1 - .../ui/reader/ReaderPostPagerActivity.kt | 10 +- .../ui/reader/viewmodels/ReaderViewModel.kt | 1 - .../ui/stats/refresh/StatsViewModel.kt | 1 - .../lists/detail/StatsDetailViewModel.kt | 1 - .../JetpackFeatureRemovalOverlayUtilTest.kt | 130 ++++++++++++++++++ .../analytics/AnalyticsTrackerNosaraTest.kt | 1 - .../android/analytics/AnalyticsTracker.java | 3 +- 10 files changed, 141 insertions(+), 17 deletions(-) create mode 100644 WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtilTest.kt diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt index 308c2e5b9b3f..f4e9d96e67a4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt @@ -2,6 +2,9 @@ package org.wordpress.android.ui.jetpackoverlay import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseNewUsers +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseSelfHostedUsers import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalSiteCreationPhase.PHASE_TWO import org.wordpress.android.ui.main.WPMainNavigationView.PageType import org.wordpress.android.util.BuildConfigWrapper @@ -24,9 +27,9 @@ class JetpackFeatureRemovalPhaseHelper @Inject constructor( ) { fun getCurrentPhase(): JetpackFeatureRemovalPhase? { return if (buildConfigWrapper.isJetpackApp) null - else if (jetpackFeatureRemovalSelfHostedUsersConfig.isEnabled()) JetpackFeatureRemovalPhase.PhaseSelfHostedUsers - else if (jetpackFeatureRemovalNewUsersConfig.isEnabled()) JetpackFeatureRemovalPhase.PhaseNewUsers - else if (jetpackFeatureRemovalPhaseFourConfig.isEnabled()) JetpackFeatureRemovalPhase.PhaseFour + else if (jetpackFeatureRemovalSelfHostedUsersConfig.isEnabled()) PhaseSelfHostedUsers + else if (jetpackFeatureRemovalNewUsersConfig.isEnabled()) PhaseNewUsers + else if (jetpackFeatureRemovalPhaseFourConfig.isEnabled()) PhaseFour else null } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListViewModel.kt index e08115bfb40c..0c6dba2de7ea 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListViewModel.kt @@ -60,7 +60,6 @@ class NotificationsListViewModel @Inject constructor( private val _showJetpackPoweredBottomSheet = MutableLiveData>() val showJetpackPoweredBottomSheet: LiveData> = _showJetpackPoweredBottomSheet - private val _updatedNote = MutableLiveData() val updatedNote: LiveData = _updatedNote diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 086822ec4f40..1dd3d69dd653 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -141,7 +141,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa setHasOptionsMenu(true); } - return rootView; } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.kt index 98e435d04101..9e529e8d2172 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.kt @@ -422,12 +422,10 @@ class ReaderPostPagerActivity : BaseAppCompatActivity() { if (uri == null || jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { readerTracker.trackDeepLink(AnalyticsTracker.Stat.DEEP_LINKED, action!!, host!!, uri) // invalid uri so, just show the entry screen - run { - val intent = Intent(this, WPLaunchActivity::class.java) - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK) - intent.putExtra(WPMainActivity.ARG_OPEN_PAGE, WPMainActivity.ARG_READER) - startActivity(intent) - } + val intent = Intent(this, WPLaunchActivity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK) + intent.putExtra(WPMainActivity.ARG_OPEN_PAGE, WPMainActivity.ARG_READER) + startActivity(intent) finish() return } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModel.kt index 954b2eb5cc09..2725b3cb4bb9 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModel.kt @@ -91,7 +91,6 @@ class ReaderViewModel @Inject constructor( private val _showJetpackPoweredBottomSheet = MutableLiveData>() val showJetpackPoweredBottomSheet: LiveData> = _showJetpackPoweredBottomSheet - private var readerTagsList = ReaderTagList() init { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsViewModel.kt index 4f2a8b3c53ca..3ad521cfcf66 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsViewModel.kt @@ -110,7 +110,6 @@ class StatsViewModel private val _showJetpackPoweredBottomSheet = MutableLiveData>() val showJetpackPoweredBottomSheet: LiveData> = _showJetpackPoweredBottomSheet - fun start(intent: Intent, restart: Boolean = false) { val localSiteId = intent.getIntExtra(WordPress.LOCAL_SITE_ID, 0) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailViewModel.kt index 900809af53b0..1e82cf790dcf 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailViewModel.kt @@ -41,7 +41,6 @@ class StatsDetailViewModel ) val showSnackbarMessage: LiveData = _showSnackbarMessage - fun init( postId: Long, postType: String, diff --git a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtilTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtilTest.kt new file mode 100644 index 000000000000..a63bf2f96911 --- /dev/null +++ b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtilTest.kt @@ -0,0 +1,130 @@ +package org.wordpress.android.ui.jetpackoverlay + +import org.assertj.core.api.Assertions.assertThat +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.junit.MockitoJUnitRunner +import org.mockito.kotlin.whenever +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseNewUsers +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseSelfHostedUsers +import org.wordpress.android.util.DateTimeUtilsWrapper +import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper +import java.util.Date + +private const val OVERLAY_SHOWN_TIMESTAMP = 1_700_000_000_000L +private const val SHOW_ONCE_ONLY = -1 + +@RunWith(MockitoJUnitRunner::class) +class JetpackFeatureRemovalOverlayUtilTest { + @Mock + private lateinit var phaseHelper: JetpackFeatureRemovalPhaseHelper + + @Mock + private lateinit var shownTracker: JetpackFeatureOverlayShownTracker + + @Mock + private lateinit var dateTimeUtilsWrapper: DateTimeUtilsWrapper + + @Mock + private lateinit var analyticsTrackerWrapper: AnalyticsTrackerWrapper + + private lateinit var overlayUtil: JetpackFeatureRemovalOverlayUtil + + @Before + fun setUp() { + overlayUtil = JetpackFeatureRemovalOverlayUtil( + phaseHelper, + shownTracker, + dateTimeUtilsWrapper, + analyticsTrackerWrapper + ) + } + + @Test + fun `given no removal phase, when checking the feature collection overlay, then it is not shown`() { + whenever(phaseHelper.getCurrentPhase()).thenReturn(null) + + assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isFalse + } + + @Test + fun `given self hosted phase and overlay never shown, then the overlay is shown`() { + whenever(phaseHelper.getCurrentPhase()).thenReturn(PhaseSelfHostedUsers) + whenever(shownTracker.getFeatureCollectionOverlayShown(PhaseSelfHostedUsers)).thenReturn(false) + + assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isTrue + } + + @Test + fun `given self hosted phase and overlay already shown, then the overlay is not shown again`() { + whenever(phaseHelper.getCurrentPhase()).thenReturn(PhaseSelfHostedUsers) + whenever(shownTracker.getFeatureCollectionOverlayShown(PhaseSelfHostedUsers)).thenReturn(true) + + assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isFalse + } + + @Test + fun `given new users phase and overlay never shown, then the overlay is shown`() { + whenever(phaseHelper.getCurrentPhase()).thenReturn(PhaseNewUsers) + whenever(shownTracker.getFeatureCollectionOverlayShown(PhaseNewUsers)).thenReturn(false) + + assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isTrue + } + + // region phase four frequency + @Test + fun `given phase four and overlay never shown, then the overlay is shown regardless of frequency`() { + whenever(phaseHelper.getCurrentPhase()).thenReturn(PhaseFour) + whenever(shownTracker.getFeatureCollectionOverlayShown(PhaseFour)).thenReturn(false) + + assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isTrue + } + + @Test + fun `given phase four already shown and frequency is the show-once sentinel, then it is never shown again`() { + whenever(phaseHelper.getCurrentPhase()).thenReturn(PhaseFour) + whenever(shownTracker.getFeatureCollectionOverlayShown(PhaseFour)).thenReturn(true) + whenever(phaseHelper.getPhaseFourOverlayFrequency()).thenReturn(SHOW_ONCE_ONLY) + + assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isFalse + } + + @Test + fun `given phase four already shown and the frequency has elapsed, then the overlay is shown again`() { + stubPhaseFourShown(frequencyInDays = 7, daysSinceShown = 7) + + assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isTrue + } + + @Test + fun `given phase four already shown and the frequency has not elapsed, then the overlay is not shown`() { + stubPhaseFourShown(frequencyInDays = 7, daysSinceShown = 6) + + assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isFalse + } + + @Test + fun `given phase four already shown but no shown timestamp was recorded, then the overlay is not shown`() { + whenever(phaseHelper.getCurrentPhase()).thenReturn(PhaseFour) + whenever(shownTracker.getFeatureCollectionOverlayShown(PhaseFour)).thenReturn(true) + whenever(phaseHelper.getPhaseFourOverlayFrequency()).thenReturn(7) + whenever(shownTracker.getPhaseFourOverlayShownTimeStamp()).thenReturn(null) + + assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isFalse + } + // endregion + + private fun stubPhaseFourShown(frequencyInDays: Int, daysSinceShown: Int) { + val today = Date(OVERLAY_SHOWN_TIMESTAMP) + whenever(phaseHelper.getCurrentPhase()).thenReturn(PhaseFour) + whenever(shownTracker.getFeatureCollectionOverlayShown(PhaseFour)).thenReturn(true) + whenever(phaseHelper.getPhaseFourOverlayFrequency()).thenReturn(frequencyInDays) + whenever(shownTracker.getPhaseFourOverlayShownTimeStamp()).thenReturn(OVERLAY_SHOWN_TIMESTAMP) + whenever(dateTimeUtilsWrapper.getTodaysDate()).thenReturn(today) + whenever(dateTimeUtilsWrapper.daysBetween(Date(OVERLAY_SHOWN_TIMESTAMP), today)) + .thenReturn(daysSinceShown) + } +} diff --git a/WordPress/src/test/java/org/wordpress/android/util/analytics/AnalyticsTrackerNosaraTest.kt b/WordPress/src/test/java/org/wordpress/android/util/analytics/AnalyticsTrackerNosaraTest.kt index 31c05444bd36..c51b42d914cc 100644 --- a/WordPress/src/test/java/org/wordpress/android/util/analytics/AnalyticsTrackerNosaraTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/util/analytics/AnalyticsTrackerNosaraTest.kt @@ -237,7 +237,6 @@ class AnalyticsTrackerNosaraTest { Stat.BLOGGING_PROMPTS_INTRODUCTION_GOT_IT_CLICKED to "blogging_prompts_introduction_modal_got_it_tapped", Stat.BLOGGING_PROMPTS_LIST_SCREEN_VIEWED to "blogging_prompts_prompts_list_viewed", Stat.JETPACK_REMOVE_FEATURE_OVERLAY_DISPLAYED to "remove_feature_overlay_displayed", - Stat.JETPACK_REMOVE_FEATURE_OVERLAY_LINK_TAPPED to "remove_feature_overlay_link_tapped", Stat.JETPACK_REMOVE_FEATURE_OVERLAY_BUTTON_GET_JETPACK_APP_TAPPED to "remove_feature_overlay_button_tapped", Stat.JETPACK_REMOVE_FEATURE_OVERLAY_DISMISSED to "remove_feature_overlay_dismissed", Stat.JETPACK_REMOVE_FEATURE_OVERLAY_LEARN_MORE_TAPPED to "remove_feature_overlay_link_tapped", diff --git a/libs/analytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java b/libs/analytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java index 6e895d6e3dc2..c6419134bf8a 100644 --- a/libs/analytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java +++ b/libs/analytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java @@ -958,8 +958,7 @@ public enum Stat { DEEPLINK_CUSTOM_INTENT_RECEIVED, APP_SETTINGS_OPEN_WEB_LINKS_WITH_JETPACK_CHANGED, JETPACK_REMOVE_FEATURE_OVERLAY_DISPLAYED("remove_feature_overlay_displayed"), - JETPACK_REMOVE_FEATURE_OVERLAY_LINK_TAPPED("remove_feature_overlay_link_tapped"), - JETPACK_REMOVE_FEATURE_OVERLAY_BUTTON_GET_JETPACK_APP_TAPPED("remove_feature_overlay_button_tapped"), + JETPACK_REMOVE_FEATURE_OVERLAY_BUTTON_GET_JETPACK_APP_TAPPED("remove_feature_overlay_button_tapped"), JETPACK_REMOVE_FEATURE_OVERLAY_DISMISSED("remove_feature_overlay_dismissed"), JETPACK_REMOVE_FEATURE_OVERLAY_LEARN_MORE_TAPPED("remove_feature_overlay_link_tapped"), JETPACK_DEEP_LINK_OVERLAY_DISPLAYED, From 2dfaa1f1492a128b56a0a09951410bdc7f9d4af0 Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Thu, 13 Aug 2026 13:21:45 -0400 Subject: [PATCH 05/16] CMM-2302: Fix detekt, checkstyle and lint violations Cleanup debris left by the earlier removals. None of it could surface in a compile: unused imports and unused constructor properties are warnings to kotlinc and javac, not errors. - Delete 22 unused imports across 15 files. - Drop JetpackFeatureRemovalPhaseHelper from the constructors of TodaysStatsViewModelSlice, ListItemActionHandler and StatsLinkHandler, which no longer use it, along with the matching mocks and constructor arguments in their tests. - Drop the isFirstStart parameter from StatsDetailFragment. It was only read by the overlay observer that was removed, so it is now unused through setupObservers, initializeViewModels and the call site. - Remove three blank lines before closing braces. - Delete res/drawable/ic_external_v2.xml, whose only reference was the deleted static poster screen. detekt, checkstyle and lintWordPressRelease all pass. The one remaining lint warning (InsecurePermissionProtectionLevel in src/wordpress/AndroidManifest.xml) predates this branch and does not fail the build. --- .../wordpress/android/models/JetpackPoweredScreen.kt | 2 -- .../android/ui/debug/DebugSettingsItemViewHolder.kt | 1 - .../java/org/wordpress/android/ui/debug/UIState.kt | 1 - .../android/ui/deeplinks/handlers/StatsLinkHandler.kt | 2 -- .../wordpress/android/ui/jetpack/scan/ScanActivity.kt | 2 -- .../ui/jetpack/scan/history/ScanHistoryFragment.kt | 2 -- .../JetpackFeatureOverlayContentBuilder.kt | 1 - .../android/ui/mysite/cards/ListItemActionHandler.kt | 2 -- .../todaysstats/TodaysStatsViewModelSlice.kt | 2 -- .../ui/notifications/NotificationsListFragment.kt | 1 - .../android/ui/people/PeopleListFragment.java | 2 -- .../android/ui/people/PersonDetailFragment.java | 1 - .../org/wordpress/android/ui/reader/ReaderFragment.kt | 1 - .../android/ui/stats/refresh/StatsActivity.kt | 1 - .../android/ui/stats/refresh/StatsFragment.kt | 1 - .../stats/refresh/lists/detail/StatsDetailFragment.kt | 11 ++++------- .../refresh/lists/detail/StatsDetailViewModel.kt | 1 - .../android/ui/themes/ThemeBrowserActivity.java | 4 ---- WordPress/src/main/res/drawable/ic_external_v2.xml | 9 --------- .../ui/deeplinks/handlers/StatsLinkHandlerTest.kt | 6 +----- .../JetpackFeatureRemovalPhaseHelperTest.kt | 1 - .../ui/mysite/cards/ListItemActionHandlerTest.kt | 5 ----- .../todaysstats/TodaysStatsViewModelSliceTest.kt | 5 ----- 23 files changed, 5 insertions(+), 59 deletions(-) delete mode 100644 WordPress/src/main/res/drawable/ic_external_v2.xml diff --git a/WordPress/src/main/java/org/wordpress/android/models/JetpackPoweredScreen.kt b/WordPress/src/main/java/org/wordpress/android/models/JetpackPoweredScreen.kt index bc3b46a0a45b..8056911fc162 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/JetpackPoweredScreen.kt +++ b/WordPress/src/main/java/org/wordpress/android/models/JetpackPoweredScreen.kt @@ -1,7 +1,5 @@ package org.wordpress.android.models -import android.os.Parcelable -import kotlinx.parcelize.Parcelize import org.wordpress.android.R import org.wordpress.android.ui.utils.UiString import org.wordpress.android.ui.utils.UiString.UiStringRes diff --git a/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsItemViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsItemViewHolder.kt index 87e988ce4fa4..c6eb8c9c7b4f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsItemViewHolder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsItemViewHolder.kt @@ -4,7 +4,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.annotation.LayoutRes -import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView.ViewHolder import org.wordpress.android.R import org.wordpress.android.databinding.DebugSettingsFeatureBinding diff --git a/WordPress/src/main/java/org/wordpress/android/ui/debug/UIState.kt b/WordPress/src/main/java/org/wordpress/android/ui/debug/UIState.kt index fbeb37a2539a..8d464e0e36ef 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/debug/UIState.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/debug/UIState.kt @@ -38,7 +38,6 @@ sealed class UiItem(open val type: DebugSettingsType) { ) enum class State { ENABLED, DISABLED, UNKNOWN } - } data class Field(val remoteFieldKey: String, val remoteFieldValue: String, val remoteFieldSource: String) : diff --git a/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/handlers/StatsLinkHandler.kt b/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/handlers/StatsLinkHandler.kt index f2cb14f36417..989673bab363 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/handlers/StatsLinkHandler.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/handlers/StatsLinkHandler.kt @@ -10,7 +10,6 @@ import org.wordpress.android.ui.deeplinks.DeepLinkUriUtils import org.wordpress.android.ui.deeplinks.DeepLinkingIntentReceiverViewModel.Companion.APPLINK_SCHEME import org.wordpress.android.ui.deeplinks.DeepLinkingIntentReceiverViewModel.Companion.HOST_WORDPRESS_COM import org.wordpress.android.ui.deeplinks.DeepLinkingIntentReceiverViewModel.Companion.SITE_DOMAIN -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper import org.wordpress.android.ui.stats.StatsTimeframe import org.wordpress.android.util.UriWrapper import javax.inject.Inject @@ -18,7 +17,6 @@ import javax.inject.Inject class StatsLinkHandler @Inject constructor( private val deepLinkUriUtils: DeepLinkUriUtils, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper ) : DeepLinkHandler { /** * Builds navigate action from URL like: diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanActivity.kt index 173282deca00..c774193865fa 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanActivity.kt @@ -4,8 +4,6 @@ import android.content.Intent import android.os.Bundle import android.view.Menu import android.view.MenuItem -import android.view.View -import androidx.recyclerview.widget.RecyclerView import dagger.hilt.android.AndroidEntryPoint import org.wordpress.android.R import org.wordpress.android.WordPress 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 8eba7b8d050b..c1d779f62628 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 @@ -9,7 +9,6 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.view.MenuProvider import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.adapter.FragmentStateAdapter import com.google.android.material.tabs.TabLayout.OnTabSelectedListener import com.google.android.material.tabs.TabLayout.Tab @@ -153,5 +152,4 @@ class ScanHistoryFragment : Fragment(R.layout.scan_history_fragment), MenuProvid override fun onScrollableViewInitialized(containerId: Int) { binding?.appbarMain?.liftOnScrollTargetViewId = containerId } - } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt index cf06e7e0966f..ed630889b6dc 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt @@ -100,5 +100,4 @@ class JetpackFeatureOverlayContentBuilder @Inject constructor() { primaryButtonText = R.string.wp_jetpack_feature_removal_overlay_switch_to_the_jetpack_app, secondaryButtonText = R.string.wp_jetpack_feature_removal_overlay_continue_without_jetpack ) - } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/ListItemActionHandler.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/ListItemActionHandler.kt index 0487bdcf2ca5..47e393468fcd 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/ListItemActionHandler.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/ListItemActionHandler.kt @@ -5,7 +5,6 @@ import org.wordpress.android.fluxc.store.AccountStore import org.wordpress.android.ui.blaze.BlazeFeatureUtils import org.wordpress.android.ui.blaze.BlazeFlowSource import org.wordpress.android.ui.blaze.blazecampaigns.campaignlisting.CampaignListingPageSource -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper import org.wordpress.android.ui.mysite.SiteNavigationAction import org.wordpress.android.ui.mysite.items.listitem.ListItemAction import org.wordpress.android.ui.newstats.NewStatsRouting @@ -13,7 +12,6 @@ import javax.inject.Inject class ListItemActionHandler @Inject constructor( private val accountStore: AccountStore, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper, private val blazeFeatureUtils: BlazeFeatureUtils, private val newStatsRouting: NewStatsRouting ) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSlice.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSlice.kt index 7c5867369c5a..94892045a3b2 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSlice.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSlice.kt @@ -3,7 +3,6 @@ package org.wordpress.android.ui.mysite.cards.dashboard.todaysstats import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import org.wordpress.android.fluxc.model.dashboard.CardModel.TodaysStatsCardModel -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper import org.wordpress.android.ui.mysite.MySiteCardAndItem import org.wordpress.android.ui.mysite.MySiteCardAndItemBuilderParams.TodaysStatsCardBuilderParams import org.wordpress.android.ui.mysite.SelectedSiteRepository @@ -17,7 +16,6 @@ import javax.inject.Inject class TodaysStatsViewModelSlice @Inject constructor( private val cardsTracker: CardsTracker, private val selectedSiteRepository: SelectedSiteRepository, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper, private val appPrefsWrapper: AppPrefsWrapper, private val todaysStatsCardBuilder: TodaysStatsCardBuilder, private val newStatsRouting: NewStatsRouting diff --git a/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListFragment.kt index 50c409afe9d6..99407648a54f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListFragment.kt @@ -45,7 +45,6 @@ import org.wordpress.android.ui.JetpackConnectionWebViewActivity import org.wordpress.android.ui.RequestCodes import org.wordpress.android.ui.ScrollableViewInitializedListener import org.wordpress.android.ui.WPWebViewActivity -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureFullScreenOverlayFragment import org.wordpress.android.ui.jetpackrestconnection.JetpackRestConnectionActivity import org.wordpress.android.ui.jetpackrestconnection.JetpackRestConnectionViewModel import org.wordpress.android.ui.main.WPMainActivity diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java index 0108469cb8ff..739392b04757 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -32,8 +32,6 @@ import org.wordpress.android.models.Person; import org.wordpress.android.models.RoleUtils; import org.wordpress.android.ui.ActionableEmptyView; -import org.wordpress.android.ui.utils.UiHelpers; -import org.wordpress.android.util.JetpackBrandingUtils; import org.wordpress.android.util.NetworkUtils; import org.wordpress.android.util.WPAvatarUtils; import org.wordpress.android.util.image.ImageManager; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 1dd3d69dd653..ca2f04a5e706 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -30,7 +30,6 @@ import org.wordpress.android.ui.utils.UiHelpers; import org.wordpress.android.util.AppLog; import org.wordpress.android.util.WPAvatarUtils; -import org.wordpress.android.util.JetpackBrandingUtils; import org.wordpress.android.util.image.ImageManager; import org.wordpress.android.util.image.ImageType; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderFragment.kt index cb6c4e801c88..fd3efd89e42f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderFragment.kt @@ -24,7 +24,6 @@ import org.wordpress.android.models.JetpackPoweredScreen import org.wordpress.android.models.ReaderTag import org.wordpress.android.ui.ScrollableViewInitializedListener import org.wordpress.android.ui.compose.theme.AppThemeM3 -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureFullScreenOverlayFragment import org.wordpress.android.ui.main.WPMainActivity.OnScrollToTopListener import org.wordpress.android.ui.main.WPMainNavigationView.PageType.READER import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsActivity.kt index f58d951ee07d..6c1099272477 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsActivity.kt @@ -11,7 +11,6 @@ import org.wordpress.android.databinding.StatsListActivityBinding import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.push.NotificationType import org.wordpress.android.push.NotificationsProcessingService.ARG_NOTIFICATION_TYPE -import org.wordpress.android.ui.ActivityLauncher import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper import org.wordpress.android.ui.main.BaseAppCompatActivity import org.wordpress.android.ui.stats.StatsTimeframe diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsFragment.kt index edae11caab11..4d39d3f6cb24 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsFragment.kt @@ -28,7 +28,6 @@ import org.wordpress.android.analytics.AnalyticsTracker.Stat import org.wordpress.android.databinding.StatsFragmentBinding import org.wordpress.android.models.JetpackPoweredScreen import org.wordpress.android.ui.ScrollableViewInitializedListener -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureFullScreenOverlayFragment import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil import org.wordpress.android.ui.main.WPMainNavigationView.PageType.MY_SITE import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailFragment.kt index 17eb5c5a05ac..08d6b102c794 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailFragment.kt @@ -12,8 +12,6 @@ import org.wordpress.android.R import org.wordpress.android.WordPress import org.wordpress.android.databinding.StatsDetailFragmentBinding import org.wordpress.android.models.JetpackPoweredScreen -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureFullScreenOverlayFragment -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.StatsSection import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider @@ -21,7 +19,6 @@ import org.wordpress.android.ui.utils.UiHelpers import org.wordpress.android.util.JetpackBrandingUtils import org.wordpress.android.util.WPSwipeToRefreshHelper import org.wordpress.android.util.helpers.SwipeToRefreshHelper -import org.wordpress.android.viewmodel.observeEvent import javax.inject.Inject @AndroidEntryPoint @@ -53,7 +50,7 @@ class StatsDetailFragment : Fragment(R.layout.stats_detail_fragment) { it.setDisplayHomeAsUpEnabled(true) } } - initializeViewModels(nonNullActivity, savedInstanceState == null) + initializeViewModels(nonNullActivity) initializeViews() initJetpackBanner() } @@ -91,7 +88,7 @@ class StatsDetailFragment : Fragment(R.layout.stats_detail_fragment) { } } - private fun initializeViewModels(activity: FragmentActivity, isFirstStart: Boolean) { + private fun initializeViewModels(activity: FragmentActivity) { val siteId = activity.intent?.getIntExtra(WordPress.LOCAL_SITE_ID, 0) ?: 0 statsSiteProvider.start(siteId) @@ -109,10 +106,10 @@ class StatsDetailFragment : Fragment(R.layout.stats_detail_fragment) { postUrl ) - setupObservers(viewModel, isFirstStart) + setupObservers(viewModel) } - private fun setupObservers(viewModel: StatsDetailViewModel, isFirstStart: Boolean) { + private fun setupObservers(viewModel: StatsDetailViewModel) { viewModel.isRefreshing.observe(viewLifecycleOwner) { it?.let { isRefreshing -> swipeToRefreshHelper.isRefreshing = isRefreshing diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailViewModel.kt index 1e82cf790dcf..f69a88eb97f1 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/detail/StatsDetailViewModel.kt @@ -17,7 +17,6 @@ import org.wordpress.android.ui.utils.UiString.UiStringRes import org.wordpress.android.util.NetworkUtilsWrapper import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.util.mergeNotNull -import org.wordpress.android.viewmodel.Event import org.wordpress.android.viewmodel.ScopedViewModel import javax.inject.Inject import javax.inject.Named diff --git a/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java index 1e610a062bfa..63c86f3b5841 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java @@ -4,8 +4,6 @@ import android.os.Bundle; import android.text.TextUtils; import android.view.MenuItem; -import android.view.View; -import android.widget.TextView; import androidx.activity.OnBackPressedCallback; import androidx.annotation.NonNull; @@ -37,12 +35,10 @@ import org.wordpress.android.fluxc.store.ThemeStore.SiteThemePayload; import org.wordpress.android.ui.ActivityId; import org.wordpress.android.ui.main.BaseAppCompatActivity; -import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment; import org.wordpress.android.ui.prefs.AppPrefs; import org.wordpress.android.ui.themes.ThemeBrowserFragment.ThemeBrowserFragmentCallback; import org.wordpress.android.util.AppLog; import org.wordpress.android.util.AppLog.T; -import org.wordpress.android.util.JetpackBrandingUtils; import org.wordpress.android.util.ToastUtils; import org.wordpress.android.util.analytics.AnalyticsUtils; import org.wordpress.android.util.extensions.CompatExtensionsKt; diff --git a/WordPress/src/main/res/drawable/ic_external_v2.xml b/WordPress/src/main/res/drawable/ic_external_v2.xml deleted file mode 100644 index 2c3fa058a7bf..000000000000 --- a/WordPress/src/main/res/drawable/ic_external_v2.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/WordPress/src/test/java/org/wordpress/android/ui/deeplinks/handlers/StatsLinkHandlerTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/deeplinks/handlers/StatsLinkHandlerTest.kt index 35fa892d67c7..3adf6e1c933b 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/deeplinks/handlers/StatsLinkHandlerTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/deeplinks/handlers/StatsLinkHandlerTest.kt @@ -11,7 +11,6 @@ import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction import org.wordpress.android.ui.deeplinks.DeepLinkUriUtils import org.wordpress.android.ui.deeplinks.buildUri -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper import org.wordpress.android.ui.stats.StatsTimeframe.DAY import org.wordpress.android.ui.stats.StatsTimeframe.INSIGHTS import org.wordpress.android.ui.stats.StatsTimeframe.MONTH @@ -28,12 +27,9 @@ class StatsLinkHandlerTest { lateinit var site: SiteModel private lateinit var statsLinkHandler: StatsLinkHandler - @Mock - private lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper - @Before fun setUp() { - statsLinkHandler = StatsLinkHandler(deepLinkUriUtils, jetpackFeatureRemovalPhaseHelper) + statsLinkHandler = StatsLinkHandler(deepLinkUriUtils) } @Test diff --git a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt index 9cc2eb166f62..aacc733cc2eb 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt @@ -8,7 +8,6 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.junit.MockitoJUnitRunner -import org.mockito.kotlin.never import org.mockito.kotlin.times import org.mockito.kotlin.verify import org.mockito.kotlin.whenever diff --git a/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/ListItemActionHandlerTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/ListItemActionHandlerTest.kt index c0e924236278..8753966eb02e 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/ListItemActionHandlerTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/ListItemActionHandlerTest.kt @@ -13,7 +13,6 @@ import org.wordpress.android.fluxc.store.AccountStore import org.wordpress.android.ui.blaze.BlazeFeatureUtils import org.wordpress.android.ui.blaze.BlazeFlowSource import org.wordpress.android.ui.blaze.blazecampaigns.campaignlisting.CampaignListingPageSource -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper import org.wordpress.android.ui.mysite.SiteNavigationAction import org.wordpress.android.ui.mysite.items.listitem.ListItemAction import org.wordpress.android.ui.newstats.NewStatsRouting @@ -25,9 +24,6 @@ class ListItemActionHandlerTest: BaseUnitTest() { @Mock lateinit var accountStore: AccountStore - @Mock - lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper - @Mock lateinit var blazeFeatureUtils: BlazeFeatureUtils @@ -42,7 +38,6 @@ class ListItemActionHandlerTest: BaseUnitTest() { fun setup() { listItemActionHandler = ListItemActionHandler( accountStore, - jetpackFeatureRemovalPhaseHelper, blazeFeatureUtils, newStatsRouting ) diff --git a/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSliceTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSliceTest.kt index 3ceec8875c3f..14f145a68ade 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSliceTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSliceTest.kt @@ -12,7 +12,6 @@ import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import org.wordpress.android.BaseUnitTest import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper import org.wordpress.android.ui.mysite.MySiteCardAndItem import org.wordpress.android.ui.mysite.SelectedSiteRepository import org.wordpress.android.ui.mysite.SiteNavigationAction @@ -29,9 +28,6 @@ class TodaysStatsViewModelSliceTest : BaseUnitTest() { @Mock lateinit var selectedSiteRepository: SelectedSiteRepository - @Mock - lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper - @Mock lateinit var appPrefsWrapper: AppPrefsWrapper @@ -54,7 +50,6 @@ class TodaysStatsViewModelSliceTest : BaseUnitTest() { todaysStatsViewModelSlice = TodaysStatsViewModelSlice( cardsTracker, selectedSiteRepository, - jetpackFeatureRemovalPhaseHelper, appPrefsWrapper, todaysStatsCardBuilder, newStatsRouting From 462222745f5b44161238fdbe54d55c07329b53fc Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Thu, 13 Aug 2026 14:10:56 -0400 Subject: [PATCH 06/16] CMM-2303: Make the Jetpack feature removal a build-flavor invariant The WordPress app does not ship Reader, Stats or Notifications; the Jetpack app does. That was decided at runtime from the jp_removal_* remote flags. This makes it a build-flavor check instead: shouldRemoveJetpackFeatures() is now simply !isJetpackApp. Unlike the preceding commits, this is a deliberate behaviour change. Why: - The flag was a server-side constant. The WP.com /mobile/feature-flags endpoint returns jp_removal_self_hosted=true for every build number and both app identifiers, with no rollout or cohort logic. - The in-app default was "not removed", so anything that emptied the flag store un-removed the features. Signing out calls AppInitializer's removeWpComUserRelatedData -> appConfig.clear(), which wipes the flags in memory and on disk; until the next successful fetch the WordPress app showed the full bottom nav with working Reader and Notifications. A failed fetch left it that way indefinitely. A fresh install has the same problem. There is now no flag to wipe. Removed: - JetpackFeatureRemovalPhase and the PhaseFour/NewUsers/SelfHostedUsers configs, their BuildConfig fields, PhaseFourBlogPostLinkConfig and PhaseFourOverlayFrequencyConfig - Per-phase branching in JetpackFeatureOverlayContentBuilder, JetpackFeatureCardHelper and JetpackFeatureRemovalOverlayUtil, including the phase-four overlay frequency rules; the collection overlay is now shown once - The switch-to-Jetpack menu card, gated on PhaseFour only and therefore never shown in production: view holder, view model slice, layout, menu, MySiteCardAndItem.Card.JetpackSwitchMenu and its preferences - jp_all_features_* Lottie files and 6 orphaned string keys across 30 locales Kept deliberately: - The literal "self_hosted", now JETPACK_REMOVAL_TRACKING_NAME. Three SharedPrefs keys embed the phase name, so dropping it would re-show the feature card to users who dismissed it and re-show the overlay to users who saw it. It also pins the Tracks `phase` property so events stay comparable. - The "switch to Jetpack" overlay and the My Site feature card, which are the live migration prompts. Trade-off: rolling the removal back now needs an app release rather than a flag flip. Tests rewritten around the flavor invariant. detekt, checkstyle and lintWordPressRelease all pass. --- WordPress/build.gradle | 3 - ...etpackFeatureFullScreenOverlayViewModel.kt | 25 +-- .../JetpackFeatureOverlayContentBuilder.kt | 68 +-------- .../JetpackFeatureOverlayShownTracker.kt | 29 +--- .../JetpackFeatureRemovalOverlayUtil.kt | 50 +----- .../JetpackFeatureRemovalPhaseHelper.kt | 73 ++++----- .../jetpackoverlay/JetpackOverlayUIState.kt | 25 +-- .../android/ui/mysite/MySiteAdapter.kt | 4 - .../ui/mysite/MySiteAdapterDiffCallback.kt | 2 - .../android/ui/mysite/MySiteCardAndItem.kt | 8 - .../JetpackFeatureCardHelper.kt | 100 ++---------- .../JetpackFeatureCardShownTracker.kt | 7 +- .../SwitchToJetpackMenuCardViewHolder.kt | 54 ------- .../items/DashboardItemsViewModelSlice.kt | 19 +-- .../JetpackSwitchMenuViewModelSlice.kt | 69 --------- .../wordpress/android/ui/prefs/AppPrefs.java | 50 ++---- .../android/ui/prefs/AppPrefsWrapper.kt | 35 +---- .../JetpackFeatureRemovalNewUsersConfig.kt | 22 --- .../JetpackFeatureRemovalPhaseFourConfig.kt | 19 --- .../JetpackFeatureRemovalRemoteFields.kt | 25 --- ...packFeatureRemovalSelfHostedUsersConfig.kt | 22 --- .../res/layout/switch_to_jetpack_menu.xml | 50 ------ .../res/menu/switch_to_jetpack_card_menu.xml | 12 -- .../main/res/raw/jp_all_features_left.json | 1 - .../src/main/res/raw/jp_all_features_rtl.json | 1 - WordPress/src/main/res/values-ar/strings.xml | 6 - WordPress/src/main/res/values-cs/strings.xml | 6 - WordPress/src/main/res/values-de/strings.xml | 6 - .../src/main/res/values-en-rCA/strings.xml | 6 - .../src/main/res/values-en-rGB/strings.xml | 6 - .../src/main/res/values-es-rCL/strings.xml | 6 - .../src/main/res/values-es-rCO/strings.xml | 6 - WordPress/src/main/res/values-es/strings.xml | 6 - .../src/main/res/values-fr-rCA/strings.xml | 6 - WordPress/src/main/res/values-fr/strings.xml | 6 - WordPress/src/main/res/values-gl/strings.xml | 6 - WordPress/src/main/res/values-he/strings.xml | 6 - WordPress/src/main/res/values-id/strings.xml | 6 - WordPress/src/main/res/values-it/strings.xml | 6 - WordPress/src/main/res/values-ja/strings.xml | 6 - WordPress/src/main/res/values-ko/strings.xml | 6 - WordPress/src/main/res/values-lv/strings.xml | 6 - WordPress/src/main/res/values-nl/strings.xml | 6 - WordPress/src/main/res/values-pl/strings.xml | 6 - .../src/main/res/values-pt-rBR/strings.xml | 6 - WordPress/src/main/res/values-ro/strings.xml | 6 - WordPress/src/main/res/values-ru/strings.xml | 6 - WordPress/src/main/res/values-sq/strings.xml | 6 - WordPress/src/main/res/values-sr/strings.xml | 1 - WordPress/src/main/res/values-sv/strings.xml | 6 - WordPress/src/main/res/values-tr/strings.xml | 6 - .../src/main/res/values-zh-rCN/strings.xml | 6 - .../src/main/res/values-zh-rHK/strings.xml | 6 - .../src/main/res/values-zh-rTW/strings.xml | 6 - WordPress/src/main/res/values/strings.xml | 6 - .../JetpackFeatureRemovalOverlayUtilTest.kt | 96 +++--------- .../JetpackFeatureRemovalPhaseHelperTest.kt | 95 ++++-------- .../DashboardItemsViewModelSliceTest.kt | 15 +- .../JetpackFeatureCardHelperTest.kt | 23 +-- .../JetpackSwitchMenuViewModelSliceTest.kt | 144 ------------------ 60 files changed, 157 insertions(+), 1164 deletions(-) delete mode 100644 WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/SwitchToJetpackMenuCardViewHolder.kt delete mode 100644 WordPress/src/main/java/org/wordpress/android/ui/mysite/items/jetpackSwitchmenu/JetpackSwitchMenuViewModelSlice.kt delete mode 100644 WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalNewUsersConfig.kt delete mode 100644 WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseFourConfig.kt delete mode 100644 WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalSelfHostedUsersConfig.kt delete mode 100644 WordPress/src/main/res/layout/switch_to_jetpack_menu.xml delete mode 100644 WordPress/src/main/res/menu/switch_to_jetpack_card_menu.xml delete mode 100644 WordPress/src/main/res/raw/jp_all_features_left.json delete mode 100644 WordPress/src/main/res/raw/jp_all_features_rtl.json delete mode 100644 WordPress/src/test/java/org/wordpress/android/ui/mysite/items/jetpackSwitchmenu/JetpackSwitchMenuViewModelSliceTest.kt diff --git a/WordPress/build.gradle b/WordPress/build.gradle index 766d435bcf3f..02c621a3285b 100644 --- a/WordPress/build.gradle +++ b/WordPress/build.gradle @@ -140,9 +140,6 @@ android { buildConfigField "boolean", "JETPACK_READER_SAVED_POSTS", "true" buildConfigField "boolean", "JETPACK_PROVIDER_SYNC", "true" buildConfigField "boolean", "JETPACK_MIGRATION_FLOW", "false" - buildConfigField "boolean", "JETPACK_FEATURE_REMOVAL_PHASE_FOUR", "false" - buildConfigField "boolean", "JETPACK_FEATURE_REMOVAL_NEW_USERS", "false" - buildConfigField "boolean", "JETPACK_FEATURE_REMOVAL_SELF_HOSTED_USERS", "false" buildConfigField "boolean", "PREVENT_DUPLICATE_NOTIFS_REMOTE_FIELD", "false" buildConfigField "boolean", "OPEN_WEB_LINKS_WITH_JETPACK_FLOW", "false" buildConfigField "boolean", "ENABLE_BLAZE_FEATURE", "false" diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayViewModel.kt index c4cb23fad1df..9455487afd5b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayViewModel.kt @@ -8,7 +8,6 @@ import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureOverlayActions.Open import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureCollectionOverlaySource import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackOverlayDismissalType.CLOSE_BUTTON import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackOverlayDismissalType.CONTINUE_BUTTON -import org.wordpress.android.util.config.PhaseFourBlogPostLinkConfig import org.wordpress.android.viewmodel.ScopedViewModel import org.wordpress.android.viewmodel.SingleLiveEvent import javax.inject.Inject @@ -19,8 +18,7 @@ class JetpackFeatureFullScreenOverlayViewModel @Inject constructor( @Named(UI_THREAD) mainDispatcher: CoroutineDispatcher, private val jetpackFeatureOverlayContentBuilder: JetpackFeatureOverlayContentBuilder, private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper, - private val jetpackFeatureRemovalOverlayUtil: JetpackFeatureRemovalOverlayUtil, - private val phaseFourBlogPostLinkConfig: PhaseFourBlogPostLinkConfig + private val jetpackFeatureRemovalOverlayUtil: JetpackFeatureRemovalOverlayUtil ) : ScopedViewModel(mainDispatcher) { private val _uiState = SingleLiveEvent() val uiState: LiveData = _uiState @@ -72,20 +70,14 @@ class JetpackFeatureFullScreenOverlayViewModel @Inject constructor( return } - val currentPhase = getCurrentPhase() - ?: return _action.postValue(JetpackFeatureOverlayActions.DismissDialog) + if (!jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { + return _action.postValue(JetpackFeatureOverlayActions.DismissDialog) + } featureCollectionOverlayOrigin = featureCollectionOverlaySource - _uiState.postValue( - jetpackFeatureOverlayContentBuilder.buildFeatureCollectionOverlayState( - rtlLayout, - currentPhase, - getBlogPostLinkForTheCurrentPhase() - ) - ) + _uiState.postValue(jetpackFeatureOverlayContentBuilder.buildFeatureCollectionOverlayState(rtlLayout)) jetpackFeatureRemovalOverlayUtil.onFeatureCollectionOverlayShown(featureCollectionOverlaySource) } - private fun getCurrentPhase() = jetpackFeatureRemovalPhaseHelper.getCurrentPhase() fun openJetpackMigrationInfoLink(migrationInfoRedirectUrl: String) { jetpackFeatureRemovalOverlayUtil.trackLearnMoreAboutMigrationClickedInFeatureCollectionOverlay( @@ -93,12 +85,5 @@ class JetpackFeatureFullScreenOverlayViewModel @Inject constructor( ) _action.value = OpenMigrationInfoLink(migrationInfoRedirectUrl) } - - private fun getBlogPostLinkForTheCurrentPhase(): String? { - return when (getCurrentPhase()) { - JetpackFeatureRemovalPhase.PhaseFour -> phaseFourBlogPostLinkConfig.getValue() - else -> null - } - } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt index ed630889b6dc..4379795c573d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt @@ -1,9 +1,6 @@ package org.wordpress.android.ui.jetpackoverlay import org.wordpress.android.R -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseNewUsers -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseSelfHostedUsers import org.wordpress.android.ui.utils.UiString.UiStringRes import javax.inject.Inject import javax.inject.Singleton @@ -32,67 +29,18 @@ class JetpackFeatureOverlayContentBuilder @Inject constructor() { } // All Feature Overlay - fun buildFeatureCollectionOverlayState( - isRtl: Boolean, currentPhase: JetpackFeatureRemovalPhase, blogPostLink: String? - ): JetpackFeatureOverlayUIState { - return getStateForFeatureCollection(isRtl, currentPhase, blogPostLink) + fun buildFeatureCollectionOverlayState(isRtl: Boolean): JetpackFeatureOverlayUIState { + return getStateForFeatureCollection(isRtl) } - private fun getStateForFeatureCollection( - isRtl: Boolean, - currentPhase: JetpackFeatureRemovalPhase, - blogPostLink: String? - ): JetpackFeatureOverlayUIState { - val componentVisibility = when (currentPhase) { - PhaseFour -> JetpackFeatureOverlayComponentVisibility.FeatureCollectionPhase.PhaseFour() - PhaseNewUsers -> JetpackFeatureOverlayComponentVisibility.FeatureCollectionPhase.PhaseNewUsers() - PhaseSelfHostedUsers -> - JetpackFeatureOverlayComponentVisibility.FeatureCollectionPhase.PhaseSelfHostedUsers() - } - val content = getContentForFeatureCollection(isRtl, blogPostLink, currentPhase) - return JetpackFeatureOverlayUIState(componentVisibility, content) - } - - private fun getContentForFeatureCollection( - isRtl: Boolean, - blogPostLink: String?, - currentPhase: JetpackFeatureRemovalPhase - ): JetpackFeatureOverlayContent { - return when (currentPhase) { - is PhaseFour -> getJetpackFeatureOverlayContentForPhaseFour(isRtl, blogPostLink) - is PhaseNewUsers -> getJetpackFeatureOverlayContentForNewUsers(isRtl) - is PhaseSelfHostedUsers -> getJetpackFeatureOverlayContentForSelfHostedUsers(isRtl) - } + private fun getStateForFeatureCollection(isRtl: Boolean): JetpackFeatureOverlayUIState { + return JetpackFeatureOverlayUIState( + JetpackFeatureOverlayComponentVisibility.FeatureCollectionPhase(), + getContentForFeatureCollection(isRtl) + ) } - private fun getJetpackFeatureOverlayContentForPhaseFour( - isRtl: Boolean, - blogPostLink: String? - ) = JetpackFeatureOverlayContent( - illustration = if (isRtl) R.raw.jp_all_features_rtl else R.raw.jp_all_features_left, - title = R.string.wp_jetpack_feature_removal_overlay_phase_four_title_all_features, - caption = UiStringRes(R.string.wp_jetpack_feature_removal_overlay_phase_four_all_features_description), - migrationText = R.string.wp_jetpack_feature_removal_overlay_migration_helper_text, - migrationInfoText = if (!blogPostLink.isNullOrEmpty()) - R.string.wp_jetpack_feature_removal_overlay_learn_more_migration_text else null, - migrationInfoUrl = blogPostLink, - primaryButtonText = R.string.wp_jetpack_feature_removal_overlay_switch_to_the_jetpack_app, - secondaryButtonText = R.string.wp_jetpack_feature_removal_phase_four_secondary_text - ) - - private fun getJetpackFeatureOverlayContentForNewUsers( - isRtl: Boolean, - ) = JetpackFeatureOverlayContent( - illustration = if (isRtl) R.raw.wp2jp_rtl else R.raw.wp2jp_left, - title = R.string.wp_jetpack_feature_removal_phase_new_users_title, - caption = UiStringRes(R.string.wp_jetpack_feature_removal_phase_new_users_description), - primaryButtonText = R.string.wp_jetpack_feature_removal_overlay_switch_to_the_jetpack_app, - secondaryButtonText = R.string.wp_jetpack_feature_removal_overlay_continue_without_jetpack - ) - - private fun getJetpackFeatureOverlayContentForSelfHostedUsers( - isRtl: Boolean, - ) = JetpackFeatureOverlayContent( + private fun getContentForFeatureCollection(isRtl: Boolean) = JetpackFeatureOverlayContent( illustration = if (isRtl) R.raw.wp2jp_rtl else R.raw.wp2jp_left, title = R.string.wp_jetpack_feature_removal_phase_self_hosted_users_title, caption = UiStringRes(R.string.wp_jetpack_feature_removal_phase_self_hosted_users_description), diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayShownTracker.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayShownTracker.kt index 5db8b1925425..10462156c1b9 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayShownTracker.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayShownTracker.kt @@ -7,31 +7,18 @@ import javax.inject.Singleton @Singleton class JetpackFeatureOverlayShownTracker @Inject constructor(private val sharedPrefs: SharedPreferences) { - fun setFeatureCollectionOverlayShown(phase: JetpackFeatureRemovalPhase) { - sharedPrefs.edit { putBoolean(buildFeatureCollectionOverlayShownKey(phase), true) } - if (phase == JetpackFeatureRemovalPhase.PhaseFour) { - setPhaseFourOverlayShownTimeStamp(System.currentTimeMillis()) - } + fun setFeatureCollectionOverlayShown() { + sharedPrefs.edit { putBoolean(KEY_FEATURE_COLLECTION_OVERLAY_SHOWN_KEY, true) } } - fun getFeatureCollectionOverlayShown(phase: JetpackFeatureRemovalPhase) = - sharedPrefs.getBoolean(buildFeatureCollectionOverlayShownKey(phase), false) - - private fun buildFeatureCollectionOverlayShownKey(phase: JetpackFeatureRemovalPhase) = - KEY_FEATURE_COLLECTION_OVERLAY_SHOWN.plus(phase.trackingName) - - fun getPhaseFourOverlayShownTimeStamp(): Long? { - val overlayShownTime = sharedPrefs.getLong(KEY_PHASE_FOUR_OVERLAY_SHOWN_TIME_STAMP, 0L) - if (overlayShownTime == 0L) return null - return overlayShownTime - } - - private fun setPhaseFourOverlayShownTimeStamp(timeStamp: Long) { - sharedPrefs.edit { putLong(KEY_PHASE_FOUR_OVERLAY_SHOWN_TIME_STAMP, timeStamp) } - } + fun getFeatureCollectionOverlayShown() = + sharedPrefs.getBoolean(KEY_FEATURE_COLLECTION_OVERLAY_SHOWN_KEY, false) companion object { const val KEY_FEATURE_COLLECTION_OVERLAY_SHOWN = "KEY_FEATURE_COLLECTION_OVERLAY_SHOWN" - const val KEY_PHASE_FOUR_OVERLAY_SHOWN_TIME_STAMP = "KEY_PHASE_FOUR_OVERLAY_SHOWN_TIME_STAMP" + + // The phase name is part of the stored key; see JETPACK_REMOVAL_TRACKING_NAME. + private const val KEY_FEATURE_COLLECTION_OVERLAY_SHOWN_KEY = + KEY_FEATURE_COLLECTION_OVERLAY_SHOWN + JETPACK_REMOVAL_TRACKING_NAME } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt index f04ba479f23b..ef4b25dee2fb 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt @@ -2,12 +2,7 @@ package org.wordpress.android.ui.jetpackoverlay import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureCollectionOverlaySource.APP_OPEN -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseNewUsers -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseSelfHostedUsers -import org.wordpress.android.util.DateTimeUtilsWrapper import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper -import java.util.Date import javax.inject.Inject private const val CURRENT_PHASE_KEY = "phase" @@ -17,7 +12,6 @@ private const val DISMISSAL_TYPE_KEY = "dismissal_type" class JetpackFeatureRemovalOverlayUtil @Inject constructor( private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper, private val jetpackFeatureOverlayShownTracker: JetpackFeatureOverlayShownTracker, - private val dateTimeUtilsWrapper: DateTimeUtilsWrapper, private val analyticsTrackerWrapper: AnalyticsTrackerWrapper ) { fun shouldHideJetpackFeatures(): Boolean { @@ -25,36 +19,8 @@ class JetpackFeatureRemovalOverlayUtil @Inject constructor( } fun shouldShowFeatureCollectionJetpackOverlayForFirstTime(): Boolean { - val phase = jetpackFeatureRemovalPhaseHelper.getCurrentPhase() ?: return false - return shouldShowFeatureCollectionOverlayInCurrentPhase(phase) - } - - private fun shouldShowFeatureCollectionOverlayInCurrentPhase(phase: JetpackFeatureRemovalPhase): Boolean { - return when (phase) { - PhaseNewUsers, PhaseSelfHostedUsers -> - !jetpackFeatureOverlayShownTracker.getFeatureCollectionOverlayShown(phase) - PhaseFour -> shouldShowPhaseFourFeatureCollectionOverlay() - } - } - - // if the overlay is not shown, then show it - // if the overlay is shown and the remote config value is 0, then don't show - // if the overlay is shown and the remote config value is not 0, then check the frequency - @Suppress("ReturnCount") - private fun shouldShowPhaseFourFeatureCollectionOverlay(): Boolean { - val isOverlayShown = jetpackFeatureOverlayShownTracker.getFeatureCollectionOverlayShown(PhaseFour) - if (!isOverlayShown) return true - val phaseFourOverlayFrequency = jetpackFeatureRemovalPhaseHelper.getPhaseFourOverlayFrequency() - if (phaseFourOverlayFrequency == -1) return false - val overlayShownDate = jetpackFeatureOverlayShownTracker.getPhaseFourOverlayShownTimeStamp() - if (overlayShownDate != null) { - val daysPastOverlayShown = dateTimeUtilsWrapper.daysBetween( - Date(overlayShownDate), - dateTimeUtilsWrapper.getTodaysDate() - ) - return daysPastOverlayShown >= phaseFourOverlayFrequency - } - return false + return jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures() && + !jetpackFeatureOverlayShownTracker.getFeatureCollectionOverlayShown() } fun trackDeepLinkOverlayShown() { @@ -89,9 +55,7 @@ class JetpackFeatureRemovalOverlayUtil @Inject constructor( fun onFeatureCollectionOverlayShown(source: JetpackFeatureCollectionOverlaySource) { if (source == APP_OPEN) { - jetpackFeatureOverlayShownTracker.setFeatureCollectionOverlayShown( - jetpackFeatureRemovalPhaseHelper.getCurrentPhase()!! - ) + jetpackFeatureOverlayShownTracker.setFeatureCollectionOverlayShown() } trackFeatureCollectionOverlayShown(source) } @@ -100,7 +64,7 @@ class JetpackFeatureRemovalOverlayUtil @Inject constructor( analyticsTrackerWrapper.track( AnalyticsTracker.Stat.JETPACK_REMOVE_FEATURE_OVERLAY_DISPLAYED, mapOf( - CURRENT_PHASE_KEY to jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.trackingName, + CURRENT_PHASE_KEY to JETPACK_REMOVAL_TRACKING_NAME, SCREEN_TYPE_KEY to source.label ) ) @@ -113,7 +77,7 @@ class JetpackFeatureRemovalOverlayUtil @Inject constructor( analyticsTrackerWrapper.track( AnalyticsTracker.Stat.JETPACK_REMOVE_FEATURE_OVERLAY_DISMISSED, mapOf( - CURRENT_PHASE_KEY to jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.trackingName, + CURRENT_PHASE_KEY to JETPACK_REMOVAL_TRACKING_NAME, SCREEN_TYPE_KEY to source.label, DISMISSAL_TYPE_KEY to dismissalType.trackingName ) @@ -124,7 +88,7 @@ class JetpackFeatureRemovalOverlayUtil @Inject constructor( analyticsTrackerWrapper.track( AnalyticsTracker.Stat.JETPACK_REMOVE_FEATURE_OVERLAY_BUTTON_GET_JETPACK_APP_TAPPED, mapOf( - CURRENT_PHASE_KEY to jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.trackingName, + CURRENT_PHASE_KEY to JETPACK_REMOVAL_TRACKING_NAME, SCREEN_TYPE_KEY to source.label ) ) @@ -134,7 +98,7 @@ class JetpackFeatureRemovalOverlayUtil @Inject constructor( analyticsTrackerWrapper.track( AnalyticsTracker.Stat.JETPACK_REMOVE_FEATURE_OVERLAY_LEARN_MORE_TAPPED, mapOf( - CURRENT_PHASE_KEY to jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.trackingName, + CURRENT_PHASE_KEY to JETPACK_REMOVAL_TRACKING_NAME, SCREEN_TYPE_KEY to source.label ) ) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt index f4e9d96e67a4..54c6dc3b21eb 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt @@ -2,47 +2,50 @@ package org.wordpress.android.ui.jetpackoverlay import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseNewUsers -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseSelfHostedUsers import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalSiteCreationPhase.PHASE_TWO import org.wordpress.android.ui.main.WPMainNavigationView.PageType import org.wordpress.android.util.BuildConfigWrapper import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper -import org.wordpress.android.util.config.JetpackFeatureRemovalNewUsersConfig -import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseFourConfig -import org.wordpress.android.util.config.JetpackFeatureRemovalSelfHostedUsersConfig -import org.wordpress.android.util.config.PhaseFourOverlayFrequencyConfig import javax.inject.Inject -// Class used to find the current phase -// of the Jetpack powered migration +/** + * Identifies the final Jetpack feature-removal phase in analytics and in stored preference keys. + * + * The removal used to be a staged rollout driven by `jp_removal_*` remote flags, and both the Tracks + * `phase` property and several SharedPrefs keys embed the phase name. The rollout finished, so the + * flags are gone, but the literal is kept so events stay comparable and so users who dismissed a + * card do not see it reappear. + */ +const val JETPACK_REMOVAL_TRACKING_NAME = "self_hosted" + +/** + * The WordPress app does not ship the Jetpack-powered features (Reader, Stats, Notifications); the + * Jetpack app does. That is now purely a build-flavor difference. + * + * This used to be decided at runtime from the `jp_removal_*` remote flags. Those flags were a + * server-side constant, and because the in-app default was "not removed", anything that emptied the + * flag store — signing out, a fresh install, clearing app data — un-removed the features in the + * WordPress app until the next successful fetch. Deciding it from the build flavor removes that + * whole class of bug. + */ class JetpackFeatureRemovalPhaseHelper @Inject constructor( private val buildConfigWrapper: BuildConfigWrapper, - private val jetpackFeatureRemovalPhaseFourConfig: JetpackFeatureRemovalPhaseFourConfig, - private val jetpackFeatureRemovalNewUsersConfig: JetpackFeatureRemovalNewUsersConfig, - private val jetpackFeatureRemovalSelfHostedUsersConfig: JetpackFeatureRemovalSelfHostedUsersConfig, - private val jetpackPhaseFourOverlayFrequencyConfig: PhaseFourOverlayFrequencyConfig, private val analyticsTrackerWrapper: AnalyticsTrackerWrapper ) { - fun getCurrentPhase(): JetpackFeatureRemovalPhase? { - return if (buildConfigWrapper.isJetpackApp) null - else if (jetpackFeatureRemovalSelfHostedUsersConfig.isEnabled()) PhaseSelfHostedUsers - else if (jetpackFeatureRemovalNewUsersConfig.isEnabled()) PhaseNewUsers - else if (jetpackFeatureRemovalPhaseFourConfig.isEnabled()) PhaseFour - else null - } + fun shouldRemoveJetpackFeatures(): Boolean = !buildConfigWrapper.isJetpackApp - fun getDeepLinkPhase(): JetpackFeatureRemovalSiteCreationPhase? = - getCurrentPhase()?.let { PHASE_TWO } + fun shouldShowJetpackPoweredEditorFeatures(): Boolean = buildConfigWrapper.isJetpackApp + + fun shouldShowTemplateSelectionInPages(): Boolean = buildConfigWrapper.isJetpackApp - fun shouldRemoveJetpackFeatures(): Boolean = getCurrentPhase() != null + fun shouldShowPublishedPostStatsButton(): Boolean = buildConfigWrapper.isJetpackApp - fun shouldShowJetpackPoweredEditorFeatures(): Boolean = getCurrentPhase() == null + fun shouldShowNotifications(): Boolean = buildConfigWrapper.isJetpackApp - fun shouldShowTemplateSelectionInPages(): Boolean = getCurrentPhase() == null + fun shouldShowHelpAndSupportOnEditor(): Boolean = buildConfigWrapper.isJetpackApp - fun shouldShowPublishedPostStatsButton(): Boolean = getCurrentPhase() == null + fun getDeepLinkPhase(): JetpackFeatureRemovalSiteCreationPhase? = + if (buildConfigWrapper.isJetpackApp) null else PHASE_TWO @JvmOverloads fun trackPageAccessedEventIfNeeded(pageType: PageType, site: SiteModel? = null) { @@ -53,26 +56,8 @@ class JetpackFeatureRemovalPhaseHelper @Inject constructor( PageType.ME -> analyticsTrackerWrapper.track(AnalyticsTracker.Stat.ME_ACCESSED) } } - - fun shouldShowNotifications(): Boolean = !shouldRemoveJetpackFeatures() - - fun shouldShowHelpAndSupportOnEditor(): Boolean = getCurrentPhase() == null - - fun getPhaseFourOverlayFrequency(): Int { - return jetpackPhaseFourOverlayFrequencyConfig.getValue() - } -} - -sealed class JetpackFeatureRemovalPhase(val trackingName: String) { - object PhaseFour : JetpackFeatureRemovalPhase("four") - object PhaseNewUsers : JetpackFeatureRemovalPhase("new_users") - object PhaseSelfHostedUsers : JetpackFeatureRemovalPhase("self_hosted") } enum class JetpackFeatureRemovalSiteCreationPhase(val trackingName: String) { PHASE_TWO("two") } - -enum class JetpackDeepLinkPhase(val trackingName: String) { - ALL("all") -} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt index cb8e951d888f..c4ffa5d2bedd 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt @@ -20,26 +20,11 @@ sealed class JetpackFeatureOverlayComponentVisibility( class All : DeepLinkPhase() } - sealed class FeatureCollectionPhase : JetpackFeatureOverlayComponentVisibility() { - class PhaseFour( - override val migrationInfoText: Boolean = true, - override val closeButton: Boolean = false, - override val migrationText: Boolean = true - ) : FeatureCollectionPhase() - - class PhaseNewUsers( - override val migrationInfoText: Boolean = false, - override val closeButton: Boolean = false, - override val migrationText: Boolean = false, - override val newUsersContent: Boolean = true - ) : FeatureCollectionPhase() - - class PhaseSelfHostedUsers( - override val migrationInfoText: Boolean = false, - override val closeButton: Boolean = false, - override val migrationText: Boolean = true - ) : FeatureCollectionPhase() - } + class FeatureCollectionPhase( + override val migrationInfoText: Boolean = false, + override val closeButton: Boolean = false, + override val migrationText: Boolean = true + ) : JetpackFeatureOverlayComponentVisibility() } data class JetpackFeatureOverlayContent( diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapter.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapter.kt index b545032e2705..213128b03507 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapter.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapter.kt @@ -17,7 +17,6 @@ import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.ErrorCard import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.ErrorWithinCard import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.JetpackFeatureCard import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.JetpackInstallFullPluginCard -import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.JetpackSwitchMenu import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.PagesCard import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.PersonalizeCardModel import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.PostCard @@ -45,7 +44,6 @@ import org.wordpress.android.ui.mysite.cards.dashboard.todaysstats.TodaysStatsCa import org.wordpress.android.ui.mysite.cards.domainregistration.DomainRegistrationViewHolder import org.wordpress.android.ui.mysite.cards.dynamiccard.DynamicDashboardCardViewHolder import org.wordpress.android.ui.mysite.cards.jetpackfeature.JetpackFeatureCardViewHolder -import org.wordpress.android.ui.mysite.cards.jetpackfeature.SwitchToJetpackMenuCardViewHolder import org.wordpress.android.ui.mysite.cards.jpfullplugininstall.JetpackInstallFullPluginCardViewHolder import org.wordpress.android.ui.mysite.cards.nocards.NoCardsMessageViewHolder import org.wordpress.android.ui.mysite.cards.personalize.PersonalizeCardViewHolder @@ -117,7 +115,6 @@ class MySiteAdapter( MySiteCardAndItem.Type.SINGLE_ACTION_CARD.ordinal -> SingleActionCardViewHolder(parent) MySiteCardAndItem.Type.JETPACK_FEATURE_CARD.ordinal -> JetpackFeatureCardViewHolder(parent, uiHelpers) - MySiteCardAndItem.Type.JETPACK_SWITCH_CARD.ordinal -> SwitchToJetpackMenuCardViewHolder(parent) MySiteCardAndItem.Type.JETPACK_INSTALL_FULL_PLUGIN_CARD.ordinal -> JetpackInstallFullPluginCardViewHolder( parent ) @@ -152,7 +149,6 @@ class MySiteAdapter( is ActivityCardViewHolder -> holder.bind(getItem(position) as ActivityCard) is SingleActionCardViewHolder -> holder.bind(getItem(position) as SingleActionCard) is JetpackFeatureCardViewHolder -> holder.bind(getItem(position) as JetpackFeatureCard) - is SwitchToJetpackMenuCardViewHolder -> holder.bind(getItem(position) as JetpackSwitchMenu) is JetpackInstallFullPluginCardViewHolder -> holder.bind(getItem(position) as JetpackInstallFullPluginCard) is NoCardsMessageViewHolder -> holder.bind(getItem(position) as MySiteCardAndItem.Card.NoCardsMessage) is PersonalizeCardViewHolder -> holder.bind(getItem(position) as PersonalizeCardModel) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapterDiffCallback.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapterDiffCallback.kt index 03b7aa0adf0e..d602fb66f9e3 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapterDiffCallback.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapterDiffCallback.kt @@ -13,7 +13,6 @@ import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.ErrorCard import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.ErrorWithinCard import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.JetpackFeatureCard import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.JetpackInstallFullPluginCard -import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.JetpackSwitchMenu import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.PagesCard import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.PersonalizeCardModel import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.PostCard.PostCardWithPostItems @@ -57,7 +56,6 @@ object MySiteAdapterDiffCallback : DiffUtil.ItemCallback() { } oldItem is JetpackFeatureCard && updatedItem is JetpackFeatureCard -> true - oldItem is JetpackSwitchMenu && updatedItem is JetpackSwitchMenu -> true oldItem is JetpackInstallFullPluginCard && updatedItem is JetpackInstallFullPluginCard -> true oldItem is MySiteCardAndItem.Card.NoCardsMessage && updatedItem is MySiteCardAndItem.Card.NoCardsMessage -> true diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteCardAndItem.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteCardAndItem.kt index e4b5bb66f7dc..93ef3128cabf 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteCardAndItem.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteCardAndItem.kt @@ -48,7 +48,6 @@ sealed class MySiteCardAndItem(open val type: Type) { ACTIVITY_CARD, SINGLE_ACTION_CARD, JETPACK_FEATURE_CARD, - JETPACK_SWITCH_CARD, JETPACK_INSTALL_FULL_PLUGIN_CARD, NO_CARDS_MESSAGE, PERSONALIZE_CARD, @@ -98,13 +97,6 @@ sealed class MySiteCardAndItem(open val type: Type) { val learnMoreUrl: String?, ) : Card(JETPACK_FEATURE_CARD) - data class JetpackSwitchMenu( - val onClick: ListItemInteraction, - val onRemindMeLaterItemClick: ListItemInteraction, - val onHideMenuItemClick: ListItemInteraction, - val onMoreMenuClick: ListItemInteraction - ) : Card(Type.JETPACK_SWITCH_CARD) - data class JetpackInstallFullPluginCard( val siteName: String, val pluginNames: List, diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelper.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelper.kt index 2ac39de2caa3..c00e518ee163 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelper.kt @@ -2,10 +2,7 @@ package org.wordpress.android.ui.mysite.cards.jetpackfeature import org.wordpress.android.R import org.wordpress.android.analytics.AnalyticsTracker.Stat -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseNewUsers -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseSelfHostedUsers -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JETPACK_REMOVAL_TRACKING_NAME import org.wordpress.android.ui.prefs.AppPrefsWrapper import org.wordpress.android.ui.utils.UiString import org.wordpress.android.util.BuildConfigWrapper @@ -20,58 +17,23 @@ class JetpackFeatureCardHelper @Inject constructor( private val appPrefsWrapper: AppPrefsWrapper, private val buildConfigWrapper: BuildConfigWrapper, private val dateTimeUtilsWrapper: DateTimeUtilsWrapper, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper, private val phaseThreeBlogPostLinkConfig: PhaseThreeBlogPostLinkConfig ) { fun shouldShowJetpackFeatureCard(): Boolean { val isWordPressApp = !buildConfigWrapper.isJetpackApp val exceedsShowFrequency = exceedsShowFrequencyAndResetJetpackFeatureCardLastShownTimestampIfNeeded() - return isWordPressApp && shouldShowJetpackFeatureCardInCurrentPhase() && - !isJetpackCardHiddenByUser() && exceedsShowFrequency + return isWordPressApp && !isJetpackCardHiddenByUser() && exceedsShowFrequency } - private fun isJetpackCardHiddenByUser(): Boolean { - return jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.run { - appPrefsWrapper.getShouldHideJetpackFeatureCard( - this - ) - } ?: false - } - - fun shouldShowFeatureCardAtTop(): Boolean { - return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - is PhaseSelfHostedUsers -> true - else -> false - } - } - - private fun shouldShowJetpackFeatureCardInCurrentPhase(): Boolean { - return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - is PhaseNewUsers, PhaseSelfHostedUsers -> true - else -> false - } - } - - fun getCardContent(): UiString.UiStringRes? { - return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - is PhaseNewUsers, PhaseSelfHostedUsers -> - UiString.UiStringRes(R.string.jetpack_feature_card_content_phase_self_hosted_and_new_users) - else -> null - } - } + private fun isJetpackCardHiddenByUser(): Boolean = appPrefsWrapper.getShouldHideJetpackFeatureCard() - private fun isSwitchToJetpackMenuCardHiddenByUser(): Boolean { - return jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.run { - appPrefsWrapper.getShouldHideSwitchToJetpackMenuCard( - this - ) - } ?: false - } + fun getCardContent(): UiString.UiStringRes = + UiString.UiStringRes(R.string.jetpack_feature_card_content_phase_self_hosted_and_new_users) fun track(stat: Stat) { analyticsTrackerWrapper.track( stat, - mapOf(PHASE to jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.trackingName) + mapOf(PHASE to JETPACK_REMOVAL_TRACKING_NAME) ) } @@ -89,8 +51,7 @@ class JetpackFeatureCardHelper @Inject constructor( @Suppress("ReturnCount") private fun exceedsShowFrequencyAndResetJetpackFeatureCardLastShownTimestampIfNeeded(): Boolean { - val currentPhase = jetpackFeatureRemovalPhaseHelper.getCurrentPhase() ?: return false - val lastShownTimestamp = appPrefsWrapper.getJetpackFeatureCardLastShownTimestamp(currentPhase) + val lastShownTimestamp = appPrefsWrapper.getJetpackFeatureCardLastShownTimestamp() if (lastShownTimestamp == DEFAULT_LAST_SHOWN_TIMESTAMP) return true val lastShownDate = Date(lastShownTimestamp) @@ -101,60 +62,19 @@ class JetpackFeatureCardHelper @Inject constructor( val exceedsFrequency = daysPastOverlayShown >= FREQUENCY_IN_DAYS if (exceedsFrequency) { - appPrefsWrapper.setJetpackFeatureCardLastShownTimestamp(currentPhase, DEFAULT_LAST_SHOWN_TIMESTAMP) - } - return exceedsFrequency - } - - fun shouldShowSwitchToJetpackMenuCard(): Boolean { - return !buildConfigWrapper.isJetpackApp && - shouldShowSwitchToJetpackMenuCardInCurrentPhase() && - exceedsShowFrequencyAndResetSwitchToJetpackMenuLastShownTimestampIfNeeded() && - !isSwitchToJetpackMenuCardHiddenByUser() - } - - private fun shouldShowSwitchToJetpackMenuCardInCurrentPhase(): Boolean { - return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - is JetpackFeatureRemovalPhase.PhaseFour -> true - else -> false - } - } - - private fun exceedsShowFrequencyAndResetSwitchToJetpackMenuLastShownTimestampIfNeeded(): Boolean { - val lastShownTimestamp = appPrefsWrapper.getSwitchToJetpackMenuCardLastShownTimestamp() - if (lastShownTimestamp == DEFAULT_LAST_SHOWN_TIMESTAMP) return true - - val lastShownDate = Date(lastShownTimestamp) - val daysPastOverlayShown = dateTimeUtilsWrapper.daysBetween( - lastShownDate, - Date(System.currentTimeMillis()) - ) - - val exceedsFrequency = daysPastOverlayShown >= FREQUENCY_IN_DAYS - if (exceedsFrequency) { - appPrefsWrapper.setSwitchToJetpackMenuCardLastShownTimestamp(DEFAULT_LAST_SHOWN_TIMESTAMP) + appPrefsWrapper.setJetpackFeatureCardLastShownTimestamp(DEFAULT_LAST_SHOWN_TIMESTAMP) } return exceedsFrequency } fun hideJetpackFeatureCard() { track(Stat.REMOVE_FEATURE_CARD_HIDE_TAPPED) - jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.let { - appPrefsWrapper.setShouldHideJetpackFeatureCard(it, true) - } + appPrefsWrapper.setShouldHideJetpackFeatureCard(true) } fun setJetpackFeatureCardLastShownTimeStamp(currentTimeMillis: Long) { track(Stat.REMOVE_FEATURE_CARD_REMIND_LATER_TAPPED) - jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.let { - appPrefsWrapper.setJetpackFeatureCardLastShownTimestamp(it, currentTimeMillis) - } - } - fun hideSwitchToJetpackMenuCard() { - track(Stat.REMOVE_FEATURE_CARD_HIDE_TAPPED) - jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.let { - appPrefsWrapper.setShouldHideSwitchToJetpackMenuCard(it, true) - } + appPrefsWrapper.setJetpackFeatureCardLastShownTimestamp(currentTimeMillis) } companion object { const val PHASE = "phase" diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardShownTracker.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardShownTracker.kt index 857682b452ac..0124d0c75130 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardShownTracker.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardShownTracker.kt @@ -1,15 +1,14 @@ package org.wordpress.android.ui.mysite.cards.jetpackfeature import org.wordpress.android.analytics.AnalyticsTracker.Stat -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JETPACK_REMOVAL_TRACKING_NAME import org.wordpress.android.ui.mysite.MySiteCardAndItem import org.wordpress.android.ui.mysite.MySiteCardAndItem.Type.JETPACK_FEATURE_CARD import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import javax.inject.Inject class JetpackFeatureCardShownTracker @Inject constructor( - private val analyticsTrackerWrapper: AnalyticsTrackerWrapper, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + private val analyticsTrackerWrapper: AnalyticsTrackerWrapper ) { private val cardsShownTracked = mutableListOf() @@ -23,7 +22,7 @@ class JetpackFeatureCardShownTracker @Inject constructor( cardsShownTracked.add(itemType) analyticsTrackerWrapper.track( Stat.REMOVE_FEATURE_CARD_DISPLAYED, - mapOf("phase" to jetpackFeatureRemovalPhaseHelper.getCurrentPhase()?.trackingName) + mapOf("phase" to JETPACK_REMOVAL_TRACKING_NAME) ) } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/SwitchToJetpackMenuCardViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/SwitchToJetpackMenuCardViewHolder.kt deleted file mode 100644 index 58890826f23b..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/SwitchToJetpackMenuCardViewHolder.kt +++ /dev/null @@ -1,54 +0,0 @@ -package org.wordpress.android.ui.mysite.cards.jetpackfeature - -import android.view.View -import android.view.ViewGroup -import androidx.appcompat.widget.PopupMenu -import org.wordpress.android.R -import org.wordpress.android.databinding.SwitchToJetpackMenuBinding -import org.wordpress.android.ui.mysite.MySiteCardAndItem -import org.wordpress.android.ui.mysite.MySiteCardAndItemViewHolder -import org.wordpress.android.ui.utils.ListItemInteraction -import org.wordpress.android.util.extensions.viewBinding - -class SwitchToJetpackMenuCardViewHolder( - parent: ViewGroup, -) : MySiteCardAndItemViewHolder( - parent.viewBinding(SwitchToJetpackMenuBinding::inflate) -) { - fun bind(card: MySiteCardAndItem.Card.JetpackSwitchMenu) = with(binding) { - mySiteSwitchToJetpackCard.setOnClickListener { card.onClick.click() } - switchToAppMoreIcon.setOnClickListener { - showMoreMenu( - card.onRemindMeLaterItemClick, - card.onHideMenuItemClick, - card.onMoreMenuClick, - switchToAppMoreIcon, - ) - } - } - - private fun showMoreMenu( - onHideClick: ListItemInteraction, - onRemindMeLaterClick: ListItemInteraction, - onMoreMenuClick: ListItemInteraction, - anchor: View - ) { - onMoreMenuClick.click() - val popupMenu = PopupMenu(itemView.context, anchor) - popupMenu.setOnMenuItemClickListener { - when (it.itemId) { - R.id.jetpack_card_menu_item_remind_me_later -> { - onRemindMeLaterClick.click() - return@setOnMenuItemClickListener true - } - R.id.jetpack_card_menu_item_hide_this -> { - onHideClick.click() - return@setOnMenuItemClickListener true - } - else -> return@setOnMenuItemClickListener true - } - } - popupMenu.inflate(R.menu.switch_to_jetpack_card_menu) - popupMenu.show() - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/DashboardItemsViewModelSlice.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/DashboardItemsViewModelSlice.kt index af00437dbd44..631f8a4ed289 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/DashboardItemsViewModelSlice.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/DashboardItemsViewModelSlice.kt @@ -10,9 +10,7 @@ import kotlinx.coroutines.launch import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.modules.BG_THREAD import org.wordpress.android.ui.mysite.MySiteCardAndItem -import org.wordpress.android.ui.mysite.cards.jetpackfeature.JetpackFeatureCardHelper import org.wordpress.android.ui.mysite.cards.sotw2023.WpSotw2023NudgeCardViewModelSlice -import org.wordpress.android.ui.mysite.items.jetpackSwitchmenu.JetpackSwitchMenuViewModelSlice import org.wordpress.android.ui.mysite.items.jetpackfeaturecard.JetpackFeatureCardViewModelSlice import org.wordpress.android.ui.mysite.items.listitem.SiteItemsViewModelSlice import org.wordpress.android.util.merge @@ -22,10 +20,8 @@ import javax.inject.Named class DashboardItemsViewModelSlice @Inject constructor( @param:Named(BG_THREAD) private val bgDispatcher: CoroutineDispatcher, private val jetpackFeatureCardViewModelSlice: JetpackFeatureCardViewModelSlice, - private val jetpackSwitchMenuViewModelSlice: JetpackSwitchMenuViewModelSlice, private val siteItemsViewModelSlice: SiteItemsViewModelSlice, - private val sotw2023NudgeCardViewModelSlice: WpSotw2023NudgeCardViewModelSlice, - private val jetpackFeatureCardHelper: JetpackFeatureCardHelper + private val sotw2023NudgeCardViewModelSlice: WpSotw2023NudgeCardViewModelSlice ) { private lateinit var scope: CoroutineScope @@ -40,20 +36,17 @@ class DashboardItemsViewModelSlice @Inject constructor( val onNavigation = merge( jetpackFeatureCardViewModelSlice.onNavigation, - jetpackSwitchMenuViewModelSlice.onNavigation, siteItemsViewModelSlice.onNavigation, sotw2023NudgeCardViewModelSlice.onNavigation ) val uiModel: MutableLiveData> = merge( jetpackFeatureCardViewModelSlice.uiModel, - jetpackSwitchMenuViewModelSlice.uiModel, siteItemsViewModelSlice.uiModel, sotw2023NudgeCardViewModelSlice.uiModel - ) { jetpackFeatureCard, jetpackSwitchMenu, siteItems, sotw2023NudgeCard -> + ) { jetpackFeatureCard, siteItems, sotw2023NudgeCard -> mergeUiModels( jetpackFeatureCard, - jetpackSwitchMenu, siteItems, sotw2023NudgeCard ) @@ -68,7 +61,6 @@ class DashboardItemsViewModelSlice @Inject constructor( private fun mergeUiModels( jetpackFeatureCard: MySiteCardAndItem.Card.JetpackFeatureCard?, - jetpackSwitchMenu: MySiteCardAndItem.Card.JetpackSwitchMenu?, siteItems: List?, sotw2023NudgeCard: MySiteCardAndItem.Card.WpSotw2023NudgeCardModel? ): List { @@ -76,10 +68,7 @@ class DashboardItemsViewModelSlice @Inject constructor( dasbhboardSiteItems.apply { sotw2023NudgeCard?.let { add(it) } siteItems?.let { addAll(siteItems) } - jetpackSwitchMenu?.let { add(jetpackSwitchMenu) } - if (jetpackFeatureCardHelper.shouldShowFeatureCardAtTop()) - jetpackFeatureCard?.let { add(0, jetpackFeatureCard) } - else jetpackFeatureCard?.let { add(jetpackFeatureCard) } + jetpackFeatureCard?.let { add(0, it) } }.toList() if(dasbhboardSiteItems.isNotEmpty()) trackShown(dasbhboardSiteItems) return dasbhboardSiteItems @@ -90,7 +79,6 @@ class DashboardItemsViewModelSlice @Inject constructor( job = scope.launch(bgDispatcher) { _isRefreshing.postValue(true) jetpackFeatureCardViewModelSlice.buildJetpackFeatureCard() - jetpackSwitchMenuViewModelSlice.buildJetpackSwitchMenu() siteItemsViewModelSlice.buildSiteItems(site) sotw2023NudgeCardViewModelSlice.buildCard() _isRefreshing.postValue(false) @@ -99,7 +87,6 @@ class DashboardItemsViewModelSlice @Inject constructor( fun clearValue() { jetpackFeatureCardViewModelSlice.clearValue() - jetpackSwitchMenuViewModelSlice.clearValue() siteItemsViewModelSlice.clearValue() sotw2023NudgeCardViewModelSlice.clearValue() } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/jetpackSwitchmenu/JetpackSwitchMenuViewModelSlice.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/jetpackSwitchmenu/JetpackSwitchMenuViewModelSlice.kt deleted file mode 100644 index 3cf34e9013d0..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/jetpackSwitchmenu/JetpackSwitchMenuViewModelSlice.kt +++ /dev/null @@ -1,69 +0,0 @@ -package org.wordpress.android.ui.mysite.items.jetpackSwitchmenu - -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.distinctUntilChanged -import org.wordpress.android.analytics.AnalyticsTracker -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil -import org.wordpress.android.ui.mysite.MySiteCardAndItem -import org.wordpress.android.ui.mysite.SiteNavigationAction -import org.wordpress.android.ui.mysite.cards.jetpackfeature.JetpackFeatureCardHelper -import org.wordpress.android.ui.prefs.AppPrefsWrapper -import org.wordpress.android.ui.utils.ListItemInteraction -import org.wordpress.android.viewmodel.Event -import javax.inject.Inject - -class JetpackSwitchMenuViewModelSlice @Inject constructor( - private val jetpackFeatureCardHelper: JetpackFeatureCardHelper, - private val appPrefsWrapper: AppPrefsWrapper -) { - private val _onNavigation = MutableLiveData>() - val onNavigation = _onNavigation - - private val _uiModel = MutableLiveData() - val uiModel = _uiModel.distinctUntilChanged() - - suspend fun buildJetpackSwitchMenu() { - if (!jetpackFeatureCardHelper.shouldShowSwitchToJetpackMenuCard()) { - _uiModel.postValue(null) - return - } - _uiModel.postValue( - MySiteCardAndItem.Card.JetpackSwitchMenu( - onClick = ListItemInteraction.create(this::onJetpackFeatureCardClick), - onRemindMeLaterItemClick = ListItemInteraction.create( - this::onSwitchToJetpackMenuCardRemindMeLaterClick - ), - onHideMenuItemClick = ListItemInteraction.create(this::onSwitchToJetpackMenuCardHideMenuItemClick), - onMoreMenuClick = ListItemInteraction.create(this::onJetpackFeatureCardMoreMenuClick) - ) - ) - } - - private fun onJetpackFeatureCardClick() { - jetpackFeatureCardHelper.track(AnalyticsTracker.Stat.REMOVE_FEATURE_CARD_TAPPED) - _onNavigation.value = Event( - SiteNavigationAction.OpenJetpackFeatureOverlay( - source = JetpackFeatureRemovalOverlayUtil.JetpackFeatureCollectionOverlaySource.FEATURE_CARD - ) - ) - } - - private fun onSwitchToJetpackMenuCardRemindMeLaterClick() { - jetpackFeatureCardHelper.track(AnalyticsTracker.Stat.REMOVE_FEATURE_CARD_REMIND_LATER_TAPPED) - appPrefsWrapper.setSwitchToJetpackMenuCardLastShownTimestamp(System.currentTimeMillis()) - _uiModel.postValue(null) - } - - private fun onSwitchToJetpackMenuCardHideMenuItemClick() { - jetpackFeatureCardHelper.hideSwitchToJetpackMenuCard() - _uiModel.postValue(null) - } - - private fun onJetpackFeatureCardMoreMenuClick() { - jetpackFeatureCardHelper.track(AnalyticsTracker.Stat.REMOVE_FEATURE_CARD_MENU_ACCESSED) - } - - fun clearValue() { - _uiModel.postValue(null) - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/prefs/AppPrefs.java b/WordPress/src/main/java/org/wordpress/android/ui/prefs/AppPrefs.java index b0dab86f4d62..04de76991c36 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/prefs/AppPrefs.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/prefs/AppPrefs.java @@ -20,7 +20,7 @@ import org.wordpress.android.models.ReaderTag; import org.wordpress.android.models.ReaderTagType; import org.wordpress.android.ui.ActivityId; -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase; +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelperKt; import org.wordpress.android.ui.mysite.SelectedSiteRepository; import org.wordpress.android.ui.mysite.tabs.MySiteTabType; import org.wordpress.android.ui.posts.AuthorFilterSelection; @@ -1641,51 +1641,31 @@ public static void setIsOpenWebLinksWithJetpack(final boolean isOpenWebLinksWith setBoolean(DeletablePrefKey.OPEN_WEB_LINKS_WITH_JETPACK, isOpenWebLinksWithJetpack); } - public static Boolean getShouldHideJetpackFeatureCard(JetpackFeatureRemovalPhase phase) { - return prefs().getBoolean(getHideJetpackFeatureCardWithPhaseKey(phase), false); + public static Boolean getShouldHideJetpackFeatureCard() { + return prefs().getBoolean(getHideJetpackFeatureCardWithPhaseKey(), false); } - public static void setShouldHideJetpackFeatureCard(JetpackFeatureRemovalPhase phase, final boolean isHidden) { - prefs().edit().putBoolean(getHideJetpackFeatureCardWithPhaseKey(phase), isHidden).apply(); + public static void setShouldHideJetpackFeatureCard(final boolean isHidden) { + prefs().edit().putBoolean(getHideJetpackFeatureCardWithPhaseKey(), isHidden).apply(); } - public static Long getJetpackFeatureCardLastShownTimestamp(JetpackFeatureRemovalPhase jetpackFeatureRemovalPhase) { - return prefs().getLong(getJetpackFeatureCardLastShownTimeStampWithPhaseKey(jetpackFeatureRemovalPhase), 0L); + public static Long getJetpackFeatureCardLastShownTimestamp() { + return prefs().getLong(getJetpackFeatureCardLastShownTimeStampWithPhaseKey(), 0L); } - public static void setJetpackFeatureCardLastShownTimestamp(JetpackFeatureRemovalPhase jetpackFeatureRemovalPhase, - final Long lastShownTimestamp) { - prefs().edit().putLong(getJetpackFeatureCardLastShownTimeStampWithPhaseKey(jetpackFeatureRemovalPhase), - lastShownTimestamp).apply(); + public static void setJetpackFeatureCardLastShownTimestamp(final Long lastShownTimestamp) { + prefs().edit().putLong(getJetpackFeatureCardLastShownTimeStampWithPhaseKey(), lastShownTimestamp).apply(); } - @NonNull private static String getHideJetpackFeatureCardWithPhaseKey(JetpackFeatureRemovalPhase phase) { - return DeletablePrefKey.SHOULD_HIDE_JETPACK_FEATURE_CARD.name() + phase.getTrackingName(); + @NonNull private static String getHideJetpackFeatureCardWithPhaseKey() { + return DeletablePrefKey.SHOULD_HIDE_JETPACK_FEATURE_CARD.name() + + JetpackFeatureRemovalPhaseHelperKt.JETPACK_REMOVAL_TRACKING_NAME; } @NonNull - private static String getJetpackFeatureCardLastShownTimeStampWithPhaseKey(JetpackFeatureRemovalPhase phase) { - return DeletablePrefKey.JETPACK_FEATURE_CARD_LAST_SHOWN_TIMESTAMP.name() + phase.getTrackingName(); - } - - public static Long getSwitchToJetpackMenuCardLastShownTimestamp() { - return getLong(DeletablePrefKey.SWITCH_TO_JETPACK_MENU_CARD_SHOWN_TIMESTAMP, 0L); - } - - public static void setSwitchToJetpackMenuCardLastShownTimestamp(final Long lastShownTimestamp) { - setLong(DeletablePrefKey.SWITCH_TO_JETPACK_MENU_CARD_SHOWN_TIMESTAMP, lastShownTimestamp); - } - - public static Boolean getShouldHideSwitchToJetpackMenuCard(JetpackFeatureRemovalPhase phase) { - return prefs().getBoolean(getHideSwitchToJetpackMenuCardWithPhaseKey(phase), false); - } - - public static void setShouldHideSwitchToJetpackMenuCard(JetpackFeatureRemovalPhase phase, final boolean isHidden) { - prefs().edit().putBoolean(getHideSwitchToJetpackMenuCardWithPhaseKey(phase), isHidden).apply(); - } - - @NonNull private static String getHideSwitchToJetpackMenuCardWithPhaseKey(JetpackFeatureRemovalPhase phase) { - return DeletablePrefKey.SHOULD_HIDE_SWITCH_TO_JETPACK_MENU_CARD.name() + phase.getTrackingName(); + private static String getJetpackFeatureCardLastShownTimeStampWithPhaseKey() { + return DeletablePrefKey.JETPACK_FEATURE_CARD_LAST_SHOWN_TIMESTAMP.name() + + JetpackFeatureRemovalPhaseHelperKt.JETPACK_REMOVAL_TRACKING_NAME; } public static Boolean getShouldHideJetpackInstallFullPluginCard(int siteId) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/prefs/AppPrefsWrapper.kt b/WordPress/src/main/java/org/wordpress/android/ui/prefs/AppPrefsWrapper.kt index 8fc18b7bf05e..53464413e6bc 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/prefs/AppPrefsWrapper.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/prefs/AppPrefsWrapper.kt @@ -5,7 +5,6 @@ import com.google.gson.Gson import org.wordpress.android.fluxc.model.JetpackCapability import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.models.ReaderTag -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase import org.wordpress.android.ui.posts.AuthorFilterSelection import org.wordpress.android.ui.prefs.AppPrefs.PrefKey import org.wordpress.android.ui.prefs.AppPrefs.getBoolean @@ -357,35 +356,17 @@ class AppPrefsWrapper @Inject constructor(val buildConfigWrapper: BuildConfigWra fun setIsOpenWebLinksWithJetpack(isOpenWebLinksWithJetpack: Boolean) = AppPrefs.setIsOpenWebLinksWithJetpack(isOpenWebLinksWithJetpack) - fun getShouldHideJetpackFeatureCard(jetpackFeatureRemovalPhase: JetpackFeatureRemovalPhase): Boolean = - AppPrefs.getShouldHideJetpackFeatureCard(jetpackFeatureRemovalPhase) + fun getShouldHideJetpackFeatureCard(): Boolean = + AppPrefs.getShouldHideJetpackFeatureCard() - fun setShouldHideJetpackFeatureCard(jetpackFeatureRemovalPhase: JetpackFeatureRemovalPhase, isHidden: Boolean) = - AppPrefs.setShouldHideJetpackFeatureCard(jetpackFeatureRemovalPhase, isHidden) + fun setShouldHideJetpackFeatureCard(isHidden: Boolean) = + AppPrefs.setShouldHideJetpackFeatureCard(isHidden) - fun getJetpackFeatureCardLastShownTimestamp(jetpackFeatureRemovalPhase: JetpackFeatureRemovalPhase): Long = - AppPrefs.getJetpackFeatureCardLastShownTimestamp(jetpackFeatureRemovalPhase) + fun getJetpackFeatureCardLastShownTimestamp(): Long = + AppPrefs.getJetpackFeatureCardLastShownTimestamp() - fun setJetpackFeatureCardLastShownTimestamp( - jetpackFeatureRemovalPhase: JetpackFeatureRemovalPhase, - lastShownTimestamp: Long - ) { - AppPrefs.setJetpackFeatureCardLastShownTimestamp(jetpackFeatureRemovalPhase, lastShownTimestamp) - } - - fun getSwitchToJetpackMenuCardLastShownTimestamp(): Long = AppPrefs.getSwitchToJetpackMenuCardLastShownTimestamp() - - fun setSwitchToJetpackMenuCardLastShownTimestamp(lastShownTimestamp: Long) { - AppPrefs.setSwitchToJetpackMenuCardLastShownTimestamp(lastShownTimestamp) - } - - fun getShouldHideSwitchToJetpackMenuCard(jetpackFeatureRemovalPhase: JetpackFeatureRemovalPhase): Boolean = - AppPrefs.getShouldHideSwitchToJetpackMenuCard(jetpackFeatureRemovalPhase) - - fun setShouldHideSwitchToJetpackMenuCard( - jetpackFeatureRemovalPhase: JetpackFeatureRemovalPhase, - isHidden: Boolean - ) = AppPrefs.setShouldHideSwitchToJetpackMenuCard(jetpackFeatureRemovalPhase, isHidden) + fun setJetpackFeatureCardLastShownTimestamp(lastShownTimestamp: Long) = + AppPrefs.setJetpackFeatureCardLastShownTimestamp(lastShownTimestamp) fun getShouldHideJetpackInstallFullPluginCard(siteId: Int): Boolean = AppPrefs.getShouldHideJetpackInstallFullPluginCard(siteId) diff --git a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalNewUsersConfig.kt b/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalNewUsersConfig.kt deleted file mode 100644 index 6d439d2148f5..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalNewUsersConfig.kt +++ /dev/null @@ -1,22 +0,0 @@ -package org.wordpress.android.util.config - -import org.wordpress.android.BuildConfig -import org.wordpress.android.annotation.Feature -import org.wordpress.android.util.config.JetpackFeatureRemovalNewUsersConfig.Companion.JETPACK_FEATURE_REMOVAL_NEW_USERS_REMOTE_FIELD -import javax.inject.Inject - -/** - * Configuration for Jetpack feature removal phase new users - */ -@Feature(JETPACK_FEATURE_REMOVAL_NEW_USERS_REMOTE_FIELD, false) -class JetpackFeatureRemovalNewUsersConfig @Inject constructor( - appConfig: AppConfig -) : FeatureConfig( - appConfig, - BuildConfig.JETPACK_FEATURE_REMOVAL_NEW_USERS, - JETPACK_FEATURE_REMOVAL_NEW_USERS_REMOTE_FIELD -) { - companion object { - const val JETPACK_FEATURE_REMOVAL_NEW_USERS_REMOTE_FIELD = "jp_removal_new_users" - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseFourConfig.kt b/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseFourConfig.kt deleted file mode 100644 index bbd0adaf7df0..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalPhaseFourConfig.kt +++ /dev/null @@ -1,19 +0,0 @@ -package org.wordpress.android.util.config - -import org.wordpress.android.BuildConfig -import org.wordpress.android.annotation.Feature -import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseFourConfig.Companion.JETPACK__FEATURE_REMOVAL_PHASE_FOUR_REMOTE_FIELD -import javax.inject.Inject - -@Feature(JETPACK__FEATURE_REMOVAL_PHASE_FOUR_REMOTE_FIELD, false) -class JetpackFeatureRemovalPhaseFourConfig @Inject constructor( - appConfig: AppConfig -) : FeatureConfig( - appConfig, - BuildConfig.JETPACK_FEATURE_REMOVAL_PHASE_FOUR, - JETPACK__FEATURE_REMOVAL_PHASE_FOUR_REMOTE_FIELD -) { - companion object { - const val JETPACK__FEATURE_REMOVAL_PHASE_FOUR_REMOTE_FIELD = "jp_removal_four" - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalRemoteFields.kt b/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalRemoteFields.kt index db20bf816013..e252e55713f5 100644 --- a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalRemoteFields.kt +++ b/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalRemoteFields.kt @@ -16,28 +16,3 @@ class PhaseThreeBlogPostLinkConfig @Inject constructor(appConfig: AppConfig) : PHASE_THREE_BLOG_POST_LINK_REMOTE_FIELD ) -const val PHASE_FOUR_BLOG_POST_LINK_REMOTE_FIELD = "phase_four_blog_post" -const val PHASE_FOUR_BLOG_POST_LINK_DEFAULT_VALUE = "" - -@RemoteFieldDefaultGenerater( - remoteField = PHASE_FOUR_BLOG_POST_LINK_REMOTE_FIELD, - defaultValue = PHASE_FOUR_BLOG_POST_LINK_DEFAULT_VALUE -) -class PhaseFourBlogPostLinkConfig @Inject constructor(appConfig: AppConfig) : - RemoteConfigField( - appConfig, - PHASE_FOUR_BLOG_POST_LINK_REMOTE_FIELD - ) - -const val PHASE_FOUR_OVERLAY_FREQUENCY_IN_DAYS_REMOTE_FIELD = "phase_four_overlay_frequency_in_days" -const val PHASE_FOUR_OVERLAY_FREQUENCY_IN_DAYS_DEFAULT_VALUE = "-1" - -@RemoteFieldDefaultGenerater( - remoteField = PHASE_FOUR_OVERLAY_FREQUENCY_IN_DAYS_REMOTE_FIELD, - defaultValue = PHASE_FOUR_OVERLAY_FREQUENCY_IN_DAYS_DEFAULT_VALUE -) -class PhaseFourOverlayFrequencyConfig @Inject constructor(appConfig: AppConfig) : - RemoteConfigField( - appConfig, - PHASE_FOUR_OVERLAY_FREQUENCY_IN_DAYS_REMOTE_FIELD - ) diff --git a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalSelfHostedUsersConfig.kt b/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalSelfHostedUsersConfig.kt deleted file mode 100644 index 4322b1f5ed31..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackFeatureRemovalSelfHostedUsersConfig.kt +++ /dev/null @@ -1,22 +0,0 @@ -package org.wordpress.android.util.config - -import org.wordpress.android.BuildConfig -import org.wordpress.android.annotation.Feature -import org.wordpress.android.util.config.JetpackFeatureRemovalSelfHostedUsersConfig.Companion.JETPACK_FEATURE_REMOVAL_SELF_HOSTED_USERS_REMOTE_FIELD -import javax.inject.Inject - -/** - * Configuration for Jetpack feature removal phase new users - */ -@Feature(JETPACK_FEATURE_REMOVAL_SELF_HOSTED_USERS_REMOTE_FIELD, false) -class JetpackFeatureRemovalSelfHostedUsersConfig @Inject constructor( - appConfig: AppConfig -) : FeatureConfig( - appConfig, - BuildConfig.JETPACK_FEATURE_REMOVAL_SELF_HOSTED_USERS, - JETPACK_FEATURE_REMOVAL_SELF_HOSTED_USERS_REMOTE_FIELD -) { - companion object { - const val JETPACK_FEATURE_REMOVAL_SELF_HOSTED_USERS_REMOTE_FIELD = "jp_removal_self_hosted" - } -} diff --git a/WordPress/src/main/res/layout/switch_to_jetpack_menu.xml b/WordPress/src/main/res/layout/switch_to_jetpack_menu.xml deleted file mode 100644 index dcac6aa546f5..000000000000 --- a/WordPress/src/main/res/layout/switch_to_jetpack_menu.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - diff --git a/WordPress/src/main/res/menu/switch_to_jetpack_card_menu.xml b/WordPress/src/main/res/menu/switch_to_jetpack_card_menu.xml deleted file mode 100644 index 574a0407b423..000000000000 --- a/WordPress/src/main/res/menu/switch_to_jetpack_card_menu.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/WordPress/src/main/res/raw/jp_all_features_left.json b/WordPress/src/main/res/raw/jp_all_features_left.json deleted file mode 100644 index f628bf65715b..000000000000 --- a/WordPress/src/main/res/raw/jp_all_features_left.json +++ /dev/null @@ -1 +0,0 @@ -{"v":"5.9.6","fr":60,"ip":0,"op":148,"w":259,"h":71,"nm":"Logo animation-4-up-left lottie","ddd":0,"assets":[{"id":"comp_0","nm":"Logo animation-4-up-left","fr":60,"layers":[{"ddd":0,"ind":2,"ty":0,"nm":"Jetpack","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.185],"y":[1]},"o":{"x":[0.561],"y":[0]},"t":74,"s":[90.001]},{"t":121,"s":[465.242]}],"ix":3},"y":{"a":0,"k":81.001,"ix":4}},"a":{"a":0,"k":[77.5,77.5,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":42,"s":[0,0,100]},{"t":58,"s":[99.8,99.8,100]}],"ix":6,"l":2}},"ao":0,"w":155,"h":155,"ip":32,"op":1212,"st":12,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":1,"nm":"White Solid 2","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[89.9,81,0],"ix":2,"l":2},"a":{"a":0,"k":[70,70,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":20,"s":[0,0,100]},{"t":44,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[38.66,0],[0,-38.66],[-38.66,0],[0,38.66]],"o":[[-38.66,0],[0,38.66],[38.66,0],[0,-38.66]],"v":[[70,0],[0,70],[70,140],[140,70]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":140,"sh":140,"sc":"#ffffff","ip":0,"op":61,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"WP 2","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[89.93,81,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[107.2,107.2,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-17.94,0],[0,-17.908],[17.908,0],[0,17.94]],"o":[[17.908,0],[0,17.94],[-17.94,0],[0,-17.908]],"v":[[0,-32.5],[32.5,0],[0,32.5],[-32.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.788,-0.065],[0,0],[0,0],[0,0],[0,0],[-1.625,-0.098],[-2.827,0],[0,0],[1.625,-0.163],[1.755,-0.065],[0,0],[0,4.842],[1.137,1.982],[0,2.405],[-2.21,-0.357],[7.572,0],[5.167,-7.93],[-0.585,0],[0,0],[1.625,-0.195]],"o":[[0,0],[0,0],[0,0],[0,0],[-1.625,-0.065],[0,0],[3.055,0],[1.625,-0.098],[0,0],[0,0],[0,0],[0,-3.575],[-1.462,-2.405],[0,-3.867],[-5.2,-4.777],[-10.173,0],[0.682,0.033],[2.99,0],[1.625,-0.065],[0,0]],"v":[[-18.298,-12.285],[-7.215,17.452],[-1.333,-1.495],[-5.428,-12.577],[-8.417,-12.837],[-8.223,-16.803],[-0.65,-16.413],[7.085,-16.803],[7.28,-12.837],[4.615,-12.285],[14.462,14.917],[19.012,-1.333],[17.225,-9.327],[14.3,-16.152],[19.663,-21.288],[0,-28.893],[-24.277,-15.827],[-22.393,-15.795],[-14.69,-16.152],[-14.495,-12.545]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[2.275,4.193],[0.78,-2.08],[3.152,-8.417],[0,10.693]],"o":[[1.008,7.735],[-3.185,8.385],[8.678,-5.005],[0,-5.005]],"v":[[25.48,-13.812],[24.083,0],[14.592,25.285],[28.893,0]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,-4.225],[-9.685,-4.68],[4.615,12.643]],"o":[[0,11.473],[-4.648,-12.643],[-1.592,3.607]],"v":[[-28.893,0],[-12.675,26.292],[-26.553,-11.667]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-2.795,0.943],[0,0],[2.633,-7.735],[-2.568,0]],"o":[[0,0],[-2.6,7.67],[2.34,0.715],[3.087,0]],"v":[[8.807,27.43],[0.423,4.745],[-7.443,27.82],[0,28.893]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.61960786581,0.031372550875,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"WP","np":7,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":6,"ty":1,"nm":"Pale Green Solid 1","parent":2,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[17.137,76.999,0],"ix":2,"l":2},"a":{"a":0,"k":[150,81,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"s","pt":{"a":0,"k":{"i":[[38.936,0],[0,-38.936],[-38.936,0],[0,38.936]],"o":[[-38.936,0],[0,38.936],[38.936,0],[0,-38.936]],"v":[[206,11],[135.5,81.5],[206,152],[276.5,81.5]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":300,"sh":162,"sc":"#bdf0bc","ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"WP 3","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":89.93,"ix":3},"y":{"a":0,"k":81,"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[107.2,107.2,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-17.94,0],[0,-17.908],[17.908,0],[0,17.94]],"o":[[17.908,0],[0,17.94],[-17.94,0],[0,-17.908]],"v":[[0,-32.5],[32.5,0],[0,32.5],[-32.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.788,-0.065],[0,0],[0,0],[0,0],[0,0],[-1.625,-0.098],[-2.827,0],[0,0],[1.625,-0.163],[1.755,-0.065],[0,0],[0,4.842],[1.137,1.982],[0,2.405],[-2.21,-0.357],[7.572,0],[5.167,-7.93],[-0.585,0],[0,0],[1.625,-0.195]],"o":[[0,0],[0,0],[0,0],[0,0],[-1.625,-0.065],[0,0],[3.055,0],[1.625,-0.098],[0,0],[0,0],[0,0],[0,-3.575],[-1.462,-2.405],[0,-3.867],[-5.2,-4.777],[-10.173,0],[0.682,0.033],[2.99,0],[1.625,-0.065],[0,0]],"v":[[-18.298,-12.285],[-7.215,17.452],[-1.333,-1.495],[-5.428,-12.577],[-8.417,-12.837],[-8.223,-16.803],[-0.65,-16.413],[7.085,-16.803],[7.28,-12.837],[4.615,-12.285],[14.462,14.917],[19.012,-1.333],[17.225,-9.327],[14.3,-16.152],[19.663,-21.288],[0,-28.893],[-24.277,-15.827],[-22.393,-15.795],[-14.69,-16.152],[-14.495,-12.545]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[2.275,4.193],[0.78,-2.08],[3.152,-8.417],[0,10.693]],"o":[[1.008,7.735],[-3.185,8.385],[8.678,-5.005],[0,-5.005]],"v":[[25.48,-13.812],[24.083,0],[14.592,25.285],[28.893,0]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,-4.225],[-9.685,-4.68],[4.615,12.643]],"o":[[0,11.473],[-4.648,-12.643],[-1.592,3.607]],"v":[[-28.893,0],[-12.675,26.292],[-26.553,-11.667]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-2.795,0.943],[0,0],[2.633,-7.735],[-2.568,0]],"o":[[0,0],[-2.6,7.67],[2.34,0.715],[3.087,0]],"v":[[8.807,27.43],[0.423,4.745],[-7.443,27.82],[0,28.893]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.458823531866,0.768627464771,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"WP","np":7,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"WP","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":89.93,"ix":3},"y":{"a":0,"k":81,"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[107.2,107.2,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-17.94,0],[0,-17.908],[17.908,0],[0,17.94]],"o":[[17.908,0],[0,17.94],[-17.94,0],[0,-17.908]],"v":[[0,-32.5],[32.5,0],[0,32.5],[-32.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.788,-0.065],[0,0],[0,0],[0,0],[0,0],[-1.625,-0.098],[-2.827,0],[0,0],[1.625,-0.163],[1.755,-0.065],[0,0],[0,4.842],[1.137,1.982],[0,2.405],[-2.21,-0.357],[7.572,0],[5.167,-7.93],[-0.585,0],[0,0],[1.625,-0.195]],"o":[[0,0],[0,0],[0,0],[0,0],[-1.625,-0.065],[0,0],[3.055,0],[1.625,-0.098],[0,0],[0,0],[0,0],[0,-3.575],[-1.462,-2.405],[0,-3.867],[-5.2,-4.777],[-10.173,0],[0.682,0.033],[2.99,0],[1.625,-0.065],[0,0]],"v":[[-18.298,-12.285],[-7.215,17.452],[-1.333,-1.495],[-5.428,-12.577],[-8.417,-12.837],[-8.223,-16.803],[-0.65,-16.413],[7.085,-16.803],[7.28,-12.837],[4.615,-12.285],[14.462,14.917],[19.012,-1.333],[17.225,-9.327],[14.3,-16.152],[19.663,-21.288],[0,-28.893],[-24.277,-15.827],[-22.393,-15.795],[-14.69,-16.152],[-14.495,-12.545]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[2.275,4.193],[0.78,-2.08],[3.152,-8.417],[0,10.693]],"o":[[1.008,7.735],[-3.185,8.385],[8.678,-5.005],[0,-5.005]],"v":[[25.48,-13.812],[24.083,0],[14.592,25.285],[28.893,0]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,-4.225],[-9.685,-4.68],[4.615,12.643]],"o":[[0,11.473],[-4.648,-12.643],[-1.592,3.607]],"v":[[-28.893,0],[-12.675,26.292],[-26.553,-11.667]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-2.795,0.943],[0,0],[2.633,-7.735],[-2.568,0]],"o":[[0,0],[-2.6,7.67],[2.34,0.715],[3.087,0]],"v":[[8.807,27.43],[0.423,4.745],[-7.443,27.82],[0,28.893]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.458823531866,0.768627464771,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"WP","np":7,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":10,"ty":1,"nm":"Pale Green Solid 1","parent":11,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[124.44,65,0],"ix":2,"l":2},"a":{"a":0,"k":[150,81,0],"ix":1,"l":2},"s":{"a":0,"k":[93.284,93.284,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"s","pt":{"a":0,"k":{"i":[[38.936,0],[0,-38.936],[-38.936,0],[0,38.936]],"o":[[-38.936,0],[0,38.936],[38.936,0],[0,-38.936]],"v":[[206,11],[135.5,81.5],[206,152],[276.5,81.5]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":300,"sh":162,"sc":"#bdf0bc","ip":0,"op":1200,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":0,"nm":"Notifications","tt":1,"refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.186],"y":[0.995]},"o":{"x":[0.567],"y":[0]},"t":74,"s":[90.28]},{"t":121,"s":[340.28]}],"ix":3},"y":{"a":0,"k":81,"ix":4}},"a":{"a":0,"k":[65,65,0],"ix":1,"l":2},"s":{"a":0,"k":[107.2,107.2,100],"ix":6,"l":2}},"ao":0,"w":130,"h":130,"ip":58,"op":1200,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":1,"nm":"Pale Green Solid 1","parent":14,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[123.974,65,0],"ix":2,"l":2},"a":{"a":0,"k":[150,81,0],"ix":1,"l":2},"s":{"a":0,"k":[93.284,93.284,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"s","pt":{"a":0,"k":{"i":[[38.936,0],[0,-38.936],[-38.936,0],[0,38.936]],"o":[[-38.936,0],[0,38.936],[38.936,0],[0,-38.936]],"v":[[206,11],[135.5,81.5],[206,152],[276.5,81.5]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":300,"sh":162,"sc":"#bdf0bc","ip":0,"op":1200,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":0,"nm":"Reader","tt":1,"refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.095],"y":[1]},"o":{"x":[0.498],"y":[0]},"t":74,"s":[90.28]},{"t":113.201171875,"s":[215.28]}],"ix":3},"y":{"a":0,"k":81,"ix":4}},"a":{"a":0,"k":[65,65,0],"ix":1,"l":2},"s":{"a":0,"k":[107.2,107.2,100],"ix":6,"l":2}},"ao":0,"w":130,"h":130,"ip":58,"op":1200,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":1,"nm":"Pale Green Solid 1","parent":17,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[123.974,65,0],"ix":2,"l":2},"a":{"a":0,"k":[150,81,0],"ix":1,"l":2},"s":{"a":0,"k":[93.284,93.284,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"s","pt":{"a":0,"k":{"i":[[38.936,0],[0,-38.936],[-38.936,0],[0,38.936]],"o":[[-38.936,0],[0,38.936],[38.936,0],[0,-38.936]],"v":[[206,11],[135.5,81.5],[206,152],[276.5,81.5]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":300,"sh":162,"sc":"#bdf0bc","ip":0,"op":1200,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":0,"nm":"Stats","tt":1,"refId":"comp_4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":90.28,"ix":3},"y":{"a":0,"k":81,"ix":4}},"a":{"a":0,"k":[65,65,0],"ix":1,"l":2},"s":{"a":0,"k":[107.2,107.2,100],"ix":6,"l":2}},"ao":0,"w":130,"h":130,"ip":58,"op":1200,"st":0,"bm":0}]},{"id":"comp_1","nm":"jetpack logo","fr":60,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Circle 3","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[77.499,77.499,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,19.325],[-19.282,0],[0,-19.325],[19.325,0]],"o":[[0,-19.325],[19.325,0],[0,19.325],[-19.325,0]],"v":[[-35,0],[0,-35],[35,0],[0,35]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.61960786581,0.031372550875,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Top Triangle","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":77.499,"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.104],"y":[1]},"o":{"x":[0.452],"y":[0]},"t":42,"s":[219.499]},{"t":74,"s":[77.499]}],"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-19.239,5.797],[-1.804,5.797],[-1.804,-28.128]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1242,"st":42,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Circle 2","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[77.499,77.499,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,19.325],[-19.282,0],[0,-19.325],[19.325,0]],"o":[[0,-19.325],[19.325,0],[0,19.325],[-19.325,0]],"v":[[-35,0],[0,-35],[35,0],[0,35]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.61960786581,0.031372550875,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Bottom Triangle","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":77.499,"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.104],"y":[1]},"o":{"x":[0.452],"y":[0]},"t":42,"s":[-57.501]},{"t":74,"s":[77.499]}],"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[1.761,-5.883],[1.761,28.043],[19.153,-5.883]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1242,"st":42,"ct":1,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Circle","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[77.499,77.499,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,19.325],[-19.282,0],[0,-19.325],[19.325,0]],"o":[[0,-19.325],[19.325,0],[0,19.325],[-19.325,0]],"v":[[-35,0],[0,-35],[35,0],[0,35]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.61960786581,0.031372550875,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0}]},{"id":"comp_2","nm":"Notifications","fr":30,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Gridicon / gridicons-bell","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[65,65,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.523,0.523],[0,0],[0.001,-0.797],[-1.596,0]],"o":[[0,0],[-0.523,0.523],[0,1.596],[0.797,0]],"v":[[-4.38,8.373],[-8.464,4.288],[-9.311,6.331],[-6.422,9.22]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-0.56,0.56],[0,0],[3.38,3.38],[3.38,-3.38],[0,0],[1.089,0.156],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.156,-1.089],[0,0],[3.38,-3.38],[-3.38,-3.38],[0,0],[-0.56,0.56],[0,0],[0,0],[0,0]],"v":[[3.324,13],[4.343,11.98],[4.117,10.39],[4.853,7.389],[10.465,1.777],[10.465,-10.465],[-1.777,-10.465],[-7.388,-4.854],[-10.388,-4.118],[-11.98,-4.344],[-13,-3.325]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Gridicon / gridicons-bell","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Ellipse 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[65,65,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[65,65],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.458823531866,0.768627464771,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0}]},{"id":"comp_3","nm":"Reader","fr":30,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Gridicon / gridicons-reader","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[64.35,65,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,1.788],[0,0],[0,0],[0,0],[1.788,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,1.788],[0,0],[-1.788,0]],"v":[[-14.625,9.75],[-14.625,-13],[14.625,-13],[14.625,9.75],[11.375,13],[-11.375,13]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-11.375,4.875],[-3.25,4.875],[-3.25,3.25],[-11.375,3.25]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-11.375,1.625],[0,1.625],[0,0],[-11.375,0]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-11.375,-1.625],[0,-1.625],[0,-3.25],[-11.375,-3.25]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[3.25,4.875],[11.375,4.875],[11.375,-3.25],[3.25,-3.25]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-11.375,-6.5],[11.375,-6.5],[11.375,-9.75],[-11.375,-9.75]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Gridicon / gridicons-reader","np":7,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Ellipse 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[65,65,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[65,65],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.458823531866,0.768627464771,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0}]},{"id":"comp_4","nm":"Stats","fr":30,"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Frame 562","refId":"comp_5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[64,62,0],"ix":2,"l":2},"a":{"a":0,"k":[30,30,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":60,"h":60,"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Ellipse 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[65,65,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[65,65],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.458823531866,0.768627464771,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0}]},{"id":"comp_5","nm":"Frame 562","fr":30,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Vector","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,56.613,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-15,1.694],[15,1.694],[15,-1.694],[-15,-1.694]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Vector","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[47.142,28.305,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-2.143,7.621],[2.143,7.621],[2.143,-7.621],[-2.143,-7.621]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Vector","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,21.774,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-2.143,10.887],[2.143,10.887],[2.143,-10.887],[-2.143,-10.887]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Vector","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[12.857,32.662,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-2.143,5.444],[2.143,5.444],[2.143,-5.444],[-2.143,-5.444]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Frame 562","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30,30],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Frame 562","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Logo animation-4-up-left","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[128,35.5,0],"ix":2,"l":2},"a":{"a":0,"k":[275,81,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"ao":0,"w":550,"h":162,"ip":0,"op":148,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/WordPress/src/main/res/raw/jp_all_features_rtl.json b/WordPress/src/main/res/raw/jp_all_features_rtl.json deleted file mode 100644 index 3038caa04483..000000000000 --- a/WordPress/src/main/res/raw/jp_all_features_rtl.json +++ /dev/null @@ -1 +0,0 @@ -{"v":"5.9.6","fr":60,"ip":0,"op":148,"w":259,"h":71,"nm":"Logo animation-4-up-right lottie","ddd":0,"assets":[{"id":"comp_0","nm":"Logo animation-4-up-right","fr":60,"layers":[{"ddd":0,"ind":2,"ty":0,"nm":"Jetpack","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.109],"y":[1]},"o":{"x":[0.58],"y":[0]},"t":74,"s":[465.242]},{"t":121,"s":[90.001]}],"ix":3},"y":{"a":0,"k":81.001,"ix":4}},"a":{"a":0,"k":[77.5,77.5,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":42,"s":[0,0,100]},{"t":58,"s":[99.8,99.8,100]}],"ix":6,"l":2}},"ao":0,"w":155,"h":155,"ip":32,"op":1212,"st":12,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":1,"nm":"White Solid 2","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[464.9,81,0],"ix":2,"l":2},"a":{"a":0,"k":[70,70,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":20,"s":[0,0,100]},{"t":44,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[38.66,0],[0,-38.66],[-38.66,0],[0,38.66]],"o":[[-38.66,0],[0,38.66],[38.66,0],[0,-38.66]],"v":[[70,0],[0,70],[70,140],[140,70]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":140,"sh":140,"sc":"#ffffff","ip":0,"op":61,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"WP 2","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[464.93,81,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[107.2,107.2,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-17.94,0],[0,-17.908],[17.908,0],[0,17.94]],"o":[[17.908,0],[0,17.94],[-17.94,0],[0,-17.908]],"v":[[0,-32.5],[32.5,0],[0,32.5],[-32.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.788,-0.065],[0,0],[0,0],[0,0],[0,0],[-1.625,-0.098],[-2.827,0],[0,0],[1.625,-0.163],[1.755,-0.065],[0,0],[0,4.842],[1.137,1.982],[0,2.405],[-2.21,-0.357],[7.572,0],[5.167,-7.93],[-0.585,0],[0,0],[1.625,-0.195]],"o":[[0,0],[0,0],[0,0],[0,0],[-1.625,-0.065],[0,0],[3.055,0],[1.625,-0.098],[0,0],[0,0],[0,0],[0,-3.575],[-1.462,-2.405],[0,-3.867],[-5.2,-4.777],[-10.173,0],[0.682,0.033],[2.99,0],[1.625,-0.065],[0,0]],"v":[[-18.298,-12.285],[-7.215,17.452],[-1.333,-1.495],[-5.428,-12.577],[-8.417,-12.837],[-8.223,-16.803],[-0.65,-16.413],[7.085,-16.803],[7.28,-12.837],[4.615,-12.285],[14.462,14.917],[19.012,-1.333],[17.225,-9.327],[14.3,-16.152],[19.663,-21.288],[0,-28.893],[-24.277,-15.827],[-22.393,-15.795],[-14.69,-16.152],[-14.495,-12.545]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[2.275,4.193],[0.78,-2.08],[3.152,-8.417],[0,10.693]],"o":[[1.008,7.735],[-3.185,8.385],[8.678,-5.005],[0,-5.005]],"v":[[25.48,-13.812],[24.083,0],[14.592,25.285],[28.893,0]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,-4.225],[-9.685,-4.68],[4.615,12.643]],"o":[[0,11.473],[-4.648,-12.643],[-1.592,3.607]],"v":[[-28.893,0],[-12.675,26.292],[-26.553,-11.667]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-2.795,0.943],[0,0],[2.633,-7.735],[-2.568,0]],"o":[[0,0],[-2.6,7.67],[2.34,0.715],[3.087,0]],"v":[[8.807,27.43],[0.423,4.745],[-7.443,27.82],[0,28.893]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.61960786581,0.031372550875,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"WP","np":7,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":6,"ty":1,"nm":"Pale Green Solid 1","parent":2,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-93.083,76.999,0],"ix":2,"l":2},"a":{"a":0,"k":[150,81,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"s","pt":{"a":0,"k":{"i":[[38.936,0],[0,-38.936],[-38.936,0],[0,38.936]],"o":[[-38.936,0],[0,38.936],[38.936,0],[0,-38.936]],"v":[[206,11],[135.5,81.5],[206,152],[276.5,81.5]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":300,"sh":162,"sc":"#bdf0bc","ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"WP 3","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":464.93,"ix":3},"y":{"a":0,"k":81,"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[107.2,107.2,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-17.94,0],[0,-17.908],[17.908,0],[0,17.94]],"o":[[17.908,0],[0,17.94],[-17.94,0],[0,-17.908]],"v":[[0,-32.5],[32.5,0],[0,32.5],[-32.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.788,-0.065],[0,0],[0,0],[0,0],[0,0],[-1.625,-0.098],[-2.827,0],[0,0],[1.625,-0.163],[1.755,-0.065],[0,0],[0,4.842],[1.137,1.982],[0,2.405],[-2.21,-0.357],[7.572,0],[5.167,-7.93],[-0.585,0],[0,0],[1.625,-0.195]],"o":[[0,0],[0,0],[0,0],[0,0],[-1.625,-0.065],[0,0],[3.055,0],[1.625,-0.098],[0,0],[0,0],[0,0],[0,-3.575],[-1.462,-2.405],[0,-3.867],[-5.2,-4.777],[-10.173,0],[0.682,0.033],[2.99,0],[1.625,-0.065],[0,0]],"v":[[-18.298,-12.285],[-7.215,17.452],[-1.333,-1.495],[-5.428,-12.577],[-8.417,-12.837],[-8.223,-16.803],[-0.65,-16.413],[7.085,-16.803],[7.28,-12.837],[4.615,-12.285],[14.462,14.917],[19.012,-1.333],[17.225,-9.327],[14.3,-16.152],[19.663,-21.288],[0,-28.893],[-24.277,-15.827],[-22.393,-15.795],[-14.69,-16.152],[-14.495,-12.545]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[2.275,4.193],[0.78,-2.08],[3.152,-8.417],[0,10.693]],"o":[[1.008,7.735],[-3.185,8.385],[8.678,-5.005],[0,-5.005]],"v":[[25.48,-13.812],[24.083,0],[14.592,25.285],[28.893,0]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,-4.225],[-9.685,-4.68],[4.615,12.643]],"o":[[0,11.473],[-4.648,-12.643],[-1.592,3.607]],"v":[[-28.893,0],[-12.675,26.292],[-26.553,-11.667]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-2.795,0.943],[0,0],[2.633,-7.735],[-2.568,0]],"o":[[0,0],[-2.6,7.67],[2.34,0.715],[3.087,0]],"v":[[8.807,27.43],[0.423,4.745],[-7.443,27.82],[0,28.893]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.458823531866,0.768627464771,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"WP","np":7,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"WP","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":464.93,"ix":3},"y":{"a":0,"k":81,"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[107.2,107.2,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-17.94,0],[0,-17.908],[17.908,0],[0,17.94]],"o":[[17.908,0],[0,17.94],[-17.94,0],[0,-17.908]],"v":[[0,-32.5],[32.5,0],[0,32.5],[-32.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.788,-0.065],[0,0],[0,0],[0,0],[0,0],[-1.625,-0.098],[-2.827,0],[0,0],[1.625,-0.163],[1.755,-0.065],[0,0],[0,4.842],[1.137,1.982],[0,2.405],[-2.21,-0.357],[7.572,0],[5.167,-7.93],[-0.585,0],[0,0],[1.625,-0.195]],"o":[[0,0],[0,0],[0,0],[0,0],[-1.625,-0.065],[0,0],[3.055,0],[1.625,-0.098],[0,0],[0,0],[0,0],[0,-3.575],[-1.462,-2.405],[0,-3.867],[-5.2,-4.777],[-10.173,0],[0.682,0.033],[2.99,0],[1.625,-0.065],[0,0]],"v":[[-18.298,-12.285],[-7.215,17.452],[-1.333,-1.495],[-5.428,-12.577],[-8.417,-12.837],[-8.223,-16.803],[-0.65,-16.413],[7.085,-16.803],[7.28,-12.837],[4.615,-12.285],[14.462,14.917],[19.012,-1.333],[17.225,-9.327],[14.3,-16.152],[19.663,-21.288],[0,-28.893],[-24.277,-15.827],[-22.393,-15.795],[-14.69,-16.152],[-14.495,-12.545]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[2.275,4.193],[0.78,-2.08],[3.152,-8.417],[0,10.693]],"o":[[1.008,7.735],[-3.185,8.385],[8.678,-5.005],[0,-5.005]],"v":[[25.48,-13.812],[24.083,0],[14.592,25.285],[28.893,0]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,-4.225],[-9.685,-4.68],[4.615,12.643]],"o":[[0,11.473],[-4.648,-12.643],[-1.592,3.607]],"v":[[-28.893,0],[-12.675,26.292],[-26.553,-11.667]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-2.795,0.943],[0,0],[2.633,-7.735],[-2.568,0]],"o":[[0,0],[-2.6,7.67],[2.34,0.715],[3.087,0]],"v":[[8.807,27.43],[0.423,4.745],[-7.443,27.82],[0,28.893]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.458823531866,0.768627464771,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"WP","np":7,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":10,"ty":1,"nm":"Pale Green Solid 1","parent":11,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[6.903,65,0],"ix":2,"l":2},"a":{"a":0,"k":[150,81,0],"ix":1,"l":2},"s":{"a":0,"k":[-93.284,-93.284,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"s","pt":{"a":0,"k":{"i":[[38.936,0],[0,-38.936],[-38.936,0],[0,38.936]],"o":[[-38.936,0],[0,38.936],[38.936,0],[0,-38.936]],"v":[[206,11],[135.5,81.5],[206,152],[276.5,81.5]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":300,"sh":162,"sc":"#bdf0bc","ip":0,"op":1200,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":0,"nm":"Notifications","tt":1,"refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.186],"y":[1.005]},"o":{"x":[0.567],"y":[0]},"t":74,"s":[465.08]},{"t":121,"s":[214.28]}],"ix":3},"y":{"a":0,"k":81,"ix":4}},"a":{"a":0,"k":[65,65,0],"ix":1,"l":2},"s":{"a":0,"k":[107.2,107.2,100],"ix":6,"l":2}},"ao":0,"w":130,"h":130,"ip":58,"op":1200,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":1,"nm":"Pale Green Solid 1","parent":14,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[5.504,65,0],"ix":2,"l":2},"a":{"a":0,"k":[150,81,0],"ix":1,"l":2},"s":{"a":0,"k":[-93.284,-93.284,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"s","pt":{"a":0,"k":{"i":[[38.936,0],[0,-38.936],[-38.936,0],[0,38.936]],"o":[[-38.936,0],[0,38.936],[38.936,0],[0,-38.936]],"v":[[206,11],[135.5,81.5],[206,152],[276.5,81.5]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":300,"sh":162,"sc":"#bdf0bc","ip":0,"op":1200,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":0,"nm":"Reader","tt":1,"refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.095],"y":[1]},"o":{"x":[0.498],"y":[0]},"t":74,"s":[465.08]},{"t":113,"s":[339.28]}],"ix":3},"y":{"a":0,"k":81,"ix":4}},"a":{"a":0,"k":[65,65,0],"ix":1,"l":2},"s":{"a":0,"k":[107.2,107.2,100],"ix":6,"l":2}},"ao":0,"w":130,"h":130,"ip":58,"op":1200,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":1,"nm":"Pale Green Solid 1","parent":17,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[6.437,65,0],"ix":2,"l":2},"a":{"a":0,"k":[150,81,0],"ix":1,"l":2},"s":{"a":0,"k":[-93.284,-93.284,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"s","pt":{"a":0,"k":{"i":[[38.936,0],[0,-38.936],[-38.936,0],[0,38.936]],"o":[[-38.936,0],[0,38.936],[38.936,0],[0,-38.936]],"v":[[206,11],[135.5,81.5],[206,152],[276.5,81.5]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":300,"sh":162,"sc":"#bdf0bc","ip":0,"op":1200,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":0,"nm":"Stats","tt":1,"refId":"comp_4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":465.08,"ix":3},"y":{"a":0,"k":81,"ix":4}},"a":{"a":0,"k":[65,65,0],"ix":1,"l":2},"s":{"a":0,"k":[107.2,107.2,100],"ix":6,"l":2}},"ao":0,"w":130,"h":130,"ip":58,"op":1200,"st":0,"bm":0}]},{"id":"comp_1","nm":"jetpack logo","fr":60,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Circle 3","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[77.499,77.499,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,19.325],[-19.282,0],[0,-19.325],[19.325,0]],"o":[[0,-19.325],[19.325,0],[0,19.325],[-19.325,0]],"v":[[-35,0],[0,-35],[35,0],[0,35]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.61960786581,0.031372550875,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Top Triangle","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":77.499,"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.104],"y":[1]},"o":{"x":[0.452],"y":[0]},"t":42,"s":[219.499]},{"t":74,"s":[77.499]}],"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-19.239,5.797],[-1.804,5.797],[-1.804,-28.128]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1242,"st":42,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Circle 2","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[77.499,77.499,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,19.325],[-19.282,0],[0,-19.325],[19.325,0]],"o":[[0,-19.325],[19.325,0],[0,19.325],[-19.325,0]],"v":[[-35,0],[0,-35],[35,0],[0,35]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.61960786581,0.031372550875,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Bottom Triangle","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":77.499,"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.104],"y":[1]},"o":{"x":[0.452],"y":[0]},"t":42,"s":[-57.501]},{"t":74,"s":[77.499]}],"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[1.761,-5.883],[1.761,28.043],[19.153,-5.883]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1242,"st":42,"ct":1,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Circle","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[77.499,77.499,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,19.325],[-19.282,0],[0,-19.325],[19.325,0]],"o":[[0,-19.325],[19.325,0],[0,19.325],[-19.325,0]],"v":[[-35,0],[0,-35],[35,0],[0,35]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.61960786581,0.031372550875,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0}]},{"id":"comp_2","nm":"Notifications","fr":30,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Gridicon / gridicons-bell","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[65,65,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.523,0.523],[0,0],[0.001,-0.797],[-1.596,0]],"o":[[0,0],[-0.523,0.523],[0,1.596],[0.797,0]],"v":[[-4.38,8.373],[-8.464,4.288],[-9.311,6.331],[-6.422,9.22]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-0.56,0.56],[0,0],[3.38,3.38],[3.38,-3.38],[0,0],[1.089,0.156],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.156,-1.089],[0,0],[3.38,-3.38],[-3.38,-3.38],[0,0],[-0.56,0.56],[0,0],[0,0],[0,0]],"v":[[3.324,13],[4.343,11.98],[4.117,10.39],[4.853,7.389],[10.465,1.777],[10.465,-10.465],[-1.777,-10.465],[-7.388,-4.854],[-10.388,-4.118],[-11.98,-4.344],[-13,-3.325]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Gridicon / gridicons-bell","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Ellipse 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[65,65,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[65,65],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.458823531866,0.768627464771,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0}]},{"id":"comp_3","nm":"Reader","fr":30,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Gridicon / gridicons-reader","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[64.35,65,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,1.788],[0,0],[0,0],[0,0],[1.788,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,1.788],[0,0],[-1.788,0]],"v":[[-14.625,9.75],[-14.625,-13],[14.625,-13],[14.625,9.75],[11.375,13],[-11.375,13]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-11.375,4.875],[-3.25,4.875],[-3.25,3.25],[-11.375,3.25]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-11.375,1.625],[0,1.625],[0,0],[-11.375,0]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-11.375,-1.625],[0,-1.625],[0,-3.25],[-11.375,-3.25]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[3.25,4.875],[11.375,4.875],[11.375,-3.25],[3.25,-3.25]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-11.375,-6.5],[11.375,-6.5],[11.375,-9.75],[-11.375,-9.75]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Gridicon / gridicons-reader","np":7,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Ellipse 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[65,65,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[65,65],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.458823531866,0.768627464771,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0}]},{"id":"comp_4","nm":"Stats","fr":30,"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Frame 562","refId":"comp_5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[64,62,0],"ix":2,"l":2},"a":{"a":0,"k":[30,30,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":60,"h":60,"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Ellipse 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[65,65,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[65,65],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529412225,0.458823531866,0.768627464771,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0}]},{"id":"comp_5","nm":"Frame 562","fr":30,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Vector","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,56.613,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-15,1.694],[15,1.694],[15,-1.694],[-15,-1.694]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Vector","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[47.142,28.305,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-2.143,7.621],[2.143,7.621],[2.143,-7.621],[-2.143,-7.621]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Vector","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,21.774,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-2.143,10.887],[2.143,10.887],[2.143,-10.887],[-2.143,-10.887]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Vector","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[12.857,32.662,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-2.143,5.444],[2.143,5.444],[2.143,-5.444],[-2.143,-5.444]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Frame 562","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30,30],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Frame 562","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1200,"st":0,"ct":1,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Logo animation-4-up-right","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[128.1,35.5,0],"ix":2,"l":2},"a":{"a":0,"k":[275,81,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"ao":0,"w":550,"h":162,"ip":0,"op":148,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/WordPress/src/main/res/values-ar/strings.xml b/WordPress/src/main/res/values-ar/strings.xml index f51b3d6decb7..2fbabeba5c80 100644 --- a/WordPress/src/main/res/values-ar/strings.xml +++ b/WordPress/src/main/res/values-ar/strings.xml @@ -1034,8 +1034,6 @@ Language: ar اعثر على الموقع والمجتمعات التي تفضّلها وتابعها، ثم شارك محتواك. راقب الزيادة في حركة المرور لديك من خلال الرؤى المفيدة والإحصاءات الشاملة. الإحصاءات والرؤى - يتيح لك Jetpack القيام بالمزيد من خلال موقع ووردبريس الخاص بك. التبديل مجاني، ولا يستغرق سوى بضع دقائق. - تعزيز ووردبريس من خلال Jetpack يمكنك التحكم في مطالبات التدوين والتذكيرات في أي وقت ضمن موقعي > الإعدادات > التدوين سيتضمن التنبيه كلمة أو عبارة مختصرة كمصدر للإلهام زيارة <b>إعدادات الموقع</b> لإعادة التشغيل @@ -1047,10 +1045,6 @@ Language: ar إظهار المطالبات التدوين يرجى تثبيت متجر Google Play للحصول على تطبيق Jetpack - القيام بهذا لاحقًا - التبديل إلى Jetpack - تمت إزالة ميزات الإحصاءات والقارئ والتنبيهات وغيرها من الميزات التي يدعمها Jetpack من تطبيق ووردبريس. - لقد انتقلت ميزات Jetpack. عرض كل الردود ⁦%1$s⁩ أقل من الأيام الـ 7 السابقة ⁦%1$s⁩ أعلى من الأيام الـ 7 السابقة diff --git a/WordPress/src/main/res/values-cs/strings.xml b/WordPress/src/main/res/values-cs/strings.xml index afb138451d21..72d3b859bded 100644 --- a/WordPress/src/main/res/values-cs/strings.xml +++ b/WordPress/src/main/res/values-cs/strings.xml @@ -1058,8 +1058,6 @@ Language: cs_CZ Najděte a sledujte své oblíbené stránky a komunity a sdílejte svůj obsah. Sledujte, jak vaše návštěvnost roste, pomocí užitečných statistik a komplexních statistik. Statistiky a postřehy - Jetpack vám umožní udělat více s vaším webem WordPress. Přepínání je zdarma a trvá jen minutu. - Dejte WordPressu podporu s Jetpackem Předvolby pro návrhy a připomenutí psaní blogu můžete kdykoli nastavit v části Můj web > Nastavení > Blogování Oznámení bude obsahovat slovo nebo krátkou frázi pro inspiraci Navštivte <b>nastavení webu</b> a znovu jej zapněte @@ -1071,10 +1069,6 @@ Language: cs_CZ Zobrazit výzvy Blogování Chcete-li získat aplikaci Jetpack, nainstalujte si obchod Google Play - Odložit na později - Přejděte na Jetpack - Statistiky, čtečka, upozornění a další funkce poháněné Jetpack byly z aplikace WordPress odstraněny. - Funkce Jetpacku se přesunuly Zobrazit všechny odpovědi %1$s méně než za předchozích 7 dní %1$s vyšší než za předchozích 7 dní diff --git a/WordPress/src/main/res/values-de/strings.xml b/WordPress/src/main/res/values-de/strings.xml index b76cc6f3d278..52f718e6bf06 100644 --- a/WordPress/src/main/res/values-de/strings.xml +++ b/WordPress/src/main/res/values-de/strings.xml @@ -1058,8 +1058,6 @@ Language: de Suche deine Lieblingswebsites und -communities, folge ihnen und teile deine Inhalte. Beobachte dank hilfreicher Einblicke und umfassender Statistiken, wie dein Traffic wächst. Statistiken und Einblicke - Mit Jetpack kannst du mehr aus deiner WordPress-Website herausholen. Der Wechsel ist kostenlos und dauert nur eine Minute. - Gib WordPress einen Schub mit Jetpack Unter „Meine Website > Einstellungen > Bloggen“ kannst du jederzeit Einstellungen für Blog-Schreibanregungen und -Erinnerungen vornehmen Die Benachrichtigung beinhaltet ein Wort oder einen kurzen Satz zur Inspiration Wechsle zu den <b>Website-Einstellungen</b>, um sie wieder zu aktivieren @@ -1071,10 +1069,6 @@ Language: de Schreibanregungen anzeigen Bloggen Bitte installiere Google Play Store, um die Jetpack-App zu erhalten - Später erledigen - Zu Jetpack wechseln - Statistiken, der Reader, Benachrichtigungen und weitere von Jetpack unterstützte Funktionen wurden aus der WordPress-App entfernt. - Jetpack-Funktionen wurden verschoben. Alle Antworten anzeigen %1$s niedriger als in den vorherigen 7 Tagen %1$s höher als in den vorherigen 7 Tagen diff --git a/WordPress/src/main/res/values-en-rCA/strings.xml b/WordPress/src/main/res/values-en-rCA/strings.xml index 71c1517d96b1..87042613d351 100644 --- a/WordPress/src/main/res/values-en-rCA/strings.xml +++ b/WordPress/src/main/res/values-en-rCA/strings.xml @@ -682,11 +682,9 @@ Language: en_CA The Jetpack mobile app is designed to work in companion with the Jetpack plugin. Switch now to get access to stats, notifications, reader, and more. Stats & Insights Blogging Prompts hidden - Give WordPress a boost with Jetpack Visit <b>Site Settings</b> to turn back on Notification will include a word or short phrase for inspiration You can control Blogging Prompts and Reminders at any time in My Site > Settings > Blogging - Jetpack lets you do more with your WordPress site. Switching is free and only takes a minute. Blogging Show prompts Community forums @@ -694,10 +692,6 @@ Language: en_CA Blogging reminders Get help from our group of volunteers. Please install Google Play Store to get the Jetpack app - Stats, Reader, Notifications and other Jetpack powered features have been removed from the WordPress app. - Jetpack features have moved. - Do this later - Switch to Jetpack View all responses %1$s lower than the previous 7-days %1$s higher than the previous 7-days diff --git a/WordPress/src/main/res/values-en-rGB/strings.xml b/WordPress/src/main/res/values-en-rGB/strings.xml index b5800a32cfa3..a65847d64641 100644 --- a/WordPress/src/main/res/values-en-rGB/strings.xml +++ b/WordPress/src/main/res/values-en-rGB/strings.xml @@ -1058,8 +1058,6 @@ Language: en_GB Find and follow your favourite sites and communities, and share you content. Watch your traffic grow with helpful insights and comprehensive stats. Stats & Insights - Jetpack lets you do more with your WordPress site. Switching is free and only takes a minute. - Give WordPress a boost with Jetpack You can control Blogging Prompts and Reminders at any time in My Site > Settings > Blogging Notification will include a word or short phrase for inspiration Visit <b>Site Settings</b> to turn back on @@ -1071,10 +1069,6 @@ Language: en_GB Show prompts Blogging Please install Google Play Store to get the Jetpack app - Do this later - Switch to Jetpack - Stats, Reader, Notifications and other Jetpack powered features have been removed from the WordPress app. - Jetpack features have moved. View all responses %1$s lower than the previous 7 days %1$s higher than the previous 7 days diff --git a/WordPress/src/main/res/values-es-rCL/strings.xml b/WordPress/src/main/res/values-es-rCL/strings.xml index 37edcfc7853e..e0ea8c8410e9 100644 --- a/WordPress/src/main/res/values-es-rCL/strings.xml +++ b/WordPress/src/main/res/values-es-rCL/strings.xml @@ -579,9 +579,7 @@ Language: es_CL Cada notificación incluirá una palabra o una breve frase inspiradora Ve a <b>Ajustes del sitio</b> para reactivarlos. Se han ocultado los estímulos para bloguear. - Con Jetpack sacarás más partido de tu sitio de WordPress. El cambio es gratuito y solo te llevará un minuto. Estadísticas y datos clave - Dale un impulso a WordPress con Jetpack Desactivar estímulos Bloguear Mostrar estímulos @@ -589,10 +587,6 @@ Language: es_CL Recibe ayuda de nuestro grupo de voluntarios. Foros de la comunidad Por favor, instala la Google Play Store para obener al app Jetpack - Algunas características de Jetpack como Estadísticas, Lector o Notificaciones, entre otras, han sido eliminadas de la app de WordPress. - Las características de Jetpack se han trasladado. - Hacerlo más tarde - Cambiar a Jetpack Ver todas las respuestas %1$s es menor que la semana anterior %1$s es mayor que la semana anterior diff --git a/WordPress/src/main/res/values-es-rCO/strings.xml b/WordPress/src/main/res/values-es-rCO/strings.xml index 8da08f89904b..ddf2944dea62 100644 --- a/WordPress/src/main/res/values-es-rCO/strings.xml +++ b/WordPress/src/main/res/values-es-rCO/strings.xml @@ -1058,8 +1058,6 @@ Language: es_CO Comparte tu contenido y busca tus comunidades y sitios favoritos para seguirlos. Consulta el crecimiento del tráfico a tu sitio con información útil y estadísticas completas. Estadísticas y datos clave - Con Jetpack sacarás más partido de tu sitio de WordPress. El cambio es gratuito y solo te llevará un minuto. - Dale un impulso a WordPress con Jetpack Puedes gestionar los recordatorios y estímulos para bloguear en cualquier momento desde Mi sitio > Ajustes > Bloguear. Cada notificación incluirá una palabra o una breve frase inspiradora. Ve a <b>Ajustes del sitio</b> para reactivarlos. @@ -1071,10 +1069,6 @@ Language: es_CO Mostrar estímulos Bloguear Por favor, instala la Google Play Store para obener al app Jetpack - Hacerlo más tarde - Cambiar a Jetpack - Algunas características de Jetpack como Estadísticas, Lector o Notificaciones, entre otras, han sido eliminadas de la app de WordPress. - Las características de Jetpack se han trasladado. Ver todas las respuestas %1$s es menor que la semana anterior %1$s es mayor que la semana anterior diff --git a/WordPress/src/main/res/values-es/strings.xml b/WordPress/src/main/res/values-es/strings.xml index 3f7d6a985608..5e266fea642f 100644 --- a/WordPress/src/main/res/values-es/strings.xml +++ b/WordPress/src/main/res/values-es/strings.xml @@ -1058,8 +1058,6 @@ Language: es Comparte tu contenido y busca tus comunidades y sitios favoritos para seguirlos. Consulta el crecimiento del tráfico a tu sitio con información útil y estadísticas completas. Estadísticas y datos clave - Con Jetpack sacarás más partido de tu sitio de WordPress. El cambio es gratuito y solo te llevará un minuto. - Dale un impulso a WordPress con Jetpack Puedes gestionar los recordatorios y las sugerencias para bloguear en cualquier momento desde Mi sitio > Ajustes > Bloguear. Cada notificación incluirá una palabra o una breve frase inspiradora. Ve a <b>Ajustes del sitio</b> para reactivarlos. @@ -1071,10 +1069,6 @@ Language: es Mostrar sugerencias Bloguear Por favor, instala la Google Play Store para obener al app Jetpack - Hacerlo más tarde - Cambiar a Jetpack - Algunas características de Jetpack como Estadísticas, Lector o Notificaciones, entre otras, han sido eliminadas de la app de WordPress. - Las características de Jetpack se han trasladado. Ver todas las respuestas %1$s es menor que la semana anterior %1$s es mayor que la semana anterior diff --git a/WordPress/src/main/res/values-fr-rCA/strings.xml b/WordPress/src/main/res/values-fr-rCA/strings.xml index d188bae8f47f..c81d70e0ef68 100644 --- a/WordPress/src/main/res/values-fr-rCA/strings.xml +++ b/WordPress/src/main/res/values-fr-rCA/strings.xml @@ -1032,8 +1032,6 @@ Language: fr Trouvez et suivez vos sites et communautés préférés, et partagez votre contenu. Suivez l’évolution de votre trafic avec des tendances utiles et des statistiques complètes. Statistiques et tendances - Jetpack vous aide à en faire plus avec votre site WordPress. Passer d’une application à l’autre est gratuit et ne prend qu’une minute. - Booster WordPress avec Jetpack Vous pouvez contrôler les invites pour bloguer et les rappels à tout moment en accédant à Mon site > Réglages > Blogging La notification inclura un mot ou une phrase courte pour vous inspirer Consulter <b>les réglages du site</b> pour réactiver @@ -1045,10 +1043,6 @@ Language: fr Afficher les invites Bloguer Please install Google Play Store to get the Jetpack app - Plus tard - Passer à Jetpack - Les statistiques, le lecteur, les notifications et d’autres fonctionnalités reposant sur Jetpack ont été supprimées de l’application WordPress. - Les fonctionnalités Jetpack ont été déplacées. Consulter les réponses du formulaire inférieur de %1$s par rapport à la semaine précédente %1$s en hausse par rapport aux 7 jours précédents diff --git a/WordPress/src/main/res/values-fr/strings.xml b/WordPress/src/main/res/values-fr/strings.xml index d188bae8f47f..c81d70e0ef68 100644 --- a/WordPress/src/main/res/values-fr/strings.xml +++ b/WordPress/src/main/res/values-fr/strings.xml @@ -1032,8 +1032,6 @@ Language: fr Trouvez et suivez vos sites et communautés préférés, et partagez votre contenu. Suivez l’évolution de votre trafic avec des tendances utiles et des statistiques complètes. Statistiques et tendances - Jetpack vous aide à en faire plus avec votre site WordPress. Passer d’une application à l’autre est gratuit et ne prend qu’une minute. - Booster WordPress avec Jetpack Vous pouvez contrôler les invites pour bloguer et les rappels à tout moment en accédant à Mon site > Réglages > Blogging La notification inclura un mot ou une phrase courte pour vous inspirer Consulter <b>les réglages du site</b> pour réactiver @@ -1045,10 +1043,6 @@ Language: fr Afficher les invites Bloguer Please install Google Play Store to get the Jetpack app - Plus tard - Passer à Jetpack - Les statistiques, le lecteur, les notifications et d’autres fonctionnalités reposant sur Jetpack ont été supprimées de l’application WordPress. - Les fonctionnalités Jetpack ont été déplacées. Consulter les réponses du formulaire inférieur de %1$s par rapport à la semaine précédente %1$s en hausse par rapport aux 7 jours précédents diff --git a/WordPress/src/main/res/values-gl/strings.xml b/WordPress/src/main/res/values-gl/strings.xml index ba1515aa6713..0c664d415e86 100644 --- a/WordPress/src/main/res/values-gl/strings.xml +++ b/WordPress/src/main/res/values-gl/strings.xml @@ -714,22 +714,16 @@ Language: gl_ES A aplicación móbil Jetpack está deseñada para funcionar xunto co plugin de Jetpack. Fai o cambio agora e obtén acceso a estatísticas, notificacións e ao lector, entre outras funcións. Estatísticas e datos clave Ocultáronse os estímulos para bloguear. - Dálle un impulso a WordPress con Jetpack Vai a <b>Axustes do sitio</b> para reactivalos. Cada notificación incluirá unha palabra ou unha breve frase inspiradora. Podes xestionar os recordatorios e estímulos para bloguear en calquera momento desde O meu sitio > Axustes > Bloguear. - Con Jetpack sacarás máis partido do teu sitio de WordPress. O cambio é gratuíto e só che levará un minuto. Bloguear Amosar estímulos Desactivar estímulos Foros da comunidade Recordatorios de blogueo Recibe axuda do noso grupo de voluntarios. - Facelo máis tarde - Cambiar a Jetpack - As características de Jetpack trasladáronse. Por favor, instala a Google Play Store para obter a app de Jetpack - Algunhas características de Jetpack como Estatísticas, Lector ou Notificacións, entre outras, elimináronse da app de WordPress. Últimos sete días Sete días anteriores Ver todas as respostas diff --git a/WordPress/src/main/res/values-he/strings.xml b/WordPress/src/main/res/values-he/strings.xml index 46602c491ab7..9827afd7ced9 100644 --- a/WordPress/src/main/res/values-he/strings.xml +++ b/WordPress/src/main/res/values-he/strings.xml @@ -1045,8 +1045,6 @@ Language: he_IL למצוא את האתרים והקהילות המועדפים עליך, לעקוב אחריהם ולשתף את התוכן שלך. להגדיל את התעבורה לאתר בעזרת גישה לתובנות שימושיות ולנתונים סטטיסטיים מקיפים. נתונים סטטיסטיים ותובנות - השירות של Jetpack מאפשר לך להפיק את המרב מהאתר שלך ב-WordPress. ההחלפה היא חינמית ואורכת דקה בלבד. - לשפר את השירות של WordPress עם Jetpack אפשר לשלוט ב\'הצעות כתיבה בבלוג\' וב\'תזכורות\' בכל עת דרך \'האתר שלי\' > \'הגדרות\' > \'פרסום בבלוג\' ההודעה תכלול מילה או ביטוי קצר להשראה יש לעבור אל <b>הגדרות האתר</b> כדי להפעיל אותן בחזרה @@ -1058,10 +1056,6 @@ Language: he_IL להציג הצעות כתיבה פרסום בבלוג יש להתקין את Google Play Store כדי להוריד את האפליקציה של Jetpack - אפשר לחכות עם זה - לעבור ל-Jetpack - נתונים סטטיסטיים, Reader, הודעות ואפשרויות אחרות שמופעלות על ידי Jetpack הוסרו מאפליקציית WordPress. - האפשרויות של Jetpack הועברו. להציג את כל התשובות ⁦%1$s⁩ פחות לעומת שבעת הימים הקודמים ⁦%1$s⁩ יותר משבעת הימים הקודמים diff --git a/WordPress/src/main/res/values-id/strings.xml b/WordPress/src/main/res/values-id/strings.xml index 0188f9c564f5..5e388e02a80f 100644 --- a/WordPress/src/main/res/values-id/strings.xml +++ b/WordPress/src/main/res/values-id/strings.xml @@ -1047,8 +1047,6 @@ Language: id Temukan dan ikuti situs dan komunitas favorit Anda, serta bagikan konten Anda. Amati peningkatan lalu lintas Anda lewat statistik lengkap dan wawasan penuh makna. Statistik & Wawasan - Jetpack membuka jalan untuk lebih memberdayakan situs WordPress Anda. Beralihlah ke aplikasi—gratis dan prosesnya cepat! - Sempurnakan WordPress dengan Jetpack Anda dapat mengendalikan Prompt dan Pengingat Blogging kapan pun di Situs Saya > Pengaturan > Blogging Pemberitahuan akan mencakup kata atau frasa singkat sebagai inspirasi Buka <b>Pengaturan Situs</b> untuk menyalakan kembali @@ -1060,10 +1058,6 @@ Language: id Tampilkan prompt Penulisan Blog Silakan instal Google Play Store untuk mendapatkan aplikasi Jetpack - Lakukan ini nanti - Ganti ke Jetpack - Statistik, Reader, Pemberitahuan, dan beragam fitur lain berbasis Jetpack telah dihapus dari aplikasi WordPress. - Fitur-fitur Jetpack telah berpindah. Lihat semua tanggapan %1$s lebih rendah dari 7 hari sebelumnya %1$s lebih tinggi dari 7 hari sebelumnya diff --git a/WordPress/src/main/res/values-it/strings.xml b/WordPress/src/main/res/values-it/strings.xml index 7101241017a1..02305c5bb8d9 100644 --- a/WordPress/src/main/res/values-it/strings.xml +++ b/WordPress/src/main/res/values-it/strings.xml @@ -1058,8 +1058,6 @@ Language: it Trova e segui i tuoi siti e le community preferiti e condividi i tuoi contenuti. Osserva la crescita del tuo traffico con informazioni utili e statistiche complete. Statistiche e panoramica - Jetpack ti permette di fare di più con il tuo sito WordPress. Il passaggio è gratuito e richiede solo un minuto. - Dai una spinta a WordPress con Jetpack Puoi controllare le richieste di blog e i promemoria in qualsiasi momento in Il mio sito > Impostazioni > Blog La notifica includerà una parola o una breve frase da cui trarre ispirazione Visita le <b>Impostazioni del sito</b> per riattivare @@ -1071,10 +1069,6 @@ Language: it Mostra richieste Creazione di un blog Installa Google Play Store per ottenere l\'app Jetpack - Fallo più tardi - Passa a Jetpack - Statistiche, Reader, Notifiche e altre funzionalità basate su Jetpack sono state rimosse dall\'app WordPress. - Le funzionalità di Jetpack sono state trasferite. Visualizza tutte le risposte %1$s in meno rispetto ai 7 giorni precedenti %1$s in più rispetto ai 7 giorni precedenti diff --git a/WordPress/src/main/res/values-ja/strings.xml b/WordPress/src/main/res/values-ja/strings.xml index 70b73addaf3f..0e862cd34841 100644 --- a/WordPress/src/main/res/values-ja/strings.xml +++ b/WordPress/src/main/res/values-ja/strings.xml @@ -1038,8 +1038,6 @@ Language: ja_JP お気に入りのサイトやコミュニティを見つけてフォローし、コンテンツを共有できます。 便利な統計概要と包括的な統計情報で、トラフィックの成長を確認できます。 統計情報と統計概要 - Jetpack を使用すれば、WordPress でさらなる機能を利用できます。 切り替えは無料で、数分で終わります。 - Jetpack で WordPress をレベルアップ ブログのプロンプトやリマインダーは、「My Site」 > 「設定」 > 「ブログ」でいつでもコントロールできます 通知にはヒントになる言葉や短いフレーズが記載されます <b>「サイトの設定」</b>に移動して表示をオンに戻す @@ -1051,10 +1049,6 @@ Language: ja_JP プロンプトを表示 ブログ Jetpack アプリを入手するには Google Play ストアをインストールしてください - 後で実行する - Jetpack に切り替える - 統計、Reader、通知などの Jetpack 機能は、WordPress アプリから削除されました。 - Jetpack 機能が移動しました。 すべての回答を表示 前の7日間と比べて%1$s 減少 前の7日間と比べて%1$s 増加 diff --git a/WordPress/src/main/res/values-ko/strings.xml b/WordPress/src/main/res/values-ko/strings.xml index 3af2cf47e17c..4ea92b70ca06 100644 --- a/WordPress/src/main/res/values-ko/strings.xml +++ b/WordPress/src/main/res/values-ko/strings.xml @@ -1049,8 +1049,6 @@ Language: ko_KR 즐겨 찾는 사이트와 커뮤니티를 찾아서 팔로우하고, 자신의 콘텐츠를 공유하세요. 유용한 인사이트와 포괄적인 통계를 통해 트래픽 증가를 지켜보세요. 통계 및 인사이트 - 젯팩을 통해 워드프레스 사이트에서 더 많은 작업을 수행할 수 있습니다. 전환은 무료이며 1분밖에 걸리지 않습니다. - 젯팩으로 워드프레스 성능 향상 언제든지 내 사이트 > 설정 > 블로깅에서 블로깅 프롬프트와 알림을 관리할 수 있습니다. 영감을 주는 단어 또는 짧은 구문이 알림에 포함됩니다. <b>사이트 설정</b>으로 이동하여 다시 켜기 @@ -1062,10 +1060,6 @@ Language: ko_KR 프롬프트 표시 블로깅 젯팩 앱을 이용하려면 Google Play 스토어를 설치하세요. - 나중에 하겠습니다. - 젯팩으로 전환 - 통계, 리더, 알림 및 기타 젯팩에서 제공되는 기능이 워드프레스 앱에서 제거되었습니다. - 젯팩 기능이 제거되었습니다. 모든 응답 보기 이전 7일보다 %1$s 적음 이전 7일보다 %1$s 많음 diff --git a/WordPress/src/main/res/values-lv/strings.xml b/WordPress/src/main/res/values-lv/strings.xml index 3dfca539d231..01c26a1cd368 100644 --- a/WordPress/src/main/res/values-lv/strings.xml +++ b/WordPress/src/main/res/values-lv/strings.xml @@ -599,8 +599,6 @@ Language: lv Apmeklējiet <b>Vietnes iestatījumi</b>, lai tos ieslēgtu atkal Paziņojumā būs iekļauts vārds vai īsa frāze iedvesmai Emuāru rakstīšanas uzvednes un atgādinājumus varat kontrolēt katrā laikā sadaļā Mana vietne > Iestatījumi > Emuāri - Sniedziet atbalstu WordPress ar Jetpack - Jetpack ļauj paveikt vairāk savā WordPress vietnē. Pārslēgšanās ir bezmaksas un aizņem tikai minūti. Statistika un ieskati Emuāru rakstīšana Rādīt uzvednes @@ -608,11 +606,7 @@ Language: lv Kopienas forumi Saņemiet palīdzību no mūsu brīvprātīgo grupas. Izslēgt uzvednes - Jetpack funkcijas ir pārvietotas. - Statistika, lasītājs, paziņojumi un citas Jetpack darbināmas funkcijas ir noņemtas no WordPress lietotnes. - Pārslēdzieties uz Jetpack Lūdzu, instalējiet Google Play veikalu, lai iegūtu lietotni Jetpack - Dariet to vēlāk Pēdējās 7 dienas Iepriekšējās 7 dienas Jūsu skatījumu skaits pēdējo 7 dienu laikā ir par %1$s lielāks nekā iepriekšējās 7 dienās. diff --git a/WordPress/src/main/res/values-nl/strings.xml b/WordPress/src/main/res/values-nl/strings.xml index b19f535f4aae..09329b402710 100644 --- a/WordPress/src/main/res/values-nl/strings.xml +++ b/WordPress/src/main/res/values-nl/strings.xml @@ -1058,8 +1058,6 @@ Language: nl Vind en volg je favoriete sites en community’s, en deel je content. Laat het aantal bezoekers van je site groeien via waardevolle inzichten en uitgebreide statistieken. Statistieken en inzichten - Met Jetpack kun je meer doen met je WordPress site. Overstappen is gratis en duurt maar een minuut. - Geef WordPress een boost met Jetpack Je kunt blogmeldingen en -herinneringen te allen tijde beheren via Mijn site > Instellingen > Bloggen Meldingen bevatten een woord of korte zin ter inspiratie Ga naar <b>Site-instellingen</b> om weer in te schakelen @@ -1071,10 +1069,6 @@ Language: nl Meldingen weergeven Bloggen Installeer Google Play Store om de Jetpack-app te downloaden - Doe dit later - Overstappen naar Jetpack - Statistieken, Reader, meldingen en andere functies die door Jetpack aangedreven worden, zijn verwijderd uit de WordPress-app. - Jetpack functies zijn verplaatst. Alle reacties bekijken %1$s minder dan de vorige 7 dagen %1$s meer dan de vorige 7 dagen diff --git a/WordPress/src/main/res/values-pl/strings.xml b/WordPress/src/main/res/values-pl/strings.xml index 7e0f3492e534..2d7ac74dc475 100644 --- a/WordPress/src/main/res/values-pl/strings.xml +++ b/WordPress/src/main/res/values-pl/strings.xml @@ -1058,8 +1058,6 @@ Language: pl Znajdź i obserwuj swoje ulubione witryny i społeczności, a następnie udostępniaj swoje treści. Obserwuj, jak rośnie twój ruch dzięki pomocnym wskazówkom i szczegółowym statystykom. Statystyki i Wnioski - Jetpack pozwala ci robić więcej z twoją witryną WordPress. Przełączenie jest darmowe i zajmuje chwilę. - Daj WordPressowi kopa z Jetpackiem Możesz w dowolnym momencie kontrolować monity i przypomnienia dotyczące blogowania w sekcji Moja witryna > Ustawienia > Blogowanie Powiadomienie będzie zawierać słowo lub krótką frazę dla inspiracji Przejdź na <b>Ustawienia witryny</b>, żeby włączyć z powrotem @@ -1071,10 +1069,6 @@ Language: pl Pokaż monity Blogowanie Zainstaluj Google Play Store, żeby pobrać aplikację Jetpack - Zrób to później - Przejdź na Jetpack - Statystyki, Czytnik, Powiadomienia i inne funkcje zasilane przez Jetpack zostały usunięte z aplikacji WordPress. - Funkcje jetpacka zostały przeniesione. Zobacz wszystkie odpowiedzi %1$s niższa niż w ciągu poprzednich 7 dni %1$s wyższa niż w ciągu poprzednich 7 dni diff --git a/WordPress/src/main/res/values-pt-rBR/strings.xml b/WordPress/src/main/res/values-pt-rBR/strings.xml index b89218667680..8c9a17802c0b 100644 --- a/WordPress/src/main/res/values-pt-rBR/strings.xml +++ b/WordPress/src/main/res/values-pt-rBR/strings.xml @@ -752,8 +752,6 @@ Language: pt_BR Encontre e siga seus sites e comunidades favoritos, e compartilhe seu conteúdo. Acompanhe o crescimento de seu site com análises úteis e estatísticas fáceis de entender. Estatísticas e informações - O Jetpack permite que você faça ainda mais com seu site WordPress. A mudança é gratuita e leva apenas um minuto. - Melhore o WordPress com o Jetpack Você pode controlar as sugestões e os lembretes de publicação a qualquer momento em Meu site > Configurações > Blog A notificação incluirá uma palavra ou uma frase curta, para inspiração Vá às <b>configurações do site</b> para reativar as sugestões @@ -765,10 +763,6 @@ Language: pt_BR Mostrar sugestões Blog Instale o Google Play Store para obter o aplicativo Jetpack - Fazer isso depois - Mudar para o Jetpack - Estatísticas, Leitor, Notificações e outras funcionalidades com tecnologia Jetpack foram removidas do aplicativo WordPress. - Recursos do Jetpack foram movidos. Ver todas as respostas %1$s menor do que nos sete dias anteriores %1$s maior do que nos sete dias anteriores diff --git a/WordPress/src/main/res/values-ro/strings.xml b/WordPress/src/main/res/values-ro/strings.xml index 6099575fc3d0..7b242927462a 100644 --- a/WordPress/src/main/res/values-ro/strings.xml +++ b/WordPress/src/main/res/values-ro/strings.xml @@ -1060,8 +1060,6 @@ Language: ro Îndemnuri pentru publicare ascunse Accesează<b>Setări site</b> pentru a le reactiva Notificarea va include un cuvânt sau o frază scurtă pentru inspirație - Îmbunătățește WordPress cu Jetpack - Jetpack îți permite să realizezi mai multe cu site-ul tău WordPress. Este gratuit și instalarea durează numai un minut. Statistici și privire generală Poți controla în orice moment îndemnurile și reamintirile pentru publicare în Site-ul meu > Setări > Blogging Arată îndemnurile @@ -1070,10 +1068,6 @@ Language: ro Primești ajutor de la grupul nostru de voluntari. Blogging Reamintiri pentru publicare - Funcționalitățile Jetpack s-au mutat. - Statisticile, cititorul, notificările și alte funcționalități propulsate de Jetpack au fost înlăturate din aplicația WordPress. - Comută la Jetpack - Fă asta mai târziu Te rog instalează Google Play Store pentru a obține aplicația Jetpack Ultimele 7 zile 7 zile anterioare diff --git a/WordPress/src/main/res/values-ru/strings.xml b/WordPress/src/main/res/values-ru/strings.xml index 92aeb6b92973..1f920289d948 100644 --- a/WordPress/src/main/res/values-ru/strings.xml +++ b/WordPress/src/main/res/values-ru/strings.xml @@ -1058,8 +1058,6 @@ Language: ru Находите интересные сайты и сообщества и подписывайтесь на них, а также публикуйте своё содержимое. Увеличивайте посещаемость с помощью полезной статистики и аналитики. Статистика и обзор - Jetpack открывает дополнительные возможности для сайтов WordPress. Переход бесплатен и занимает всего минуту. - Расширьте возможности WordPress с помощью Jetpack Настроить подсказки по ведению блога и напоминания можно в любое время в разделе Мой сайт > Настройки > Ведение блога. Напоминание будет содержать слово или короткую вдохновляющую фразу Перейдите в <b>настройки сайта</b>, чтобы снова включить @@ -1071,10 +1069,6 @@ Language: ru Показать подсказки Ведение блога Пожалуйста, установите Google Play Store, чтобы получить приложение Jetpack - Позже - Перейти на Jetpack - Статистика, Чтиво, Уведомления и другие функции Jetpack удалены из приложения WordPress. - Возможности Jetpack переехали. Показать все ответы На %1$s меньше, чем в предыдущие 7 дней На %1$s больше, чем в предыдущие 7 дней diff --git a/WordPress/src/main/res/values-sq/strings.xml b/WordPress/src/main/res/values-sq/strings.xml index e565318a04e0..a8a5b4f77929 100644 --- a/WordPress/src/main/res/values-sq/strings.xml +++ b/WordPress/src/main/res/values-sq/strings.xml @@ -950,8 +950,6 @@ Language: sq_AL Gjeni dhe ndiqni sajtet dhe bashkësitë tuaja të parapëlqyera dhe ndani me të tjerë lëndën tuaj. Shiheni si rritet trafiku juaj, me prirje të dobishme dhe statistika të plota. Statistika & Tendenca - Jetpack-u ju lejon të bëni më tepër gjëra me sajtin tuaj WordPress. Kalimi është falas dhe do vetëm një minutë. - Jepini WordPress-it një përforcim me Jetpack-un Cytjet dhe Kujtuesit për Blogim mund t’i kontrolloni në çfarëdo kohe që nga Sajti Im > Rregullime > Blogim Njoftimi do të përfshijë një fjalë, ose togfjalësh të shkurtër, për frymëzim Që ta riaktivizoni, vizitoni <b>Rregullime Sajti</b> @@ -963,10 +961,6 @@ Language: sq_AL Shfaq cytje Blogim Që të merrni aplikacionin Jetpack, ju lutemi, instaloni Google Play Store - Bëjeni më vonë - Kalo te Jetpack - Statistikat, Lexuesi, Njoftimet dhe të tjera veçorit të fuqishme të Jetpack-ut janë hequr nga aplikacioni WordPress. - Veçori të Jetpack-ut janë lëvizur. Shihni krejt përgjigjet %1$s më poshtë se 7 ditët e mëparshme %1$s më sipër se 7 ditët e mëparshme diff --git a/WordPress/src/main/res/values-sr/strings.xml b/WordPress/src/main/res/values-sr/strings.xml index a3d606a81f8d..b0a7b0533965 100644 --- a/WordPress/src/main/res/values-sr/strings.xml +++ b/WordPress/src/main/res/values-sr/strings.xml @@ -56,7 +56,6 @@ Language: sr_RS Искључи обавештења Форуми заједнице Прикажи обавештења - Уради ово касније Види све одговоре Последњих 7 дана Претходних 7 дана diff --git a/WordPress/src/main/res/values-sv/strings.xml b/WordPress/src/main/res/values-sv/strings.xml index d451d55f0530..93e25edfccdb 100644 --- a/WordPress/src/main/res/values-sv/strings.xml +++ b/WordPress/src/main/res/values-sv/strings.xml @@ -1058,8 +1058,6 @@ Language: sv_SE Hitta och följ dina favoritwebbplatser och -communities samt dela ditt innehåll. Se din trafik öka med användbara insikter och omfattande statistik. Statistik och insikter - Med Jetpack kan du göra mer med din WordPress-webbplats. Att byta är gratis och tar bara en minut. - Förbättra WordPress med Jetpack Du kan kontrollera bloggningsförslag och påminnelser när som helst i Min webbplats > Inställningar > Bloggande Aviseringen kommer att innehålla ett ord eller en kort fras för inspiration Gå till <b>Webbplatsinställningar</b> för att aktivera igen @@ -1071,10 +1069,6 @@ Language: sv_SE Visa förslag Bloggande Installera Google Play Store för att hämta Jetpack-appen - Gör detta senare - Byt till Jetpack - Statistik, läsare, aviseringar och andra Jetpack-drivna funktioner har tagits bort från WordPress-appen. - Jetpack-funktioner har flyttat. Visa alla svar %1$s lägre än under de föregående 7 dagarna %1$s högre än under de föregående 7 dagarna diff --git a/WordPress/src/main/res/values-tr/strings.xml b/WordPress/src/main/res/values-tr/strings.xml index e2f82a91fcaf..357b222ee9e3 100644 --- a/WordPress/src/main/res/values-tr/strings.xml +++ b/WordPress/src/main/res/values-tr/strings.xml @@ -1058,8 +1058,6 @@ Language: tr Beğendiğiniz siteleri ve toplulukları bulup takip edin ve içeriğinizi paylaşın. Yararlı bilgiler ve kapsamlı istatistiklerle trafiğinizin büyümesini izleyin. İstatistikler ve yönelimler - Jetpack, WordPress sitenizle daha fazlasını yapmanızı sağlar. Geçiş ücretsizdir ve yalnızca bir dakika sürer. - Jetpack ile WordPress\'e destek verin Blog istemlerini ve hatırlatıcılarını istediğiniz zaman Sitem > Ayarlar > Blog yazma bölümünden ayarlayabilirsiniz Bildirimde, ilham almak için bir sözcük veya kısa bir ifade bulunur Yeniden açmak için <b>Site ayarları</b> bölümüne gidin @@ -1071,10 +1069,6 @@ Language: tr İstemleri görüntüle Blog yazma Jetpack uygulamasını almak için Google Play mağazasını kurun - Bunu daha sonra yap - Jetpack kullanmaya geç - İstatistikler, Okuyucu, Bildirimler ve Jetpack destekli diğer özellikler, yakında WordPress uygulamasından kaldırıldı. - Jetpack özellikleri taşındı. Tüm yanıtları görüntüle Son 7 güne göre %1$s daha düşük Son 7 güne göre %1$s daha yüksek diff --git a/WordPress/src/main/res/values-zh-rCN/strings.xml b/WordPress/src/main/res/values-zh-rCN/strings.xml index 5dd5739648f5..c81310647acf 100644 --- a/WordPress/src/main/res/values-zh-rCN/strings.xml +++ b/WordPress/src/main/res/values-zh-rCN/strings.xml @@ -1053,8 +1053,6 @@ Language: zh_CN 查找并关注您喜欢的站点和社区,并分享您的内容。 借助有用的数据分析和全面的统计信息,观察您的流量增长情况。 统计信息与数据分析 - 有了 Jetpack,您可以通过自己的 WordPress 站点做更多事情。 切换免费,只需一会儿。 - 借助Jetpack,进一步提升 WordPress 体验 您随时可以访问“我的站点”>“设置”>“博客”,控制博客提示和提醒。 通知会包括可提供灵感的单词或短语 访问<b>站点设置</b>以重新打开 @@ -1066,10 +1064,6 @@ Language: zh_CN 显示提示 撰写博客 请安装 Google Play 商店获取 Jetpack 应用程序 - 以后再说 - 切换至 Jetpack - 统计信息、阅读器、通知和其他由 Jetpack 提供支持的功能已从 WordPress 应用程序上删除。 - Jetpack 功能已移动。 查看所有回复 比上一个 7 天低 %1$s 比上一个 7 天高 %1$s diff --git a/WordPress/src/main/res/values-zh-rHK/strings.xml b/WordPress/src/main/res/values-zh-rHK/strings.xml index 8972b75cbc98..b0137ae307cc 100644 --- a/WordPress/src/main/res/values-zh-rHK/strings.xml +++ b/WordPress/src/main/res/values-zh-rHK/strings.xml @@ -1048,8 +1048,6 @@ Language: zh_TW 尋找並追蹤你喜愛的網站和社群,並分享你的內容。 取得實用洞察報告和全面的統計資料,帶你見證流量成長。 統計資料和洞察報告 - Jetpack 讓你更充分發揮 WordPress 網站潛能。 切換完全免費,只要 1 分鐘就能完成。 - 透過 Jetpack 提升 WordPress 成效 你可以隨時前往「我的網站」>「設定」>「撰寫網誌」控制網誌提示和提醒 通知會包含可啟發靈感的字詞或短語 前往「<b>網站設定</b>」以重新啟用 @@ -1061,10 +1059,6 @@ Language: zh_TW 顯示提示 撰寫網誌 請安裝 Google Play 商店以取得 Jetpack 應用程式 - 稍後進行 - 切換至 Jetpack - WordPress 應用程式已移除「統計資料」、「閱讀器」、「通知」和其他 Jetpack 提供的功能。 - Jetpack 功能已經搬遷。 檢視所有回應 較先前 7 天低 %1$s 較先前 7 天高 %1$s diff --git a/WordPress/src/main/res/values-zh-rTW/strings.xml b/WordPress/src/main/res/values-zh-rTW/strings.xml index 8972b75cbc98..b0137ae307cc 100644 --- a/WordPress/src/main/res/values-zh-rTW/strings.xml +++ b/WordPress/src/main/res/values-zh-rTW/strings.xml @@ -1048,8 +1048,6 @@ Language: zh_TW 尋找並追蹤你喜愛的網站和社群,並分享你的內容。 取得實用洞察報告和全面的統計資料,帶你見證流量成長。 統計資料和洞察報告 - Jetpack 讓你更充分發揮 WordPress 網站潛能。 切換完全免費,只要 1 分鐘就能完成。 - 透過 Jetpack 提升 WordPress 成效 你可以隨時前往「我的網站」>「設定」>「撰寫網誌」控制網誌提示和提醒 通知會包含可啟發靈感的字詞或短語 前往「<b>網站設定</b>」以重新啟用 @@ -1061,10 +1059,6 @@ Language: zh_TW 顯示提示 撰寫網誌 請安裝 Google Play 商店以取得 Jetpack 應用程式 - 稍後進行 - 切換至 Jetpack - WordPress 應用程式已移除「統計資料」、「閱讀器」、「通知」和其他 Jetpack 提供的功能。 - Jetpack 功能已經搬遷。 檢視所有回應 較先前 7 天低 %1$s 較先前 7 天高 %1$s diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index de39bf2a6987..a52e6075072c 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -4244,16 +4244,10 @@ translators: %s: Select control option value e.g: "Auto, 25%". --> Unable to disable open links in Jetpack - Jetpack features have moved. - Stats, Reader, Notifications and other Jetpack powered features have been removed from the WordPress app. Switching is free and only takes a minute. Learn more at jetpack.com Switch to the Jetpack app @string/wp_jetpack_continue_without_jetpack - Switch to Jetpack - Do this later - Give WordPress a boost with Jetpack - Jetpack lets you do more with your WordPress site. Switching is free and only takes a minute. Stats & Insights Watch your traffic grow with helpful insights and comprehensive stats. @string/reader diff --git a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtilTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtilTest.kt index a63bf2f96911..0bacd6b1e396 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtilTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtilTest.kt @@ -6,16 +6,11 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.junit.MockitoJUnitRunner +import org.mockito.kotlin.never +import org.mockito.kotlin.verify import org.mockito.kotlin.whenever -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseNewUsers -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseSelfHostedUsers -import org.wordpress.android.util.DateTimeUtilsWrapper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureCollectionOverlaySource import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper -import java.util.Date - -private const val OVERLAY_SHOWN_TIMESTAMP = 1_700_000_000_000L -private const val SHOW_ONCE_ONLY = -1 @RunWith(MockitoJUnitRunner::class) class JetpackFeatureRemovalOverlayUtilTest { @@ -25,9 +20,6 @@ class JetpackFeatureRemovalOverlayUtilTest { @Mock private lateinit var shownTracker: JetpackFeatureOverlayShownTracker - @Mock - private lateinit var dateTimeUtilsWrapper: DateTimeUtilsWrapper - @Mock private lateinit var analyticsTrackerWrapper: AnalyticsTrackerWrapper @@ -35,96 +27,50 @@ class JetpackFeatureRemovalOverlayUtilTest { @Before fun setUp() { - overlayUtil = JetpackFeatureRemovalOverlayUtil( - phaseHelper, - shownTracker, - dateTimeUtilsWrapper, - analyticsTrackerWrapper - ) - } - - @Test - fun `given no removal phase, when checking the feature collection overlay, then it is not shown`() { - whenever(phaseHelper.getCurrentPhase()).thenReturn(null) - - assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isFalse - } - - @Test - fun `given self hosted phase and overlay never shown, then the overlay is shown`() { - whenever(phaseHelper.getCurrentPhase()).thenReturn(PhaseSelfHostedUsers) - whenever(shownTracker.getFeatureCollectionOverlayShown(PhaseSelfHostedUsers)).thenReturn(false) - - assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isTrue + overlayUtil = JetpackFeatureRemovalOverlayUtil(phaseHelper, shownTracker, analyticsTrackerWrapper) } @Test - fun `given self hosted phase and overlay already shown, then the overlay is not shown again`() { - whenever(phaseHelper.getCurrentPhase()).thenReturn(PhaseSelfHostedUsers) - whenever(shownTracker.getFeatureCollectionOverlayShown(PhaseSelfHostedUsers)).thenReturn(true) + fun `given the Jetpack app, when checking the feature collection overlay, then it is not shown`() { + whenever(phaseHelper.shouldRemoveJetpackFeatures()).thenReturn(false) assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isFalse } @Test - fun `given new users phase and overlay never shown, then the overlay is shown`() { - whenever(phaseHelper.getCurrentPhase()).thenReturn(PhaseNewUsers) - whenever(shownTracker.getFeatureCollectionOverlayShown(PhaseNewUsers)).thenReturn(false) + fun `given the WordPress app and the overlay was never shown, then it is shown`() { + whenever(phaseHelper.shouldRemoveJetpackFeatures()).thenReturn(true) + whenever(shownTracker.getFeatureCollectionOverlayShown()).thenReturn(false) assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isTrue } - // region phase four frequency @Test - fun `given phase four and overlay never shown, then the overlay is shown regardless of frequency`() { - whenever(phaseHelper.getCurrentPhase()).thenReturn(PhaseFour) - whenever(shownTracker.getFeatureCollectionOverlayShown(PhaseFour)).thenReturn(false) - - assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isTrue - } - - @Test - fun `given phase four already shown and frequency is the show-once sentinel, then it is never shown again`() { - whenever(phaseHelper.getCurrentPhase()).thenReturn(PhaseFour) - whenever(shownTracker.getFeatureCollectionOverlayShown(PhaseFour)).thenReturn(true) - whenever(phaseHelper.getPhaseFourOverlayFrequency()).thenReturn(SHOW_ONCE_ONLY) + fun `given the WordPress app and the overlay was already shown, then it is not shown again`() { + whenever(phaseHelper.shouldRemoveJetpackFeatures()).thenReturn(true) + whenever(shownTracker.getFeatureCollectionOverlayShown()).thenReturn(true) assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isFalse } @Test - fun `given phase four already shown and the frequency has elapsed, then the overlay is shown again`() { - stubPhaseFourShown(frequencyInDays = 7, daysSinceShown = 7) + fun `when the overlay is shown on app open, then it is recorded so it does not show again`() { + overlayUtil.onFeatureCollectionOverlayShown(JetpackFeatureCollectionOverlaySource.APP_OPEN) - assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isTrue + verify(shownTracker).setFeatureCollectionOverlayShown() } @Test - fun `given phase four already shown and the frequency has not elapsed, then the overlay is not shown`() { - stubPhaseFourShown(frequencyInDays = 7, daysSinceShown = 6) + fun `when the overlay is opened from the feature card, then it is not recorded as the app-open showing`() { + overlayUtil.onFeatureCollectionOverlayShown(JetpackFeatureCollectionOverlaySource.FEATURE_CARD) - assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isFalse + verify(shownTracker, never()).setFeatureCollectionOverlayShown() } @Test - fun `given phase four already shown but no shown timestamp was recorded, then the overlay is not shown`() { - whenever(phaseHelper.getCurrentPhase()).thenReturn(PhaseFour) - whenever(shownTracker.getFeatureCollectionOverlayShown(PhaseFour)).thenReturn(true) - whenever(phaseHelper.getPhaseFourOverlayFrequency()).thenReturn(7) - whenever(shownTracker.getPhaseFourOverlayShownTimeStamp()).thenReturn(null) + fun `shouldHideJetpackFeatures follows the removal state`() { + whenever(phaseHelper.shouldRemoveJetpackFeatures()).thenReturn(true) - assertThat(overlayUtil.shouldShowFeatureCollectionJetpackOverlayForFirstTime()).isFalse - } - // endregion - - private fun stubPhaseFourShown(frequencyInDays: Int, daysSinceShown: Int) { - val today = Date(OVERLAY_SHOWN_TIMESTAMP) - whenever(phaseHelper.getCurrentPhase()).thenReturn(PhaseFour) - whenever(shownTracker.getFeatureCollectionOverlayShown(PhaseFour)).thenReturn(true) - whenever(phaseHelper.getPhaseFourOverlayFrequency()).thenReturn(frequencyInDays) - whenever(shownTracker.getPhaseFourOverlayShownTimeStamp()).thenReturn(OVERLAY_SHOWN_TIMESTAMP) - whenever(dateTimeUtilsWrapper.getTodaysDate()).thenReturn(today) - whenever(dateTimeUtilsWrapper.daysBetween(Date(OVERLAY_SHOWN_TIMESTAMP), today)) - .thenReturn(daysSinceShown) + assertThat(overlayUtil.shouldHideJetpackFeatures()).isTrue } } diff --git a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt index aacc733cc2eb..e9b2eb62e693 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelperTest.kt @@ -1,8 +1,6 @@ package org.wordpress.android.ui.jetpackoverlay -import kotlinx.coroutines.ExperimentalCoroutinesApi -import org.junit.Assert.assertNull -import org.junit.Assert.assertEquals +import org.assertj.core.api.Assertions.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -11,95 +9,58 @@ import org.mockito.junit.MockitoJUnitRunner import org.mockito.kotlin.times import org.mockito.kotlin.verify import org.mockito.kotlin.whenever -import org.wordpress.android.BaseUnitTest import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseFour -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseNewUsers -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase.PhaseSelfHostedUsers import org.wordpress.android.ui.main.WPMainNavigationView import org.wordpress.android.util.BuildConfigWrapper import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper -import org.wordpress.android.util.config.JetpackFeatureRemovalNewUsersConfig -import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseFourConfig -import org.wordpress.android.util.config.JetpackFeatureRemovalSelfHostedUsersConfig -import org.wordpress.android.util.config.PhaseFourOverlayFrequencyConfig -@ExperimentalCoroutinesApi @RunWith(MockitoJUnitRunner::class) -class JetpackFeatureRemovalPhaseHelperTest : BaseUnitTest() { +class JetpackFeatureRemovalPhaseHelperTest { @Mock private lateinit var buildConfigWrapper: BuildConfigWrapper - @Mock - private lateinit var jetpackFeatureRemovalPhaseFourConfig: JetpackFeatureRemovalPhaseFourConfig - - @Mock - private lateinit var jetpackFeatureRemovalNewUsersConfig: JetpackFeatureRemovalNewUsersConfig - - @Mock - private lateinit var jetpackFeatureRemovalSelfHostedUsersConfig: JetpackFeatureRemovalSelfHostedUsersConfig - - @Mock - private lateinit var phaseFourOverlayFrequencyConfig: PhaseFourOverlayFrequencyConfig - @Mock private lateinit var analyticsTrackerWrapper: AnalyticsTrackerWrapper - private lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + private lateinit var helper: JetpackFeatureRemovalPhaseHelper @Before - fun setup() { - jetpackFeatureRemovalPhaseHelper = JetpackFeatureRemovalPhaseHelper( - buildConfigWrapper, - jetpackFeatureRemovalPhaseFourConfig, - jetpackFeatureRemovalNewUsersConfig, - jetpackFeatureRemovalSelfHostedUsersConfig, - phaseFourOverlayFrequencyConfig, - analyticsTrackerWrapper - ) + fun setUp() { + helper = JetpackFeatureRemovalPhaseHelper(buildConfigWrapper, analyticsTrackerWrapper) } - // general phase tests + // The removal is a build-flavor invariant: the WordPress app never has the Jetpack-powered + // features and the Jetpack app always does. Nothing about it is decided at runtime. @Test - fun `given jetpack app, when current phase is fetched, then return null`() { - whenever(buildConfigWrapper.isJetpackApp).thenReturn(true) - - val currentPhase = jetpackFeatureRemovalPhaseHelper.getCurrentPhase() - - assertNull(currentPhase) + fun `given the WordPress app, then Jetpack features are removed`() { + whenever(buildConfigWrapper.isJetpackApp).thenReturn(false) + + assertThat(helper.shouldRemoveJetpackFeatures()).isTrue + assertThat(helper.shouldShowNotifications()).isFalse + assertThat(helper.shouldShowJetpackPoweredEditorFeatures()).isFalse + assertThat(helper.shouldShowTemplateSelectionInPages()).isFalse + assertThat(helper.shouldShowPublishedPostStatsButton()).isFalse + assertThat(helper.shouldShowHelpAndSupportOnEditor()).isFalse + assertThat(helper.getDeepLinkPhase()).isEqualTo(JetpackFeatureRemovalSiteCreationPhase.PHASE_TWO) } @Test - fun `given phase four config true, when current phase is fetched, then return phase four`() { - whenever(jetpackFeatureRemovalPhaseFourConfig.isEnabled()).thenReturn(true) - - val currentPhase = jetpackFeatureRemovalPhaseHelper.getCurrentPhase() - - assertEquals(currentPhase, PhaseFour) - } - - @Test - fun `given phase new users config true, when current phase is fetched, then return phase new users`() { - whenever(jetpackFeatureRemovalNewUsersConfig.isEnabled()).thenReturn(true) - - val currentPhase = jetpackFeatureRemovalPhaseHelper.getCurrentPhase() - - assertEquals(currentPhase, PhaseNewUsers) - } - - @Test - fun `given self hosted users config true, when current phase is fetched, then return self hosted users config`() { - whenever(jetpackFeatureRemovalSelfHostedUsersConfig.isEnabled()).thenReturn(true) - - val currentPhase = jetpackFeatureRemovalPhaseHelper.getCurrentPhase() + fun `given the Jetpack app, then Jetpack features are kept`() { + whenever(buildConfigWrapper.isJetpackApp).thenReturn(true) - assertEquals(currentPhase, PhaseSelfHostedUsers) + assertThat(helper.shouldRemoveJetpackFeatures()).isFalse + assertThat(helper.shouldShowNotifications()).isTrue + assertThat(helper.shouldShowJetpackPoweredEditorFeatures()).isTrue + assertThat(helper.shouldShowTemplateSelectionInPages()).isTrue + assertThat(helper.shouldShowPublishedPostStatsButton()).isTrue + assertThat(helper.shouldShowHelpAndSupportOnEditor()).isTrue + assertThat(helper.getDeepLinkPhase()).isNull() } @Test fun `when we track reader accessed event, then the proper event is tracked`() { - jetpackFeatureRemovalPhaseHelper.trackPageAccessedEventIfNeeded(WPMainNavigationView.PageType.READER) + helper.trackPageAccessedEventIfNeeded(WPMainNavigationView.PageType.READER) verify(analyticsTrackerWrapper, times(1)).track(AnalyticsTracker.Stat.READER_ACCESSED) } @@ -108,7 +69,7 @@ class JetpackFeatureRemovalPhaseHelperTest : BaseUnitTest() { fun `when we track my site accessed event, then the proper event is tracked`() { val site = SiteModel() - jetpackFeatureRemovalPhaseHelper.trackPageAccessedEventIfNeeded(WPMainNavigationView.PageType.MY_SITE, site) + helper.trackPageAccessedEventIfNeeded(WPMainNavigationView.PageType.MY_SITE, site) verify(analyticsTrackerWrapper, times(1)).track(AnalyticsTracker.Stat.MY_SITE_ACCESSED, site) } diff --git a/WordPress/src/test/java/org/wordpress/android/ui/mysite/DashboardItemsViewModelSliceTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/mysite/DashboardItemsViewModelSliceTest.kt index 0e531e950fa6..8b9acd5580fa 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/mysite/DashboardItemsViewModelSliceTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/mysite/DashboardItemsViewModelSliceTest.kt @@ -17,10 +17,8 @@ import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import org.wordpress.android.BaseUnitTest import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.ui.mysite.cards.jetpackfeature.JetpackFeatureCardHelper import org.wordpress.android.ui.mysite.cards.sotw2023.WpSotw2023NudgeCardViewModelSlice import org.wordpress.android.ui.mysite.items.DashboardItemsViewModelSlice -import org.wordpress.android.ui.mysite.items.jetpackSwitchmenu.JetpackSwitchMenuViewModelSlice import org.wordpress.android.ui.mysite.items.jetpackfeaturecard.JetpackFeatureCardViewModelSlice import org.wordpress.android.ui.mysite.items.listitem.SiteItemsViewModelSlice import org.wordpress.android.ui.pages.SnackbarMessageHolder @@ -32,18 +30,12 @@ class DashboardItemsViewModelSliceTest: BaseUnitTest() { @Mock lateinit var jetpackFeatureCardViewModelSlice: JetpackFeatureCardViewModelSlice - @Mock - lateinit var jetpackSwitchMenuViewModelSlice: JetpackSwitchMenuViewModelSlice - @Mock lateinit var siteItemsViewModelSlice: SiteItemsViewModelSlice @Mock lateinit var sotw2023NudgeCardViewModelSlice: WpSotw2023NudgeCardViewModelSlice - @Mock - lateinit var jetpackFeatureCardHelper: JetpackFeatureCardHelper - @Mock lateinit var selectedSiteRepository: SelectedSiteRepository @@ -59,17 +51,14 @@ class DashboardItemsViewModelSliceTest: BaseUnitTest() { @Before fun setup() { whenever(jetpackFeatureCardViewModelSlice.uiModel).thenReturn(MutableLiveData()) - whenever(jetpackSwitchMenuViewModelSlice.uiModel).thenReturn(MutableLiveData()) whenever(siteItemsViewModelSlice.uiModel).thenReturn(MutableLiveData()) whenever(sotw2023NudgeCardViewModelSlice.uiModel).thenReturn(MutableLiveData()) dashboardItemsViewModelSlice = DashboardItemsViewModelSlice( testDispatcher(), jetpackFeatureCardViewModelSlice, - jetpackSwitchMenuViewModelSlice, siteItemsViewModelSlice, - sotw2023NudgeCardViewModelSlice, - jetpackFeatureCardHelper + sotw2023NudgeCardViewModelSlice ) navigationActions = mutableListOf() @@ -106,7 +95,6 @@ class DashboardItemsViewModelSliceTest: BaseUnitTest() { verify(siteItemsViewModelSlice, atLeastOnce()).buildSiteItems(any()) verify(jetpackFeatureCardViewModelSlice, atMost(1)).buildJetpackFeatureCard() - verify(jetpackSwitchMenuViewModelSlice, atMost(1)).buildJetpackSwitchMenu() verify(siteItemsViewModelSlice, atMost(1)).buildSiteItems(mockSite) verify(sotw2023NudgeCardViewModelSlice, atMost(1)).buildCard() } @@ -118,7 +106,6 @@ class DashboardItemsViewModelSliceTest: BaseUnitTest() { verify(siteItemsViewModelSlice).clearValue() verify(jetpackFeatureCardViewModelSlice).clearValue() - verify(jetpackSwitchMenuViewModelSlice).clearValue() verify(sotw2023NudgeCardViewModelSlice).clearValue() } diff --git a/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelperTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelperTest.kt index 2fe5e707ab5d..9db6bb377c86 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelperTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelperTest.kt @@ -8,8 +8,6 @@ import org.mockito.Mock import org.mockito.junit.MockitoJUnitRunner import org.mockito.kotlin.any import org.mockito.kotlin.whenever -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhase -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper import org.wordpress.android.ui.prefs.AppPrefsWrapper import org.wordpress.android.util.BuildConfigWrapper import org.wordpress.android.util.DateTimeUtils @@ -32,9 +30,6 @@ class JetpackFeatureCardHelperTest { @Mock lateinit var dateTimeUtilsWrapper: DateTimeUtilsWrapper - @Mock - lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper - @Mock lateinit var phaseThreeBlogPostLinkConfig: PhaseThreeBlogPostLinkConfig @@ -47,7 +42,6 @@ class JetpackFeatureCardHelperTest { appPrefsWrapper, buildConfigWrapper, dateTimeUtilsWrapper, - jetpackFeatureRemovalPhaseHelper, phaseThreeBlogPostLinkConfig ) } @@ -89,33 +83,28 @@ class JetpackFeatureCardHelperTest { } private fun setTest( - phase: JetpackFeatureRemovalPhase = JetpackFeatureRemovalPhase.PhaseSelfHostedUsers, isJetpackApp: Boolean = false, isCardHiddenByUser: Boolean = false, lastShownTimestamp: Long = 0L ) { - setPhase(phase) setIsJetpackApp(isJetpackApp) - setIsCardHiddenByUser(phase, isCardHiddenByUser) - setLastShownTimestamp(phase, lastShownTimestamp) + setIsCardHiddenByUser(isCardHiddenByUser) + setLastShownTimestamp(lastShownTimestamp) setDaysBetween(lastShownTimestamp) } // Helpers - private fun setPhase(value: JetpackFeatureRemovalPhase) { - whenever(jetpackFeatureRemovalPhaseHelper.getCurrentPhase()).thenReturn(value) - } private fun setIsJetpackApp(value: Boolean) { whenever(buildConfigWrapper.isJetpackApp).thenReturn(value) } - private fun setIsCardHiddenByUser(phase: JetpackFeatureRemovalPhase, value: Boolean) { - whenever(appPrefsWrapper.getShouldHideJetpackFeatureCard(phase)).thenReturn(value) + private fun setIsCardHiddenByUser(value: Boolean) { + whenever(appPrefsWrapper.getShouldHideJetpackFeatureCard()).thenReturn(value) } - private fun setLastShownTimestamp(phase: JetpackFeatureRemovalPhase, value: Long) { - whenever(appPrefsWrapper.getJetpackFeatureCardLastShownTimestamp(phase)).thenReturn(value) + private fun setLastShownTimestamp(value: Long) { + whenever(appPrefsWrapper.getJetpackFeatureCardLastShownTimestamp()).thenReturn(value) } private fun setDaysBetween(lastShownTimestamp: Long) { diff --git a/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/jetpackSwitchmenu/JetpackSwitchMenuViewModelSliceTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/jetpackSwitchmenu/JetpackSwitchMenuViewModelSliceTest.kt deleted file mode 100644 index 275744d2dfcf..000000000000 --- a/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/jetpackSwitchmenu/JetpackSwitchMenuViewModelSliceTest.kt +++ /dev/null @@ -1,144 +0,0 @@ -package org.wordpress.android.ui.mysite.items.jetpackSwitchmenu - -import junit.framework.TestCase.assertNull -import kotlinx.coroutines.ExperimentalCoroutinesApi -import org.assertj.core.api.Assertions.assertThat -import org.junit.Before -import org.junit.runner.RunWith -import org.mockito.Mock -import org.mockito.junit.MockitoJUnitRunner -import org.mockito.kotlin.any -import org.mockito.kotlin.verify -import org.mockito.kotlin.whenever -import org.wordpress.android.BaseUnitTest -import org.wordpress.android.analytics.AnalyticsTracker -import org.wordpress.android.ui.mysite.MySiteCardAndItem -import org.wordpress.android.ui.mysite.SiteNavigationAction -import org.wordpress.android.ui.mysite.cards.jetpackfeature.JetpackFeatureCardHelper -import org.wordpress.android.ui.prefs.AppPrefsWrapper -import kotlin.test.Test -import kotlin.test.assertNotNull - -@ExperimentalCoroutinesApi -@RunWith(MockitoJUnitRunner::class) -class JetpackSwitchMenuViewModelSliceTest: BaseUnitTest(){ - @Mock - lateinit var appPrefsWrapper: AppPrefsWrapper - - @Mock - lateinit var jetpackFeatureCardHelper: JetpackFeatureCardHelper - - private lateinit var viewModelSlice: JetpackSwitchMenuViewModelSlice - - private lateinit var uiModels: MutableList - - private lateinit var navigationEvents: MutableList - - @Before - fun setUp() { - viewModelSlice = JetpackSwitchMenuViewModelSlice( - jetpackFeatureCardHelper, - appPrefsWrapper - ) - - uiModels = mutableListOf() - viewModelSlice.uiModel.observeForever { - uiModels.add(it) - } - - navigationEvents = mutableListOf() - viewModelSlice.onNavigation.observeForever { - it?.let { navigationEvents.add(it.peekContent()) } - } - } - - @Test -fun `given jetpack feature card should not be shown, ui model is null`() = test { - // given - whenever(jetpackFeatureCardHelper.shouldShowSwitchToJetpackMenuCard()).thenReturn(false) - - // when - viewModelSlice.buildJetpackSwitchMenu() - advanceUntilIdle() - - // then - assertNull(uiModels[0]) - } - - @Test - fun `given jetpack feature card should be shown, ui model is not null`() = test { - // given - whenever(jetpackFeatureCardHelper.shouldShowSwitchToJetpackMenuCard()).thenReturn(true) - - // when - viewModelSlice.buildJetpackSwitchMenu() - advanceUntilIdle() - - // then - assertNotNull(uiModels[0]) - } - - @Test - fun `given card shown, when clicked, then navigation event is emitted`() = test { - // given - whenever(jetpackFeatureCardHelper.shouldShowSwitchToJetpackMenuCard()).thenReturn(true) - - // when - viewModelSlice.buildJetpackSwitchMenu() - advanceUntilIdle() - uiModels[0]?.onClick?.click() - advanceUntilIdle() - - // then - verify(jetpackFeatureCardHelper).track(AnalyticsTracker.Stat.REMOVE_FEATURE_CARD_TAPPED) - assertThat(navigationEvents[0]).isInstanceOf(SiteNavigationAction.OpenJetpackFeatureOverlay::class.java) - } - - @Test - fun `given card shown, when remind me later clicked, then ui model is null`() = test { - // given - whenever(jetpackFeatureCardHelper.shouldShowSwitchToJetpackMenuCard()).thenReturn(true) - - // when - viewModelSlice.buildJetpackSwitchMenu() - advanceUntilIdle() - uiModels[0]?.onRemindMeLaterItemClick?.click() - advanceUntilIdle() - - // then - verify(jetpackFeatureCardHelper).track(AnalyticsTracker.Stat.REMOVE_FEATURE_CARD_REMIND_LATER_TAPPED) - verify(appPrefsWrapper).setSwitchToJetpackMenuCardLastShownTimestamp(any()) - assertNull(uiModels[1]) - } - - @Test - fun `given card shown, when hide menu item clicked, then ui model is null`() = test { - // given - whenever(jetpackFeatureCardHelper.shouldShowSwitchToJetpackMenuCard()).thenReturn(true) - - // when - viewModelSlice.buildJetpackSwitchMenu() - advanceUntilIdle() - uiModels[0]?.onHideMenuItemClick?.click() - advanceUntilIdle() - - // then - verify(jetpackFeatureCardHelper).hideSwitchToJetpackMenuCard() - assertNull(uiModels[1]) - } - - @Test - fun `given card shown, when more menu clicked, then analytics is tracked`() = test { - // given - whenever(jetpackFeatureCardHelper.shouldShowSwitchToJetpackMenuCard()).thenReturn(true) - - // when - viewModelSlice.buildJetpackSwitchMenu() - advanceUntilIdle() - uiModels[0]?.onMoreMenuClick?.click() - advanceUntilIdle() - - // then - verify(jetpackFeatureCardHelper).track(AnalyticsTracker.Stat.REMOVE_FEATURE_CARD_MENU_ACCESSED) - } -} From 11e524a5b936691d4061054eebe78fb32a4095af Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Thu, 13 Aug 2026 15:06:27 -0400 Subject: [PATCH 07/16] CMM-2302: Simplify the overlay code left behind by the phase removal Follow-up cleanup on code this branch already touched. No behaviour change; the overlay renders identically, verified by an A/B build of the same screen. - Remove the "Learn more at jetpack.com" link from the switch-to-Jetpack overlay. Its URL came from phase_four_blog_post, supplied only in PhaseFour, and its visibility flag was false for the phase that actually shipped, so it has never been reachable. This takes out the MaterialButton from both overlay layouts, the migrationInfoText/migrationInfoUrl plumbing in JetpackFeatureOverlayContent and JetpackFeatureOverlayComponentVisibility, the fragment's click listener and OpenMigrationInfoLink handler, the view model method, the tracking call and the orphaned JETPACK_REMOVE_FEATURE_OVERLAY_LEARN_MORE_TAPPED stat. - Fold JetpackFeatureRemovalBrandingUtil into JetpackBrandingUtils. It was down to one delegating method and one returning a constant, with a single consumer. - Collapse JetpackFeatureOverlayContentBuilder's build -> getState -> getContent indirection, which only existed to organise the per-phase branches. - Flatten `sealed class DeepLinkPhase { class All }` to a single class. - Make the overlay-shown preference key private; it had no external callers once the phase-suffix builder was gone. barrier2 in both overlay layouts now references only new_users_content_view_parent. Both referenced views are GONE at runtime and that one already resolved lower, so positions are unchanged: migration_helper_text, primary_button and secondary_button report identical bounds before and after. The new-users content block is deliberately left in place. It is unreachable for the same reason, but it is designed, laid out for both orientations and translated, so it is worth keeping if the migration prompt is ever revisited. detekt, checkstyle and lintWordPressRelease all pass. --- ...JetpackFeatureFullScreenOverlayFragment.kt | 26 +--------- ...etpackFeatureFullScreenOverlayViewModel.kt | 9 ---- .../JetpackFeatureOverlayContentBuilder.kt | 47 ++++++------------- .../JetpackFeatureOverlayShownTracker.kt | 4 +- .../JetpackFeatureRemovalBrandingUtil.kt | 14 ------ .../JetpackFeatureRemovalOverlayUtil.kt | 10 ---- .../jetpackoverlay/JetpackOverlayUIState.kt | 9 +--- .../android/util/JetpackBrandingUtils.kt | 8 ++-- .../jetpack_feature_removal_overlay.xml | 18 +------ .../jetpack_feature_removal_overlay.xml | 18 +------ .../analytics/AnalyticsTrackerNosaraTest.kt | 1 - .../android/analytics/AnalyticsTracker.java | 3 +- 12 files changed, 25 insertions(+), 142 deletions(-) delete mode 100644 WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayFragment.kt index e0ea15d29265..f3e6f0917e30 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayFragment.kt @@ -12,15 +12,12 @@ import org.wordpress.android.databinding.JetpackFeatureRemovalOverlayBinding import org.wordpress.android.ui.ActivityLauncherWrapper import org.wordpress.android.ui.ActivityLauncherWrapper.Companion.CAMPAIGN_JETPACK_OVERLAY import org.wordpress.android.ui.ActivityLauncherWrapper.Companion.JETPACK_PACKAGE_NAME -import org.wordpress.android.ui.WPWebViewActivity import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureOverlayActions.DismissDialog import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureOverlayActions.ForwardToJetpack -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureOverlayActions.OpenMigrationInfoLink import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureOverlayActions.OpenPlayStore import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureCollectionOverlaySource import org.wordpress.android.ui.utils.UiHelpers import org.wordpress.android.util.RtlUtils -import org.wordpress.android.util.UrlUtils import org.wordpress.android.util.extensions.exhaustive import org.wordpress.android.util.extensions.fillScreen import org.wordpress.android.util.extensions.getSerializableCompat @@ -86,14 +83,6 @@ class JetpackFeatureFullScreenOverlayFragment : BottomSheetDialogFragment() { is ForwardToJetpack -> { dismiss() } - is OpenMigrationInfoLink -> { - activity?.let { - WPWebViewActivity.openURL( - requireContext(), - UrlUtils.addUrlSchemeIfNeeded(action.url, true) - ) - } - } }.exhaustive } } @@ -103,26 +92,17 @@ class JetpackFeatureFullScreenOverlayFragment : BottomSheetDialogFragment() { ) { updateVisibility(jetpackPoweredOverlayUIState.componentVisibility) updateContent(jetpackPoweredOverlayUIState.overlayContent) - setClickListener( - jetpackPoweredOverlayUIState.componentVisibility, - jetpackPoweredOverlayUIState.overlayContent.migrationInfoUrl - ) + setClickListener(jetpackPoweredOverlayUIState.componentVisibility) } private fun JetpackFeatureRemovalOverlayBinding.setClickListener( - componentVisibility: JetpackFeatureOverlayComponentVisibility, - migrationInfoRedirectUrl: String? = null + componentVisibility: JetpackFeatureOverlayComponentVisibility ) { primaryButton.setOnClickListener { viewModel.openJetpackAppDownloadLink() } if (componentVisibility.closeButton) closeButton.setOnClickListener { viewModel.closeBottomSheet() } if (componentVisibility.secondaryButton) secondaryButton.setOnClickListener { viewModel.continueToFeature() } - if (componentVisibility.migrationInfoText && !migrationInfoRedirectUrl.isNullOrEmpty()) { - migrationInfoText.setOnClickListener { - viewModel.openJetpackMigrationInfoLink(migrationInfoRedirectUrl) - } - } } private fun JetpackFeatureRemovalOverlayBinding.updateVisibility( @@ -136,7 +116,6 @@ class JetpackFeatureFullScreenOverlayFragment : BottomSheetDialogFragment() { secondaryButton.setVisible(it.secondaryButton) migrationHelperText.setVisible(it.migrationText) closeButton.setVisible(it.closeButton) - migrationInfoText.setVisible(it.migrationInfoText) newUsersContentViewParent.newUsersContentView.setVisible(it.newUsersContent) } } @@ -149,7 +128,6 @@ class JetpackFeatureFullScreenOverlayFragment : BottomSheetDialogFragment() { uiHelpers.setTextOrHide(caption, it.caption) primaryButton.text = getString(it.primaryButtonText) uiHelpers.setTextOrHide(migrationHelperText, it.migrationText) - uiHelpers.setTextOrHide(migrationInfoText, it.migrationInfoText) uiHelpers.setTextOrHide(secondaryButton, it.secondaryButtonText) } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayViewModel.kt index 9455487afd5b..43c9322ecfe6 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureFullScreenOverlayViewModel.kt @@ -4,7 +4,6 @@ import androidx.lifecycle.LiveData import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.modules.UI_THREAD -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureOverlayActions.OpenMigrationInfoLink import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureCollectionOverlaySource import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackOverlayDismissalType.CLOSE_BUTTON import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackOverlayDismissalType.CONTINUE_BUTTON @@ -77,13 +76,5 @@ class JetpackFeatureFullScreenOverlayViewModel @Inject constructor( _uiState.postValue(jetpackFeatureOverlayContentBuilder.buildFeatureCollectionOverlayState(rtlLayout)) jetpackFeatureRemovalOverlayUtil.onFeatureCollectionOverlayShown(featureCollectionOverlaySource) } - - - fun openJetpackMigrationInfoLink(migrationInfoRedirectUrl: String) { - jetpackFeatureRemovalOverlayUtil.trackLearnMoreAboutMigrationClickedInFeatureCollectionOverlay( - featureCollectionOverlayOrigin - ) - _action.value = OpenMigrationInfoLink(migrationInfoRedirectUrl) - } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt index 4379795c573d..13c659a2f01a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayContentBuilder.kt @@ -7,45 +7,26 @@ import javax.inject.Singleton @Singleton class JetpackFeatureOverlayContentBuilder @Inject constructor() { - fun buildDeepLinkOverlayState(isRtl: Boolean): JetpackFeatureOverlayUIState { - return getStateForDeepLink(isRtl) - } - - private fun getStateForDeepLink(isRtl: Boolean): JetpackFeatureOverlayUIState { - val componentVisibility = JetpackFeatureOverlayComponentVisibility - .DeepLinkPhase.All() - val content = getContentForDeepLink(isRtl) - return JetpackFeatureOverlayUIState(componentVisibility, content) - } - - private fun getContentForDeepLink(rtl: Boolean): JetpackFeatureOverlayContent { - return JetpackFeatureOverlayContent( - illustration = if (rtl) R.raw.wp2jp_rtl else R.raw.wp2jp_left, + fun buildDeepLinkOverlayState(isRtl: Boolean) = JetpackFeatureOverlayUIState( + JetpackFeatureOverlayComponentVisibility.DeepLinkPhase(), + JetpackFeatureOverlayContent( + illustration = if (isRtl) R.raw.wp2jp_rtl else R.raw.wp2jp_left, title = R.string.wp_jetpack_deep_link_overlay_title, caption = UiStringRes(R.string.wp_jetpack_deep_link_overlay_description), primaryButtonText = R.string.wp_jetpack_deep_link_open_in_jetpack, secondaryButtonText = R.string.wp_jetpack_deep_link_open_in_wordpress ) - } - - // All Feature Overlay - fun buildFeatureCollectionOverlayState(isRtl: Boolean): JetpackFeatureOverlayUIState { - return getStateForFeatureCollection(isRtl) - } + ) - private fun getStateForFeatureCollection(isRtl: Boolean): JetpackFeatureOverlayUIState { - return JetpackFeatureOverlayUIState( - JetpackFeatureOverlayComponentVisibility.FeatureCollectionPhase(), - getContentForFeatureCollection(isRtl) + fun buildFeatureCollectionOverlayState(isRtl: Boolean) = JetpackFeatureOverlayUIState( + JetpackFeatureOverlayComponentVisibility.FeatureCollectionPhase(), + JetpackFeatureOverlayContent( + illustration = if (isRtl) R.raw.wp2jp_rtl else R.raw.wp2jp_left, + title = R.string.wp_jetpack_feature_removal_phase_self_hosted_users_title, + caption = UiStringRes(R.string.wp_jetpack_feature_removal_phase_self_hosted_users_description), + migrationText = R.string.wp_jetpack_feature_removal_overlay_migration_helper_text, + primaryButtonText = R.string.wp_jetpack_feature_removal_overlay_switch_to_the_jetpack_app, + secondaryButtonText = R.string.wp_jetpack_feature_removal_overlay_continue_without_jetpack ) - } - - private fun getContentForFeatureCollection(isRtl: Boolean) = JetpackFeatureOverlayContent( - illustration = if (isRtl) R.raw.wp2jp_rtl else R.raw.wp2jp_left, - title = R.string.wp_jetpack_feature_removal_phase_self_hosted_users_title, - caption = UiStringRes(R.string.wp_jetpack_feature_removal_phase_self_hosted_users_description), - migrationText = R.string.wp_jetpack_feature_removal_overlay_migration_helper_text, - primaryButtonText = R.string.wp_jetpack_feature_removal_overlay_switch_to_the_jetpack_app, - secondaryButtonText = R.string.wp_jetpack_feature_removal_overlay_continue_without_jetpack ) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayShownTracker.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayShownTracker.kt index 10462156c1b9..10eaedff4be5 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayShownTracker.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureOverlayShownTracker.kt @@ -15,10 +15,8 @@ class JetpackFeatureOverlayShownTracker @Inject constructor(private val sharedPr sharedPrefs.getBoolean(KEY_FEATURE_COLLECTION_OVERLAY_SHOWN_KEY, false) companion object { - const val KEY_FEATURE_COLLECTION_OVERLAY_SHOWN = "KEY_FEATURE_COLLECTION_OVERLAY_SHOWN" - // The phase name is part of the stored key; see JETPACK_REMOVAL_TRACKING_NAME. private const val KEY_FEATURE_COLLECTION_OVERLAY_SHOWN_KEY = - KEY_FEATURE_COLLECTION_OVERLAY_SHOWN + JETPACK_REMOVAL_TRACKING_NAME + "KEY_FEATURE_COLLECTION_OVERLAY_SHOWN" + JETPACK_REMOVAL_TRACKING_NAME } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt deleted file mode 100644 index 019fcc16c617..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt +++ /dev/null @@ -1,14 +0,0 @@ -package org.wordpress.android.ui.jetpackoverlay - -import org.wordpress.android.R -import org.wordpress.android.ui.utils.UiString -import org.wordpress.android.ui.utils.UiString.UiStringRes -import javax.inject.Inject - -class JetpackFeatureRemovalBrandingUtil @Inject constructor( - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper -) { - fun isInRemovalPhase() = jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures() - - fun getBrandingText(): UiString = UiStringRes(R.string.wp_jetpack_powered) -} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt index ef4b25dee2fb..5bf668c35c06 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt @@ -94,16 +94,6 @@ class JetpackFeatureRemovalOverlayUtil @Inject constructor( ) } - fun trackLearnMoreAboutMigrationClickedInFeatureCollectionOverlay(source: JetpackFeatureCollectionOverlaySource) { - analyticsTrackerWrapper.track( - AnalyticsTracker.Stat.JETPACK_REMOVE_FEATURE_OVERLAY_LEARN_MORE_TAPPED, - mapOf( - CURRENT_PHASE_KEY to JETPACK_REMOVAL_TRACKING_NAME, - SCREEN_TYPE_KEY to source.label - ) - ) - } - enum class JetpackOverlayDismissalType(val trackingName: String) { CLOSE_BUTTON("close"), CONTINUE_BUTTON("continue") diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt index c4ffa5d2bedd..659215b8cef9 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackOverlayUIState.kt @@ -13,15 +13,11 @@ sealed class JetpackFeatureOverlayComponentVisibility( val primaryButton: Boolean = true, open val closeButton: Boolean = true, open val secondaryButton: Boolean = true, - open val migrationInfoText: Boolean = false, open val newUsersContent: Boolean = false ) { - sealed class DeepLinkPhase : JetpackFeatureOverlayComponentVisibility() { - class All : DeepLinkPhase() - } + class DeepLinkPhase : JetpackFeatureOverlayComponentVisibility() class FeatureCollectionPhase( - override val migrationInfoText: Boolean = false, override val closeButton: Boolean = false, override val migrationText: Boolean = true ) : JetpackFeatureOverlayComponentVisibility() @@ -32,8 +28,6 @@ data class JetpackFeatureOverlayContent( @StringRes val title: Int, val caption: UiString, @StringRes val migrationText: Int? = null, - @StringRes val migrationInfoText: Int? = null, - val migrationInfoUrl: String? = null, @StringRes val primaryButtonText: Int, @StringRes val secondaryButtonText: Int? = null ) @@ -47,6 +41,5 @@ sealed class JetpackFeatureOverlayActions { object OpenPlayStore : JetpackFeatureOverlayActions() object DismissDialog : JetpackFeatureOverlayActions() object ForwardToJetpack : JetpackFeatureOverlayActions() - data class OpenMigrationInfoLink(val url: String) : JetpackFeatureOverlayActions() } diff --git a/WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt b/WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt index d962bcf76277..8dc0b856bc09 100644 --- a/WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt +++ b/WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt @@ -7,7 +7,7 @@ import androidx.recyclerview.widget.RecyclerView import org.wordpress.android.R import org.wordpress.android.analytics.AnalyticsTracker.Stat import org.wordpress.android.models.JetpackPoweredScreen -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalBrandingUtil +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper import org.wordpress.android.ui.mysite.SelectedSiteRepository import org.wordpress.android.ui.utils.UiString import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper @@ -18,7 +18,7 @@ import javax.inject.Inject class JetpackBrandingUtils @Inject constructor( private val jetpackPoweredFeatureConfig: JetpackPoweredFeatureConfig, private val jetpackPoweredBottomSheetFeatureConfig: JetpackPoweredBottomSheetFeatureConfig, - private val jetpackFeatureRemovalBrandingUtil: JetpackFeatureRemovalBrandingUtil, + private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper, private val selectedSiteRepository: SelectedSiteRepository, private val siteUtilsWrapper: SiteUtilsWrapper, private val buildConfigWrapper: BuildConfigWrapper, @@ -26,14 +26,14 @@ class JetpackBrandingUtils @Inject constructor( ) { fun shouldShowJetpackBranding(): Boolean { return isWpComSite() && jetpackPoweredFeatureConfig.isEnabled() && !buildConfigWrapper.isJetpackApp - && !jetpackFeatureRemovalBrandingUtil.isInRemovalPhase() + && !jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures() } fun shouldShowJetpackPoweredBottomSheet(): Boolean { return isWpComSite() && jetpackPoweredBottomSheetFeatureConfig.isEnabled() && !buildConfigWrapper.isJetpackApp } - fun getBrandingText(): UiString = jetpackFeatureRemovalBrandingUtil.getBrandingText() + fun getBrandingText(): UiString = UiString.UiStringRes(R.string.wp_jetpack_powered) fun showJetpackBannerIfScrolledToTop(banner: View, scrollableView: RecyclerView) { banner.isVisible = true diff --git a/WordPress/src/main/res/layout-land/jetpack_feature_removal_overlay.xml b/WordPress/src/main/res/layout-land/jetpack_feature_removal_overlay.xml index 10a128d22268..d8717930770e 100644 --- a/WordPress/src/main/res/layout-land/jetpack_feature_removal_overlay.xml +++ b/WordPress/src/main/res/layout-land/jetpack_feature_removal_overlay.xml @@ -107,22 +107,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/caption" /> -