Repository: wordpress-mobile/WordPress-Android (language: kotlin)

Issue:
[Reader IA][Bug] Inconsistent reader UI state under circumstances going over quickstart
Internal ref: p1706830673644549?thread_ts=1706821601.141289&cid=C01CW1VMLAF-slack-C01CW1VMLAF

### Expected behavior
When Subscriptions is selected and we go into the reader quickstart step, the Discover feed is autoselected by the quickstart step and the Subscriptions blogs and sites should be not present in the UI

### Actual behavior
When Subscriptions is selected and we go into the reader quickstart step, the Discover feed is autoselected by the quickstart step but the Subscriptions blogs and sites are not removed (and do not respond to taps anyways)

### Steps to reproduce the behavior
- Select Subscriptions in the reader drop down menu
- Go into the Quickstart "Connect with other sites" step

<img width="300" alt="image" src="https://github.com/wordpress-mobile/WordPress-Android/assets/47797566/956b80d7-47ba-44f7-bae6-c4c30d1274a5">

- Go into the reader
- Notice the Discover feed is correctly selected but the blogs and tags pills are not removed from the UI


https://github.com/wordpress-mobile/WordPress-Android/assets/47797566/8e89e2db-f1c4-483d-9f8a-2154f1c62cd6


##### Tested on [S23], Android [Android 14], JPAndroid / WPAndroid [#20103 at 2ce97ec71e2b3317ed2bc3c115c32647f2eb759d]


Discussion hints:
nan

Pull request: [Reader IA] Simplify Reader Quick Start flow for new UX
Fixes #20109 

- Remove unused code relative to the old top app bar and menu
- Update the Quick Start flow to auto-complete upon showing Snackbar message
- Update snackbar message for WP.com users to mention Subscriptions feed instead of Settings
- No longer try to go to Discover feed when doing the quick start flow

New message:
> Use **Discover** to find sites and tags. Try selecting **Subscriptions** to view subscribed content and manage your subscriptions.


https://github.com/wordpress-mobile/WordPress-Android/assets/5091503/9094539b-c37d-47f5-a932-d897aaa2f804


-----

## To Test:
Make sure you're not already logged in.

1. Install and log into Jetpack
2. Tap the option to go through onboarding, right after login
3. Tap the onboarding card on My Site Dashboard ("Get to know the app")
4. Tap "Connect with other sites"
5. **Verify** the Reader icon is updated in the first snack bar message
6. **Verify** tapping Reader shows a snackbar with the new message
7. Go back to My Site
8. **Verify** the onboarding task is considered completed

You can also go through the steps in #20109 and **verify** it no longer happens since we don't try to move to Discover anymore and just stay on the selected Feed. 

-----

## Regression Notes

1. Potential unintended areas of impact

    - Quick start flow issues

9. What I did to test those areas of impact (or what existing automated tests I relied on)

    - Manual testing, unit testing

10. What automated tests I added (or what prevented me from doing so)

    - Updated existing tests
    - Added tests for the new scenarios

-----

## PR Submission Checklist:

- [x] I have completed the Regression Notes.
- [x] I have considered adding accessibility improvements for my changes.
- [x] I have considered if this change warrants user-facing release notes and have added them to `RELEASE-NOTES.txt` if necessary.

-----

## Testing Checklist:

- [ ] WordPress.com sites and self-hosted Jetpack sites.
- [ ] Portrait and landscape orientations.
- [ ] Light and dark modes.
- [ ] Fonts: Larger, smaller and bold text.
- [ ] High contrast.
- [ ] Talkback.
- [ ] Languages with large words or with letters/accents not frequently used in English.
- [ ] Right-to-left languages. (Even if translation isn’t complete, formatting should still respect the right-to-left layout)
- [ ] Large and small screen sizes. (Tablet and smaller phones)
- [ ] Multi-tasking: Split screen and Pop-up view. (Android 10 or higher)


Test command: ./gradlew :WordPress:testWordpressVanillaDebugUnitTest --tests "org.wordpress.android.ui.reader.discover.interests.ReaderInterestsViewModelTest" --tests "org.wordpress.android.ui.reader.viewmodels.ReaderViewModelTest"

