|
|
|
@ -5,11 +5,17 @@
|
|
|
|
|
package org.mozilla.fenix.sync
|
|
|
|
|
|
|
|
|
|
import android.view.View
|
|
|
|
|
import android.view.View.GONE
|
|
|
|
|
import android.widget.LinearLayout
|
|
|
|
|
import androidx.core.content.ContextCompat
|
|
|
|
|
import androidx.recyclerview.widget.RecyclerView
|
|
|
|
|
import kotlinx.android.synthetic.main.no_content_message_with_action.view.*
|
|
|
|
|
import kotlinx.android.synthetic.main.sync_tabs_list_item.view.*
|
|
|
|
|
import kotlinx.android.synthetic.main.view_synced_tabs_group.view.*
|
|
|
|
|
import mozilla.components.browser.storage.sync.Tab
|
|
|
|
|
import mozilla.components.concept.sync.DeviceType
|
|
|
|
|
import mozilla.components.support.ktx.android.util.dpToPx
|
|
|
|
|
import org.mozilla.fenix.NavGraphDirections
|
|
|
|
|
import org.mozilla.fenix.R
|
|
|
|
|
import org.mozilla.fenix.sync.SyncedTabsAdapter.AdapterItem
|
|
|
|
|
|
|
|
|
@ -38,6 +44,44 @@ sealed class SyncedTabsViewHolder(itemView: View) : RecyclerView.ViewHolder(item
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class SignInViewHolder(itemView: View) : SyncedTabsViewHolder(itemView) {
|
|
|
|
|
|
|
|
|
|
override fun <T : AdapterItem> bind(item: T, interactor: (Tab) -> Unit) {
|
|
|
|
|
val signInItem = item as AdapterItem.SignIn
|
|
|
|
|
setErrorMargins()
|
|
|
|
|
|
|
|
|
|
itemView.no_content_header.visibility = GONE
|
|
|
|
|
itemView.no_content_description.text =
|
|
|
|
|
itemView.context.getString(R.string.synced_tabs_sign_in_message)
|
|
|
|
|
itemView.no_content_button.text =
|
|
|
|
|
itemView.context.getString(R.string.synced_tabs_sign_in_button)
|
|
|
|
|
itemView.no_content_button.icon =
|
|
|
|
|
ContextCompat.getDrawable(itemView.context, R.drawable.ic_sign_in)
|
|
|
|
|
itemView.no_content_button.setOnClickListener {
|
|
|
|
|
signInItem.navController.navigate(NavGraphDirections.actionGlobalTurnOnSync())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
companion object {
|
|
|
|
|
const val LAYOUT_ID = R.layout.no_content_message_with_action
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class ErrorViewHolder(itemView: View) : SyncedTabsViewHolder(itemView) {
|
|
|
|
|
|
|
|
|
|
override fun <T : AdapterItem> bind(item: T, interactor: (Tab) -> Unit) {
|
|
|
|
|
val errorItem = item as AdapterItem.Error
|
|
|
|
|
setErrorMargins()
|
|
|
|
|
|
|
|
|
|
itemView.no_content_header.visibility = GONE
|
|
|
|
|
itemView.no_content_description.text = itemView.context.getString(errorItem.errorResId)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
companion object {
|
|
|
|
|
const val LAYOUT_ID = R.layout.no_content_message
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class DeviceViewHolder(itemView: View) : SyncedTabsViewHolder(itemView) {
|
|
|
|
|
|
|
|
|
|
override fun <T : AdapterItem> bind(item: T, interactor: (Tab) -> Unit) {
|
|
|
|
@ -45,7 +89,6 @@ sealed class SyncedTabsViewHolder(itemView: View) : RecyclerView.ViewHolder(item
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun bindHeader(device: AdapterItem.Device) {
|
|
|
|
|
|
|
|
|
|
val deviceLogoDrawable = when (device.device.deviceType) {
|
|
|
|
|
DeviceType.DESKTOP -> R.drawable.mozac_ic_device_desktop
|
|
|
|
|
else -> R.drawable.mozac_ic_device_mobile
|
|
|
|
@ -59,4 +102,19 @@ sealed class SyncedTabsViewHolder(itemView: View) : RecyclerView.ViewHolder(item
|
|
|
|
|
const val LAYOUT_ID = R.layout.view_synced_tabs_group
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal fun setErrorMargins() {
|
|
|
|
|
val lp = LinearLayout.LayoutParams(
|
|
|
|
|
LinearLayout.LayoutParams.MATCH_PARENT,
|
|
|
|
|
LinearLayout.LayoutParams.WRAP_CONTENT
|
|
|
|
|
)
|
|
|
|
|
val displayMetrics = itemView.context.resources.displayMetrics
|
|
|
|
|
val margin = ERROR_MARGIN.dpToPx(displayMetrics)
|
|
|
|
|
lp.setMargins(margin, margin, margin, 0)
|
|
|
|
|
itemView.layoutParams = lp
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
companion object {
|
|
|
|
|
private const val ERROR_MARGIN = 20
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|