From dac3a61a2ea4e6c266c9bb3c2b5438f8fb38bbaa Mon Sep 17 00:00:00 2001 From: Altair1618 <farhannabilsuryono3@gmail.com> Date: Wed, 3 Apr 2024 06:59:40 +0700 Subject: [PATCH] feat: update logout timer mechanism --- .../services/services/ExpiryService.kt | 14 +++++++---- .../views/activities/LoginActivity.kt | 10 ++++++++ .../bondoman/views/activities/MainActivity.kt | 23 +++++++++++++------ 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/example/bondoman/services/services/ExpiryService.kt b/app/src/main/java/com/example/bondoman/services/services/ExpiryService.kt index 1e31805..c74202f 100644 --- a/app/src/main/java/com/example/bondoman/services/services/ExpiryService.kt +++ b/app/src/main/java/com/example/bondoman/services/services/ExpiryService.kt @@ -55,7 +55,7 @@ class ExpiryService : Service() { val token: String? = PreferencesManager.getString(this, "token", true) if (token.isNullOrEmpty()) { - sendBroadcast() + logout() stopSelf() } else { checkTokenJob(token) @@ -76,7 +76,7 @@ class ExpiryService : Service() { // If not success then sendBroadcast if (!tokenResponse.isSuccessful || tokenResponse.body() == null) { - sendBroadcast() + logout() stopSelf() return@launch } @@ -84,7 +84,7 @@ class ExpiryService : Service() { // If expired then sendBroadcast val currentTime = System.currentTimeMillis() / 1000 if (tokenResponse.body()?.exp != null && tokenResponse.body()?.exp!! < currentTime) { - sendBroadcast() + logout() stopSelf() return@launch } @@ -94,13 +94,17 @@ class ExpiryService : Service() { startTimer(timeout) } catch (e: Exception) { Log.e("ExpiryService", "Error checking token", e) - sendBroadcast() + logout() stopSelf() } } } - private fun sendBroadcast() { + private fun logout() { + PreferencesManager.remove(this, "token", true) + PreferencesManager.remove(this, "nim", true) + PreferencesManager.remove(this, "email", true) + Log.i("ExpiryService", "Sending broadcast") val intent = Intent(Constants.LOGOUT_TIMEOUT_INTENT) LocalBroadcastManager.getInstance(this).sendBroadcast(intent) diff --git a/app/src/main/java/com/example/bondoman/views/activities/LoginActivity.kt b/app/src/main/java/com/example/bondoman/views/activities/LoginActivity.kt index c23a016..109f1de 100644 --- a/app/src/main/java/com/example/bondoman/views/activities/LoginActivity.kt +++ b/app/src/main/java/com/example/bondoman/views/activities/LoginActivity.kt @@ -13,11 +13,13 @@ import com.example.bondoman.data.utils.PreferencesManager import com.example.bondoman.data.viewmodels.login.LoginViewModel import com.example.bondoman.networks.responses.LoginResponse import com.example.bondoman.networks.responses.TokenResponse +import com.example.bondoman.services.services.ExpiryService import com.google.android.material.button.MaterialButton import com.google.android.material.textfield.TextInputEditText class LoginActivity : AppCompatActivity() { private val viewModel: LoginViewModel by viewModels() + private val expiryDuration: Long = 300000L // 5 minutes // private val expiryDuration: Long = 10000L // 10 seconds for testing private lateinit var loginLayout: ConstraintLayout @@ -87,6 +89,14 @@ class LoginActivity : AppCompatActivity() { PreferencesManager.putString(this, "token", response.token ?: "", true) PreferencesManager.putString(this, "nim", nim, true) PreferencesManager.putString(this, "email", email, true) + + // Start ExpiryService + val serviceIntent = Intent(this, ExpiryService::class.java).apply { + putExtra("timeout", expiryDuration) + } + stopService(serviceIntent) + startService(serviceIntent) + val intent = Intent(this, MainActivity::class.java) startActivity(intent) finish() diff --git a/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt b/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt index 2390d1e..5a79c81 100644 --- a/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt +++ b/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt @@ -432,13 +432,22 @@ class MainActivity : AppCompatActivity(), ParentActivityService { override fun onResume() { super.onResume() - val serviceIntent = - Intent(this, ExpiryService::class.java).apply { - putExtra("timeout", 0) - } - - stopService(serviceIntent) - startService(serviceIntent) + // If the token is missing, logout + if (PreferencesManager.getString(this, "token", true) == null) { + // Stop Service + val serviceIntent = Intent(this, ExpiryService::class.java) + stopService(serviceIntent) + + // Remove Shared Preferences + PreferencesManager.remove(this, "token", true) + PreferencesManager.remove(this, "nim", true) + PreferencesManager.remove(this, "email", true) + + // Move to LoginActivity + val intent = Intent(this, LoginActivity::class.java) + startActivity(intent) + finish() + } } override fun onSaveInstanceState(outState: Bundle) { -- GitLab