From 2f4d6f54c0a6a61ae4cd9b0daa236fb71aeee177 Mon Sep 17 00:00:00 2001 From: Marcel Dopita Date: Sat, 7 Sep 2024 13:34:59 +0200 Subject: [PATCH] Trigger MediaScanner scans when using MediaStore --- app/build.gradle | 2 +- .../player/MediaStoreChooserActivity.java | 1 + .../java/com/brouken/player/PlayerActivity.java | 14 ++++++++++++-- app/src/main/java/com/brouken/player/Utils.java | 17 +++++++++++++++++ app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 7 files changed, 34 insertions(+), 6 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5a8e9177..2dc25f8b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { applicationId "com.brouken.player" minSdkVersion 21 targetSdkVersion 34 - versionCode 169 + versionCode 170 versionName "0.${versionCode}" archivesBaseName = "Just.Player.v${versionName}" } diff --git a/app/src/main/java/com/brouken/player/MediaStoreChooserActivity.java b/app/src/main/java/com/brouken/player/MediaStoreChooserActivity.java index 426e4390..70fedf0c 100644 --- a/app/src/main/java/com/brouken/player/MediaStoreChooserActivity.java +++ b/app/src/main/java/com/brouken/player/MediaStoreChooserActivity.java @@ -76,6 +76,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { @RequiresApi(api = Build.VERSION_CODES.R) private void start() { if (bucketId == null) { + Utils.scanMediaStorage(this); showBuckets(); } else { showFiles(bucketId); diff --git a/app/src/main/java/com/brouken/player/PlayerActivity.java b/app/src/main/java/com/brouken/player/PlayerActivity.java index 185a5015..c57ac635 100644 --- a/app/src/main/java/com/brouken/player/PlayerActivity.java +++ b/app/src/main/java/com/brouken/player/PlayerActivity.java @@ -694,6 +694,12 @@ public void onAnimationEnd(Animator animation) { }); } }); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + if (useMediaStore()) { + Utils.scanMediaStorage(this); + } + } } @Override @@ -1597,9 +1603,13 @@ private void enableRotation() { } } - private void openFile(Uri pickerInitialUri) { + boolean useMediaStore() { final int targetSdkVersion = getApplicationContext().getApplicationInfo().targetSdkVersion; - if ((isTvBox && Build.VERSION.SDK_INT >= 30 && targetSdkVersion >= 30 && mPrefs.fileAccess.equals("auto")) || mPrefs.fileAccess.equals("mediastore")) { + return (isTvBox && Build.VERSION.SDK_INT >= 30 && targetSdkVersion >= 30 && mPrefs.fileAccess.equals("auto")) || mPrefs.fileAccess.equals("mediastore"); + } + + private void openFile(Uri pickerInitialUri) { + if (useMediaStore()) { Intent intent = new Intent(this, MediaStoreChooserActivity.class); startActivityForResult(intent, REQUEST_CHOOSER_VIDEO_MEDIASTORE); } else if ((isTvBox && mPrefs.fileAccess.equals("auto")) || mPrefs.fileAccess.equals("legacy")) { diff --git a/app/src/main/java/com/brouken/player/Utils.java b/app/src/main/java/com/brouken/player/Utils.java index fd8a981f..41b967fa 100644 --- a/app/src/main/java/com/brouken/player/Utils.java +++ b/app/src/main/java/com/brouken/player/Utils.java @@ -19,10 +19,13 @@ import android.content.res.Resources; import android.database.Cursor; import android.media.AudioManager; +import android.media.MediaScannerConnection; import android.net.Uri; import android.os.Build; import android.os.Environment; import android.os.LocaleList; +import android.os.storage.StorageManager; +import android.os.storage.StorageVolume; import android.provider.DocumentsContract; import android.provider.OpenableColumns; import android.util.Log; @@ -705,4 +708,18 @@ public static void orderByValue(LinkedHashMap m, final Comparator storageVolumes = storageManager.getStorageVolumes(); + List storagePaths = new ArrayList<>(); + for (StorageVolume volume : storageVolumes) { + File directory = volume.getDirectory(); + if (directory != null) { + storagePaths.add(directory.getAbsolutePath()); + } + } + MediaScannerConnection.scanFile(context, storagePaths.toArray(new String[0]), new String[]{"*/*"}, null); + } } diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index d838b197..1add7f57 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -38,7 +38,7 @@ Obraz v obraze Přístup k souborům Automaticky - Nebyly nalezeny žádné video soubory. Pro přístup k video souborům v daném úložišti, povolte automatické vyhledávání médii v systémovém nastavení. + Nebyly nalezeny žádné video soubory Nebezpečné ⚠️ Změna voleb v této kategorii může rozbít přehrávání normálně fungujícího obsahu Zkratky diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index c64cc0d4..7e9de5f5 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -34,7 +34,7 @@ Bild-im-Bild Automatisch Dateizugriff - Keine indizierten Videodateien gefunden. Um auf Videodateien im angegebenen Speicher zuzugreifen, aktivieren Sie die automatische Mediensuche in den Systemeinstellungen. + Keine Videodateien gefunden Verknüpfungen Untertitel-Einstellungen Gerätedecoder bevorzugen (Standard) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1b0e1329..511466aa 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -39,7 +39,7 @@ Picture-in-picture File access Auto - No indexed video files found. To access video files in given storage, enable automatic media scanning in system settings. + No video files found Dangerous ⚠️ Switching options in this category may break playback of normally compatible content Shortcuts