Browse Source

+ add logout function

Dola TENG 2 years ago
parent
commit
472e45a919

+ 1 - 0
.idea/misc.xml

@@ -9,6 +9,7 @@
         <entry key="..\:/3-Work/Android/SBC_Main_Android/app/src/main/res/layout/activity_splash.xml" value="0.3523550724637681" />
         <entry key="..\:/3-Work/Android/SBC_Main_Android/app/src/main/res/layout/app_bar.xml" value="0.36666666666666664" />
         <entry key="..\:/3-Work/Android/SBC_Main_Android/app/src/main/res/layout/fragment_report.xml" value="0.18802083333333333" />
+        <entry key="..\:/3-Work/Android/SBC_Main_Android/app/src/main/res/layout/fragment_setting.xml" value="0.36666666666666664" />
         <entry key="..\:/3-Work/Android/SBC_Main_Android/app/src/main/res/layout/layout_fragment_main_yuki.xml" value="0.36666666666666664" />
         <entry key="..\:/3-Work/Android/SBC_Main_Android/app/src/main/res/layout/layout_main_module.xml" value="0.36666666666666664" />
         <entry key="..\:/3-Work/Android/SBC_Main_Android/app/src/main/res/layout/layout_sub_module.xml" value="0.18802083333333333" />

+ 10 - 1
app/src/main/java/com/khmer9/sbcmain/remote/LoginDataModel.kt

@@ -27,13 +27,22 @@ data class LoginResponse(
     val data: LoginData?
 )
 
+@JsonClass(generateAdapter = true)
+data class LogoutResponse(
+    @Json(name = "code")
+    val resultCode: String,
+
+    @Json(name = "message")
+    val message: LoginMessage,
+)
+
 @JsonClass(generateAdapter = true)
 data class LoginMessage(
     @Json(name = "code")
     val code: String,
 
     @Json(name = "descriptions")
-    val description: String,
+    val description: String
 )
 
 @JsonClass(generateAdapter = true)

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

