Commit c0fa8c41 authored by Seatel's avatar Seatel

enhance home fragment.

parent 525d55fd
......@@ -193,7 +193,7 @@ dependencies {
// implementation 'com.dinuscxj:circleprogressbar:1.3.6'
// 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'
implementation("com.vanniktech:android-image-cropper:4.6.0")
......
......@@ -3,31 +3,53 @@ package com.seatel.mobilehall.ui.home.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.recyclerview.widget.RecyclerView
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.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) {
val imageView: ImageView = itemView.findViewById(R.id.imageView)
}
private val newList: List<BannersModel> =
listOf(banners.last()) + banners + listOf(banners.first())
class SliderVH(val binding: ItemHomeBannerBinding) : RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_image_slider, parent, false)
return ViewHolder(view)
lateinit var binding: ItemHomeBannerBinding
override fun onCreateViewHolder(
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) {
val banner = banners[position]
Glide.with(holder.imageView.context)
.load(banner.imageUrl) // Use banner.url here
.into(holder.imageView)
override fun onBindViewHolder(holder: ImageSliderAdapter.SliderVH, position: Int) {
val banner = newList[position]
Glide.with(holder.itemView.context).load(banner.imageUrl).into(holder.binding.imageView)
holder.itemView.setOnClickListener(View.OnClickListener {
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 {
return banners.size
return newList.size
}
}
\ No newline at end of file
......@@ -4,6 +4,8 @@ import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.text.TextUtils
import android.util.Log
import android.view.LayoutInflater
......@@ -12,6 +14,7 @@ import android.view.ViewGroup
import android.widget.RelativeLayout
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.viewpager2.widget.ViewPager2
import coil.load
import coil.transform.CircleCropTransformation
import com.android.volley.Request
......@@ -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.TopUpActivity
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.BannersInteractor
import com.seatel.mobilehall.ui.home.interactor.CategoryInteractor
......@@ -98,8 +102,11 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
//private lateinit var homeImageSliderAdapter: HomeImageSliderAdapter
private lateinit var imageSliderAdapter: ImageSliderAdapter
private var handler = Handler(Looper.getMainLooper())
private lateinit var categoryAdapter: CategoryAdapter
private var autoScrollRunnable: Runnable? = null
private val autoScrollDelay = 3000L
override fun onAttach(context: Context) {
super.onAttach(context)
......@@ -122,8 +129,8 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
binding.mSwipeRefreshLayout.isRefreshing = false
// initEvent()
// checkLogin()
stopAutoScroll()
}
return binding.root
}
......@@ -247,6 +254,7 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
override fun onStop() {
super.onStop()
if (player != null) player!!.stop()
stopAutoScroll()
}
private fun checkLogin() {
......@@ -287,6 +295,7 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
btnBalance.setOnClickListener(this@HomeFragment)
btnTopUp.setOnClickListener(this@HomeFragment)
btnNumber.setOnClickListener(this@HomeFragment)
viewpager2.setOnClickListener(this@HomeFragment)
}
}
......@@ -295,6 +304,7 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
super.onResume()
getDataMainScreen(token)
checkLogin()
stopAutoScroll()
}
private fun getDataMainScreen(token: String) {
......@@ -377,8 +387,6 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
txtExpiresVal.visibility = View.VISIBLE
txtExpires.visibility = View.VISIBLE
}
}
dataMainScreen.getContactService().forEach {
......@@ -466,24 +474,64 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
}
override fun onGetBannersSucceed(bannersList: ArrayList<BannersModel>) {
// binding.run {
// bannersList.let {
// it.run {
//// homeImageSliderAdapter = HomeImageSliderAdapter(requireContext()) {
//// gotoPlayStore(packageName = "com.nacd.stopdrug")
//// }
//// homeImageSliderAdapter.addItem(it)
//// homeImageSlider.setSliderAdapter(homeImageSliderAdapter)
//// homeImageSlider.setIndicatorAnimation(IndicatorAnimationType.WORM)
//// homeImageSlider.autoCycleDirection = SliderView.LAYOUT_DIRECTION_INHERIT
//// homeImageSlider.setSliderTransformAnimation(SliderAnimations.SIMPLETRANSFORMATION)
//// homeImageSlider.scrollTimeInSec = 3
//// homeImageSlider.startAutoCycle()
// }
// }
// }
if (bannersList.isEmpty()) {
println("bannersList is empty")
} else {
binding.run {
imageSliderAdapter = ImageSliderAdapter(
bannersList,
onActionLink = {
Toast.makeText(context, "Banner clicked at position: $it", Toast.LENGTH_SHORT).show()
gotoPlayStore(packageName = "com.nacd.stopdrug")
}
)
if (bannersList.isNotEmpty()){
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
}
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