From 003bbb9e639cd393b1422e28d7ba9a001d535780 Mon Sep 17 00:00:00 2001 From: Raymond Yang Date: Tue, 2 Apr 2024 13:55:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3FileProvider=E5=8F=96?= =?UTF-8?q?=E5=BE=97=E7=9A=84contentUri=EF=BC=8C=E5=9C=A8=E4=B8=8B?= =?UTF-8?q?=E6=AC=A1=E4=BD=BF=E7=94=A8=E6=99=82=E5=A4=B1=E6=95=88=E7=9A=84?= =?UTF-8?q?=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floatingwindow/ui/SettingActivity.kt | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/ray650128/floatingwindow/ui/SettingActivity.kt b/app/src/main/java/com/ray650128/floatingwindow/ui/SettingActivity.kt index 9690a21..df24b87 100644 --- a/app/src/main/java/com/ray650128/floatingwindow/ui/SettingActivity.kt +++ b/app/src/main/java/com/ray650128/floatingwindow/ui/SettingActivity.kt @@ -9,6 +9,7 @@ import android.os.Bundle import android.provider.MediaStore import android.util.Log import android.view.View +import android.webkit.MimeTypeMap import android.widget.AdapterView import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity @@ -20,6 +21,7 @@ import com.ray650128.floatingwindow.utils.DensityUtil import com.ray650128.floatingwindow.utils.FloatingWindowHelperUtils import com.ray650128.floatingwindow.utils.PreferenceUtil import com.ray650128.floatingwindow.view.ValueEditor +import java.io.File class SettingActivity : AppCompatActivity() { @@ -52,15 +54,16 @@ class SettingActivity : AppCompatActivity() { private val galleryLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode == Activity.RESULT_OK) { val data = result.data - imageUri = data?.data + val returnUri = data?.data ?: return@registerForActivityResult + imageUri = saveImageToCache(returnUri) Glide.with(this).load(imageUri).into(binding.imgPreview) - FloatingWindowHelperUtils.setIcon(windowIcon, imageUri) + FloatingWindowHelperUtils.setIcon(windowIcon, Uri.parse(imageUri)) //workingCheckItemAdapter.setImageUri(currentPosition, currentUri) //checkPassButton() } } - private var imageUri: Uri? = null + private var imageUri: String? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -72,7 +75,7 @@ class SettingActivity : AppCompatActivity() { yOffset = PreferenceUtil.yOffset windowGravity = FloatingWindowHelperUtils.GravityType.fromInt(PreferenceUtil.gravity) windowIcon = FloatingWindowHelperUtils.IconType.fromInt(PreferenceUtil.icon) - imageUri = if (PreferenceUtil.iconPath.isNullOrEmpty()) null else { + if (!PreferenceUtil.iconPath.isNullOrEmpty()) { Uri.parse(PreferenceUtil.iconPath) } @@ -94,7 +97,7 @@ class SettingActivity : AppCompatActivity() { onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { windowIcon = FloatingWindowHelperUtils.IconType.fromIndex(position) - FloatingWindowHelperUtils.setIcon(windowIcon, imageUri) + FloatingWindowHelperUtils.setIcon(windowIcon, Uri.parse(imageUri)) if (windowIcon == FloatingWindowHelperUtils.IconType.CUSTOM) { imgPreview.isVisible = true btnPickPhoto.isVisible = true @@ -205,7 +208,7 @@ class SettingActivity : AppCompatActivity() { PreferenceUtil.yOffset = yOffset PreferenceUtil.gravity = windowGravity.type PreferenceUtil.icon = windowIcon.value - PreferenceUtil.iconPath = imageUri?.toString() + PreferenceUtil.iconPath = imageUri finish() } @@ -230,4 +233,23 @@ class SettingActivity : AppCompatActivity() { val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI) galleryLauncher.launch(intent) } + + private fun saveImageToCache(uri: Uri?): String? { + if (uri == null) return null + val inputStream = contentResolver.openInputStream(uri) + inputStream?.use { input -> + val extension = getFileExtension(uri.toString()) + val outputFile = File(cacheDir, "custom.$extension") + outputFile.outputStream().use { output -> + input.copyTo(output) + } + return outputFile.absolutePath + } + return null + } + + private fun getFileExtension(uri: String): String { + return MimeTypeMap.getSingleton().getExtensionFromMimeType(contentResolver.getType(Uri.parse(uri))) + ?: "jpg" // Default extension + } } \ No newline at end of file