diff --git a/app/src/main/java/com/example/bondoman/LogoutListener.kt b/app/src/main/java/com/example/bondoman/LogoutListener.kt
new file mode 100644
index 0000000000000000000000000000000000000000..879ff6149ce67e1be76130ddce3f25f200e0ec65
--- /dev/null
+++ b/app/src/main/java/com/example/bondoman/LogoutListener.kt
@@ -0,0 +1,5 @@
+package com.example.bondoman
+
+interface LogoutListener {
+    fun handleLogout()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/MainActivity.kt b/app/src/main/java/com/example/bondoman/MainActivity.kt
index c07d3a05d5744c2ca3bc6feafd8a4027e267f7d8..757ba1af2877d4bf4cd11839b4f09fa98ce722cc 100644
--- a/app/src/main/java/com/example/bondoman/MainActivity.kt
+++ b/app/src/main/java/com/example/bondoman/MainActivity.kt
@@ -23,7 +23,7 @@ import kotlinx.coroutines.GlobalScope
 import kotlinx.coroutines.launch
 import java.util.concurrent.TimeUnit
 
-class MainActivity : AppCompatActivity() {
+class MainActivity : AppCompatActivity(), LogoutListener {
 
     lateinit var bottomNav: BottomNavigationView
     private lateinit var navHostFragment: NavHostFragment
@@ -67,11 +67,11 @@ class MainActivity : AppCompatActivity() {
                             true
                         }
                         R.id.graph -> {
-                            loadFragment(SettingFragment())
+                            loadFragment(SettingFragment(),)
                             true
                         }
                         R.id.settings -> {
-                            loadFragment(SettingFragment())
+                            loadFragment(SettingFragment(),this@MainActivity)
                             true
                         }
 
@@ -84,10 +84,14 @@ class MainActivity : AppCompatActivity() {
         }
     }
 
-    private fun loadFragment(fragment: Fragment) {
+    private fun loadFragment(fragment: Fragment, logoutListener: LogoutListener? = null) {
         val transaction = supportFragmentManager.beginTransaction()
         transaction.replace(R.id.frame_layout, fragment)
         transaction.commit()
+
+        if (fragment is SettingFragment) {
+            fragment.setLogoutListener(logoutListener)
+        }
     }
 
     private suspend fun isLoggedIn(): Boolean {
@@ -146,7 +150,7 @@ class MainActivity : AppCompatActivity() {
         finish()
     }
 
-    private fun handleLogout() {
+    override fun handleLogout() {
         val sharedPreferences = getSharedPreferences("app_prefs", Context.MODE_PRIVATE)
         sharedPreferences.edit().remove("token").apply()
         navigateToLogin()
diff --git a/app/src/main/java/com/example/bondoman/SettingFragment.kt b/app/src/main/java/com/example/bondoman/SettingFragment.kt
index 1566ed3778dc62649b10c8a79b0d43540293dd91..dc01d19814f1fe7bbbc678b57b1eef85a69f2c58 100644
--- a/app/src/main/java/com/example/bondoman/SettingFragment.kt
+++ b/app/src/main/java/com/example/bondoman/SettingFragment.kt
@@ -3,14 +3,13 @@ package com.example.bondoman
 import android.content.Intent
 import android.os.Bundle
 import android.os.Environment
-import android.os.Message
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
-import android.widget.EditText
-import android.widget.Toast
 import android.widget.Button
+import android.widget.EditText
 import android.widget.RadioButton
+import android.widget.Toast
 import androidx.appcompat.app.AlertDialog
 import androidx.core.content.FileProvider
 import androidx.fragment.app.Fragment
@@ -22,7 +21,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook
 import java.io.File
 import java.io.FileOutputStream
 import java.text.SimpleDateFormat
-import java.util.*
+import java.util.Locale
 
 class SettingFragment : Fragment() {
 
@@ -30,6 +29,7 @@ class SettingFragment : Fragment() {
     private var selectedFormat: String = "XLSX"
     private val emailAddress = "husniazaya78@gmail.com"
     private val subject = "Daftar Transaksi Bondoman"
+    private var logoutListener: LogoutListener? = null
 
     companion object {
         private const val REQUEST_CODE_WRITE_EXTERNAL_STORAGE = 101
@@ -52,6 +52,10 @@ class SettingFragment : Fragment() {
             saveTransactionsToSpreadsheet(subject, selectedFormat, 2)
         }
 
+        view.findViewById<Button>(R.id.logout)?.setOnClickListener {
+            logoutListener?.handleLogout()
+        }
+
         return view
     }
 
@@ -202,4 +206,8 @@ class SettingFragment : Fragment() {
 
         return emailMessage
     }
+
+    fun setLogoutListener(logoutListener: LogoutListener?) {
+        this.logoutListener = logoutListener
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/res/drawable/login_icon.xml b/app/src/main/res/drawable/login_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..61c0b74db403a09c881393727c77b8ca5e5635d6
--- /dev/null
+++ b/app/src/main/res/drawable/login_icon.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="30dp"
+    android:height="31dp"
+    android:viewportWidth="30"
+    android:viewportHeight="31">
+  <path
+      android:pathData="M15,26.75V24.25H23.75V6.75H15V4.25H23.75C24.438,4.25 25.026,4.495 25.516,4.985C26.006,5.475 26.251,6.063 26.25,6.75V24.25C26.25,24.938 26.005,25.526 25.516,26.016C25.027,26.506 24.438,26.751 23.75,26.75H15ZM12.5,21.75L10.781,19.938L13.969,16.75H3.75V14.25H13.969L10.781,11.063L12.5,9.25L18.75,15.5L12.5,21.75Z"
+      android:fillColor="#4f4f4f"/>
+</vector>
diff --git a/app/src/main/res/drawable/logout_icon.xml b/app/src/main/res/drawable/logout_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cff018bc79faa9de9609b23c28cfa7a2bc80cf66
--- /dev/null
+++ b/app/src/main/res/drawable/logout_icon.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="25dp"
+    android:height="24dp"
+    android:viewportWidth="25"
+    android:viewportHeight="24">
+  <path
+      android:pathData="M3.75,21C3.2,21 2.729,20.804 2.338,20.413C1.947,20.022 1.751,19.551 1.75,19V5C1.75,4.45 1.946,3.979 2.338,3.588C2.73,3.197 3.201,3.001 3.75,3H10.75V5H3.75V19H10.75V21H3.75ZM14.75,17L13.375,15.55L15.925,13H7.75V11H15.925L13.375,8.45L14.75,7L19.75,12L14.75,17Z"
+      android:fillColor="#000000"/>
+</vector>
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index 1a7735ce7bcfec0ed18d69cf43bcc6ed57cd7b54..c0e58302abd3b95d4349527ee732ca83f42b9a27 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -53,6 +53,8 @@
         android:layout_gravity="start"
         android:layout_marginTop="16dp"
         android:layout_marginBottom="64dp"
+        android:drawableStart="@drawable/login_icon"
+        android:drawablePadding="10dp"
         android:text="@string/action_sign_in"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
diff --git a/app/src/main/res/layout/fragment_setting.xml b/app/src/main/res/layout/fragment_setting.xml
index b658a37b830fd50930b42468b36ba9137c6ce9dd..ec96ce24947b1c795eaf382295c32ddb93d9434e 100644
--- a/app/src/main/res/layout/fragment_setting.xml
+++ b/app/src/main/res/layout/fragment_setting.xml
@@ -43,4 +43,15 @@
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/download_button" />
 
+    <Button
+        android:id="@+id/logout"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:drawableStart="@drawable/logout_icon"
+        android:text="logout"
+        android:layout_marginTop="20dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/email_button"/>
+
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file