From 12395e052681c5295168f552167ad5f54c611ec5 Mon Sep 17 00:00:00 2001
From: "Moch. Sofyan Firdaus" <13521083@std.stei.itb.ac.id>
Date: Wed, 3 Apr 2024 06:25:35 +0700
Subject: [PATCH] feat: logout

---
 .../com/onionsquad/bondoman/MainActivity.kt   |  5 +++--
 .../bondoman/ui/login/LoginActivity.kt        | 12 +++++++++--
 .../bondoman/ui/settings/SettingsFragment.kt  | 20 ++++++++++++++-----
 .../bondoman/ui/settings/SettingsViewModel.kt | 12 -----------
 .../res/drawable/ic_baseline_logout_24.xml    |  5 +++++
 app/src/main/res/layout/fragment_settings.xml | 10 ++++++++++
 .../main/res/navigation/mobile_navigation.xml | 12 +++++------
 app/src/main/res/values/strings.xml           |  1 +
 8 files changed, 50 insertions(+), 27 deletions(-)
 delete mode 100644 app/src/main/java/com/onionsquad/bondoman/ui/settings/SettingsViewModel.kt
 create mode 100644 app/src/main/res/drawable/ic_baseline_logout_24.xml

diff --git a/app/src/main/java/com/onionsquad/bondoman/MainActivity.kt b/app/src/main/java/com/onionsquad/bondoman/MainActivity.kt
index f60afdf..a6ad2b9 100644
--- a/app/src/main/java/com/onionsquad/bondoman/MainActivity.kt
+++ b/app/src/main/java/com/onionsquad/bondoman/MainActivity.kt
@@ -2,13 +2,12 @@ package com.onionsquad.bondoman
 
 import android.content.Intent
 import android.os.Bundle
-import android.util.Log
-import com.google.android.material.bottomnavigation.BottomNavigationView
 import androidx.appcompat.app.AppCompatActivity
 import androidx.navigation.findNavController
 import androidx.navigation.ui.AppBarConfiguration
 import androidx.navigation.ui.setupActionBarWithNavController
 import androidx.navigation.ui.setupWithNavController
+import com.google.android.material.bottomnavigation.BottomNavigationView
 import com.onionsquad.bondoman.auth.SessionManager
 import com.onionsquad.bondoman.databinding.ActivityMainBinding
 import com.onionsquad.bondoman.ui.login.LoginActivity
@@ -41,6 +40,8 @@ class MainActivity : AppCompatActivity() {
 
     private fun sendToLoginActivity() {
         val intent = Intent(this@MainActivity, LoginActivity::class.java)
+        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_CLEAR_TASK)
         startActivity(intent)
+        finish()
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/onionsquad/bondoman/ui/login/LoginActivity.kt b/app/src/main/java/com/onionsquad/bondoman/ui/login/LoginActivity.kt
index ca62505..3eace85 100644
--- a/app/src/main/java/com/onionsquad/bondoman/ui/login/LoginActivity.kt
+++ b/app/src/main/java/com/onionsquad/bondoman/ui/login/LoginActivity.kt
@@ -1,6 +1,7 @@
 package com.onionsquad.bondoman.ui.login
 
 import android.app.Activity
+import android.content.Intent
 import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProvider
 import android.os.Bundle
@@ -11,6 +12,7 @@ import android.view.View
 import android.view.inputmethod.EditorInfo
 import android.widget.EditText
 import android.widget.Toast
+import com.onionsquad.bondoman.MainActivity
 import com.onionsquad.bondoman.databinding.ActivityLoginBinding
 
 import com.onionsquad.bondoman.R
@@ -55,8 +57,7 @@ class LoginActivity : AppCompatActivity() {
                     if (loginResult.success != null) {
                         sessionManager.saveAuthToken(loginResult.success)
                         showLoginSuccess()
-                        setResult(Activity.RESULT_OK)
-                        finish()
+                        sendToMainActivity()
                     }
                 })
             }
@@ -94,6 +95,13 @@ class LoginActivity : AppCompatActivity() {
         }
     }
 
+    private fun sendToMainActivity() {
+        val intent = Intent(this@LoginActivity, MainActivity::class.java)
+        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_CLEAR_TASK)
+        startActivity(intent)
+        finish()
+    }
+
     private fun showLoginSuccess() {
         Toast.makeText(applicationContext, R.string.login_success, Toast.LENGTH_LONG).show()
     }
diff --git a/app/src/main/java/com/onionsquad/bondoman/ui/settings/SettingsFragment.kt b/app/src/main/java/com/onionsquad/bondoman/ui/settings/SettingsFragment.kt
index dc153a2..ca0aa81 100644
--- a/app/src/main/java/com/onionsquad/bondoman/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/com/onionsquad/bondoman/ui/settings/SettingsFragment.kt
@@ -4,15 +4,17 @@ import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.widget.Toast
 import androidx.fragment.app.Fragment
 import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
+import com.onionsquad.bondoman.R
+import com.onionsquad.bondoman.auth.SessionManager
 import com.onionsquad.bondoman.databinding.FragmentSettingsBinding
 
 class SettingsFragment : Fragment() {
     private var _binding: FragmentSettingsBinding? = null
 
-    // This property is only valid between onCreateView and
-    // onDestroyView.
     private val binding get() = _binding!!
 
     override fun onCreateView(
@@ -20,11 +22,19 @@ class SettingsFragment : Fragment() {
         container: ViewGroup?,
         savedInstanceState: Bundle?
     ): View {
-        val transactionViewModel =
-            ViewModelProvider(this).get(SettingsViewModel::class.java)
-
         _binding = FragmentSettingsBinding.inflate(inflater, container, false)
 
+        val sessionManager = SessionManager(requireContext())
+
+        binding.apply {
+            logoutButton.setOnClickListener {
+                sessionManager.deleteAuthToken()
+                Toast.makeText(requireContext(), "Log out success", Toast.LENGTH_SHORT).show()
+                findNavController().popBackStack(R.id.navigation_transaction, true)
+                requireActivity().recreate()
+            }
+        }
+
         return binding.root
     }
 
diff --git a/app/src/main/java/com/onionsquad/bondoman/ui/settings/SettingsViewModel.kt b/app/src/main/java/com/onionsquad/bondoman/ui/settings/SettingsViewModel.kt
deleted file mode 100644
index a877767..0000000
--- a/app/src/main/java/com/onionsquad/bondoman/ui/settings/SettingsViewModel.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.onionsquad.bondoman.ui.settings
-
-import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.ViewModel
-
-class SettingsViewModel : ViewModel() {
-    private val _text = MutableLiveData<String>().apply {
-        value = "This is notifications Fragment"
-    }
-    val text: LiveData<String> = _text
-}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_baseline_logout_24.xml b/app/src/main/res/drawable/ic_baseline_logout_24.xml
new file mode 100644
index 0000000..c22a96f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_logout_24.xml
@@ -0,0 +1,5 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="true" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
+      
+    <path android:fillColor="@android:color/white" android:pathData="M17,7l-1.41,1.41L18.17,11H8v2h10.17l-2.58,2.58L17,17l5,-5zM4,5h8V3H4c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h8v-2H4V5z"/>
+    
+</vector>
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
index 441476f..570a31e 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -5,4 +5,14 @@
     android:layout_height="match_parent"
     tools:context=".ui.settings.SettingsFragment">
 
+    <Button
+        android:id="@+id/logout_button"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:textAlignment="textStart"
+        android:textColor="@color/design_default_color_error"
+        android:backgroundTint="@color/white"
+        android:drawableLeft="@drawable/ic_baseline_logout_24"
+        android:drawableTint="@color/design_default_color_error"
+        android:text="@string/action_sign_out" />
 </FrameLayout>
\ No newline at end of file
diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml
index fc575e8..f7d84c6 100644
--- a/app/src/main/res/navigation/mobile_navigation.xml
+++ b/app/src/main/res/navigation/mobile_navigation.xml
@@ -7,21 +7,21 @@
 
     <fragment
         android:id="@+id/navigation_transaction"
-        android:name="com.onionsquad.bondoman.ui.graph.GraphFragment"
+        android:name="com.onionsquad.bondoman.ui.transaction.TransactionFragment"
         android:label="@string/title_transaction"
-        tools:layout="@layout/fragment_graph" />
+        tools:layout="@layout/fragment_transaction" />
 
     <fragment
         android:id="@+id/navigation_scan"
-        android:name="com.onionsquad.bondoman.ui.transaction.TransactionFragment"
+        android:name="com.onionsquad.bondoman.ui.scan.ScanFragment"
         android:label="@string/title_scan"
-        tools:layout="@layout/fragment_transaction" />
+        tools:layout="@layout/fragment_scan" />
 
     <fragment
         android:id="@+id/navigation_graph"
-        android:name="com.onionsquad.bondoman.ui.scan.ScanFragment"
+        android:name="com.onionsquad.bondoman.ui.graph.GraphFragment"
         android:label="@string/title_graph"
-        tools:layout="@layout/fragment_scan" />
+        tools:layout="@layout/fragment_graph" />
     <fragment
         android:id="@+id/navigation_settings"
         android:name="com.onionsquad.bondoman.ui.settings.SettingsFragment"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5205032..dfc80c0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -12,4 +12,5 @@
     <string name="invalid_email">Not a valid email</string>
     <string name="login_failed">"Login failed"</string>
     <string name="preference_file_key">BondomanSharedPrefs</string>
+    <string name="action_sign_out">Sign out</string>
 </resources>
\ No newline at end of file
-- 
GitLab