Fix patch:
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/quickstart/QuickStartMySitePrompts.kt b/WordPress/src/main/java/org/wordpress/android/ui/quickstart/QuickStartMySitePrompts.kt
index 5861be66f0f4..4d200bdbfb34 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/quickstart/QuickStartMySitePrompts.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/quickstart/QuickStartMySitePrompts.kt
@@ -50,7 +50,7 @@ enum class QuickStartMySitePrompts constructor(
         R.id.root_view_main,
         R.id.bottom_nav_reader_button,
         R.string.quick_start_dialog_follow_sites_message_short_reader,
-        R.drawable.ic_reader_white_24dp
+        R.drawable.ic_reader_selected
     ),
     UPLOAD_SITE_ICON(
         QuickStartStore.QUICK_START_UPLOAD_SITE_ICON_LABEL,
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 49bc8607a84c..28397a28fb70 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
@@ -1,14 +1,10 @@
 package org.wordpress.android.ui.reader
 
 import android.os.Bundle
-import android.view.Menu
-import android.view.MenuInflater
-import android.view.MenuItem
 import android.view.View
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.livedata.observeAsState
 import androidx.compose.ui.platform.ViewCompositionStrategy
-import androidx.core.view.MenuProvider
 import androidx.core.view.isVisible
 import androidx.fragment.app.Fragment
 import androidx.lifecycle.ViewModelProvider
@@ -48,12 +44,11 @@ import org.wordpress.android.util.SnackbarItem.Action
 import org.wordpress.android.util.SnackbarItem.Info
 import org.wordpress.android.util.SnackbarSequencer
 import org.wordpress.android.viewmodel.observeEvent
-import org.wordpress.android.widgets.QuickStartFocusPoint
 import java.util.EnumSet
 import javax.inject.Inject
 
 @AndroidEntryPoint
-class ReaderFragment : Fragment(R.layout.reader_fragment_layout), MenuProvider, ScrollableViewInitializedListener {
+class ReaderFragment : Fragment(R.layout.reader_fragment_layout), ScrollableViewInitializedListener {
     @Inject
     lateinit var viewModelFactory: ViewModelProvider.Factory
 
@@ -70,14 +65,9 @@ class ReaderFragment : Fragment(R.layout.reader_fragment_layout), MenuProvider,
     lateinit var snackbarSequencer: SnackbarSequencer
     private lateinit var viewModel: ReaderViewModel
 
-    private var searchMenuItem: MenuItem? = null
-    private var settingsMenuItem: MenuItem? = null
-    private var settingsMenuItemFocusPoint: QuickStartFocusPoint? = null
-
     private var binding: ReaderFragmentLayoutBinding? = null
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
-        requireActivity().addMenuProvider(this, viewLifecycleOwner)
         binding = ReaderFragmentLayoutBinding.bind(view).apply {
             initTopAppBar()
             initViewModel(savedInstanceState)
@@ -86,9 +76,6 @@ class ReaderFragment : Fragment(R.layout.reader_fragment_layout), MenuProvider,
 
     override fun onDestroyView() {
         super.onDestroyView()
-        searchMenuItem = null
-        settingsMenuItem = null
-        settingsMenuItemFocusPoint = null
         binding = null
     }
 
@@ -102,36 +89,6 @@ class ReaderFragment : Fragment(R.layout.reader_fragment_layout), MenuProvider,
         activity?.let { viewModel.onScreenInBackground(it.isChangingConfigurations) }
     }
 
-    override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
-        menuInflater.inflate(R.menu.reader_home, menu)
-        menu.findItem(R.id.menu_search).apply {
-            searchMenuItem = this
-            this.isVisible = viewModel.uiState.value?.searchMenuItemUiState?.isVisible ?: false
-        }
-        menu.findItem(R.id.menu_settings).apply {
-            settingsMenuItem = this
-            settingsMenuItemFocusPoint = this.actionView?.findViewById(R.id.menu_quick_start_focus_point)
-            this.isVisible = viewModel.uiState.value?.settingsMenuItemUiState?.isVisible ?: false
-            settingsMenuItemFocusPoint?.isVisible =
-                viewModel.uiState.value?.settingsMenuItemUiState?.showQuickStartFocusPoint ?: false
-            this.actionView?.setOnClickListener { viewModel.onSettingsActionClicked() }
-        }
-    }
-
-    override fun onMenuItemSelected(menuItem: MenuItem) = when (menuItem.itemId) {
-        R.id.menu_search -> {
-            viewModel.onSearchActionClicked()
-            true
-        }
-
-        R.id.menu_settings -> {
-            viewModel.onSettingsActionClicked()
-            true
-        }
-
-        else -> false
-    }
-
     private fun ReaderFragmentLayoutBinding.initTopAppBar() {
         readerTopBarComposeView.apply {
             setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
@@ -171,10 +128,6 @@ class ReaderFragment : Fragment(R.layout.reader_fragment_layout), MenuProvider,
             ReaderActivityLauncher.showReaderSearch(context)
         }
 
-        viewModel.showSettings.observeEvent(viewLifecycleOwner) {
-            ReaderActivityLauncher.showReaderSubs(context)
-        }
-
         viewModel.showReaderInterests.observeEvent(viewLifecycleOwner) {
             showReaderInterests()
         }
@@ -225,12 +178,6 @@ class ReaderFragment : Fragment(R.layout.reader_fragment_layout), MenuProvider,
                 initContentContainer(uiState)
             }
         }
-        // TODO As part of Reader IA changes this view is going to be replaced
-        //                uiHelpers.updateVisibility(tabLayout, uiState.tabLayoutVisible)
-        searchMenuItem?.isVisible = uiState.searchMenuItemUiState.isVisible
-        settingsMenuItem?.isVisible = uiState.settingsMenuItemUiState.isVisible
-        settingsMenuItemFocusPoint?.isVisible =
-            viewModel.uiState.value?.settingsMenuItemUiState?.showQuickStartFocusPoint ?: false
     }
 
     private fun initContentContainer(uiState: ContentUiState) {
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/interests/ReaderInterestsViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/interests/ReaderInterestsViewModel.kt
index 67be5e9cd0ec..b2a754a06137 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/interests/ReaderInterestsViewModel.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/interests/ReaderInterestsViewModel.kt
@@ -168,8 +168,6 @@ class ReaderInterestsViewModel @Inject constructor(
                     )
                 )
             )
