From fcdfb58cb544b6deeadab702f86fc2f73dd8df78 Mon Sep 17 00:00:00 2001
From: "Kandida Gunawangit config --global user.name Kandida"
 <kandidagunawan@gmail.com>
Date: Sun, 31 Mar 2024 16:48:07 +0700
Subject: [PATCH] fix merge

---
 .../view/scan/ScanFragment.kt                 |   8 +-
 .../view/scan/ScanHomeFragment.kt             | 118 ++++++++++++++++++
 .../view/scan/ScanResultFragment.kt           |  12 +-
 app/src/main/res/values-night/themes.xml      |   1 +
 4 files changed, 129 insertions(+), 10 deletions(-)

diff --git a/app/src/main/java/com/example/bandung_bondowoso/view/scan/ScanFragment.kt b/app/src/main/java/com/example/bandung_bondowoso/view/scan/ScanFragment.kt
index 8c23b60..ee86cd5 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/view/scan/ScanFragment.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/view/scan/ScanFragment.kt
@@ -29,13 +29,11 @@ class ScanFragment : Fragment(){
     private var _binding : FragmentScanBinding ? = null
     private lateinit var  cameraController: LifecycleCameraController
     private val binding get() = _binding!!
-
     private var imageFile: File? = null
     private val scanViewModel: ScanViewModel by activityViewModels {
         ScanViewModelFactory((activity?.application as BandungBondowosoApp).billRepository)
     }
 
-
     override fun onCreateView(
         inflater: LayoutInflater,
         container: ViewGroup?,
@@ -44,12 +42,10 @@ class ScanFragment : Fragment(){
         Log.d("ScanFragment", "OnCreateView")
         _binding = FragmentScanBinding.inflate(inflater, container, false)
         val root: View = binding.root
-
         binding.shutter.setOnClickListener {
             takePhoto() ;
 //            Navigation.findNavController(root).navigate(R.id.action_navigation_camera_to_result)
         }
-
         return root;
     }
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -71,7 +67,6 @@ class ScanFragment : Fragment(){
     }
 
     private fun takePhoto(){
-
         val name = "file"
         val outputDirectory = File(requireContext().cacheDir, "camera").apply{
             mkdirs()
@@ -111,7 +106,6 @@ class ScanFragment : Fragment(){
             }
         )
 
-
     }
 
     private val activityResultLauncher = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()){
@@ -141,4 +135,4 @@ class ScanFragment : Fragment(){
             ContextCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/example/bandung_bondowoso/view/scan/ScanHomeFragment.kt b/app/src/main/java/com/example/bandung_bondowoso/view/scan/ScanHomeFragment.kt
index e69de29..24563dd 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/view/scan/ScanHomeFragment.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/view/scan/ScanHomeFragment.kt
@@ -0,0 +1,118 @@
+package com.example.bandung_bondowoso.view.scan
+
+import android.content.ContentResolver
+import android.content.Context
+import android.net.Uri
+import android.os.Bundle
+import android.provider.MediaStore
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.activity.result.PickVisualMediaRequest
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.activityViewModels
+import androidx.navigation.Navigation
+import com.example.bandung_bondowoso.BandungBondowosoApp
+import com.example.bandung_bondowoso.R
+import com.example.bandung_bondowoso.broadcast.connection.ConnectionChangeListener
+import com.example.bandung_bondowoso.databinding.FragmentScanHomeBinding
+import com.example.bandung_bondowoso.util.ConnectionStateMonitor
+import com.example.bandung_bondowoso.view.network.NoNetworkFragment
+import com.example.bandung_bondowoso.viewmodel.scan.ScanViewModel
+import com.example.bandung_bondowoso.viewmodel.scan.ScanViewModelFactory
+import java.io.File
+import java.io.FileOutputStream
+import java.io.InputStream
+import java.io.OutputStream
+
+class ScanHomeFragment: Fragment(), ConnectionChangeListener {
+    private var _binding :FragmentScanHomeBinding ? = null;
+    private val binding get() = _binding!!
+    private val scanViewModel: ScanViewModel by activityViewModels {
+        ScanViewModelFactory((activity?.application as BandungBondowosoApp).billRepository)
+    }
+    private var imageFile : File? = null
+    private val pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
+        if (uri != null) {
+            Log.d("PhotoPicker", "Selected URI: $uri")
+            imageFile = uriToFile(uri, this.requireContext())
+            scanViewModel.setUploadFile(imageFile!!)
+            Navigation.findNavController(binding.root).navigate(R.id.action_navigation_scan_to_result)
+        } else {
+            Log.d("PhotoPicker", "No photo selected")
+        }
+    }
+    private val connectionStateMonitor = ConnectionStateMonitor(this)
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        Log.d("ScanHomeFragment", "OnCreateView")
+        _binding = FragmentScanHomeBinding.inflate(inflater, container, false)
+        val root: View = binding.root
+        binding.toScanButton.setOnClickListener {
+            Navigation.findNavController(root).navigate(R.id.action_navigation_scan_to_camera_scan)
+        }
+        binding.toGaleriButton.setOnClickListener{
+            pickImageGallery()
+        }
+        connectionStateMonitor.enable(requireContext())
+        return root;
+    }
+
+    private fun pickImageGallery(){
+        pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
+    }
+    override fun onConnectionChanged(isConnected: Boolean) {
+        activity?.runOnUiThread(Runnable {
+            if (!isConnected) {
+                // change fragment to no network fragment
+                Log.d("DashboardFragment", binding.scanChildFragment.toString())
+                childFragmentManager.beginTransaction()
+                    .replace(binding.scanChildFragment.id, NoNetworkFragment())
+                    .commit()
+                binding.scanFragment.visibility = View.GONE
+                binding.scanChildFragment.visibility = View.VISIBLE
+            } else {
+                // remove no network fragment
+                Log.d("DashboardFragment", "Connected")
+                val fragment = childFragmentManager.findFragmentById(binding.scanChildFragment.id)
+                if (fragment is NoNetworkFragment) {
+                    childFragmentManager.beginTransaction().remove(fragment).commit()
+                }
+                binding.scanFragment.visibility = View.VISIBLE
+                binding.scanChildFragment.visibility = View.GONE
+            }
+        })
+    }
+
+    private fun uriToFile(imageUri: Uri, context: Context) : File{
+        val contentResolver = context.contentResolver
+        val file = File(context.cacheDir, contentResolver.getFileName(imageUri))
+        val input: InputStream? = contentResolver.openInputStream(imageUri)
+        val output: OutputStream = FileOutputStream(file)
+        input?.copyTo(output)
+
+        return file;
+    }
+    fun ContentResolver.getFileName(uri: Uri): String{
+        var name = ""
+        val returnCursor = this.query(uri, null, null, null, null)
+        if (returnCursor != null) {
+            val nameIndex = returnCursor.getColumnIndex(MediaStore.Images.ImageColumns.DISPLAY_NAME)
+            returnCursor.moveToFirst()
+            name = returnCursor.getString(nameIndex)
+            returnCursor.close()
+        }
+        return name
+    }
+
+    override fun onDestroyView() {
+        super.onDestroyView()
+        _binding = null
+    }
+
+}
diff --git a/app/src/main/java/com/example/bandung_bondowoso/view/scan/ScanResultFragment.kt b/app/src/main/java/com/example/bandung_bondowoso/view/scan/ScanResultFragment.kt
index 6e9b21a..53490aa 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/view/scan/ScanResultFragment.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/view/scan/ScanResultFragment.kt
@@ -27,6 +27,7 @@ class ScanResultFragment: Fragment() {
     private val loginViewModel: LoginViewModel by activityViewModels {
         LoginViewModelFactory((activity?.application as BandungBondowosoApp).userRepository)
     }
+
     override fun onCreateView(
         inflater: LayoutInflater,
         container: ViewGroup?,
@@ -50,8 +51,13 @@ class ScanResultFragment: Fragment() {
         var token: String?
         var file: File?
 
-        scanViewModel.uploadResult.observe(viewLifecycleOwner){uploadResult->
-            binding.testAja.text = uploadResult.toString()
+        scanViewModel.uploadResult.observe(viewLifecycleOwner) { uploadResult ->
+            var temp = ""
+            uploadResult?.items?.items?.forEach { item ->
+                temp += "${item.name} "
+                temp += "${item.qty * item.price} \n"
+            }
+            binding.testAja.text = temp.trim()
         }
         file = scanViewModel.getUploadFile()
         loginViewModel.getToken().observe(viewLifecycleOwner) { userToken ->
@@ -70,4 +76,4 @@ class ScanResultFragment: Fragment() {
         super.onDestroyView()
         _binding = null
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
index 6476ed2..a359817 100644
--- a/app/src/main/res/values-night/themes.xml
+++ b/app/src/main/res/values-night/themes.xml
@@ -154,6 +154,7 @@
 
     <style name="buttonStyleShutter" parent="Widget.MaterialComponents.Button">
         <item name="android:background">@drawable/round_button</item>
+    </style>zz
     <style name="buttonStyleDanger" parent="Widget.MaterialComponents.Button">
         <item name="android:background">@drawable/bg_button_danger</item>
         <item name="android:textColor">@color/white</item>
-- 
GitLab