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