diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a2ce3da4174de80c0101b9ae48be40897b3bc5ec..2eaceb217f42cac04434af2142acecb0a216ed35 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -30,6 +30,7 @@
         <activity
             android:name=".MainActivity"
             android:exported="false"/>
+        <service android:name=".services.BackgroundService"/>
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/pbd/psi/LoginActivity.kt b/app/src/main/java/com/pbd/psi/LoginActivity.kt
index 9f764f094c78850de0d5de0a4003e729ded950ef..8a7ec1064702320f1b1fdd80ecf59ef77e4c2808 100644
--- a/app/src/main/java/com/pbd/psi/LoginActivity.kt
+++ b/app/src/main/java/com/pbd/psi/LoginActivity.kt
@@ -1,8 +1,11 @@
 package com.pbd.psi
 
+import android.annotation.SuppressLint
 import android.content.Context
 import android.content.Intent
 import android.content.SharedPreferences
+import android.net.ConnectivityManager
+import android.net.NetworkCapabilities
 import androidx.appcompat.app.AppCompatActivity
 import android.os.Bundle
 import android.util.Log
@@ -32,12 +35,40 @@ class LoginActivity : AppCompatActivity() {
         setContentView(binding.root)
 
         sharedpreferences = getSharedPreferences(SHARED_PREFS, Context.MODE_PRIVATE)
+
+        if(!isOnline(this)){
+            Toast.makeText(this, "No internet connection", Toast.LENGTH_SHORT).show()
+            return
+        }
+
         isLogin()
 
         binding.btnLogin.setOnClickListener {
             login()
         }
     }
