diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c920a39773c94b53581a624ea8e0fc3b4e502593..7f33317cf9f056a4da9dfc420ea2864502bd0601 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -65,6 +65,7 @@ dependencies { implementation("com.google.android.material:material:1.11.0") implementation("androidx.mediarouter:mediarouter:1.7.0") implementation("androidx.camera:camera-view:1.3.2") + //implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a9e24f1f3df4384c3c4ee59181a780c3c8b12e6c..dd3c1e9f24acd3e4f56a680d198ccc8df4f1f6e1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,8 @@ <uses-feature android:name="android.hardware.camera" android:required="false" /> + + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CAMERA"/> <application diff --git a/app/src/main/java/com/example/bondoman/MainActivity.kt b/app/src/main/java/com/example/bondoman/MainActivity.kt index 23ed3181f5e8b00604d8e56737d8471c98b1f6f4..fd9cf8f83602708d175d4fd4a070d1ce6a348bc3 100644 --- a/app/src/main/java/com/example/bondoman/MainActivity.kt +++ b/app/src/main/java/com/example/bondoman/MainActivity.kt @@ -2,18 +2,39 @@ package com.example.bondoman import SettingsFragment import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager import android.os.Bundle +import android.os.Handler +import android.os.Looper import android.widget.TextView +import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import com.google.android.material.bottomnavigation.BottomNavigationView class MainActivity : AppCompatActivity() { + + private val handler = Handler(Looper.getMainLooper()) + private val checkNetworkRunnable = object : Runnable { + override fun run() { + // Check network connection status + if (!isNetworkConnected()) { + // Display pop-up dialog + showNoInternetDialog() + } + // Schedule the next check after 1 minutes + handler.postDelayed(this, 60 * 1000) // 3 minutes in milliseconds + } + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + // Check network connection status + startNetworkCheck() + val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottomNavigationView) var previousItem = 0 @@ -86,6 +107,39 @@ class MainActivity : AppCompatActivity() { frameHeaderText.text = title } + private fun startNetworkCheck() { + // Immediately check network connection + checkNetworkRunnable.run() + } + + private fun stopNetworkCheck() { + // Remove any pending callbacks to stop the periodic check + handler.removeCallbacks(checkNetworkRunnable) + } + + private fun isNetworkConnected(): Boolean { + val connectivityManager = + getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + val activeNetworkInfo = connectivityManager.activeNetworkInfo + return activeNetworkInfo != null && activeNetworkInfo.isConnected + } + + private fun showNoInternetDialog() { + val builder = AlertDialog.Builder(this) + builder.setTitle("No Internet Connection") + .setMessage("Please check your internet connection and try again.") + .setPositiveButton("OK") { dialog, _ -> dialog.dismiss() } + .setCancelable(false) + val dialog = builder.create() + dialog.show() + } + + override fun onDestroy() { + super.onDestroy() + // Stop the periodic network check when the activity is destroyed + stopNetworkCheck() + } + companion object { const val EXTRA_FRAGMENT = "com.example.bondoman.EXTRA_FRAGMENT" const val FRAGMENT_TRANSAKSI = "transaksi_fragment" diff --git a/app/src/main/java/com/example/bondoman/fragment_graph.kt b/app/src/main/java/com/example/bondoman/fragment_graph.kt new file mode 100644 index 0000000000000000000000000000000000000000..a314c9fcb7512f45c583d65067382dd54711b8a9 --- /dev/null +++ b/app/src/main/java/com/example/bondoman/fragment_graph.kt @@ -0,0 +1,42 @@ +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.example.bondoman.R +//import com.github.mikephil.charting.charts.PieChart +//import com.github.mikephil.charting.data.Entry +//import com.github.mikephil.charting.data.PieData +//import com.github.mikephil.charting.data.PieDataSet + +class GraphFragment : Fragment() { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_graph, container, false) + } + +} + +//override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// +// val pieChart = view.findViewById<PieChart>(R.id.pieChart) +// +// // Dummy data for demonstration +// val entries = listOf( +// Entry(0f, 200f), +// Entry(1f, 300f), +// Entry(2f, 400f), +// Entry(3f, 500f) +// ) +// +// val dataSet = PieDataSet(entries, "Summary") +// val data = PieData(dataSet) +// pieChart.data = data +// +// // Customize the appearance of the chart +// pieChart.description.isEnabled = false +// pieChart.invalidate() } diff --git a/app/src/main/java/com/example/bondoman/fragment_scanner.kt b/app/src/main/java/com/example/bondoman/fragment_scanner.kt index 1394d5240ba8a1457704b1f7f080066110748eee..3be4c1e581c4dad7ab118a4080d16ad670ebd66e 100644 --- a/app/src/main/java/com/example/bondoman/fragment_scanner.kt +++ b/app/src/main/java/com/example/bondoman/fragment_scanner.kt @@ -26,6 +26,7 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.LifecycleOwner import com.google.android.material.floatingactionbutton.FloatingActionButton import java.io.File +import java.io.FileOutputStream import java.util.concurrent.ExecutorService import java.util.concurrent.Executors @@ -115,12 +116,28 @@ class CameraFragment : Fragment() { super.onActivityResult(requestCode, resultCode, data) if (requestCode == REQUEST_CODE_GALLERY && resultCode == Activity.RESULT_OK) { data?.data?.let { uri -> - capturedImageView.setImageURI(uri) - capturedImageView.visibility = View.VISIBLE + saveGalleryImage(uri) } } } + private fun saveGalleryImage(uri: Uri) { + val inputStream = requireContext().contentResolver.openInputStream(uri) + val outputDir = File(requireContext().filesDir, "photos") + if (!outputDir.exists()) { + outputDir.mkdir() + } + val photoFile = File(outputDir, "${System.currentTimeMillis()}.jpg") + inputStream?.use { input -> + FileOutputStream(photoFile).use { output -> + input.copyTo(output) + } + } + currentPhotoPath = photoFile.absolutePath + showCapturedImage() + } + + private fun allPermissionsGranted() = REQUIRED_PERMISSIONS.all { ContextCompat.checkSelfPermission( @@ -197,3 +214,5 @@ class CameraFragment : Fragment() { private val REQUIRED_PERMISSIONS = arrayOf(Manifest.permission.CAMERA) } } + +class fragment_graph {} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_graph.xml b/app/src/main/res/layout/fragment_graph.xml new file mode 100644 index 0000000000000000000000000000000000000000..c2ebe811aa5fcc66fea59d3b4b77d64075a08820 --- /dev/null +++ b/app/src/main/res/layout/fragment_graph.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout 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"> + + <com.github.mikephil.charting.charts.PieChart + android:id="@+id/pieChart" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:ignore="MissingClass" /> + +</RelativeLayout>