diff --git a/app/src/main/java/itb/bos/bondoman/LogoutActivity.kt b/app/src/main/java/itb/bos/bondoman/LogoutActivity.kt
index 208ef3189f1daba9ef483ba8a32b1507221f94e7..84da8015655c6db482fe876b43f4010b354ae935 100644
--- a/app/src/main/java/itb/bos/bondoman/LogoutActivity.kt
+++ b/app/src/main/java/itb/bos/bondoman/LogoutActivity.kt
@@ -6,6 +6,7 @@ import android.widget.Button
 import androidx.appcompat.app.AppCompatActivity
 import androidx.lifecycle.ViewModelProvider
 import itb.bos.bondoman.helper.EmailHelper.Companion.sendTransactionsByEmail
+import itb.bos.bondoman.retrofit.data.Transaction
 import itb.bos.bondoman.viewModel.AuthViewModel
 
 class LogoutActivity : AppCompatActivity() {
@@ -26,7 +27,12 @@ class LogoutActivity : AppCompatActivity() {
 
         val sendEmailButton = findViewById<Button>(R.id.send_email_btn)
         sendEmailButton.setOnClickListener {
-            sendTransactionsByEmail()
+            val transactionList = listOf(
+                Transaction("1", "Item 1", 10.0, "2024-03-14", "Pemasukan", "Location 1"),
+                Transaction("2", "Item 2", 20.0, "2024-03-15", "Pengeluaran", "Location 2"),
+                Transaction("3", "Item 3", 30.0, "2024-03-16", "Pemasukan", "Location 3")
+            )
+            sendTransactionsByEmail(this, transactionList, "xlsx")
         }
     }
 }
diff --git a/app/src/main/java/itb/bos/bondoman/MainActivity.kt b/app/src/main/java/itb/bos/bondoman/MainActivity.kt
index 9c5114910a20008041ba81c0c614c2fd92dbe6ba..5391cc4be84a8ee91a16dec87e6de758072e636a 100644
--- a/app/src/main/java/itb/bos/bondoman/MainActivity.kt
+++ b/app/src/main/java/itb/bos/bondoman/MainActivity.kt
@@ -1,5 +1,6 @@
 package itb.bos.bondoman
 
+import android.content.IntentFilter
 import android.os.Bundle
 import androidx.appcompat.app.AppCompatActivity
 import androidx.navigation.ui.AppBarConfiguration
@@ -11,6 +12,7 @@ import androidx.navigation.findNavController
 import androidx.navigation.ui.setupWithNavController
 import com.google.android.material.bottomnavigation.BottomNavigationView
 import itb.bos.bondoman.databinding.ActivityMainBinding
+import itb.bos.bondoman.receivers.TokenExpiryBroadcastReceiver
 import itb.bos.bondoman.ui.settings.SettingsFragment
 import itb.bos.bondoman.ui.statistic.StatisticFragment
 import itb.bos.bondoman.ui.qr.QrFragment
@@ -19,13 +21,15 @@ import itb.bos.bondoman.ui.transaction.TransactionFragment
 class MainActivity : AppCompatActivity() {
 
     private lateinit var binding: ActivityMainBinding
+    private val tokenExpiryReceiver = TokenExpiryBroadcastReceiver()
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         binding = ActivityMainBinding.inflate(layoutInflater)
         setContentView(binding.root)
 
-
+        // Register the broadcast receiver
+        registerReceiver(tokenExpiryReceiver, IntentFilter("itb.bos.bondoman.ACTION_TOKEN_EXPIRED"))
 
         openFragment(TransactionFragment())
 
@@ -38,6 +42,37 @@ class MainActivity : AppCompatActivity() {
             true
         }
     }
