Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 5c642b8a authored by Sebastiano Barezzi's avatar Sebastiano Barezzi Committed by Luca Stefani
Browse files

Twelve: Implement MediaStore rescan button

Almost useless, but some people push their audio files with ADB...

Change-Id: I53ec93993ae9c50a3755ab6af0c086f024e1ec4a
parent 662b706e
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -146,6 +146,7 @@ class SettingsActivity : AppCompatActivity(R.layout.activity_settings) {
    class RootSettingsFragment : SettingsFragment(R.xml.root_preferences) {
        // Preferences
        private val enableOffload by lazy { findPreference<SwitchPreference>(ENABLE_OFFLOAD_KEY)!! }
        private val rescanMediaStore by lazy { findPreference<Preference>("rescan_media_store")!! }
        private val resetLocalStats by lazy { findPreference<Preference>("reset_local_stats")!! }
        private val skipSilence by lazy { findPreference<SwitchPreference>(SKIP_SILENCE_KEY)!! }

@@ -170,6 +171,11 @@ class SettingsActivity : AppCompatActivity(R.layout.activity_settings) {
                showResetLocalStatsDialog()
                true
            }

            rescanMediaStore.setOnPreferenceClickListener {
                showRescanMediaStoreDialog()
                true
            }
        }

        private fun showResetLocalStatsDialog() {
@@ -191,5 +197,23 @@ class SettingsActivity : AppCompatActivity(R.layout.activity_settings) {
                .setNegativeButton(android.R.string.cancel) { _, _ -> /* Do nothing */ }
                .show()
        }

        private fun showRescanMediaStoreDialog() {
            val context = requireActivity()
            MaterialAlertDialogBuilder(context)
                .setTitle(R.string.rescan_media_store_confirm_title)
                .setMessage(R.string.rescan_media_store_confirm_message)
                .setPositiveButton(R.string.rescan_media_store_confirm_positive) { _, _ ->
                    viewModel.rescanMediaStore()

                    Toast.makeText(
                        context,
                        R.string.rescan_media_store_started,
                        Toast.LENGTH_SHORT
                    ).show()
                }
                .setNegativeButton(android.R.string.cancel) { _, _ -> /* Do nothing */ }
                .show()
        }
    }
}
+17 −0
Original line number Diff line number Diff line
@@ -6,14 +6,22 @@
package org.lineageos.twelve.viewmodels

import android.app.Application
import android.media.MediaScannerConnection
import android.os.storage.StorageManager
import androidx.annotation.OptIn
import androidx.core.os.bundleOf
import androidx.media3.common.util.UnstableApi
import androidx.media3.session.MediaController
import org.lineageos.twelve.ext.applicationContext
import org.lineageos.twelve.services.PlaybackService
import org.lineageos.twelve.services.PlaybackService.CustomCommand.Companion.sendCustomCommand

class SettingsViewModel(application: Application) : TwelveViewModel(application) {
    // System services
    private val storageManager by lazy {
        applicationContext.getSystemService(StorageManager::class.java)
    }

    @OptIn(UnstableApi::class)
    suspend fun toggleOffload(offload: Boolean) {
        withMediaController {
@@ -42,6 +50,15 @@ class SettingsViewModel(application: Application) : TwelveViewModel(application)
        mediaRepository.resetLocalStats()
    }

    fun rescanMediaStore() {
        MediaScannerConnection.scanFile(
            applicationContext,
            storageManager.storageVolumes.mapNotNull { it.directory?.absolutePath }.toTypedArray(),
            null,
            null,
        )
    }

    private suspend fun withMediaController(block: suspend MediaController.() -> Unit) {
        mediaController.value?.let {
            block(it)
+7 −0
Original line number Diff line number Diff line
@@ -183,6 +183,13 @@
    <string name="reset_local_stats_confirm_positive">Reset</string>
    <string name="reset_local_stats_success">Local media playback statistics have been reset</string>

    <!-- Rescan MediaStore -->
    <string name="rescan_media_store">Trigger a MediaStore database rescan</string>
    <string name="rescan_media_store_confirm_title">Rescan MediaStore database</string>
    <string name="rescan_media_store_confirm_message">Would you like to trigger a MediaStore database rescan? This might fix missing local media items</string>
    <string name="rescan_media_store_confirm_positive">Rescan</string>
    <string name="rescan_media_store_started">MediaStore rescan started</string>

    <!-- Experimental preferences -->
    <string name="split_local_devices">Split local devices</string>
    <string name="split_local_devices_summary">If enabled, internal storage and external devices (SD cards, USB devices, etc.) will appear under different providers</string>
+5 −0
Original line number Diff line number Diff line
@@ -42,6 +42,11 @@
            app:key="reset_local_stats"
            app:title="@string/reset_local_stats" />

        <Preference
            app:iconSpaceReserved="false"
            app:key="rescan_media_store"
            app:title="@string/rescan_media_store" />

    </PreferenceCategory>

    <PreferenceCategory