diff --git a/app/src/main/java/com/example/abe/ui/login/LoginActivity.kt b/app/src/main/java/com/example/abe/ui/login/LoginActivity.kt
index 00288046b2652ea831f3dcde8df2d10009cb22d4..373eaf3bee5911e33734b6e28da99ba93664ca07 100644
--- a/app/src/main/java/com/example/abe/ui/login/LoginActivity.kt
+++ b/app/src/main/java/com/example/abe/ui/login/LoginActivity.kt
@@ -3,13 +3,22 @@ package com.example.abe.ui.login
 import android.content.Context
 import android.content.Intent
 import android.os.Bundle
+import android.util.Log
+import android.view.View
+import androidx.appcompat.app.AlertDialog
 import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.asLiveData
+import androidx.lifecycle.lifecycleScope
 import com.example.abe.MainActivity
 import com.example.abe.R
+import com.example.abe.connection.ConnectivityObserver
+import com.example.abe.connection.NetworkConnectivityObserver
 import com.example.abe.data.network.LoginResultCallback
 import com.example.abe.data.network.Retrofit
 import com.example.abe.databinding.ActivityLoginBinding
-import com.example.abe.data.network.LoginResponse
+import com.example.abe.utils.isConnected
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
 
 class LoginActivity : AppCompatActivity(), LoginResultCallback {
 
@@ -22,11 +31,14 @@ class LoginActivity : AppCompatActivity(), LoginResultCallback {
         retrofit.login(email, password, this)
     }
 
+    private lateinit var connectivityObserver: ConnectivityObserver
+
     override fun onSuccess(loginResponse: com.example.abe.data.network.LoginResponse) {
         // Handle successful login
         println("Login successful: $loginResponse")
 
-        val sharedPref = getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE)
+        val sharedPref =
+            getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE)
         with(sharedPref.edit()) {
             putString("login_token", loginResponse.token)
             putString("user", email)
@@ -52,11 +64,39 @@ class LoginActivity : AppCompatActivity(), LoginResultCallback {
         val view = binding.root
         setContentView(view)
 
+        connectivityObserver = NetworkConnectivityObserver(applicationContext)
+        connectivityObserver.observe().onEach {
+            Log.v("abecekut", "Status is $it")
+            if (it == ConnectivityObserver.NetworkState.UNAVAILABLE || it == ConnectivityObserver.NetworkState.LOST) {
+                runOnUiThread {
+                    val builder: AlertDialog.Builder = AlertDialog.Builder(this@LoginActivity)
+                    builder
+                        .setMessage("We are having trouble connecting you to the internet")
+                        .setTitle("No Connection")
+                        .setPositiveButton("OK") { _, _ -> }
+
+                    val dialog: AlertDialog = builder.create()
+                    dialog.show()
+                }
+            }
+        }.launchIn(lifecycleScope)
+
         binding.btnSignIn.setOnClickListener {
             email = binding.emailInput.text.toString()
             val password: String = binding.passwordInput.text.toString()
+            val networkState = connectivityObserver.observe().asLiveData().value
+
+            if (!isConnected(networkState)) {
+                binding.loginLayout.visibility = View.GONE
+                binding.noNetworkLayout.visibility = View.VISIBLE
+            } else {
+                attemptLogin(email, password)
+            }
+        }
 
-            attemptLogin(email, password)
+        binding.btnTryAgain.setOnClickListener {
+            binding.noNetworkLayout.visibility = View.GONE
+            binding.loginLayout.visibility = View.VISIBLE
         }
     }
 }
