1
0
Fork 0

For #2390 - Adds onboarding section headers

master
Jeff Boek 2019-05-15 21:30:57 -07:00
parent dfe14e1751
commit fe16810ddb
5 changed files with 60 additions and 3 deletions

View File

@ -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
)
}
}
}

View File

@ -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) {

View File

@ -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
}
}

View File

@ -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>

View File

@ -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>