From 1d23c3a45e62c47356a4ab09dd6cb8c814138ebb Mon Sep 17 00:00:00 2001 From: Josh Date: Sat, 23 Nov 2024 11:04:07 -0500 Subject: [PATCH 01/11] fix(Thumbnails): Use correct local id rather than remote id Fixes #13743 Signed-off-by: Josh --- .../com/owncloud/android/datamodel/ThumbnailsCacheManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java b/app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java index 0cadc34a19..96a5caf4ea 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -1400,7 +1400,7 @@ public final class ThumbnailsCacheManager { GetMethod getMethod = null; try { String uri = mClient.getBaseUri() + "/index.php/core/preview?fileId=" - + file.getRemoteId() + + file.getLocalId() + "&x=" + (pxW / 2) + "&y=" + (pxH / 2) + "&a=1&mode=cover&forceIcon=0"; Log_OC.d(TAG, "generate resized image: " + file.getFileName() + " URI: " + uri); getMethod = new GetMethod(uri); From f86238b0af3809fe635cce8662f2f750f06b0348 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Thu, 5 Dec 2024 03:33:02 +0000 Subject: [PATCH 02/11] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- app/src/main/res/values-eu/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 2 ++ app/src/main/res/values-ja-rJP/strings.xml | 34 ++++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 8ee414c991..0a164a89cc 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -758,6 +758,7 @@ Sinkronizatu DAVx5ekin Errorea bilaketaren emaitzak lortzean Partekatze segurua ez dago konfiguratuta erabiltzaile honentzat + Partekatze segurua... Hautatu dena Ezarri multimedia karpeta Hautatu txantiloi bat diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 0c3cb73849..a8a3707f2e 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -41,6 +41,7 @@ Désactiver les sites externes Désactiver le Multi-comptes Désactiver le partage + Forcer la protection Nom d\'hôte du proxy Port Proxy Affiche un widget du tableau de bord @@ -1068,6 +1069,7 @@ Veuillez patienter… Vérification des identifiants enregistrés Copie du fichier depuis le stockage privé + La modification de l\'extension peut entraîner l\'ouverture de ce fichier dans une application différente. Veuillez mettre à jour l\'application Android System WebView pour vous connecter Mise à jour Mettre à jour Android System WebView diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index d53a73d720..ee616d46ed 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -788,6 +788,7 @@ 画像を使用する ステータスを設定 メッセージを設定 + End-to-End 暗号化の設定中に、12語のランダムなニーモニックが表示されます。これは他のデバイスでファイルを開くために必要です。この情報はこのデバイスにのみ保存され、この画面で再表示することができます。安全な場所にメモしておいてください! 共有 リンクをコピーして共有 共有 @@ -809,6 +810,7 @@ リンクを共有(%1$s) 有効期限を設定 パスワードを設定 + セキュアファイルドロップ中は再共有できません。 パスワード保護 編集可能 ファイルを転送 @@ -817,6 +819,7 @@ 共有権限 %1$s (リモート) %1$s(会話) + ユーザ名、クラウド統合ID、またはEメールアドレス ... メールを送信 受取人への注意 設定 @@ -831,6 +834,7 @@ リンク経由で共有 %1$sと共有中 共有を追加できませんでした + 共有の追加に失敗しました。このファイルまたはフォルダはすでにその人物またはグループと共有されています。 写真を表示 動画を表示 他のサービスでサインアップ @@ -874,6 +878,7 @@ フルアクセス メディア読み取り専用 写真 + あなたの作業を強力に管理する、自己ホスト型の生産性向上プラットフォーム\n\n特徴:\n* あなたのサーバと同調した、分かりやすくモダンなインターフェース\n* あなたのNextcloudサーバーにファイルをアップロード\n* それらのファイルの共有\n* お気に入りのファイルやフォルダーをいつでも同期\n* サーバーのすべてのフォルダーをまとめて検索\n* 撮影した写真やビデオの自動アップロード\n* 更新の通知\n* 複数アカウントのサポート\n* 指紋やPIN認証であなたのデータに安全にアクセス\n* DAVx5 (旧称 DAVdroid) との統合によりカレンダー連絡先の同期を簡単にセットアップ\n\n問題の報告は https://github.com/nextcloud/android/issues 、アプリについての議論は https://help.nextcloud.com/c/clients/android まで\n\nNextcloudは初めてですか? Nextcloud は個人ファイルの同期共有とコミュニケーションのためのサーバです。無償のソフトウェアにより自分でホストをたてたり、そのための有償サービスを企業から受けることが出来ます。これにより、あなたの写真やカレンダー、連絡先、ドキュメントその他あらゆるファイルを自身でコントロールできます。\n\n詳細はNextcloud(https://nextcloud.com)まで。 あなたの作業を強力に管理する、自己ホスト型の生産性向上プラットフォーム。\nこれは公式の開発バージョンです。まだ十分なテストをしていない新しいサンプル機能を毎日提供しており、不安定な挙動やデータの消失を招く可能性があります。 このアプリはテストユーザーのためのもので、不具合が発生した場合にレポートを必要とします。 実業務では使用しないでください!\n\n公式開発の正規バージョンはF-droidからもインストールできます。 あなたの作業を強力に管理する、自己ホスト型の生産性向上プラットフォーム あなたの作業を強力に管理する、自己ホスト型の生産性向上プラットフォーム(開発プレビューバージョン) @@ -933,12 +938,19 @@ 永久に削除 ゴミ箱へのロードに失敗しました! ファイルを完全に削除できませんでした。 + すべてのフォルダで無効にする + 双方向同期フォルダを設定するには、該当フォルダの詳細タブで有効にしてください。 + 双方向同期が設定されていません 内部的な双方向同期 予期せぬエラーが発生しました + イベントが見つかりません。常に同期して更新できます。WEBにリダイレクトしています... + 連絡先が見つかりません。常に同期して更新できます。WEBにリダイレクトしています... + 検索結果を開くには権限が必要です。さもなければWEBにリダイレクトされます... ファイルのロックを解除 未読のコメントがあります 暗号化解除 お気に入りから削除 + 内部の双方向同期からフォルダを削除します このファイルまたはフォルダーの共有を解除する際にエラーが発生しました 共有を解除できません。ファイルがあるか確認してください。 ファイルの共有を解除 @@ -949,13 +961,19 @@ 共有を更新 共有の更新に失敗しました キャンセルされたアップロードのクリア + キャンセルされたアップロードを再開します 失敗したアップロードのクリア 失敗したアップロードを再試行する + いくつかのファイルがもう存在しません。これらのアップロードは再開できません。 全てのアップロードを一時停止 + すべてのアップロードを再開します ローカルファイルが作成できません アップロード… 他のアプリからコンテンツをアップロードする + 写真 + 写真またはビデオを撮影しますか? カメラからアップロード + ビデオ ファイル名 ファイルタイプ Googleマップショートカットファイル(%s) @@ -963,17 +981,21 @@ スニペットテキストファイル(.txt) アップロードするファイル名とファイルタイプを入力 アップロードファイル + すべてのアップロードが一時停止しています アイテムアクションのアップロードボタン 削除 アップロードは利用できません 何かコンテンツをアップロードするか、自動アップロードを有効にしてください。 + ヘッダーの展開を切り替え 競合の解決 ローカルストレージに空きがありません ローカルストレージへにファイルをコピーできませんでした フォルダのロックに失敗しました アップロードはユーザーによってキャンセルされました + %1$d / %2$d - %3$s 暗号化は、Android 5.0以降で使えます。 十分な空き容量が無い場合、選択したファイルは%1$sにコピーできません。コピーせず移動にしますか? + ストレージの割り当てを超過しました カメラから書類をスキャン 同期の競合が発生しました。手動で解決してください。 不明なエラー @@ -985,6 +1007,8 @@ 選択したアップロードするファイルが見つかりません。ファイルが存在するかどうか確認してください。 このファイルはアップロードできません アップロードするファイルはありません + ファイルが見つかりません。このファイルが存在することを確認するか、以前の競合が解決されていない可能性はありますか? + サーバ上でファイルを見つけられませんでした。別のユーザがファイルを削除した可能性があります フォルダー名 失敗したローカル ファイルのアップロードを再試行します アップロードフォルダーを選択 @@ -1024,6 +1048,7 @@ サーバーのバージョンを取得中… アプリが終了しました 完了 + 同じファイルがリモートに見つかったため、アップロードをスキップします 不明なエラー ウイルスが検出されました!アップロードを完了できません。 省電力モード解除待機中 @@ -1040,9 +1065,11 @@ プロフィールページに名前、写真、連絡先の詳細を追加します。 ユーザー名 ダウンロード + ビデオオーバーレイアイコン 少々お待ちください… 保存された資格情報をチェック プライベートストレージからファイルをコピー中 + 拡張子を変更すると、このファイルが異なるアプリケーションで開かれる可能性があります ログインするにはAndroidシステムのWebViewを更新してください 更新 AndroidシステムのWebViewをアップデート @@ -1050,11 +1077,18 @@ スキップ %1$sの新機能 あなたのステータスは? + ウィジェットは、ダッシュボードアプリが有効になっている場合、%1$s 25以降でのみ利用可能です 利用できません ファイルをダウンロード中… メールを送信 データ保存フォルダーが存在しません! これはバックアップの復元を違うデバイスで行ったためです。既定値に戻されています。データストレージフォルダーを調整するために設定を確認してください。 + + %d 時間 + + + %d 分 + %1$d 個のファイルを同期出ません (コンフリクト: %2$d) From 2b43c5279a43811a28b88216fd42cde3ab5adb8f Mon Sep 17 00:00:00 2001 From: alperozturk Date: Thu, 5 Dec 2024 09:43:18 +0100 Subject: [PATCH 03/11] fix infinite storage permission check Signed-off-by: alperozturk --- .../ui/activity/SyncedFoldersActivity.kt | 4 +- .../owncloud/android/utils/PermissionUtil.kt | 47 ++++++++++--------- app/src/main/res/values/strings.xml | 2 +- 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt index 98e11ff314..d18c26825c 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt @@ -191,6 +191,7 @@ class SyncedFoldersActivity : setTheme(R.style.FallbackThemingTheme) } binding.emptyList.emptyListViewAction.setOnClickListener { showHiddenItems() } + PermissionUtil.requestExternalStoragePermission(this, viewThemeUtils, true) } override fun onCreateOptionsMenu(menu: Menu): Boolean { @@ -808,9 +809,6 @@ class SyncedFoldersActivity : if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission was granted load(getItemsDisplayedPerFolder(), true) - } else { - // permission denied --> request again - PermissionUtil.requestExternalStoragePermission(this, viewThemeUtils, true) } } else -> super.onRequestPermissionsResult(requestCode, permissions, grantResults) diff --git a/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt b/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt index 1d85050e18..3f964cf7f2 100644 --- a/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt +++ b/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt @@ -99,6 +99,7 @@ object PermissionUtil { ActivityCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED } + // TODO rename function name to requestExternalStoragePermissionIfNeeded to prevent confusion /** * Request relevant external storage permission depending on SDK, if needed. * @@ -132,10 +133,6 @@ object PermissionUtil { } } - /** - * Request a storage permission - */ - // TODO inject this class to avoid passing ViewThemeUtils around private fun requestStoragePermission( activity: Activity, readOnly: Boolean, @@ -145,10 +142,8 @@ object PermissionUtil { val preferences: AppPreferences = AppPreferencesImpl.fromContext(activity) if (permissionRequired || !preferences.isStoragePermissionRequested) { - // determine required permissions val permissions = if (readOnly && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - // use granular media permissions arrayOf( Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.READ_MEDIA_VIDEO @@ -160,29 +155,39 @@ object PermissionUtil { arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE) } - fun doRequest() { - ActivityCompat.requestPermissions( - activity, - permissions, - PERMISSIONS_EXTERNAL_STORAGE - ) - preferences.isStoragePermissionRequested = true + val grantedPermissions = permissions.all { + ContextCompat.checkSelfPermission(activity, it) == PackageManager.PERMISSION_GRANTED } - // Check if we should show an explanation - if (permissions.any { shouldShowRequestPermissionRationale(activity, it) }) { - // Show explanation to the user and then request permission + if (grantedPermissions) { + // Permissions already granted, proceed with functionality + return + } + + val permanentlyDeniedPermissions = permissions.filter { + !ActivityCompat.shouldShowRequestPermissionRationale(activity, it) && + ContextCompat.checkSelfPermission(activity, it) != PackageManager.PERMISSION_GRANTED + } + + if (permissions.any { ActivityCompat.shouldShowRequestPermissionRationale(activity, it) } || + permanentlyDeniedPermissions.isNotEmpty() + ) { Snackbar.make( activity.findViewById(android.R.id.content), R.string.permission_storage_access, - Snackbar.LENGTH_INDEFINITE - ).setAction(R.string.common_ok) { - doRequest() + Snackbar.LENGTH_LONG + ).setAction(R.string.common_settings) { + val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { + data = Uri.fromParts("package", activity.packageName, null) + } + activity.startActivity(intent) }.also { viewThemeUtils.material.themeSnackbar(it) }.show() } else { - // No explanation needed, request the permission. - doRequest() + ActivityCompat.requestPermissions(activity, permissions, PERMISSIONS_EXTERNAL_STORAGE) } + + // Only mark as requested after actual request + preferences.isStoragePermissionRequested = true } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e48003d717..8442c6f812 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -16,6 +16,7 @@ Details Send Sort + Settings Sort by A - Z Z - A @@ -500,7 +501,6 @@ to create this file to upload to this folder The file is no longer available on the server - Updating data storage folder Preparing migration… Checking destination… From 52314d1989d2a9dfc3a77ad5277007ffc428a5b3 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Thu, 5 Dec 2024 09:45:19 +0100 Subject: [PATCH 04/11] todo comment Signed-off-by: alperozturk --- app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt b/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt index 3f964cf7f2..7be2e1b6dc 100644 --- a/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt +++ b/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt @@ -99,7 +99,7 @@ object PermissionUtil { ActivityCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED } - // TODO rename function name to requestExternalStoragePermissionIfNeeded to prevent confusion + // TODO: Rename the function to requestExternalStoragePermissionIfNeeded to avoid confusion. /** * Request relevant external storage permission depending on SDK, if needed. * From 82c50e2114c95b172cad64c9caf8796c98e24cfb Mon Sep 17 00:00:00 2001 From: alperozturk Date: Thu, 5 Dec 2024 09:46:06 +0100 Subject: [PATCH 05/11] fix dco Signed-off-by: alperozturk --- app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt b/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt index 7be2e1b6dc..bbe05107e5 100644 --- a/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt +++ b/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt @@ -99,6 +99,7 @@ object PermissionUtil { ActivityCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED } + // TODO: Rename the function to requestExternalStoragePermissionIfNeeded to avoid confusion. /** * Request relevant external storage permission depending on SDK, if needed. From 01a61ccca751dda88b196b87250343e36b5bbe9b Mon Sep 17 00:00:00 2001 From: alperozturk Date: Thu, 5 Dec 2024 09:46:49 +0100 Subject: [PATCH 06/11] fix dco Signed-off-by: alperozturk --- app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt b/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt index bbe05107e5..7be2e1b6dc 100644 --- a/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt +++ b/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt @@ -99,7 +99,6 @@ object PermissionUtil { ActivityCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED } - // TODO: Rename the function to requestExternalStoragePermissionIfNeeded to avoid confusion. /** * Request relevant external storage permission depending on SDK, if needed. From a61d6154406b2797ac118e64f26c78403e8f1d80 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Thu, 5 Dec 2024 09:54:41 +0100 Subject: [PATCH 07/11] change comment Signed-off-by: alperozturk --- app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt b/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt index 7be2e1b6dc..e18222f12a 100644 --- a/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt +++ b/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt @@ -160,7 +160,7 @@ object PermissionUtil { } if (grantedPermissions) { - // Permissions already granted, proceed with functionality + // Permissions already granted return } From 7e46856090748e3004f97dc54c92c28d0a2ad513 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Thu, 5 Dec 2024 09:59:51 +0100 Subject: [PATCH 08/11] change comment Signed-off-by: alperozturk --- app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt b/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt index e18222f12a..930bd192d3 100644 --- a/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt +++ b/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt @@ -99,7 +99,7 @@ object PermissionUtil { ActivityCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED } - // TODO: Rename the function to requestExternalStoragePermissionIfNeeded to avoid confusion. + // TODO Rename the function to requestExternalStoragePermissionIfNeeded to avoid confusion. /** * Request relevant external storage permission depending on SDK, if needed. * From 585dda35839b6133618eae6f97614fc7ae2ba79c Mon Sep 17 00:00:00 2001 From: alperozturk Date: Thu, 5 Dec 2024 11:57:34 +0100 Subject: [PATCH 09/11] revert logic changes Signed-off-by: alperozturk --- .../owncloud/android/utils/PermissionUtil.kt | 59 ++++++++++--------- app/src/main/res/values/strings.xml | 1 - 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt b/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt index 930bd192d3..71c2217d5f 100644 --- a/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt +++ b/app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt @@ -99,7 +99,6 @@ object PermissionUtil { ActivityCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED } - // TODO Rename the function to requestExternalStoragePermissionIfNeeded to avoid confusion. /** * Request relevant external storage permission depending on SDK, if needed. * @@ -133,6 +132,10 @@ object PermissionUtil { } } + /** + * Request a storage permission + */ + // TODO inject this class to avoid passing ViewThemeUtils around private fun requestStoragePermission( activity: Activity, readOnly: Boolean, @@ -142,8 +145,10 @@ object PermissionUtil { val preferences: AppPreferences = AppPreferencesImpl.fromContext(activity) if (permissionRequired || !preferences.isStoragePermissionRequested) { + // determine required permissions val permissions = if (readOnly && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + // use granular media permissions arrayOf( Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.READ_MEDIA_VIDEO @@ -155,39 +160,29 @@ object PermissionUtil { arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE) } - val grantedPermissions = permissions.all { - ContextCompat.checkSelfPermission(activity, it) == PackageManager.PERMISSION_GRANTED + fun doRequest() { + ActivityCompat.requestPermissions( + activity, + permissions, + PERMISSIONS_EXTERNAL_STORAGE + ) + preferences.isStoragePermissionRequested = true } - if (grantedPermissions) { - // Permissions already granted - return - } - - val permanentlyDeniedPermissions = permissions.filter { - !ActivityCompat.shouldShowRequestPermissionRationale(activity, it) && - ContextCompat.checkSelfPermission(activity, it) != PackageManager.PERMISSION_GRANTED - } - - if (permissions.any { ActivityCompat.shouldShowRequestPermissionRationale(activity, it) } || - permanentlyDeniedPermissions.isNotEmpty() - ) { + // Check if we should show an explanation + if (permissions.any { shouldShowRequestPermissionRationale(activity, it) }) { + // Show explanation to the user and then request permission Snackbar.make( activity.findViewById(android.R.id.content), R.string.permission_storage_access, - Snackbar.LENGTH_LONG - ).setAction(R.string.common_settings) { - val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { - data = Uri.fromParts("package", activity.packageName, null) - } - activity.startActivity(intent) + Snackbar.LENGTH_INDEFINITE + ).setAction(R.string.common_ok) { + doRequest() }.also { viewThemeUtils.material.themeSnackbar(it) }.show() } else { - ActivityCompat.requestPermissions(activity, permissions, PERMISSIONS_EXTERNAL_STORAGE) + // No explanation needed, request the permission. + doRequest() } - - // Only mark as requested after actual request - preferences.isStoragePermissionRequested = true } } @@ -256,10 +251,16 @@ object PermissionUtil { activity, listener ) - } - val dialogFragment = StoragePermissionDialogFragment.newInstance(permissionRequired) - dialogFragment.show(activity.supportFragmentManager, PERMISSION_CHOICE_DIALOG_TAG) + // Check if the dialog is already added to the FragmentManager. + val existingDialog = activity.supportFragmentManager.findFragmentByTag(PERMISSION_CHOICE_DIALOG_TAG) + + // Only show the dialog if it's not already shown. + if (existingDialog == null) { + val dialogFragment = StoragePermissionDialogFragment.newInstance(permissionRequired) + dialogFragment.show(activity.supportFragmentManager, PERMISSION_CHOICE_DIALOG_TAG) + } + } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8442c6f812..a441769e7a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -16,7 +16,6 @@ Details Send Sort - Settings Sort by A - Z Z - A From 2d711b9782b4ab188ae17492efb32fb7e34e76ba Mon Sep 17 00:00:00 2001 From: alperozturk Date: Thu, 5 Dec 2024 11:58:19 +0100 Subject: [PATCH 10/11] revert changes Signed-off-by: alperozturk --- app/src/main/res/values/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a441769e7a..e48003d717 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -500,6 +500,7 @@ to create this file to upload to this folder The file is no longer available on the server + Updating data storage folder Preparing migration… Checking destination… From 6ab6f7c46f6fd73529192d2789d3986602c6e7d9 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Thu, 5 Dec 2024 12:39:11 +0100 Subject: [PATCH 11/11] correct warning on delete/move Signed-off-by: tobiasKaminsky --- .../com/owncloud/android/ui/activity/FileDisplayActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java index bbcad936f2..955e3e8769 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -313,7 +313,8 @@ public class FileDisplayActivity extends FileActivity boolean showInfoDialog = false; for (SyncedFolder syncedFolder : syncedFolderProvider.getSyncedFolders()) { // move or delete after success - if (syncedFolder.getUploadAction() == 1 || syncedFolder.getUploadAction() == 2) { + if (syncedFolder.getUploadAction() == FileUploadWorker.LOCAL_BEHAVIOUR_MOVE || + syncedFolder.getUploadAction() == FileUploadWorker.LOCAL_BEHAVIOUR_DELETE) { showInfoDialog = true; break; }