diff --git a/app/src/main/java/com/example/abe/utils/Utils.kt b/app/src/main/java/com/example/abe/utils/Utils.kt
new file mode 100644
index 0000000000000000000000000000000000000000..d68b03eaef07b4a4338b6459ba5c344cfe3adaaa
--- /dev/null
+++ b/app/src/main/java/com/example/abe/utils/Utils.kt
@@ -0,0 +1,7 @@
+package com.example.abe.utils
+
+import com.example.abe.connection.ConnectivityObserver
+
+fun isConnected(networkState: ConnectivityObserver.NetworkState?): Boolean {
+    return (networkState != null && (networkState == ConnectivityObserver.NetworkState.AVAILABLE || networkState == ConnectivityObserver.NetworkState.LOSING))
+}
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index ac3598da695e7e684b840dfb9651f3ea3e78925e..48f3fa71a778687cb4c4e7d311426835aceebaa6 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -7,87 +7,143 @@
     android:backgroundTint="#9759C4"
     tools:context=".ui.login.LoginActivity">
 
-    <EditText
-        android:id="@+id/emailInput"
-        android:layout_width="300dp"
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/loginLayout"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginBottom="16dp"
-        android:ems="10"
-        android:hint="Email"
-        android:inputType="textEmailAddress"
-        android:outlineAmbientShadowColor="#000000"
-        android:outlineProvider="background"
         android:visibility="visible"
-        app:layout_constraintBottom_toTopOf="@+id/passwordInput"
+        app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintHorizontal_bias="0.5"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/appName"
-        app:layout_constraintVertical_bias="0.5"
-        app:layout_constraintVertical_chainStyle="packed"
-        tools:visibility="visible" />
+        app:layout_constraintTop_toTopOf="parent">
 
-    <EditText
-        android:id="@+id/passwordInput"
-        android:layout_width="300dp"
-        android:layout_height="wrap_content"
-        android:ems="10"
-        android:hint="Password"
-        android:inputType="textPassword"
-        app:layout_constraintBottom_toTopOf="@+id/btnSignIn"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintHorizontal_bias="0.5"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/emailInput"
-        app:layout_constraintVertical_bias="0.5" />
+        <EditText
+            android:id="@+id/emailInput"
+            android:layout_width="300dp"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="16dp"
+            android:ems="10"
+            android:hint="Email"
+            android:inputType="textEmailAddress"
+            android:outlineAmbientShadowColor="#000000"
+            android:outlineProvider="background"
+            app:layout_constraintBottom_toTopOf="@+id/passwordInput"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_bias="0.5"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/appName"
+            app:layout_constraintVertical_bias="0.5"
+            app:layout_constraintVertical_chainStyle="packed" />
 
-    <Button
-        android:id="@+id/btnSignIn"
-        android:layout_width="300dp"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="36dp"
-        android:background="#9759C4"
-        android:clickable="true"
-        android:text="Sign in"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintHorizontal_bias="0.5"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/passwordInput"
-        app:layout_constraintVertical_bias="0.5" />
 
-    <TextView
-        android:id="@+id/welcomeText"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginBottom="8dp"
-        android:fontFamily="@font/roboto_medium"
-        android:text="Welcome back to"
-        android:textColor="#000000"
-        android:textSize="20sp"
-        app:layout_constraintBottom_toTopOf="@+id/appName"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintHorizontal_bias="0.5"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintVertical_bias="0.5"
-        app:layout_constraintVertical_chainStyle="packed" />
+        <EditText
+            android:id="@+id/passwordInput"
+            android:layout_width="300dp"
+            android:layout_height="wrap_content"
+            android:ems="10"
+            android:hint="Password"
+            android:inputType="textPassword"
+            app:layout_constraintBottom_toTopOf="@+id/btnSignIn"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_bias="0.5"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/emailInput"
+            app:layout_constraintVertical_bias="0.5" />
+
+        <Button
+            android:id="@+id/btnSignIn"
+            android:layout_width="300dp"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="36dp"
+            android:background="#9759C4"
+            android:clickable="true"
+            android:text="Sign in"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_bias="0.5"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/passwordInput"
+            app:layout_constraintVertical_bias="0.5" />
+
+        <TextView
+            android:id="@+id/welcomeText"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="8dp"
+            android:fontFamily="@font/roboto_medium"
+            android:text="Welcome back to"
+            android:textColor="#000000"
+            android:textSize="20sp"
+            app:layout_constraintBottom_toTopOf="@+id/appName"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_bias="0.5"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintVertical_bias="0.5"
+            app:layout_constraintVertical_chainStyle="packed" />
 
