Commit ab53d5c7 authored by Seatel's avatar Seatel

upgrade solutions yes members and yes coins

parent e29d07be
......@@ -17,7 +17,7 @@ android {
storePassword 'seatel_Cambodia'
keyPassword 'seatel_Cambodia'
keyAlias 'seatel_cambodia'
storeFile file('/Users/luckeavan/Documents/YES-Seatel/YesApp-Android/android-yes/seashop.jks')
storeFile file('/Users/ryan/Documents/Project/Seatel_android_project/sea-tel-android/app/key/release.jks')
}
}
compileSdk 34
......@@ -127,6 +127,7 @@ dependencies {
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.github.bigstark:fresco-parallax-drawee-view:1.2.1'
implementation 'com.github.bigstark:fresco-parallax-drawee-view:1.2.0'
implementation 'com.facebook.android:facebook-android-sdk:4.42.0'
implementation 'com.mcxiaoke.volley:library:1.0.19'
implementation 'com.jaredrummler:android-device-names:1.1.7'
......@@ -216,7 +217,8 @@ 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'
//implementation ("com.github.smarteist:autoimageslider:1.4.0-appcompat")
//api 'com.theartofdev.edmodo:android-image-cropper:2.8.0'
implementation("com.vanniktech:android-image-cropper:4.6.0")
......@@ -230,4 +232,8 @@ dependencies {
//noinspection GradleDependency
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'androidx.viewpager2:viewpager2:1.0.0'
implementation 'com.google.android.material:material:1.11.0'
implementation("io.coil-kt:coil:2.4.0")
}
package com.seatel.mobilehall.ui.home.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import coil.load
import com.seatel.mobilehall.R
import com.seatel.mobilehall.databinding.ItemHomeImageSliderBinding
import com.seatel.mobilehall.ui.home.model.BannersModel
import com.seatel.mobilehall.ui.login.activity.TermsAndConditionsActivity
import com.smarteist.autoimageslider.SliderViewAdapter
class HomeImageSliderAdapter(
var context: Context,
private var onActionLink: (String) -> Unit,
) : SliderViewAdapter<HomeImageSliderAdapter.SliderAdapterVH>() {
private var mSliderItems = mutableListOf<BannersModel>()
fun renewItems(sliderItems: MutableList<BannersModel>) {
mSliderItems = sliderItems
notifyDataSetChanged()
}
fun deleteItem(position: Int) {
mSliderItems.removeAt(position)
notifyDataSetChanged()
}
fun addItem(sliderItem: List<BannersModel>) {
mSliderItems = sliderItem.toMutableList()
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup): SliderAdapterVH {
val binding =
ItemHomeImageSliderBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return SliderAdapterVH(binding)
}
override fun onBindViewHolder(viewHolder: SliderAdapterVH, position: Int) {
val sliderItem = mSliderItems[position]
// Load image with Coil
viewHolder.view.ivAutoImageSlider.load(sliderItem.imageUrl) {
crossfade(true)
placeholder(R.drawable.bg_round_gray_section)
error(R.drawable.bg_round_gray_section)
}
viewHolder.itemView.setOnClickListener(View.OnClickListener {
when (sliderItem.actionType) {
"in-app" -> {
TermsAndConditionsActivity.launch(
context, sliderItem.imageUrl!!
)
}
"out-app" -> {
sliderItem.url?.let { url ->
onActionLink.invoke(url)
}
}
}
})
}
override fun getCount(): Int {
//slider view count could be dynamic size
return mSliderItems.size
}
class SliderAdapterVH(val view: ItemHomeImageSliderBinding) : ViewHolder(view.root)
}
\ No newline at end of file
////package com.seatel.mobilehall.ui.home.adapter
////
////import android.content.Context
////import android.view.LayoutInflater
////import android.view.View
////import android.view.ViewGroup
////import coil.load
////import com.seatel.mobilehall.R
////import com.seatel.mobilehall.databinding.ItemHomeImageSliderBinding
////import com.seatel.mobilehall.ui.home.model.BannersModel
////import com.seatel.mobilehall.ui.login.activity.TermsAndConditionsActivity
////
//class HomeImageSliderAdapter(
//// var context: Context,
//// private var onActionLink: (String) -> Unit,
////) : SliderViewAdapter<HomeImageSliderAdapter.SliderAdapterVH>() {
////
//// private var mSliderItems = mutableListOf<BannersModel>()
////
//// fun renewItems(sliderItems: MutableList<BannersModel>) {
//// mSliderItems = sliderItems
//// notifyDataSetChanged()
//// }
////
//// fun deleteItem(position: Int) {
//// mSliderItems.removeAt(position)
//// notifyDataSetChanged()
//// }
////
//// fun addItem(sliderItem: List<BannersModel>) {
//// mSliderItems = sliderItem.toMutableList()
//// notifyDataSetChanged()
//// }
////
//// override fun onCreateViewHolder(parent: ViewGroup): SliderAdapterVH {
////
//// val binding =
//// ItemHomeImageSliderBinding.inflate(LayoutInflater.from(parent.context), parent, false)
//// return SliderAdapterVH(binding)
////
//// }
////
//// override fun onBindViewHolder(viewHolder: SliderAdapterVH, position: Int) {
//// val sliderItem = mSliderItems[position]
////
//// // Load image with Coil
//// viewHolder.view.ivAutoImageSlider.load(sliderItem.imageUrl) {
//// crossfade(true)
//// placeholder(R.drawable.bg_round_gray_section)
//// error(R.drawable.bg_round_gray_section)
//// }
//// viewHolder.itemView.setOnClickListener(View.OnClickListener {
////
//// when (sliderItem.actionType) {
//// "in-app" -> {
//// TermsAndConditionsActivity.launch(
//// context, sliderItem.imageUrl!!
//// )
//// }
////
//// "out-app" -> {
//// sliderItem.url?.let { url ->
//// onActionLink.invoke(url)
//// }
////
//// }
//// }
////
////
//// })
//// }
////
//// override fun getCount(): Int {
//// //slider view count could be dynamic size
//// return mSliderItems.size
//// }
////
//// class SliderAdapterVH(val view: ItemHomeImageSliderBinding) : ViewHolder(view.root)
////}
\ No newline at end of file
package com.seatel.mobilehall.ui.home.adapter
import android.os.Handler
import android.os.Looper
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.core.view.size
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import coil.load
import com.bumptech.glide.Glide
import com.seatel.mobilehall.R
import com.seatel.mobilehall.databinding.ItemBinding
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: ItemBinding) : 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: ItemBinding
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): ImageSliderAdapter.SliderVH {
val binding = ItemBinding.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 {
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,7 +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.HomeImageSliderAdapter
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
......@@ -70,9 +73,6 @@ import com.seatel.mobilehall.util.lang.FirstLoginPreference
import com.seatel.mobilehall.util.manager.OrderingManager
import com.seatel.mobilehall.util.request.GetMainData
import com.seatel.mobilehall.util.viewFragmentBinding
import com.smarteist.autoimageslider.IndicatorView.animation.type.IndicatorAnimationType
import com.smarteist.autoimageslider.SliderAnimations
import com.smarteist.autoimageslider.SliderView
import org.json.JSONArray
import org.json.JSONObject
......@@ -101,9 +101,12 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
private var contactService = ArrayList<ContactService>()
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 var autoScrollRunnable: Runnable? = null
private val autoScrollDelay = 3000L
override fun onAttach(context: Context) {
super.onAttach(context)
......@@ -126,6 +129,7 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
binding.mSwipeRefreshLayout.isRefreshing = false
// initEvent()
// checkLogin()
stopAutoScroll()
}
return binding.root
......@@ -251,6 +255,8 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
override fun onStop() {
super.onStop()
if (player != null) player!!.stop()
println("on stop")
stopAutoScroll()
}
private fun checkLogin() {
......@@ -381,8 +387,6 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
txtExpiresVal.visibility = View.VISIBLE
txtExpires.visibility = View.VISIBLE
}
}
dataMainScreen.getContactService().forEach {
......@@ -472,22 +476,59 @@ class HomeFragment : BaseFragment(), View.OnClickListener, BannersInteractor.Vie
override fun onGetBannersSucceed(bannersList: ArrayList<BannersModel>) {
if (bannersList.isEmpty()) {
println("bannersList is empty")
} else {
binding.run {
bannersList.let {
it.run {
homeImageSliderAdapter = HomeImageSliderAdapter(requireContext()) {
imageSliderAdapter = ImageSliderAdapter(
bannersList,
onActionLink = {
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()
)
viewpager2.adapter = imageSliderAdapter
viewpager2.currentItem = 1
setupAutoScroll(bannersList.size + 2)
startAutoScroll()
}
}
}
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)
}
......
......@@ -5,6 +5,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat
import androidx.recyclerview.widget.GridLayoutManager
......@@ -88,12 +89,15 @@ class YesMemberFragment : BaseFragment(), MainTopPartnerInteractor.View {
LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
adapter = YesMemberAdapter(requireContext(), topPartnerList)
binding.recyclerPartner.adapter = adapter
Toast.makeText(context, "amount of the top partner is ${topPartnerList.size}", Toast.LENGTH_SHORT).show()
if (topPartnerList.isNotEmpty()) binding.tvPartner.visibility = View.VISIBLE else binding.tvPartner.visibility = View.GONE
}
override fun responsePartnerCategorySucceed(partnerCategory: ArrayList<PartnerCategoryModelItem>) {
binding.RecyclerPartnerCategory.layoutManager = GridLayoutManager(context, 2)
partnerCategoryAdapter = MainPartnerCategoryAdapter(requireContext(), partnerCategory)
binding.RecyclerPartnerCategory.adapter = partnerCategoryAdapter
if (partnerCategory.isNotEmpty()) binding.tvPartnerCategory.visibility = View.VISIBLE else binding.tvPartnerCategory.visibility = View.GONE
}
......@@ -133,6 +137,14 @@ class YesMemberFragment : BaseFragment(), MainTopPartnerInteractor.View {
CoinActivity.launch(requireContext(), imgCoin!!, coinEarn!!, coinDescription!!)
}
if (mainModel.coinHidden) binding.frameYesCoins.visibility = View.GONE else binding.frameYesCoins.visibility = View.VISIBLE
if (mainModel.partnerHidden){
binding.frameYesPartner.visibility = View.GONE
binding.qrCodeContainer.visibility = View.GONE
} else{
binding.frameYesPartner.visibility = View.VISIBLE
binding.qrCodeContainer.visibility = View.VISIBLE
}
}
override fun responseYesMemberMainFail(error: VolleyError) {
......
......@@ -8,5 +8,7 @@ data class YesMemberMainModel(
val eligiblePartner: Boolean,
val partnerBanner: String,
val partnerDescription: String,
val status: String
val status: String,
val coinHidden: Boolean,
val partnerHidden: Boolean,
)
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPinkSoft">
......
......@@ -217,8 +217,20 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.smarteist.autoimageslider.SliderView
android:id="@+id/homeImageSlider"
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:id="@+id/viewpager_banner"
android:background="@color/browser_actions_bg_grey"
android:layout_height="0dp"
android:paddingTop="5dp"
android:layout_marginStart="@dimen/margin_1x_size"
android:layout_marginEnd="@dimen/margin_1x_size"
app:layout_constraintBottom_toBottomOf="@id/viewpager2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/viewpager2"
/>
<androidx.viewpager2.widget.ViewPager2
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="@dimen/margin_1x_size"
......@@ -227,18 +239,7 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:sliderAnimationDuration="600"
app:sliderAutoCycleDirection="back_and_forth"
app:sliderAutoCycleEnabled="true"
app:sliderIndicatorAnimationDuration="600"
app:sliderIndicatorGravity="center_horizontal|bottom"
app:sliderIndicatorMarginBottom="@dimen/margin_5x_size"
app:sliderIndicatorOrientation="horizontal"
app:sliderIndicatorSelectedColor="@color/colorPrimaryDark"
app:sliderIndicatorUnselectedColor="#FFF"
app:sliderScrollTimeInSec="1"
app:sliderStartAutoCycle="true" />
android:id="@+id/viewpager2"/>
</androidx.constraintlayout.widget.ConstraintLayout>
......
......@@ -121,6 +121,7 @@
android:background="@drawable/bg_yes_member"
android:backgroundTint="@android:color/darker_gray"
android:gravity="center_vertical"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
......@@ -194,6 +195,8 @@
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_marginTop="@dimen/margin_2x_size"
android:visibility="gone"
tools:visibility="visible"
android:background="@drawable/bg_yes_member"
android:backgroundTint="@android:color/darker_gray"
android:gravity="center_vertical"
......@@ -275,6 +278,8 @@
android:text="Top yes Partner"
android:textColor="@color/colorPrimary"
android:textSize="@dimen/extra_large_text_size"
android:visibility="gone"
tools:visibility="visible"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/constraintLayout2" />
......@@ -297,6 +302,7 @@
android:textColor="@color/colorPrimary"
android:textSize="@dimen/extra_large_text_size"
android:textStyle="bold"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recyclerPartner" />
......@@ -317,6 +323,7 @@
android:id="@+id/qrCodeContainer"
android:layout_width="80dp"
android:layout_height="35dp"
android:visibility="gone"
android:layout_marginEnd="@dimen/margin_2x_size"
android:layout_marginBottom="@dimen/margin_2x_size"
android:background="@drawable/rounded_corner"
......
<?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
......@@ -11,5 +11,4 @@
android:adjustViewBounds="true"
android:scaleType="fitXY" />
</LinearLayout>
\ No newline at end of file
pluginManagement {
repositories {
maven { url 'https://jitpack.io' }
gradlePluginPortal()
google()
jcenter()
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
maven { url = uri("https://jitpack.io") }
google()
jcenter()
mavenCentral()
......@@ -18,7 +18,6 @@ dependencyResolutionManagement {
maven { url 'https://jitpack.io' }
maven { url "https://jcenter.bintray.com"}
maven { url "https://anylinesdk.blob.core.windows.net/maven/" }
}
}
rootProject.name = "seatel"
......
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