-
-            parentViewModel?.completeQuickStartFollowSiteTaskIfNeeded()
         }
     }
 
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 2f97cf4fcbea..e78ad354d41e 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
@@ -42,13 +42,13 @@ import org.wordpress.android.ui.reader.usecases.LoadReaderTabsUseCase
 import org.wordpress.android.ui.reader.utils.DateProvider
 import org.wordpress.android.ui.reader.utils.ReaderTopBarMenuHelper
 import org.wordpress.android.ui.reader.viewmodels.ReaderViewModel.ReaderUiState.ContentUiState
-import org.wordpress.android.ui.reader.viewmodels.ReaderViewModel.ReaderUiState.ContentUiState.MenuItemUiState
 import org.wordpress.android.ui.reader.viewmodels.ReaderViewModel.ReaderUiState.ContentUiState.TabUiState
 import org.wordpress.android.ui.reader.views.compose.filter.ReaderFilterSelectedItem
 import org.wordpress.android.ui.reader.views.compose.filter.ReaderFilterType
 import org.wordpress.android.ui.utils.UiString
 import org.wordpress.android.ui.utils.UiString.UiStringText
 import org.wordpress.android.util.JetpackBrandingUtils
+import org.wordpress.android.util.QuickStartUtils
 import org.wordpress.android.util.SnackbarSequencer
 import org.wordpress.android.util.distinct
 import org.wordpress.android.viewmodel.Event
