Sfoglia il codice sorgente

+ WA888 change UI Main in progress

Dola TENG 2 anni fa
parent
commit
ed2754bce9

BIN
app/src/main/assets/Khmer9_Yuki_prodRelease_1.0.1.apk


+ 1 - 1
app/src/main/java/com/khmer9/sbcmain/app/App.kt

@@ -4,12 +4,12 @@ import android.app.Application
 import android.content.Context
 import com.itkacher.okhttpprofiler.OkHttpProfilerInterceptor
 import com.khmer9.sbcmain.BuildConfig
+import com.khmer9.sbcmain.config.Config
 import com.khmer9.sbcmain.remote.service.ApiService
 import com.khmer9.sbcmain.util.ModelPreferencesManager
 import com.khmer9.sbcmain.util.PrefHelper
 import com.khmer9.sbcmain.util.UnsafeOkHttpClient
 import com.khmer9.sbcmain.util.screenRectPx
-import com.khmer9.yuki.config.Config
 import com.mazenrashed.printooth.Printooth
 import com.squareup.moshi.Moshi
 import com.squareup.picasso.Picasso

+ 35 - 0
app/src/main/java/com/khmer9/sbcmain/app/ShareViewModel.kt

@@ -1,5 +1,6 @@
 package com.khmer9.sbcmain.app
 
+import android.content.Intent
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
 import com.khmer9.sbcmain.base.BaseViewModel
@@ -12,6 +13,7 @@ import com.khmer9.sbcmain.remote.service.ConnectivityStates
 import com.khmer9.sbcmain.remote.service.EventListener
 import com.khmer9.sbcmain.screen.main.ResultMainState
 import com.khmer9.sbcmain.screen.main.ResultSubState
+import com.khmer9.sbcmain.screen.main.TokenViewState
 import com.khmer9.sbcmain.screen.report.ReportViewState
 import com.khmer9.sbcmain.screen.result.ResultViewState
 import com.khmer9.sbcmain.util.PrefHelper
