diff --git a/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutCategoryAdapter.kt b/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutCategoryAdapter.kt index 3883229f53ef..25ee2a80821e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutCategoryAdapter.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutCategoryAdapter.kt @@ -5,11 +5,13 @@ import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView.Adapter import org.wordpress.android.ui.layoutpicker.LayoutCategoryViewType.DEFAULT +import org.wordpress.android.ui.layoutpicker.LayoutCategoryViewType.FOOTER import org.wordpress.android.ui.layoutpicker.LayoutCategoryViewType.RECOMMENDED enum class LayoutCategoryViewType { DEFAULT, RECOMMENDED, + FOOTER, } /** @@ -19,9 +21,11 @@ class LayoutCategoryAdapter( private var nestedScrollStates: Bundle, private val thumbDimensionProvider: ThumbDimensionProvider, private val recommendedDimensionProvider: ThumbDimensionProvider? = null, - private val showRowDividers: Boolean = true -) : Adapter() { + private val showRowDividers: Boolean = true, + private val footerLayoutResId: Int? = null +) : Adapter() { private var items: List = listOf() + private val shouldShowFooter get() = footerLayoutResId != null && items.isNotEmpty() fun update(newItems: List) { val diffResult = DiffUtil.calculateDiff( @@ -34,29 +38,37 @@ class LayoutCategoryAdapter( diffResult.dispatchUpdatesTo(this) } - override fun getItemCount(): Int = items.size + override fun getItemCount(): Int = items.size + if (shouldShowFooter) 1 else 0 - override fun onBindViewHolder(holder: LayoutsItemViewHolder, position: Int) { - holder.bind(items[position]) + override fun onBindViewHolder(holder: LayoutsRowViewHolder, position: Int) { + (holder as? LayoutsItemViewHolder)?.bind(items[position]) } override fun getItemViewType(position: Int): Int { - return if (items[position].isRecommended) RECOMMENDED.ordinal else DEFAULT.ordinal + return when { + items.size <= position -> FOOTER.ordinal + items[position].isRecommended -> RECOMMENDED.ordinal + else -> DEFAULT.ordinal + } } - override fun onViewRecycled(holder: LayoutsItemViewHolder) { + override fun onViewRecycled(holder: LayoutsRowViewHolder) { super.onViewRecycled(holder) - holder.onRecycled() + (holder as? LayoutsItemViewHolder)?.onRecycled() } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = - LayoutsItemViewHolder( - parent = parent, - nestedScrollStates = nestedScrollStates, - thumbDimensionProvider = thumbDimensionProvider, - recommendedDimensionProvider = recommendedDimensionProvider, - showRowDividers = showRowDividers - ) + when (viewType) { + FOOTER.ordinal -> LayoutsFooterViewHolder(parent, footerLayoutResId!!) + else -> + LayoutsItemViewHolder( + parent = parent, + nestedScrollStates = nestedScrollStates, + thumbDimensionProvider = thumbDimensionProvider, + recommendedDimensionProvider = recommendedDimensionProvider, + showRowDividers = showRowDividers + ) + } fun onRestoreInstanceState(savedInstanceState: Bundle) { nestedScrollStates = savedInstanceState diff --git a/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutsItemViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutsRowViewHolder.kt similarity index 91% rename from WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutsItemViewHolder.kt rename to WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutsRowViewHolder.kt index bf617d1b6b9b..49e859cbfa0f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutsItemViewHolder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutsRowViewHolder.kt @@ -14,6 +14,13 @@ import androidx.recyclerview.widget.RecyclerView.OnScrollListener import org.wordpress.android.R import org.wordpress.android.util.extensions.setVisible +sealed class LayoutsRowViewHolder(view: View) : RecyclerView.ViewHolder(view) + +class LayoutsFooterViewHolder(parent: ViewGroup, footerLayoutResId: Int) : + LayoutsRowViewHolder( + LayoutInflater.from(parent.context).inflate(footerLayoutResId, parent, false) + ) + /** * Modal Layout Picker layouts view holder */ @@ -24,7 +31,7 @@ class LayoutsItemViewHolder( private var nestedScrollStates: Bundle, private val thumbDimensionProvider: ThumbDimensionProvider, private val recommendedDimensionProvider: ThumbDimensionProvider? -) : RecyclerView.ViewHolder( +) : LayoutsRowViewHolder( LayoutInflater.from( parent.context ).inflate(R.layout.modal_layout_picker_layouts_row, parent, false) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerFragment.kt index 7f879c27b337..8f94e622c382 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerFragment.kt @@ -75,7 +75,8 @@ class HomePagePickerFragment : Fragment() { viewModel.nestedScrollStates, thumbDimensionProvider, recommendedDimensionProvider, - showRowDividers = false + showRowDividers = false, + footerLayoutResId = R.layout.home_page_picker_footer ) } diff --git a/WordPress/src/main/res/drawable/ic_info_outline_grey_dark_24dp.xml b/WordPress/src/main/res/drawable/ic_info_outline_grey_dark_24dp.xml new file mode 100644 index 000000000000..42d91533cf21 --- /dev/null +++ b/WordPress/src/main/res/drawable/ic_info_outline_grey_dark_24dp.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/WordPress/src/main/res/layout/home_page_picker_footer.xml b/WordPress/src/main/res/layout/home_page_picker_footer.xml new file mode 100644 index 000000000000..b6fa197affd3 --- /dev/null +++ b/WordPress/src/main/res/layout/home_page_picker_footer.xml @@ -0,0 +1,22 @@ + + + + + + diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index 1b041bf57b39..b8ca749070c9 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -3396,6 +3396,7 @@ Best for %s Picked for you Blogging + Can\'t decide? You can change the theme at any time. Limited Story Editing