+
+    private fun isOnline(context: Context): Boolean {
+        val connectivityManager =
+            context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+        if (connectivityManager != null) {
+            val capabilities =
+                connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
+            if (capabilities != null) {
+                if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
+                    Log.i("Internet", "NetworkCapabilities.TRANSPORT_CELLULAR")
+                    return true
+                } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
+                    Log.i("Internet", "NetworkCapabilities.TRANSPORT_WIFI")
+                    return true
+                } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {
+                    Log.i("Internet", "NetworkCapabilities.TRANSPORT_ETHERNET")
+                    return true
+                }
+            }
+        }
+        return false
+    }
     private fun isLogin(){
         val token = sharedpreferences.getString(TOKEN, "")
         if (token != null) {
@@ -59,13 +90,13 @@ class LoginActivity : AppCompatActivity() {
             Toast.makeText(this, "Email and password cannot be empty", Toast.LENGTH_SHORT).show()
             return
         }
-        val loginReq = LoginReq(email, password)
+        val loginReq = LoginReq("13521099@std.stei.itb.ac.id", "password_13521099")
         ApiConfig.api.login(loginReq).enqueue(object : Callback<LoginRes> {
             override fun onResponse(call: Call<LoginRes>, response: Response<LoginRes>) {
                 if (response.isSuccessful) {
                     Toast.makeText(this@LoginActivity, "Login success", Toast.LENGTH_SHORT).show()
                     val token = response.body()?.token
-                    editor.putString("TOKEN", token)
+                    editor.putString(TOKEN, token)
                     editor.apply()
                     val intentRecycle = Intent(this@LoginActivity, MainActivity::class.java)
                     startActivity(intentRecycle)
diff --git a/app/src/main/java/com/pbd/psi/MainActivity.kt b/app/src/main/java/com/pbd/psi/MainActivity.kt
index 3a0e38021c31c3e07943e0f52aac6d766b07aa81..0b2c63c604b2e7d996bfdbde741a8c8fd1f3346a 100644
--- a/app/src/main/java/com/pbd/psi/MainActivity.kt
+++ b/app/src/main/java/com/pbd/psi/MainActivity.kt
@@ -3,9 +3,10 @@ package com.pbd.psi
 import android.content.Context
 import android.content.Intent
 import android.content.SharedPreferences
-import androidx.appcompat.app.AppCompatActivity
 import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
 import com.pbd.psi.databinding.ActivityMainBinding
+import com.pbd.psi.services.BackgroundService
 
 class MainActivity : AppCompatActivity() {
     companion object {
@@ -16,22 +17,28 @@ class MainActivity : AppCompatActivity() {
 
     private lateinit var binding: ActivityMainBinding
     private lateinit var sharedpreferences: SharedPreferences
+
     override fun onCreate(savedInstanceState: Bundle?) {
-        sharedpreferences = getSharedPreferences(LoginActivity.SHARED_PREFS, Context.MODE_PRIVATE)
         super.onCreate(savedInstanceState)
-        binding= ActivityMainBinding.inflate(layoutInflater)
-        binding.textEmail.text=sharedpreferences.getString(TOKEN, "default")
-        binding.textToken.text=sharedpreferences.getString(EMAIL, "default")
+        binding = ActivityMainBinding.inflate(layoutInflater)
         setContentView(binding.root)
 
-        binding.btnLogout.setOnClickListener{
-            val editor = sharedpreferences.edit()
-            editor.clear()
-            editor.apply()
+        sharedpreferences = getSharedPreferences(SHARED_PREFS, Context.MODE_PRIVATE)
+        binding.textEmail.text = sharedpreferences.getString(TOKEN, "default")
+        binding.textToken.text = sharedpreferences.getString(EMAIL, "default")
+
+        val serviceIntent = Intent(this, BackgroundService::class.java)
+        startService(serviceIntent)
+
+        binding.btnLogout.setOnClickListener {
+            with(sharedpreferences.edit()) {
+                clear()
+                apply()
+            }
             val intentLogin = Intent(this@MainActivity, LoginActivity::class.java)
             startActivity(intentLogin)
+            stopService(serviceIntent)
             finish()
-
         }
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/pbd/psi/services/BackgroundService.kt b/app/src/main/java/com/pbd/psi/services/BackgroundService.kt
new file mode 100644
index 0000000000000000000000000000000000000000..99c9e5a96aa5e019d4288a6665d4b123307e0f87
--- /dev/null
+++ b/app/src/main/java/com/pbd/psi/services/BackgroundService.kt
@@ -0,0 +1,83 @@
+package com.pbd.psi.services
+
+import android.app.Service
+import android.content.Context
+import android.content.Intent
+import android.content.SharedPreferences
+import android.os.IBinder
+import android.util.Log
+import com.pbd.psi.LoginActivity
+import com.pbd.psi.MainActivity
+import com.pbd.psi.api.ApiConfig
+import com.pbd.psi.models.AuthRes
+import retrofit2.Call
+import retrofit2.Callback
+import retrofit2.Response
+
+class BackgroundService : Service() {
+
+    companion object {
+        const val SHARED_PREFS = "shared_prefs"
+        const val EMAIL = "email"
+        const val TOKEN = "token"
+    }
+
+    private lateinit var sharedpreferences: SharedPreferences
+    private var isServiceRunning = false
+
+    override fun onBind(intent: Intent?): IBinder? {
+        Log.d("BackgroundService", "onBind")
+        return null
+    }
+
+    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
+        if (!isServiceRunning) {
+            isServiceRunning = true
+            sharedpreferences = getSharedPreferences(SHARED_PREFS, Context.MODE_PRIVATE)
+            val token = sharedpreferences.getString(TOKEN, "default").toString()
+            Log.d("BackgroundService", token)
+            startBackgroundTask(token)
+        }
+        return START_STICKY
+    }
+
+    private fun startBackgroundTask(token: String) {
+        Thread {
+            while (isServiceRunning) {
+                try {
+                    Thread.sleep(10000)
+                    Log.d("BackgroundService", "Running")
+                    ApiConfig.api.auth("Bearer $token").enqueue(object : Callback<AuthRes> {
+                        override fun onResponse(call: Call<AuthRes>, response: Response<AuthRes>) {
+                            if (response.isSuccessful){
+                                Log.d("BackgroundService", "onResponse: ${response.body()}")
+                            } else {
+                                val editor = sharedpreferences.edit()
+                                editor.clear()
+                                editor.apply()
+                                val loginIntent = Intent(this@BackgroundService, LoginActivity::class.java)
+                                loginIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
+                                startActivity(loginIntent)
+                                stopSelf()
+                            }
+                        }
+
+                        override fun onFailure(call: Call<AuthRes>, t: Throwable) {
+                            Log.e("BackgroundService", "onFailure: ${t.message}")
+                        }
+
+                    })
+                    Log.d("BackgroundService", "Service running")
+                } catch (e: InterruptedException) {
+                    e.printStackTrace()
+                }
+            }
+        }.start()
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        isServiceRunning = false
+        Log.d("BackgroundService", "Service stopped")
+    }
+}