@@ -2,6 +2,7 @@ package com.wafflestudio.siksha2.ui.menuDetail
22
33import android.Manifest
44import android.app.Activity.RESULT_OK
5+ import android.content.Context
56import android.content.Intent
67import android.content.pm.PackageManager
78import android.net.Uri
@@ -17,7 +18,6 @@ import androidx.activity.result.PickVisualMediaRequest
1718import androidx.activity.result.contract.ActivityResultContracts
1819import androidx.compose.ui.unit.dp
1920import androidx.core.content.ContextCompat
20- import androidx.core.content.FileProvider
2121import androidx.core.view.forEachIndexed
2222import androidx.core.widget.addTextChangedListener
2323import androidx.fragment.app.Fragment
@@ -38,7 +38,6 @@ import kotlinx.coroutines.withContext
3838import java.io.File
3939import java.net.HttpURLConnection
4040import java.net.URL
41- import java.util.UUID
4241
4342class LeaveReviewFragment : Fragment () {
4443 private lateinit var binding: FragmentLeaveReviewBinding
@@ -117,9 +116,10 @@ class LeaveReviewFragment : Fragment() {
117116 review.etc?.images?.let { urls ->
118117 lifecycleScope.launch {
119118 urls.forEach { url: String ->
120- val uri: Uri ? = downloadToUri(url)
121- uri?.let { realUri ->
122- vm.addImageUri(realUri, onFailure = {})
119+ val file = downloadImageToFile(requireContext(), url)
120+ file?.let {
121+ val uri = Uri .fromFile(it)
122+ vm.addImageUri(uri, onFailure = {})
123123 }
124124 }
125125 }
@@ -226,32 +226,31 @@ class LeaveReviewFragment : Fragment() {
226226 }
227227 }
228228
229- private suspend fun downloadToUri (url : String ): Uri ? =
230- withContext(Dispatchers .IO ) {
231- try {
232- val connection = URL (url).openConnection() as HttpURLConnection
233- connection.connect()
229+ suspend fun downloadImageToFile (
230+ context : Context ,
231+ imageUrl : String
232+ ): File ? = withContext(Dispatchers .IO ) {
233+ return @withContext try {
234+ val url = URL (imageUrl)
235+ val connection = url.openConnection() as HttpURLConnection
236+ connection.connect()
237+
238+ if (connection.responseCode != HttpURLConnection .HTTP_OK ) {
239+ return @withContext null
240+ }
234241
235- val input = connection.inputStream
236- val file = File (
237- requireContext().cacheDir,
238- UUID .randomUUID().toString() + " .jpg"
239- )
242+ val input = connection.inputStream
243+ val tempFile = File .createTempFile(" review_img_" , " .jpg" , context.cacheDir)
240244
241- file.outputStream().use { output ->
242- input.copyTo(output)
243- }
244-
245- FileProvider .getUriForFile(
246- requireContext(),
247- " ${requireContext().packageName} .provider" ,
248- file
249- )
250- } catch (e: Exception ) {
251- null
245+ tempFile.outputStream().use { output ->
246+ input.copyTo(output)
252247 }
253- }
254248
249+ tempFile
250+ } catch (e: Exception ) {
251+ null
252+ }
253+ }
255254
256255 private fun requestPermission (onGranted : () -> Unit ) {
257256 if (Build .VERSION .SDK_INT >= 33 ) {
0 commit comments