From 55808c68ffe78881b0e29c2fea3c0fcd23202328 Mon Sep 17 00:00:00 2001
From: arieljovananda88 <jovanandaa@gmail.com>
Date: Wed, 3 Apr 2024 23:16:56 +0700
Subject: [PATCH] feat: toast for disconnected network when logging in

---
 .../bondoman/ui/login/LoginFragment.kt        | 57 ++++++++++++-------
 1 file changed, 37 insertions(+), 20 deletions(-)

diff --git a/app/src/main/java/com/example/bondoman/ui/login/LoginFragment.kt b/app/src/main/java/com/example/bondoman/ui/login/LoginFragment.kt
index 3ab6d8b..994ad27 100644
--- a/app/src/main/java/com/example/bondoman/ui/login/LoginFragment.kt
+++ b/app/src/main/java/com/example/bondoman/ui/login/LoginFragment.kt
@@ -17,6 +17,9 @@ import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.withContext
 import retrofit2.HttpException
 import android.content.Context
+import android.net.ConnectivityManager
+import android.net.NetworkCapabilities
+import android.widget.Toast
 
 
 // TODO: Rename parameter arguments, choose names that match
@@ -68,33 +71,47 @@ class LoginFragment : Fragment() {
         val loginRequest = LoginRequest(email, password)
 
         val service = RetrofitClient.createRetrofitService(requireContext())
-
-        CoroutineScope(Dispatchers.IO).launch {
-            val response = service.login(loginRequest)
-            withContext(Dispatchers.Main) {
-                try {
-                    if (response.isSuccessful) {
-                        val token = response.body()?.token
-                        if(!token.isNullOrEmpty()){
-                            val sharedPreferences = requireActivity().getSharedPreferences("BondoMan", Context.MODE_PRIVATE)
-                            val editor = sharedPreferences.edit()
-                            editor.putString("token", token)
-                            editor.apply()
-                            startActivity(Intent(activity, MainActivity::class.java))
-                            activity?.finish()
+        if (!isNetworkConnected(requireContext())){
+            Toast.makeText(requireContext(), "Network is Disconnected Unable To Login", Toast.LENGTH_LONG).show()
+        }
+        else {
+            CoroutineScope(Dispatchers.IO).launch {
+                val response = service.login(loginRequest)
+                withContext(Dispatchers.Main) {
+                    try {
+                        if (response.isSuccessful) {
+                            val token = response.body()?.token
+                            if (!token.isNullOrEmpty()) {
+                                val sharedPreferences = requireActivity().getSharedPreferences(
+                                    "BondoMan",
+                                    Context.MODE_PRIVATE
+                                )
+                                val editor = sharedPreferences.edit()
+                                editor.putString("token", token)
+                                editor.apply()
+                                startActivity(Intent(activity, MainActivity::class.java))
+                                activity?.finish()
+                            }
+                        } else {
+                            println("Error: ${response.code()}")
                         }
-                    } else {
-                        println("Error: ${response.code()}")
+                    } catch (e: HttpException) {
+                        println("Exception ${e.message}")
+                    } catch (e: Throwable) {
+                        println(e)
                     }
-                } catch (e: HttpException) {
-                    println("Exception ${e.message}")
-                } catch (e: Throwable) {
-                    println(e)
                 }
             }
         }
     }
 
+    private fun isNetworkConnected(context: Context): Boolean {
+        val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+        val network = connectivityManager.activeNetwork ?: return false
+        val networkCapabilities = connectivityManager.getNetworkCapabilities(network) ?: return false
+        return networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+    }
+
     companion object {
         /**
          * Use this factory method to create a new instance of
-- 
GitLab