Browse Source

+ WA888 change UI Main in progress

Dola TENG 2 years ago
parent
commit
cb04d7b75c

+ 1 - 0
.idea/misc.xml

@@ -74,6 +74,7 @@
         <entry key="..\:/android/SBC_Main_Android/app/src/main/res/layout/layout_betting_statement.xml" value="0.25416666666666665" />
         <entry key="..\:/android/SBC_Main_Android/app/src/main/res/layout/layout_fragment_main_yuki.xml" value="0.25416666666666665" />
         <entry key="..\:/android/SBC_Main_Android/app/src/main/res/layout/layout_main_module.xml" value="0.264" />
+        <entry key="..\:/android/SBC_Main_Android/app/src/main/res/layout/layout_sub_module.xml" value="0.1671195652173913" />
         <entry key="..\:/android/Yuki-Mobile/app/src/main/res/layout/activity_login.xml" value="0.15489130434782608" />
         <entry key="..\:/android/Yuki-Mobile/app/src/main/res/layout/app_bar.xml" value="0.25416666666666665" />
         <entry key="..\:/android/Yuki-Mobile/app/src/main/res/layout/fragment_main.xml" value="0.25416666666666665" />

+ 38 - 0
app/src/main/java/com/khmer9/yuki/app/ShareViewModel.kt

@@ -11,6 +11,7 @@ import com.khmer9.yuki.remote.service.ApiService
 import com.khmer9.yuki.remote.service.ConnectivityStates
 import com.khmer9.yuki.remote.service.EventListener
 import com.khmer9.yuki.screen.main.ResultMainState
+import com.khmer9.yuki.screen.main.ResultSubState
 import com.khmer9.yuki.screen.report.ReportViewState
 import com.khmer9.yuki.screen.result.ResultViewState
 import com.khmer9.yuki.util.PrefHelper
@@ -37,6 +38,10 @@ class ShareViewModel(
     private val mainModuleState = MutableLiveData(ResultMainState())
     val getMainModuleState: LiveData<ResultMainState> = mainModuleState
 
+    //Sub Module Data
+    private val subModuleState = MutableLiveData(ResultSubState())
+    val getSubModuleState: LiveData<ResultSubState> = subModuleState
+
     //Result Screen Live Data
     private val resultState = MutableLiveData<ResultViewState>(ResultViewState())
     val getResultState: LiveData<ResultViewState> = resultState
@@ -221,6 +226,37 @@ class ShareViewModel(
         )
     }
 