-    <TextView
-        android:id="@+id/appName"
+        <TextView
+            android:id="@+id/appName"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="8dp"
+            android:layout_marginBottom="64dp"
+            android:fontFamily="@font/carter_one"
+            android:text="Bondoman"
+            android:textColor="#9759C4"
+            android:textSize="24sp"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toTopOf="@+id/emailInput"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_bias="0.5"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/welcomeText"
+            app:layout_constraintVertical_bias="0.5" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/noNetworkLayout"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginTop="8dp"
-        android:layout_marginBottom="64dp"
-        android:fontFamily="@font/carter_one"
-        android:text="Bondoman"
-        android:textColor="#9759C4"
-        android:textSize="24sp"
-        android:textStyle="bold"
-        app:layout_constraintBottom_toTopOf="@+id/emailInput"
+        android:visibility="gone"
+        app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintHorizontal_bias="0.5"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/welcomeText"
-        app:layout_constraintVertical_bias="0.5" />
+        app:layout_constraintTop_toTopOf="parent">
+
+        <ImageView
+            android:id="@+id/ivTrxIcon"
+            android:layout_width="400dp"
+            android:layout_height="350dp"
+            android:src="@mipmap/no_network_foreground"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/textView2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="20dp"
+            android:text="@string/failed_connect_msg"
+            android:textAlignment="center"
+            android:textSize="16sp"
+            android:textStyle="bold"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/ivTrxIcon" />
+
+        <Button
+            android:id="@+id/btnTryAgain"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/try_again"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/textView2" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/no_network_foreground.webp b/app/src/main/res/mipmap-hdpi/no_network_foreground.webp
new file mode 100644
index 0000000000000000000000000000000000000000..146477e4daed7e4d42df864763d93dea4a21e1bf
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/no_network_foreground.webp differ
diff --git a/app/src/main/res/mipmap-mdpi/no_network_foreground.webp b/app/src/main/res/mipmap-mdpi/no_network_foreground.webp
new file mode 100644
index 0000000000000000000000000000000000000000..50b1eadd920f2070aa96dbb6878c12178537b6b8
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/no_network_foreground.webp differ
diff --git a/app/src/main/res/mipmap-xhdpi/no_network_foreground.webp b/app/src/main/res/mipmap-xhdpi/no_network_foreground.webp
new file mode 100644
index 0000000000000000000000000000000000000000..d88f22adbe89b8b19c3f54d6deacc1b835930aac
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/no_network_foreground.webp differ
diff --git a/app/src/main/res/mipmap-xxhdpi/no_network_foreground.webp b/app/src/main/res/mipmap-xxhdpi/no_network_foreground.webp
new file mode 100644
index 0000000000000000000000000000000000000000..4859633958ea9fd9290ae494744a54b4b1e7409c
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/no_network_foreground.webp differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/no_network_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/no_network_foreground.webp
new file mode 100644
index 0000000000000000000000000000000000000000..e6c5741b8e84a8463cf99b886c0f57d2e097660b
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/no_network_foreground.webp differ
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 27b03fd014a2bff83443fc7c5d0439313bba6423..cb0e255805159c00e1f22d060c974c2ef308f783 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -9,6 +9,8 @@
     <string name="save">Save</string>
     <string name="delete">Delete</string>
     <string name="preference_file_key">com.example.ABE.PREFERENCE_FILE_KEY</string>
+    <string name="failed_connect_msg">Failed to connect to the server. Please check your internet connection.</string>
+    <string name="try_again">Try Again</string>
 
     <string-array name="Categories">
         <item>Income</item>