From 4e7496a30093489cd4eb74b574cd6c1649981d06 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 24 Aug 2023 13:28:56 +0200 Subject: [PATCH] Try to export avatar as png --- .../habitica/ui/activities/BaseActivity.kt | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt index b551ea8a1..49ecab067 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt @@ -1,12 +1,17 @@ package com.habitrpg.android.habitica.ui.activities +import android.R.attr.bitmap +import android.R.attr.name +import android.content.ContentValues import android.content.Context import android.content.Intent import android.content.SharedPreferences import android.content.res.Configuration import android.graphics.Bitmap import android.net.Uri +import android.os.Build import android.os.Bundle +import android.os.Environment import android.provider.MediaStore import android.view.LayoutInflater import android.view.Menu @@ -16,6 +21,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.widget.Toolbar import androidx.core.content.ContextCompat +import androidx.core.net.toUri import androidx.lifecycle.lifecycleScope import androidx.preference.PreferenceManager import com.habitrpg.android.habitica.HabiticaApplication @@ -36,9 +42,13 @@ import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.LanguageHelper import com.habitrpg.common.habitica.helpers.launchCatching import kotlinx.coroutines.launch +import java.io.File +import java.io.FileOutputStream +import java.io.OutputStream import java.util.Date import javax.inject.Inject + abstract class BaseActivity : AppCompatActivity() { @Inject lateinit var notificationsManager: NotificationsManager @@ -232,11 +242,31 @@ abstract class BaseActivity : AppCompatActivity() { sharingIntent.putExtra(Intent.EXTRA_TEXT, message) } if (image != null) { - val path = MediaStore.Images.Media.insertImage(this.contentResolver, image, "${(Date())}", null) - if (path != null) { - val uri = Uri.parse(path) - sharingIntent.putExtra(Intent.EXTRA_STREAM, uri) + val fos: OutputStream + val uri: Uri + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val resolver = contentResolver + val contentValues = ContentValues() + contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, "${Date()}.png") + contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/png") + contentValues.put( + MediaStore.MediaColumns.RELATIVE_PATH, + Environment.DIRECTORY_PICTURES + ) + uri = + resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues) ?: return + fos = resolver.openOutputStream(uri) ?: return + } else { + val imagesDir = + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + .toString() + val file = File(imagesDir, "${Date()}.png") + uri = file.absoluteFile.toUri() + fos = FileOutputStream(file) } + image.compress(Bitmap.CompressFormat.PNG, 100, fos) + fos.close() + sharingIntent.putExtra(Intent.EXTRA_STREAM, uri) } startActivity(Intent.createChooser(sharingIntent, getString(R.string.share_using))) }