diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7b462a6f..8d021466 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,6 +7,7 @@
+
+ if (!isGranted) {
+ MaterialAlertDialogBuilder(this)
+ .setMessage(R.string.write_permission_download_pic)
+ .setNegativeButton(android.R.string.ok) { _, _ -> }
+ .show()
+ }
+ }
private fun activateCommenter() {
//Activate commenter
binding.submitComment.setOnClickListener {
diff --git a/app/src/main/java/org/pixeldroid/app/posts/StatusViewHolder.kt b/app/src/main/java/org/pixeldroid/app/posts/StatusViewHolder.kt
index 0c4ff821..b77cf62c 100644
--- a/app/src/main/java/org/pixeldroid/app/posts/StatusViewHolder.kt
+++ b/app/src/main/java/org/pixeldroid/app/posts/StatusViewHolder.kt
@@ -4,10 +4,13 @@ import android.annotation.SuppressLint
import android.app.Activity
import android.content.ClipData
import android.content.Intent
+import android.content.pm.PackageManager.PERMISSION_DENIED
+import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.graphics.Typeface
import android.graphics.drawable.AnimatedVectorDrawable
import android.graphics.drawable.Drawable
import android.net.Uri
+import android.os.Build
import android.os.Looper
import android.text.method.LinkMovementMethod
import android.util.Log
@@ -16,6 +19,7 @@ import android.view.Menu
import android.view.View
import android.view.ViewGroup
import android.widget.*
+import androidx.activity.result.ActivityResultLauncher
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.core.view.WindowCompat
@@ -70,7 +74,11 @@ class StatusViewHolder(val binding: PostFragmentBinding) : RecyclerView.ViewHold
private var status: Status? = null
- fun bind(status: Status?, pixelfedAPI: PixelfedAPIHolder, db: AppDatabase, lifecycleScope: LifecycleCoroutineScope, displayDimensionsInPx: Pair, isActivity: Boolean = false) {
+ fun bind(
+ status: Status?, pixelfedAPI: PixelfedAPIHolder, db: AppDatabase,
+ lifecycleScope: LifecycleCoroutineScope, displayDimensionsInPx: Pair,
+ requestPermissionDownloadPic: ActivityResultLauncher, isActivity: Boolean = false
+ ) {
this.itemView.visibility = View.VISIBLE
this.status = status
@@ -99,7 +107,7 @@ class StatusViewHolder(val binding: PostFragmentBinding) : RecyclerView.ViewHold
setupPost(picRequest, user.instance_uri, isActivity)
- activateButtons(pixelfedAPI, db, lifecycleScope, isActivity)
+ activateButtons(pixelfedAPI, db, lifecycleScope, isActivity, requestPermissionDownloadPic)
}
@@ -227,6 +235,7 @@ class StatusViewHolder(val binding: PostFragmentBinding) : RecyclerView.ViewHold
db: AppDatabase,
lifecycleScope: LifecycleCoroutineScope,
isActivity: Boolean,
+ requestPermissionDownloadPic: ActivityResultLauncher,
){
//Set the special HTML text
setDescription(apiHolder, lifecycleScope)
@@ -256,7 +265,7 @@ class StatusViewHolder(val binding: PostFragmentBinding) : RecyclerView.ViewHold
showComments(lifecycleScope, isActivity)
- activateMoreButton(apiHolder, db, lifecycleScope)
+ activateMoreButton(apiHolder, db, lifecycleScope, requestPermissionDownloadPic)
}
private fun activateReblogger(
@@ -358,7 +367,12 @@ class StatusViewHolder(val binding: PostFragmentBinding) : RecyclerView.ViewHold
return null
}
- private fun activateMoreButton(apiHolder: PixelfedAPIHolder, db: AppDatabase, lifecycleScope: LifecycleCoroutineScope){
+ private fun activateMoreButton(
+ apiHolder: PixelfedAPIHolder,
+ db: AppDatabase,
+ lifecycleScope: LifecycleCoroutineScope,
+ requestPermissionDownloadPic: ActivityResultLauncher
+ ){
var bookmarked: Boolean? = null
binding.statusMore.setOnClickListener {
PopupMenu(it.context, it).apply {
@@ -396,12 +410,18 @@ class StatusViewHolder(val binding: PostFragmentBinding) : RecyclerView.ViewHold
true
}
R.id.post_more_menu_save_to_gallery -> {
+ // Check permissions on old Android versions: on new versions it is not
+ // needed when storing a file.
+ if(Build.VERSION.SDK_INT < Build.VERSION_CODES.Q && ContextCompat.checkSelfPermission(binding.root.context, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PERMISSION_DENIED) {
+ requestPermissionDownloadPic.launch(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ } else {
status?.downloadImage(
binding.root.context,
status?.media_attachments?.getOrNull(binding.postPager.currentItem)?.url
?: "",
binding.root
)
+ }
true
}
diff --git a/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/postFeeds/PostFeedFragment.kt b/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/postFeeds/PostFeedFragment.kt
index ba65353c..40a76c83 100644
--- a/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/postFeeds/PostFeedFragment.kt
+++ b/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/postFeeds/PostFeedFragment.kt
@@ -74,6 +74,7 @@ class PostFeedFragment: CachedFeedFragment() {
return view
}
+
inner class PostsAdapter(private val displayDimensionsInPx: Pair) : PagingDataAdapter(
object : DiffUtil.ItemCallback() {
override fun areItemsTheSame (oldItem: T, newItem: T): Boolean = oldItem.id == newItem.id
@@ -94,7 +95,9 @@ class PostFeedFragment: CachedFeedFragment() {
)
val uiModel = getItem(position) as Status?
uiModel?.let {
- (holder as StatusViewHolder).bind(it, apiHolder, db, lifecycleScope, displayDimensionsInPx)
+ (holder as StatusViewHolder).bind(
+ it, apiHolder, db, lifecycleScope, displayDimensionsInPx, requestPermissionDownloadPic
+ )
}
}
}
diff --git a/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/UncachedPostsFragment.kt b/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/UncachedPostsFragment.kt
index 2d26b4b3..61c71cb5 100644
--- a/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/UncachedPostsFragment.kt
+++ b/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/UncachedPostsFragment.kt
@@ -85,7 +85,9 @@ class UncachedPostsFragment : UncachedFeedFragment() {
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
getItem(position)?.let {
- (holder as StatusViewHolder).bind(it, apiHolder, db, lifecycleScope, displayDimensionsInPx)
+ (holder as StatusViewHolder).bind(
+ it, apiHolder, db, lifecycleScope, displayDimensionsInPx, requestPermissionDownloadPic
+ )
}
}
}
diff --git a/app/src/main/java/org/pixeldroid/app/profile/ProfileFeedFragment.kt b/app/src/main/java/org/pixeldroid/app/profile/ProfileFeedFragment.kt
index 5e473f24..558a95d4 100644
--- a/app/src/main/java/org/pixeldroid/app/profile/ProfileFeedFragment.kt
+++ b/app/src/main/java/org/pixeldroid/app/profile/ProfileFeedFragment.kt
@@ -178,8 +178,10 @@ class ProfileFeedFragment : UncachedFeedFragment() {
deleteFromCollection
)
} else {
- (holder as StatusViewHolder).bind(it as Status, apiHolder, db,
- lifecycleScope, requireContext().displayDimensionsInPx())
+ (holder as StatusViewHolder).bind(
+ it as Status, apiHolder, db, lifecycleScope,
+ requireContext().displayDimensionsInPx(), requestPermissionDownloadPic
+ )
}
}
diff --git a/app/src/main/java/org/pixeldroid/app/utils/BaseFragment.kt b/app/src/main/java/org/pixeldroid/app/utils/BaseFragment.kt
index edac820a..e415ccb7 100644
--- a/app/src/main/java/org/pixeldroid/app/utils/BaseFragment.kt
+++ b/app/src/main/java/org/pixeldroid/app/utils/BaseFragment.kt
@@ -1,7 +1,10 @@
package org.pixeldroid.app.utils
import android.os.Bundle
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.fragment.app.Fragment
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import org.pixeldroid.app.R
import org.pixeldroid.app.utils.db.AppDatabase
import org.pixeldroid.app.utils.di.PixelfedAPIHolder
import javax.inject.Inject
@@ -22,4 +25,18 @@ open class BaseFragment: Fragment() {
(requireActivity().application as PixelDroidApplication).getAppComponent().inject(this)
}
+ internal val requestPermissionDownloadPic =
+ registerForActivityResult(
+ ActivityResultContracts.RequestPermission()
+ ) { isGranted: Boolean ->
+ if (!isGranted) {
+ context?.let {
+ MaterialAlertDialogBuilder(it)
+ .setMessage(R.string.write_permission_download_pic)
+ .setNegativeButton(android.R.string.ok) { _, _ -> }
+ .show()
+ }
+
+ }
+ }
}
diff --git a/app/src/main/java/org/pixeldroid/app/utils/api/objects/Status.kt b/app/src/main/java/org/pixeldroid/app/utils/api/objects/Status.kt
index 5ce0664f..34941389 100644
--- a/app/src/main/java/org/pixeldroid/app/utils/api/objects/Status.kt
+++ b/app/src/main/java/org/pixeldroid/app/utils/api/objects/Status.kt
@@ -1,8 +1,10 @@
package org.pixeldroid.app.utils.api.objects
+import android.Manifest.permission.WRITE_EXTERNAL_STORAGE
import android.app.DownloadManager
import android.content.Context
import android.content.Intent
+import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.database.Cursor
import android.net.Uri
import android.os.Environment
@@ -11,6 +13,7 @@ import androidx.core.net.toUri
import com.google.android.material.snackbar.Snackbar
import org.pixeldroid.app.R
import org.pixeldroid.app.posts.getDomain
+import org.pixeldroid.app.utils.getMimeType
import java.io.File
import java.io.Serializable
import java.time.Instant
@@ -148,11 +151,13 @@ open class Status(
)
val file = path.toUri()
+
+
val shareIntent: Intent = Intent.createChooser(Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_STREAM, file)
flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
- type = "image/$ext"
+ type = file.getMimeType(context.contentResolver)
}, null)
context.startActivity(shareIntent)
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 510d9624..2dfec527 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -52,7 +52,6 @@
التعليق: تم نشر%1$s!
خطأ في التعليق!
مشاركة الصورة
- يجب عليك منح تصريح للكتابة قصد مشاركة الصور!
تحتاج إلى منح إذن الكتابة لتنزيل الصور!
لا يجب ان يكون التعليق فارغًا!
نُشِر في %1$s
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index 6ecfc72d..a81ee98e 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -60,7 +60,6 @@
Comentari: %1$s publicat!
Error de comentari!
Compartir imatge
- Necessites concedir permís d’escriptura per compartir imatges!
Has de concedir permís d’escriptura per baixar imatges!
El comentari no ha de estar buit!
Publica\'t el %1$s
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index ea85fa7a..88d77011 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -69,7 +69,6 @@
Zveřejněno na %1$s
U tohoto příspěvku nejsou žádné komentáře…
Komentář nesmí být prázdný!
- Pro sdílení obrázků musíte udělit práva k zápisu!
Sdílet obrázek
Chyba komentáře!
Komentář: %1$s zveřejněn!
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 587ac99d..03514ac0 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -79,7 +79,6 @@
Feed konnte nicht geladen werden
Erstellt am %1$s
Für das Herunterladen von Bildern müssen Sie eine Schreibgenehmigung erteilen!
- Für die Teilen von Bildern müssen Sie eine Schreibgenehmigung erteilen!
Konnte den Folgestatus nicht erhalten
Wiederholen
Hier gibt\'s nichts zu sehen!
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 297e113d..7fad8794 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -64,7 +64,6 @@
¡Comentario: %1$s publicado!
¡Error al comentar!
Compartir imagen
- ¡Tienes que dar permiso de escritura para compartir fotos!
¡Tienes que dar permiso de escritura para descargar fotos!
¡Los comentarios no deben estar vacíos!
Publicado en %1$s
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index 788e049f..ce7fae28 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -76,7 +76,6 @@
Ezin izan da jarraipen-botoia erakutsi
Ezin izan da segimendu-egoera lortu
Iruzkin
- Idazteko baimena eman behar duzu argazkiak partekatzeko!
%1$s(e)n argitaratua
TRAOLAK
KONTUAK
diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index 7b201667..f192bce7 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -56,7 +56,6 @@
منتشر شده در %1$s
نظر نمیتواند خالی باشد!
برای بارگیری تصاویر بایستی مجوز نوشتن را بدهید!
- برای همرسانی تصاویر باید مجوز نوشتن را بدهید!
همرسانی تصویر
خطا در درج نظر!
نظر: %1$s منتشر کرد!
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 66eb3f89..3165ff80 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -49,8 +49,7 @@
Téléversement de la publication avec succès
Publié le %1$s
Le commentaire ne doit pas être vide !
- Vous devez accorder une autorisation d\'écriture pour partager des photos !
- -
+ -
\nAbonné·e·s
Le téléversement de la publication a échoué
Une erreur s\'est produite lors du chargement
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index c7364f98..cbc31679 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -61,7 +61,6 @@
Comentario: %1$s publicado!
Fallo ao comentar!
Compartir Imaxe
- Tes que dar permiso de escritura para compartir fotos!
Tes que conceder permiso de escritura para descargar fotos!
O comentario non debe quedar baleiro!
Publicado o %1$s
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index f1937fe4..8e95e3de 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -106,7 +106,6 @@
Hozzászólás: %1$s közzétéve!
Hozzászólási hiba!
Kép megosztása
- Írási engedélyt kell adnia a képek megosztásához!
Írási engedélyt kell adnia a képek letöltéséhez!
A hozzászólás nem lehet üres!
Nincsenek hozzászólások a bejegyzésnél…
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 75ab0e7b..a169bc81 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -53,7 +53,6 @@
Nessuna descrizione
Postato su %1$s
Il commento non deve essere vuoto!
- È necessario concedere i permessi di scrittura per condividere le immagini!
Condividi immagine
Errore nel commento!
Commento: %1$s postato!
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 02c8f4bf..4e880f9c 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -39,7 +39,6 @@
インスタンス情報が取得できませんでした
%1$s の投稿
アカウント
- 画像を共有するためには書き込みの権限を更新する必要があります
画像をダウンロードするには書き込みの権限を更新する必要があります
コメントは空欄にできません
コメント: %1$s が投稿されました
diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml
index 96f33b7f..cc77e097 100644
--- a/app/src/main/res/values-ml/strings.xml
+++ b/app/src/main/res/values-ml/strings.xml
@@ -100,7 +100,6 @@
എപിഐ ഈ ഇൻസ്റ്റൻസിൽ സജീവമല്ലാ.ഇത് സജീവമാക്കാൻ നിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക.
ഫീഡ് ലഭ്യമാക്കാൻ സാധിച്ചില്ല
ചിത്രങ്ങൾ ഡൗൺലോഡ് ചെയ്യാൻ നിങ്ങൾ എഴുത്ത് അനുമതി നൽകണം!
- ചിത്രങ്ങൾ പങ്കിടാൻ നിങ്ങൾ എഴുത്ത് അനുമതി നൽകണം!
- %d
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 0e9ac476..380e0241 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -70,7 +70,6 @@
Commentaar: %1$s gepost!
Fout met commentaar!
Afbeelding delen
- Je moet schrijven toestaan om afbeeldingen te delen!
Je moet schrijven toestaan om afbeeldingen te downloaden!
Kon volgstatus niet ophalen
Kon niet volgen
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 153f7c45..8a7aea9f 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -40,7 +40,6 @@
Bez opisu
Opublikowano %1$s
Komentarz nie może być pusty!
- Musisz nadać uprawnienia do zapisu, aby móc udostępniać obrazki!
Udostępnij
Błąd komentarza!
Komentarz: %1$s opublikowany!
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 65b4b545..2e5c4a66 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -146,7 +146,6 @@
Mudar para visualização em grade
Comentário: %1$s publicado!
Erro no comentário!
- Você precisa conceder permissão de gravação para compartilhar imagens!
Idioma
Excluir esta publicação\?
Algo deu errado…
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 5148923e..62e8b80c 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -84,7 +84,6 @@
Partilhar imagem
Erro ao comentar!
Precisa adicionar a permissão para transferir imagens!
- Precisa adicionar permissão para partilhar imagens!
Comentário: %1$s publicou!
Comentário
Adicionar um comentário
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 03a0bc40..7397d272 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -42,7 +42,6 @@
Ошибка комментирования!
Поделиться изображением
Вам необходимо предоставить разрешение на запись чтобы скачивать фотографии!
- Вы должны дать разрешение на запись чтобы делиться фотографиями!
Комментарий не должен быть пустым!
Опубликовано в %1$s
Описание отсутствует
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index b2d31285..1f24c51d 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -64,7 +64,6 @@
Kommentar: %1$s inlagd!
Kommentarsfel!
Dela bild
- Du måste tillåta skrivrättigheter för att dela bilder!
Du måste tillåta skrivrättigheter för att ladda ned bilder!
Kommentaren får inte vara tom!
Inlagt på %1$s
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index e3afb58a..3694f106 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -165,7 +165,6 @@
Поширити зображення
%1$s хвалить ваш допис
Файлу %1$s не знайдено
- Для поширення зображень потрібен дозвіл на запис!
Помилка вивантаження: хибний формат зображення.
Відписатись
Не вдалося вивантажити медіа, повторіть спробу чи перевірте мережне з\'єднання
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index a3da612e..66815d5f 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -64,7 +64,6 @@
评论: %1$s 已发布!
评论错误!
分享图像
- 您需要允许读写权限才能共享图片!
您需要允许读写权限才能下载图片!
评论不能为空!
发表于 %1$s
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d154a3a5..b2eb5ec2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -150,7 +150,6 @@ For more info about Pixelfed, you can check here: https://pixelfed.org"
No comments on this post…
Comment must not be empty!
You need to grant write permission to download pictures!
- You need to grant write permission to share pictures!
Share Image
Comment error!
"Comment: %1$s posted!"