Skip to content

Commit d7f8405

Browse files
committed
Merge branch 'trunk' into fix/19157-TransactionTooLargeException
2 parents e3e97aa + f66f762 commit d7f8405

48 files changed

Lines changed: 2014 additions & 1274 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

RELEASE-NOTES.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* [*] Block Editor: In the deeply nested block warning, only display the ungroup option for blocks that support it [https://github.com/WordPress/gutenberg/pull/56445]
1212
* [**] Enable Optimize Image setting (via Me → App Settings) by default, and change default compression and resolution values. [https://github.com/wordpress-mobile/WordPress-Android/pull/19581]
1313
* [*] Fixed an issue that prevented theme installation on atomic sites [https://github.com/wordpress-mobile/WordPress-Android/pull/19668]
14+
* [*] Fixed an issue with the pagination of the Blogging Prompts response list [https://github.com/wordpress-mobile/WordPress-Android/pull/19730]
1415

1516
23.7
1617
-----

WordPress/src/main/java/org/wordpress/android/ui/bloggingprompts/BloggingPromptsPostTagProvider.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.wordpress.android.ui.bloggingprompts
22

33
import org.wordpress.android.models.ReaderTag
44
import org.wordpress.android.models.ReaderTagType
5+
import org.wordpress.android.ui.reader.services.post.ReaderPostLogic
56
import org.wordpress.android.ui.reader.utils.ReaderUtilsWrapper
67
import javax.inject.Inject
78

@@ -16,10 +17,16 @@ class BloggingPromptsPostTagProvider @Inject constructor(
1617

1718
fun promptIdSearchReaderTag(
1819
tagUrl: String
19-
): ReaderTag = readerUtilsWrapper.getTagFromTagName(
20-
promptIdTag(tagUrl),
21-
ReaderTagType.FOLLOWED,
22-
)
20+
): ReaderTag {
21+
val promptIdTag = promptIdTag(tagUrl)
22+
return ReaderTag(
23+
promptIdTag,
24+
promptIdTag,
25+
promptIdTag,
26+
ReaderPostLogic.formatFullEndpointForTag(promptIdTag),
27+
ReaderTagType.FOLLOWED,
28+
)
29+
}
2330

2431
companion object {
2532
const val BLOGGING_PROMPT_TAG = "dailyprompt"

WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapter.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.PostCard
2424
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.QuickLinksItem
2525
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.QuickStartCard
2626
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.TodaysStatsCard.TodaysStatsCardWithData
27+
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.WpSotw2023NudgeCardModel
2728
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.CategoryEmptyHeaderItem
2829
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.CategoryHeaderItem
2930
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.InfoItem
@@ -51,6 +52,7 @@ import org.wordpress.android.ui.mysite.cards.nocards.NoCardsMessageViewHolder
5152
import org.wordpress.android.ui.mysite.cards.personalize.PersonalizeCardViewHolder
5253
import org.wordpress.android.ui.mysite.cards.quicklinksitem.QuickLinkRibbonViewHolder
5354
import org.wordpress.android.ui.mysite.cards.quickstart.QuickStartCardViewHolder
55+
import org.wordpress.android.ui.mysite.cards.sotw2023.WpSotw2023NudgeCardViewHolder
5456
import org.wordpress.android.ui.mysite.items.categoryheader.MySiteCategoryItemEmptyViewHolder
5557
import org.wordpress.android.ui.mysite.items.categoryheader.MySiteCategoryItemViewHolder
5658
import org.wordpress.android.ui.mysite.items.infoitem.MySiteInfoItemViewHolder
@@ -123,6 +125,7 @@ class MySiteAdapter(
123125
)
124126
MySiteCardAndItem.Type.NO_CARDS_MESSAGE.ordinal -> NoCardsMessageViewHolder(parent)
125127
MySiteCardAndItem.Type.PERSONALIZE_CARD.ordinal -> PersonalizeCardViewHolder(parent)
128+
MySiteCardAndItem.Type.WP_SOTW_2023_NUDGE_CARD.ordinal -> WpSotw2023NudgeCardViewHolder(parent)
126129
else -> throw IllegalArgumentException("Unexpected view type")
127130
}
128131
}
@@ -156,6 +159,7 @@ class MySiteAdapter(
156159
is JetpackInstallFullPluginCardViewHolder -> holder.bind(getItem(position) as JetpackInstallFullPluginCard)
157160
is NoCardsMessageViewHolder -> holder.bind(getItem(position) as MySiteCardAndItem.Card.NoCardsMessage)
158161
is PersonalizeCardViewHolder -> holder.bind(getItem(position) as PersonalizeCardModel)
162+
is WpSotw2023NudgeCardViewHolder -> holder.bind(getItem(position) as WpSotw2023NudgeCardModel)
159163
}
160164
}
161165

WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteAdapterDiffCallback.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.PostCard.PostCardW
2020
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.QuickLinksItem
2121
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.QuickStartCard
2222
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.TodaysStatsCard.TodaysStatsCardWithData
23+
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.WpSotw2023NudgeCardModel
2324
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.CategoryEmptyHeaderItem
2425
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.CategoryHeaderItem
2526
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Item.InfoItem
@@ -64,6 +65,7 @@ object MySiteAdapterDiffCallback : DiffUtil.ItemCallback<MySiteCardAndItem>() {
6465
oldItem is MySiteCardAndItem.Card.NoCardsMessage && updatedItem is
6566
MySiteCardAndItem.Card.NoCardsMessage -> true
6667
oldItem is PersonalizeCardModel && updatedItem is PersonalizeCardModel -> true
68+
oldItem is WpSotw2023NudgeCardModel && updatedItem is WpSotw2023NudgeCardModel -> true
6769
else -> throw UnsupportedOperationException("Diff not implemented yet")
6870
}
6971
}

WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteCardAndItem.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ sealed class MySiteCardAndItem(open val type: Type, open val activeQuickStartIte
5959
JETPACK_INSTALL_FULL_PLUGIN_CARD,
6060
NO_CARDS_MESSAGE,
6161
PERSONALIZE_CARD,
62+
WP_SOTW_2023_NUDGE_CARD,
6263
}
6364

6465
data class SiteInfoHeaderCard(
@@ -380,6 +381,14 @@ sealed class MySiteCardAndItem(open val type: Type, open val activeQuickStartIte
380381
val onMoreMenuClick: ListItemInteraction,
381382
) : Card(type = Type.DASHBOARD_PLANS_CARD)
382383

384+
data class WpSotw2023NudgeCardModel(
385+
val title: UiString,
386+
val text: UiString,
387+
val ctaText: UiString,
388+
val onHideMenuItemClick: ListItemInteraction,
389+
val onCtaClick: ListItemInteraction,
390+
) : Card(type = Type.WP_SOTW_2023_NUDGE_CARD)
391+
383392
data class NoCardsMessage(val title: UiString, val message: UiString) : Card(Type.NO_CARDS_MESSAGE)
384393
data class PersonalizeCardModel(val onClick: () -> Unit) : Card(Type.PERSONALIZE_CARD)
385394
}

WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -704,7 +704,7 @@ class MySiteFragment : Fragment(R.layout.my_site_fragment),
704704
ActivityLauncher.viewCurrentBlogPostsOfType(requireActivity(), action.site, PostListType.SCHEDULED)
705705
is SiteNavigationAction.OpenStatsInsights ->
706706
ActivityLauncher.viewBlogStatsForTimeframe(requireActivity(), action.site, StatsTimeframe.INSIGHTS)
707-
is SiteNavigationAction.OpenTodaysStatsGetMoreViewsExternalUrl ->
707+
is SiteNavigationAction.OpenExternalUrl ->
708708
ActivityLauncher.openUrlExternal(requireActivity(), action.url)
709709
is SiteNavigationAction.OpenJetpackPoweredBottomSheet -> showJetpackPoweredBottomSheet()
710710
is SiteNavigationAction.OpenJetpackMigrationDeleteWP -> showJetpackMigrationDeleteWP()

WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteViewModel.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ import org.wordpress.android.ui.mysite.cards.quickstart.QuickStartRepository
8484
import org.wordpress.android.ui.mysite.cards.quickstart.QuickStartRepository.QuickStartCategory
8585
import org.wordpress.android.ui.mysite.cards.siteinfo.SiteInfoHeaderCardBuilder
8686
import org.wordpress.android.ui.mysite.cards.siteinfo.SiteInfoHeaderCardViewModelSlice
87+
import org.wordpress.android.ui.mysite.cards.sotw2023.WpSotw2023NudgeCardViewModelSlice
8788
import org.wordpress.android.ui.mysite.items.infoitem.MySiteInfoItemBuilder
8889
import org.wordpress.android.ui.mysite.items.listitem.SiteItemsBuilder
8990
import org.wordpress.android.ui.mysite.items.listitem.SiteItemsViewModelSlice
@@ -169,6 +170,7 @@ class MySiteViewModel @Inject constructor(
169170
private val siteInfoHeaderCardViewModelSlice: SiteInfoHeaderCardViewModelSlice,
170171
private val quickLinksItemViewModelSlice: QuickLinksItemViewModelSlice,
171172
private val bloganuaryNudgeCardViewModelSlice: BloganuaryNudgeCardViewModelSlice,
173+
private val sotw2023NudgeCardViewModelSlice: WpSotw2023NudgeCardViewModelSlice,
172174
) : ScopedViewModel(mainDispatcher) {
173175
private val _onSnackbarMessage = MutableLiveData<Event<SnackbarMessageHolder>>()
174176
private val _onNavigation = MutableLiveData<Event<SiteNavigationAction>>()
@@ -231,7 +233,8 @@ class MySiteViewModel @Inject constructor(
231233
bloganuaryNudgeCardViewModelSlice.onNavigation,
232234
personalizeCardViewModelSlice.onNavigation,
233235
siteInfoHeaderCardViewModelSlice.onNavigation,
234-
quickLinksItemViewModelSlice.navigation
236+
quickLinksItemViewModelSlice.navigation,
237+
sotw2023NudgeCardViewModelSlice.onNavigation,
235238
)
236239

237240
val onMediaUpload = siteInfoHeaderCardViewModelSlice.onMediaUpload
@@ -247,6 +250,7 @@ class MySiteViewModel @Inject constructor(
247250
postsCardViewModelSlice.refresh,
248251
activityLogCardViewModelSlice.refresh,
249252
bloganuaryNudgeCardViewModelSlice.refresh,
253+
sotw2023NudgeCardViewModelSlice.refresh,
250254
)
251255
val domainTransferCardRefresh = domainTransferCardViewModel.refresh
252256

@@ -322,6 +326,7 @@ class MySiteViewModel @Inject constructor(
322326
siteInfoHeaderCardViewModelSlice.initialize(viewModelScope)
323327
quickLinksItemViewModelSlice.initialization(viewModelScope)
324328
quickLinksItemViewModelSlice.start()
329+
sotw2023NudgeCardViewModelSlice.initialize(viewModelScope)
325330
}
326331

327332
@Suppress("LongParameterList")
@@ -423,8 +428,11 @@ class MySiteViewModel @Inject constructor(
423428

424429
val siteItems = getSiteItems(site, activeTask, backupAvailable, scanAvailable)
425430

431+
val sotw2023Card = sotw2023NudgeCardViewModelSlice.buildCard()
432+
426433
return mutableListOf<MySiteCardAndItem>().apply {
427434
infoItem?.let { add(infoItem) }
435+
sotw2023Card?.let { add(it) }
428436
addAll(siteItems)
429437
jetpackSwitchMenu?.let { add(jetpackSwitchMenu) }
430438
if (jetpackFeatureCardHelper.shouldShowFeatureCardAtTop())
@@ -988,6 +996,8 @@ class MySiteViewModel @Inject constructor(
988996
.forEach { personalizeCardViewModelSlice.trackShown(it.type) }
989997
siteSelected.dashboardData.filterIsInstance<MySiteCardAndItem.Card.NoCardsMessage>()
990998
.forEach { noCardsMessageViewModelSlice.trackShown(it.type) }
999+
siteSelected.dashboardData.filterIsInstance<MySiteCardAndItem.Card.WpSotw2023NudgeCardModel>()
1000+
.forEach { _ -> sotw2023NudgeCardViewModelSlice.trackShown() }
9911001
}
9921002

9931003
private fun resetShownTrackers() {
@@ -997,6 +1007,7 @@ class MySiteViewModel @Inject constructor(
9971007
jetpackFeatureCardShownTracker.resetShown()
9981008
jetpackInstallFullPluginShownTracker.resetShown()
9991009
personalizeCardViewModelSlice.resetShown()
1010+
sotw2023NudgeCardViewModelSlice.resetShown()
10001011
}
10011012

10021013
// FluxC events

WordPress/src/main/java/org/wordpress/android/ui/mysite/SiteNavigationAction.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ sealed class SiteNavigationAction {
8585
data class EditDraftPost(val site: SiteModel, val postId: Int) : SiteNavigationAction()
8686
data class EditScheduledPost(val site: SiteModel, val postId: Int) : SiteNavigationAction()
8787
data class OpenStatsInsights(val site: SiteModel) : SiteNavigationAction()
88-
data class OpenTodaysStatsGetMoreViewsExternalUrl(val url: String) : SiteNavigationAction()
88+
data class OpenExternalUrl(val url: String) : SiteNavigationAction()
8989
object OpenJetpackPoweredBottomSheet : SiteNavigationAction()
9090
object OpenJetpackMigrationDeleteWP : SiteNavigationAction()
9191
data class OpenJetpackFeatureOverlay(val source: JetpackFeatureCollectionOverlaySource) : SiteNavigationAction()

WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/dashboard/todaysstats/TodaysStatsViewModelSlice.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class TodaysStatsViewModelSlice @Inject constructor(
5050
_onNavigation.value = Event(SiteNavigationAction.ShowJetpackRemovalStaticPostersView)
5151
} else {
5252
_onNavigation.value = Event(
53-
SiteNavigationAction.OpenTodaysStatsGetMoreViewsExternalUrl(
53+
SiteNavigationAction.OpenExternalUrl(
5454
TodaysStatsCardBuilder.URL_GET_MORE_VIEWS_AND_TRAFFIC
5555
)
5656
)
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package org.wordpress.android.ui.mysite.cards.sotw2023
2+
3+
import android.content.res.Configuration
4+
import androidx.compose.foundation.layout.Column
5+
import androidx.compose.foundation.layout.Spacer
6+
import androidx.compose.foundation.layout.height
7+
import androidx.compose.foundation.layout.padding
8+
import androidx.compose.material3.Text
9+
import androidx.compose.material3.TextButton
10+
import androidx.compose.runtime.Composable
11+
import androidx.compose.ui.Modifier
12+
import androidx.compose.ui.res.stringResource
13+
import androidx.compose.ui.semantics.semantics
14+
import androidx.compose.ui.text.font.FontWeight
15+
import androidx.compose.ui.text.style.TextAlign
16+
import androidx.compose.ui.tooling.preview.Preview
17+
import org.wordpress.android.R
18+
import org.wordpress.android.ui.compose.components.card.UnelevatedCard
19+
import org.wordpress.android.ui.compose.styles.DashboardCardTypography
20+
import org.wordpress.android.ui.compose.theme.AppTheme
21+
import org.wordpress.android.ui.compose.unit.Margin
22+
import org.wordpress.android.ui.compose.utils.uiStringText
23+
import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.WpSotw2023NudgeCardModel
24+
import org.wordpress.android.ui.mysite.cards.compose.MySiteCardToolbar
25+
import org.wordpress.android.ui.mysite.cards.compose.MySiteCardToolbarContextMenuItem
26+
import org.wordpress.android.ui.utils.ListItemInteraction
27+
import org.wordpress.android.ui.utils.UiString.UiStringRes
28+
29+
@Composable
30+
fun WpSotw2023NudgeCard(
31+
model: WpSotw2023NudgeCardModel,
32+
modifier: Modifier = Modifier,
33+
) {
34+
UnelevatedCard(
35+
modifier = modifier.semantics(mergeDescendants = true) {},
36+
) {
37+
Column(
38+
modifier = Modifier.padding(bottom = Margin.Medium.value)
39+
) {
40+
CardToolbar(model)
41+
42+
Spacer(Modifier.height(Margin.Medium.value))
43+
44+
Text(
45+
text = uiStringText(model.text),
46+
style = DashboardCardTypography.detailText,
47+
modifier = Modifier.padding(horizontal = Margin.ExtraLarge.value),
48+
)
49+
50+
Spacer(Modifier.height(Margin.Small.value))
51+
52+
TextButton(
53+
onClick = { model.onCtaClick.click() },
54+
modifier = Modifier.padding(horizontal = Margin.Small.value)
55+
) {
56+
Text(
57+
text = uiStringText(model.ctaText),
58+
style = DashboardCardTypography.footerCTA,
59+
)
60+
}
61+
}
62+
}
63+
}
64+
65+
@Composable
66+
private fun CardToolbar(
67+
model: WpSotw2023NudgeCardModel
68+
) {
69+
MySiteCardToolbar(
70+
contextMenuItems = listOf(
71+
MySiteCardToolbarContextMenuItem.Option(
72+
text = stringResource(R.string.my_site_dashboard_card_more_menu_hide_card),
73+
onClick = { model.onHideMenuItemClick.click() },
74+
)
75+
),
76+
) {
77+
Text(
78+
text = uiStringText(uiString = model.title),
79+
style = DashboardCardTypography.smallTitle,
80+
textAlign = TextAlign.Start,
81+
fontWeight = FontWeight.Medium,
82+
)
83+
}
84+
}
85+
86+
@Preview(name = "Light Mode")
87+
@Preview(name = "Dark Mode", uiMode = Configuration.UI_MODE_NIGHT_YES)
88+
@Composable
89+
fun WpSotw2023NudgeCardPreview() {
90+
AppTheme {
91+
WpSotw2023NudgeCard(
92+
model = WpSotw2023NudgeCardModel(
93+
title = UiStringRes(R.string.wp_sotw_2023_dashboard_nudge_title),
94+
text = UiStringRes(R.string.wp_sotw_2023_dashboard_nudge_text),
95+
ctaText = UiStringRes(R.string.wp_sotw_2023_dashboard_nudge_cta),
96+
onHideMenuItemClick = ListItemInteraction.create {},
97+
onCtaClick = ListItemInteraction.create {},
98+
)
99+
)
100+
}
101+
}

0 commit comments

Comments
 (0)