Improve viewbinding - [3/3]
This commit is contained in:
committed by
Aayush Gupta
parent
4919fbd4db
commit
7110a4a77b
@@ -25,44 +25,31 @@ import android.widget.RelativeLayout
|
|||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.databinding.ViewRatingBinding
|
import com.aurora.store.databinding.ViewRatingBinding
|
||||||
|
|
||||||
class RatingView : RelativeLayout {
|
class RatingView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
|
) : RelativeLayout(context, attrs, defStyleAttr) {
|
||||||
|
|
||||||
private lateinit var B: ViewRatingBinding
|
private lateinit var binding: ViewRatingBinding
|
||||||
|
|
||||||
var number = 0
|
var number = 0
|
||||||
var max = 0
|
var max = 0
|
||||||
var rating = 0
|
var rating = 0
|
||||||
|
|
||||||
constructor(context: Context, number: Int, max: Int, rating: Int) : super(context) {
|
constructor(context: Context, number: Int, max: Int, rating: Int) : this(context) {
|
||||||
this.number = number
|
this.number = number
|
||||||
this.max = max
|
this.max = max
|
||||||
this.rating = rating
|
this.rating = rating
|
||||||
init(context)
|
init(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(context: Context?) : super(context) {}
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {}
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
context: Context?,
|
|
||||||
attrs: AttributeSet?,
|
|
||||||
defStyleAttr: Int,
|
|
||||||
defStyleRes: Int
|
|
||||||
) : super(context, attrs, defStyleAttr, defStyleRes) {
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context) {
|
private fun init(context: Context) {
|
||||||
val view = inflate(context, R.layout.view_rating, this)
|
val view = inflate(context, R.layout.view_rating, this)
|
||||||
B = ViewRatingBinding.bind(view)
|
binding = ViewRatingBinding.bind(view)
|
||||||
|
|
||||||
B.avgNum.text = number.toString()
|
binding.avgNum.text = number.toString()
|
||||||
B.avgRating.max = max
|
binding.avgRating.max = max
|
||||||
B.avgRating.progress = rating
|
binding.avgRating.progress = rating
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import com.aurora.store.databinding.ViewActionHeaderBinding
|
|||||||
|
|
||||||
class ActionHeaderLayout : RelativeLayout {
|
class ActionHeaderLayout : RelativeLayout {
|
||||||
|
|
||||||
private lateinit var B: ViewActionHeaderBinding
|
private lateinit var binding: ViewActionHeaderBinding
|
||||||
|
|
||||||
constructor(context: Context) : super(context) {
|
constructor(context: Context) : super(context) {
|
||||||
init(context, null)
|
init(context, null)
|
||||||
@@ -48,22 +48,24 @@ class ActionHeaderLayout : RelativeLayout {
|
|||||||
|
|
||||||
private fun init(context: Context, attrs: AttributeSet?) {
|
private fun init(context: Context, attrs: AttributeSet?) {
|
||||||
val view = inflate(context, R.layout.view_action_header, this)
|
val view = inflate(context, R.layout.view_action_header, this)
|
||||||
B = ViewActionHeaderBinding.bind(view)
|
binding = ViewActionHeaderBinding.bind(view)
|
||||||
|
|
||||||
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.ActionHeaderLayout)
|
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.ActionHeaderLayout)
|
||||||
val textPrimary = typedArray.getString(R.styleable.ActionHeaderLayout_headerTitle)
|
val textPrimary = typedArray.getString(R.styleable.ActionHeaderLayout_headerTitle)
|
||||||
|
|
||||||
|
typedArray.recycle()
|
||||||
|
|
||||||
textPrimary?.let {
|
textPrimary?.let {
|
||||||
B.txtTitle.text = it
|
binding.txtTitle.text = it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setHeader(header: String?) {
|
fun setHeader(header: String?) {
|
||||||
B.txtTitle.text = header
|
binding.txtTitle.text = header
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addClickListener(onclickListener: OnClickListener?) {
|
fun addClickListener(onclickListener: OnClickListener?) {
|
||||||
B.imgAction.visibility = View.VISIBLE
|
binding.imgAction.visibility = View.VISIBLE
|
||||||
B.imgAction.setOnClickListener(onclickListener)
|
binding.imgAction.setOnClickListener(onclickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -27,7 +27,7 @@ import com.aurora.store.databinding.ViewDevInfoBinding
|
|||||||
|
|
||||||
class DevInfoLayout : RelativeLayout {
|
class DevInfoLayout : RelativeLayout {
|
||||||
|
|
||||||
private lateinit var B: ViewDevInfoBinding
|
private lateinit var binding: ViewDevInfoBinding
|
||||||
|
|
||||||
constructor(context: Context) : super(context) {
|
constructor(context: Context) : super(context) {
|
||||||
init(context, null)
|
init(context, null)
|
||||||
@@ -45,18 +45,9 @@ class DevInfoLayout : RelativeLayout {
|
|||||||
init(context, attrs)
|
init(context, attrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(
|
|
||||||
context: Context,
|
|
||||||
attrs: AttributeSet?,
|
|
||||||
defStyleAttr: Int,
|
|
||||||
defStyleRes: Int
|
|
||||||
) : super(context, attrs, defStyleAttr, defStyleRes) {
|
|
||||||
init(context, attrs)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context, attrs: AttributeSet?) {
|
private fun init(context: Context, attrs: AttributeSet?) {
|
||||||
val view = inflate(context, R.layout.view_dev_info, this)
|
val view = inflate(context, R.layout.view_dev_info, this)
|
||||||
B = ViewDevInfoBinding.bind(view)
|
binding = ViewDevInfoBinding.bind(view)
|
||||||
|
|
||||||
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.DevInfoLayout)
|
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.DevInfoLayout)
|
||||||
val icon = typedArray.getResourceId(
|
val icon = typedArray.getResourceId(
|
||||||
@@ -67,14 +58,14 @@ class DevInfoLayout : RelativeLayout {
|
|||||||
val textPrimary = typedArray.getString(R.styleable.DevInfoLayout_txtTitle)
|
val textPrimary = typedArray.getString(R.styleable.DevInfoLayout_txtTitle)
|
||||||
val textSecondary = typedArray.getString(R.styleable.DevInfoLayout_txtSubtitle)
|
val textSecondary = typedArray.getString(R.styleable.DevInfoLayout_txtSubtitle)
|
||||||
|
|
||||||
B.img.setImageResource(icon)
|
binding.img.setImageResource(icon)
|
||||||
B.txtTitle.text = textPrimary
|
binding.txtTitle.text = textPrimary
|
||||||
B.txtSubtitle.text = textSecondary
|
binding.txtSubtitle.text = textSecondary
|
||||||
typedArray.recycle()
|
typedArray.recycle()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setTxtSubtitle(text: String?) {
|
fun setTxtSubtitle(text: String?) {
|
||||||
B.txtSubtitle.text = text
|
binding.txtSubtitle.text = text
|
||||||
invalidate()
|
invalidate()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,48 +33,32 @@ import com.aurora.store.R
|
|||||||
import com.aurora.store.data.model.PermissionGroupInfo
|
import com.aurora.store.data.model.PermissionGroupInfo
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
class PermissionGroup : LinearLayout {
|
class PermissionGroup @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
|
) : LinearLayout(context, attrs, defStyleAttr) {
|
||||||
|
|
||||||
private lateinit var permissionGroupInfo: PermissionGroupInfo
|
private lateinit var permissionGroupInfo: PermissionGroupInfo
|
||||||
private lateinit var packageManager: PackageManager
|
private lateinit var packageManager: PackageManager
|
||||||
|
|
||||||
private val permissionMap: MutableMap<String, String> = HashMap()
|
private val permissionMap: MutableMap<String, String> = HashMap()
|
||||||
|
|
||||||
constructor(context: Context?) : super(context) {
|
constructor(context: Context?, permissionGroupInfo: PermissionGroupInfo) : this(context) {
|
||||||
init()
|
if (context != null) {
|
||||||
}
|
inflate(context, R.layout.layout_permission, this)
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
layoutParams = LayoutParams(
|
||||||
init()
|
LayoutParams.WRAP_CONTENT,
|
||||||
}
|
LayoutParams.WRAP_CONTENT
|
||||||
|
)
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
this.packageManager = context.packageManager
|
||||||
context,
|
this.permissionGroupInfo = permissionGroupInfo
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(
|
val imageView = findViewById<ImageView>(R.id.img)
|
||||||
context: Context?,
|
imageView.setImageDrawable(getPermissionGroupIcon(permissionGroupInfo))
|
||||||
attrs: AttributeSet?,
|
}
|
||||||
defStyleAttr: Int,
|
|
||||||
defStyleRes: Int
|
|
||||||
) : super(context, attrs, defStyleAttr, defStyleRes) {
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init() {
|
|
||||||
inflate(context, R.layout.layout_permission, this)
|
|
||||||
packageManager = context.packageManager
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setPermissionGroupInfo(permissionGroupInfo: PermissionGroupInfo) {
|
|
||||||
this.permissionGroupInfo = permissionGroupInfo
|
|
||||||
val imageView = findViewById<ImageView>(R.id.img)
|
|
||||||
imageView.setImageDrawable(getPermissionGroupIcon(permissionGroupInfo))
|
|
||||||
//imageView.setColorFilter(getContext().getStyledAttributeColor(imageView.getContext(), android.R.attr.colorAccent));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addPermission(permissionInfo: PermissionInfo, currentPerms: List<String> = emptyList()) {
|
fun addPermission(permissionInfo: PermissionInfo, currentPerms: List<String> = emptyList()) {
|
||||||
@@ -166,11 +150,7 @@ class PermissionGroup : LinearLayout {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return label.replaceFirstChar {
|
return label.replaceFirstChar {
|
||||||
if (it.isLowerCase()) {
|
it.titlecase(Locale.getDefault())
|
||||||
it.titlecase(Locale.getDefault())
|
|
||||||
} else {
|
|
||||||
it.toString()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ import com.aurora.store.databinding.ViewActionButtonBinding
|
|||||||
|
|
||||||
class ActionButton : RelativeLayout {
|
class ActionButton : RelativeLayout {
|
||||||
|
|
||||||
private lateinit var B: ViewActionButtonBinding
|
private lateinit var binding: ViewActionButtonBinding
|
||||||
|
|
||||||
constructor(context: Context) : super(context) {
|
constructor(context: Context) : super(context) {
|
||||||
init(context, null)
|
init(context, null)
|
||||||
@@ -50,18 +50,9 @@ class ActionButton : RelativeLayout {
|
|||||||
init(context, attrs)
|
init(context, attrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(
|
|
||||||
context: Context,
|
|
||||||
attrs: AttributeSet?,
|
|
||||||
defStyleAttr: Int,
|
|
||||||
defStyleRes: Int
|
|
||||||
) : super(context, attrs, defStyleAttr, defStyleRes) {
|
|
||||||
init(context, attrs)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context, attrs: AttributeSet?) {
|
private fun init(context: Context, attrs: AttributeSet?) {
|
||||||
val view = inflate(context, R.layout.view_action_button, this)
|
val view = inflate(context, R.layout.view_action_button, this)
|
||||||
B = ViewActionButtonBinding.bind(view)
|
binding = ViewActionButtonBinding.bind(view)
|
||||||
|
|
||||||
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.ActionButton)
|
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.ActionButton)
|
||||||
val btnTxt = typedArray.getString(R.styleable.ActionButton_btnActionText)
|
val btnTxt = typedArray.getString(R.styleable.ActionButton_btnActionText)
|
||||||
@@ -87,27 +78,27 @@ class ActionButton : RelativeLayout {
|
|||||||
}
|
}
|
||||||
|
|
||||||
stateBackground?.let {
|
stateBackground?.let {
|
||||||
B.root.background = ContextCompat.getDrawable(context, it)
|
binding.root.background = ContextCompat.getDrawable(context, it)
|
||||||
}
|
}
|
||||||
|
|
||||||
val stateColor = ContextCompat.getColor(context, btnTxtColor)
|
val stateColor = ContextCompat.getColor(context, btnTxtColor)
|
||||||
|
|
||||||
B.btn.text = btnTxt
|
binding.btn.text = btnTxt
|
||||||
B.btn.setTextColor(stateColor)
|
binding.btn.setTextColor(stateColor)
|
||||||
B.img.setImageDrawable(ContextCompat.getDrawable(context, stateIcon))
|
binding.img.setImageDrawable(ContextCompat.getDrawable(context, stateIcon))
|
||||||
B.img.imageTintList = ColorStateList.valueOf(stateColor)
|
binding.img.imageTintList = ColorStateList.valueOf(stateColor)
|
||||||
|
|
||||||
typedArray.recycle()
|
typedArray.recycle()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setText(text: String) {
|
fun setText(text: String) {
|
||||||
B.viewFlipper.displayedChild = 0
|
binding.viewFlipper.displayedChild = 0
|
||||||
B.btn.text = text
|
binding.btn.text = text
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setText(text: Int) {
|
fun setText(text: Int) {
|
||||||
B.viewFlipper.displayedChild = 0
|
binding.viewFlipper.displayedChild = 0
|
||||||
B.btn.text = getString(text)
|
binding.btn.text = getString(text)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateState(state: State) {
|
fun updateState(state: State) {
|
||||||
@@ -118,15 +109,15 @@ class ActionButton : RelativeLayout {
|
|||||||
else -> 0
|
else -> 0
|
||||||
}
|
}
|
||||||
|
|
||||||
if (B.viewFlipper.displayedChild != displayChild) {
|
if (binding.viewFlipper.displayedChild != displayChild) {
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
B.viewFlipper.displayedChild = displayChild
|
binding.viewFlipper.displayedChild = displayChild
|
||||||
if (displayChild == 2) updateState(State.IDLE)
|
if (displayChild == 2) updateState(State.IDLE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addOnClickListener(onClickListener: OnClickListener?) {
|
fun addOnClickListener(onClickListener: OnClickListener?) {
|
||||||
B.btn.setOnClickListener(onClickListener)
|
binding.btn.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import com.aurora.store.databinding.ViewStateButtonBinding
|
|||||||
|
|
||||||
class StateButton : RelativeLayout {
|
class StateButton : RelativeLayout {
|
||||||
|
|
||||||
private lateinit var B: ViewStateButtonBinding
|
private lateinit var binding: ViewStateButtonBinding
|
||||||
|
|
||||||
constructor(context: Context) : super(context) {
|
constructor(context: Context) : super(context) {
|
||||||
init(context, null)
|
init(context, null)
|
||||||
@@ -47,18 +47,9 @@ class StateButton : RelativeLayout {
|
|||||||
init(context, attrs)
|
init(context, attrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(
|
|
||||||
context: Context,
|
|
||||||
attrs: AttributeSet?,
|
|
||||||
defStyleAttr: Int,
|
|
||||||
defStyleRes: Int
|
|
||||||
) : super(context, attrs, defStyleAttr, defStyleRes) {
|
|
||||||
init(context, attrs)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context, attrs: AttributeSet?) {
|
private fun init(context: Context, attrs: AttributeSet?) {
|
||||||
val view = inflate(context, R.layout.view_state_button, this)
|
val view = inflate(context, R.layout.view_state_button, this)
|
||||||
B = ViewStateButtonBinding.bind(view)
|
binding = ViewStateButtonBinding.bind(view)
|
||||||
|
|
||||||
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.StateButton)
|
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.StateButton)
|
||||||
val btnTxt = typedArray.getString(R.styleable.StateButton_btnStateText)
|
val btnTxt = typedArray.getString(R.styleable.StateButton_btnStateText)
|
||||||
@@ -67,20 +58,20 @@ class StateButton : RelativeLayout {
|
|||||||
R.drawable.ic_arrow_right
|
R.drawable.ic_arrow_right
|
||||||
)
|
)
|
||||||
|
|
||||||
B.btn.text = btnTxt
|
binding.btn.text = btnTxt
|
||||||
B.btn.icon = ContextCompat.getDrawable(context, btnIcon)
|
binding.btn.icon = ContextCompat.getDrawable(context, btnIcon)
|
||||||
typedArray.recycle()
|
typedArray.recycle()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateProgress(isVisible: Boolean) {
|
fun updateProgress(isVisible: Boolean) {
|
||||||
if (isVisible)
|
if (isVisible)
|
||||||
B.progress.visibility = View.VISIBLE
|
binding.progress.visibility = View.VISIBLE
|
||||||
else
|
else
|
||||||
|
|
||||||
B.progress.visibility = View.INVISIBLE
|
binding.progress.visibility = View.INVISIBLE
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addOnClickListener(onClickListener: OnClickListener) {
|
fun addOnClickListener(onClickListener: OnClickListener) {
|
||||||
B.btn.setOnClickListener(onClickListener)
|
binding.btn.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import com.aurora.store.databinding.ViewUpdateButtonBinding
|
|||||||
|
|
||||||
class UpdateButton : RelativeLayout {
|
class UpdateButton : RelativeLayout {
|
||||||
|
|
||||||
private lateinit var B: ViewUpdateButtonBinding
|
private lateinit var binding: ViewUpdateButtonBinding
|
||||||
|
|
||||||
constructor(context: Context) : super(context) {
|
constructor(context: Context) : super(context) {
|
||||||
init(context)
|
init(context)
|
||||||
@@ -48,49 +48,41 @@ class UpdateButton : RelativeLayout {
|
|||||||
init(context)
|
init(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(
|
|
||||||
context: Context,
|
|
||||||
attrs: AttributeSet?,
|
|
||||||
defStyleAttr: Int,
|
|
||||||
defStyleRes: Int
|
|
||||||
) : super(context, attrs, defStyleAttr, defStyleRes) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context) {
|
private fun init(context: Context) {
|
||||||
val view = inflate(context, R.layout.view_update_button, this)
|
val view = inflate(context, R.layout.view_update_button, this)
|
||||||
B = ViewUpdateButtonBinding.bind(view)
|
binding = ViewUpdateButtonBinding.bind(view)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setText(text: String) {
|
fun setText(text: String) {
|
||||||
B.viewFlipper.displayedChild = 0
|
binding.viewFlipper.displayedChild = 0
|
||||||
B.btnPositive.text = text
|
binding.btnPositive.text = text
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setText(text: Int) {
|
fun setText(text: Int) {
|
||||||
B.viewFlipper.displayedChild = 0
|
binding.viewFlipper.displayedChild = 0
|
||||||
B.btnPositive.text = getString(text)
|
binding.btnPositive.text = getString(text)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateState(downloadStatus: DownloadStatus) {
|
fun updateState(downloadStatus: DownloadStatus) {
|
||||||
val displayChild = when (downloadStatus) {
|
val displayChild = when (downloadStatus) {
|
||||||
DownloadStatus.QUEUED,
|
DownloadStatus.QUEUED,
|
||||||
DownloadStatus.DOWNLOADING -> 2
|
DownloadStatus.DOWNLOADING -> 2
|
||||||
|
|
||||||
else -> 0
|
else -> 0
|
||||||
}
|
}
|
||||||
|
|
||||||
if (B.viewFlipper.displayedChild != displayChild) {
|
if (binding.viewFlipper.displayedChild != displayChild) {
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
B.viewFlipper.displayedChild = displayChild
|
binding.viewFlipper.displayedChild = displayChild
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addPositiveOnClickListener(onClickListener: OnClickListener?) {
|
fun addPositiveOnClickListener(onClickListener: OnClickListener?) {
|
||||||
B.btnPositive.setOnClickListener(onClickListener)
|
binding.btnPositive.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addNegativeOnClickListener(onClickListener: OnClickListener?) {
|
fun addNegativeOnClickListener(onClickListener: OnClickListener?) {
|
||||||
B.btnNegative.setOnClickListener(onClickListener)
|
binding.btnNegative.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import com.aurora.store.view.epoxy.views.shimmer.AppViewShimmerModel_
|
|||||||
import com.aurora.store.view.epoxy.views.shimmer.HeaderViewShimmerModel_
|
import com.aurora.store.view.epoxy.views.shimmer.HeaderViewShimmerModel_
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
class CarouselShimmerGroup() :
|
class CarouselShimmerGroup :
|
||||||
EpoxyModelGroup(
|
EpoxyModelGroup(
|
||||||
R.layout.model_carousel_group, buildModels()
|
R.layout.model_carousel_group, buildModels()
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -21,34 +21,12 @@ package com.aurora.store.view.epoxy.views
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewAppProgressBinding
|
import com.aurora.store.databinding.ViewAppProgressBinding
|
||||||
|
|
||||||
@ModelView(autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT)
|
@ModelView(autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT)
|
||||||
class AppProgressView : RelativeLayout {
|
class AppProgressView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewAppProgressBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewAppProgressBinding>(context, attrs, defStyleAttr)
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_app_progress, this)
|
|
||||||
B = ViewAppProgressBinding.bind(view)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Aurora Store
|
||||||
|
* Copyright (C) 2021, Rahul Kumar Patel <whyorean@gmail.com>
|
||||||
|
*
|
||||||
|
* Aurora Store is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Aurora Store is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Aurora Store. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.aurora.store.view.epoxy.views
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import android.view.animation.AnimationUtils
|
||||||
|
import com.airbnb.epoxy.EpoxyModel
|
||||||
|
import com.aurora.store.view.epoxy.views.app.AppListView
|
||||||
|
|
||||||
|
abstract class BaseModel<T : View> : EpoxyModel<T>() {
|
||||||
|
|
||||||
|
override fun bind(view: T) {
|
||||||
|
super.bind(view)
|
||||||
|
when (view) {
|
||||||
|
is AppListView -> {
|
||||||
|
view.startAnimation(
|
||||||
|
AnimationUtils.loadAnimation(
|
||||||
|
view.context,
|
||||||
|
android.R.anim.fade_in
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun unbind(view: T) {
|
||||||
|
when (view) {
|
||||||
|
is AppListView -> {
|
||||||
|
view.clearAnimation()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,50 +1,51 @@
|
|||||||
/*
|
|
||||||
* Aurora Store
|
|
||||||
* Copyright (C) 2021, Rahul Kumar Patel <whyorean@gmail.com>
|
|
||||||
*
|
|
||||||
* Aurora Store is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* Aurora Store is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with Aurora Store. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.aurora.store.view.epoxy.views
|
package com.aurora.store.view.epoxy.views
|
||||||
|
|
||||||
import android.view.View
|
import android.content.Context
|
||||||
import android.view.animation.AnimationUtils
|
import android.util.AttributeSet
|
||||||
import com.airbnb.epoxy.EpoxyModel
|
import android.view.LayoutInflater
|
||||||
import com.aurora.store.view.epoxy.views.app.AppListView
|
import android.view.ViewGroup
|
||||||
|
import android.widget.RelativeLayout
|
||||||
|
import androidx.viewbinding.ViewBinding
|
||||||
|
import java.lang.reflect.ParameterizedType
|
||||||
|
|
||||||
abstract class BaseView<T : View> : EpoxyModel<T>() {
|
abstract class BaseView<ViewBindingType : ViewBinding> : RelativeLayout {
|
||||||
|
|
||||||
override fun bind(view: T) {
|
private lateinit var _binding: ViewBindingType
|
||||||
super.bind(view)
|
protected val binding get() = _binding
|
||||||
when (view) {
|
|
||||||
is AppListView -> {
|
constructor(context: Context?) : super(context) {
|
||||||
view.startAnimation(
|
init(context)
|
||||||
AnimationUtils.loadAnimation(
|
}
|
||||||
view.context,
|
|
||||||
android.R.anim.fade_in
|
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
||||||
)
|
init(context)
|
||||||
)
|
}
|
||||||
}
|
|
||||||
|
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
||||||
|
context,
|
||||||
|
attrs,
|
||||||
|
defStyleAttr
|
||||||
|
) {
|
||||||
|
init(context)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun init(context: Context?) {
|
||||||
|
if (context != null) {
|
||||||
|
_binding = inflateViewBinding(LayoutInflater.from(context))
|
||||||
|
addView(_binding.root)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun unbind(view: T) {
|
@Suppress("UNCHECKED_CAST")
|
||||||
when (view) {
|
private fun inflateViewBinding(inflater: LayoutInflater): ViewBindingType {
|
||||||
is AppListView -> {
|
val type =
|
||||||
view.clearAnimation()
|
(javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<ViewBindingType>
|
||||||
}
|
val method = type.getMethod(
|
||||||
}
|
"inflate",
|
||||||
|
LayoutInflater::class.java,
|
||||||
|
ViewGroup::class.java,
|
||||||
|
Boolean::class.java
|
||||||
|
)
|
||||||
|
return method.invoke(null, inflater, this, false) as ViewBindingType
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -22,7 +22,6 @@ package com.aurora.store.view.epoxy.views
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.CompoundButton
|
import android.widget.CompoundButton
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.transform.RoundedCornersTransformation
|
import coil.transform.RoundedCornersTransformation
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
@@ -34,62 +33,43 @@ import com.aurora.store.databinding.ViewBlackBinding
|
|||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class BlackListView : RelativeLayout {
|
class BlackListView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewBlackBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewBlackBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_black, this)
|
|
||||||
B = ViewBlackBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun app(app: App) {
|
fun app(app: App) {
|
||||||
B.imgIcon.load(app.iconArtwork.url) {
|
binding.imgIcon.load(app.iconArtwork.url) {
|
||||||
placeholder(R.drawable.bg_placeholder)
|
placeholder(R.drawable.bg_placeholder)
|
||||||
transformations(RoundedCornersTransformation(25F))
|
transformations(RoundedCornersTransformation(25F))
|
||||||
}
|
}
|
||||||
|
|
||||||
B.txtLine1.text = app.displayName
|
binding.txtLine1.text = app.displayName
|
||||||
B.txtLine2.text = app.packageName
|
binding.txtLine2.text = app.packageName
|
||||||
B.txtLine3.text = ("${app.versionName}.${app.versionCode}")
|
binding.txtLine3.text = ("${app.versionName}.${app.versionCode}")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun markChecked(isChecked: Boolean) {
|
fun markChecked(isChecked: Boolean) {
|
||||||
B.checkbox.isChecked = isChecked
|
binding.checkbox.isChecked = isChecked
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun checked(onCheckedChangeListener: CompoundButton.OnCheckedChangeListener?) {
|
fun checked(onCheckedChangeListener: CompoundButton.OnCheckedChangeListener?) {
|
||||||
B.checkbox.setOnCheckedChangeListener(onCheckedChangeListener)
|
binding.checkbox.setOnCheckedChangeListener(onCheckedChangeListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun longClick(onClickListener: OnLongClickListener?) {
|
fun longClick(onClickListener: OnLongClickListener?) {
|
||||||
B.root.setOnLongClickListener(onClickListener)
|
binding.root.setOnLongClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,52 +21,31 @@ package com.aurora.store.view.epoxy.views
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.gplayapi.data.models.Category
|
import com.aurora.gplayapi.data.models.Category
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewCategoryBinding
|
import com.aurora.store.databinding.ViewCategoryBinding
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class CategoryView : RelativeLayout {
|
class CategoryView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewCategoryBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewCategoryBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_category, this)
|
|
||||||
B = ViewCategoryBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun category(category: Category) {
|
fun category(category: Category) {
|
||||||
B.txtName.text = category.title
|
binding.txtName.text = category.title
|
||||||
B.imgBackground.load(category.imageUrl)
|
binding.imgBackground.load(category.imageUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,41 +2,20 @@ package com.aurora.store.view.epoxy.views
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewDispenserBinding
|
import com.aurora.store.databinding.ViewDispenserBinding
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class DispenserView : RelativeLayout {
|
class DispenserView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var binding: ViewDispenserBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewDispenserBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_dispenser, this)
|
|
||||||
binding = ViewDispenserBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun url(url: String) {
|
fun url(url: String) {
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ package com.aurora.store.view.epoxy.views
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.transform.RoundedCornersTransformation
|
import coil.transform.RoundedCornersTransformation
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
@@ -37,42 +36,23 @@ import java.util.Locale
|
|||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class DownloadView : RelativeLayout {
|
class DownloadView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewDownloadBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewDownloadBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_download, this)
|
|
||||||
B = ViewDownloadBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun download(download: Download) {
|
fun download(download: Download) {
|
||||||
B.imgDownload.load(download.iconURL) {
|
binding.imgDownload.load(download.iconURL) {
|
||||||
placeholder(R.drawable.bg_placeholder)
|
placeholder(R.drawable.bg_placeholder)
|
||||||
transformations(RoundedCornersTransformation(32F))
|
transformations(RoundedCornersTransformation(32F))
|
||||||
}
|
}
|
||||||
B.txtTitle.text = download.displayName
|
binding.txtTitle.text = download.displayName
|
||||||
|
|
||||||
B.txtStatus.text = download.downloadStatus.name
|
binding.txtStatus.text = download.downloadStatus.name
|
||||||
.lowercase(Locale.getDefault())
|
.lowercase(Locale.getDefault())
|
||||||
.replaceFirstChar {
|
.replaceFirstChar {
|
||||||
if (it.isLowerCase()) {
|
if (it.isLowerCase()) {
|
||||||
@@ -82,38 +62,38 @@ class DownloadView : RelativeLayout {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
B.progressDownload.apply {
|
binding.progressDownload.apply {
|
||||||
progress = download.progress
|
progress = download.progress
|
||||||
isIndeterminate = download.progress <= 0 && !download.isFinished
|
isIndeterminate = download.progress <= 0 && !download.isFinished
|
||||||
}
|
}
|
||||||
B.txtProgress.text = ("${download.progress}%")
|
binding.txtProgress.text = ("${download.progress}%")
|
||||||
|
|
||||||
B.txtEta.text = getETAString(context, download.timeRemaining)
|
binding.txtEta.text = getETAString(context, download.timeRemaining)
|
||||||
B.txtSpeed.text = getDownloadSpeedString(
|
binding.txtSpeed.text = getDownloadSpeedString(
|
||||||
context,
|
context,
|
||||||
download.speed
|
download.speed
|
||||||
)
|
)
|
||||||
|
|
||||||
when (download.downloadStatus) {
|
when (download.downloadStatus) {
|
||||||
DownloadStatus.DOWNLOADING, DownloadStatus.QUEUED -> {
|
DownloadStatus.DOWNLOADING, DownloadStatus.QUEUED -> {
|
||||||
B.txtSpeed.visibility = VISIBLE
|
binding.txtSpeed.visibility = VISIBLE
|
||||||
B.txtEta.visibility = VISIBLE
|
binding.txtEta.visibility = VISIBLE
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
B.txtSpeed.visibility = INVISIBLE
|
binding.txtSpeed.visibility = INVISIBLE
|
||||||
B.txtEta.visibility = INVISIBLE
|
binding.txtEta.visibility = INVISIBLE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun longClick(onClickListener: OnLongClickListener?) {
|
fun longClick(onClickListener: OnLongClickListener?) {
|
||||||
B.root.setOnLongClickListener(onClickListener)
|
binding.root.setOnLongClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,49 +21,28 @@ package com.aurora.store.view.epoxy.views
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewEditorHeadBinding
|
import com.aurora.store.databinding.ViewEditorHeadBinding
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class EditorHeadView : RelativeLayout {
|
class EditorHeadView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewEditorHeadBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewEditorHeadBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_editor_head, this)
|
|
||||||
B = ViewEditorHeadBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun title(title: String) {
|
fun title(title: String) {
|
||||||
B.title.text = title
|
binding.title.text = title
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ package com.aurora.store.view.epoxy.views
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.transform.RoundedCornersTransformation
|
import coil.transform.RoundedCornersTransformation
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
@@ -29,55 +28,36 @@ import com.airbnb.epoxy.ModelProp
|
|||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.extensions.px
|
import com.aurora.extensions.px
|
||||||
import com.aurora.gplayapi.data.models.Artwork
|
import com.aurora.gplayapi.data.models.Artwork
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewEditorImageBinding
|
import com.aurora.store.databinding.ViewEditorImageBinding
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class EditorImageView : RelativeLayout {
|
class EditorImageView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewEditorImageBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewEditorImageBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_editor_image, this)
|
|
||||||
B = ViewEditorImageBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun artwork(artwork: Artwork) {
|
fun artwork(artwork: Artwork) {
|
||||||
when (artwork.type) {
|
when (artwork.type) {
|
||||||
14 -> {
|
14 -> {
|
||||||
B.img.layoutParams.height = 108.px.toInt()
|
binding.img.layoutParams.height = 108.px.toInt()
|
||||||
B.img.layoutParams.width = 192.px.toInt()
|
binding.img.layoutParams.width = 192.px.toInt()
|
||||||
B.img.requestLayout()
|
binding.img.requestLayout()
|
||||||
|
|
||||||
B.img.load(artwork.url) {
|
binding.img.load(artwork.url) {
|
||||||
transformations(RoundedCornersTransformation(8.px.toFloat()))
|
transformations(RoundedCornersTransformation(8.px.toFloat()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
B.img.layoutParams.width = 24.px.toInt()
|
binding.img.layoutParams.width = 24.px.toInt()
|
||||||
B.img.layoutParams.height = 24.px.toInt()
|
binding.img.layoutParams.height = 24.px.toInt()
|
||||||
B.img.requestLayout()
|
binding.img.requestLayout()
|
||||||
B.img.load(artwork.url) {
|
binding.img.load(artwork.url) {
|
||||||
transformations(RoundedCornersTransformation(4.px.toFloat()))
|
transformations(RoundedCornersTransformation(4.px.toFloat()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -86,6 +66,6 @@ class EditorImageView : RelativeLayout {
|
|||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ package com.aurora.store.view.epoxy.views
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.transform.RoundedCornersTransformation
|
import coil.transform.RoundedCornersTransformation
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
@@ -33,32 +32,13 @@ import com.aurora.store.databinding.ViewFavBinding
|
|||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class FavouriteView : RelativeLayout {
|
class FavouriteView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var binding: ViewFavBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewFavBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_fav, this)
|
|
||||||
binding = ViewFavBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun favourite(favourite: Favourite) {
|
fun favourite(favourite: Favourite) {
|
||||||
|
|||||||
@@ -21,63 +21,41 @@ package com.aurora.store.view.epoxy.views
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.airbnb.epoxy.OnViewRecycled
|
import com.airbnb.epoxy.OnViewRecycled
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewHeaderBinding
|
import com.aurora.store.databinding.ViewHeaderBinding
|
||||||
|
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class HeaderView : RelativeLayout {
|
class HeaderView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewHeaderBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewHeaderBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_header, this)
|
|
||||||
B = ViewHeaderBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun title(title: String) {
|
fun title(title: String) {
|
||||||
B.txtTitle.text = title
|
binding.txtTitle.text = title
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun browseUrl(browseUrl: String? = String()) {
|
fun browseUrl(browseUrl: String? = String()) {
|
||||||
if (browseUrl.isNullOrEmpty())
|
if (browseUrl.isNullOrEmpty())
|
||||||
B.imgAction.visibility = INVISIBLE
|
binding.imgAction.visibility = INVISIBLE
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnViewRecycled
|
@OnViewRecycled
|
||||||
fun clear() {
|
fun clear() {
|
||||||
B.imgAction.visibility = VISIBLE
|
binding.imgAction.visibility = VISIBLE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,37 +21,15 @@ package com.aurora.store.view.epoxy.views
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewDividerBinding
|
import com.aurora.store.databinding.ViewDividerBinding
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class HorizontalDividerView : RelativeLayout {
|
class HorizontalDividerView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewDividerBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewDividerBinding>(context, attrs, defStyleAttr)
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_divider, this)
|
|
||||||
B = ViewDividerBinding.bind(view)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -21,56 +21,34 @@ package com.aurora.store.view.epoxy.views
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.airbnb.epoxy.OnViewRecycled
|
import com.airbnb.epoxy.OnViewRecycled
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewActionHeaderBinding
|
import com.aurora.store.databinding.ViewActionHeaderBinding
|
||||||
|
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class MinimalHeaderView : RelativeLayout {
|
class MinimalHeaderView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewActionHeaderBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewActionHeaderBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_action_header, this)
|
|
||||||
B = ViewActionHeaderBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun title(title: String) {
|
fun title(title: String) {
|
||||||
B.txtTitle.text = title
|
binding.txtTitle.text = title
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.imgAction.setOnClickListener(onClickListener)
|
binding.imgAction.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnViewRecycled
|
@OnViewRecycled
|
||||||
fun clear() {
|
fun clear() {
|
||||||
B.imgAction.visibility = VISIBLE
|
binding.imgAction.visibility = VISIBLE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ package com.aurora.store.view.epoxy.views
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.transform.RoundedCornersTransformation
|
import coil.transform.RoundedCornersTransformation
|
||||||
@@ -34,41 +33,22 @@ import com.aurora.store.databinding.ViewSearchSuggestionBinding
|
|||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class SearchSuggestionView : RelativeLayout {
|
class SearchSuggestionView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewSearchSuggestionBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewSearchSuggestionBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_search_suggestion, this)
|
|
||||||
B = ViewSearchSuggestionBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun entry(searchSuggestEntry: SearchSuggestEntry) {
|
fun entry(searchSuggestEntry: SearchSuggestEntry) {
|
||||||
if (searchSuggestEntry.hasImageContainer()) {
|
if (searchSuggestEntry.hasImageContainer()) {
|
||||||
B.img.load(searchSuggestEntry.imageContainer.imageUrl) {
|
binding.img.load(searchSuggestEntry.imageContainer.imageUrl) {
|
||||||
transformations(RoundedCornersTransformation(8F))
|
transformations(RoundedCornersTransformation(8F))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
B.img.setImageDrawable(
|
binding.img.setImageDrawable(
|
||||||
ContextCompat.getDrawable(
|
ContextCompat.getDrawable(
|
||||||
context,
|
context,
|
||||||
R.drawable.ic_search_suggestion
|
R.drawable.ic_search_suggestion
|
||||||
@@ -76,16 +56,16 @@ class SearchSuggestionView : RelativeLayout {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
B.txtTitle.text = searchSuggestEntry.title
|
binding.txtTitle.text = searchSuggestEntry.title
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun action(onClickListener: OnClickListener?) {
|
fun action(onClickListener: OnClickListener?) {
|
||||||
B.action.setOnClickListener(onClickListener)
|
binding.action.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,61 +21,40 @@ package com.aurora.store.view.epoxy.views
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.airbnb.epoxy.OnViewRecycled
|
import com.airbnb.epoxy.OnViewRecycled
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewHeaderUpdateBinding
|
import com.aurora.store.databinding.ViewHeaderUpdateBinding
|
||||||
|
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class UpdateHeaderView : RelativeLayout {
|
class UpdateHeaderView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewHeaderUpdateBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewHeaderUpdateBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_header_update, this)
|
|
||||||
B = ViewHeaderUpdateBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun title(title: String) {
|
fun title(title: String) {
|
||||||
B.txtTitle.text = title
|
binding.txtTitle.text = title
|
||||||
}
|
}
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun action(action: String) {
|
fun action(action: String) {
|
||||||
B.btnAction.text = action
|
binding.btnAction.text = action
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.btnAction.setOnClickListener(onClickListener)
|
binding.btnAction.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnViewRecycled
|
@OnViewRecycled
|
||||||
fun clear() {
|
fun clear() {
|
||||||
B.btnAction.isEnabled = true
|
binding.btnAction.isEnabled = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ package com.aurora.store.view.epoxy.views.app
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.transform.RoundedCornersTransformation
|
import coil.transform.RoundedCornersTransformation
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
@@ -31,46 +30,28 @@ import com.aurora.extensions.getString
|
|||||||
import com.aurora.gplayapi.data.models.App
|
import com.aurora.gplayapi.data.models.App
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.databinding.ViewAppListBinding
|
import com.aurora.store.databinding.ViewAppListBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class AppListView : RelativeLayout {
|
class AppListView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewAppListBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewAppListBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_app_list, this)
|
|
||||||
B = ViewAppListBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun app(app: App) {
|
fun app(app: App) {
|
||||||
B.imgIcon.load(app.iconArtwork.url) {
|
binding.imgIcon.load(app.iconArtwork.url) {
|
||||||
placeholder(R.drawable.bg_placeholder)
|
placeholder(R.drawable.bg_placeholder)
|
||||||
transformations(RoundedCornersTransformation(25F))
|
transformations(RoundedCornersTransformation(25F))
|
||||||
}
|
}
|
||||||
|
|
||||||
B.txtLine1.text = app.displayName
|
binding.txtLine1.text = app.displayName
|
||||||
B.txtLine2.text = app.developerName
|
binding.txtLine2.text = app.developerName
|
||||||
|
|
||||||
val extras: MutableList<String> = mutableListOf()
|
val extras: MutableList<String> = mutableListOf()
|
||||||
extras.add(app.downloadString)
|
extras.add(app.downloadString)
|
||||||
@@ -88,16 +69,16 @@ class AppListView : RelativeLayout {
|
|||||||
if (app.dependencies.dependentPackages.isNotEmpty())
|
if (app.dependencies.dependentPackages.isNotEmpty())
|
||||||
extras.add(getString(R.string.details_gsf_dependent))
|
extras.add(getString(R.string.details_gsf_dependent))
|
||||||
|
|
||||||
B.txtLine3.text = extras.joinToString(separator = " • ")
|
binding.txtLine3.text = extras.joinToString(separator = " • ")
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun longClick(onClickListener: OnLongClickListener?) {
|
fun longClick(onClickListener: OnLongClickListener?) {
|
||||||
B.root.setOnLongClickListener(onClickListener)
|
binding.root.setOnLongClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ package com.aurora.store.view.epoxy.views.app
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.text.HtmlCompat
|
import androidx.core.text.HtmlCompat
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
@@ -40,51 +39,33 @@ import com.aurora.store.data.model.DownloadStatus
|
|||||||
import com.aurora.store.data.room.download.Download
|
import com.aurora.store.data.room.download.Download
|
||||||
import com.aurora.store.databinding.ViewAppUpdateBinding
|
import com.aurora.store.databinding.ViewAppUpdateBinding
|
||||||
import com.aurora.store.util.CommonUtil
|
import com.aurora.store.util.CommonUtil
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class AppUpdateView : RelativeLayout {
|
class AppUpdateView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewAppUpdateBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewAppUpdateBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_app_update, this)
|
|
||||||
B = ViewAppUpdateBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun app(app: App) {
|
fun app(app: App) {
|
||||||
/*Inflate App details*/
|
/*Inflate App details*/
|
||||||
with(app) {
|
with(app) {
|
||||||
B.txtLine1.text = displayName
|
binding.txtLine1.text = displayName
|
||||||
B.imgIcon.load(iconArtwork.url) {
|
binding.imgIcon.load(iconArtwork.url) {
|
||||||
placeholder(R.drawable.bg_placeholder)
|
placeholder(R.drawable.bg_placeholder)
|
||||||
transformations(RoundedCornersTransformation(8.px.toFloat()))
|
transformations(RoundedCornersTransformation(8.px.toFloat()))
|
||||||
}
|
}
|
||||||
|
|
||||||
B.txtLine2.text = developerName
|
binding.txtLine2.text = developerName
|
||||||
B.txtLine3.text = ("${CommonUtil.addSiPrefix(size)} • $updatedOn")
|
binding.txtLine3.text = ("${CommonUtil.addSiPrefix(size)} • $updatedOn")
|
||||||
B.txtLine4.text = ("$versionName (${versionCode})")
|
binding.txtLine4.text = ("$versionName (${versionCode})")
|
||||||
B.txtChangelog.text = if (changes.isNotEmpty())
|
binding.txtChangelog.text = if (changes.isNotEmpty())
|
||||||
HtmlCompat.fromHtml(
|
HtmlCompat.fromHtml(
|
||||||
changes,
|
changes,
|
||||||
HtmlCompat.FROM_HTML_OPTION_USE_CSS_COLORS
|
HtmlCompat.FROM_HTML_OPTION_USE_CSS_COLORS
|
||||||
@@ -92,13 +73,15 @@ class AppUpdateView : RelativeLayout {
|
|||||||
else
|
else
|
||||||
context.getString(R.string.details_changelog_unavailable)
|
context.getString(R.string.details_changelog_unavailable)
|
||||||
|
|
||||||
B.headerIndicator.setOnClickListener {
|
binding.headerIndicator.setOnClickListener {
|
||||||
if (B.txtChangelog.isVisible) {
|
if (binding.txtChangelog.isVisible) {
|
||||||
B.headerIndicator.icon = ContextCompat.getDrawable(context, R.drawable.ic_arrow_down)
|
binding.headerIndicator.icon =
|
||||||
B.txtChangelog.visibility = View.GONE
|
ContextCompat.getDrawable(context, R.drawable.ic_arrow_down)
|
||||||
|
binding.txtChangelog.visibility = View.GONE
|
||||||
} else {
|
} else {
|
||||||
B.headerIndicator.icon = ContextCompat.getDrawable(context, R.drawable.ic_arrow_up)
|
binding.headerIndicator.icon =
|
||||||
B.txtChangelog.visibility = View.VISIBLE
|
ContextCompat.getDrawable(context, R.drawable.ic_arrow_up)
|
||||||
|
binding.txtChangelog.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -108,26 +91,28 @@ class AppUpdateView : RelativeLayout {
|
|||||||
fun download(download: Download?) {
|
fun download(download: Download?) {
|
||||||
if (download != null) {
|
if (download != null) {
|
||||||
/*Inflate Download details*/
|
/*Inflate Download details*/
|
||||||
B.btnAction.updateState(download.downloadStatus)
|
binding.btnAction.updateState(download.downloadStatus)
|
||||||
B.progressDownload.isIndeterminate = download.progress < 1
|
binding.progressDownload.isIndeterminate = download.progress < 1
|
||||||
when (download.downloadStatus) {
|
when (download.downloadStatus) {
|
||||||
DownloadStatus.QUEUED -> {
|
DownloadStatus.QUEUED -> {
|
||||||
B.progressDownload.progress = 0
|
binding.progressDownload.progress = 0
|
||||||
B.progressDownload.show()
|
binding.progressDownload.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
DownloadStatus.DOWNLOADING -> {
|
DownloadStatus.DOWNLOADING -> {
|
||||||
if (download.progress > 0) {
|
if (download.progress > 0) {
|
||||||
if (download.progress == 100) {
|
if (download.progress == 100) {
|
||||||
B.progressDownload.invisible()
|
binding.progressDownload.invisible()
|
||||||
} else {
|
} else {
|
||||||
B.progressDownload.progress = download.progress
|
binding.progressDownload.progress = download.progress
|
||||||
B.progressDownload.show()
|
binding.progressDownload.show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
B.progressDownload.progress = 0
|
binding.progressDownload.progress = 0
|
||||||
B.progressDownload.invisible()
|
binding.progressDownload.invisible()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -135,28 +120,28 @@ class AppUpdateView : RelativeLayout {
|
|||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.layoutContent.setOnClickListener(onClickListener)
|
binding.layoutContent.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun positiveAction(onClickListener: OnClickListener?) {
|
fun positiveAction(onClickListener: OnClickListener?) {
|
||||||
B.btnAction.addPositiveOnClickListener(onClickListener)
|
binding.btnAction.addPositiveOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun negativeAction(onClickListener: OnClickListener?) {
|
fun negativeAction(onClickListener: OnClickListener?) {
|
||||||
B.btnAction.addNegativeOnClickListener(onClickListener)
|
binding.btnAction.addNegativeOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun longClick(onClickListener: OnLongClickListener?) {
|
fun longClick(onClickListener: OnLongClickListener?) {
|
||||||
B.layoutContent.setOnLongClickListener(onClickListener)
|
binding.layoutContent.setOnLongClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnViewRecycled
|
@OnViewRecycled
|
||||||
fun clear() {
|
fun clear() {
|
||||||
B.headerIndicator.removeCallbacks { }
|
binding.headerIndicator.removeCallbacks { }
|
||||||
B.progressDownload.progress = 0
|
binding.progressDownload.progress = 0
|
||||||
B.progressDownload.invisible()
|
binding.progressDownload.invisible()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ package com.aurora.store.view.epoxy.views.app
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.transform.RoundedCornersTransformation
|
import coil.transform.RoundedCornersTransformation
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
@@ -31,61 +30,42 @@ import com.aurora.gplayapi.data.models.App
|
|||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.databinding.ViewAppBinding
|
import com.aurora.store.databinding.ViewAppBinding
|
||||||
import com.aurora.store.util.CommonUtil
|
import com.aurora.store.util.CommonUtil
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class AppView : RelativeLayout {
|
class AppView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewAppBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewAppBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_app, this)
|
|
||||||
B = ViewAppBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun app(app: App) {
|
fun app(app: App) {
|
||||||
B.txtName.text = app.displayName
|
binding.txtName.text = app.displayName
|
||||||
B.imgIcon.load(app.iconArtwork.url) {
|
binding.imgIcon.load(app.iconArtwork.url) {
|
||||||
placeholder(R.drawable.bg_placeholder)
|
placeholder(R.drawable.bg_placeholder)
|
||||||
transformations(RoundedCornersTransformation(32F))
|
transformations(RoundedCornersTransformation(32F))
|
||||||
}
|
}
|
||||||
|
|
||||||
B.txtSize.text = context
|
binding.txtSize.text = context
|
||||||
.getString(R.string.app_view_rating)
|
.getString(R.string.app_view_rating)
|
||||||
.format(app.downloadString, app.rating.abbreviatedLabel)
|
.format(app.downloadString, app.rating.abbreviatedLabel)
|
||||||
|
|
||||||
if (app.size > 0)
|
if (app.size > 0)
|
||||||
B.txtSize.text = CommonUtil.addSiPrefix(app.size)
|
binding.txtSize.text = CommonUtil.addSiPrefix(app.size)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun longClick(onClickListener: OnLongClickListener?) {
|
fun longClick(onClickListener: OnLongClickListener?) {
|
||||||
B.root.setOnLongClickListener(onClickListener)
|
binding.root.setOnLongClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,45 +21,25 @@ package com.aurora.store.view.epoxy.views.app
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewNoAppAltBinding
|
import com.aurora.store.databinding.ViewNoAppAltBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class NoAppAltView : RelativeLayout {
|
class NoAppAltView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewNoAppAltBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewNoAppAltBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_no_app_alt, this)
|
|
||||||
B = ViewNoAppAltBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun message(message: String) {
|
fun message(message: String) {
|
||||||
B.txtMsg.text = message
|
binding.txtMsg.text = message
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,53 +21,33 @@ package com.aurora.store.view.epoxy.views.app
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewNoAppBinding
|
import com.aurora.store.databinding.ViewNoAppBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_MATCH_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_MATCH_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class NoAppView : RelativeLayout {
|
class NoAppView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewNoAppBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewNoAppBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_no_app, this)
|
|
||||||
B = ViewNoAppBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun message(message: String) {
|
fun message(message: String) {
|
||||||
B.txt.text = message
|
binding.txt.text = message
|
||||||
}
|
}
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun icon(icon: Int?) {
|
fun icon(icon: Int?) {
|
||||||
icon?.let {
|
icon?.let {
|
||||||
B.img.setImageDrawable(ContextCompat.getDrawable(context, icon))
|
binding.img.setImageDrawable(ContextCompat.getDrawable(context, icon))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ package com.aurora.store.view.epoxy.views.details
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.transform.RoundedCornersTransformation
|
import coil.transform.RoundedCornersTransformation
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
@@ -30,41 +29,23 @@ import com.airbnb.epoxy.ModelView
|
|||||||
import com.aurora.gplayapi.data.models.App
|
import com.aurora.gplayapi.data.models.App
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.databinding.ViewAppDependentBinding
|
import com.aurora.store.databinding.ViewAppDependentBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class AppDependentView : RelativeLayout {
|
class AppDependentView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewAppDependentBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewAppDependentBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_app_dependent, this)
|
|
||||||
B = ViewAppDependentBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun app(app: App) {
|
fun app(app: App) {
|
||||||
B.txtName.text = app.displayName
|
binding.txtName.text = app.displayName
|
||||||
B.imgIcon.load(app.iconArtwork.url) {
|
binding.imgIcon.load(app.iconArtwork.url) {
|
||||||
placeholder(R.drawable.bg_placeholder)
|
placeholder(R.drawable.bg_placeholder)
|
||||||
transformations(RoundedCornersTransformation(32F))
|
transformations(RoundedCornersTransformation(32F))
|
||||||
}
|
}
|
||||||
@@ -72,11 +53,11 @@ class AppDependentView : RelativeLayout {
|
|||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun longClick(onClickListener: OnLongClickListener?) {
|
fun longClick(onClickListener: OnLongClickListener?) {
|
||||||
B.root.setOnLongClickListener(onClickListener)
|
binding.root.setOnLongClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,58 +21,38 @@ package com.aurora.store.view.epoxy.views.details
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.gplayapi.data.models.details.Badge
|
import com.aurora.gplayapi.data.models.details.Badge
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewBadgeBinding
|
import com.aurora.store.databinding.ViewBadgeBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class BadgeView : RelativeLayout {
|
class BadgeView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewBadgeBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewBadgeBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_badge, this)
|
|
||||||
B = ViewBadgeBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun badge(badge: Badge) {
|
fun badge(badge: Badge) {
|
||||||
if (badge.textMajor.isEmpty()) {
|
if (badge.textMajor.isEmpty()) {
|
||||||
if (badge.textMinor.isEmpty()) {
|
if (badge.textMinor.isEmpty()) {
|
||||||
B.txt.text = badge.textDescription
|
binding.txt.text = badge.textDescription
|
||||||
} else {
|
} else {
|
||||||
B.txt.text = badge.textMinor
|
binding.txt.text = badge.textMinor
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
B.txt.text = badge.textMajor
|
binding.txt.text = badge.textMajor
|
||||||
}
|
}
|
||||||
|
|
||||||
badge.artwork?.let {
|
badge.artwork?.let {
|
||||||
B.img.load(it.url)
|
binding.img.load(it.url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,55 +21,35 @@ package com.aurora.store.view.epoxy.views.details
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.airbnb.epoxy.OnViewRecycled
|
import com.airbnb.epoxy.OnViewRecycled
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.data.model.ExodusTracker
|
import com.aurora.store.data.model.ExodusTracker
|
||||||
import com.aurora.store.databinding.ViewExodusBinding
|
import com.aurora.store.databinding.ViewExodusBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class ExodusView : RelativeLayout {
|
class ExodusView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewExodusBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewExodusBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_exodus, this)
|
|
||||||
B = ViewExodusBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun tracker(report: ExodusTracker) {
|
fun tracker(report: ExodusTracker) {
|
||||||
B.txtTitle.text = report.name
|
binding.txtTitle.text = report.name
|
||||||
B.txtSubtitle.text = report.signature
|
binding.txtSubtitle.text = report.signature
|
||||||
B.txtDescription.text = report.date
|
binding.txtDescription.text = report.date
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnViewRecycled
|
@OnViewRecycled
|
||||||
|
|||||||
@@ -21,47 +21,27 @@ package com.aurora.store.view.epoxy.views.details
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.gplayapi.data.models.File
|
import com.aurora.gplayapi.data.models.File
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewFileBinding
|
import com.aurora.store.databinding.ViewFileBinding
|
||||||
import com.aurora.store.util.CommonUtil
|
import com.aurora.store.util.CommonUtil
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class FileView : RelativeLayout {
|
class FileView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewFileBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewFileBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_file, this)
|
|
||||||
B = ViewFileBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun file(file: File) {
|
fun file(file: File) {
|
||||||
B.line1.text = file.name
|
binding.line1.text = file.name
|
||||||
B.line2.text = CommonUtil.addSiPrefix(file.size)
|
binding.line2.text = CommonUtil.addSiPrefix(file.size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,47 +21,27 @@ package com.aurora.store.view.epoxy.views.details
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.airbnb.epoxy.OnViewRecycled
|
import com.airbnb.epoxy.OnViewRecycled
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewInfoBinding
|
import com.aurora.store.databinding.ViewInfoBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class InfoView : RelativeLayout {
|
class InfoView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewInfoBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewInfoBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_info, this)
|
|
||||||
B = ViewInfoBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp(options = [ModelProp.Option.IgnoreRequireHashCode])
|
@ModelProp(options = [ModelProp.Option.IgnoreRequireHashCode])
|
||||||
fun badge(info: Map.Entry<String, String>) {
|
fun badge(info: Map.Entry<String, String>) {
|
||||||
B.txtTitle.text = info.key
|
binding.txtTitle.text = info.key
|
||||||
.replace("_", " ")
|
.replace("_", " ")
|
||||||
.lowercase(Locale.getDefault())
|
.lowercase(Locale.getDefault())
|
||||||
.replaceFirstChar {
|
.replaceFirstChar {
|
||||||
@@ -71,10 +51,12 @@ class InfoView : RelativeLayout {
|
|||||||
it.toString()
|
it.toString()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
B.txtSubtitle.text = info.value
|
binding.txtSubtitle.text = info.value
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnViewRecycled
|
@OnViewRecycled
|
||||||
fun clear() {
|
fun clear() {
|
||||||
|
binding.txtTitle.text = null
|
||||||
|
binding.txtSubtitle.text = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,48 +22,29 @@ package com.aurora.store.view.epoxy.views.details
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.gplayapi.data.models.Artwork
|
import com.aurora.gplayapi.data.models.Artwork
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.databinding.ViewScreenshotLargeBinding
|
import com.aurora.store.databinding.ViewScreenshotLargeBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_MATCH_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_MATCH_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class LargeScreenshotView : RelativeLayout {
|
class LargeScreenshotView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewScreenshotLargeBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewScreenshotLargeBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_screenshot_large, this)
|
|
||||||
B = ViewScreenshotLargeBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun artwork(artwork: Artwork) {
|
fun artwork(artwork: Artwork) {
|
||||||
val displayMetrics = Resources.getSystem().displayMetrics
|
val displayMetrics = Resources.getSystem().displayMetrics
|
||||||
B.img.load("${artwork.url}=rw-w${displayMetrics.widthPixels}-v1-e15") {
|
binding.img.load("${artwork.url}=rw-w${displayMetrics.widthPixels}-v1-e15") {
|
||||||
placeholder(R.drawable.bg_placeholder)
|
placeholder(R.drawable.bg_placeholder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ package com.aurora.store.view.epoxy.views.details
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.transform.RoundedCornersTransformation
|
import coil.transform.RoundedCornersTransformation
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
@@ -31,15 +30,18 @@ import com.aurora.extensions.px
|
|||||||
import com.aurora.gplayapi.data.models.Artwork
|
import com.aurora.gplayapi.data.models.Artwork
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.databinding.ViewScreenshotMiniBinding
|
import com.aurora.store.databinding.ViewScreenshotMiniBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class MiniScreenshotView : RelativeLayout {
|
class MiniScreenshotView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewScreenshotMiniBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
|
) : BaseView<ViewScreenshotMiniBinding>(context, attrs, defStyleAttr) {
|
||||||
|
|
||||||
private var position: Int = 0
|
private var position: Int = 0
|
||||||
|
|
||||||
@@ -47,27 +49,6 @@ class MiniScreenshotView : RelativeLayout {
|
|||||||
fun onClick(position: Int = 0)
|
fun onClick(position: Int = 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(context: Context?) : super(context) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_screenshot_mini, this)
|
|
||||||
B = ViewScreenshotMiniBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun position(pos: Int) {
|
fun position(pos: Int) {
|
||||||
position = pos
|
position = pos
|
||||||
@@ -76,7 +57,7 @@ class MiniScreenshotView : RelativeLayout {
|
|||||||
@ModelProp
|
@ModelProp
|
||||||
fun artwork(artwork: Artwork) {
|
fun artwork(artwork: Artwork) {
|
||||||
normalizeSize(artwork)
|
normalizeSize(artwork)
|
||||||
B.img.load("${artwork.url}=rw-w480-v1-e15") {
|
binding.img.load("${artwork.url}=rw-w480-v1-e15") {
|
||||||
placeholder(R.drawable.bg_rounded)
|
placeholder(R.drawable.bg_rounded)
|
||||||
transformations(RoundedCornersTransformation(8.px.toFloat()))
|
transformations(RoundedCornersTransformation(8.px.toFloat()))
|
||||||
}
|
}
|
||||||
@@ -96,6 +77,7 @@ class MiniScreenshotView : RelativeLayout {
|
|||||||
normalizedHeight = 120f
|
normalizedHeight = 120f
|
||||||
normalizedWidth = 120f
|
normalizedWidth = 120f
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
val factor = artworkHeight / 120f
|
val factor = artworkHeight / 120f
|
||||||
normalizedHeight = 120f
|
normalizedHeight = 120f
|
||||||
@@ -103,15 +85,15 @@ class MiniScreenshotView : RelativeLayout {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
B.img.layoutParams.height = normalizedHeight.px.toInt()
|
binding.img.layoutParams.height = normalizedHeight.px.toInt()
|
||||||
B.img.layoutParams.width = normalizedWidth.px.toInt()
|
binding.img.layoutParams.width = normalizedWidth.px.toInt()
|
||||||
B.img.requestLayout()
|
binding.img.requestLayout()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun callback(screenshotCallback: ScreenshotCallback?) {
|
fun callback(screenshotCallback: ScreenshotCallback?) {
|
||||||
B.img.setOnClickListener {
|
binding.img.setOnClickListener {
|
||||||
screenshotCallback?.onClick(position)
|
screenshotCallback?.onClick(position)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ package com.aurora.store.view.epoxy.views.details
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import androidx.core.text.HtmlCompat
|
import androidx.core.text.HtmlCompat
|
||||||
import coil.load
|
import coil.load
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
@@ -29,57 +28,39 @@ import com.airbnb.epoxy.ModelView
|
|||||||
import com.aurora.gplayapi.data.models.details.Badge
|
import com.aurora.gplayapi.data.models.details.Badge
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.databinding.ViewMoreBadgeBinding
|
import com.aurora.store.databinding.ViewMoreBadgeBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class MoreBadgeView : RelativeLayout {
|
class MoreBadgeView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewMoreBadgeBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewMoreBadgeBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_more_badge, this)
|
|
||||||
B = ViewMoreBadgeBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun badge(badge: Badge) {
|
fun badge(badge: Badge) {
|
||||||
B.line1.text = badge.textMajor
|
binding.line1.text = badge.textMajor
|
||||||
|
|
||||||
badge.textMinorHtml?.let {
|
badge.textMinorHtml?.let {
|
||||||
if (it.isNotEmpty()) {
|
if (it.isNotEmpty()) {
|
||||||
B.line2.text = HtmlCompat.fromHtml(it, HtmlCompat.FROM_HTML_MODE_COMPACT)
|
binding.line2.text = HtmlCompat.fromHtml(it, HtmlCompat.FROM_HTML_MODE_COMPACT)
|
||||||
} else {
|
} else {
|
||||||
B.line2.text = badge.textMinor
|
binding.line2.text = badge.textMinor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
badge.textDescription?.let {
|
badge.textDescription?.let {
|
||||||
if (it.isNotEmpty()) {
|
if (it.isNotEmpty()) {
|
||||||
B.line2.text = it
|
binding.line2.text = it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
badge.artwork?.let {
|
badge.artwork?.let {
|
||||||
B.img.load(it.url) {
|
binding.img.load(it.url) {
|
||||||
placeholder(R.drawable.ic_arrow_right)
|
placeholder(R.drawable.ic_arrow_right)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ package com.aurora.store.view.epoxy.views.details
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.transform.RoundedCornersTransformation
|
import coil.transform.RoundedCornersTransformation
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
@@ -31,61 +30,40 @@ import com.aurora.extensions.toDate
|
|||||||
import com.aurora.gplayapi.data.models.Review
|
import com.aurora.gplayapi.data.models.Review
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.databinding.ViewReviewBinding
|
import com.aurora.store.databinding.ViewReviewBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class ReviewView : RelativeLayout {
|
class ReviewView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewReviewBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewReviewBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_review, this)
|
|
||||||
B = ViewReviewBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun review(review: Review) {
|
fun review(review: Review) {
|
||||||
B.txtAuthor.text = review.userName
|
binding.txtAuthor.text = review.userName
|
||||||
B.txtTime.text = ("${review.timeStamp.toDate()} • v${review.appVersion}")
|
binding.txtTime.text = ("${review.timeStamp.toDate()} • v${review.appVersion}")
|
||||||
B.txtComment.text = review.comment
|
binding.txtComment.text = review.comment
|
||||||
|
|
||||||
B.img.load(review.userPhotoUrl) {
|
binding.img.load(review.userPhotoUrl) {
|
||||||
placeholder(R.drawable.bg_placeholder)
|
placeholder(R.drawable.bg_placeholder)
|
||||||
transformations(RoundedCornersTransformation(32F))
|
transformations(RoundedCornersTransformation(32F))
|
||||||
}
|
}
|
||||||
|
|
||||||
B.rating.rating = review.rating.toFloat()
|
binding.rating.rating = review.rating.toFloat()
|
||||||
/*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
||||||
B.line2.justificationMode = Layout.JUSTIFICATION_MODE_INTER_WORD
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun longClick(onClickListener: OnLongClickListener?) {
|
fun longClick(onClickListener: OnLongClickListener?) {
|
||||||
B.root.setOnLongClickListener(onClickListener)
|
binding.root.setOnLongClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ package com.aurora.store.view.epoxy.views.details
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.transform.RoundedCornersTransformation
|
import coil.transform.RoundedCornersTransformation
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
@@ -31,15 +30,18 @@ import com.aurora.extensions.px
|
|||||||
import com.aurora.gplayapi.data.models.Artwork
|
import com.aurora.gplayapi.data.models.Artwork
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.databinding.ViewScreenshotBinding
|
import com.aurora.store.databinding.ViewScreenshotBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class ScreenshotView : RelativeLayout {
|
class ScreenshotView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewScreenshotBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
|
) : BaseView<ViewScreenshotBinding>(context, attrs, defStyleAttr) {
|
||||||
|
|
||||||
private var position: Int = 0
|
private var position: Int = 0
|
||||||
|
|
||||||
@@ -47,27 +49,6 @@ class ScreenshotView : RelativeLayout {
|
|||||||
fun onClick(position: Int = 0)
|
fun onClick(position: Int = 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(context: Context?) : super(context) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_screenshot, this)
|
|
||||||
B = ViewScreenshotBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun position(pos: Int) {
|
fun position(pos: Int) {
|
||||||
position = pos
|
position = pos
|
||||||
@@ -76,7 +57,7 @@ class ScreenshotView : RelativeLayout {
|
|||||||
@ModelProp
|
@ModelProp
|
||||||
fun artwork(artwork: Artwork) {
|
fun artwork(artwork: Artwork) {
|
||||||
normalizeSize(artwork)
|
normalizeSize(artwork)
|
||||||
B.img.load("${artwork.url}=rw-w480-v1-e15") {
|
binding.img.load("${artwork.url}=rw-w480-v1-e15") {
|
||||||
placeholder(R.drawable.bg_rounded)
|
placeholder(R.drawable.bg_rounded)
|
||||||
transformations(RoundedCornersTransformation(8.px.toFloat()))
|
transformations(RoundedCornersTransformation(8.px.toFloat()))
|
||||||
}
|
}
|
||||||
@@ -96,6 +77,7 @@ class ScreenshotView : RelativeLayout {
|
|||||||
normalizedHeight = 192f
|
normalizedHeight = 192f
|
||||||
normalizedWidth = 192f
|
normalizedWidth = 192f
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
val factor = artworkHeight / 192f
|
val factor = artworkHeight / 192f
|
||||||
normalizedHeight = 192f
|
normalizedHeight = 192f
|
||||||
@@ -103,15 +85,15 @@ class ScreenshotView : RelativeLayout {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
B.img.layoutParams.height = normalizedHeight.px.toInt()
|
binding.img.layoutParams.height = normalizedHeight.px.toInt()
|
||||||
B.img.layoutParams.width = normalizedWidth.px.toInt()
|
binding.img.layoutParams.width = normalizedWidth.px.toInt()
|
||||||
B.img.requestLayout()
|
binding.img.requestLayout()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun callback(screenshotCallback: ScreenshotCallback?) {
|
fun callback(screenshotCallback: ScreenshotCallback?) {
|
||||||
B.img.setOnClickListener {
|
binding.img.setOnClickListener {
|
||||||
screenshotCallback?.onClick(position)
|
screenshotCallback?.onClick(position)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,54 +21,34 @@ package com.aurora.store.view.epoxy.views.preference
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.data.model.Dash
|
import com.aurora.store.data.model.Dash
|
||||||
import com.aurora.store.databinding.ViewDashBinding
|
import com.aurora.store.databinding.ViewDashBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class DashView : RelativeLayout {
|
class DashView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewDashBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewDashBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_dash, this)
|
|
||||||
B = ViewDashBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun dash(dash: Dash) {
|
fun dash(dash: Dash) {
|
||||||
B.line1.text = dash.title
|
binding.line1.text = dash.title
|
||||||
B.line2.text = dash.subtitle
|
binding.line2.text = dash.subtitle
|
||||||
B.img.setImageDrawable(ContextCompat.getDrawable(context, dash.icon))
|
binding.img.setImageDrawable(ContextCompat.getDrawable(context, dash.icon))
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,62 +22,43 @@ package com.aurora.store.view.epoxy.views.preference
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.CompoundButton
|
import android.widget.CompoundButton
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.databinding.ViewDeviceBinding
|
import com.aurora.store.databinding.ViewDeviceBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
import java.util.Properties
|
import java.util.Properties
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class DeviceView : RelativeLayout {
|
class DeviceView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewDeviceBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewDeviceBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_device, this)
|
|
||||||
B = ViewDeviceBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun properties(properties: Properties) {
|
fun properties(properties: Properties) {
|
||||||
B.line1.text = properties.getProperty("UserReadableName")
|
binding.line1.text = properties.getProperty("UserReadableName")
|
||||||
B.line2.text = resources.getString(
|
binding.line2.text = resources.getString(
|
||||||
R.string.spoof_property,
|
R.string.spoof_property,
|
||||||
properties.getProperty("Build.MANUFACTURER"),
|
properties.getProperty("Build.MANUFACTURER"),
|
||||||
properties.getProperty("Build.VERSION.SDK_INT")
|
properties.getProperty("Build.VERSION.SDK_INT")
|
||||||
)
|
)
|
||||||
B.line3.text = properties.getProperty("Platforms")
|
binding.line3.text = properties.getProperty("Platforms")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun markChecked(isChecked: Boolean) {
|
fun markChecked(isChecked: Boolean) {
|
||||||
B.checkbox.isChecked = isChecked
|
binding.checkbox.isChecked = isChecked
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun checked(onCheckedChangeListener: CompoundButton.OnCheckedChangeListener?) {
|
fun checked(onCheckedChangeListener: CompoundButton.OnCheckedChangeListener?) {
|
||||||
B.checkbox.setOnCheckedChangeListener(onCheckedChangeListener)
|
binding.checkbox.setOnCheckedChangeListener(onCheckedChangeListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,63 +22,43 @@ package com.aurora.store.view.epoxy.views.preference
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.CompoundButton
|
import android.widget.CompoundButton
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.data.model.InstallerInfo
|
import com.aurora.store.data.model.InstallerInfo
|
||||||
import com.aurora.store.databinding.ViewInstallerBinding
|
import com.aurora.store.databinding.ViewInstallerBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class InstallerView : RelativeLayout {
|
class InstallerView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewInstallerBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewInstallerBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_installer, this)
|
|
||||||
B = ViewInstallerBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun installer(installer: InstallerInfo) {
|
fun installer(installer: InstallerInfo) {
|
||||||
B.line1.text = installer.title
|
binding.line1.text = installer.title
|
||||||
B.line2.text = installer.subtitle
|
binding.line2.text = installer.subtitle
|
||||||
B.line3.text = installer.description
|
binding.line3.text = installer.description
|
||||||
}
|
}
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun markChecked(isChecked: Boolean) {
|
fun markChecked(isChecked: Boolean) {
|
||||||
B.radiobutton.isChecked = isChecked
|
binding.radiobutton.isChecked = isChecked
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun checked(onCheckedChangeListener: CompoundButton.OnCheckedChangeListener?) {
|
fun checked(onCheckedChangeListener: CompoundButton.OnCheckedChangeListener?) {
|
||||||
B.radiobutton.setOnCheckedChangeListener(onCheckedChangeListener)
|
binding.radiobutton.setOnCheckedChangeListener(onCheckedChangeListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,64 +21,44 @@ package com.aurora.store.view.epoxy.views.preference
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.extensions.hide
|
import com.aurora.extensions.hide
|
||||||
import com.aurora.extensions.show
|
import com.aurora.extensions.show
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.data.model.Link
|
import com.aurora.store.data.model.Link
|
||||||
import com.aurora.store.databinding.ViewLinkBinding
|
import com.aurora.store.databinding.ViewLinkBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class LinkView : RelativeLayout {
|
class LinkView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewLinkBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewLinkBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_link, this)
|
|
||||||
B = ViewLinkBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun link(link: Link) {
|
fun link(link: Link) {
|
||||||
B.line1.text = link.title
|
binding.line1.text = link.title
|
||||||
B.line2.text = link.subtitle
|
binding.line2.text = link.subtitle
|
||||||
|
|
||||||
if (link.url.startsWith("http") || link.url.startsWith("upi")) {
|
if (link.url.startsWith("http") || link.url.startsWith("upi")) {
|
||||||
B.line3.hide()
|
binding.line3.hide()
|
||||||
} else {
|
} else {
|
||||||
B.line3.show()
|
binding.line3.show()
|
||||||
B.line3.text = link.url
|
binding.line3.text = link.url
|
||||||
}
|
}
|
||||||
|
|
||||||
B.imgIcon.load(link.icon)
|
binding.imgIcon.load(link.icon)
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.root.setOnClickListener(onClickListener)
|
binding.root.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,57 +22,37 @@ package com.aurora.store.view.epoxy.views.preference
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.CompoundButton
|
import android.widget.CompoundButton
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewLocaleBinding
|
import com.aurora.store.databinding.ViewLocaleBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class LocaleView : RelativeLayout {
|
class LocaleView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewLocaleBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewLocaleBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_locale, this)
|
|
||||||
B = ViewLocaleBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun locale(locale: Locale) {
|
fun locale(locale: Locale) {
|
||||||
B.line1.text = locale.displayName
|
binding.line1.text = locale.displayName
|
||||||
B.line2.text = locale.getDisplayLanguage(locale)
|
binding.line2.text = locale.getDisplayLanguage(locale)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun markChecked(isChecked: Boolean) {
|
fun markChecked(isChecked: Boolean) {
|
||||||
B.checkbox.isChecked = isChecked
|
binding.checkbox.isChecked = isChecked
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun checked(onCheckedChangeListener: CompoundButton.OnCheckedChangeListener?) {
|
fun checked(onCheckedChangeListener: CompoundButton.OnCheckedChangeListener?) {
|
||||||
B.checkbox.setOnCheckedChangeListener(onCheckedChangeListener)
|
binding.checkbox.setOnCheckedChangeListener(onCheckedChangeListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ package com.aurora.store.view.epoxy.views.preference
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.RelativeLayout
|
|
||||||
import com.airbnb.epoxy.CallbackProp
|
import com.airbnb.epoxy.CallbackProp
|
||||||
import com.airbnb.epoxy.ModelProp
|
import com.airbnb.epoxy.ModelProp
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
@@ -29,56 +28,38 @@ import com.aurora.extensions.getString
|
|||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.data.model.Permission
|
import com.aurora.store.data.model.Permission
|
||||||
import com.aurora.store.databinding.ViewPermissionBinding
|
import com.aurora.store.databinding.ViewPermissionBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class PermissionView : RelativeLayout {
|
class PermissionView @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewPermissionBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewPermissionBinding>(context, attrs, defStyleAttr) {
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_permission, this)
|
|
||||||
B = ViewPermissionBinding.bind(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun permission(installer: Permission) {
|
fun permission(installer: Permission) {
|
||||||
B.line1.text = installer.title
|
binding.line1.text = installer.title
|
||||||
B.line2.text = installer.subtitle
|
binding.line2.text = installer.subtitle
|
||||||
}
|
}
|
||||||
|
|
||||||
@ModelProp
|
@ModelProp
|
||||||
fun isGranted(granted: Boolean) {
|
fun isGranted(granted: Boolean) {
|
||||||
if (granted) {
|
if (granted) {
|
||||||
B.btnAction.isEnabled = false
|
binding.btnAction.isEnabled = false
|
||||||
B.btnAction.text = getString(R.string.action_granted)
|
binding.btnAction.text = getString(R.string.action_granted)
|
||||||
} else {
|
} else {
|
||||||
B.btnAction.isEnabled = true
|
binding.btnAction.isEnabled = true
|
||||||
B.btnAction.text = getString(R.string.action_grant)
|
binding.btnAction.text = getString(R.string.action_grant)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallbackProp
|
@CallbackProp
|
||||||
fun click(onClickListener: OnClickListener?) {
|
fun click(onClickListener: OnClickListener?) {
|
||||||
B.btnAction.setOnClickListener(onClickListener)
|
binding.btnAction.setOnClickListener(onClickListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,37 +22,16 @@ package com.aurora.store.view.epoxy.views.shimmer
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewAppListShimmerBinding
|
import com.aurora.store.databinding.ViewAppListShimmerBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
import com.facebook.shimmer.ShimmerFrameLayout
|
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class AppListViewShimmer : ShimmerFrameLayout {
|
class AppListViewShimmer @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewAppListShimmerBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewAppListShimmerBinding>(context, attrs, defStyleAttr)
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_app_list_shimmer, this)
|
|
||||||
B = ViewAppListShimmerBinding.bind(view)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -22,37 +22,16 @@ package com.aurora.store.view.epoxy.views.shimmer
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewAppShimmerBinding
|
import com.aurora.store.databinding.ViewAppShimmerBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
import com.facebook.shimmer.ShimmerFrameLayout
|
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class AppViewShimmer : ShimmerFrameLayout {
|
class AppViewShimmer @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewAppShimmerBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewAppShimmerBinding>(context, attrs, defStyleAttr)
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_app_shimmer, this)
|
|
||||||
B = ViewAppShimmerBinding.bind(view)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -22,37 +22,16 @@ package com.aurora.store.view.epoxy.views.shimmer
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import com.airbnb.epoxy.ModelView
|
import com.airbnb.epoxy.ModelView
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.databinding.ViewHeaderShimmerBinding
|
import com.aurora.store.databinding.ViewHeaderShimmerBinding
|
||||||
|
import com.aurora.store.view.epoxy.views.BaseModel
|
||||||
import com.aurora.store.view.epoxy.views.BaseView
|
import com.aurora.store.view.epoxy.views.BaseView
|
||||||
import com.facebook.shimmer.ShimmerFrameLayout
|
|
||||||
|
|
||||||
@ModelView(
|
@ModelView(
|
||||||
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
|
||||||
baseModelClass = BaseView::class
|
baseModelClass = BaseModel::class
|
||||||
)
|
)
|
||||||
class HeaderViewShimmer : ShimmerFrameLayout {
|
class HeaderViewShimmer @JvmOverloads constructor(
|
||||||
|
context: Context?,
|
||||||
private lateinit var B: ViewHeaderShimmerBinding
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = 0
|
||||||
constructor(context: Context?) : super(context) {
|
) : BaseView<ViewHeaderShimmerBinding>(context, attrs, defStyleAttr)
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
|
||||||
context,
|
|
||||||
attrs,
|
|
||||||
defStyleAttr
|
|
||||||
) {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context?) {
|
|
||||||
val view = inflate(context, R.layout.view_header_shimmer, this)
|
|
||||||
B = ViewHeaderShimmerBinding.bind(view)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import androidx.navigation.fragment.findNavController
|
|||||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.data.providers.AuthProvider
|
import com.aurora.store.data.providers.AuthProvider
|
||||||
import com.aurora.store.databinding.ActivityGenericPagerBinding
|
import com.aurora.store.databinding.FragmentGenericWithPagerBinding
|
||||||
import com.aurora.store.view.ui.commons.BaseFragment
|
import com.aurora.store.view.ui.commons.BaseFragment
|
||||||
import com.google.android.material.tabs.TabLayout
|
import com.google.android.material.tabs.TabLayout
|
||||||
import com.google.android.material.tabs.TabLayoutMediator
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
@@ -37,7 +37,7 @@ import dagger.hilt.android.AndroidEntryPoint
|
|||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class AppsGamesFragment : BaseFragment<ActivityGenericPagerBinding>() {
|
class AppsGamesFragment : BaseFragment<FragmentGenericWithPagerBinding>() {
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var authProvider: AuthProvider
|
lateinit var authProvider: AuthProvider
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ abstract class BaseFragment<ViewBindingType : ViewBinding> : Fragment() {
|
|||||||
private var _binding: ViewBindingType? = null
|
private var _binding: ViewBindingType? = null
|
||||||
protected val binding get() = _binding!!
|
protected val binding get() = _binding!!
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import androidx.navigation.fragment.findNavController
|
|||||||
import com.aurora.gplayapi.data.models.App
|
import com.aurora.gplayapi.data.models.App
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.data.providers.BlacklistProvider
|
import com.aurora.store.data.providers.BlacklistProvider
|
||||||
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
|
import com.aurora.store.databinding.FragmentGenericWithToolbarBinding
|
||||||
import com.aurora.store.view.epoxy.views.BlackListViewModel_
|
import com.aurora.store.view.epoxy.views.BlackListViewModel_
|
||||||
import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_
|
import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_
|
||||||
import com.aurora.store.viewmodel.all.BlacklistViewModel
|
import com.aurora.store.viewmodel.all.BlacklistViewModel
|
||||||
@@ -35,7 +35,7 @@ import dagger.hilt.android.AndroidEntryPoint
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class BlacklistFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
|
class BlacklistFragment : BaseFragment<FragmentGenericWithToolbarBinding>() {
|
||||||
private val viewModel: BlacklistViewModel by activityViewModels()
|
private val viewModel: BlacklistViewModel by activityViewModels()
|
||||||
|
|
||||||
private lateinit var blacklistProvider: BlacklistProvider
|
private lateinit var blacklistProvider: BlacklistProvider
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import com.aurora.gplayapi.data.models.StreamCluster
|
|||||||
import com.aurora.gplayapi.helpers.contracts.StreamContract
|
import com.aurora.gplayapi.helpers.contracts.StreamContract
|
||||||
import com.aurora.store.data.model.ViewState
|
import com.aurora.store.data.model.ViewState
|
||||||
import com.aurora.store.data.model.ViewState.Loading.getDataAs
|
import com.aurora.store.data.model.ViewState.Loading.getDataAs
|
||||||
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
|
import com.aurora.store.databinding.FragmentGenericWithToolbarBinding
|
||||||
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
|
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
|
||||||
import com.aurora.store.view.epoxy.controller.CategoryCarouselController
|
import com.aurora.store.view.epoxy.controller.CategoryCarouselController
|
||||||
import com.aurora.store.view.epoxy.controller.GenericCarouselController
|
import com.aurora.store.view.epoxy.controller.GenericCarouselController
|
||||||
@@ -38,7 +38,7 @@ import com.aurora.store.viewmodel.subcategory.SubCategoryClusterViewModel
|
|||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class CategoryBrowseFragment : BaseFragment<ActivityGenericRecyclerBinding>(),
|
class CategoryBrowseFragment : BaseFragment<FragmentGenericWithToolbarBinding>(),
|
||||||
GenericCarouselController.Callbacks {
|
GenericCarouselController.Callbacks {
|
||||||
private val args: CategoryBrowseFragmentArgs by navArgs()
|
private val args: CategoryBrowseFragmentArgs by navArgs()
|
||||||
private val viewModel: SubCategoryClusterViewModel by activityViewModels()
|
private val viewModel: SubCategoryClusterViewModel by activityViewModels()
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import androidx.navigation.fragment.findNavController
|
|||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import com.airbnb.epoxy.EpoxyModel
|
import com.airbnb.epoxy.EpoxyModel
|
||||||
import com.aurora.gplayapi.data.models.App
|
import com.aurora.gplayapi.data.models.App
|
||||||
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
|
import com.aurora.store.databinding.FragmentGenericWithToolbarBinding
|
||||||
import com.aurora.store.view.epoxy.groups.CarouselHorizontalModel_
|
import com.aurora.store.view.epoxy.groups.CarouselHorizontalModel_
|
||||||
import com.aurora.store.view.epoxy.views.EditorHeadViewModel_
|
import com.aurora.store.view.epoxy.views.EditorHeadViewModel_
|
||||||
import com.aurora.store.view.epoxy.views.HorizontalDividerViewModel_
|
import com.aurora.store.view.epoxy.views.HorizontalDividerViewModel_
|
||||||
@@ -38,7 +38,7 @@ import com.aurora.store.viewmodel.editorschoice.EditorBrowseViewModel
|
|||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class EditorStreamBrowseFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
|
class EditorStreamBrowseFragment : BaseFragment<FragmentGenericWithToolbarBinding>() {
|
||||||
private val args: EditorStreamBrowseFragmentArgs by navArgs()
|
private val args: EditorStreamBrowseFragmentArgs by navArgs()
|
||||||
private val viewModel: EditorBrowseViewModel by viewModels()
|
private val viewModel: EditorBrowseViewModel by viewModels()
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import androidx.navigation.fragment.findNavController
|
|||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import com.airbnb.epoxy.EpoxyModel
|
import com.airbnb.epoxy.EpoxyModel
|
||||||
import com.aurora.gplayapi.data.models.StreamCluster
|
import com.aurora.gplayapi.data.models.StreamCluster
|
||||||
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
|
import com.aurora.store.databinding.FragmentGenericWithToolbarBinding
|
||||||
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
|
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
|
||||||
import com.aurora.store.view.epoxy.groups.CarouselHorizontalModel_
|
import com.aurora.store.view.epoxy.groups.CarouselHorizontalModel_
|
||||||
import com.aurora.store.view.epoxy.views.AppProgressViewModel_
|
import com.aurora.store.view.epoxy.views.AppProgressViewModel_
|
||||||
@@ -38,7 +38,7 @@ import com.aurora.store.viewmodel.browse.ExpandedStreamBrowseViewModel
|
|||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class ExpandedStreamBrowseFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
|
class ExpandedStreamBrowseFragment : BaseFragment<FragmentGenericWithToolbarBinding>() {
|
||||||
private val args: ExpandedStreamBrowseFragmentArgs by navArgs()
|
private val args: ExpandedStreamBrowseFragmentArgs by navArgs()
|
||||||
private val viewModel: ExpandedStreamBrowseViewModel by viewModels()
|
private val viewModel: ExpandedStreamBrowseViewModel by viewModels()
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import androidx.fragment.app.viewModels
|
|||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import com.aurora.gplayapi.data.models.StreamCluster
|
import com.aurora.gplayapi.data.models.StreamCluster
|
||||||
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
|
import com.aurora.store.databinding.FragmentGenericWithToolbarBinding
|
||||||
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
|
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
|
||||||
import com.aurora.store.view.epoxy.views.AppProgressViewModel_
|
import com.aurora.store.view.epoxy.views.AppProgressViewModel_
|
||||||
import com.aurora.store.view.epoxy.views.app.AppListViewModel_
|
import com.aurora.store.view.epoxy.views.app.AppListViewModel_
|
||||||
@@ -34,7 +34,7 @@ import com.aurora.store.viewmodel.browse.StreamBrowseViewModel
|
|||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class StreamBrowseFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
|
class StreamBrowseFragment : BaseFragment<FragmentGenericWithToolbarBinding>() {
|
||||||
private val args: StreamBrowseFragmentArgs by navArgs()
|
private val args: StreamBrowseFragmentArgs by navArgs()
|
||||||
private val viewModel: StreamBrowseViewModel by viewModels()
|
private val viewModel: StreamBrowseViewModel by viewModels()
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ package com.aurora.store.view.ui.details
|
|||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import com.aurora.Constants
|
import com.aurora.Constants
|
||||||
@@ -29,8 +28,7 @@ import com.aurora.extensions.browse
|
|||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.data.model.ExodusTracker
|
import com.aurora.store.data.model.ExodusTracker
|
||||||
import com.aurora.store.data.model.Report
|
import com.aurora.store.data.model.Report
|
||||||
import com.aurora.store.databinding.ActivityGenericPagerBinding
|
import com.aurora.store.databinding.FragmentGenericWithToolbarBinding
|
||||||
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
|
|
||||||
import com.aurora.store.view.epoxy.views.HeaderViewModel_
|
import com.aurora.store.view.epoxy.views.HeaderViewModel_
|
||||||
import com.aurora.store.view.epoxy.views.details.ExodusViewModel_
|
import com.aurora.store.view.epoxy.views.details.ExodusViewModel_
|
||||||
import com.aurora.store.view.ui.commons.BaseFragment
|
import com.aurora.store.view.ui.commons.BaseFragment
|
||||||
@@ -39,7 +37,7 @@ import org.json.JSONObject
|
|||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class DetailsExodusFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
|
class DetailsExodusFragment : BaseFragment<FragmentGenericWithToolbarBinding>() {
|
||||||
|
|
||||||
private val args: DetailsExodusFragmentArgs by navArgs()
|
private val args: DetailsExodusFragmentArgs by navArgs()
|
||||||
|
|
||||||
|
|||||||
@@ -25,8 +25,7 @@ import androidx.fragment.app.viewModels
|
|||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import com.aurora.gplayapi.data.models.SearchBundle
|
import com.aurora.gplayapi.data.models.SearchBundle
|
||||||
import com.aurora.store.R
|
import com.aurora.store.databinding.FragmentGenericWithToolbarBinding
|
||||||
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
|
|
||||||
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
|
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
|
||||||
import com.aurora.store.view.epoxy.views.AppProgressViewModel_
|
import com.aurora.store.view.epoxy.views.AppProgressViewModel_
|
||||||
import com.aurora.store.view.epoxy.views.app.AppListViewModel_
|
import com.aurora.store.view.epoxy.views.app.AppListViewModel_
|
||||||
@@ -35,7 +34,7 @@ import com.aurora.store.viewmodel.search.SearchResultViewModel
|
|||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class DevAppsFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
|
class DevAppsFragment : BaseFragment<FragmentGenericWithToolbarBinding>() {
|
||||||
|
|
||||||
private val args: DevAppsFragmentArgs by navArgs()
|
private val args: DevAppsFragmentArgs by navArgs()
|
||||||
private val viewModel: SearchResultViewModel by viewModels()
|
private val viewModel: SearchResultViewModel by viewModels()
|
||||||
@@ -73,15 +72,15 @@ class DevAppsFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
|
|||||||
searchBundle.appList
|
searchBundle.appList
|
||||||
.filter { it.displayName.isNotEmpty() }
|
.filter { it.displayName.isNotEmpty() }
|
||||||
.forEach { app ->
|
.forEach { app ->
|
||||||
add(
|
add(
|
||||||
AppListViewModel_()
|
AppListViewModel_()
|
||||||
.id(app.id)
|
.id(app.id)
|
||||||
.app(app)
|
.app(app)
|
||||||
.click(View.OnClickListener {
|
.click(View.OnClickListener {
|
||||||
openDetailsFragment(app.packageName, app)
|
openDetailsFragment(app.packageName, app)
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (searchBundle.subBundles.isNotEmpty()) {
|
if (searchBundle.subBundles.isNotEmpty()) {
|
||||||
add(
|
add(
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import android.view.View
|
|||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
|
import com.aurora.store.databinding.FragmentGenericWithToolbarBinding
|
||||||
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
|
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
|
||||||
import com.aurora.store.view.epoxy.views.AppProgressViewModel_
|
import com.aurora.store.view.epoxy.views.AppProgressViewModel_
|
||||||
import com.aurora.store.view.epoxy.views.HeaderViewModel_
|
import com.aurora.store.view.epoxy.views.HeaderViewModel_
|
||||||
@@ -37,7 +37,7 @@ import com.aurora.store.viewmodel.sale.AppSalesViewModel
|
|||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class AppSalesFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
|
class AppSalesFragment : BaseFragment<FragmentGenericWithToolbarBinding>() {
|
||||||
|
|
||||||
private val viewModel: AppSalesViewModel by viewModels()
|
private val viewModel: AppSalesViewModel by viewModels()
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ abstract class BaseDialogSheet<ViewBindingType : ViewBinding> : BottomSheetDialo
|
|||||||
private var _binding: ViewBindingType? = null
|
private var _binding: ViewBindingType? = null
|
||||||
protected val binding get() = _binding!!
|
protected val binding get() = _binding!!
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import android.content.pm.PackageManager
|
|||||||
import android.content.pm.PermissionInfo
|
import android.content.pm.PermissionInfo
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.LinearLayout
|
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import com.aurora.extensions.hide
|
import com.aurora.extensions.hide
|
||||||
import com.aurora.extensions.show
|
import com.aurora.extensions.show
|
||||||
@@ -53,8 +52,7 @@ class PermissionBottomSheet : BaseDialogSheet<SheetPermissionsBinding>() {
|
|||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
val permissionGroupWidgets: MutableMap<String, PermissionGroup?> =
|
val permissionGroupWidgets: MutableMap<String, PermissionGroup?> = mutableMapOf()
|
||||||
HashMap<String, PermissionGroup?>()
|
|
||||||
for (permissionName in args.app.permissions) {
|
for (permissionName in args.app.permissions) {
|
||||||
|
|
||||||
val permissionInfo = getPermissionInfo(permissionName) ?: continue
|
val permissionInfo = getPermissionInfo(permissionName) ?: continue
|
||||||
@@ -64,12 +62,7 @@ class PermissionBottomSheet : BaseDialogSheet<SheetPermissionsBinding>() {
|
|||||||
if (permissionGroupWidgets.containsKey(permissionGroupInfo.name)) {
|
if (permissionGroupWidgets.containsKey(permissionGroupInfo.name)) {
|
||||||
permissionGroup = permissionGroupWidgets[permissionGroupInfo.name]
|
permissionGroup = permissionGroupWidgets[permissionGroupInfo.name]
|
||||||
} else {
|
} else {
|
||||||
permissionGroup = PermissionGroup(context)
|
permissionGroup = PermissionGroup(context, permissionGroupInfo)
|
||||||
permissionGroup.setPermissionGroupInfo(permissionGroupInfo)
|
|
||||||
permissionGroup.layoutParams = LinearLayout.LayoutParams(
|
|
||||||
LinearLayout.LayoutParams.WRAP_CONTENT,
|
|
||||||
LinearLayout.LayoutParams.WRAP_CONTENT
|
|
||||||
)
|
|
||||||
permissionGroupWidgets[permissionGroupInfo.name] = permissionGroup
|
permissionGroupWidgets[permissionGroupInfo.name] = permissionGroup
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ import androidx.viewpager2.adapter.FragmentStateAdapter
|
|||||||
import com.aurora.extensions.toast
|
import com.aurora.extensions.toast
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.data.providers.NativeDeviceInfoProvider
|
import com.aurora.store.data.providers.NativeDeviceInfoProvider
|
||||||
import com.aurora.store.databinding.ActivityGenericPagerBinding
|
import com.aurora.store.databinding.FragmentGenericWithPagerBinding
|
||||||
import com.aurora.store.util.PathUtil
|
import com.aurora.store.util.PathUtil
|
||||||
import com.aurora.store.view.ui.commons.BaseFragment
|
import com.aurora.store.view.ui.commons.BaseFragment
|
||||||
import com.google.android.material.tabs.TabLayout
|
import com.google.android.material.tabs.TabLayout
|
||||||
@@ -42,7 +42,7 @@ import com.google.android.material.tabs.TabLayoutMediator
|
|||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class SpoofFragment : BaseFragment<ActivityGenericPagerBinding>() {
|
class SpoofFragment : BaseFragment<FragmentGenericWithPagerBinding>() {
|
||||||
private val TAG = SpoofFragment::class.java.simpleName
|
private val TAG = SpoofFragment::class.java.simpleName
|
||||||
|
|
||||||
// Android is weird, even if export device config with proper mime type, it will refuse to open
|
// Android is weird, even if export device config with proper mime type, it will refuse to open
|
||||||
|
|||||||
@@ -77,27 +77,27 @@
|
|||||||
android:id="@+id/appsGamesFragment"
|
android:id="@+id/appsGamesFragment"
|
||||||
android:name="com.aurora.store.view.ui.all.AppsGamesFragment"
|
android:name="com.aurora.store.view.ui.all.AppsGamesFragment"
|
||||||
android:label="@string/title_apps_games"
|
android:label="@string/title_apps_games"
|
||||||
tools:layout="@layout/activity_generic_pager" />
|
tools:layout="@layout/fragment_generic_with_pager" />
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/appSalesFragment"
|
android:id="@+id/appSalesFragment"
|
||||||
android:name="com.aurora.store.view.ui.sale.AppSalesFragment"
|
android:name="com.aurora.store.view.ui.sale.AppSalesFragment"
|
||||||
android:label="@string/title_apps_sale"
|
android:label="@string/title_apps_sale"
|
||||||
tools:layout="@layout/activity_generic_recycler" />
|
tools:layout="@layout/fragment_generic_with_toolbar" />
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/spoofFragment"
|
android:id="@+id/spoofFragment"
|
||||||
android:name="com.aurora.store.view.ui.spoof.SpoofFragment"
|
android:name="com.aurora.store.view.ui.spoof.SpoofFragment"
|
||||||
android:label="@string/title_spoof_manager"
|
android:label="@string/title_spoof_manager"
|
||||||
tools:layout="@layout/activity_generic_pager" />
|
tools:layout="@layout/fragment_generic_with_pager" />
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/favouriteFragment"
|
android:id="@+id/favouriteFragment"
|
||||||
android:name="com.aurora.store.view.ui.commons.FavouriteFragment"
|
android:name="com.aurora.store.view.ui.commons.FavouriteFragment"
|
||||||
android:label="@string/title_favourites_manager"
|
android:label="@string/title_favourites_manager"
|
||||||
tools:layout="@layout/activity_generic_recycler" />
|
tools:layout="@layout/fragment_generic_with_toolbar" />
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/blacklistFragment"
|
android:id="@+id/blacklistFragment"
|
||||||
android:name="com.aurora.store.view.ui.commons.BlacklistFragment"
|
android:name="com.aurora.store.view.ui.commons.BlacklistFragment"
|
||||||
android:label="@string/title_blacklist_manager"
|
android:label="@string/title_blacklist_manager"
|
||||||
tools:layout="@layout/activity_generic_recycler" />
|
tools:layout="@layout/fragment_generic_with_toolbar" />
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/accountFragment"
|
android:id="@+id/accountFragment"
|
||||||
android:name="com.aurora.store.view.ui.account.AccountFragment"
|
android:name="com.aurora.store.view.ui.account.AccountFragment"
|
||||||
@@ -209,7 +209,7 @@
|
|||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/categoryBrowseFragment"
|
android:id="@+id/categoryBrowseFragment"
|
||||||
android:name="com.aurora.store.view.ui.commons.CategoryBrowseFragment"
|
android:name="com.aurora.store.view.ui.commons.CategoryBrowseFragment"
|
||||||
tools:layout="@layout/activity_generic_recycler" >
|
tools:layout="@layout/fragment_generic_with_toolbar" >
|
||||||
<argument
|
<argument
|
||||||
android:name="title"
|
android:name="title"
|
||||||
app:argType="string" />
|
app:argType="string" />
|
||||||
@@ -223,7 +223,7 @@
|
|||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/editorStreamBrowseFragment"
|
android:id="@+id/editorStreamBrowseFragment"
|
||||||
android:name="com.aurora.store.view.ui.commons.EditorStreamBrowseFragment"
|
android:name="com.aurora.store.view.ui.commons.EditorStreamBrowseFragment"
|
||||||
tools:layout="@layout/activity_generic_recycler" >
|
tools:layout="@layout/fragment_generic_with_toolbar" >
|
||||||
<argument android:name="title"
|
<argument android:name="title"
|
||||||
app:argType="string" />
|
app:argType="string" />
|
||||||
<argument
|
<argument
|
||||||
@@ -233,7 +233,7 @@
|
|||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/expandedStreamBrowseFragment"
|
android:id="@+id/expandedStreamBrowseFragment"
|
||||||
android:name="com.aurora.store.view.ui.commons.ExpandedStreamBrowseFragment"
|
android:name="com.aurora.store.view.ui.commons.ExpandedStreamBrowseFragment"
|
||||||
tools:layout="@layout/activity_generic_recycler" >
|
tools:layout="@layout/fragment_generic_with_toolbar" >
|
||||||
<argument android:name="title"
|
<argument android:name="title"
|
||||||
app:argType="string" />
|
app:argType="string" />
|
||||||
<argument
|
<argument
|
||||||
@@ -271,7 +271,7 @@
|
|||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/streamBrowseFragment"
|
android:id="@+id/streamBrowseFragment"
|
||||||
android:name="com.aurora.store.view.ui.commons.StreamBrowseFragment"
|
android:name="com.aurora.store.view.ui.commons.StreamBrowseFragment"
|
||||||
tools:layout="@layout/activity_generic_recycler" >
|
tools:layout="@layout/fragment_generic_with_toolbar" >
|
||||||
<argument
|
<argument
|
||||||
android:name="browseUrl"
|
android:name="browseUrl"
|
||||||
app:argType="string" />
|
app:argType="string" />
|
||||||
@@ -282,7 +282,7 @@
|
|||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/devAppsFragment"
|
android:id="@+id/devAppsFragment"
|
||||||
android:name="com.aurora.store.view.ui.details.DevAppsFragment"
|
android:name="com.aurora.store.view.ui.details.DevAppsFragment"
|
||||||
tools:layout="@layout/activity_generic_recycler" >
|
tools:layout="@layout/fragment_generic_with_toolbar" >
|
||||||
<argument
|
<argument
|
||||||
android:name="developerName"
|
android:name="developerName"
|
||||||
app:argType="string" />
|
app:argType="string" />
|
||||||
@@ -308,7 +308,7 @@
|
|||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/detailsExodusFragment"
|
android:id="@+id/detailsExodusFragment"
|
||||||
android:name="com.aurora.store.view.ui.details.DetailsExodusFragment"
|
android:name="com.aurora.store.view.ui.details.DetailsExodusFragment"
|
||||||
tools:layout="@layout/activity_generic_recycler" >
|
tools:layout="@layout/fragment_generic_with_toolbar" >
|
||||||
<argument
|
<argument
|
||||||
android:name="displayName"
|
android:name="displayName"
|
||||||
app:argType="string" />
|
app:argType="string" />
|
||||||
|
|||||||
Reference in New Issue
Block a user