@@ -94,9 +94,6 @@ class ReaderViewModel @Inject constructor(
     private val _showSearch = MutableLiveData<Event<Unit>>()
     val showSearch: LiveData<Event<Unit>> = _showSearch
 
-    private val _showSettings = MutableLiveData<Event<Unit>>()
-    val showSettings: LiveData<Event<Unit>> = _showSettings
-
     private val _showReaderInterests = MutableLiveData<Event<Unit>>()
     val showReaderInterests: LiveData<Event<Unit>> = _showReaderInterests
 
@@ -138,7 +135,6 @@ class ReaderViewModel @Inject constructor(
 
     private fun loadTabs(savedInstanceState: Bundle? = null) {
         launch {
-            val currentContentUiState = _uiState.value as? ContentUiState
             val tagList = loadReaderTabsUseCase.loadTabs()
             if (tagList.isNotEmpty() && readerTagsList != tagList) {
                 updateReaderTagsList(tagList)
@@ -146,12 +142,6 @@ class ReaderViewModel @Inject constructor(
                 _uiState.value = ContentUiState(
                     tabUiStates = tagList.map { TabUiState(label = UiStringText(it.label)) },
                     selectedReaderTag = selectedReaderTag(),
-                    searchMenuItemUiState = MenuItemUiState(isVisible = isSearchSupported()),
-                    settingsMenuItemUiState = MenuItemUiState(
-                        isVisible = isSettingsSupported(),
-                        showQuickStartFocusPoint =
-                        currentContentUiState?.settingsMenuItemUiState?.showQuickStartFocusPoint ?: false
-                    )
                 )
                 if (!initialized) {
                     initialized = true
@@ -221,16 +211,6 @@ class ReaderViewModel @Inject constructor(
         }
     }
 
-    @Suppress("UseCheckOrError")
-    fun onSettingsActionClicked() {
-        if (isSettingsSupported()) {
-            completeQuickStartFollowSiteTaskIfNeeded()
-            _showSettings.value = Event(Unit)
-        } else if (BuildConfig.DEBUG) {
-            throw IllegalStateException("Settings should be hidden when isSettingsSupported returns false.")
-        }
-    }
-
     @Suppress("unused", "UNUSED_PARAMETER")
     @Subscribe(threadMode = MAIN)
     fun onTagsUpdated(event: ReaderEvents.FollowedTagsChanged) {
@@ -253,7 +233,6 @@ class ReaderViewModel @Inject constructor(
         readerTracker.stop(MAIN_READER)
         wasPaused = true
         if (!isChangingConfigurations) {
-            hideQuickStartFocusPointIfNeeded()
             dismissQuickStartSnackbarIfNeeded()
             if (quickStartRepository.isPendingTask(getFollowSiteTask())) {
                 quickStartRepository.clearPendingTask()
@@ -281,31 +260,12 @@ class ReaderViewModel @Inject constructor(
     }
 
     fun onQuickStartEventReceived(event: QuickStartEvent) {
-        if (event.task == getFollowSiteTask()) checkAndStartQuickStartFollowSiteTaskNextStep()
+        if (event.task == getFollowSiteTask()) startQuickStartFollowSiteTask()
     }
 
-    private fun checkAndStartQuickStartFollowSiteTaskNextStep() {
-        val isDiscover = appPrefsWrapper.getReaderTag()?.isDiscover == true
-        if (isDiscover) {
-            startQuickStartFollowSiteTaskDiscoverTabStep()
-        } else {
-            autoSwitchToDiscoverTab()
-        }
-    }
-
-    private fun autoSwitchToDiscoverTab() {
-        launch {
-            if (!initialized) delay(QUICK_START_DISCOVER_TAB_STEP_DELAY)
-            readerTagsList.find { it.isDiscover }?.let {
-                updateSelectedContent(it)
-            }
-            startQuickStartFollowSiteTaskDiscoverTabStep()
-        }
-    }
-
-    private fun startQuickStartFollowSiteTaskDiscoverTabStep() {
+    private fun startQuickStartFollowSiteTask() {
         val shortMessagePrompt = if (isSettingsSupported()) {
-            R.string.quick_start_dialog_follow_sites_message_short_discover_and_settings
+            R.string.quick_start_dialog_follow_sites_message_short_discover_and_subscriptions
         } else {
             R.string.quick_start_dialog_follow_sites_message_short_discover
         }
@@ -314,16 +274,15 @@ class ReaderViewModel @Inject constructor(
             QuickStartReaderPrompt(
                 getFollowSiteTask(),
                 shortMessagePrompt,
-                R.drawable.ic_cog_white_24dp
+                QuickStartUtils.ICON_NOT_SET,
             )
         )
-        updateContentUiState(showQuickStartFocusPoint = isSettingsSupported())
+        completeQuickStartFollowSiteTaskIfNeeded()
     }
 
-    fun completeQuickStartFollowSiteTaskIfNeeded() {
+    private fun completeQuickStartFollowSiteTaskIfNeeded() {
         if (quickStartRepository.isPendingTask(getFollowSiteTask())) {
             selectedSiteRepository.getSelectedSite()?.let {
-                hideQuickStartFocusPointIfNeeded()
                 quickStartRepository.completeTask(getFollowSiteTask())
             }
         }
@@ -334,30 +293,9 @@ class ReaderViewModel @Inject constructor(
         isQuickStartPromptShown = false
     }
 
-    private fun hideQuickStartFocusPointIfNeeded() {
-        val currentUiState = _uiState.value as? ContentUiState
-        if (currentUiState?.settingsMenuItemUiState?.showQuickStartFocusPoint == true) {
-            updateContentUiState(showQuickStartFocusPoint = false)
-        }
-    }
-
     private fun getFollowSiteTask() =
         quickStartRepository.quickStartType.getTaskFromString(QuickStartStore.QUICK_START_FOLLOW_SITE_LABEL)
 
-    private fun updateContentUiState(
-        showQuickStartFocusPoint: Boolean
-    ) {
-        val currentUiState = _uiState.value as? ContentUiState
-        currentUiState?.let {
-            _uiState.value = currentUiState.copy(
-                settingsMenuItemUiState = it.settingsMenuItemUiState.copy(
-                    isVisible = isSettingsSupported(),
-                    showQuickStartFocusPoint = showQuickStartFocusPoint
-                ),
-            )
-        }
-    }
-
     private fun selectedReaderTag(): ReaderTag? =
         _topBarUiState.value?.let {
             readerTagsList[readerTopBarMenuHelper.getReaderTagIndexFromMenuItem(it.selectedItem)]
@@ -561,30 +499,19 @@ class ReaderViewModel @Inject constructor(
     }
 
     sealed class ReaderUiState(
-        open val searchMenuItemUiState: MenuItemUiState,
-        open val settingsMenuItemUiState: MenuItemUiState,
         val appBarExpanded: Boolean = false,
         val tabLayoutVisible: Boolean = false
     ) {
         data class ContentUiState(
             val tabUiStates: List<TabUiState>,
             val selectedReaderTag: ReaderTag?,
-            override val searchMenuItemUiState: MenuItemUiState,
-            override val settingsMenuItemUiState: MenuItemUiState,
         ) : ReaderUiState(
-            searchMenuItemUiState = searchMenuItemUiState,
-            settingsMenuItemUiState = settingsMenuItemUiState,
             appBarExpanded = true,
             tabLayoutVisible = true
         ) {
             data class TabUiState(
                 val label: UiString
             )
-
-            data class MenuItemUiState(
-                val isVisible: Boolean,
-                val showQuickStartFocusPoint: Boolean = false
-            )
         }
     }
 
@@ -596,7 +523,6 @@ class ReaderViewModel @Inject constructor(
     )
 
     companion object {
-        private const val QUICK_START_DISCOVER_TAB_STEP_DELAY = 2000L
         private const val QUICK_START_PROMPT_DURATION = 5000
         private const val FILTER_UPDATE_DELAY = 50L
 
diff --git a/WordPress/src/main/res/layout/reader_home_settings_menu_action_layout.xml b/WordPress/src/main/res/layout/reader_home_settings_menu_action_layout.xml
deleted file mode 100644
index 6f0bed3826f6..000000000000
--- a/WordPress/src/main/res/layout/reader_home_settings_menu_action_layout.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="?android:attr/actionBarItemBackground">
-
-    <androidx.appcompat.widget.AppCompatImageView
-        android:id="@+id/settings_menu"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginEnd="@dimen/margin_medium_large"
-        android:layout_marginStart="@dimen/margin_medium_large"
-        android:src="@drawable/ic_reader_following_white_24dp"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
-        app:tint="?attr/colorOnSurface"
-        tools:text="@string/my_site_menu_tab_title" />
-
-    <org.wordpress.android.widgets.QuickStartFocusPoint
-        android:id="@+id/menu_quick_start_focus_point"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:contentDescription="@string/quick_start_focus_point_description"
-        android:elevation="@dimen/quick_start_focus_point_elevation"
-        android:gravity="end"
-        android:textAlignment="viewEnd"
-        android:visibility="gone"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:size="small" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/WordPress/src/main/res/menu/reader_home.xml b/WordPress/src/main/res/menu/reader_home.xml
deleted file mode 100644
index 3e225ff3f08d..000000000000
--- a/WordPress/src/main/res/menu/reader_home.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
-    <item
-        android:id="@+id/menu_settings"
-        app:actionLayout="@layout/reader_home_settings_menu_action_layout"
-        android:title="@string/reader_menu_tags_and_blogs"
-        android:visible="false"
-        app:showAsAction="always" />
-
-    <item
-        android:id="@+id/menu_search"
-        android:icon="@drawable/ic_search_white_24dp"
-        android:title="@string/search"
-        android:visible="false"
-        app:showAsAction="always" />
-</menu>
diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml
index 1c2a647c5c95..6e75f529ae1f 100644
--- a/WordPress/src/main/res/values/strings.xml
+++ b/WordPress/src/main/res/values/strings.xml
@@ -3287,7 +3287,7 @@
     <string name="quick_start_dialog_enable_sharing_title" tools:ignore="UnusedResources">Enable post sharing</string>
     <string name="quick_start_dialog_follow_sites_message" translatable="false">@string/quick_start_list_follow_site_subtitle</string>
     <string name="quick_start_dialog_follow_sites_message_short_reader" tools:ignore="UnusedResources">Select %1$s Reader %2$s to find other sites.</string>
-    <string name="quick_start_dialog_follow_sites_message_short_discover_and_settings">Use &lt;b&gt; Discover &lt;/b&gt; to find sites and tags. Try selecting %1$s Settings %2$s to add topics you like.</string>
+    <string name="quick_start_dialog_follow_sites_message_short_discover_and_subscriptions">Use &lt;b&gt;Discover&lt;/b&gt; to find sites and tags. Try selecting &lt;b&gt;Subscriptions&lt;/b&gt; to view subscribed content and manage your subscriptions.</string>
     <string name="quick_start_dialog_follow_sites_message_short_discover">Use &lt;b&gt; Discover &lt;/b&gt; to find sites and tags.</string>
     <string name="quick_start_dialog_upload_media_message_short_plus" tools:ignore="UnusedResources">Select %1$s plus %2$s to upload media. You can add it to your posts/ pages from any device.</string>
     <string name="quick_start_dialog_follow_sites_title">Connect with other sites</string>


Test patch:
diff --git a/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/interests/ReaderInterestsViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/interests/ReaderInterestsViewModelTest.kt
index 1943a6a2f15a..d098e17f6477 100644
--- a/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/interests/ReaderInterestsViewModelTest.kt
+++ b/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/interests/ReaderInterestsViewModelTest.kt
@@ -320,20 +320,6 @@ class ReaderInterestsViewModelTest : BaseUnitTest() {
                 .isEqualTo(false)
         }
 
-    @Test
-    fun `when interest tag is toggled, then complete follow site quick start task if needed is invoked`() =
-        testWithEmptyUserTags {
-            val interests = getInterests()
-            whenever(readerTagRepository.getInterests()).thenReturn(SuccessWithData(interests))
-            val selectInterestAtIndex = 2
-
-            initViewModel()
-            viewModel.onInterestAtIndexToggled(index = selectInterestAtIndex, isChecked = true)
-
-            // Then
-            verify(parentViewModel).completeQuickStartFollowSiteTaskIfNeeded()
-        }
-
     @Test
     fun `done button shown in enabled state if an interest is in selected state`() =
         testWithEmptyUserTags {
diff --git a/WordPress/src/test/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModelTest.kt
index 3cb4f933e28e..0b57e79121fc 100644
--- a/WordPress/src/test/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModelTest.kt
+++ b/WordPress/src/test/java/org/wordpress/android/ui/reader/viewmodels/ReaderViewModelTest.kt
@@ -38,6 +38,7 @@ import org.wordpress.android.ui.reader.utils.DateProvider
 import org.wordpress.android.ui.reader.viewmodels.ReaderViewModel.QuickStartReaderPrompt
 import org.wordpress.android.ui.reader.viewmodels.ReaderViewModel.ReaderUiState
 import org.wordpress.android.ui.reader.viewmodels.ReaderViewModel.ReaderUiState.ContentUiState
+import org.wordpress.android.ui.reader.viewmodels.ReaderViewModel.TopBarUiState
 import org.wordpress.android.util.JetpackBrandingUtils
 import org.wordpress.android.util.SnackbarSequencer
 import org.wordpress.android.viewmodel.Event
@@ -119,7 +120,7 @@ class ReaderViewModelTest : BaseUnitTest() {
         // Arrange
         whenever(appPrefsWrapper.readerTagsUpdatedTimestamp).thenReturn(-1)
         // Act
-        triggerReaderTabContentDisplay()
+        triggerContentDisplay()
         // Assert
         assertThat(viewModel.updateTags.value?.getContentIfNotHandled()).isNotNull
     }
@@ -129,7 +130,7 @@ class ReaderViewModelTest : BaseUnitTest() {
         // Arrange
         whenever(appPrefsWrapper.readerTagsUpdatedTimestamp).thenReturn(DUMMY_CURRENT_TIME - UPDATE_TAGS_THRESHOLD + 1)
         // Act
-        triggerReaderTabContentDisplay()
+        triggerContentDisplay()
         // Assert
         assertThat(viewModel.updateTags.value?.getContentIfNotHandled()).isNull()
     }
@@ -139,7 +140,7 @@ class ReaderViewModelTest : BaseUnitTest() {
         // Arrange
         whenever(appPrefsWrapper.readerTagsUpdatedTimestamp).thenReturn(DUMMY_CURRENT_TIME - UPDATE_TAGS_THRESHOLD - 1)
         // Act
-        triggerReaderTabContentDisplay()
+        triggerContentDisplay()
         // Assert
         assertThat(viewModel.updateTags.value?.getContentIfNotHandled()).isNotNull
     }
@@ -153,7 +154,7 @@ class ReaderViewModelTest : BaseUnitTest() {
         }
         whenever(loadReaderTabsUseCase.loadTabs()).thenReturn(ReaderTagList())
         // Act
-        triggerReaderTabContentDisplay()
+        triggerContentDisplay()
         // Assert
         assertThat(state).isNull()
     }
@@ -166,7 +167,7 @@ class ReaderViewModelTest : BaseUnitTest() {
             state = it
         }
         // Act
-        triggerReaderTabContentDisplay()
+        triggerContentDisplay()
         // Assert
         assertThat(state).isInstanceOf(ContentUiState::class.java)
     }
@@ -282,74 +283,30 @@ class ReaderViewModelTest : BaseUnitTest() {
     @Test
     fun `Search is disabled for self-hosted login`() = testWithNonEmptyTags {
         // Arrange
-        var state: ReaderUiState? = null
-        viewModel.uiState.observeForever {
+        var state: TopBarUiState? = null
+        viewModel.topBarUiState.observeForever {
             state = it
         }
         // Act
-        triggerReaderTabContentDisplay(hasAccessToken = false)
+        triggerContentDisplay(hasAccessToken = false)
 
         // Assert
-        assertThat(state!!.searchMenuItemUiState.isVisible).isFalse
+        assertThat(state!!.isSearchActionVisible).isFalse
     }
 
     @Test
     fun `Search is enabled for dot com login`() = testWithNonEmptyTags {
         // Arrange
         whenever(accountStore.hasAccessToken()).thenReturn(true)
-        var state: ReaderUiState? = null
-        viewModel.uiState.observeForever {
-            state = it
-        }
-        // Act
-        triggerReaderTabContentDisplay()
-
-        // Assert
-        assertThat(state!!.searchMenuItemUiState.isVisible).isTrue
-    }
-
-    @Test
-    fun `OnSettingsActionClicked emits showSettings event`() {
-        // Arrange
-        whenever(accountStore.hasAccessToken()).thenReturn(true)
-        var event: Event<Unit>? = null
-        viewModel.showSettings.observeForever {
-            event = it
-        }
-        // Act
-        viewModel.onSettingsActionClicked()
-
-        // Assert
-        assertThat(event).isNotNull
-    }
-
-    @Test
-    fun `Settings menu is disabled for self-hosted login`() = testWithNonEmptyTags {
-        // Arrange
-        var state: ReaderUiState? = null
-        viewModel.uiState.observeForever {
-            state = it
-        }
-        // Act
-        triggerReaderTabContentDisplay(hasAccessToken = false)
-
-        // Assert
-        assertThat(state!!.settingsMenuItemUiState.isVisible).isFalse
-    }
-
-    @Test
-    fun `Settings menu is enabled for dot com login`() = testWithNonEmptyTags {
-        // Arrange
-        whenever(accountStore.hasAccessToken()).thenReturn(true)
-        var state: ReaderUiState? = null
-        viewModel.uiState.observeForever {
+        var state: TopBarUiState? = null
+        viewModel.topBarUiState.observeForever {
             state = it
         }
         // Act
-        triggerReaderTabContentDisplay()
+        triggerContentDisplay()
 
         // Assert
-        assertThat(state!!.settingsMenuItemUiState.isVisible).isTrue
+        assertThat(state!!.isSearchActionVisible).isTrue
     }
 
     @Test
@@ -360,7 +317,7 @@ class ReaderViewModelTest : BaseUnitTest() {
             uiStates.add(it)
         }
         // Act
-        triggerReaderTabContentDisplay()
+        triggerContentDisplay()
         // Assert
         assertThat(uiStates.size).isEqualTo(1)
         assertThat(uiStates[0]).isInstanceOf(ContentUiState::class.java)
@@ -375,7 +332,7 @@ class ReaderViewModelTest : BaseUnitTest() {
             uiStates.add(it)
         }
         // Act
-        triggerReaderTabContentDisplay()
+        triggerContentDisplay()
         // Assert
         assertThat(uiStates.size).isEqualTo(1)
         assertThat(uiStates[0]).isInstanceOf(ContentUiState::class.java)
@@ -440,59 +397,49 @@ class ReaderViewModelTest : BaseUnitTest() {
     }
 
     @Test
-    fun `given discover selected with settings available, when qs event follow site, then discover tab step started`() {
+    fun `given reader selected, when qs event follow site, then qs task started and completed`() {
         val tagList = createNonMockedNonEmptyReaderTagList()
         testWithNonMockedNonEmptyTags(tagList) {
+            whenever(selectedSiteRepository.getSelectedSite()).thenReturn(mock())
+            whenever(quickStartRepository.isPendingTask(QuickStartNewSiteTask.FOLLOW_SITE)).thenReturn(true)
+
             val observers = initObservers()
-            triggerReaderTabContentDisplay(selectedTabReaderTag = tagList[1], hasAccessToken = true)
+            triggerContentDisplay(hasAccessToken = true)
 
             viewModel.onQuickStartEventReceived(QuickStartEvent(QuickStartNewSiteTask.FOLLOW_SITE))
 
-            assertQsFollowSiteDiscoverTabStepStarted(observers, isSettingsSupported = true)
+            assertQsFollowSiteTaskStarted(observers, isSettingsSupported = true)
+            assertQsFollowSiteTaskCompleted()
         }
     }
 
     @Test
-    fun `given discover selected no settings available, when qs event follow site, then discover tab step started`() {
+    fun `given reader selected no settings available, when qs event follow site, then qs task started and completed`() {
         val tagList = createNonMockedNonEmptyReaderTagList()
         testWithNonMockedNonEmptyTags(tagList) {
+            whenever(selectedSiteRepository.getSelectedSite()).thenReturn(mock())
+            whenever(quickStartRepository.isPendingTask(QuickStartNewSiteTask.FOLLOW_SITE)).thenReturn(true)
+
             val observers = initObservers()
-            triggerReaderTabContentDisplay(selectedTabReaderTag = tagList[1], hasAccessToken = false)
+            triggerContentDisplay(hasAccessToken = false)
 
             viewModel.onQuickStartEventReceived(QuickStartEvent(QuickStartNewSiteTask.FOLLOW_SITE))
 
-            assertQsFollowSiteDiscoverTabStepStarted(observers, isSettingsSupported = false)
+            assertQsFollowSiteTaskStarted(observers, isSettingsSupported = false)
+            assertQsFollowSiteTaskCompleted()
         }
     }
 
     @Test
-    fun `given discover tab selected, when quick start event not follow site, then qs discover tab step not started`() {
+    fun `given reader selected, when quick start event not follow site, then qs task not started`() {
         val tagList = createNonMockedNonEmptyReaderTagList()
         testWithNonMockedNonEmptyTags(tagList) {
             val observers = initObservers()
-            triggerReaderTabContentDisplay(selectedTabReaderTag = tagList[1])
+            triggerContentDisplay()
 
             viewModel.onQuickStartEventReceived(QuickStartEvent(QuickStartNewSiteTask.CHECK_STATS))
 
-            assertQsFollowSiteDiscoverTabStepNotStarted(observers)
-        }
-    }
-
-    /* QUICK START - SETTING MENU CLICK */
-
-    @Test
-    fun `given pending follow site qs task, when settings menu clicked, then qs follow site task is completed`() {
-        val tagList = createNonMockedNonEmptyReaderTagList()
-        testWithNonMockedNonEmptyTags(tagList) {
-            whenever(accountStore.hasAccessToken()).thenReturn(true)
-            whenever(selectedSiteRepository.getSelectedSite()).thenReturn(mock())
-            whenever(quickStartRepository.isPendingTask(QuickStartNewSiteTask.FOLLOW_SITE)).thenReturn(true)
-            val observers = initObservers()
-            triggerReaderTabContentDisplay(selectedTabReaderTag = tagList[1])
-
-            viewModel.onSettingsActionClicked()
-
-            assertQsFollowSiteTaskCompleted(observers)
+            assertQsFollowSiteTaskNotStarted(observers)
         }
     }
 
@@ -549,41 +496,33 @@ class ReaderViewModelTest : BaseUnitTest() {
         assertThat(showJetpackOverlayEvent.last().peekContent()).isTrue
     }
 
-    private fun assertQsFollowSiteDiscoverTabStepStarted(
+    private fun assertQsFollowSiteTaskStarted(
         observers: Observers,
         isSettingsSupported: Boolean = true
     ) {
         with(observers) {
             assertThat(quickStartReaderPrompts.last().peekContent().shortMessagePrompt).isEqualTo(
                 if (isSettingsSupported) {
-                    R.string.quick_start_dialog_follow_sites_message_short_discover_and_settings
+                    R.string.quick_start_dialog_follow_sites_message_short_discover_and_subscriptions
                 } else {
                     R.string.quick_start_dialog_follow_sites_message_short_discover
                 }
             )
-            assertThat(uiStates.last().findSettingsMenuQsFocusPoint()).isEqualTo(isSettingsSupported)
         }
     }
 
-    private fun assertQsFollowSiteDiscoverTabStepNotStarted(
+    private fun assertQsFollowSiteTaskNotStarted(
         observers: Observers
     ) {
         with(observers) {
             assertThat(quickStartReaderPrompts).isEmpty()
-            assertThat(uiStates.last().findSettingsMenuQsFocusPoint()).isEqualTo(false)
         }
     }
 
-    private fun assertQsFollowSiteTaskCompleted(
-        observers: Observers
-    ) {
+    private fun assertQsFollowSiteTaskCompleted() {
         verify(quickStartRepository).completeTask(QuickStartNewSiteTask.FOLLOW_SITE)
-        assertThat(observers.uiStates.last().findSettingsMenuQsFocusPoint()).isEqualTo(false)
     }
 
-    private fun ReaderUiState.findSettingsMenuQsFocusPoint() =
-        (this as? ContentUiState)?.settingsMenuItemUiState?.showQuickStartFocusPoint ?: false
-
     private fun initObservers(): Observers {
         val uiStates = mutableListOf<ReaderUiState>()
         viewModel.uiState.observeForever {
@@ -610,11 +549,9 @@ class ReaderViewModelTest : BaseUnitTest() {
         val tabNavigationEvents: List<TabNavigation>
     )
 
-    private fun triggerReaderTabContentDisplay(
-        selectedTabReaderTag: ReaderTag? = null,
+    private fun triggerContentDisplay(
         hasAccessToken: Boolean = true
     ) {
-        whenever(appPrefsWrapper.getReaderTag()).thenReturn(selectedTabReaderTag)
         whenever(accountStore.hasAccessToken()).thenReturn(hasAccessToken)
         viewModel.start()
     }