+    fun remoteSubModule(module_id: String) {
+        if (subModuleState.value!!.isProgress) return
+        subModuleState.value = prevSubModule().copy(isProgress = true)
+
+        disposables.add(
+            apiService.remoteSubModule(module_id)
+                .timeout(60, TimeUnit.SECONDS)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe({ response ->
+                    if (response.resultCode == "1") {
+                        response.data?.let {
+                            val sortedList = it.sortedWith(compareBy { it.order })
+                            subModuleState.value = prevSubModule().copy(
+                                isProgress = false,
+                                resultList = sortedList,
+                                error = null
+                            )
+                        }
+                    } else {
+                        subModuleState.value = prevSubModule().copy(isProgress = false, error = "[${response.message.description}]")
+                    }
+                }, {
+                    val message: String = "ប្រតិបត្តិការមិនជោគជ័យ\n" + it.getErrorCode()
+                    subModuleState.value = prevSubModule().copy(isProgress = false, error = message)
+                })
+        )
+    }
+
+    ////////////////////////////////////////////////////////
+
     fun remoteResult() {
         if (resultState.value!!.isProgress) return
         resultState.value = prevResult().copy(isProgress = true)
@@ -303,6 +339,8 @@ class ShareViewModel(
 
     private fun prevMainModule() = mainModuleState.value!!
 
+    private fun prevSubModule() = subModuleState.value!!
+
     private fun prevResult() = resultState.value!!
 
     private fun prevReport() = reportState.value!!

+ 65 - 0
app/src/main/java/com/khmer9/yuki/remote/SubModuleDataModel.kt

@@ -0,0 +1,65 @@
+package com.khmer9.yuki.remote
+
+import com.gdtlib.lib.adapter.BaseListItem
+import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
+
+@JsonClass(generateAdapter = true)
+data class SubModuleResponse(
+    @Json(name = "code")
+    val resultCode: String,
+
+    @Json(name = "message")
+    val message: SubModuleMessage,
+
+    @Json(name = "data")
+    val data: List<SubModuleData>?
+)
+
+@JsonClass(generateAdapter = true)
+data class SubModuleMessage(
+    @Json(name = "code")
+    val code: String,
+
+    @Json(name = "descriptions")
+    val description: String
+)
+
+@JsonClass(generateAdapter = true)
+data class SubModuleData(
+    @Json(name = "_id")
+    val id: String,
+
+    @Json(name = "order")
+    val order: Int,
+
+    @Json(name = "is_enable")
+    val isEnable: Boolean,
+
+    @Json(name = "is_reverse_result")
+    val isReverseResult: Boolean,
+
+    @Json(name = "name")
+    val name: String,
+
+    @Json(name = "desc")
+    val desc: String,
+
+    @Json(name = "front_player_link")
+    val frontPlayerLink: String,
+
+    @Json(name = "app_id")
+    val appId: String,
+
+    @Json(name = "large_icon")
+    val largeIcon: String,
+
+    @Json(name = "small_icon")
+    val smallIcon: String,
+
+    @Json(name = "background_icon")
+    val backgroundIcon: String,
+
+    ) : BaseListItem() {
+    override fun getUnique(): String = id
+}

+ 3 - 0
app/src/main/java/com/khmer9/yuki/remote/service/ApiService.kt

@@ -30,6 +30,9 @@ interface ApiService {
     @GET("/v1/api/module/main")
     fun remoteMainModule(): Single<MainModuleResponse>
 
+    @GET("/v1/api/module/sub")
+    fun remoteSubModule(@Query("module_id") module_id: String): Single<SubModuleResponse>
+
 
     //Home api
     //TODO: Change <LottoSetResponse> to <YukiSetResponse>

+ 24 - 2
app/src/main/java/com/khmer9/yuki/screen/main/MainFragment.kt

@@ -26,12 +26,12 @@ class MainFragment : BaseFragment(R.layout.layout_fragment_main_yuki) {
     private val shareViewModel = App.injectShareViewModel()
     private val sharePref = App.injectPrefHelper()
     private lateinit var user: User
-
     private lateinit var adapter: MainModuleAdapter
     private lateinit var recyclerView: RecyclerView
-
     private lateinit var betTouch: MediaPlayer
 
+    private val YUKI_APP_ID = "630478c22983a591133f0492"
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         (requireActivity() as ShareActivity).apply {
@@ -117,6 +117,28 @@ class MainFragment : BaseFragment(R.layout.layout_fragment_main_yuki) {
             adapter.detailButtonListener = { id, appId, sub ->
                 if (!id.isNullOrEmpty()) {
                     Log.d("MainModuleClick", id + "-" + appId + "-" + sub)
+                    if (sub > 1) {
+                        (requireActivity() as ShareActivity).apply {
+                            supportFragmentManager.beginTransaction()
+                                .setCustomAnimations(
+                                    R.anim.slide_in,
+                                    R.anim.slide_out,
+                                    R.anim.slide_in_exit,
+                                    R.anim.slide_out_exit
+                                )
+                                .add(R.id.container, SubModuleFragment().apply {
+                                    arguments = Bundle().apply {
+                                        putString("module_id", id)
+                                    }
+                                })
+                                .addToBackStack(null)
+                                .commit()
+                        }
+                    } else {
+                        if (appId == YUKI_APP_ID) {
+
+                        }
+                    }
                 }
             }
         }

+ 34 - 0
app/src/main/java/com/khmer9/yuki/screen/main/MainModuleViewHolder.kt

@@ -10,6 +10,7 @@ import com.khmer9.yuki.R
 import com.khmer9.yuki.extension.btnClick
 import com.khmer9.yuki.extension.setSafeOnClickListener
 import com.khmer9.yuki.remote.ModuleData
+import com.khmer9.yuki.remote.SubModuleData
 import com.squareup.picasso.Picasso
 
 class MainModuleViewHolder(itemView: View, private val detailButtonListener: ((String, String, Int) -> Unit)? = null) : BaseListViewHolder(itemView) {
@@ -53,6 +54,39 @@ class MainModuleViewHolder(itemView: View, private val detailButtonListener: ((S
                     detailButtonListener?.invoke(item.id, item.appId, item.numberSub)
                 }
             }
+        } else if (item is SubModuleData) {
+            tvName.text = item.name
+
+            try {
+                val displayMetrics = itemView.context.resources.displayMetrics
+                val pxWidth = displayMetrics.widthPixels
+                val pxHeight = displayMetrics.heightPixels
+                val dpWidth = pxWidth / displayMetrics.density
+                val dpHeight = pxHeight / displayMetrics.density
+
+                // high resolution pixel 14400
+                var height = dpHeight * 0.5804f
+
+                //low resolution
+                if (pxWidth < 1000) {
+                    height = dpHeight * 0.2804f
+                }
+
+                imgIcon.layoutParams.height = height.toInt()
+                imgIcon.layoutParams.width = height.toInt()
+
+                picasso
+                    .load(item.smallIcon)
+                    .placeholder(R.drawable.animal_seven)
+                    .into(imgIcon)
+            } catch (e: Exception) {
+            }
+
+            itemModule.setSafeOnClickListener {
+                it.btnClick().subscribe {
+                    detailButtonListener?.invoke(item.id, item.appId, 0)
+                }
+            }
         }
     }
 }

+ 10 - 0
app/src/main/java/com/khmer9/yuki/screen/main/ResultSubState.kt

@@ -0,0 +1,10 @@
+package com.khmer9.yuki.screen.main
+
+import com.khmer9.yuki.remote.SubModuleData
+
+data class ResultSubState(
+    val initial: Boolean = true,
+    val isProgress: Boolean = false,
+    val error: String? = null,
+    var resultList: List<SubModuleData>? = null,
+)

+ 64 - 0
app/src/main/java/com/khmer9/yuki/screen/main/SubModuleFragment.kt

@@ -0,0 +1,64 @@
+package com.khmer9.yuki.screen.main
+
+import android.media.MediaPlayer
+import android.os.Bundle
+import android.util.Log
+import android.view.View
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.khmer9.yuki.R
+import com.khmer9.yuki.adapter.MainModuleAdapter
+import com.khmer9.yuki.app.App
+import com.khmer9.yuki.app.ShareActivity
+import com.khmer9.yuki.base.BaseFragment
+import com.khmer9.yuki.remote.User
+
+class SubModuleFragment : BaseFragment(R.layout.layout_sub_module) {
+    private val shareViewModel = App.injectShareViewModel()
+    private lateinit var user: User
+    private lateinit var adapter: MainModuleAdapter
+    private lateinit var recyclerView: RecyclerView
+    private lateinit var betTouch: MediaPlayer
+    private val ARG_PARAM1 = "module_id"
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        (requireActivity() as ShareActivity).apply {
+            user = loginData.user!!
+            betTouch = MediaPlayer.create(this, R.raw.bettouch)
+        }
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        (requireActivity() as ShareActivity).apply {
+            recyclerView = view.findViewById(R.id.rv_main)
+
+            val moduleId = requireArguments().getString(ARG_PARAM1)
+            if (!moduleId.isNullOrEmpty()) {
+                shareViewModel.remoteSubModule(moduleId)
+                shareViewModel.getSubModuleState.observe(viewLifecycleOwner, Observer {
+                    setModuleSub(it)
+                })
+            }
+        }
+    }
+
+    private fun setModuleSub(state: ResultSubState) {
+        if (state.resultList != null) {
+            adapter = MainModuleAdapter()
+            adapter.submitList(state.resultList)
+            recyclerView.setHasFixedSize(true)
+            recyclerView.layoutManager = LinearLayoutManager(context)
+            recyclerView.adapter = adapter
+
+            adapter.detailButtonListener = { id, appId, sub ->
+                if (!id.isNullOrEmpty()) {
+                    Log.d("SubModuleClick", id + "-" + appId + "-" + sub)
+
+                }
+            }
+        }
+    }
+}

+ 16 - 0
app/src/main/res/layout/layout_sub_module.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_gravity="center_vertical"
+    android:background="@color/color_blue_800"
+    android:orientation="vertical"
+    tools:context=".screen.main.MainFragment">
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/rv_main"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+</androidx.appcompat.widget.LinearLayoutCompat>