@@ -50,6 +52,12 @@ class ShareViewModel(
     private val reportState = MutableLiveData<ReportViewState>(ReportViewState())
     val getReportState: LiveData<ReportViewState> = reportState
 
+    //token live data
+    private val _stateToken = MutableLiveData(TokenViewState())
+    val getMoudleTokenState: LiveData<TokenViewState> = _stateToken
+
+    private fun prev() = _stateToken.value!!
+
     //-----------------------------------------------------Report statement----------------------------------------------------------
     fun remoteReportBettingStatement(reportBettingRequest: ReportBettingRequest? = null) {
         if (reportState.value!!.isProgress) return
@@ -255,6 +263,33 @@ class ShareViewModel(
         )
     }
 
+    fun getModuleToken(invoiceNum: String, moduleIntent: Intent? = null) {
+        if (_stateToken.value!!.isProgress) return
+        _stateToken.value = prev().copy(isProgress = true)
+        disposables.add(
+            apiService.getToken(invoiceNum)
+                .timeout(60, TimeUnit.SECONDS)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe({
+                    if (it.resultCode == "1") {
+                        _stateToken.value = prev().copy(
+                            isProgress = false,
+                            error = null,
+                            tokenData = it.data,
+                            intent = moduleIntent
+                        )
+                    } else {
+                        _stateToken.value =
+                            prev().copy(isProgress = false, error = "[${it.message.description}]")
+                    }
+                }, {
+                    val message: String = "ប្រតិបត្តិការមិនជោគជ័យ\n" + it.getErrorCode()
+                    _stateToken.value = prev().copy(isProgress = false, error = message)
+                })
+        )
+    }
+
     ////////////////////////////////////////////////////////
 
     fun remoteResult() {

+ 4 - 0
app/src/main/java/com/khmer9/sbcmain/remote/service/ApiService.kt

@@ -4,6 +4,7 @@ import com.khmer9.sbcmain.remote.*
 import com.khmer9.sbcmain.screen.detail.BettingDetailLottoPlusResponse
 import com.khmer9.sbcmain.screen.detail.BettingDetailResponse
 import com.khmer9.sbcmain.screen.detail.BettingDetailYukiResponse
+import com.khmer9.sbcmain.screen.main.TokenResponse
 import io.reactivex.Single
 import retrofit2.http.*
 
@@ -75,4 +76,7 @@ interface ApiService {
 
     @GET("/v1/api/report/cock/invoice")
     fun getCockInvoiceDetail(@Query("module_bet_id") invoiceNum: String): Single<BettingDetailResponse>
+
+    @GET("/v1/api/module/token")
+    fun getToken(@Query("app_id") tokenId: String): Single<TokenResponse>
 }

+ 1 - 1
app/src/main/java/com/khmer9/sbcmain/remote/service/SocketService.java

@@ -6,7 +6,7 @@ import static java.util.Collections.singletonMap;
 import android.util.Log;
 
 import com.khmer9.sbcmain.util.BaseObservable;
-import com.khmer9.yuki.config.Config;
+import com.khmer9.sbcmain.config.Config;
 
 import org.json.JSONObject;
 

+ 96 - 54
app/src/main/java/com/khmer9/sbcmain/screen/main/MainFragment.kt

@@ -1,12 +1,8 @@
 package com.khmer9.sbcmain.screen.main
 
-import android.Manifest
 import android.annotation.SuppressLint
 import android.content.Intent
-import android.content.pm.PackageManager
-import android.content.res.AssetManager
 import android.media.MediaPlayer
-import android.net.Uri
 import android.os.Bundle
 import android.util.Log
 import android.view.View
@@ -14,7 +10,6 @@ import android.widget.Toast
 import androidx.lifecycle.Observer
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
-import com.google.android.material.snackbar.Snackbar
 import com.khmer9.sbcmain.R
 import com.khmer9.sbcmain.adapter.MainModuleAdapter
 import com.khmer9.sbcmain.app.App
@@ -27,21 +22,34 @@ import com.khmer9.sbcmain.remote.service.ConnectivityStates
 import com.khmer9.sbcmain.screen.report.StatementFragment
 import com.khmer9.sbcmain.screen.setting.SettingFragment
 import com.khmer9.sbcmain.screen.splash.SplashScreenActivity
-import kotlinx.android.synthetic.main.layout_fragment_main_yuki.*
-import java.io.File
-import java.io.FileOutputStream
-import java.io.InputStream
-import java.io.OutputStream
 
 
 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"
+    private val YUKI_DOWNLOAD = "https://www.dropbox.com/s/uzvfo7jahmcl8pe/Khmer9_Yuki_devDebug_1.0.1-dev.apk?dl=1"
+    private val YUKI_PACKAGE = "com.khmer9.yuki"
+
+    private val LOTTO_APP_ID = ""
+    private val LOTTO_DOWNLOAD = ""
+    private val LOTTO_PACKAGE = ""
+
+    private val LOTTO_PLUS_APP_ID = ""
+    private val LOTTO_PLUS_DOWNLOAD = ""
+    private val LOTTO_PLUS_PACKAGE = ""
+
+    private val COCK_FIGHT_APP_ID = ""
+    private val COCK_FIGHT_DOWNLOAD = ""
+    private val COCK_FIGHT_PACKAGE = ""
+
+    private val APONG_APP_ID = ""
+    private val APONG_DOWNLOAD = ""
+    private val APONG_PACKAGE = ""
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -115,6 +123,21 @@ class MainFragment : BaseFragment(R.layout.layout_fragment_main_yuki) {
         shareViewModel.getMainModuleState.observe(viewLifecycleOwner, Observer {
             setModuleMain(it)
         })
+
+        shareViewModel.getMoudleTokenState.observe(viewLifecycleOwner, Observer {
+            (requireActivity() as ShareActivity).apply {
+                if (it != null) {
+                    if (it.intent != null && it.tokenData != null) {
+                        val launchIntent = it.intent
+                        launchIntent?.putExtra("token", it.tokenData?.token)
+                        startActivity(launchIntent)
+
+                        it.intent = null
+                        it.tokenData = null
+                    }
+                }
+            }
+        })
     }
 
     private fun setModuleMain(state: ResultMainState) {
@@ -146,49 +169,56 @@ class MainFragment : BaseFragment(R.layout.layout_fragment_main_yuki) {
                                 .commit()
                         }
                     } else {
-                        if (appId == YUKI_APP_ID) {
-                            (requireActivity() as ShareActivity).apply {
-                                val launchIntent = packageManager.getLaunchIntentForPackage("com.khmer9.yuki")
-                                if (launchIntent != null) {
-                                    startActivity(launchIntent)
-                                } else {
-                                    //installed
-                                    val assetManager: AssetManager = assets
-                                    var inputStream: InputStream? = null
-                                    var outPutStream: OutputStream? = null
-
-                                    try {
-                                        /*inputStream = assetManager.open("Khmer9_Yuki_prodRelease_1.0.1.apk")
-                                        outPutStream = FileOutputStream(filesDir.path + "/" + "Khmer9_Yuki_prodRelease_1.0.1.apk")
-                                        val buffer = ByteArray(1024)
-
-                                        var read: Int
-
-                                        while (inputStream.read(buffer).also { read = it } !== -1) {
-                                            outPutStream?.write(buffer, 0, read)
-                                        }
-
-
-                                        inputStream.close()
-                                        inputStream = null
-
-                                        outPutStream?.flush()
-                                        outPutStream?.close()
-                                        outPutStream = null
-
-                                        val intent: Intent = Intent(Intent.ACTION_VIEW)
-                                        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
-                                        intent.setDataAndType(Uri.fromFile(File(filesDir.path + "/" + "Khmer9_Yuki_prodRelease_1.0.1.apk")), "application/vnd.android.package-archive")
-                                        startActivity(intent)*/
-
-                                        (requireActivity() as ShareActivity).apply {
-                                            downloadController = DownloadController(this, "https://www.dropbox.com/s/779i8wxxwg0zwdd/Khmer9_Yuki_prodRelease_1.0.1.apk?dl=1")
-
-                                            checkStoragePermission()
-                                        }
-
-                                    } catch (e: Exception) {
-                                        e.printStackTrace()
+                        when (appId) {
+                            YUKI_APP_ID -> {
+                                (requireActivity() as ShareActivity).apply {
+                                    val launchIntent = packageManager.getLaunchIntentForPackage(YUKI_PACKAGE)
+                                    if (launchIntent != null) {
+                                        //launch
+                                        shareViewModel.getModuleToken(appId, launchIntent)
+                                    } else {
+                                        //installed
+                                        doDownload(YUKI_DOWNLOAD)
+                                    }
+                                }
+                            }
+                            LOTTO_APP_ID -> {
+                                (requireActivity() as ShareActivity).apply {
+                                    val launchIntent = packageManager.getLaunchIntentForPackage(LOTTO_PACKAGE)
+                                    if (launchIntent != null) {
+                                        shareViewModel.getModuleToken(appId, launchIntent)
+                                    } else {
+                                        doDownload(LOTTO_DOWNLOAD)
+                                    }
+                                }
+                            }
+                            LOTTO_PLUS_APP_ID -> {
+                                (requireActivity() as ShareActivity).apply {
+                                    val launchIntent = packageManager.getLaunchIntentForPackage(LOTTO_PLUS_PACKAGE)
+                                    if (launchIntent != null) {
+                                        shareViewModel.getModuleToken(appId, launchIntent)
+                                    } else {
+                                        doDownload(LOTTO_PLUS_DOWNLOAD)
+                                    }
+                                }
+                            }
+                            COCK_FIGHT_APP_ID -> {
+                                (requireActivity() as ShareActivity).apply {
+                                    val launchIntent = packageManager.getLaunchIntentForPackage(COCK_FIGHT_PACKAGE)
+                                    if (launchIntent != null) {
+                                        shareViewModel.getModuleToken(appId, launchIntent)
+                                    } else {
+                                        doDownload(COCK_FIGHT_DOWNLOAD)
+                                    }
+                                }
+                            }
+                            APONG_APP_ID -> {
+                                (requireActivity() as ShareActivity).apply {
+                                    val launchIntent = packageManager.getLaunchIntentForPackage(APONG_PACKAGE)
+                                    if (launchIntent != null) {
+                                        shareViewModel.getModuleToken(appId, launchIntent)
+                                    } else {
+                                        doDownload(APONG_DOWNLOAD)
                                     }
                                 }
                             }
@@ -199,6 +229,18 @@ class MainFragment : BaseFragment(R.layout.layout_fragment_main_yuki) {
         }
     }
 
+    private fun doDownload(url: String) {
+        try {
+            (requireActivity() as ShareActivity).apply {
+                downloadController = DownloadController(this, url)
+                checkStoragePermission()
+            }
+
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+    }
+
     @SuppressLint("CheckResult")
     override fun onActivityCreated(savedInstanceState: Bundle?) {
         super.onActivityCreated(savedInstanceState)

+ 43 - 1
app/src/main/java/com/khmer9/sbcmain/screen/main/SubModuleFragment.kt

@@ -10,6 +10,7 @@ import androidx.recyclerview.widget.RecyclerView
 import com.khmer9.sbcmain.R
 import com.khmer9.sbcmain.adapter.MainModuleAdapter
 import com.khmer9.sbcmain.app.App
+import com.khmer9.sbcmain.app.DownloadController
 import com.khmer9.sbcmain.app.ShareActivity
 import com.khmer9.sbcmain.base.BaseFragment
 import com.khmer9.sbcmain.remote.User
@@ -22,6 +23,14 @@ class SubModuleFragment : BaseFragment(R.layout.layout_sub_module) {
     private lateinit var betTouch: MediaPlayer
     private val ARG_PARAM1 = "module_id"
 
+    private val LOTTO_APP_ID = "630780f0f635dd035329f5b7"
+    private val LOTTO_DOWNLOAD = ""
+    private val LOTTO_PACKAGE = "com.khmer9.lotto"
+
+    private val LOTTO_PLUS_APP_ID = "62e397edae71cfa8782aa3a0"
+    private val LOTTO_PLUS_DOWNLOAD = ""
+    private val LOTTO_PLUS_PACKAGE = "com.sambath.sbc"
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         (requireActivity() as ShareActivity).apply {
@@ -56,9 +65,42 @@ class SubModuleFragment : BaseFragment(R.layout.layout_sub_module) {
             adapter.detailButtonListener = { id, appId, sub ->
                 if (!id.isNullOrEmpty()) {
                     Log.d("SubModuleClick", id + "-" + appId + "-" + sub)
-
+                    when (appId) {
+                        LOTTO_APP_ID -> {
+                            (requireActivity() as ShareActivity).apply {
+                                val launchIntent = packageManager.getLaunchIntentForPackage(LOTTO_PACKAGE)
+                                if (launchIntent != null) {
+                                    shareViewModel.getModuleToken(appId, launchIntent)
+                                } else {
+                                    doDownload(LOTTO_DOWNLOAD)
+                                }
+                            }
+                        }
+                        LOTTO_PLUS_APP_ID -> {
+                            (requireActivity() as ShareActivity).apply {
+                                val launchIntent = packageManager.getLaunchIntentForPackage(LOTTO_PLUS_PACKAGE)
+                                if (launchIntent != null) {
+                                    shareViewModel.getModuleToken(appId, launchIntent)
+                                } else {
+                                    doDownload(LOTTO_PLUS_DOWNLOAD)
+                                }
+                            }
+                        }
+                    }
                 }
             }
         }
     }
+
+    private fun doDownload(url: String) {
+        try {
+            (requireActivity() as ShareActivity).apply {
+                downloadController = DownloadController(this, url)
+                checkStoragePermission()
+            }
+
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+    }
 }

+ 31 - 0
app/src/main/java/com/khmer9/sbcmain/screen/main/TokenDataModel.kt

@@ -0,0 +1,31 @@
+package com.khmer9.sbcmain.screen.main
+
+import com.gdtlib.lib.adapter.BaseListItem
+import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
+
+@JsonClass(generateAdapter = true)
+data class TokenResponse(
+    @Json(name = "code")
+    val resultCode: String,
+
+    @Json(name = "message")
+    val message: TokenMessage,
+
+    @Json(name = "data")
+    val data: TokenData
+)
+
+@JsonClass(generateAdapter = true)
+data class TokenMessage(
+    @Json(name = "code")
+    val code: String,
+    @Json(name = "descriptions")
+    val description: String,
+)
+
+@JsonClass(generateAdapter = true)
+data class TokenData(
+    @Json(name = "access_token")
+    val token: String,
+)

+ 44 - 0
app/src/main/java/com/khmer9/sbcmain/screen/main/TokenViewModel.kt

@@ -0,0 +1,44 @@
+package com.khmer9.sbcmain.screen.main
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import com.khmer9.sbcmain.app.getErrorCode
+import com.khmer9.sbcmain.base.BaseViewModel
+import com.khmer9.sbcmain.remote.service.ApiService
+import com.khmer9.sbcmain.util.PrefHelper
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.schedulers.Schedulers
+import java.util.concurrent.TimeUnit
+
+class TokenViewModel(val apiService: ApiService, val prefHelper: PrefHelper) : BaseViewModel() {
+    private val _state = MutableLiveData(TokenViewState())
+    val state: LiveData<TokenViewState> = _state
+
+    private fun prev() = _state.value!!
+
+    fun getModuleToken(invoiceNum: String) {
+        if (_state.value!!.isProgress) return
+        _state.value = prev().copy(isProgress = true)
+        disposables.add(
+            apiService.getToken(invoiceNum)
+                .timeout(60, TimeUnit.SECONDS)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe({
+                    if (it.resultCode == "1") {
+                        _state.value = prev().copy(
+                            isProgress = false,
+                            error = null,
+                            tokenData = it.data
+                        )
+                    } else {
+                        _state.value =
+                            prev().copy(isProgress = false, error = "[${it.message.description}]")
+                    }
+                }, {
+                    val message: String = "ប្រតិបត្តិការមិនជោគជ័យ\n" + it.getErrorCode()
+                    _state.value = prev().copy(isProgress = false, error = message)
+                })
+        )
+    }
+}

+ 11 - 0
app/src/main/java/com/khmer9/sbcmain/screen/main/TokenViewState.kt

@@ -0,0 +1,11 @@
+package com.khmer9.sbcmain.screen.main
+
+import android.content.Intent
+
+data class TokenViewState(
+    val initial: Boolean = false,
+    val isProgress: Boolean = false,
+    val error: String? = null,
+    var tokenData: TokenData? = null,
+    var intent: Intent? = null
+)