Skip to content

Commit 42e181d

Browse files
authored
CMM-953 fix reader subscribe when logged out (#22370)
* Showing a simple toast * Openig login flow * Checking the subscribe action inside the menu as well * Minor refactor * String change * Fixing tests
1 parent b828867 commit 42e181d

File tree

6 files changed

+54
-0
lines changed

6 files changed

+54
-0
lines changed

WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostDetailFragment.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import dagger.hilt.android.AndroidEntryPoint
5757
import org.greenrobot.eventbus.EventBus
5858
import org.greenrobot.eventbus.Subscribe
5959
import org.greenrobot.eventbus.ThreadMode
60+
import org.wordpress.android.BuildConfig
6061
import org.wordpress.android.R
6162
import org.wordpress.android.WordPress
6263
import org.wordpress.android.analytics.AnalyticsTracker
@@ -935,6 +936,15 @@ class ReaderPostDetailFragment : ViewPagerFragment(),
935936
is ReaderNavigationEvents.ShowPostDetail,
936937
is ReaderNavigationEvents.ShowVideoViewer,
937938
is ReaderNavigationEvents.ShowReaderSubs -> Unit // Do Nothing
939+
is ReaderNavigationEvents.ShowSignIn -> navigateToLogin()
940+
}
941+
}
942+
943+
private fun navigateToLogin() {
944+
if (BuildConfig.IS_JETPACK_APP) {
945+
ActivityLauncher.showSignInForResultJetpackOnly(requireActivity())
946+
} else {
947+
ActivityLauncher.showSignInForResultWpComOnly(requireActivity())
938948
}
939949
}
940950

WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverFragment.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.content.Intent
55
import android.os.Bundle
66
import android.view.View
77
import androidx.appcompat.app.AlertDialog
8+
import org.wordpress.android.BuildConfig
89
import androidx.core.content.ContextCompat
910
import androidx.lifecycle.ViewModelProvider
1011
import androidx.recyclerview.widget.LinearLayoutManager
@@ -39,6 +40,7 @@ import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowReade
3940
import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowReaderSubs
4041
import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowReportPost
4142
import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowReportUser
43+
import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowSignIn
4244
import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowSitePickerForResult
4345
import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowVideoViewer
4446
import org.wordpress.android.ui.reader.tracker.ReaderTracker
@@ -220,9 +222,18 @@ class ReaderDiscoverFragment : ViewPagerFragment(R.layout.reader_discover_fragme
220222
OpenUrlType.INTERNAL
221223
)
222224
is ShowReaderSubs -> ReaderActivityLauncher.showReaderSubs(requireActivity())
225+
is ShowSignIn -> navigateToLogin()
223226
else -> Unit // Do Nothing
224227
}
225228

