For #2390 - Adds onboarding section headers
parent
dfe14e1751
commit
fe16810ddb
|
@ -4,6 +4,7 @@
|
|||
|
||||
package org.mozilla.fenix.home.sessioncontrol
|
||||
|
||||
import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
@ -20,21 +21,25 @@ import org.mozilla.fenix.home.sessioncontrol.viewholders.NoCollectionMessageView
|
|||
import org.mozilla.fenix.home.sessioncontrol.viewholders.CollectionViewHolder
|
||||
import org.mozilla.fenix.home.sessioncontrol.viewholders.TabInCollectionViewHolder
|
||||
import org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding.OnboardingHeaderViewHolder
|
||||
import org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding.OnboardingSectionHeaderViewHolder
|
||||
import java.lang.IllegalStateException
|
||||
|
||||
sealed class AdapterItem {
|
||||
data class TabHeader(val isPrivate: Boolean, val hasTabs: Boolean) : AdapterItem()
|
||||
object NoTabMessage : AdapterItem()
|
||||
data class TabItem(val tab: Tab) : AdapterItem()
|
||||
object PrivateBrowsingDescription : AdapterItem()
|
||||
object SaveTabGroup : AdapterItem()
|
||||
object DeleteTabs : AdapterItem()
|
||||
|
||||
object PrivateBrowsingDescription : AdapterItem()
|
||||
|
||||
object CollectionHeader : AdapterItem()
|
||||
object NoCollectionMessage : AdapterItem()
|
||||
data class CollectionItem(val collection: TabCollection) : AdapterItem()
|
||||
data class TabInCollectionItem(val collection: TabCollection, val tab: Tab, val isLastTab: Boolean) : AdapterItem()
|
||||
|
||||
object OnboardingHeader : AdapterItem()
|
||||
data class OnboardingSectionHeader(val labelBuilder: (Context) -> String) : AdapterItem()
|
||||
|
||||
val viewType: Int
|
||||
get() = when (this) {
|
||||
|
@ -49,6 +54,7 @@ sealed class AdapterItem {
|
|||
is CollectionItem -> CollectionViewHolder.LAYOUT_ID
|
||||
is TabInCollectionItem -> TabInCollectionViewHolder.LAYOUT_ID
|
||||
OnboardingHeader -> OnboardingHeaderViewHolder.LAYOUT_ID
|
||||
is OnboardingSectionHeader -> OnboardingSectionHeaderViewHolder.LAYOUT_ID
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -80,6 +86,7 @@ class SessionControlAdapter(
|
|||
CollectionViewHolder.LAYOUT_ID -> CollectionViewHolder(view, actionEmitter, job)
|
||||
TabInCollectionViewHolder.LAYOUT_ID -> TabInCollectionViewHolder(view, actionEmitter, job)
|
||||
OnboardingHeaderViewHolder.LAYOUT_ID -> OnboardingHeaderViewHolder(view)
|
||||
OnboardingSectionHeaderViewHolder.LAYOUT_ID -> OnboardingSectionHeaderViewHolder(view)
|
||||
else -> throw IllegalStateException()
|
||||
}
|
||||
}
|
||||
|
@ -114,6 +121,9 @@ class SessionControlAdapter(
|
|||
val item = items[position] as AdapterItem.TabInCollectionItem
|
||||
holder.bindSession(item.collection, item.tab, item.isLastTab)
|
||||
}
|
||||
is OnboardingSectionHeaderViewHolder -> holder.bind(
|
||||
(items[position] as AdapterItem.OnboardingSectionHeader).labelBuilder
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,7 +61,12 @@ private fun privateModeAdapterItems(tabs: List<Tab>): List<AdapterItem> {
|
|||
}
|
||||
|
||||
private fun onboardingAdapterItems(): List<AdapterItem> = listOf(
|
||||
AdapterItem.OnboardingHeader
|
||||
AdapterItem.OnboardingHeader,
|
||||
AdapterItem.OnboardingSectionHeader() { it.getString(R.string.onboarding_fxa_section_header) },
|
||||
AdapterItem.OnboardingSectionHeader() {
|
||||
val appName = it.getString(R.string.app_name)
|
||||
it.getString(R.string.onboarding_feature_section_header, appName)
|
||||
}
|
||||
)
|
||||
|
||||
private fun SessionControlState.toAdapterList(): List<AdapterItem> = when (mode) {
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding
|
||||
|
||||
import android.content.Context
|
||||
import android.view.View
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import kotlinx.android.synthetic.main.onboarding_section_header.view.*
|
||||
import org.mozilla.fenix.R
|
||||
|
||||
class OnboardingSectionHeaderViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
|
||||
|
||||
fun bind(labelBuilder: (Context) -> String) {
|
||||
view.section_header_text.text = labelBuilder(view.context)
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val LAYOUT_ID = R.layout.onboarding_section_header
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/onboarding_header"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<TextView
|
||||
android:id="@+id/section_header_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="@style/HeaderTextStyle" />
|
||||
</FrameLayout>
|
|
@ -487,6 +487,11 @@
|
|||
<string name="url_copied">URL copied</string>
|
||||
|
||||
<!-- Onboarding -->
|
||||
<!-- Header text for onboarding -->
|
||||
<!-- Text for onboarding welcome message-->
|
||||
<string name="onboarding_header">Welcome to Firefox!</string>
|
||||
<!-- text for the Firefox Accounts section header -->
|
||||
<string name="onboarding_fxa_section_header">Already have an account?</string>
|
||||
<!-- text for the Firefox Preview feature section header
|
||||
The first parameter is the name of the app defined in app_name (for example: Firefox Preview) -->
|
||||
<string name="onboarding_feature_section_header">Get to know %s</string>
|
||||
</resources>
|
||||
|
|
Loading…
Reference in New Issue