+
+    override fun onResume() {
+        super.onResume()
+        // Register the broadcast receiver
+        registerReceiver(tokenExpiryReceiver, IntentFilter("itb.bos.bondoman.ACTION_TOKEN_EXPIRED"))
+    }
+
+    override fun onPause() {
+        super.onPause()
+        // Unregister the broadcast receiver
+        unregisterReceiver(tokenExpiryReceiver)
+    }
+
+    override fun onStop() {
+        super.onStop()
+        unregisterReceiver(tokenExpiryReceiver)
+    }
+
+
+    override fun onRestart() {
+        super.onRestart()
+        registerReceiver(tokenExpiryReceiver, IntentFilter("itb.bos.bondoman.ACTION_TOKEN_EXPIRED"))
+
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        // Unregister the broadcast receiver
+        unregisterReceiver(tokenExpiryReceiver)
+    }
+
     private fun openFragment(fragment: Fragment){
         val fragmentManager = supportFragmentManager
         val fragmentTransaction = fragmentManager.beginTransaction()
diff --git a/app/src/main/java/itb/bos/bondoman/receivers/TokenExpiryBroadcastReceiver.kt b/app/src/main/java/itb/bos/bondoman/receivers/TokenExpiryBroadcastReceiver.kt
index 2e0f6c5c80fb7438d2221eeac313ab0611b7894a..ba4f3c2fcba4ce2a01cc8140f40a33dd0dbdb429 100644
--- a/app/src/main/java/itb/bos/bondoman/receivers/TokenExpiryBroadcastReceiver.kt
+++ b/app/src/main/java/itb/bos/bondoman/receivers/TokenExpiryBroadcastReceiver.kt
@@ -1,5 +1,6 @@
 package itb.bos.bondoman.receivers
 
+import android.app.AlertDialog
 import android.content.BroadcastReceiver
 import android.content.Context
 import android.content.Intent
@@ -15,9 +16,23 @@ class TokenExpiryBroadcastReceiver : BroadcastReceiver() {
             Log.d("TokenExpiredBroadcast", "Received token expired broadcast. Logging out...")
             // You can implement logout logic here, for example:
             tokenHelper.removeToken()
-            it.startActivity(Intent(it, LoginActivity::class.java).apply {
-                addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
-            })
+
+            // Build an AlertDialog to show a popup
+            val alertDialogBuilder = AlertDialog.Builder(it)
+            alertDialogBuilder.apply {
+                setTitle("Session Expired")
+                setMessage("Your session has expired. Please login again.")
+                setPositiveButton("OK") { _, _ ->
+                    // Start LoginActivity
+                    val loginIntent = Intent(it, LoginActivity::class.java).apply {
+                        addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
+                    }
+                    it.startActivity(loginIntent)
+                }
+                setCancelable(false)
+                create().show()
+            }
         }
     }
 }
+
diff --git a/app/src/main/java/itb/bos/bondoman/retrofit/data/TransactionData.kt b/app/src/main/java/itb/bos/bondoman/retrofit/data/TransactionData.kt
index ac40e0b720b0c425621b18721f887f131acb4902..dc7de3aeb1fa5c306bea457ef61b82c6635a5c50 100644
--- a/app/src/main/java/itb/bos/bondoman/retrofit/data/TransactionData.kt
+++ b/app/src/main/java/itb/bos/bondoman/retrofit/data/TransactionData.kt
@@ -1,13 +1,11 @@
 package itb.bos.bondoman.retrofit.data
 
-import java.util.Date
-
 // Dummy Transaction
 data class Transaction(
     val id: String,
     val name: String,
     val amount: Double,
-    val date: Date,
+    val date: String,
     val category: String,
     val location: String
 )
\ No newline at end of file
diff --git a/app/src/main/java/itb/bos/bondoman/services/JWTService.kt b/app/src/main/java/itb/bos/bondoman/services/JWTService.kt
index d70fb75923e95bd8944fadda9d32e7934a462528..38f4411e2f357c7f44046095d42e2b04eae618df 100644
--- a/app/src/main/java/itb/bos/bondoman/services/JWTService.kt
+++ b/app/src/main/java/itb/bos/bondoman/services/JWTService.kt
@@ -11,6 +11,7 @@ import itb.bos.bondoman.helper.TokenHelper
 import itb.bos.bondoman.helper.checkExpireToken
 import itb.bos.bondoman.receivers.TokenExpiryBroadcastReceiver
 import kotlinx.coroutines.*
+import retrofit2.HttpException
 import java.util.concurrent.TimeUnit
 
 class JWTService : Service() {
@@ -54,15 +55,15 @@ class JWTService : Service() {
 
             val token = tokenHelper.getToken()
             if (token != null) {
-                // Call the checkExpireToken function with the token
+
+                // Check current and expire time
                 val expireTime = checkExpireToken(token)
+                val currentTime = System.currentTimeMillis() / 1000 // Convert to seconds
 
                 // If the token is retrieved successfully, log the expiry time
-                Log.d("TokenExpirationCheck", "Expiry time is: $expireTime")
+                Log.d("TokenExpirationCheck", "Expiry time is: $expireTime while current time is: $currentTime")
 
-                // Check if the current time has passed the expiry time
-                val currentTime = System.currentTimeMillis() / 1000 // Convert to seconds
-                if (currentTime > expireTime) {
+                if (expireTime <= currentTime) {
                     // Token has expired, send broadcast to notify the application to logout
                     Log.d("TokenExpirationCheck", "Token has expired, sending broadcast...")
                     val intent = Intent(ACTION_TOKEN_EXPIRED)
@@ -75,11 +76,18 @@ class JWTService : Service() {
             }
         } catch (e: Exception) {
             // Handle any exceptions
-            Log.e("TokenExpirationCheck", "Error checking token expiry: ${e.message}")
+            if (e is HttpException && e.code() == 401) {
+                Log.d("TokenExpirationCheck", "HTTP 401 Error: Token has expired, sending broadcast...")
+                val intent = Intent(ACTION_TOKEN_EXPIRED)
+                sendBroadcast(intent)
+            } else {
+                Log.e("TokenExpirationCheck", "Error checking token expiry: ${e.message}")
+            }
         }
     }
 
 
+
     companion object {
         const val ACTION_TOKEN_EXPIRED = "itb.bos.bondoman.ACTION_TOKEN_EXPIRED"
     }