229+
private fun navigateToLogin() {
230+
if (BuildConfig.IS_JETPACK_APP) {
231+
ActivityLauncher.showSignInForResultJetpackOnly(requireActivity())
232+
} else {
233+
ActivityLauncher.showSignInForResultWpComOnly(requireActivity())
234+
}
235+
}
236+
226237
private fun showBookmarkSavedLocallyDialog(bookmarkDialog: ShowBookmarkedSavedOnlyLocallyDialog) {
227238
if (bookmarksSavedLocallyDialog == null) {
228239
MaterialAlertDialogBuilder(requireActivity())

WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderNavigationEvents.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,5 @@ sealed class ReaderNavigationEvents {
6969
) : ReaderNavigationEvents()
7070

7171
data object ShowReadingPreferences : ReaderNavigationEvents()
72+
data object ShowSignIn : ReaderNavigationEvents()
7273
}

WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderPostCardActionsHandler.kt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import org.wordpress.android.R
1212
import org.wordpress.android.analytics.AnalyticsTracker
1313
import org.wordpress.android.datasets.ReaderBlogTableWrapper
1414
import org.wordpress.android.fluxc.Dispatcher
15+
import org.wordpress.android.fluxc.store.AccountStore
1516
import org.wordpress.android.fluxc.store.AccountStore.AddOrDeleteSubscriptionPayload.SubscriptionAction.DELETE
1617
import org.wordpress.android.fluxc.store.AccountStore.AddOrDeleteSubscriptionPayload.SubscriptionAction.NEW
1718
import org.wordpress.android.models.ReaderPost
@@ -100,6 +101,7 @@ class ReaderPostCardActionsHandler @Inject constructor(
100101
private val appReviewsManagerWrapper: AppReviewsManagerWrapper,
101102
private val seenStatusToggleUseCase: ReaderSeenStatusToggleUseCase,
102103
private val readerBlogTableWrapper: ReaderBlogTableWrapper,
104+
private val accountStore: AccountStore,
103105
@Named(BG_THREAD) private val bgDispatcher: CoroutineDispatcher
104106
) {
105107
private lateinit var coroutineScope: CoroutineScope
@@ -299,6 +301,10 @@ class ReaderPostCardActionsHandler @Inject constructor(
299301
recommendedBlogUiState: ReaderRecommendedBlogUiState,
300302
source: String
301303
) {
304+
if (!accountStore.hasAccessToken()) {
305+
showSignInPrompt()
306+
return
307+
}
302308
val param = ReaderSiteFollowUseCase.Param(
303309
blogId = recommendedBlogUiState.blogId,
304310
blogName = recommendedBlogUiState.name,
@@ -311,6 +317,10 @@ class ReaderPostCardActionsHandler @Inject constructor(
311317
post: ReaderPost,
312318
source: String
313319
) {
320+
if (!accountStore.hasAccessToken()) {
321+
showSignInPrompt()
322+
return
323+
}
314324
followSite(
315325
ReaderSiteFollowUseCase.Param(
316326
post.blogId,
@@ -320,6 +330,20 @@ class ReaderPostCardActionsHandler @Inject constructor(
320330
)
321331
}
322332

333+
private fun showSignInPrompt() {
334+
_snackbarEvents.postValue(
335+
Event(
336+
SnackbarMessageHolder(
337+
UiStringRes(R.string.reader_snackbar_err_cannot_follow_logged_out),
338+
UiStringRes(R.string.reader_snackbar_err_cannot_follow_logged_out_action),
339+
buttonAction = {
340+
_navigationEvents.postValue(Event(ReaderNavigationEvents.ShowSignIn))
341+
}
342+
)
343+
)
344+
)
345+
}
346+
323347
private suspend fun followSite(
324348
followSiteParam: ReaderSiteFollowUseCase.Param,
325349
source: String

WordPress/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2355,6 +2355,8 @@
23552355

23562356
<!-- snackbar messages -->
23572357
<string name="reader_snackbar_err_cannot_like_post_logged_out">Can\'t like while logged out of WordPress.com</string>
2358+
<string name="reader_snackbar_err_cannot_follow_logged_out">Log in to WordPress.com to subscribe to this site</string>
2359+
<string name="reader_snackbar_err_cannot_follow_logged_out_action">Log In</string>
23582360

23592361
<!-- failure messages when retrieving a single reader post -->
23602362
<string name="reader_err_get_post_generic">Unable to retrieve this post</string>

WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderPostCardActionsHandlerTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import org.mockito.kotlin.whenever
1919
import org.wordpress.android.BaseUnitTest
2020
import org.wordpress.android.datasets.ReaderBlogTableWrapper
2121
import org.wordpress.android.fluxc.Dispatcher
22+
import org.wordpress.android.fluxc.store.AccountStore
2223
import org.wordpress.android.fluxc.store.AccountStore.AddOrDeleteSubscriptionPayload.SubscriptionAction
2324
import org.wordpress.android.models.ReaderPost
2425
import org.wordpress.android.ui.pages.SnackbarMessageHolder
@@ -129,6 +130,9 @@ class ReaderPostCardActionsHandlerTest : BaseUnitTest() {
129130
@Mock
130131
private lateinit var dispatcher: Dispatcher
131132

133+
@Mock
134+
private lateinit var accountStore: AccountStore
135+
132136
@Mock
133137
private lateinit var resourceProvider: ResourceProvider
134138

@@ -155,12 +159,14 @@ class ReaderPostCardActionsHandlerTest : BaseUnitTest() {
155159
mock(),
156160
seenStatusToggleUseCase,
157161
readerBlogTableWrapper,
162+
accountStore,
158163
testDispatcher()
159164
)
160165
actionHandler.initScope(testScope())
161166
whenever(appPrefsWrapper.shouldShowBookmarksSavedLocallyDialog()).thenReturn(false)
162167
whenever(htmlMessageUtils.getHtmlMessageFromStringFormatResId(any(), anyVararg())).thenReturn(mock())
163168
whenever(readerBlogTableWrapper.getReaderBlog(any(), any())).thenReturn(mock())
169+
whenever(accountStore.hasAccessToken()).thenReturn(true)
164170
}
165171

166172
/** BOOKMARK ACTION begin **/

0 commit comments

Comments
 (0)