diff --git a/WordPress/build.gradle b/WordPress/build.gradle index 8c285b9157e4..417b05ec667f 100644 --- a/WordPress/build.gradle +++ b/WordPress/build.gradle @@ -151,7 +151,6 @@ android { buildConfigField "boolean", "LAND_ON_THE_EDITOR", "false" buildConfigField "boolean", "QRCODE_AUTH_FLOW", "false" buildConfigField "boolean", "BETA_SITE_DESIGNS", "false" - buildConfigField "boolean", "JETPACK_POWERED", "true" buildConfigField "boolean", "JETPACK_POWERED_BOTTOM_SHEET", "true" buildConfigField "boolean", "JETPACK_SHARED_LOGIN", "true" buildConfigField "boolean", "JETPACK_LOCAL_USER_FLAGS", "true" @@ -159,13 +158,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" - 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/androidTest/java/org/wordpress/android/e2e/pages/MySitesPage.kt b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/MySitesPage.kt index 86ee49bdf1f0..6b4e28fab941 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/MySitesPage.kt +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/MySitesPage.kt @@ -148,7 +148,6 @@ class MySitesPage { ) WPSupportUtils.clickOn(statsButton) WPSupportUtils.idleFor(4000) - WPSupportUtils.dismissJetpackAdIfPresent() WPSupportUtils.waitForElementToBeDisplayedWithoutFailure(R.id.tabLayout) // Wait for the stats to load diff --git a/WordPress/src/androidTest/java/org/wordpress/android/support/WPSupportUtils.java b/WordPress/src/androidTest/java/org/wordpress/android/support/WPSupportUtils.java index 67f88ef2c4ea..90614653904e 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/support/WPSupportUtils.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/support/WPSupportUtils.java @@ -37,7 +37,6 @@ import org.hamcrest.Matcher; import org.hamcrest.Matchers; import org.hamcrest.TypeSafeMatcher; -import org.wordpress.android.BuildConfig; import org.wordpress.android.R; import org.wordpress.android.util.image.ImageType; @@ -817,23 +816,4 @@ public static void scrollIntoView(Integer scrollableContainerID, ViewInteraction swipeCount += 1; } } - - public static void dismissJetpackAdIfPresent() { - if (BuildConfig.IS_JETPACK_APP) { - return; - } - - String jetpackAdText = "Stats, Reader, Notifications, and other features are powered by Jetpack."; - ViewInteraction jetpackBanner = onView(withText(jetpackAdText)); - - // Dismiss Jetpack ad that might be shown after Sign-Up or after opening Stats - if (isElementDisplayed(jetpackBanner)) { - clickOn(onView(withId(R.id.secondary_button))); - waitForElementToNotBeDisplayed(jetpackBanner); - - // Account for potential Emulator slowness on CI: the case of banner text - // being already hidden, but top part of banner still sliding away - idleFor(1000); - } - } } 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"> - - - JetpackPoweredScreen.WithDynamicText.BACKUP - else -> JetpackPoweredScreen.WithDynamicText.ACTIVITY_LOG - } - - 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.getBrandingTextForScreen(screen) - ) - - if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - binding?.jetpackBanner?.root?.setOnClickListener { - jetpackBrandingUtils.trackBannerTapped(screen) - JetpackPoweredBottomSheetFragment - .newInstance() - .show(supportFragmentManager, JetpackPoweredBottomSheetFragment.TAG) - } - } - } - } - } - /** * It was decided to reuse the 'Activity Log' screen instead of creating a new 'Backup' screen. This was due to the * fact that there will be lots of code that would need to be duplicated for the new 'Backup' screen. On the other diff --git a/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsActivity.kt index c38643b91b40..ad3d56ea40ed 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/debug/DebugSettingsActivity.kt @@ -9,7 +9,6 @@ import dagger.hilt.android.AndroidEntryPoint import org.wordpress.android.R import org.wordpress.android.databinding.DebugSettingsActivityBinding import org.wordpress.android.ui.ActivityLauncher -import org.wordpress.android.ui.debug.previews.PreviewFragmentActivity.Companion.previewFragmentInActivity import org.wordpress.android.ui.main.BaseAppCompatActivity import org.wordpress.android.viewmodel.observeEvent import javax.inject.Inject @@ -42,9 +41,6 @@ class DebugSettingsActivity : BaseAppCompatActivity() { when (it) { is DebugSettingsViewModel.NavigationAction.DebugCookies -> 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..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 @@ -57,8 +56,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..cc6f398eb7f4 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,8 +7,7 @@ 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.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.notifications.NotificationManagerWrapper import org.wordpress.android.util.DebugUtils import org.wordpress.android.ui.debug.UiItem.FeatureFlag.RemoteFeatureFlag @@ -38,7 +37,7 @@ class DebugSettingsViewModel private val weeklyRoundupNotifier: WeeklyRoundupNotifier, private val notificationManager: NotificationManagerWrapper, private val contextProvider: ContextProvider, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper, + private val jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper, ) : ScopedViewModel(mainDispatcher) { private val _uiState = MutableLiveData() val uiState: LiveData = _uiState @@ -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,12 +68,8 @@ class DebugSettingsViewModel _onNavigation.value = Event(DebugCookies) } - private fun onFeaturePreviewClick(key: String) { - _onNavigation.value = Event(NavigationAction.PreviewFragment(key)) - } - fun onForceShowWeeklyRoundupClick() = launch(bgDispatcher) { - if (!jetpackFeatureRemovalPhaseHelper.shouldShowNotifications()) + if (!jetpackFeatureRemovalHelper.shouldShowNotifications()) return@launch weeklyRoundupNotifier.buildNotifications().forEach { notificationManager.notify(it.id, it.asNotificationCompatBuilder(contextProvider.getContext()).build()) @@ -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..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,9 +38,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/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/deeplinks/handlers/StatsLinkHandler.kt b/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/handlers/StatsLinkHandler.kt index c083f900c464..f271c7a7b1bd 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 @@ -11,15 +10,13 @@ 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 class StatsLinkHandler @Inject constructor( - private val deepLinkUriUtils: DeepLinkUriUtils, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + private val deepLinkUriUtils: DeepLinkUriUtils ) : DeepLinkHandler { /** * Builds navigate action from URL like: @@ -35,7 +32,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/jetpack/scan/ScanActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpack/scan/ScanActivity.kt index f508a91da225..6eb83c2cf1a9 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,31 +4,17 @@ 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 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 -import javax.inject.Inject import android.R as AndroidR @AndroidEntryPoint -class ScanActivity : BaseAppCompatActivity(), ScrollableViewInitializedListener { - @Inject - lateinit var jetpackBrandingUtils: JetpackBrandingUtils - - @Inject - lateinit var uiHelpers: UiHelpers - +class ScanActivity : BaseAppCompatActivity() { private var binding: ScanActivityBinding? = null override fun onNewIntent(intent: Intent) { @@ -49,37 +35,6 @@ class ScanActivity : BaseAppCompatActivity(), ScrollableViewInitializedListener } } - override fun onScrollableViewInitialized(containerId: Int) { - initJetpackBanner(containerId) - } - - private fun initJetpackBanner(scrollableContainerId: Int) { - if (jetpackBrandingUtils.shouldShowJetpackBrandingForPhaseOne()) { - 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.getBrandingTextForScreen(screen) - ) - - 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 ce3239a0f662..49a56a0fe923 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 @@ -20,14 +19,11 @@ 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 import org.wordpress.android.util.extensions.getSerializableExtraCompat import javax.inject.Inject @@ -38,8 +34,6 @@ class ScanHistoryFragment : Fragment(R.layout.scan_history_fragment), MenuProvid @Inject lateinit var uiHelpers: UiHelpers - @Inject - lateinit var jetpackBrandingUtils: JetpackBrandingUtils private val viewModel: ScanHistoryViewModel by activityViewModels() private var binding: ScanHistoryFragmentBinding? = null @@ -154,33 +148,5 @@ 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.shouldShowJetpackBrandingForPhaseOne()) { - 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.getBrandingTextForScreen(screen) - ) - - 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/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..ce19049634de 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,16 +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.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureOverlayScreenType 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 @@ -54,9 +50,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 +58,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) ) @@ -93,14 +83,6 @@ class JetpackFeatureFullScreenOverlayFragment : BottomSheetDialogFragment() { is ForwardToJetpack -> { dismiss() } - is OpenMigrationInfoLink -> { - activity?.let { - WPWebViewActivity.openURL( - requireContext(), - UrlUtils.addUrlSchemeIfNeeded(action.url, true) - ) - } - } }.exhaustive } } @@ -110,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( @@ -143,8 +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) } } @@ -156,7 +127,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) } } @@ -168,23 +138,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..0d7d44fd1d9d 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,31 +4,20 @@ 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.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 + private val jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper, + private val jetpackFeatureRemovalOverlayUtil: JetpackFeatureRemovalOverlayUtil ) : ScopedViewModel(mainDispatcher) { private val _uiState = SingleLiveEvent() val uiState: LiveData = _uiState @@ -36,9 +25,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 +33,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,57 +69,12 @@ 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() - ) - _uiState.postValue(jetpackFeatureOverlayContentBuilder.build(params = params)) - jetpackFeatureRemovalOverlayUtil.onOverlayShown(overlayScreenType) - } - - private fun getCurrentPhase() = jetpackFeatureRemovalPhaseHelper.getCurrentPhase() - - fun openJetpackMigrationInfoLink(migrationInfoRedirectUrl: String) { - if (isFeatureCollectionOverlayScreen) { - jetpackFeatureRemovalOverlayUtil.trackLearnMoreAboutMigrationClickedInFeatureCollectionOverlay( - featureCollectionOverlayOrigin - ) - } else { - jetpackFeatureRemovalOverlayUtil.trackLearnMoreAboutMigrationClicked(screenType) - } - _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 + if (!jetpackFeatureRemovalHelper.shouldRemoveJetpackFeatures()) { + return _action.postValue(JetpackFeatureOverlayActions.DismissDialog) } + featureCollectionOverlayOrigin = featureCollectionOverlaySource + _uiState.postValue(jetpackFeatureOverlayContentBuilder.buildFeatureCollectionOverlayState(rtlLayout)) + jetpackFeatureRemovalOverlayUtil.onFeatureCollectionOverlayShown(featureCollectionOverlaySource) } } 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..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 @@ -1,331 +1,32 @@ 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 - ) - } - - 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, +class JetpackFeatureOverlayContentBuilder @Inject constructor() { + 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, currentPhase: JetpackFeatureRemovalPhase, blogPostLink: String? - ): JetpackFeatureOverlayUIState { - return getStateForFeatureCollection(isRtl, currentPhase, blogPostLink) - } - - private fun getStateForFeatureCollection( - isRtl: Boolean, - currentPhase: JetpackFeatureRemovalPhase, - blogPostLink: String? - ): JetpackFeatureOverlayUIState { - val componentVisibility = when (currentPhase) { - PhaseThree -> JetpackFeatureOverlayComponentVisibility.FeatureCollectionPhase.PhaseThree() - PhaseFour -> JetpackFeatureOverlayComponentVisibility.FeatureCollectionPhase.PhaseFour() - 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?, - currentPhase: JetpackFeatureRemovalPhase - ): JetpackFeatureOverlayContent { - return when (currentPhase) { - is PhaseThree -> getJetpackFeatureOverlayContentForPhaseThree(isRtl, blogPostLink) - is PhaseFour -> getJetpackFeatureOverlayContentForPhaseFour(isRtl, blogPostLink) - is PhaseNewUsers -> getJetpackFeatureOverlayContentForNewUsers(isRtl) - is PhaseSelfHostedUsers -> getJetpackFeatureOverlayContentForSelfHostedUsers(isRtl) - else -> { - throw IllegalStateException("Invalid phase for feature collection overlay") - } - } - } - - 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( - 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 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 + 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 + ) ) } - -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..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 @@ -2,83 +2,21 @@ 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 setFeatureCollectionOverlayShown() { + sharedPrefs.edit { putBoolean(KEY_FEATURE_COLLECTION_OVERLAY_SHOWN_KEY, true) } } - 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) { - setPhaseFourOverlayShownTimeStamp(System.currentTimeMillis()) - } - } - - 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" - } -} - -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) + // 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 } } - -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 deleted file mode 100644 index 57690049e111..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalBrandingUtil.kt +++ /dev/null @@ -1,136 +0,0 @@ -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 jpDeadlineDate: String by lazy { - jpDeadlineConfig.getValue() - } - - fun isInRemovalPhase() = jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures() - - fun shouldShowBrandingInDashboard() = jetpackFeatureRemovalPhaseHelper.shouldShowJetpackBrandingInDashboard() - - fun shouldShowPhaseOneBranding(): Boolean { - return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - PhaseOne, - PhaseTwo, - PhaseThree, - 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(), - ) - } - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalHelper.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalHelper.kt new file mode 100644 index 000000000000..1c2fd38676ea --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalHelper.kt @@ -0,0 +1,66 @@ +package org.wordpress.android.ui.jetpackoverlay + +import org.wordpress.android.analytics.AnalyticsTracker +import org.wordpress.android.fluxc.model.SiteModel +import org.wordpress.android.ui.main.WPMainNavigationView.PageType +import org.wordpress.android.util.BuildConfigWrapper +import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper +import javax.inject.Inject + +/** + * 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 value deep-link overlay events report for the Tracks `phase` property. These events used a + * coarser two-bucket view of the same rollout than [JETPACK_REMOVAL_TRACKING_NAME] does: "one" + * while the Jetpack-powered features were still present, "two" once they were removed. Kept + * verbatim so historic events stay comparable. + */ +const val JETPACK_DEEPLINK_TRACKING_NAME = "two" + +/** + * 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 JetpackFeatureRemovalHelper @Inject constructor( + private val buildConfigWrapper: BuildConfigWrapper, + private val analyticsTrackerWrapper: AnalyticsTrackerWrapper +) { + fun shouldRemoveJetpackFeatures(): Boolean = !buildConfigWrapper.isJetpackApp + + fun shouldShowJetpackPoweredEditorFeatures(): Boolean = buildConfigWrapper.isJetpackApp + + fun shouldShowTemplateSelectionInPages(): Boolean = buildConfigWrapper.isJetpackApp + + fun shouldShowPublishedPostStatsButton(): Boolean = buildConfigWrapper.isJetpackApp + + fun shouldShowNotifications(): Boolean = buildConfigWrapper.isJetpackApp + + fun shouldShowHelpAndSupportOnEditor(): Boolean = buildConfigWrapper.isJetpackApp + + fun getDeepLinkTrackingName(): String? = + if (buildConfigWrapper.isJetpackApp) null else JETPACK_DEEPLINK_TRACKING_NAME + + @JvmOverloads + fun trackPageAccessedEventIfNeeded(pageType: PageType, site: SiteModel? = null) { + when (pageType) { + PageType.MY_SITE -> analyticsTrackerWrapper.track(AnalyticsTracker.Stat.MY_SITE_ACCESSED, site) + PageType.READER -> analyticsTrackerWrapper.track(AnalyticsTracker.Stat.READER_ACCESSED) + PageType.NOTIFS -> analyticsTrackerWrapper.track(AnalyticsTracker.Stat.NOTIFICATIONS_ACCESSED) + PageType.ME -> analyticsTrackerWrapper.track(AnalyticsTracker.Stat.ME_ACCESSED) + } + } +} 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..093980ecf672 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,212 +1,33 @@ 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 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 jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper, 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() + return jetpackFeatureRemovalHelper.shouldRemoveJetpackFeatures() } fun shouldShowFeatureCollectionJetpackOverlayForFirstTime(): Boolean { - val phase = jetpackFeatureRemovalPhaseHelper.getCurrentPhase() ?: return false - return shouldShowFeatureCollectionOverlayInCurrentPhase(phase) - } - - private fun shouldShowFeatureCollectionOverlayInCurrentPhase(phase: JetpackFeatureRemovalPhase): Boolean { - return when (phase) { - PhaseThree, PhaseNewUsers, PhaseSelfHostedUsers -> - !jetpackFeatureOverlayShownTracker.getFeatureCollectionOverlayShown(phase) - PhaseFour -> shouldShowPhaseFourFeatureCollectionOverlay() - else -> false - } - } - - // 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 - } - - 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 - ) - ) + return jetpackFeatureRemovalHelper.shouldRemoveJetpackFeatures() && + !jetpackFeatureOverlayShownTracker.getFeatureCollectionOverlayShown() } fun trackDeepLinkOverlayShown() { analyticsTrackerWrapper.track( AnalyticsTracker.Stat.JETPACK_DEEP_LINK_OVERLAY_DISPLAYED, mapOf( - CURRENT_PHASE_KEY to jetpackFeatureRemovalPhaseHelper.getDeepLinkPhase()?.trackingName + CURRENT_PHASE_KEY to jetpackFeatureRemovalHelper.getDeepLinkTrackingName() ) ) } @@ -215,7 +36,7 @@ class JetpackFeatureRemovalOverlayUtil @Inject constructor( analyticsTrackerWrapper.track( AnalyticsTracker.Stat.JETPACK_DEEP_LINK_OVERLAY_BUTTON_OPEN_IN_JETPACK_APP_TAPPED, mapOf( - CURRENT_PHASE_KEY to jetpackFeatureRemovalPhaseHelper.getDeepLinkPhase()?.trackingName + CURRENT_PHASE_KEY to jetpackFeatureRemovalHelper.getDeepLinkTrackingName() ) ) } @@ -226,27 +47,15 @@ class JetpackFeatureRemovalOverlayUtil @Inject constructor( analyticsTrackerWrapper.track( AnalyticsTracker.Stat.JETPACK_DEEP_LINK_OVERLAY_DISMISSED, mapOf( - CURRENT_PHASE_KEY to jetpackFeatureRemovalPhaseHelper.getDeepLinkPhase()?.trackingName, + CURRENT_PHASE_KEY to jetpackFeatureRemovalHelper.getDeepLinkTrackingName(), DISMISSAL_TYPE_KEY to dismissalType.trackingName ) ) } - 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( - jetpackFeatureRemovalPhaseHelper.getCurrentPhase()!! - ) + jetpackFeatureOverlayShownTracker.setFeatureCollectionOverlayShown() } trackFeatureCollectionOverlayShown(source) } @@ -255,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 ) ) @@ -268,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 ) @@ -279,17 +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, - SCREEN_TYPE_KEY to source.label - ) - ) - } - - fun trackLearnMoreAboutMigrationClickedInFeatureCollectionOverlay(source: JetpackFeatureCollectionOverlaySource) { - 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 deleted file mode 100644 index a6c1a45c8d2c..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalPhaseHelper.kt +++ /dev/null @@ -1,216 +0,0 @@ -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.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 -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.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, - 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 (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 PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> PHASE_TWO - } - } - - fun shouldRemoveJetpackFeatures(): Boolean { - val currentPhase = getCurrentPhase() ?: return false - return when (currentPhase) { - is PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> true - is PhaseOne, PhaseTwo, PhaseThree, PhaseStaticPosters -> false - } - } - - fun shouldShowDashboard(): Boolean { - val currentPhase = getCurrentPhase() ?: return true - return when (currentPhase) { - is PhaseStaticPosters, PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> false - else -> true - } - } - - fun shouldShowJetpackPoweredEditorFeatures(): Boolean { - val currentPhase = getCurrentPhase() ?: return true - return when (currentPhase) { - is PhaseStaticPosters, PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> false - else -> true - } - } - - fun shouldShowTemplateSelectionInPages(): Boolean { - val currentPhase = getCurrentPhase() ?: return true - return when (currentPhase) { - is PhaseStaticPosters, PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> false - else -> true - } - } - - 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 - } - } - - @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.ME -> analyticsTrackerWrapper.track(AnalyticsTracker.Stat.ME_ACCESSED) - } - } - - 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 shouldShowHelpAndSupportOnEditor(): Boolean { - val currentPhase = getCurrentPhase() ?: return true - return when (currentPhase) { - is PhaseStaticPosters, PhaseFour, PhaseNewUsers, PhaseSelfHostedUsers -> false - else -> true - } - } - - fun getPhaseFourOverlayFrequency(): Int { - return jetpackPhaseFourOverlayFrequencyConfig.getValue() - } - - 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") -} - -enum class JetpackFeatureRemovalSiteCreationPhase(val trackingName: String) { - PHASE_ONE("one"), PHASE_TWO("two") -} - -enum class JetpackDeepLinkPhase(val trackingName: String) { - ALL("all") -} 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..f82c90fb4b03 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 @@ -4,7 +4,7 @@ import org.wordpress.android.util.PackageManagerWrapper import javax.inject.Inject class JetpackFeatureRemovalWidgetHelper @Inject constructor( - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper, + private val jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper, private val packageManagerWrapper: PackageManagerWrapper ) { private val widgetReceivers = listOf( @@ -13,8 +13,7 @@ class JetpackFeatureRemovalWidgetHelper @Inject constructor( ) fun disableWidgetReceiversIfNeeded() { - if (jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures() || - jetpackFeatureRemovalPhaseHelper.shouldShowStaticPage()) { + if (jetpackFeatureRemovalHelper.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 56b8762bb157..9fdc706749c9 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 @@ -12,50 +12,14 @@ sealed class JetpackFeatureOverlayComponentVisibility( open val migrationText: Boolean = false, val primaryButton: Boolean = true, open val closeButton: Boolean = true, - open val secondaryButton: Boolean = true, - open val migrationInfoText: Boolean = false, - open val newUsersContent: Boolean = false + val secondaryButton: Boolean = true ) { - class PhaseOne : JetpackFeatureOverlayComponentVisibility() - class PhaseTwo(override val migrationInfoText: Boolean = true) : JetpackFeatureOverlayComponentVisibility() - class PhaseThree( - override val migrationInfoText: Boolean = true, + class DeepLinkPhase : JetpackFeatureOverlayComponentVisibility() + + class FeatureCollectionPhase( 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, - 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 Final(override val closeButton: Boolean = false) : FeatureCollectionPhase() - } } data class JetpackFeatureOverlayContent( @@ -63,8 +27,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 ) @@ -78,6 +40,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/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/MeFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/main/MeFragment.kt index f0e6ffd6e4c7..57d422ddb276 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 @@ -43,7 +43,6 @@ import org.wordpress.android.fluxc.store.AccountStore.OnAccountChanged import org.wordpress.android.fluxc.store.PostStore import org.wordpress.android.fluxc.store.SiteStore import org.wordpress.android.fluxc.utils.AppLogWrapper -import org.wordpress.android.models.JetpackPoweredScreen import org.wordpress.android.ui.ActivityLauncher import org.wordpress.android.ui.ActivityNavigator import org.wordpress.android.ui.accounts.login.WPcomLoginHelper @@ -60,13 +59,11 @@ import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFra import org.wordpress.android.ui.notifications.utils.NotificationsUtils import org.wordpress.android.ui.prefs.AppPrefsWrapper import org.wordpress.android.ui.prefs.experimentalfeatures.ExperimentalFeatures -import org.wordpress.android.ui.utils.UiHelpers import org.wordpress.android.ui.utils.UiString import org.wordpress.android.ui.utils.UiString.UiStringText import org.wordpress.android.util.AppLog import org.wordpress.android.util.AppLog.T.MAIN import org.wordpress.android.util.FluxCUtils -import org.wordpress.android.util.JetpackBrandingUtils import org.wordpress.android.util.PackageManagerWrapper import org.wordpress.android.util.SnackbarItem import org.wordpress.android.util.SnackbarItem.Info @@ -115,18 +112,12 @@ class MeFragment : Fragment(R.layout.me_fragment), OnScrollToTopListener { @Inject lateinit var qrCodeAuthFlowFeatureConfig: QRCodeAuthFlowFeatureConfig - @Inject - lateinit var jetpackBrandingUtils: JetpackBrandingUtils - @Inject lateinit var packageManagerWrapper: PackageManagerWrapper @Inject lateinit var appPrefsWrapper: AppPrefsWrapper - @Inject - lateinit var uiHelpers: UiHelpers - @Inject lateinit var domainManagementFeatureConfig: DomainManagementFeatureConfig @@ -180,8 +171,6 @@ class MeFragment : Fragment(R.layout.me_fragment), OnScrollToTopListener { appbarMain.visibility = View.GONE } - addJetpackBadgeIfNeeded() - val showPickerListener = OnClickListener { AnalyticsTracker.track(ME_GRAVATAR_TAPPED) showAvatarPicker() @@ -356,23 +345,6 @@ class MeFragment : Fragment(R.layout.me_fragment), OnScrollToTopListener { } } - private fun MeFragmentBinding.addJetpackBadgeIfNeeded() { - if (jetpackBrandingUtils.shouldShowJetpackBranding()) { - val screen = JetpackPoweredScreen.WithStaticText.ME - jetpackBadge.isVisible = true - jetpackBadge.text = uiHelpers.getTextOfUiString( - requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) - ) - if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - jetpackBadge.setOnClickListener { - jetpackBrandingUtils.trackBadgeTapped(screen) - viewModel.showJetpackPoweredBottomSheet() - } - } - } - } - private fun MeFragmentBinding.setupObservers(savedInstanceState: Bundle?) { if (savedInstanceState != null) { if (savedInstanceState.getBoolean(IS_DISCONNECTING, false)) { 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..32d5244a6316 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 @@ -88,7 +88,7 @@ import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureFullScreenOverlayFragment; import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil; import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureCollectionOverlaySource; -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper; +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper; import org.wordpress.android.ui.main.MainActionListItem.ActionType; import org.wordpress.android.ui.main.WPMainNavigationView.OnPageListener; import org.wordpress.android.ui.main.WPMainNavigationView.PageType; @@ -262,7 +262,7 @@ public class WPMainActivity extends BaseAppCompatActivity implements @Inject OpenWebLinksWithJetpackFlowFeatureConfig mOpenWebLinksWithJetpackFlowFeatureConfig; @Inject QRCodeAuthFlowFeatureConfig mQrCodeAuthFlowFeatureConfig; @Inject JetpackFeatureRemovalOverlayUtil mJetpackFeatureRemovalOverlayUtil; - @Inject JetpackFeatureRemovalPhaseHelper mJetpackFeatureRemovalPhaseHelper; + @Inject JetpackFeatureRemovalHelper mJetpackFeatureRemovalHelper; @Inject BuildConfigWrapper mBuildConfigWrapper; @@ -323,7 +323,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { String authTokenToSet = null; mBottomNav = findViewById(R.id.bottom_navigation); - mBottomNav.init(getSupportFragmentManager(), this, mJetpackFeatureRemovalPhaseHelper); + mBottomNav.init(getSupportFragmentManager(), this, mJetpackFeatureRemovalHelper); if (savedInstanceState == null) { if (!AppPrefs.isInstallationReferrerObtained()) { @@ -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); } @@ -763,7 +759,7 @@ private void initViewModel() { private void triggerCreatePageFlow(ActionType actionType) { if (mMLPViewModel.canShowModalLayoutPicker() - && mJetpackFeatureRemovalPhaseHelper.shouldShowTemplateSelectionInPages()) { + && mJetpackFeatureRemovalHelper.shouldShowTemplateSelectionInPages()) { mMLPViewModel.createPageFlowTriggered(getCreatePageDashboardSourceFromActionType(actionType)); } else { if (actionType == ActionType.CREATE_NEW_PAGE_FROM_PAGES_CARD) { @@ -812,7 +808,7 @@ private void handleOpenPageIntent(@NonNull Intent intent) { break; case ARG_NOTIFICATIONS: setUpMainView(); - if (mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { + if (mJetpackFeatureRemovalHelper.shouldRemoveJetpackFeatures()) { Map trackingProperties = new HashMap<>(); trackingProperties.put("calling_function", "deeplink_notifications"); showJetpackFeatureOverlayAccessedInCorrectly(trackingProperties); @@ -822,7 +818,7 @@ private void handleOpenPageIntent(@NonNull Intent intent) { break; case ARG_READER: setUpMainView(); - if (mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { + if (mJetpackFeatureRemovalHelper.shouldRemoveJetpackFeatures()) { Map trackingProperties = new HashMap<>(); trackingProperties.put("calling_function", "deeplink_reader"); showJetpackFeatureOverlayAccessedInCorrectly(trackingProperties); @@ -849,16 +845,12 @@ private void handleOpenPageIntent(@NonNull Intent intent) { if (!mSelectedSiteRepository.hasSelectedSite()) { initSelectedSite(); } - if (mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { + if (mJetpackFeatureRemovalHelper.shouldRemoveJetpackFeatures()) { Map trackingProperties = new HashMap<>(); trackingProperties.put("calling_function", "deeplink_stats"); showJetpackFeatureOverlayAccessedInCorrectly(trackingProperties); break; } - if (mJetpackFeatureRemovalPhaseHelper.shouldShowStaticPage()) { - ActivityLauncher.showJetpackStaticPoster(this); - break; - } mActivityNavigator.openStats(this, getSelectedSite(), (StatsTimeframe) intent.getSerializableExtra(ARG_STATS_TIMEFRAME)); break; @@ -1218,19 +1210,19 @@ private void trackLastVisiblePage(@NonNull final PageType pageType) { switch (pageType) { case MY_SITE: ActivityId.trackLastActivity(ActivityId.MY_SITE); - mJetpackFeatureRemovalPhaseHelper.trackPageAccessedEventIfNeeded(PageType.MY_SITE, getSelectedSite()); + mJetpackFeatureRemovalHelper.trackPageAccessedEventIfNeeded(PageType.MY_SITE, getSelectedSite()); break; case READER: ActivityId.trackLastActivity(ActivityId.READER); - mJetpackFeatureRemovalPhaseHelper.trackPageAccessedEventIfNeeded(PageType.READER); + mJetpackFeatureRemovalHelper.trackPageAccessedEventIfNeeded(PageType.READER); break; case NOTIFS: ActivityId.trackLastActivity(ActivityId.NOTIFICATIONS); - mJetpackFeatureRemovalPhaseHelper.trackPageAccessedEventIfNeeded(PageType.NOTIFS); + mJetpackFeatureRemovalHelper.trackPageAccessedEventIfNeeded(PageType.NOTIFS); break; case ME: ActivityId.trackLastActivity(ActivityId.ME); - mJetpackFeatureRemovalPhaseHelper.trackPageAccessedEventIfNeeded(PageType.ME); + mJetpackFeatureRemovalHelper.trackPageAccessedEventIfNeeded(PageType.ME); break; default: 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..83ac852cc21e 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 @@ -32,14 +32,12 @@ import org.wordpress.android.R import org.wordpress.android.WordPress import org.wordpress.android.datasets.ReaderDatabase import org.wordpress.android.fluxc.store.AccountStore -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.main.WPMainActivity.OnScrollToTopListener 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 @@ -72,7 +70,7 @@ class WPMainNavigationView @JvmOverloads constructor( private var fragmentManager: FragmentManager? = null private lateinit var pageListener: OnPageListener private var prevPosition = -1 - private lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + private lateinit var jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper private val unselectedButtonAlpha = ResourcesCompat.getFloat( resources, MaterialR.dimen.material_emphasis_disabled @@ -109,10 +107,10 @@ class WPMainNavigationView @JvmOverloads constructor( fun onNewPostButtonClicked(promptId: Int, origin: EntryPoint) } - fun init(fm: FragmentManager, listener: OnPageListener, helper: JetpackFeatureRemovalPhaseHelper) { + fun init(fm: FragmentManager, listener: OnPageListener, helper: JetpackFeatureRemovalHelper) { fragmentManager = fm pageListener = listener - jetpackFeatureRemovalPhaseHelper = helper + jetpackFeatureRemovalHelper = helper val inflater = LayoutInflater.from(context) inflater.inflate(R.layout.main_navigation_view, this, true) @@ -215,7 +213,7 @@ class WPMainNavigationView @JvmOverloads constructor( } private fun getMainPageIndex(): Int { - return if (jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) 0 + return if (jetpackFeatureRemovalHelper.shouldRemoveJetpackFeatures()) 0 else AppPrefs.getMainPageIndex(numPages() - 1) } @@ -332,7 +330,7 @@ class WPMainNavigationView @JvmOverloads constructor( setImageViewSelected(position, true) - if (jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) + if (jetpackFeatureRemovalHelper.shouldRemoveJetpackFeatures()) AppPrefs.setMainPageIndex(0) else AppPrefs.setMainPageIndex(position) @@ -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/media/MediaBrowserActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/media/MediaBrowserActivity.java index 51335175611e..9a7124acc522 100755 --- a/WordPress/src/main/java/org/wordpress/android/ui/media/MediaBrowserActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/media/MediaBrowserActivity.java @@ -65,7 +65,7 @@ import org.wordpress.android.ui.ActivityId; import org.wordpress.android.ui.ActivityNavigator; import org.wordpress.android.ui.RequestCodes; -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper; +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper; import org.wordpress.android.ui.main.BaseAppCompatActivity; import org.wordpress.android.ui.media.MediaGridFragment.MediaFilter; import org.wordpress.android.ui.media.MediaGridFragment.MediaGridListener; @@ -127,7 +127,7 @@ public class MediaBrowserActivity extends BaseAppCompatActivity implements Media @Inject MediaPickerLauncher mMediaPickerLauncher; @Inject MediaUtilsWrapper mMediaUtilsWrapper; @Inject SelectedSiteRepository mSelectedSiteRepository; - @Inject JetpackFeatureRemovalPhaseHelper mJetpackFeatureRemovalPhaseHelper; + @Inject JetpackFeatureRemovalHelper mJetpackFeatureRemovalHelper; @Inject ActivityNavigator mActivityNavigator; @Inject WpAppNotifierHandler mWpAppNotifierHandler; @@ -990,7 +990,7 @@ public void showAddMediaPopup() { }); if (mBrowserType.isBrowser() && mSite.isUsingWpComRestApi() - && !mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { + && !mJetpackFeatureRemovalHelper.shouldRemoveJetpackFeatures()) { popup.getMenu().add(R.string.photo_picker_stock_media).setOnMenuItemClickListener( item -> { doAddMediaItemClicked(AddMenuItem.ITEM_CHOOSE_STOCK_MEDIA); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/AccountDataViewModelSlice.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/AccountDataViewModelSlice.kt index 555bb411a5d2..a175252995dc 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/AccountDataViewModelSlice.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/AccountDataViewModelSlice.kt @@ -6,7 +6,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.cancel import kotlinx.coroutines.launch import org.wordpress.android.fluxc.store.AccountStore -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.mysite.MySiteUiState.PartialState.AccountData import org.wordpress.android.util.BuildConfigWrapper import javax.inject.Inject @@ -14,7 +14,7 @@ import javax.inject.Inject class AccountDataViewModelSlice @Inject constructor( private val accountStore: AccountStore, private val buildConfigWrapper: BuildConfigWrapper, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + private val jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper ) { private lateinit var scope: CoroutineScope @@ -56,6 +56,6 @@ class AccountDataViewModelSlice @Inject constructor( private fun shouldBuildCard(): Boolean { return (!buildConfigWrapper.isJetpackApp - && jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) + && jetpackFeatureRemovalHelper.shouldRemoveJetpackFeatures()) } } 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..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 @@ -30,7 +29,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 @@ -46,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 @@ -58,7 +55,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,10 +113,8 @@ 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) MySiteCardAndItem.Type.JETPACK_INSTALL_FULL_PLUGIN_CARD.ordinal -> JetpackInstallFullPluginCardViewHolder( parent ) @@ -142,7 +136,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) @@ -156,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 c86cd26dbe70..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 @@ -26,7 +25,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,14 +50,12 @@ 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 } 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 4589826e8ed5..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 @@ -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,10 +46,8 @@ 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, JETPACK_INSTALL_FULL_PLUGIN_CARD, NO_CARDS_MESSAGE, PERSONALIZE_CARD, @@ -100,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, @@ -404,9 +394,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..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, @@ -802,10 +799,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/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..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 ) { @@ -50,10 +48,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..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 @@ -55,15 +53,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 +83,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/mysite/cards/jetpackfeature/JetpackFeatureCardHelper.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/jetpackfeature/JetpackFeatureCardHelper.kt index facdd574a1c9..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,11 +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.JetpackFeatureRemovalPhase.PhaseThree -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 @@ -21,60 +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 PhaseThree, PhaseSelfHostedUsers -> true - else -> false - } - } - - private fun shouldShowJetpackFeatureCardInCurrentPhase(): Boolean { - return when (jetpackFeatureRemovalPhaseHelper.getCurrentPhase()) { - is PhaseThree, 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 - } - } + 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) ) } @@ -92,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) @@ -104,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 6e3f7b9cb5af..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,10 +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.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 import org.wordpress.android.util.merge @@ -23,11 +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 jetpackBadgeViewModelSlice: JetpackBadgeViewModelSlice, private val siteItemsViewModelSlice: SiteItemsViewModelSlice, - private val sotw2023NudgeCardViewModelSlice: WpSotw2023NudgeCardViewModelSlice, - private val jetpackFeatureCardHelper: JetpackFeatureCardHelper + private val sotw2023NudgeCardViewModelSlice: WpSotw2023NudgeCardViewModelSlice ) { private lateinit var scope: CoroutineScope @@ -42,23 +36,17 @@ class DashboardItemsViewModelSlice @Inject constructor( val onNavigation = merge( jetpackFeatureCardViewModelSlice.onNavigation, - jetpackSwitchMenuViewModelSlice.onNavigation, - jetpackBadgeViewModelSlice.onNavigation, siteItemsViewModelSlice.onNavigation, sotw2023NudgeCardViewModelSlice.onNavigation ) val uiModel: MutableLiveData> = merge( jetpackFeatureCardViewModelSlice.uiModel, - jetpackSwitchMenuViewModelSlice.uiModel, - jetpackBadgeViewModelSlice.uiModel, siteItemsViewModelSlice.uiModel, sotw2023NudgeCardViewModelSlice.uiModel - ) { jetpackFeatureCard, jetpackSwitchMenu, jetpackBadge, siteItems, sotw2023NudgeCard -> + ) { jetpackFeatureCard, siteItems, sotw2023NudgeCard -> mergeUiModels( jetpackFeatureCard, - jetpackSwitchMenu, - jetpackBadge, siteItems, sotw2023NudgeCard ) @@ -73,8 +61,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 { @@ -82,11 +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) } - jetpackBadge?.let { add(jetpackBadge) } + jetpackFeatureCard?.let { add(0, it) } }.toList() if(dasbhboardSiteItems.isNotEmpty()) trackShown(dasbhboardSiteItems) return dasbhboardSiteItems @@ -97,8 +79,6 @@ class DashboardItemsViewModelSlice @Inject constructor( job = scope.launch(bgDispatcher) { _isRefreshing.postValue(true) jetpackFeatureCardViewModelSlice.buildJetpackFeatureCard() - jetpackSwitchMenuViewModelSlice.buildJetpackSwitchMenu() - jetpackBadgeViewModelSlice.buildJetpackBadge() siteItemsViewModelSlice.buildSiteItems(site) sotw2023NudgeCardViewModelSlice.buildCard() _isRefreshing.postValue(false) @@ -107,8 +87,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/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/mysite/items/listitem/SiteListItemBuilder.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteListItemBuilder.kt index 489642f31234..7c0d14e82491 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteListItemBuilder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteListItemBuilder.kt @@ -4,7 +4,7 @@ import org.wordpress.android.BuildConfig import org.wordpress.android.R import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.store.AccountStore -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.mysite.MySiteCardAndItem import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.ListItem import org.wordpress.android.ui.mysite.MySiteViewModel @@ -41,7 +41,7 @@ class SiteListItemBuilder @Inject constructor( private val siteUtilsWrapper: SiteUtilsWrapper, private val buildConfigWrapper: BuildConfigWrapper, private val themeBrowserUtils: ThemeBrowserUtils, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper, + private val jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper, private val siteMonitoringFeatureConfig: SiteMonitoringFeatureConfig, private val selfHostedUsersFeatureConfig: SelfHostedUsersFeatureConfig, private val siteCapabilityChecker: SiteCapabilityChecker @@ -200,12 +200,11 @@ class SiteListItemBuilder @Inject constructor( * exactly the same condition WPMainActivity uses to hide it. Me is account-level, so site * capabilities deliberately play no part here. * - * No explicit Jetpack app check is needed: [JetpackFeatureRemovalPhaseHelper.getCurrentPhase] - * returns null there, so [JetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures] is - * always false and the item never builds. + * No explicit Jetpack app check is needed: [JetpackFeatureRemovalHelper.shouldRemoveJetpackFeatures] + * is false in the Jetpack app, so the item never builds there. */ fun buildMeItemIfAvailable(onClick: (ListItemAction) -> Unit): ListItem? { - return if (jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { + return if (jetpackFeatureRemovalHelper.shouldRemoveJetpackFeatures()) { ListItem( R.drawable.ic_user_primary_white_24, UiStringRes(R.string.me), 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..3a05c1628791 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 @@ -38,15 +38,12 @@ import org.wordpress.android.analytics.AnalyticsTracker.Stat.NOTIFICATION_TAPPED import org.wordpress.android.databinding.NotificationsListFragmentBinding import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.store.AccountStore -import org.wordpress.android.models.JetpackPoweredScreen import org.wordpress.android.ui.ActivityLauncher import org.wordpress.android.ui.JetpackConnectionSource.NOTIFICATIONS 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.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureOverlayScreenType import org.wordpress.android.ui.jetpackrestconnection.JetpackRestConnectionActivity import org.wordpress.android.ui.jetpackrestconnection.JetpackRestConnectionViewModel import org.wordpress.android.ui.main.WPMainActivity @@ -60,8 +57,6 @@ import org.wordpress.android.ui.notifications.adapters.Filter import org.wordpress.android.ui.notifications.services.NotificationsUpdateServiceStarter import org.wordpress.android.ui.notifications.services.NotificationsUpdateServiceStarter.IS_TAPPED_ON_NOTIFICATION import org.wordpress.android.ui.stats.StatsConnectJetpackActivity -import org.wordpress.android.ui.utils.UiHelpers -import org.wordpress.android.util.JetpackBrandingUtils import org.wordpress.android.util.PermissionUtils import org.wordpress.android.util.WPPermissionUtils import org.wordpress.android.util.WPPermissionUtils.NOTIFICATIONS_PERMISSION_REQUEST_CODE @@ -77,12 +72,6 @@ class NotificationsListFragment : Fragment(R.layout.notifications_list_fragment) @Inject lateinit var accountStore: AccountStore - @Inject - lateinit var jetpackBrandingUtils: JetpackBrandingUtils - - @Inject - lateinit var uiHelpers: UiHelpers - @Inject lateinit var analyticsTrackerWrapper: AnalyticsTrackerWrapper @@ -147,13 +136,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 +161,6 @@ class NotificationsListFragment : Fragment(R.layout.notifications_list_fragment) setSelectedTab(lastTabPosition) setNotificationPermissionWarning() } - viewModel.onResume() } private fun fetchRemoteNotes() { @@ -409,30 +390,6 @@ class NotificationsListFragment : Fragment(R.layout.notifications_list_fragment) override fun onScrollableViewInitialized(containerId: Int) { this.containerId = containerId binding?.appBar?.setLiftOnScrollTargetViewIdAndRequestLayout(containerId) - if (jetpackBrandingUtils.shouldShowJetpackBranding()) { - val screen = JetpackPoweredScreen.WithDynamicText.NOTIFICATIONS - binding?.root?.post { - // post is used to create a minimal delay here. containerId changes just before - // onScrollableViewInitialized is called, and findViewById can't find the new id before the delay. - val jetpackBannerView = binding?.jetpackBanner?.root ?: return@post - val scrollableView = getRecyclerViewById() ?: return@post - jetpackBrandingUtils.showJetpackBannerIfScrolledToTop(jetpackBannerView, scrollableView) - jetpackBrandingUtils.initJetpackBannerAnimation(jetpackBannerView, scrollableView) - binding?.jetpackBanner?.jetpackBannerText?.text = uiHelpers.getTextOfUiString( - requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) - ) - - if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - jetpackBannerView.setOnClickListener { - jetpackBrandingUtils.trackBannerTapped(screen) - JetpackPoweredBottomSheetFragment - .newInstance() - .show(childFragmentManager, JetpackPoweredBottomSheetFragment.TAG) - } - } - } - } } private fun getRecyclerViewById() = 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..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 @@ -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,9 +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 +68,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/pages/PagesFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt index ee9d7b49b257..ab99219cda65 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt @@ -42,7 +42,7 @@ import org.wordpress.android.ui.RequestCodes import org.wordpress.android.ui.ScrollableViewInitializedListener import org.wordpress.android.ui.WPWebViewActivity import org.wordpress.android.ui.blaze.BlazeFlowSource -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.mlp.ModalLayoutPickerFragment import org.wordpress.android.ui.mlp.ModalLayoutPickerFragment.Companion.MODAL_LAYOUT_PICKER_TAG import org.wordpress.android.ui.posts.EditorConstants @@ -122,7 +122,7 @@ class PagesFragment : Fragment(R.layout.pages_fragment), ScrollableViewInitializ lateinit var uploadUtilsWrapper: UploadUtilsWrapper @Inject - lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + lateinit var jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper @Suppress("DEPRECATION") private var progressDialog: ProgressDialog? = null @@ -375,7 +375,7 @@ class PagesFragment : Fragment(R.layout.pages_fragment), ScrollableViewInitializ viewModel.createNewPage.observe(viewLifecycleOwner) { if (mlpViewModel.canShowModalLayoutPicker() - && jetpackFeatureRemovalPhaseHelper.shouldShowTemplateSelectionInPages() + && jetpackFeatureRemovalHelper.shouldShowTemplateSelectionInPages() ) { mlpViewModel.createPageFlowTriggered() } else { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/pagesrs/PagesRsListActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/pagesrs/PagesRsListActivity.kt index 78a85f670962..513a6d70ff78 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/pagesrs/PagesRsListActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/pagesrs/PagesRsListActivity.kt @@ -21,7 +21,7 @@ import org.wordpress.android.ui.PagePostCreationSourcesDetail.PAGE_FROM_PAGES_LI import org.wordpress.android.ui.WPWebViewActivity import org.wordpress.android.ui.blaze.BlazeFlowSource import org.wordpress.android.ui.compose.theme.AppThemeM3 -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.main.BaseAppCompatActivity import org.wordpress.android.ui.mlp.ModalLayoutPickerFragment import org.wordpress.android.ui.mlp.ModalLayoutPickerFragment.Companion.MODAL_LAYOUT_PICKER_TAG @@ -37,7 +37,7 @@ import javax.inject.Inject @AndroidEntryPoint class PagesRsListActivity : BaseAppCompatActivity() { @Inject lateinit var viewModelFactory: ViewModelProvider.Factory - @Inject lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + @Inject lateinit var jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper private val viewModel: PagesRsListViewModel by viewModels() private lateinit var mlpViewModel: ModalLayoutPickerViewModel @@ -141,7 +141,7 @@ class PagesRsListActivity : BaseAppCompatActivity() { private fun startCreatePageFlow() { if (mlpViewModel.canShowModalLayoutPicker() && - jetpackFeatureRemovalPhaseHelper.shouldShowTemplateSelectionInPages() + jetpackFeatureRemovalHelper.shouldShowTemplateSelectionInPages() ) { mlpViewModel.createPageFlowTriggered() } else { 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..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 @@ -28,14 +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; import org.wordpress.android.util.WPAvatarUtils; import org.wordpress.android.util.image.ImageManager; @@ -60,8 +56,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 +125,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.shouldShowJetpackBrandingForPhaseTwo()) { - 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)) - ); - 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 f5855a315849..ddfa3186d11c 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,14 +25,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.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; -import org.wordpress.android.util.JetpackBrandingUtils; import org.wordpress.android.util.image.ImageManager; import org.wordpress.android.util.image.ImageType; @@ -65,8 +61,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, Person.PersonType personType) { @@ -144,27 +138,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa setHasOptionsMenu(true); } - if (mJetpackBrandingUtils.shouldShowJetpackBrandingForPhaseTwo()) { - 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)) - ); - - 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/posts/EditPostActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostActivity.kt index bc55d8463056..4d10b46e74e2 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostActivity.kt @@ -132,7 +132,7 @@ import org.wordpress.android.ui.Shortcut import org.wordpress.android.ui.WPWebViewActivity import org.wordpress.android.ui.history.HistoryDetailContainerFragment.KEY_REVISION import org.wordpress.android.ui.history.HistoryListItem.Revision -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.main.BaseAppCompatActivity import org.wordpress.android.ui.media.MediaBrowserActivity import org.wordpress.android.ui.media.MediaBrowserType @@ -399,7 +399,7 @@ class EditPostActivity : BaseAppCompatActivity(), EditorFragmentActivity, Editor @Inject lateinit var bloggingPromptsStore: BloggingPromptsStore - @Inject lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + @Inject lateinit var jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper @Inject lateinit var contactSupportFeatureConfig: ContactSupportFeatureConfig @@ -1533,7 +1533,7 @@ class EditPostActivity : BaseAppCompatActivity(), EditorFragmentActivity, Editor if (helpMenuItem != null) { // Support section will be disabled in WordPress app when Jetpack-powered features are removed. // Therefore, we have to update the Help menu item accordingly. - val showHelpAndSupport = jetpackFeatureRemovalPhaseHelper.shouldShowHelpAndSupportOnEditor() + val showHelpAndSupport = jetpackFeatureRemovalHelper.shouldShowHelpAndSupportOnEditor() val helpMenuTitle = if (showHelpAndSupport) R.string.help_and_support else R.string.help helpMenuItem.setTitle(helpMenuTitle) if (editorFragment is GutenbergEditorFragment && showMenuItems) { @@ -2442,7 +2442,7 @@ class EditPostActivity : BaseAppCompatActivity(), EditorFragmentActivity, Editor isNewPost, gutenbergWebViewAuthorizationData, gutenbergPropsBuilder, - jetpackFeatureRemovalPhaseHelper.shouldShowJetpackPoweredEditorFeatures() + jetpackFeatureRemovalHelper.shouldShowJetpackPoweredEditorFeatures() ) } @@ -2503,7 +2503,7 @@ class EditPostActivity : BaseAppCompatActivity(), EditorFragmentActivity, Editor val hostAppNamespace = if (buildConfigWrapper.isJetpackApp) "Jetpack" else "WordPress" // Disable Jetpack-powered editor features in WordPress app based on Jetpack Features Removal Phase helper - val jetpackFeaturesRemoved = !jetpackFeatureRemovalPhaseHelper.shouldShowJetpackPoweredEditorFeatures() + val jetpackFeaturesRemoved = !jetpackFeatureRemovalHelper.shouldShowJetpackPoweredEditorFeatures() if (jetpackFeaturesRemoved) { return GutenbergPropsBuilder( enableContactInfoBlock = false, diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/GutenbergKitActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/posts/GutenbergKitActivity.kt index 8af182756744..66ce7535fbcc 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/posts/GutenbergKitActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/GutenbergKitActivity.kt @@ -121,7 +121,7 @@ import org.wordpress.android.ui.Shortcut import org.wordpress.android.ui.WPWebViewActivity import org.wordpress.android.ui.history.HistoryDetailContainerFragment.KEY_REVISION import org.wordpress.android.ui.history.HistoryListItem.Revision -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.main.BaseAppCompatActivity import org.wordpress.android.ui.media.MediaBrowserActivity import org.wordpress.android.ui.media.MediaBrowserType @@ -372,7 +372,7 @@ class GutenbergKitActivity : BaseAppCompatActivity(), EditorImageSettingsListene @Inject lateinit var bloggingPromptsStore: BloggingPromptsStore - @Inject lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + @Inject lateinit var jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper @Inject lateinit var contactSupportFeatureConfig: ContactSupportFeatureConfig diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/PublishNotificationReceiver.kt b/WordPress/src/main/java/org/wordpress/android/ui/posts/PublishNotificationReceiver.kt index 8fd22fe37712..cab78bc4ff32 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/posts/PublishNotificationReceiver.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/PublishNotificationReceiver.kt @@ -8,7 +8,7 @@ import org.wordpress.android.R import org.wordpress.android.WordPress import org.wordpress.android.push.NotificationType import org.wordpress.android.push.NotificationsProcessingService -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.notifications.NotificationManagerWrapper import org.wordpress.android.ui.notifications.SystemNotificationsTracker import javax.inject.Inject @@ -21,14 +21,14 @@ class PublishNotificationReceiver : BroadcastReceiver() { lateinit var systemNotificationsTracker: SystemNotificationsTracker @Inject - lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + lateinit var jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper @Inject lateinit var notificationManagerWrapper: NotificationManagerWrapper override fun onReceive(context: Context, intent: Intent) { (context.applicationContext as WordPress).component().inject(this) - if(!jetpackFeatureRemovalPhaseHelper.shouldShowNotifications()) + if(!jetpackFeatureRemovalHelper.shouldShowNotifications()) return val notificationId = intent.getIntExtra(NOTIFICATION_ID, 0) val uiModel = publishNotificationReceiverViewModel.loadNotification(notificationId) 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..b9e0e1be8e39 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.JetpackFeatureRemovalHelperKt; import org.wordpress.android.ui.mysite.SelectedSiteRepository; import org.wordpress.android.ui.mysite.tabs.MySiteTabType; import org.wordpress.android.ui.posts.AuthorFilterSelection; @@ -179,8 +179,6 @@ public enum DeletablePrefKey implements PrefKey { OPEN_WEB_LINKS_WITH_JETPACK, SHOULD_HIDE_JETPACK_FEATURE_CARD, JETPACK_FEATURE_CARD_LAST_SHOWN_TIMESTAMP, - SWITCH_TO_JETPACK_MENU_CARD_SHOWN_TIMESTAMP, - SHOULD_HIDE_SWITCH_TO_JETPACK_MENU_CARD, SHOULD_HIDE_JETPACK_INSTALL_FULL_PLUGIN_CARD, SHOULD_SHOW_JETPACK_FULL_PLUGIN_INSTALL_ONBOARDING, SHOULD_HIDE_PROMOTE_WITH_BLAZE_CARD, @@ -1641,51 +1639,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() + + JetpackFeatureRemovalHelperKt.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() + + JetpackFeatureRemovalHelperKt.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/ui/prefs/AppSettingsFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/prefs/AppSettingsFragment.java index 2bc319f1c6c2..bbc48e885f48 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 @@ -32,7 +32,6 @@ import org.wordpress.android.WordPress; import org.wordpress.android.analytics.AnalyticsTracker; import org.wordpress.android.analytics.AnalyticsTracker.Stat; -import org.wordpress.android.databinding.JetpackBadgeFooterBinding; import org.wordpress.android.fluxc.Dispatcher; import org.wordpress.android.fluxc.action.AccountAction; import org.wordpress.android.fluxc.generated.AccountActionBuilder; @@ -44,19 +43,15 @@ import org.wordpress.android.fluxc.store.WhatsNewStore.OnWhatsNewFetched; import org.wordpress.android.fluxc.store.WhatsNewStore.WhatsNewAppId; import org.wordpress.android.fluxc.store.WhatsNewStore.WhatsNewFetchPayload; -import org.wordpress.android.models.JetpackPoweredScreen; import org.wordpress.android.ui.deeplinks.DeepLinkOpenWebLinksWithJetpackHelper; -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper; -import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment; +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper; import org.wordpress.android.ui.prefs.language.LocalePickerBottomSheet; import org.wordpress.android.ui.prefs.language.LocalePickerBottomSheet.LocalePickerCallback; -import org.wordpress.android.ui.utils.UiHelpers; import org.wordpress.android.ui.whatsnew.FeatureAnnouncementDialogFragment; import org.wordpress.android.ui.whatsnew.FeatureAnnouncementProvider; import org.wordpress.android.util.AppLog; import org.wordpress.android.util.AppThemeUtils; import org.wordpress.android.util.BuildConfigWrapper; -import org.wordpress.android.util.JetpackBrandingUtils; import org.wordpress.android.util.NetworkUtils; import org.wordpress.android.util.PerAppLocaleManager; import org.wordpress.android.util.ToastUtils; @@ -101,10 +96,8 @@ public class AppSettingsFragment extends PreferenceFragment @Inject ContextProvider mContextProvider; @Inject FeatureAnnouncementProvider mFeatureAnnouncementProvider; @Inject BuildConfigWrapper mBuildConfigWrapper; - @Inject JetpackBrandingUtils mJetpackBrandingUtils; @Inject DeepLinkOpenWebLinksWithJetpackHelper mOpenWebLinksWithJetpackHelper; - @Inject UiHelpers mUiHelpers; - @Inject JetpackFeatureRemovalPhaseHelper mJetpackFeatureRemovalPhaseHelper; + @Inject JetpackFeatureRemovalHelper mJetpackFeatureRemovalHelper; @Inject PerAppLocaleManager mPerAppLocaleManager; private static final String TRACK_STYLE = "style"; @@ -242,7 +235,6 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, final ListView listOfPreferences = view.findViewById(android.R.id.list); if (listOfPreferences != null) { ViewCompat.setNestedScrollingEnabled(listOfPreferences, true); - addJetpackBadgeAsFooterIfEnabled(inflater, listOfPreferences); } mLanguagePreference = (WPPreference) findPreference(getString(R.string.pref_key_language)); @@ -258,29 +250,6 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, addPrivacyToolbar(); } - private void addJetpackBadgeAsFooterIfEnabled(LayoutInflater inflater, ListView listView) { - if (mJetpackBrandingUtils.shouldShowJetpackBranding()) { - final JetpackPoweredScreen screen = JetpackPoweredScreen.WithStaticText.APP_SETTINGS; - final JetpackBadgeFooterBinding binding = JetpackBadgeFooterBinding.inflate(inflater); - binding.footerJetpackBadge.jetpackPoweredBadge.setText( - mUiHelpers.getTextOfUiString( - getContext(), - mJetpackBrandingUtils.getBrandingTextForScreen(screen) - ) - ); - - if (mJetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - binding.footerJetpackBadge.jetpackPoweredBadge.setOnClickListener(v -> { - mJetpackBrandingUtils.trackBadgeTapped(screen); - new JetpackPoweredBottomSheetFragment().show( - ((AppCompatActivity) getActivity()).getSupportFragmentManager(), - JetpackPoweredBottomSheetFragment.TAG); - }); - } - listView.addFooterView(binding.getRoot(), null, false); - } - } - private void removeExperimentalCategory() { PreferenceCategory experimentalPreferenceCategory = (PreferenceCategory) findPreference(getString(R.string.pref_key_experimental_section)); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/prefs/SiteSettingsFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/prefs/SiteSettingsFragment.java index 5b553bc3adc6..41881be36799 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/prefs/SiteSettingsFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/prefs/SiteSettingsFragment.java @@ -78,7 +78,7 @@ import org.wordpress.android.ui.bloggingprompts.BloggingPromptsSettingsHelper; import org.wordpress.android.ui.bloggingreminders.BloggingReminderUtils; import org.wordpress.android.ui.bloggingreminders.BloggingRemindersViewModel; -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper; +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper; import org.wordpress.android.util.PlansConstants; import org.wordpress.android.ui.posts.EditorCapabilityResolver; import org.wordpress.android.ui.posts.EditorCapabilityState; @@ -195,7 +195,7 @@ public class SiteSettingsFragment extends PreferenceFragment @Inject BloggingPromptsFeature mBloggingPromptsFeature; @Inject ManageCategoriesFeatureConfig mManageCategoriesFeatureConfig; @Inject UiHelpers mUiHelpers; - @Inject JetpackFeatureRemovalPhaseHelper mJetpackFeatureRemovalPhaseHelper; + @Inject JetpackFeatureRemovalHelper mJetpackFeatureRemovalHelper; @Inject BloggingPromptsSettingsHelper mPromptsSettingsHelper; @Inject EditorCapabilityResolver mEditorCapabilityResolver; @Inject GutenbergKitFeatureChecker mGutenbergKitFeatureChecker; @@ -1143,7 +1143,7 @@ public void initPreferences() { } // hide site accelerator jetpack settings if plugin version < 5.8 - if (mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures() || ( + if (mJetpackFeatureRemovalHelper.shouldRemoveJetpackFeatures() || ( !supportsJetpackSiteAcceleratorSettings(mSite) && mSite.getPlanId() != PlansConstants.BUSINESS_PLAN_ID)) { removeJetpackSiteAcceleratorSettings(); @@ -1166,7 +1166,7 @@ public void initPreferences() { if (!mManageCategoriesFeatureConfig.isEnabled()) { removeCategoriesPreference(); } - if (mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { + if (mJetpackFeatureRemovalHelper.shouldRemoveJetpackFeatures()) { WPPrefUtils.removePreference(this, R.string.pref_key_site_writing, R.string.pref_key_site_related_posts); WPPrefUtils.removePreference(this, R.string.pref_key_site_screen, 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..090270e5c158 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 @@ -14,7 +14,6 @@ import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.text.TextUtils; -import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -44,7 +43,6 @@ import org.wordpress.android.WordPress; import org.wordpress.android.analytics.AnalyticsTracker; import org.wordpress.android.analytics.AnalyticsTracker.Stat; -import org.wordpress.android.databinding.JetpackBadgeFooterBinding; import org.wordpress.android.datasets.ReaderBlogTable; import org.wordpress.android.fluxc.Dispatcher; import org.wordpress.android.fluxc.generated.AccountActionBuilder; @@ -58,14 +56,12 @@ import org.wordpress.android.fluxc.store.AccountStore.UpdateSubscriptionPayload; import org.wordpress.android.fluxc.store.AccountStore.UpdateSubscriptionPayload.SubscriptionFrequency; import org.wordpress.android.fluxc.store.SiteStore; -import org.wordpress.android.models.JetpackPoweredScreen; import org.wordpress.android.models.NotificationsSettings; import org.wordpress.android.models.NotificationsSettings.Channel; import org.wordpress.android.models.NotificationsSettings.Type; import org.wordpress.android.ui.WPLaunchActivity; import org.wordpress.android.ui.bloggingreminders.BloggingReminderUtils; import org.wordpress.android.ui.bloggingreminders.BloggingRemindersViewModel; -import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment; import org.wordpress.android.ui.notifications.NotificationEvents; import org.wordpress.android.ui.notifications.utils.NotificationsUtils; import org.wordpress.android.ui.prefs.notifications.FollowedBlogsProvider.PreferenceModel; @@ -76,7 +72,6 @@ import org.wordpress.android.util.AppLog; import org.wordpress.android.util.AppLog.T; import org.wordpress.android.util.BuildConfigWrapper; -import org.wordpress.android.util.JetpackBrandingUtils; import org.wordpress.android.util.SiteUtils; import org.wordpress.android.util.ToastUtils; import org.wordpress.android.util.ToastUtils.Duration; @@ -138,7 +133,6 @@ public class NotificationsSettingsFragment extends PreferenceFragment @Inject FollowedBlogsProvider mFollowedBlogsProvider; @Inject BuildConfigWrapper mBuildConfigWrapper; @Inject ViewModelProvider.Factory mViewModelFactory; - @Inject JetpackBrandingUtils mJetpackBrandingUtils; @Inject UiHelpers mUiHelpers; private BloggingRemindersViewModel mBloggingRemindersViewModel; @@ -218,7 +212,6 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { final ListView lv = (ListView) view.findViewById(android.R.id.list); if (lv != null) { ViewCompat.setNestedScrollingEnabled(lv, true); - addJetpackBadgeAsFooterIfEnabled(lv); } initBloggingReminders(); } @@ -230,30 +223,6 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { addToolbarToDialog(otherBlogsScreen); } - private void addJetpackBadgeAsFooterIfEnabled(ListView listView) { - if (mJetpackBrandingUtils.shouldShowJetpackBranding()) { - final JetpackPoweredScreen screen = JetpackPoweredScreen.WithDynamicText.NOTIFICATIONS_SETTINGS; - final Context context = getContext(); - final LayoutInflater inflater = LayoutInflater.from(context); - final JetpackBadgeFooterBinding binding = JetpackBadgeFooterBinding.inflate(inflater); - binding.footerJetpackBadge.jetpackPoweredBadge.setText( - mUiHelpers.getTextOfUiString( - context, - mJetpackBrandingUtils.getBrandingTextForScreen(screen) - ) - ); - if (mJetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - binding.footerJetpackBadge.jetpackPoweredBadge.setOnClickListener(v -> { - mJetpackBrandingUtils.trackBadgeTapped(screen); - new JetpackPoweredBottomSheetFragment().show( - ((AppCompatActivity) getActivity()).getSupportFragmentManager(), - JetpackPoweredBottomSheetFragment.TAG); - }); - } - listView.addFooterView(binding.getRoot(), null, false); - } - } - @Override public void onStart() { super.onStart(); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index 266ff9b3de4d..ba5a3df78502 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -33,7 +33,6 @@ import org.wordpress.android.ui.main.BaseAppCompatActivity; import org.wordpress.android.ui.publicize.PublicizeConstants.ConnectAction; import org.wordpress.android.ui.publicize.adapters.PublicizeServiceAdapter; -import org.wordpress.android.util.JetpackBrandingUtils; import org.wordpress.android.util.SiteUtils; import org.wordpress.android.util.ToastUtils; import org.wordpress.android.util.analytics.AnalyticsUtils; @@ -55,7 +54,6 @@ public class PublicizeListActivity extends BaseAppCompatActivity PublicizeListFragment.PublicizeButtonPrefsListener, ScrollableViewInitializedListener { private static final String WPCOM_CONNECTIONS_URL = "https://wordpress.com/marketing/connections/"; @Inject SiteStore mSiteStore; - @Inject JetpackBrandingUtils mJetpackBrandingUtils; private SiteModel mSite; private ProgressDialog mProgressDialog; private AppBarLayout mAppBarLayout; 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..07c0280da29d 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 @@ -17,11 +17,9 @@ import org.wordpress.android.WordPress; import org.wordpress.android.fluxc.model.SiteModel; import org.wordpress.android.fluxc.store.AccountStore; -import org.wordpress.android.models.JetpackPoweredScreen; import org.wordpress.android.models.PublicizeService; import org.wordpress.android.ui.ScrollableViewInitializedListener; import org.wordpress.android.ui.WPWebViewActivity; -import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment; import org.wordpress.android.ui.publicize.PublicizeListViewModel.ActionEvent; import org.wordpress.android.ui.publicize.PublicizeListViewModel.ActionEvent.OpenServiceDetails; import org.wordpress.android.ui.publicize.PublicizeListViewModel.UIState; @@ -30,8 +28,6 @@ import org.wordpress.android.ui.publicize.adapters.PublicizeServiceAdapter; import org.wordpress.android.ui.publicize.adapters.PublicizeServiceAdapter.OnAdapterLoadedListener; import org.wordpress.android.ui.publicize.adapters.PublicizeServiceAdapter.OnServiceClickListener; -import org.wordpress.android.ui.utils.UiHelpers; -import org.wordpress.android.util.JetpackBrandingUtils; import org.wordpress.android.util.NetworkUtils; import org.wordpress.android.util.SiteUtils; import org.wordpress.android.util.ToastUtils; @@ -57,8 +53,6 @@ public interface PublicizeButtonPrefsListener { private View mNestedScrollView; @Inject AccountStore mAccountStore; - @Inject JetpackBrandingUtils mJetpackBrandingUtils; - @Inject UiHelpers mUiHelpers; @Inject ImageManager mImageManager; @Inject ViewModelProvider.Factory mViewModelFactory; @Inject PublicizeTwitterDeprecationNoticeAnalyticsTracker mPublicizeTwitterDeprecationNoticeAnalyticsTracker; @@ -126,26 +120,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa manageContainer.setVisibility(View.GONE); } - if (mJetpackBrandingUtils.shouldShowJetpackBranding()) { - final JetpackPoweredScreen screen = JetpackPoweredScreen.WithDynamicText.SHARE; - TextView jetpackBadge = rootView.findViewById(R.id.jetpack_powered_badge); - jetpackBadge.setVisibility(View.VISIBLE); - jetpackBadge.setText( - mUiHelpers.getTextOfUiString( - requireContext(), - mJetpackBrandingUtils.getBrandingTextForScreen(screen) - ) - ); - - 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/reader/ReaderFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderFragment.kt index b86852b30956..b86862afb03a 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 @@ -16,16 +16,12 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelStoreOwner -import androidx.recyclerview.widget.RecyclerView import dagger.hilt.android.AndroidEntryPoint import org.wordpress.android.R import org.wordpress.android.databinding.ReaderFragmentLayoutBinding -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.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 @@ -52,7 +48,6 @@ import org.wordpress.android.ui.reader.viewmodels.ReaderViewModel.ReaderUiState. import org.wordpress.android.ui.reader.views.compose.ReaderTopAppBar import org.wordpress.android.ui.reader.views.compose.filter.ReaderFilterType import org.wordpress.android.ui.utils.UiHelpers -import org.wordpress.android.util.JetpackBrandingUtils import org.wordpress.android.util.NetworkUtils import org.wordpress.android.util.SnackbarSequencer import org.wordpress.android.viewmodel.Event @@ -70,9 +65,6 @@ class ReaderFragment : Fragment(R.layout.reader_fragment_layout), ScrollableView @Inject lateinit var uiHelpers: UiHelpers - @Inject - lateinit var jetpackBrandingUtils: JetpackBrandingUtils - @Inject lateinit var snackbarSequencer: SnackbarSequencer @@ -284,8 +276,6 @@ class ReaderFragment : Fragment(R.layout.reader_fragment_layout), ScrollableView .show(childFragmentManager, JetpackPoweredBottomSheetFragment.TAG) } - observeJetpackOverlayEvent(savedInstanceState) - viewModel.start(savedInstanceState) } @@ -333,15 +323,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] @@ -380,30 +361,6 @@ class ReaderFragment : Fragment(R.layout.reader_fragment_layout), ScrollableView override fun onScrollableViewInitialized(containerId: Int) { binding?.appBar?.liftOnScrollTargetViewId = containerId - if (jetpackBrandingUtils.shouldShowJetpackBranding()) { - val screen = JetpackPoweredScreen.WithDynamicText.READER - binding?.root?.post { - // post is used to create a minimal delay here. containerId changes just before - // onScrollableViewInitialized is called, and findViewById can't find the new id before the delay. - val jetpackBannerView = binding?.jetpackBanner?.root ?: return@post - val scrollableView = binding?.root?.findViewById(containerId) as? RecyclerView ?: return@post - jetpackBrandingUtils.showJetpackBannerIfScrolledToTop(jetpackBannerView, scrollableView) - jetpackBrandingUtils.initJetpackBannerAnimation(jetpackBannerView, scrollableView) - binding?.jetpackBanner?.jetpackBannerText?.text = uiHelpers.getTextOfUiString( - requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) - ) - - if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - jetpackBannerView.setOnClickListener { - jetpackBrandingUtils.trackBannerTapped(screen) - JetpackPoweredBottomSheetFragment - .newInstance() - .show(childFragmentManager, JetpackPoweredBottomSheetFragment.TAG) - } - } - } - } } private fun getCurrentFeedFragment(): Fragment? { 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..795a5ef9e97c 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 @@ -67,7 +67,6 @@ import org.wordpress.android.fluxc.store.AccountStore import org.wordpress.android.fluxc.store.SiteStore import org.wordpress.android.fluxc.store.SiteStore.FetchPrivateAtomicCookiePayload import org.wordpress.android.fluxc.store.SiteStore.OnPrivateAtomicCookieFetched -import org.wordpress.android.models.JetpackPoweredScreen import org.wordpress.android.models.ReaderPost import org.wordpress.android.ui.ActivityLauncher import org.wordpress.android.ui.PrivateAtCookieRefreshProgressDialog @@ -126,7 +125,6 @@ import org.wordpress.android.ui.utils.UiHelpers import org.wordpress.android.util.AniUtils import org.wordpress.android.util.AppLog import org.wordpress.android.util.AppLog.T -import org.wordpress.android.util.JetpackBrandingUtils import org.wordpress.android.util.NetworkUtils import org.wordpress.android.util.PermissionUtils import org.wordpress.android.util.RtlUtils @@ -268,9 +266,6 @@ class ReaderPostDetailFragment : ViewPagerFragment(), @Inject lateinit var commentsSnippetFeatureConfig: CommentsSnippetFeatureConfig - @Inject - lateinit var jetpackBrandingUtils: JetpackBrandingUtils - @Inject lateinit var readingPreferencesFeatureConfig: ReaderReadingPreferencesFeatureConfig @@ -814,21 +809,6 @@ class ReaderPostDetailFragment : ViewPagerFragment(), private fun renderUiState(state: ReaderPostDetailsUiState, binding: ReaderFragmentPostDetailBinding) { onPostExecuteShowPost() - if (jetpackBrandingUtils.shouldShowJetpackBranding()) { - val screen = JetpackPoweredScreen.WithDynamicText.READER_POST_DETAIL - binding.jetpackBadge.root.isVisible = true - binding.jetpackBadge.jetpackPoweredBadge.text = uiHelpers.getTextOfUiString( - requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) - ) - if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - binding.jetpackBadge.jetpackPoweredBadge.setOnClickListener { - jetpackBrandingUtils.trackBadgeTapped(screen) - viewModel.showJetpackPoweredBottomSheet() - } - } - } - binding.headerView.updatePost( state.headerUiState, getReadingPreferences(), 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..db1630df5b7f 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 @@ -15,10 +15,8 @@ import android.view.LayoutInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup -import android.view.ViewGroup.MarginLayoutParams import android.view.animation.Animation import android.widget.ProgressBar -import android.widget.TextView import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts @@ -64,7 +62,6 @@ import org.wordpress.android.fluxc.store.ReaderStore import org.wordpress.android.fluxc.store.ReaderStore.OnReaderSitesSearched import org.wordpress.android.fluxc.store.ReaderStore.ReaderSearchSitesPayload import org.wordpress.android.models.FilterCriteria -import org.wordpress.android.models.JetpackPoweredScreen import org.wordpress.android.models.ReaderPost import org.wordpress.android.models.ReaderPostDiscoverData import org.wordpress.android.models.ReaderTag @@ -82,7 +79,6 @@ import org.wordpress.android.ui.main.ChooseSiteActivity import org.wordpress.android.ui.main.WPMainActivity.OnActivityBackPressedListener import org.wordpress.android.ui.main.WPMainActivity.OnScrollToTopListener import org.wordpress.android.ui.mysite.SelectedSiteRepository -import org.wordpress.android.ui.mysite.jetpackbadge.JetpackPoweredBottomSheetFragment import org.wordpress.android.ui.pages.SnackbarMessageHolder import org.wordpress.android.ui.prefs.AppPrefs import org.wordpress.android.ui.reader.ReaderActivityLauncher.OpenUrlType @@ -140,8 +136,6 @@ import org.wordpress.android.ui.utils.UiHelpers import org.wordpress.android.util.AniUtils import org.wordpress.android.util.AppLog import org.wordpress.android.util.DisplayUtils -import org.wordpress.android.util.DisplayUtilsWrapper -import org.wordpress.android.util.JetpackBrandingUtils import org.wordpress.android.util.NetworkUtils import org.wordpress.android.util.NetworkUtilsWrapper import org.wordpress.android.util.SnackbarItem @@ -193,18 +187,12 @@ class ReaderPostListFragment : ViewPagerFragment(), OnPostSelectedListener, OnFo @Inject lateinit var seenUnseenWithCounterFeatureConfig: SeenUnseenWithCounterFeatureConfig - @Inject - lateinit var jetpackBrandingUtils: JetpackBrandingUtils - @Inject lateinit var readerTracker: ReaderTracker @Inject lateinit var snackbarSequencer: SnackbarSequencer - @Inject - lateinit var displayUtilsWrapper: DisplayUtilsWrapper - @Inject lateinit var networkConnectionMonitor: NetworkConnectionMonitor @@ -221,7 +209,6 @@ class ReaderPostListFragment : ViewPagerFragment(), OnPostSelectedListener, OnFo private lateinit var newPostsBar: View private lateinit var progressBar: ProgressBar private lateinit var searchMenuItem: MenuItem - private lateinit var jetpackBanner: View private lateinit var postListViewModel: ReaderPostListViewModel @@ -590,47 +577,6 @@ class ReaderPostListFragment : ViewPagerFragment(), OnPostSelectedListener, OnFo } } - private fun toggleJetpackBannerIfEnabled(showIfEnabled: Boolean, animateOnScroll: Boolean) { - if (!isAdded || view == null || !isSearching) return - - if (jetpackBrandingUtils.shouldShowJetpackBranding()) { - if (animateOnScroll) { - val scrollView = recyclerView.internalRecyclerView - jetpackBrandingUtils.showJetpackBannerIfScrolledToTop( - jetpackBanner, - scrollView - ) - // Return early since the banner visibility was handled by showJetpackBannerIfScrolledToTop - return - } - - if (showIfEnabled && !displayUtilsWrapper.isPhoneLandscape()) { - showJetpackBanner() - } else { - hideJetpackBanner() - } - } - } - - private fun showJetpackBanner() { - jetpackBanner.visibility = View.VISIBLE - - // Add bottom margin to search suggestions list and empty view. - val jetpackBannerHeight = resources.getDimensionPixelSize(R.dimen.jetpack_banner_height) - (recyclerView.searchSuggestionsRecyclerView.layoutParams as MarginLayoutParams).bottomMargin - (actionableEmptyView!!.layoutParams as MarginLayoutParams).bottomMargin = - jetpackBannerHeight - } - - private fun hideJetpackBanner() { - jetpackBanner.visibility = View.GONE - - // Remove bottom margin from search suggestions list and empty view. - (recyclerView.searchSuggestionsRecyclerView.layoutParams as MarginLayoutParams).bottomMargin = - 0 - (actionableEmptyView!!.layoutParams as MarginLayoutParams).bottomMargin = 0 - } - private fun setFollowStatusForBlog(readerData: FollowStatusChanged) { if (!hasPostAdapter()) { return @@ -1102,9 +1048,6 @@ class ReaderPostListFragment : ViewPagerFragment(), OnPostSelectedListener, OnFo progressBar = rootView.findViewById(R.id.progress_footer) progressBar.visibility = View.GONE - jetpackBanner = rootView.findViewById(R.id.jetpack_banner) - setupJetpackBanner() - if (savedInstanceState?.containsKey(ReaderConstants.KEY_CURRENT_UPDATE_ACTIONS) == true) { val actions = BundleCompat.getSerializable( @@ -1292,36 +1235,10 @@ class ReaderPostListFragment : ViewPagerFragment(), OnPostSelectedListener, OnFo ) } - private fun setupJetpackBanner() { - if (jetpackBrandingUtils.shouldShowJetpackBranding()) { - val screen: JetpackPoweredScreen = JetpackPoweredScreen.WithDynamicText.READER_SEARCH - jetpackBrandingUtils.initJetpackBannerAnimation( - jetpackBanner, - recyclerView.internalRecyclerView - ) - val jetpackBannerTextView = - jetpackBanner.findViewById(R.id.jetpack_banner_text) - jetpackBannerTextView.text = uiHelpers.getTextOfUiString( - requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) - ) - - if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - jetpackBanner.setOnClickListener { - jetpackBrandingUtils.trackBannerTapped(screen) - JetpackPoweredBottomSheetFragment() - .show(childFragmentManager, JetpackPoweredBottomSheetFragment.TAG) - } - } - } - } - private fun showSearchMessageOrSuggestions() { val hasQuery = !isSearchViewEmpty val hasPerformedSearch = !TextUtils.isEmpty(currentSearchQuery) - toggleJetpackBannerIfEnabled(showIfEnabled = true, animateOnScroll = false) - // prevents suggestions from being shown after the search view has been collapsed if (!isSearching) { return @@ -1413,8 +1330,6 @@ class ReaderPostListFragment : ViewPagerFragment(), OnPostSelectedListener, OnFo updatePostsInCurrentSearch(0) updateSitesInCurrentSearch(0) - toggleJetpackBannerIfEnabled(showIfEnabled = false, animateOnScroll = false) - // track that the user performed a search if (trimQuery != "") { readerTracker.trackQuery(AnalyticsTracker.Stat.READER_SEARCH_PERFORMED, trimQuery) @@ -2042,8 +1957,6 @@ class ReaderPostListFragment : ViewPagerFragment(), OnPostSelectedListener, OnFo } if (isSearching && !isSearchTabsShowing()) { showSearchTabs() - } else if (isSearching) { - toggleJetpackBannerIfEnabled(showIfEnabled = true, animateOnScroll = true) } } restorePosition = 0 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..f0f15f151025 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 @@ -51,7 +51,7 @@ import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureFullScreenOverlayVi import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureOverlayActions import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureOverlayActions.ForwardToJetpack import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureCollectionOverlaySource -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.main.BaseAppCompatActivity import org.wordpress.android.ui.main.WPMainActivity import org.wordpress.android.ui.mysite.SelectedSiteRepository @@ -205,7 +205,7 @@ class ReaderPostPagerActivity : BaseAppCompatActivity() { lateinit var mAccountStore: AccountStore @Inject - lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + lateinit var jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper @Inject lateinit var getReadingPreferencesSyncUseCase: ReaderGetReadingPreferencesSyncUseCase @@ -419,22 +419,13 @@ class ReaderPostPagerActivity : BaseAppCompatActivity() { host = uri.host } - if (uri == null || jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures() - || jetpackFeatureRemovalPhaseHelper.shouldShowStaticPage() - ) { + if (uri == null || jetpackFeatureRemovalHelper.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 { - 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 } @@ -638,9 +629,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/ReaderSearchActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderSearchActivity.kt index 9193113db977..8298059d604e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderSearchActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderSearchActivity.kt @@ -8,7 +8,6 @@ import org.wordpress.android.WordPress import org.wordpress.android.ui.main.BaseAppCompatActivity import org.wordpress.android.ui.reader.tracker.ReaderTracker import org.wordpress.android.ui.reader.tracker.ReaderTrackerType.MAIN_READER -import org.wordpress.android.util.JetpackBrandingUtils import javax.inject.Inject /** @@ -21,9 +20,6 @@ class ReaderSearchActivity : BaseAppCompatActivity() { @Inject lateinit var readerTracker: ReaderTracker - @Inject - lateinit var jetpackBrandingUtils: JetpackBrandingUtils - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) (application as WordPress).component().inject(this) 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..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 @@ -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,9 +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() init { @@ -260,11 +254,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/StatsActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsActivity.kt index 81045bdc40cb..c96dab5e46d3 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,13 +11,11 @@ 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.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.main.BaseAppCompatActivity import org.wordpress.android.ui.stats.StatsTimeframe import org.wordpress.android.ui.stats.refresh.utils.StatsLaunchedFrom import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider -import org.wordpress.android.util.JetpackBrandingUtils import javax.inject.Inject import android.R as AndroidR @@ -27,20 +25,12 @@ class StatsActivity : BaseAppCompatActivity() { lateinit var statsSiteProvider: StatsSiteProvider @Inject - lateinit var jetpackBrandingUtils: JetpackBrandingUtils - - @Inject - lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + lateinit var jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper private val viewModel: StatsViewModel by viewModels() 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/ui/stats/refresh/StatsFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsFragment.kt index 8a7868b890cc..0cdaadf5ee52 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 @@ -13,7 +13,6 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.fragment.app.activityViewModels import androidx.lifecycle.Lifecycle -import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.widget.MarginPageTransformer import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -26,12 +25,7 @@ import org.wordpress.android.R import org.wordpress.android.WordPress 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.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 @@ -92,9 +86,6 @@ class StatsFragment : Fragment(R.layout.stats_fragment), ScrollableViewInitializ @Inject lateinit var newStatsRouting: NewStatsRouting - @Inject - lateinit var jetpackFeatureRemovalOverlayUtil: JetpackFeatureRemovalOverlayUtil - @Inject lateinit var mStatsTrafficSubscribersTabsFeatureConfig: StatsTrafficSubscribersTabsFeatureConfig @@ -170,13 +161,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 +251,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) { @@ -410,34 +389,6 @@ class StatsFragment : Fragment(R.layout.stats_fragment), ScrollableViewInitializ override fun onScrollableViewInitialized(containerId: Int) { StatsFragmentBinding.bind(requireView()).appBarLayout.liftOnScrollTargetViewId = containerId - initJetpackBanner(containerId) - } - - private fun initJetpackBanner(scrollableContainerId: Int) { - if (jetpackBrandingUtils.shouldShowJetpackBranding()) { - val screen = JetpackPoweredScreen.WithDynamicText.STATS - 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.getBrandingTextForScreen(screen) - ) - - 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/stats/refresh/StatsViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsViewModel.kt index 5f6d1c028192..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 @@ -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,9 +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 +243,6 @@ class StatsViewModel } if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) showJetpackPoweredBottomSheet() - - if (jetpackFeatureRemovalOverlayUtil.shouldShowFeatureSpecificJetpackOverlay(STATS)) - showJetpackOverlay() } private fun updateSelectedSectionByTrafficSubscribersTabFeatureConfig() { @@ -269,10 +260,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..9dc5eb6df9b9 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 @@ -6,22 +6,14 @@ import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.RecyclerView import dagger.hilt.android.AndroidEntryPoint 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 -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 @@ -32,12 +24,6 @@ class StatsDetailFragment : Fragment(R.layout.stats_detail_fragment) { @Inject lateinit var statsSiteProvider: StatsSiteProvider - @Inject - lateinit var jetpackBrandingUtils: JetpackBrandingUtils - - @Inject - lateinit var uiHelpers: UiHelpers - private lateinit var viewModel: StatsDetailViewModel private lateinit var swipeToRefreshHelper: SwipeToRefreshHelper @@ -53,45 +39,18 @@ class StatsDetailFragment : Fragment(R.layout.stats_detail_fragment) { it.setDisplayHomeAsUpEnabled(true) } } - initializeViewModels(nonNullActivity, savedInstanceState == null) + initializeViewModels(nonNullActivity) initializeViews() - initJetpackBanner() } } - private fun StatsDetailFragmentBinding.initJetpackBanner() { - if (jetpackBrandingUtils.shouldShowJetpackBranding()) { - val screen = JetpackPoweredScreen.WithDynamicText.STATS - root.post { - val jetpackBannerView = jetpackBanner.root - val scrollableView = root.findViewById(R.id.recyclerView) as? RecyclerView - ?: return@post - - jetpackBrandingUtils.showJetpackBannerIfScrolledToTop(jetpackBannerView, scrollableView) - jetpackBrandingUtils.initJetpackBannerAnimation(jetpackBannerView, scrollableView) - jetpackBanner.jetpackBannerText.text = uiHelpers.getTextOfUiString( - requireContext(), - jetpackBrandingUtils.getBrandingTextForScreen(screen) - ) - - if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) { - jetpackBanner.root.setOnClickListener { - jetpackBrandingUtils.trackBannerTapped(screen) - JetpackPoweredBottomSheetFragment - .newInstance() - .show(childFragmentManager, JetpackPoweredBottomSheetFragment.TAG) - } - } - } - } - } private fun StatsDetailFragmentBinding.initializeViews() { swipeToRefreshHelper = WPSwipeToRefreshHelper.buildSwipeToRefreshHelper(pullToRefresh) { viewModel.onPullToRefresh() } } - 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,22 +68,14 @@ 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 } } - - 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..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 @@ -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 @@ -19,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 @@ -32,7 +29,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,9 +40,6 @@ class StatsDetailViewModel ) val showSnackbarMessage: LiveData = _showSnackbarMessage - private val _showJetpackOverlay = MutableLiveData>() - val showJetpackOverlay: LiveData> = _showJetpackOverlay - fun init( postId: Long, postType: String, @@ -59,15 +52,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..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,9 +4,6 @@ import android.os.Bundle; 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; import androidx.annotation.NonNull; @@ -36,21 +33,15 @@ 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 +51,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 +65,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 +188,6 @@ public void onSwipeToRefresh() { fetchWpComThemesIfSyncTimedOut(true); } - @Override - public void onScrollableViewInitialized(int containerId) { - if (mJetpackBrandingUtils.shouldShowJetpackBrandingForPhaseTwo()) { - 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.getBrandingTextForScreen(screen)) - ); - - 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 1063f9aa8e56..b21579d68957 100644 --- a/WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt +++ b/WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt @@ -1,91 +1,22 @@ package org.wordpress.android.util -import android.view.View -import android.view.View.OnScrollChangeListener -import androidx.core.view.isVisible -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.mysite.SelectedSiteRepository -import org.wordpress.android.ui.utils.UiString import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.util.config.JetpackPoweredBottomSheetFeatureConfig -import org.wordpress.android.util.config.JetpackPoweredFeatureConfig import javax.inject.Inject class JetpackBrandingUtils @Inject constructor( - private val jetpackPoweredFeatureConfig: JetpackPoweredFeatureConfig, private val jetpackPoweredBottomSheetFeatureConfig: JetpackPoweredBottomSheetFeatureConfig, - private val jetpackFeatureRemovalBrandingUtil: JetpackFeatureRemovalBrandingUtil, private val selectedSiteRepository: SelectedSiteRepository, private val siteUtilsWrapper: SiteUtilsWrapper, private val buildConfigWrapper: BuildConfigWrapper, private val analyticsTrackerWrapper: AnalyticsTrackerWrapper ) { - fun shouldShowJetpackBranding(): Boolean { - return isWpComSite() && jetpackPoweredFeatureConfig.isEnabled() && !buildConfigWrapper.isJetpackApp - && !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 shouldShowJetpackPoweredBottomSheet(): Boolean { return isWpComSite() && jetpackPoweredBottomSheetFeatureConfig.isEnabled() && !buildConfigWrapper.isJetpackApp } - fun getBrandingTextForScreen(screen: JetpackPoweredScreen): UiString { - return jetpackFeatureRemovalBrandingUtil.getBrandingTextByPhase(screen) - } - - fun showJetpackBannerIfScrolledToTop(banner: View, scrollableView: RecyclerView) { - banner.isVisible = true - - val isEmpty = scrollableView.layoutManager?.itemCount == 0 - val scrollOffset = scrollableView.computeVerticalScrollOffset() - - banner.translationY = if (scrollOffset == 0 || isEmpty) { - // Show - 0f - } else { - // Hide by moving down - banner.resources.getDimension(R.dimen.jetpack_banner_height) - } - } - - fun initJetpackBannerAnimation(banner: View, scrollableView: RecyclerView) { - scrollableView.setOnScrollChangeListener(object : OnScrollChangeListener { - private var isScrollAtTop = true - - override fun onScrollChange(v: View?, scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int) { - val scrollOffset = scrollableView.computeVerticalScrollOffset() - - if (scrollOffset == 0 && !isScrollAtTop) { - // Show the banner by moving up - isScrollAtTop = true - banner.animate().translationY(0f).start() - } else if (scrollOffset != 0 && isScrollAtTop) { - // Hide the banner by moving down - isScrollAtTop = false - val jetpackBannerHeight = banner.resources.getDimension(R.dimen.jetpack_banner_height) - banner.animate().translationY(jetpackBannerHeight).start() - } - } - }) - } - private fun isWpComSite(): Boolean { val selectedSite = selectedSiteRepository.getSelectedSite() return selectedSite != null && siteUtilsWrapper.isAccessedViaWPComRest(selectedSite) @@ -94,16 +25,6 @@ class JetpackBrandingUtils @Inject constructor( /** * Tracks */ - fun trackBadgeTapped(screen: JetpackPoweredScreen) = analyticsTrackerWrapper.track( - Stat.JETPACK_POWERED_BADGE_TAPPED, - mapOf(SCREEN_KEY to screen.trackingName) - ) - - fun trackBannerTapped(screen: JetpackPoweredScreen) = analyticsTrackerWrapper.track( - Stat.JETPACK_POWERED_BANNER_TAPPED, - mapOf(SCREEN_KEY to screen.trackingName) - ) - fun trackGetJetpackAppTapped() = analyticsTrackerWrapper.track( Stat.JETPACK_POWERED_BOTTOM_SHEET_GET_JETPACK_APP_TAPPED ) @@ -111,8 +32,4 @@ class JetpackBrandingUtils @Inject constructor( fun trackDismissTapped() = analyticsTrackerWrapper.track( Stat.JETPACK_POWERED_BOTTOM_SHEET_CONTINUE_TAPPED ) - - companion object { - private const val SCREEN_KEY = "screen" - } } 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/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..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 @@ -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 = "" @@ -36,54 +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_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" - -@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/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/java/org/wordpress/android/util/config/JetpackPoweredFeatureConfig.kt b/WordPress/src/main/java/org/wordpress/android/util/config/JetpackPoweredFeatureConfig.kt deleted file mode 100644 index 49fec9327395..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/util/config/JetpackPoweredFeatureConfig.kt +++ /dev/null @@ -1,21 +0,0 @@ -package org.wordpress.android.util.config - -import org.wordpress.android.BuildConfig -import org.wordpress.android.annotation.Feature -import javax.inject.Inject - -/** - * Configuration for Jetpack Powered indicators - */ -@Feature(JetpackPoweredFeatureConfig.JETPACK_POWERED_REMOTE_FIELD, true) -class JetpackPoweredFeatureConfig @Inject constructor( - appConfig: AppConfig -) : FeatureConfig( - appConfig, - BuildConfig.JETPACK_POWERED, - JETPACK_POWERED_REMOTE_FIELD -) { - companion object { - const val JETPACK_POWERED_REMOTE_FIELD = "jetpack_powered_remote_field" - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListItemUiStateHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListItemUiStateHelper.kt index 13f41d332241..ca8cd02e7091 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListItemUiStateHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListItemUiStateHelper.kt @@ -19,7 +19,7 @@ import org.wordpress.android.fluxc.model.post.PostStatus.SCHEDULED import org.wordpress.android.fluxc.model.post.PostStatus.TRASHED import org.wordpress.android.fluxc.model.post.PostStatus.UNKNOWN import org.wordpress.android.ui.blaze.BlazeFeatureUtils -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.posts.AuthorFilterSelection import org.wordpress.android.ui.posts.AuthorFilterSelection.EVERYONE import org.wordpress.android.ui.posts.PostModelUploadStatusTracker @@ -75,7 +75,7 @@ class PostListItemUiStateHelper @Inject constructor( private val appPrefsWrapper: AppPrefsWrapper, private val uploadUiStateUseCase: PostModelUploadUiStateUseCase, private val labelColorUseCase: PostPageListLabelColorUseCase, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper, + private val jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper, private val blazeFeatureUtils: BlazeFeatureUtils, private val buildConfigWrapper: BuildConfigWrapper ) { @@ -109,7 +109,7 @@ class PostListItemUiStateHelper @Inject constructor( siteHasCapabilitiesToPublish = capabilitiesToPublish, statsSupported = statsSupported, shouldShowStatsInJetpackRemovalPhase = - jetpackFeatureRemovalPhaseHelper.shouldShowPublishedPostStatsButton(), + jetpackFeatureRemovalHelper.shouldShowPublishedPostStatsButton(), shouldShowPromoteWithBlaze = blazeFeatureUtils.isPostBlazeEligible( site, postStatus, diff --git a/WordPress/src/main/java/org/wordpress/android/workers/notification/bloggingprompts/BloggingPromptsOnboardingNotificationHandler.kt b/WordPress/src/main/java/org/wordpress/android/workers/notification/bloggingprompts/BloggingPromptsOnboardingNotificationHandler.kt index 8230dceb5317..197bb1ca1c56 100644 --- a/WordPress/src/main/java/org/wordpress/android/workers/notification/bloggingprompts/BloggingPromptsOnboardingNotificationHandler.kt +++ b/WordPress/src/main/java/org/wordpress/android/workers/notification/bloggingprompts/BloggingPromptsOnboardingNotificationHandler.kt @@ -5,7 +5,7 @@ import android.content.Context import org.wordpress.android.fluxc.store.AccountStore import org.wordpress.android.push.NotificationType.BLOGGING_PROMPTS_ONBOARDING import org.wordpress.android.ui.ActivityLauncher -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.notifications.DismissNotificationReceiver import org.wordpress.android.ui.notifications.SystemNotificationsTracker import org.wordpress.android.workers.notification.local.LocalNotificationHandler @@ -14,10 +14,10 @@ import javax.inject.Inject class BloggingPromptsOnboardingNotificationHandler @Inject constructor( private val accountStore: AccountStore, private val notificationsTracker: SystemNotificationsTracker, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + private val jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper ) : LocalNotificationHandler { override fun shouldShowNotification(): Boolean { - return accountStore.hasAccessToken() && jetpackFeatureRemovalPhaseHelper.shouldShowNotifications() + return accountStore.hasAccessToken() && jetpackFeatureRemovalHelper.shouldShowNotifications() } override fun buildFirstActionPendingIntent(context: Context, notificationId: Int): PendingIntent { diff --git a/WordPress/src/main/java/org/wordpress/android/workers/notification/createsite/CreateSiteNotificationHandler.kt b/WordPress/src/main/java/org/wordpress/android/workers/notification/createsite/CreateSiteNotificationHandler.kt index 0cde15e6d7d6..0cdc390e8dbd 100644 --- a/WordPress/src/main/java/org/wordpress/android/workers/notification/createsite/CreateSiteNotificationHandler.kt +++ b/WordPress/src/main/java/org/wordpress/android/workers/notification/createsite/CreateSiteNotificationHandler.kt @@ -8,7 +8,7 @@ import org.wordpress.android.fluxc.store.AccountStore import org.wordpress.android.fluxc.store.SiteStore import org.wordpress.android.push.NotificationType.CREATE_SITE import org.wordpress.android.ui.ActivityLauncher -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.notifications.SystemNotificationsTracker import org.wordpress.android.ui.sitecreation.misc.SiteCreationSource import org.wordpress.android.viewmodel.ResourceProvider @@ -21,7 +21,7 @@ class CreateSiteNotificationHandler @Inject constructor( private val accountStore: AccountStore, private val siteStore: SiteStore, private val notificationsTracker: SystemNotificationsTracker, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + private val jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper ) : LocalNotificationHandler { override fun shouldShowNotification(): Boolean { val isNotificationSettingsEnabled = sharedPrefs.getBoolean( @@ -31,7 +31,7 @@ class CreateSiteNotificationHandler @Inject constructor( return isNotificationSettingsEnabled && accountStore.hasAccessToken() && !siteStore.hasSite() && - jetpackFeatureRemovalPhaseHelper.shouldShowNotifications() + jetpackFeatureRemovalHelper.shouldShowNotifications() } override fun buildFirstActionPendingIntent(context: Context, notificationId: Int): PendingIntent { diff --git a/WordPress/src/main/java/org/wordpress/android/workers/reminder/ReminderNotifier.kt b/WordPress/src/main/java/org/wordpress/android/workers/reminder/ReminderNotifier.kt index 6edf2f10d231..9b163136e418 100644 --- a/WordPress/src/main/java/org/wordpress/android/workers/reminder/ReminderNotifier.kt +++ b/WordPress/src/main/java/org/wordpress/android/workers/reminder/ReminderNotifier.kt @@ -10,7 +10,7 @@ import org.wordpress.android.fluxc.store.SiteStore import org.wordpress.android.push.NotificationPushIds.REMINDER_NOTIFICATION_ID import org.wordpress.android.push.NotificationType.BLOGGING_REMINDERS import org.wordpress.android.ui.bloggingreminders.BloggingRemindersAnalyticsTracker -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.posts.PostListType import org.wordpress.android.ui.posts.PostsListActivity import org.wordpress.android.util.SiteUtils @@ -25,7 +25,7 @@ class ReminderNotifier @Inject constructor( val accountStore: AccountStore, val reminderNotificationManager: ReminderNotificationManager, val analyticsTracker: BloggingRemindersAnalyticsTracker, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + private val jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper ) { fun notify(siteId: Int) { val context = contextProvider.getContext() @@ -70,7 +70,7 @@ class ReminderNotifier @Inject constructor( fun shouldNotify(siteId: Int) = siteId != NO_SITE_ID && siteStore.getSiteByLocalId(siteId) != null && accountStore.hasAccessToken() && - jetpackFeatureRemovalPhaseHelper.shouldShowNotifications() + jetpackFeatureRemovalHelper.shouldShowNotifications() companion object { const val NO_SITE_ID = -1 diff --git a/WordPress/src/main/java/org/wordpress/android/workers/reminder/prompt/PromptReminderNotifier.kt b/WordPress/src/main/java/org/wordpress/android/workers/reminder/prompt/PromptReminderNotifier.kt index f4554a426ed3..45eaee004950 100644 --- a/WordPress/src/main/java/org/wordpress/android/workers/reminder/prompt/PromptReminderNotifier.kt +++ b/WordPress/src/main/java/org/wordpress/android/workers/reminder/prompt/PromptReminderNotifier.kt @@ -21,7 +21,7 @@ import org.wordpress.android.fluxc.store.bloggingprompts.BloggingPromptsStore import org.wordpress.android.push.NotificationPushIds.REMINDER_NOTIFICATION_ID import org.wordpress.android.ui.ActivityLauncher import org.wordpress.android.ui.bloggingreminders.BloggingRemindersAnalyticsTracker -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.notifications.DismissNotificationReceiver import org.wordpress.android.ui.posts.PostUtils.EntryPoint import org.wordpress.android.util.HtmlCompatWrapper @@ -45,7 +45,7 @@ class PromptReminderNotifier @Inject constructor( val bloggingRemindersAnalyticsTracker: BloggingRemindersAnalyticsTracker, val htmlCompatWrapper: HtmlCompatWrapper, private val bloggingRemindersStore: BloggingRemindersStore, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + private val jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper ) { @Suppress("MagicNumber") suspend fun notify(siteId: Int) { @@ -170,7 +170,7 @@ class PromptReminderNotifier @Inject constructor( val bloggingRemindersModel = bloggingRemindersStore.bloggingRemindersModel(siteId).first() val hasOptedInBloggingPromptsReminders = siteModel != null && bloggingRemindersModel.isPromptIncluded // In Jetpack feature removal phase 4, all notifications are disabled. - val shouldShowNotificationsInJetpackRemovalPhase = jetpackFeatureRemovalPhaseHelper.shouldShowNotifications() + val shouldShowNotificationsInJetpackRemovalPhase = jetpackFeatureRemovalHelper.shouldShowNotifications() return hasAccessToken && isBloggingPromptsEnabled && hasOptedInBloggingPromptsReminders && diff --git a/WordPress/src/main/java/org/wordpress/android/workers/weeklyroundup/WeeklyRoundupNotifier.kt b/WordPress/src/main/java/org/wordpress/android/workers/weeklyroundup/WeeklyRoundupNotifier.kt index 0e1643e929f9..22cc12d0525f 100644 --- a/WordPress/src/main/java/org/wordpress/android/workers/weeklyroundup/WeeklyRoundupNotifier.kt +++ b/WordPress/src/main/java/org/wordpress/android/workers/weeklyroundup/WeeklyRoundupNotifier.kt @@ -12,7 +12,7 @@ import org.wordpress.android.push.NotificationPushIds.WEEKLY_ROUNDUP_NOTIFICATIO import org.wordpress.android.push.NotificationType.WEEKLY_ROUNDUP import org.wordpress.android.ui.ActivityLauncher import org.wordpress.android.ui.Organization -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper +import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalHelper import org.wordpress.android.ui.notifications.SystemNotificationsTracker import org.wordpress.android.ui.prefs.AppPrefsWrapper import org.wordpress.android.ui.stats.StatsTimeframe.WEEK @@ -34,10 +34,10 @@ class WeeklyRoundupNotifier @Inject constructor( private val weeklyRoundupRepository: WeeklyRoundupRepository, private val appPrefs: AppPrefsWrapper, private val statsUtils: StatsUtils, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper + private val jetpackFeatureRemovalHelper: JetpackFeatureRemovalHelper ) { fun shouldShowNotifications() = accountStore.hasAccessToken() && - siteStore.hasSitesAccessedViaWPComRest() && jetpackFeatureRemovalPhaseHelper.shouldShowNotifications() + siteStore.hasSitesAccessedViaWPComRest() && jetpackFeatureRemovalHelper.shouldShowNotifications() suspend fun buildNotifications(): List = coroutineScope { siteStore.sitesAccessedViaWPComRest diff --git a/WordPress/src/main/res/drawable-night/ic_jetpack_logo_24dp.xml b/WordPress/src/main/res/drawable-night/ic_jetpack_logo_24dp.xml deleted file mode 100644 index c055ecf07387..000000000000 --- a/WordPress/src/main/res/drawable-night/ic_jetpack_logo_24dp.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - 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/main/res/drawable/ic_jetpack_logo_24dp.xml b/WordPress/src/main/res/drawable/ic_jetpack_logo_24dp.xml deleted file mode 100644 index 638d230294f9..000000000000 --- a/WordPress/src/main/res/drawable/ic_jetpack_logo_24dp.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/WordPress/src/main/res/drawable/ic_notification_feature_overlay_new_users.xml b/WordPress/src/main/res/drawable/ic_notification_feature_overlay_new_users.xml deleted file mode 100644 index f1d0e052aae5..000000000000 --- a/WordPress/src/main/res/drawable/ic_notification_feature_overlay_new_users.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - diff --git a/WordPress/src/main/res/drawable/ic_reader_feature_overlay_reader_new_users.xml b/WordPress/src/main/res/drawable/ic_reader_feature_overlay_reader_new_users.xml deleted file mode 100644 index a8785b333394..000000000000 --- a/WordPress/src/main/res/drawable/ic_reader_feature_overlay_reader_new_users.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - diff --git a/WordPress/src/main/res/drawable/ic_stats_feature_overlay_new_users.xml b/WordPress/src/main/res/drawable/ic_stats_feature_overlay_new_users.xml deleted file mode 100644 index f42f50b60140..000000000000 --- a/WordPress/src/main/res/drawable/ic_stats_feature_overlay_new_users.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - 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..60dc4f106752 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 @@ -78,21 +78,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/title" /> - - - -