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