@@ -13,6 +13,9 @@ interface ApiService {
     @Headers("No-Authentication: true")
     fun login(@Body loginRequest: LoginRequest): Single<LoginResponse>
 
+    @GET("/v1/api/user/logout")
+    fun logout(): Single<LogoutResponse>
+
     @GET("/v1/api/user")
     fun remoteUser(): Single<UserResponse>
 

+ 13 - 22
app/src/main/java/com/khmer9/sbcmain/screen/setting/SettingFragment.kt

@@ -4,6 +4,7 @@ import android.app.Activity
 import android.content.Intent
 import android.media.MediaPlayer
 import android.os.Bundle
+import android.os.Handler
 import android.view.View
 import android.widget.ImageView
 import androidx.core.view.isVisible
@@ -19,10 +20,9 @@ import com.khmer9.sbcmain.screen.login.LoginActivity
 import com.mazenrashed.printooth.Printooth
 import com.mazenrashed.printooth.ui.ScanningActivity
 import kotlinx.android.synthetic.main.fragment_setting.*
+import java.util.*
+import kotlin.concurrent.timerTask
 
-/**
- * A simple [Fragment] subclass as the second destination in the navigation.
- */
 class SettingFragment : BaseFragment(R.layout.fragment_setting) {
     private lateinit var btnClose: ImageView
     private lateinit var user: User
@@ -111,10 +111,12 @@ class SettingFragment : BaseFragment(R.layout.fragment_setting) {
             if (!sharePref.getIsMute()) betTouch.start()
             sharePref.setIsAutoPrint(isChecked)
         }
+
         sw_bluetooth.setOnCheckedChangeListener { _, _ ->
             if (!sharePref.getIsMute()) betTouch.start()
 
         }
+
         v_print.setOnClickListener {
             if (!sharePref.getIsMute()) betTouch.start()
             it.btnClick().subscribe {
@@ -127,14 +129,18 @@ class SettingFragment : BaseFragment(R.layout.fragment_setting) {
 
             }
         }
+
         v_logout.setOnClickListener {
             if (!sharePref.getIsMute()) betTouch.start()
             it.btnClick().subscribe {
-                sharePref.logout()
+                settingViewModel.logout()
 
-                val intent = Intent(requireContext(), LoginActivity::class.java)
-                startActivity(intent)
-                requireActivity().finishAffinity()
+                Timer().schedule(timerTask {
+                    sharePref.logout()
+                    val intent = Intent(requireContext(), LoginActivity::class.java)
+                    startActivity(intent)
+                    requireActivity().finishAffinity()
+                }, 2000)
 
             }
         }
@@ -142,11 +148,6 @@ class SettingFragment : BaseFragment(R.layout.fragment_setting) {
     }
 
     private fun getResult(state: UpdatePwdViewState) {
-
-        // if (state.isProgress){
-        // Toast.makeText(requireContext(), "Loading", Toast.LENGTH_LONG).show()
-
-        //}
         if (state.isUpdateSuccess) {
             //Toast.makeText(requireContext(), "Update Sucess", Toast.LENGTH_LONG).show()
             val intent = Intent(requireContext(), LoginActivity::class.java)
@@ -157,25 +158,15 @@ class SettingFragment : BaseFragment(R.layout.fragment_setting) {
         if (state.error != null) {
             //Toast.makeText(requireContext(), "Error", Toast.LENGTH_LONG).show()
             tv_error.text = state.error
-
-
         }
-
     }
 
     override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
         super.onActivityResult(requestCode, resultCode, data)
         if (requestCode == ScanningActivity.SCANNING_FOR_PRINTER && resultCode == Activity.RESULT_OK) {
-
             val pair = Printooth.getPairedPrinter()
             v_print.setImageViewIcon(R.drawable.blue_text_dc)
             text_connect.text = pair?.name
-
-
-            //Printooth.removeCurrentPrinter()
-//https://github.com/mazenrashed/Printooth
-
         }
-        //Printer is ready now
     }
 }

+ 25 - 1
app/src/main/java/com/khmer9/sbcmain/screen/setting/SettingViewModel.kt

@@ -13,6 +13,7 @@ import java.util.concurrent.TimeUnit
 class SettingViewModel(val apiService: ApiService, val prefHelper: PrefHelper) : BaseViewModel() {
     private val _state = MutableLiveData<UpdatePwdViewState>(UpdatePwdViewState())
     val state: LiveData<UpdatePwdViewState> = _state
+    private fun prev() = _state.value!!
 
     fun updatePassword(oldPassword: String, newPassword: String) {
         if (_state.value!!.isProgress) return
@@ -41,7 +42,30 @@ class SettingViewModel(val apiService: ApiService, val prefHelper: PrefHelper) :
         )
     }
 
-    private fun prev() = _state.value!!
+    private val _stateLogout = MutableLiveData<LogoutViewState>(LogoutViewState())
+    val stateLogout: LiveData<LogoutViewState> = _stateLogout
+    private fun prevLogout() = _stateLogout.value!!
 
+    fun logout() {
+        if (_stateLogout.value!!.isProgress) return
+        _stateLogout.value = prevLogout().copy(isProgress = true)
 
+        disposables.add(
+            apiService.logout()
+                .timeout(60, TimeUnit.SECONDS)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe({
+                    if (it.resultCode == "1") {
+                        _stateLogout.value = prevLogout().copy(isProgress = false, isSuccess = true)
+                        prefHelper.logout()
+                    } else {
+                        _stateLogout.value = prevLogout().copy(isProgress = false, error = "[${it.message.description}]")
+                    }
+                }, {
+                    val message: String = "ប្រតិបត្តិការមិនជោគជ័យ\n" + it.getErrorCode()
+                    _stateLogout.value = prevLogout().copy(isProgress = false, error = message)
+                })
+        )
+    }
 }

+ 7 - 2
app/src/main/java/com/khmer9/sbcmain/screen/setting/UpdatePwdViewState.kt

@@ -1,10 +1,15 @@
 package com.khmer9.sbcmain.screen.setting
 
-
-
 data class UpdatePwdViewState(
     val initial: Boolean = false,
     val isProgress: Boolean = false,
     val isUpdateSuccess: Boolean = false,
     val error: String? = null
+)
+
+data class LogoutViewState(
+    val initial: Boolean = false,
+    val isProgress: Boolean = false,
+    val isSuccess: Boolean = false,
+    val error: String? = null
 )