diff --git a/app/src/main/java/com/pbd/psi/LoginActivity.kt b/app/src/main/java/com/pbd/psi/LoginActivity.kt index 82d883176acdf5dc37c7d646e8f46f3a3e09bbce..57dd6a2d1176857986055bf9080f4caacb4c3f24 100644 --- a/app/src/main/java/com/pbd/psi/LoginActivity.kt +++ b/app/src/main/java/com/pbd/psi/LoginActivity.kt @@ -36,11 +36,6 @@ class LoginActivity : AppCompatActivity() { sharedpreferences = getSharedPreferences(SHARED_PREFS, Context.MODE_PRIVATE) - if(!isOnline(this)){ - Toast.makeText(this, "No internet connection", Toast.LENGTH_SHORT).show() - return - } - isLogin() viewModel.loginResult.observe(this) { @@ -65,6 +60,7 @@ class LoginActivity : AppCompatActivity() { } binding.btnLogin.setOnClickListener{ + isOnline(this) doLogin() } } @@ -91,7 +87,7 @@ class LoginActivity : AppCompatActivity() { viewModel.loginUser(email, password) } - private fun isOnline(context: Context): Boolean { + private fun isOnline(context: Context) { val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val capabilities = @@ -99,16 +95,17 @@ class LoginActivity : AppCompatActivity() { if (capabilities != null) { if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { Log.i("Internet", "NetworkCapabilities.TRANSPORT_CELLULAR") - return true + return } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { Log.i("Internet", "NetworkCapabilities.TRANSPORT_WIFI") - return true + return } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) { Log.i("Internet", "NetworkCapabilities.TRANSPORT_ETHERNET") - return true + return } } - return false + Toast.makeText(context, "No internet connection", Toast.LENGTH_SHORT).show() + return } private fun isLogin() { val token = sharedpreferences.getString(TOKEN, "") diff --git a/app/src/main/java/com/pbd/psi/MainActivity.kt b/app/src/main/java/com/pbd/psi/MainActivity.kt index 58c986cfcf27166d6ece31dd6e62707575f4c9d2..3413b39200bc98457d5c0378aa5511d4d80d2455 100644 --- a/app/src/main/java/com/pbd/psi/MainActivity.kt +++ b/app/src/main/java/com/pbd/psi/MainActivity.kt @@ -1,9 +1,15 @@ package com.pbd.psi - +import android.content.BroadcastReceiver +import android.content.Context import android.content.Intent +import android.content.IntentFilter import android.content.SharedPreferences +import android.net.ConnectivityManager +import android.net.NetworkCapabilities import android.os.Bundle +import android.util.Log import android.view.Menu +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.navigation.fragment.NavHostFragment import androidx.navigation.ui.setupWithNavController @@ -22,6 +28,8 @@ class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding private lateinit var sharedpreferences: SharedPreferences private lateinit var settingsBinding: FragmentSettingsBinding + private lateinit var connectivityManager: ConnectivityManager + private lateinit var networkChangeReceiver: BroadcastReceiver override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -31,6 +39,30 @@ class MainActivity : AppCompatActivity() { sharedpreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE) + if(!isOnline(this)){ + val intent = Intent(this, LoginActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK + startActivity(intent) + finish() + } + + // Initialize connectivity manager and network change receiver + connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + networkChangeReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + // Handle network change here, update UI accordingly + val networkInfo = connectivityManager.activeNetworkInfo + if (networkInfo == null || !networkInfo.isConnected) { + // Network lost, handle accordingly + // For example, show a toast message + showToast("Network connection lost") + } + } + } + + // Register network change receiver + registerReceiver(networkChangeReceiver, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)) + // bottom navbar val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_navigation) val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as NavHostFragment @@ -48,8 +80,34 @@ class MainActivity : AppCompatActivity() { override fun onDestroy() { super.onDestroy() + // Unregister network change receiver to avoid memory leaks + unregisterReceiver(networkChangeReceiver) val serviceIntent = Intent(this, BackgroundService::class.java) stopService(serviceIntent) } + // Function to show toast message + private fun showToast(message: String) { + Toast.makeText(this, message, Toast.LENGTH_SHORT).show() + } + + private fun isOnline(context: Context) : Boolean{ + val connectivityManager = + context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + val capabilities = + connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork) + if (capabilities != null) { + if (capabilities.hasTransport(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 + } + } + Toast.makeText(context, "No internet connection", Toast.LENGTH_SHORT).show() + return false + } } diff --git a/app/src/main/java/com/pbd/psi/ui/no_internet/NotConnectionFragment.kt b/app/src/main/java/com/pbd/psi/ui/no_internet/NotConnectionFragment.kt new file mode 100644 index 0000000000000000000000000000000000000000..5aae69f0e6148188839558fd82975091f3f9b01e --- /dev/null +++ b/app/src/main/java/com/pbd/psi/ui/no_internet/NotConnectionFragment.kt @@ -0,0 +1,19 @@ +package com.pbd.psi.ui.no_internet +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.pbd.psi.databinding.FragmentNotConnectionBinding + +class NotConnectionFragment : Fragment() { + + private lateinit var binding: FragmentNotConnectionBinding + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + binding = FragmentNotConnectionBinding.inflate(layoutInflater) + return binding.root + } +} diff --git a/app/src/main/java/com/pbd/psi/ui/scan/ScanFragment.kt b/app/src/main/java/com/pbd/psi/ui/scan/ScanFragment.kt index 317087c38a614037a1608b5c1c23517ab9ffc1a9..2a4c07904ff8d0439b28267464ed80a0697cacfb 100644 --- a/app/src/main/java/com/pbd/psi/ui/scan/ScanFragment.kt +++ b/app/src/main/java/com/pbd/psi/ui/scan/ScanFragment.kt @@ -7,6 +7,8 @@ import android.content.Intent import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.drawable.BitmapDrawable +import android.net.ConnectivityManager +import android.net.NetworkCapabilities import android.net.Uri import android.os.Bundle import android.provider.MediaStore @@ -38,6 +40,7 @@ import org.json.JSONObject import retrofit2.Call import retrofit2.Callback import retrofit2.Response +import androidx.navigation.fragment.findNavController import java.io.ByteArrayOutputStream class ScanFragment : Fragment() { @@ -71,6 +74,12 @@ class ScanFragment : Fragment() { _binding = FragmentScanBinding.inflate(inflater, container, false) val root: View = binding.root + if(!isOnline(requireContext())){ + findNavController().navigate(com.pbd.psi.R.id.notConnectionFragment) + return root + } + + val permissionLauncher = registerForActivityResult( ActivityResultContracts.RequestPermission() ) { isGranted -> @@ -101,13 +110,10 @@ class ScanFragment : Fragment() { uploadImage() } - val appDatabase = AppDatabase.getDatabase(requireContext()) - val repository = ScanRepository(appDatabase) - val viewModel = ScanViewModel(repository) - return root } + private fun startCamera() { val cameraProviderFuture = ProcessCameraProvider.getInstance(requireContext()) cameraProviderFuture.addListener({ @@ -254,4 +260,25 @@ class ScanFragment : Fragment() { } } + private fun isOnline(context: Context): Boolean{ + val connectivityManager = + context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + 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 + } + } + Toast.makeText(context, "No internet connection", Toast.LENGTH_SHORT).show() + return false + } + } \ No newline at end of file diff --git a/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt b/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt index 45cb89834b36606ea5cb23285dc09dd53f4a6c1c..f0978d8a15ea8f865c32f3745e04e665e0bea3cc 100644 --- a/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt @@ -35,7 +35,7 @@ class SettingsFragment : Fragment() { editor.clear() editor.apply() val intent = Intent(requireActivity(), LoginActivity::class.java) - Toast.makeText(requireActivity(), sharedpreferences.getString(EMAIL,""), Toast.LENGTH_SHORT).show() + Toast.makeText(requireActivity(), "Success logout", Toast.LENGTH_SHORT).show() intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK startActivity(intent) requireActivity().finish() diff --git a/app/src/main/res/layout/fragment_not_connection.xml b/app/src/main/res/layout/fragment_not_connection.xml new file mode 100644 index 0000000000000000000000000000000000000000..211055f44451253d27f0c96b280c483c20698cc2 --- /dev/null +++ b/app/src/main/res/layout/fragment_not_connection.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:orientation="vertical" + tools:context=".ui.settings.SettingsFragment" + android:paddingHorizontal="24dp" + android:background="@color/primaryBlue"> + <androidx.constraintlayout.widget.ConstraintLayout + android:layout_width="match_parent" + android:layout_height="wrap_content"> + <TextView + android:id="@+id/not_connectivity" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/montserrat" + android:text="Not Connection" + android:textColor="@color/white" + android:textSize="20sp" + android:layout_marginVertical="8dp" + android:layout_gravity="center" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + </androidx.constraintlayout.widget.ConstraintLayout> + + + + + +</LinearLayout> \ No newline at end of file diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 5cb658833d87a13ca8b3af1bd84070ab1bbb5c5f..9390980446878e549a122538e87efe0b9e13b668 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -29,4 +29,9 @@ android:name="com.pbd.psi.ui.twibbon.TwibbonFragment" android:label="fragment_twibbon" tools:layout="@layout/fragment_twibbon" /> + <fragment + android:id="@+id/notConnectionFragment" + android:name="com.pbd.psi.ui.no_internet.NotConnectionFragment" + android:label="fragment_not_connection" + tools:layout="@layout/fragment_not_connection" /> </navigation> \ No newline at end of file