Skip to content

Commit

Permalink
Merge branch 'release/24.9' into fix/subcribers-chart-issues
Browse files Browse the repository at this point in the history
  • Loading branch information
irfano committed May 13, 2024
2 parents 9b2d04d + ce04048 commit 930fa44
Show file tree
Hide file tree
Showing 105 changed files with 228 additions and 223 deletions.
5 changes: 5 additions & 0 deletions RELEASE-NOTES.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
*** PLEASE FOLLOW THIS FORMAT: [<priority indicator, more stars = higher priority>] <description> [<PR URL>]

25.0
-----


24.9
-----
* [*] [Jetpack-only] Removed Social section from the detail screen of Total Followers card [https://github.com/wordpress-mobile/WordPress-Android/pull/20763]
* [***] [Jetpack-only] Reorganized Stats to include updated Traffic and Insights tabs, along with a newly added Subscribers tab to improve subscriber metrics analysis [https://github.com/wordpress-mobile/WordPress-Android/pull/20756]
* [*] Site picker: Fixed the UI alignment issue in RTL [https://github.com/wordpress-mobile/WordPress-Android/pull/20804]

24.8
-----
Expand Down
2 changes: 1 addition & 1 deletion WordPress/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ android {
buildConfigField "boolean", "READER_IMPROVEMENTS", "false"
buildConfigField "boolean", "BLOGANUARY_DASHBOARD_NUDGE", "false"
buildConfigField "boolean", "DYNAMIC_DASHBOARD_CARDS", "false"
buildConfigField "boolean", "STATS_TRAFFIC_SUBSCRIBERS_TAB", "false"
buildConfigField "boolean", "STATS_TRAFFIC_SUBSCRIBERS_TABS", "false"
buildConfigField "boolean", "READER_DISCOVER_NEW_ENDPOINT", "false"
buildConfigField "boolean", "READER_READING_PREFERENCES", "false"
buildConfigField "boolean", "READER_READING_PREFERENCES_FEEDBACK", "false"
Expand Down
4 changes: 3 additions & 1 deletion WordPress/jetpack_metadata/release_notes.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
On the Stats screen, percentages now appear in their correct position for right-to-left language users. Right on.
* [*] [Jetpack-only] Removed Social section from the detail screen of Total Followers card [https://github.com/wordpress-mobile/WordPress-Android/pull/20763]
* [***] [Jetpack-only] Reorganized Stats to include updated Traffic and Insights tabs, along with a newly added Subscribers tab to improve subscriber metrics analysis [https://github.com/wordpress-mobile/WordPress-Android/pull/20756]
* [*] Site picker: Fixed the UI alignment issue in RTL [https://github.com/wordpress-mobile/WordPress-Android/pull/20804]

3 changes: 2 additions & 1 deletion WordPress/metadata/release_notes.txt
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
April showers bring May flowers, but they unfortunately don’t bring release notes. Stay Juned for the next update.
* [*] Site picker: Fixed the UI alignment issue in RTL [https://github.com/wordpress-mobile/WordPress-Android/pull/20804]

Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"stats_traffic_subscribers_tab": true
"stats_traffic_subscribers_tabs": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,9 @@ public void handleOnBackPressed() {
mWebView = (WebView) findViewById(R.id.webView);
mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
// Setting this user agent makes Calypso sites hide any WordPress UIs (e.g. Masterbar, banners, etc.).
mWebView.getSettings().setUserAgentString(mUserAgent.toString());
if (mUserAgent != null) {
mWebView.getSettings().setUserAgentString(mUserAgent.toString());
}
configureWebView();

if (savedInstanceState == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -735,7 +735,7 @@ protected void startGravatarUpload(final String filePath) {
startProgress(false);
mAvatarService.upload(file, new Email(mAccountStore.getAccount().getEmail()),
Objects.requireNonNull(mAccountStore.getAccessToken()),
new GravatarListener<Unit>() {
new GravatarListener<Unit, ErrorType>() {
@Override
public void onSuccess(@NonNull Unit response) {
endProgress();
Expand Down Expand Up @@ -836,7 +836,7 @@ public void run() {
Uri uri = MediaUtils.downloadExternalMedia(getContext(), Uri.parse(mUrl));
File file = new File(new URI(uri.toString()));
mAvatarService.upload(file, new Email(mEmail), mToken,
new GravatarListener<Unit>() {
new GravatarListener<Unit, ErrorType>() {
@Override
public void onSuccess(@NonNull Unit response) {
AppLog.i(T.NUX, "Google avatar download and Gravatar upload succeeded.");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package org.wordpress.android.ui.blaze.blazecampaigns

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.activity.viewModels
import dagger.hilt.android.AndroidEntryPoint
import org.wordpress.android.R
import org.wordpress.android.ui.LocaleAwareActivity
import org.wordpress.android.ui.blaze.blazecampaigns.campaigndetail.CampaignDetailFragment
import org.wordpress.android.ui.blaze.blazecampaigns.campaignlisting.CampaignListingFragment
import org.wordpress.android.util.extensions.getParcelableExtraCompat

const val ARG_EXTRA_BLAZE_CAMPAIGN_PAGE = "blaze_campaign_page"

@AndroidEntryPoint
class BlazeCampaignParentActivity : AppCompatActivity() {
class BlazeCampaignParentActivity : LocaleAwareActivity() {
private val viewModel: CampaignViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package org.wordpress.android.ui.blaze.blazepromote

import android.os.Bundle
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import dagger.hilt.android.AndroidEntryPoint
import org.wordpress.android.R
import org.wordpress.android.ui.LocaleAwareActivity
import org.wordpress.android.ui.blaze.BlazeFlowSource
import org.wordpress.android.ui.blaze.BlazeUIModel
import org.wordpress.android.ui.blaze.BlazeUiState
Expand All @@ -18,7 +18,7 @@ const val ARG_BLAZE_FLOW_SOURCE = "blaze_flow_source"
const val ARG_BLAZE_SHOULD_SHOW_OVERLAY = "blaze_flow_should_show_overlay"

@AndroidEntryPoint
class BlazePromoteParentActivity : AppCompatActivity() {
class BlazePromoteParentActivity : LocaleAwareActivity() {
private val viewModel: BlazeViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -680,7 +680,7 @@ class MeFragment : Fragment(R.layout.me_fragment), OnScrollToTopListener {
}
binding?.showGravatarProgressBar(true)
avatarService.upload(file, Email(accountStore.account.email), accountStore.accessToken.orEmpty(),
object : GravatarListener<Unit> {
object : GravatarListener<Unit, ErrorType> {
override fun onSuccess(response: Unit) {
AnalyticsTracker.track(ME_GRAVATAR_UPLOADED)
EventBus.getDefault().post(GravatarUploadFinished(filePath, true))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider.SiteUpdate
import org.wordpress.android.ui.utils.UiHelpers
import org.wordpress.android.util.JetpackBrandingUtils
import org.wordpress.android.util.WPSwipeToRefreshHelper
import org.wordpress.android.util.config.StatsTrafficSubscribersTabFeatureConfig
import org.wordpress.android.util.config.StatsTrafficSubscribersTabsFeatureConfig
import org.wordpress.android.util.helpers.SwipeToRefreshHelper
import org.wordpress.android.viewmodel.observeEvent
import org.wordpress.android.widgets.WPSnackbar
Expand All @@ -65,7 +65,7 @@ class StatsFragment : Fragment(R.layout.stats_fragment), ScrollableViewInitializ
lateinit var jetpackBrandingUtils: JetpackBrandingUtils

@Inject
lateinit var mStatsTrafficSubscribersTabFeatureConfig: StatsTrafficSubscribersTabFeatureConfig
lateinit var mStatsTrafficSubscribersTabsFeatureConfig: StatsTrafficSubscribersTabsFeatureConfig

private val viewModel: StatsViewModel by activityViewModels()
private lateinit var swipeToRefreshHelper: SwipeToRefreshHelper
Expand Down Expand Up @@ -100,7 +100,7 @@ class StatsFragment : Fragment(R.layout.stats_fragment), ScrollableViewInitializ
}

private fun StatsFragmentBinding.initializeViews() {
statsTrafficTabEnabled = mStatsTrafficSubscribersTabFeatureConfig.isEnabled()
statsTrafficTabEnabled = mStatsTrafficSubscribersTabsFeatureConfig.isEnabled()

val adapter = StatsPagerAdapter(this@StatsFragment)
statsPager.adapter = adapter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.subscribers.usecase
import org.wordpress.android.ui.stats.refresh.lists.sections.subscribers.usecases.TotalSubscribersUseCase.TotalSubscribersUseCaseFactory
import org.wordpress.android.ui.stats.refresh.utils.SelectedTrafficGranularityManager
import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider
import org.wordpress.android.util.config.StatsTrafficSubscribersTabFeatureConfig
import org.wordpress.android.util.config.StatsTrafficSubscribersTabsFeatureConfig
import javax.inject.Named
import javax.inject.Singleton

Expand Down Expand Up @@ -467,7 +467,7 @@ class StatsModule {
@Named(WEEK_STATS_USE_CASE) weekStatsUseCase: BaseListUseCase,
@Named(MONTH_STATS_USE_CASE) monthStatsUseCase: BaseListUseCase,
@Named(YEAR_STATS_USE_CASE) yearStatsUseCase: BaseListUseCase,
trafficSubscribersTabFeatureConfig: StatsTrafficSubscribersTabFeatureConfig
trafficSubscribersTabFeatureConfig: StatsTrafficSubscribersTabsFeatureConfig
): Map<StatsSection, BaseListUseCase> {
return if (trafficSubscribersTabFeatureConfig.isEnabled()) {
mapOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ import org.wordpress.android.ui.utils.UiString.UiStringRes
import org.wordpress.android.util.JetpackBrandingUtils
import org.wordpress.android.util.NetworkUtilsWrapper
import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper
import org.wordpress.android.util.config.StatsTrafficSubscribersTabFeatureConfig
import org.wordpress.android.util.config.StatsTrafficSubscribersTabsFeatureConfig
import org.wordpress.android.util.extensions.getSerializableExtraCompat
import org.wordpress.android.util.mapNullable
import org.wordpress.android.util.mergeNotNull
Expand All @@ -83,7 +83,7 @@ class StatsViewModel
private val notificationsTracker: SystemNotificationsTracker,
private val jetpackBrandingUtils: JetpackBrandingUtils,
private val jetpackFeatureRemovalOverlayUtil: JetpackFeatureRemovalOverlayUtil,
private val statsTrafficSubscribersTabFeatureConfig: StatsTrafficSubscribersTabFeatureConfig
private val statsTrafficSubscribersTabsFeatureConfig: StatsTrafficSubscribersTabsFeatureConfig
) : ScopedViewModel(mainDispatcher) {
private val _isRefreshing = MutableLiveData<Boolean>()
val isRefreshing: LiveData<Boolean> = _isRefreshing
Expand Down Expand Up @@ -150,7 +150,7 @@ class StatsViewModel
}

private fun getInitialTimeFrame(timeframe: StatsTimeframe?, launchedFrom: StatsLaunchedFrom?): StatsSection? {
if (statsTrafficSubscribersTabFeatureConfig.isEnabled() && launchedFrom == StatsLaunchedFrom.LINK) {
if (statsTrafficSubscribersTabsFeatureConfig.isEnabled() && launchedFrom == StatsLaunchedFrom.LINK) {
setupDeeplinkForTrafficTab(timeframe)
}

Expand Down Expand Up @@ -202,7 +202,7 @@ class StatsViewModel
statsSectionManager.setSelectedSection(it)

val trafficGranularity = it.toStatsGranularity()
if (statsTrafficSubscribersTabFeatureConfig.isEnabled() && trafficGranularity != null) {
if (statsTrafficSubscribersTabsFeatureConfig.isEnabled() && trafficGranularity != null) {
selectedTrafficGranularityManager.setSelectedTrafficGranularity(trafficGranularity)
}
}
Expand Down Expand Up @@ -255,7 +255,7 @@ class StatsViewModel
}

private fun updateSelectedSectionByTrafficSubscribersTabFeatureConfig() {
if (statsTrafficSubscribersTabFeatureConfig.isEnabled()) {
if (statsTrafficSubscribersTabsFeatureConfig.isEnabled()) {
val selectedSection = statsSectionManager.getSelectedSection()
val isSelectedSectionRemoved = selectedSection == StatsSection.DAYS ||
selectedSection == StatsSection.WEEKS ||
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import org.wordpress.android.ui.stats.refresh.utils.StatsDateFormatter
import org.wordpress.android.ui.stats.refresh.utils.StatsNavigator
import org.wordpress.android.ui.stats.refresh.utils.drawDateSelector
import org.wordpress.android.ui.stats.refresh.utils.toNameResource
import org.wordpress.android.util.config.StatsTrafficSubscribersTabFeatureConfig
import org.wordpress.android.util.config.StatsTrafficSubscribersTabsFeatureConfig
import org.wordpress.android.util.extensions.getParcelableCompat
import org.wordpress.android.util.extensions.getSerializableCompat
import org.wordpress.android.util.extensions.getSerializableExtraCompat
Expand All @@ -58,7 +58,7 @@ class StatsListFragment : ViewPagerFragment(R.layout.stats_list_fragment) {
lateinit var navigator: StatsNavigator

@Inject
lateinit var statsTrafficSubscribersTabFeatureConfig: StatsTrafficSubscribersTabFeatureConfig
lateinit var statsTrafficSubscribersTabsFeatureConfig: StatsTrafficSubscribersTabsFeatureConfig

@Inject
lateinit var selectedTrafficGranularityManager: SelectedTrafficGranularityManager
Expand Down Expand Up @@ -155,7 +155,7 @@ class StatsListFragment : ViewPagerFragment(R.layout.stats_list_fragment) {
}
})

if (statsTrafficSubscribersTabFeatureConfig.isEnabled()) {
if (statsTrafficSubscribersTabsFeatureConfig.isEnabled()) {
dateSelector.granularitySpinner.adapter = ArrayAdapter(
requireContext(),
R.layout.filter_spinner_item,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import org.wordpress.android.ui.stats.refresh.lists.widget.today.TodayWidgetBloc
import org.wordpress.android.ui.stats.refresh.lists.widget.utils.getColorMode
import org.wordpress.android.ui.stats.refresh.lists.widget.weeks.WeekWidgetBlockListViewModel
import org.wordpress.android.ui.stats.refresh.utils.StatsLaunchedFrom
import org.wordpress.android.util.config.StatsTrafficSubscribersTabFeatureConfig
import org.wordpress.android.util.config.StatsTrafficSubscribersTabsFeatureConfig
import javax.inject.Inject

class WidgetBlockListProvider(
Expand All @@ -27,7 +27,7 @@ class WidgetBlockListProvider(
intent: Intent
) : RemoteViewsFactory {
@Inject
lateinit var trafficSubscribersTabFeatureConfig: StatsTrafficSubscribersTabFeatureConfig
lateinit var trafficSubscribersTabFeatureConfig: StatsTrafficSubscribersTabsFeatureConfig

private val colorMode: Color = intent.getColorMode()
private val siteId: Int = intent.getIntExtra(SITE_ID_KEY, -1)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import org.wordpress.android.ui.stats.refresh.utils.StatsUtils
import org.wordpress.android.ui.stats.refresh.utils.trackMinifiedWidget
import org.wordpress.android.util.NetworkUtilsWrapper
import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper
import org.wordpress.android.util.config.StatsTrafficSubscribersTabFeatureConfig
import org.wordpress.android.util.config.StatsTrafficSubscribersTabsFeatureConfig
import org.wordpress.android.viewmodel.ResourceProvider
import javax.inject.Inject
import javax.inject.Named
Expand All @@ -51,7 +51,7 @@ class MinifiedWidgetUpdater
private val todayInsightsStore: TodayInsightsStore,
private val widgetUtils: WidgetUtils,
private val analyticsTrackerWrapper: AnalyticsTrackerWrapper,
private val statsTrafficSubscribersTabFeatureConfig: StatsTrafficSubscribersTabFeatureConfig
private val statsTrafficSubscribersTabsFeatureConfig: StatsTrafficSubscribersTabsFeatureConfig
) : WidgetUpdater {
private val coroutineScope = CoroutineScope(defaultDispatcher)
override fun updateAppWidget(
Expand Down Expand Up @@ -79,8 +79,8 @@ class MinifiedWidgetUpdater
views.setViewVisibility(R.id.widget_site_icon, View.VISIBLE)
views.setViewVisibility(R.id.widget_retry_button, View.GONE)

val timeframe = if (statsTrafficSubscribersTabFeatureConfig.isEnabled()) TRAFFIC else INSIGHTS
val granularity = if (statsTrafficSubscribersTabFeatureConfig.isEnabled()) StatsGranularity.DAYS else null
val timeframe = if (statsTrafficSubscribersTabsFeatureConfig.isEnabled()) TRAFFIC else INSIGHTS
val granularity = if (statsTrafficSubscribersTabsFeatureConfig.isEnabled()) StatsGranularity.DAYS else null

views.setOnClickPendingIntent(
R.id.widget_container,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import org.wordpress.android.ui.stats.refresh.lists.widget.WidgetBlockListProvid
import org.wordpress.android.ui.stats.refresh.lists.widget.configuration.StatsColorSelectionViewModel.Color
import org.wordpress.android.ui.stats.refresh.utils.MILLION
import org.wordpress.android.ui.stats.refresh.utils.StatsUtils
import org.wordpress.android.util.config.StatsTrafficSubscribersTabFeatureConfig
import org.wordpress.android.util.config.StatsTrafficSubscribersTabsFeatureConfig
import org.wordpress.android.viewmodel.ResourceProvider
import javax.inject.Inject

Expand All @@ -25,7 +25,7 @@ class TodayWidgetBlockListViewModel
private val todayWidgetUpdater: TodayWidgetUpdater,
private val appPrefsWrapper: AppPrefsWrapper,
private val statsUtils: StatsUtils,
private val trafficSubscribersTabFeatureConfig: StatsTrafficSubscribersTabFeatureConfig
private val trafficSubscribersTabFeatureConfig: StatsTrafficSubscribersTabsFeatureConfig
) : WidgetBlockListViewModel {
private var siteId: Int? = null
private var colorMode: Color = Color.LIGHT
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import org.wordpress.android.ui.stats.refresh.lists.widget.SITE_ID_KEY
import org.wordpress.android.ui.stats.refresh.lists.widget.configuration.StatsColorSelectionViewModel.Color
import org.wordpress.android.ui.stats.refresh.lists.widget.utils.getColorMode
import org.wordpress.android.ui.stats.refresh.utils.StatsLaunchedFrom
import org.wordpress.android.util.config.StatsTrafficSubscribersTabFeatureConfig
import org.wordpress.android.util.config.StatsTrafficSubscribersTabsFeatureConfig
import javax.inject.Inject

class TodayWidgetListProvider(val context: Context, intent: Intent) : RemoteViewsFactory {
Expand All @@ -24,7 +24,7 @@ class TodayWidgetListProvider(val context: Context, intent: Intent) : RemoteView
lateinit var widgetUpdater: TodayWidgetUpdater

@Inject
lateinit var trafficSubscribersTabFeatureConfig: StatsTrafficSubscribersTabFeatureConfig
lateinit var trafficSubscribersTabFeatureConfig: StatsTrafficSubscribersTabsFeatureConfig

private val colorMode: Color = intent.getColorMode()
private val siteId: Int = intent.getIntExtra(SITE_ID_KEY, 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import org.wordpress.android.ui.stats.refresh.lists.widget.utils.WidgetUtils
import org.wordpress.android.ui.stats.refresh.utils.trackWithWidgetType
import org.wordpress.android.util.NetworkUtilsWrapper
import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper
import org.wordpress.android.util.config.StatsTrafficSubscribersTabFeatureConfig
import org.wordpress.android.util.config.StatsTrafficSubscribersTabsFeatureConfig
import org.wordpress.android.viewmodel.ResourceProvider
import javax.inject.Inject

Expand All @@ -32,7 +32,7 @@ class TodayWidgetUpdater
private val resourceProvider: ResourceProvider,
private val widgetUtils: WidgetUtils,
private val analyticsTrackerWrapper: AnalyticsTrackerWrapper,
private val statsTrafficSubscribersTabFeatureConfig: StatsTrafficSubscribersTabFeatureConfig
private val statsTrafficSubscribersTabsFeatureConfig: StatsTrafficSubscribersTabsFeatureConfig
) : WidgetUpdater {
override fun updateAppWidget(
context: Context,
Expand All @@ -55,12 +55,12 @@ class TodayWidgetUpdater
val widgetHasData = appPrefsWrapper.hasAppWidgetData(appWidgetId)
if (networkAvailable && hasAccessToken && siteModel != null) {
widgetUtils.setSiteIcon(siteModel, context, views, appWidgetId)
val timeframe = if (statsTrafficSubscribersTabFeatureConfig.isEnabled()) {
val timeframe = if (statsTrafficSubscribersTabsFeatureConfig.isEnabled()) {
StatsTimeframe.TRAFFIC
} else {
StatsTimeframe.INSIGHTS
}
val granularity = if (statsTrafficSubscribersTabFeatureConfig.isEnabled()) StatsGranularity.DAYS else null
val granularity = if (statsTrafficSubscribersTabsFeatureConfig.isEnabled()) StatsGranularity.DAYS else null
siteModel.let {
views.setOnClickPendingIntent(
R.id.widget_title_container,
Expand Down
Loading

0 comments on commit 930fa44

Please sign in to comment.