diff --git a/app/src/main/java/com/example/pbd_jwr/MainActivity.kt b/app/src/main/java/com/example/pbd_jwr/MainActivity.kt index d0ad4d36eb8d764583a7af604ddd4c4a52841d57..c588d3aea47dcd018c1b33bf5aeb11197105f99e 100644 --- a/app/src/main/java/com/example/pbd_jwr/MainActivity.kt +++ b/app/src/main/java/com/example/pbd_jwr/MainActivity.kt @@ -63,7 +63,7 @@ class MainActivity : AppCompatActivity() { // menu should be considered as top level destinations. val appBarConfiguration = AppBarConfiguration( setOf( - R.id.navigation_transaction, R.id.navigation_dashboard, R.id.navigation_settings, R.id.navigation_transaction_add, R.id.navigation_transaction_detail, R.id.navigation_twibbon, R.id.navigation_scan + R.id.navigation_transaction, R.id.navigation_dashboard, R.id.navigation_settings, R.id.navigation_transaction_add, R.id.navigation_transaction_detail, R.id.navigation_twibbon, R.id.navigation_scan, R.id.navigation_nonetwork ) ) setupActionBarWithNavController(navController, appBarConfiguration) diff --git a/app/src/main/java/com/example/pbd_jwr/ui/noNetwork/NoNetworkFragment.kt b/app/src/main/java/com/example/pbd_jwr/ui/noNetwork/NoNetworkFragment.kt new file mode 100644 index 0000000000000000000000000000000000000000..74d7af46037f5951e5efcb5ff08650d8b11e9090 --- /dev/null +++ b/app/src/main/java/com/example/pbd_jwr/ui/noNetwork/NoNetworkFragment.kt @@ -0,0 +1,27 @@ +package com.example.pbd_jwr.ui.noNetwork + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.example.pbd_jwr.databinding.FragmentNonetworkBinding + + +class NoNetworkFragment : Fragment() { + + + private var _binding: FragmentNonetworkBinding? = null + + private val binding get() = _binding!! + + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentNonetworkBinding.inflate(inflater, container, false) + return binding.root + } + + + + +} diff --git a/app/src/main/java/com/example/pbd_jwr/ui/scan/ScanFragment.kt b/app/src/main/java/com/example/pbd_jwr/ui/scan/ScanFragment.kt index 8bc6e6e52693832c9ab2dc835c2bbdfb5fffb122..1e488dff724bc98819b205d9bb8902cbff15fbf7 100644 --- a/app/src/main/java/com/example/pbd_jwr/ui/scan/ScanFragment.kt +++ b/app/src/main/java/com/example/pbd_jwr/ui/scan/ScanFragment.kt @@ -5,11 +5,15 @@ import android.annotation.SuppressLint import android.app.Activity.RESULT_OK import android.app.AlertDialog import android.content.Context +import android.content.Context.CONNECTIVITY_SERVICE import android.content.Intent import android.content.SharedPreferences import android.content.pm.PackageManager import android.graphics.Bitmap import android.graphics.BitmapFactory +import android.hardware.SensorManager +import android.net.ConnectivityManager +import android.net.NetworkCapabilities import android.net.Uri import android.os.Bundle import android.os.Environment @@ -24,9 +28,12 @@ import android.widget.ListView import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.core.content.ContextCompat +import androidx.core.content.ContextCompat.getSystemService import androidx.core.content.FileProvider +import androidx.core.content.getSystemService import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.navigation.fragment.findNavController import com.example.pbd_jwr.R import com.example.pbd_jwr.data.entity.Transaction import com.example.pbd_jwr.data.model.Category @@ -54,7 +61,7 @@ class ScanFragment : Fragment() { var transactionDummyData: String = "" private var _binding: FragmentScanBinding? = null private lateinit var mTransactionViewModel: TransactionViewModel - + private lateinit var connectivityManager: ConnectivityManager private val binding get() = _binding!! @@ -89,6 +96,7 @@ class ScanFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { _binding = FragmentScanBinding.inflate(inflater, container, false) + connectivityManager = activity?.getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager return binding.root } @@ -113,10 +121,14 @@ class ScanFragment : Fragment() { } binding.uploadBtn.setOnClickListener { - imageUri?.let { uri -> - uploadImage(uri) - } ?: run { - Toast.makeText(context, "No image selected or taken", Toast.LENGTH_SHORT).show() + if(isNetworkAvailable()){ + imageUri?.let { uri -> + uploadImage(uri) + } ?: run { + Toast.makeText(context, "No image selected or taken", Toast.LENGTH_SHORT).show() + } + }else{ + findNavController().navigate(R.id.navigation_nonetwork) } } @@ -345,4 +357,13 @@ class ScanFragment : Fragment() { return transactions } + private fun isNetworkAvailable(): Boolean { + val network = connectivityManager.activeNetwork + val networkCapabilities = connectivityManager.getNetworkCapabilities(network) + return networkCapabilities != null && ( + networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || + networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) + ) + } + } diff --git a/app/src/main/res/drawable/baseline_cell_wifi.xml b/app/src/main/res/drawable/baseline_cell_wifi.xml new file mode 100644 index 0000000000000000000000000000000000000000..98372f983dd74f28a3f5a9f08083b307c10c3758 --- /dev/null +++ b/app/src/main/res/drawable/baseline_cell_wifi.xml @@ -0,0 +1,5 @@ +<vector android:height="200dp" android:tint="#B29F7A" + android:viewportHeight="24" android:viewportWidth="24" + android:width="200dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="@android:color/white" android:pathData="M18,9.98L6,22h12h4V5.97L18,9.98zM20,20h-2v-7.22l2,-2V20zM5.22,7.22L3.93,5.93c3.9,-3.91 10.24,-3.91 14.15,0l-1.29,1.29C13.6,4.03 8.41,4.03 5.22,7.22zM12.93,11.07L11,13l-1.93,-1.93C10.14,10.01 11.86,10.01 12.93,11.07zM14.22,9.79c-1.78,-1.77 -4.66,-1.77 -6.43,0L6.5,8.5c2.48,-2.48 6.52,-2.48 9,0L14.22,9.79z"/> +</vector> diff --git a/app/src/main/res/layout/fragment_nonetwork.xml b/app/src/main/res/layout/fragment_nonetwork.xml new file mode 100644 index 0000000000000000000000000000000000000000..3cfc748802feae2e196df7b4ad62cb7c9a5c3291 --- /dev/null +++ b/app/src/main/res/layout/fragment_nonetwork.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + xmlns:tools="http://schemas.android.com/tools" + xmlns:app="http://schemas.android.com/apk/res-auto" + + > + + + <ImageView + android:id="@+id/noInternet" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/baseline_cell_wifi" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + + /> + + <TextView + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toBottomOf="@id/noInternet" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="No Network Available" + android:textSize="24sp" + /> + +</androidx.constraintlayout.widget.ConstraintLayout> \ 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 b9e8c3324b7b853f56c54c6e248ac8744411e821..df678208973d1682b63d8cc478d22802e3e8be04 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -71,4 +71,10 @@ android:id="@+id/navigation_twibbon" android:name="com.example.pbd_jwr.ui.twibbon.TwibbonFragment" android:label="Twibbon" /> + + <fragment + android:id="@+id/navigation_nonetwork" + android:name="com.example.pbd_jwr.ui.noNetwork.NoNetworkFragment" + android:label="No Internet" + /> </navigation> \ No newline at end of file