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