Commit c0fa8c41 authored by Seatel's avatar Seatel

enhance home fragment.

parent 525d55fd
...@@ -193,7 +193,7 @@ dependencies { ...@@ -193,7 +193,7 @@ dependencies {
// implementation 'com.dinuscxj:circleprogressbar:1.3.6' // implementation 'com.dinuscxj:circleprogressbar:1.3.6'
// implementation(name: 'circleprogressbar-debug', ext: 'aar') // implementation(name: 'circleprogressbar-debug', ext: 'aar')
implementation 'com.github.smarteist:autoimageslider:1.4.0' //implementation 'com.github.smarteist:autoimageslider:1.4.0'
//api 'com.theartofdev.edmodo:android-image-cropper:2.8.0' //api 'com.theartofdev.edmodo:android-image-cropper:2.8.0'
implementation("com.vanniktech:android-image-cropper:4.6.0") implementation("com.vanniktech:android-image-cropper:4.6.0")
......
...@@ -3,31 +3,53 @@ package com.seatel.mobilehall.ui.home.adapter ...@@ -3,31 +3,53 @@ package com.seatel.mobilehall.ui.home.adapter
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ImageView
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.seatel.mobilehall.R import com.seatel.mobilehall.databinding.ItemHomeBannerBinding
import com.seatel.mobilehall.ui.home.model.BannersModel import com.seatel.mobilehall.ui.home.model.BannersModel
import com.seatel.mobilehall.ui.login.activity.TermsAndConditionsActivity
class ImageSliderAdapter (private val banners: List<BannersModel>) : RecyclerView.Adapter<ImageSliderAdapter.ViewHolder>() { class ImageSliderAdapter(
private val banners: List<BannersModel>,
private var onActionLink: (String) -> Unit,
) : RecyclerView.Adapter<ImageSliderAdapter.SliderVH>() {
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { private val newList: List<BannersModel> =
val imageView: ImageView = itemView.findViewById(R.id.imageView) listOf(banners.last()) + banners + listOf(banners.first())
}
class SliderVH(val binding: ItemHomeBannerBinding) : RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { lateinit var binding: ItemHomeBannerBinding
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_image_slider, parent, false) override fun onCreateViewHolder(
return ViewHolder(view) parent: ViewGroup,
viewType: Int
): ImageSliderAdapter.SliderVH {
val binding = ItemHomeBannerBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return SliderVH(binding)
} }
override fun onBindViewHolder(holder: ViewHolder, position: Int) { override fun onBindViewHolder(holder: ImageSliderAdapter.SliderVH, position: Int) {
val banner = banners[position] val banner = newList[position]
Glide.with(holder.imageView.context) Glide.with(holder.itemView.context).load(banner.imageUrl).into(holder.binding.imageView)
.load(banner.imageUrl) // Use banner.url here holder.itemView.setOnClickListener(View.OnClickListener {
.into(holder.imageView) println("action action banner")
when (banner.actionType) {
"in-app" -> {
TermsAndConditionsActivity.launch(
holder.itemView.context, banner.imageUrl!!
)
}
"out-app" -> {
banner.url?.let { url ->
onActionLink.invoke(url)
}
} }
}
})
}
override fun getItemCount(): Int { override fun getItemCount(): Int {
return banners.size return newList.size
} }
} }
\ No newline at end of file
...@@ -4,6 +4,8 @@ import android.content.Context ...@@ -4,6 +4,8 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.text.TextUtils import android.text.TextUtils
import android.util.Log import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
...@@ -12,6 +14,7 @@ import android.view.ViewGroup ...@@ -12,6 +14,7 @@ import android.view.ViewGroup
import android.widget.RelativeLayout import android.widget.RelativeLayout
import android.widget.Toast import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.viewpager2.widget.ViewPager2
import coil.load import coil.load
import coil.transform.CircleCropTransformation import coil.transform.CircleCropTransformation
import com.android.volley.Request import com.android.volley.Request
...@@ -45,6 +48,7 @@ import com.seatel.mobilehall.ui.home.activity.PromotionActivity ...@@ -45,6 +48,7 @@ import com.seatel.mobilehall.ui.home.activity.PromotionActivity
import com.seatel.mobilehall.ui.home.activity.SupportActivity import com.seatel.mobilehall.ui.home.activity.SupportActivity
import com.seatel.mobilehall.ui.home.activity.TopUpActivity import com.seatel.mobilehall.ui.home.activity.TopUpActivity
import com.seatel.mobilehall.ui.home.adapter.CategoryAdapter import com.seatel.mobilehall.ui.home.adapter.CategoryAdapter
import com.seatel.mobilehall.ui.home.adapter.ImageSliderAdapter
import com.seatel.mobilehall.ui.home.interactor.BadgesCountInteractor import com.seatel.mobilehall.ui.home.interactor.BadgesCountInteractor
import com.seatel.mobilehall.ui.home.interactor.BannersInteractor import com.seatel.mobilehall.ui.home.interactor.BannersInteractor
import com.seatel.mobilehall.ui.home.interactor.CategoryInteractor import com.seatel.mobilehall.ui.home.interactor.CategoryInteractor
...@@ -98,8 +102,11 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie ...@@ -98,8 +102,11 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
//private lateinit var homeImageSliderAdapter: HomeImageSliderAdapter //private lateinit var homeImageSliderAdapter: HomeImageSliderAdapter
private lateinit var imageSliderAdapter: ImageSliderAdapter
private var handler = Handler(Looper.getMainLooper())
private lateinit var categoryAdapter: CategoryAdapter private lateinit var categoryAdapter: CategoryAdapter
private var autoScrollRunnable: Runnable? = null
private val autoScrollDelay = 3000L
override fun onAttach(context: Context) { override fun onAttach(context: Context) {
super.onAttach(context) super.onAttach(context)
...@@ -122,8 +129,8 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie ...@@ -122,8 +129,8 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
binding.mSwipeRefreshLayout.isRefreshing = false binding.mSwipeRefreshLayout.isRefreshing = false
// initEvent() // initEvent()
// checkLogin() // checkLogin()
stopAutoScroll()
} }
return binding.root return binding.root
} }
...@@ -247,6 +254,7 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie ...@@ -247,6 +254,7 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
override fun onStop() { override fun onStop() {
super.onStop() super.onStop()
if (player != null) player!!.stop() if (player != null) player!!.stop()
stopAutoScroll()
} }
private fun checkLogin() { private fun checkLogin() {
...@@ -287,6 +295,7 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie ...@@ -287,6 +295,7 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
btnBalance.setOnClickListener(this@HomeFragment) btnBalance.setOnClickListener(this@HomeFragment)
btnTopUp.setOnClickListener(this@HomeFragment) btnTopUp.setOnClickListener(this@HomeFragment)
btnNumber.setOnClickListener(this@HomeFragment) btnNumber.setOnClickListener(this@HomeFragment)
viewpager2.setOnClickListener(this@HomeFragment)
} }
} }
...@@ -295,6 +304,7 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie ...@@ -295,6 +304,7 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
super.onResume() super.onResume()
getDataMainScreen(token) getDataMainScreen(token)
checkLogin() checkLogin()
stopAutoScroll()
} }
private fun getDataMainScreen(token: String) { private fun getDataMainScreen(token: String) {
...@@ -377,8 +387,6 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie ...@@ -377,8 +387,6 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
txtExpiresVal.visibility = View.VISIBLE txtExpiresVal.visibility = View.VISIBLE
txtExpires.visibility = View.VISIBLE txtExpires.visibility = View.VISIBLE
} }
} }
dataMainScreen.getContactService().forEach { dataMainScreen.getContactService().forEach {
...@@ -466,24 +474,64 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie ...@@ -466,24 +474,64 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
} }
override fun onGetBannersSucceed(bannersList: ArrayList<BannersModel>) { override fun onGetBannersSucceed(bannersList: ArrayList<BannersModel>) {
// binding.run { if (bannersList.isEmpty()) {
// bannersList.let { println("bannersList is empty")
// it.run { } else {
//// homeImageSliderAdapter = HomeImageSliderAdapter(requireContext()) { binding.run {
//// gotoPlayStore(packageName = "com.nacd.stopdrug") imageSliderAdapter = ImageSliderAdapter(
//// } bannersList,
//// homeImageSliderAdapter.addItem(it) onActionLink = {
//// homeImageSlider.setSliderAdapter(homeImageSliderAdapter) Toast.makeText(context, "Banner clicked at position: $it", Toast.LENGTH_SHORT).show()
//// homeImageSlider.setIndicatorAnimation(IndicatorAnimationType.WORM) gotoPlayStore(packageName = "com.nacd.stopdrug")
//// homeImageSlider.autoCycleDirection = SliderView.LAYOUT_DIRECTION_INHERIT }
//// homeImageSlider.setSliderTransformAnimation(SliderAnimations.SIMPLETRANSFORMATION) )
//// homeImageSlider.scrollTimeInSec = 3 if (bannersList.isNotEmpty()){
//// homeImageSlider.startAutoCycle() viewpager2.adapter = imageSliderAdapter
// } viewpager2.currentItem = 1
// } setupAutoScroll(bannersList.size + 2)
// } startAutoScroll()
}
binding.viewpager2.setMarginsInDp(top = 6)
}
}
}
private fun setupAutoScroll(bannerList : Int){
binding.viewpager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback(){
override fun onPageScrollStateChanged(state: Int) {
super.onPageScrollStateChanged(state)
if (state == ViewPager2.SCROLL_STATE_IDLE){
when(binding.viewpager2.currentItem){
bannerList - 1 -> binding.viewpager2.setCurrentItem(1, false)
0 -> binding.viewpager2.setCurrentItem(bannerList - 2, false) }
}
}
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
if (position != 0 && position != bannerList - 1) {
//pageIndicatorView.setSelected(position-1)
}
}
})
}
private fun stopAutoScroll() {
autoScrollRunnable?.let {
handler.removeCallbacks(it)
}
}
private fun startAutoScroll() {
autoScrollRunnable = object : Runnable {
override fun run() {
val current = binding.viewpager2.currentItem
val next = current + 1
binding.viewpager2.setCurrentItem(next, true)
handler.postDelayed(this, autoScrollDelay)
}
}
handler.postDelayed(autoScrollRunnable!!, autoScrollDelay)
} }
...@@ -670,4 +718,25 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie ...@@ -670,4 +718,25 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
} }
private fun View.setMarginsInDp(
left: Int = 0,
top: Int = 0,
right: Int = 0,
bottom: Int = 0
) {
val scale = context.resources.displayMetrics.density
val params = layoutParams as? ViewGroup.MarginLayoutParams
?: ViewGroup.MarginLayoutParams(layoutParams)
params.setMargins(
(left * scale + 0.5f).toInt(),
(top * scale + 0.5f).toInt(),
(right * scale + 0.5f).toInt(),
(bottom * scale + 0.5f).toInt()
)
layoutParams = params
}
} }
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitXY"/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment