Skip to content
Snippets Groups Projects
Commit 42b0af92 authored by Chris Albert's avatar Chris Albert
Browse files

feat: select image from gallery

parent 6d9e7179
Branches
Tags v1.4.6
No related merge requests found
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
...@@ -24,6 +25,7 @@ ...@@ -24,6 +25,7 @@
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.If32102024androidaab" android:theme="@style/Theme.If32102024androidaab"
android:enableOnBackInvokedCallback="true"
tools:targetApi="31"> tools:targetApi="31">
<activity <activity
android:name=".EditTransactionActivity" android:name=".EditTransactionActivity"
......
...@@ -3,6 +3,7 @@ package com.example.if3210_2024_android_aab ...@@ -3,6 +3,7 @@ package com.example.if3210_2024_android_aab
import android.Manifest import android.Manifest
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.content.ContentResolver
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.location.LocationManager import android.location.LocationManager
...@@ -10,6 +11,8 @@ import android.location.LocationRequest ...@@ -10,6 +11,8 @@ import android.location.LocationRequest
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.Environment import android.os.Environment
import android.provider.MediaStore
import android.provider.Settings
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
...@@ -69,6 +72,8 @@ class ScanFragment : Fragment() { ...@@ -69,6 +72,8 @@ class ScanFragment : Fragment() {
TransactionViewModelFactory((requireActivity().application as TransactionApplication).repository) TransactionViewModelFactory((requireActivity().application as TransactionApplication).repository)
} }
private val SELECT_IMAGE_REQUEST = 1
private var capturedImageFile: File? = null private var capturedImageFile: File? = null
private lateinit var fusedLocationClient: FusedLocationProviderClient private lateinit var fusedLocationClient: FusedLocationProviderClient
...@@ -106,6 +111,10 @@ class ScanFragment : Fragment() { ...@@ -106,6 +111,10 @@ class ScanFragment : Fragment() {
takePhoto() takePhoto()
} }
binding.galleryButton.setOnClickListener {
selectPhoto()
}
binding.retryButton.setOnClickListener { binding.retryButton.setOnClickListener {
retryPhoto() retryPhoto()
} }
...@@ -237,6 +246,59 @@ class ScanFragment : Fragment() { ...@@ -237,6 +246,59 @@ class ScanFragment : Fragment() {
) )
} }
private fun selectPhoto() {
if (!Environment.isExternalStorageManager()) {
val intentESM = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
startActivity(intentESM)
}
val intent = Intent(Intent.ACTION_PICK)
intent.type = "image/*"
startActivityForResult(intent, SELECT_IMAGE_REQUEST)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == SELECT_IMAGE_REQUEST && resultCode == Activity.RESULT_OK) {
val selectedImageUri: Uri? = data?.data
if (selectedImageUri != null) {
val selectedImage: File? = selectedImageUri?.let {
getImageFile(requireActivity().contentResolver, it)
}
}
val imageView = binding.imageView
capturedImageFile = getImageFile(requireActivity().contentResolver, selectedImageUri!!)
imageView.setImageURI(selectedImageUri)
imageView.visibility = View.VISIBLE
binding.viewFinder.visibility = View.GONE
binding.captureButton.visibility = View.GONE
binding.galleryButton.visibility = View.GONE
binding.retryButton.visibility = View.VISIBLE
binding.okButton.visibility = View.VISIBLE
}
}
private fun getImageFile(contentResolver: ContentResolver, uri: Uri): File? {
val filePathCol = arrayOf(MediaStore.Images.Media.DATA)
val cursor = contentResolver.query(uri, filePathCol, null, null, null)
cursor?.moveToFirst()
val colIdx = cursor?.getColumnIndex(filePathCol[0])
val filePath = colIdx?.let {
cursor.getString(it)
}
cursor?.close()
return filePath?.let {
File(it)
}
}
private fun retryPhoto() { private fun retryPhoto() {
binding.imageView.visibility = View.GONE binding.imageView.visibility = View.GONE
binding.viewFinder.visibility = View.VISIBLE binding.viewFinder.visibility = View.VISIBLE
...@@ -292,6 +354,7 @@ class ScanFragment : Fragment() { ...@@ -292,6 +354,7 @@ class ScanFragment : Fragment() {
} }
} }
override fun onFailure (call: Call<ResponseItem>, t: Throwable) { override fun onFailure (call: Call<ResponseItem>, t: Throwable) {
println(t)
Toast.makeText(requireContext(), t.localizedMessage, Toast.LENGTH_SHORT).show() Toast.makeText(requireContext(), t.localizedMessage, Toast.LENGTH_SHORT).show()
} }
}) })
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment