Skip to content

Commit 2ac9517

Browse files
committed
Add Jetpack banner to StatsFragment
This also adds scroll animation feature to the banner.
1 parent c97c1cd commit 2ac9517

3 files changed

Lines changed: 36 additions & 3 deletions

File tree

WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsFragment.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.appcompat.app.AppCompatActivity
88
import androidx.fragment.app.Fragment
99
import androidx.fragment.app.FragmentActivity
1010
import androidx.fragment.app.activityViewModels
11+
import androidx.recyclerview.widget.RecyclerView
1112
import androidx.viewpager2.adapter.FragmentStateAdapter
1213
import androidx.viewpager2.widget.MarginPageTransformer
1314
import com.google.android.material.snackbar.Snackbar
@@ -40,6 +41,8 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.insights.UpdateAler
4041
import org.wordpress.android.ui.stats.refresh.lists.sections.insights.UpdateAlertDialogFragment.Companion.UPDATE_ALERT_DIALOG_TAG
4142
import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider.SiteUpdateResult
4243
import org.wordpress.android.ui.utils.UiHelpers
44+
import org.wordpress.android.util.JetpackBrandingUtils
45+
import org.wordpress.android.util.JetpackBrandingUtils.Screen.STATS
4346
import org.wordpress.android.util.WPSwipeToRefreshHelper
4447
import org.wordpress.android.util.helpers.SwipeToRefreshHelper
4548
import org.wordpress.android.viewmodel.observeEvent
@@ -51,12 +54,15 @@ private val statsSections = listOf(INSIGHTS, DAYS, WEEKS, MONTHS, YEARS)
5154
@AndroidEntryPoint
5255
class StatsFragment : Fragment(R.layout.stats_fragment), ScrollableViewInitializedListener {
5356
@Inject lateinit var uiHelpers: UiHelpers
57+
@Inject lateinit var jetpackBrandingUtils: JetpackBrandingUtils
5458
private val viewModel: StatsViewModel by activityViewModels()
5559
private lateinit var swipeToRefreshHelper: SwipeToRefreshHelper
5660
private lateinit var selectedTabListener: SelectedTabListener
5761

5862
private var restorePreviousSearch = false
5963

64+
private var binding: StatsFragmentBinding? = null
65+
6066
override fun onCreate(savedInstanceState: Bundle?) {
6167
super.onCreate(savedInstanceState)
6268
setHasOptionsMenu(true)
@@ -67,6 +73,7 @@ class StatsFragment : Fragment(R.layout.stats_fragment), ScrollableViewInitializ
6773

6874
val nonNullActivity = requireActivity()
6975
with(StatsFragmentBinding.bind(view)) {
76+
binding = this
7077
with(nonNullActivity as AppCompatActivity) {
7178
setSupportActionBar(toolbar)
7279
supportActionBar?.let {
@@ -253,6 +260,30 @@ class StatsFragment : Fragment(R.layout.stats_fragment), ScrollableViewInitializ
253260

254261
override fun onScrollableViewInitialized(containerId: Int) {
255262
StatsFragmentBinding.bind(requireView()).appBarLayout.liftOnScrollTargetViewId = containerId
263+
initJetpackBanner(containerId)
264+
}
265+
266+
private fun initJetpackBanner(scrollableContainerId: Int) {
267+
if (jetpackBrandingUtils.shouldShowJetpackBranding()) {
268+
binding?.root?.post {
269+
val jetpackBannerView = binding?.jetpackBanner?.root ?: return@post
270+
val scrollableView = binding?.root?.findViewById<View>(scrollableContainerId) as? RecyclerView
271+
?: return@post
272+
273+
jetpackBrandingUtils.showJetpackBannerIfScrolledToTop(jetpackBannerView, scrollableView)
274+
activity?.window?.let { jetpackBrandingUtils.setNavigationBarColorForBanner(it) }
275+
jetpackBrandingUtils.initJetpackBannerAnimation(jetpackBannerView, scrollableView)
276+
277+
if (jetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) {
278+
binding?.jetpackBanner?.root?.setOnClickListener {
279+
jetpackBrandingUtils.trackBannerTapped(STATS)
280+
JetpackPoweredBottomSheetFragment
281+
.newInstance()
282+
.show(childFragmentManager, JetpackPoweredBottomSheetFragment.TAG)
283+
}
284+
}
285+
}
286+
}
256287
}
257288
}
258289

WordPress/src/main/java/org/wordpress/android/util/JetpackBrandingUtils.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import android.view.View
55
import android.view.View.OnScrollChangeListener
66
import android.view.Window
77
import androidx.core.view.isVisible
8-
import androidx.recyclerview.widget.LinearLayoutManager
98
import androidx.recyclerview.widget.RecyclerView
109
import org.wordpress.android.R
1110
import org.wordpress.android.analytics.AnalyticsTracker.Stat
@@ -34,8 +33,7 @@ class JetpackBrandingUtils @Inject constructor(
3433
fun showJetpackBannerIfScrolledToTop(banner: View, scrollableView: RecyclerView) {
3534
banner.isVisible = true
3635

37-
val layoutManager = scrollableView.layoutManager as LinearLayoutManager
38-
val isEmpty = layoutManager.itemCount == 0
36+
val isEmpty = scrollableView.layoutManager?.itemCount == 0
3937
val scrollOffset = scrollableView.computeVerticalScrollOffset()
4038

4139
banner.translationY = if (scrollOffset == 0 || isEmpty) {

WordPress/src/main/res/layout/stats_fragment.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@
2626

2727
</org.wordpress.android.util.widgets.CustomSwipeRefreshLayout>
2828

29+
<include
30+
android:id="@+id/jetpack_banner"
31+
layout="@layout/jetpack_banner" />
32+
2933
<com.google.android.material.appbar.AppBarLayout
3034
android:id="@+id/app_bar_layout"
3135
android:layout_width="match_parent"

0 commit comments

Comments
 (0)