[Android] Missing media: snackbar and settings shortcut
Nicolas Pomepuy
git at videolan.org
Thu Jun 10 09:40:57 UTC 2021
vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Tue Feb 23 07:40:59 2021 +0100| [be9e3868181f8beb89a8998b2b8fb34731a3624b] | committer: Nicolas Pomepuy
Missing media: snackbar and settings shortcut
> https://code.videolan.org/videolan/vlc-android/commit/be9e3868181f8beb89a8998b2b8fb34731a3624b
---
application/resources/src/main/res/values/strings.xml | 3 +++
application/vlc-android/res/xml/preferences_ui.xml | 7 +++++++
.../org/videolan/vlc/gui/audio/AudioBrowserFragment.kt | 5 +++++
.../src/org/videolan/vlc/gui/helpers/UiTools.kt | 16 ++++++++++++++++
.../videolan/vlc/gui/preferences/PreferencesFragment.kt | 4 +++-
.../org/videolan/vlc/gui/preferences/PreferencesUi.kt | 1 +
.../videolan/vlc/viewmodels/mobile/VideosViewModel.kt | 5 +++++
7 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/application/resources/src/main/res/values/strings.xml b/application/resources/src/main/res/values/strings.xml
index 3a5a26472..37d441445 100644
--- a/application/resources/src/main/res/values/strings.xml
+++ b/application/resources/src/main/res/values/strings.xml
@@ -800,6 +800,9 @@
<string name="enqueuing">Loading your medias</string>
<string name="soundfont">MIDI SoundFont</string>
<string name="soundfont_summary">Pick a SoundFont file to play midi audio tracks</string>
+ <string name="missing_media_snack">Media is missing. Hide all missing media?</string>
+ <string name="browser_show_missing_media">Show missing medias</string>
+ <string name="browser_show_missing_media_summary">Show distant medias event if they are not present</string>
<string name="search_prefs">Search settings</string>
<string name="preferred_resolution">Preferred video resolution</string>
<string name="preferred_resolution_summary">Maximum video quality for streams, when applicable, will be: %s</string>
diff --git a/application/vlc-android/res/xml/preferences_ui.xml b/application/vlc-android/res/xml/preferences_ui.xml
index 06a5549c8..c5b68b5d3 100644
--- a/application/vlc-android/res/xml/preferences_ui.xml
+++ b/application/vlc-android/res/xml/preferences_ui.xml
@@ -41,6 +41,13 @@
android:summary="@string/show_headers_summary"
android:title="@string/show_headers"/>
+ <CheckBoxPreference
+ app:singleLineTitle="false"
+ android:key="include_missing"
+ android:defaultValue="true"
+ android:summary="@string/browser_show_missing_media_summary"
+ android:title="@string/browser_show_missing_media"/>
+
<PreferenceCategory
android:title="@string/video"
android:key="ui_video_category">
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/audio/AudioBrowserFragment.kt b/application/vlc-android/src/org/videolan/vlc/gui/audio/AudioBrowserFragment.kt
index 477ec52d5..d01a5d206 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/audio/AudioBrowserFragment.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/audio/AudioBrowserFragment.kt
@@ -53,6 +53,7 @@ import org.videolan.vlc.gui.AudioPlayerContainerActivity
import org.videolan.vlc.gui.ContentActivity
import org.videolan.vlc.gui.PlaylistActivity
import org.videolan.vlc.gui.SecondaryActivity
+import org.videolan.vlc.gui.helpers.UiTools
import org.videolan.vlc.gui.view.EmptyLoadingState
import org.videolan.vlc.gui.view.RecyclerSectionItemGridDecoration
import org.videolan.vlc.media.MediaUtils
@@ -324,6 +325,10 @@ class AudioBrowserFragment : BaseAudioBrowser<AudioBrowserViewModel>() {
return
}
if (item.itemType == MediaLibraryItem.TYPE_MEDIA) {
+ if (item is MediaWrapper && !item.isPresent) {
+ UiTools.snackerMissing(requireActivity())
+ return
+ }
MediaUtils.openMedia(activity, item as MediaWrapper)
return
}
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/helpers/UiTools.kt b/application/vlc-android/src/org/videolan/vlc/gui/helpers/UiTools.kt
index 7951cf92c..4c6d65194 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/helpers/UiTools.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/helpers/UiTools.kt
@@ -83,6 +83,8 @@ import org.videolan.vlc.gui.dialogs.AddToGroupDialog
import org.videolan.vlc.gui.dialogs.SavePlaylistDialog
import org.videolan.vlc.gui.dialogs.VLCBillingDialog
import org.videolan.vlc.gui.dialogs.VideoTracksDialog
+import org.videolan.vlc.gui.preferences.EXTRA_PREF_END_POINT
+import org.videolan.vlc.gui.preferences.PreferencesActivity
import org.videolan.vlc.media.MediaUtils
import org.videolan.vlc.providers.medialibrary.MedialibraryProvider
import org.videolan.vlc.util.FileUtils
@@ -289,6 +291,20 @@ object UiTools {
return Snackbar.make(view, message, Snackbar.LENGTH_INDEFINITE)
}
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ fun snackerMissing(activity: Activity) {
+ val view = getSnackAnchorView(activity) ?: return
+ val snack = Snackbar.make(view, activity.getString(R.string.missing_media_snack), Snackbar.LENGTH_LONG)
+ .setAction(R.string.ok) {
+ val intent = Intent(activity, PreferencesActivity::class.java)
+ intent.putExtra(EXTRA_PREF_END_POINT, "include_missing")
+ activity.startActivityForResult(intent, ACTIVITY_RESULT_PREFERENCES)
+ }
+ if (AndroidUtil.isLolliPopOrLater)
+ snack.view.elevation = view.resources.getDimensionPixelSize(R.dimen.audio_player_elevation).toFloat()
+ snack.show()
+ }
+
/**
* Get a resource id from an attribute id.
*
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesFragment.kt b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesFragment.kt
index 0517f33e5..16cb92ac9 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesFragment.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesFragment.kt
@@ -60,7 +60,9 @@ class PreferencesFragment : BasePreferenceFragment(), SharedPreferences.OnShared
preferenceScreen.sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
}
-
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
findPreference<Preference>("extensions_category")?.isVisible = BuildConfig.DEBUG
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.kt b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.kt
index 8623aff7d..348ee4a89 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.kt
@@ -26,6 +26,7 @@ package org.videolan.vlc.gui.preferences
import android.content.SharedPreferences
import android.os.Bundle
import android.text.InputType
+import android.view.View
import androidx.appcompat.app.AppCompatDelegate
import androidx.preference.EditTextPreference
import androidx.preference.ListPreference
diff --git a/application/vlc-android/src/org/videolan/vlc/viewmodels/mobile/VideosViewModel.kt b/application/vlc-android/src/org/videolan/vlc/viewmodels/mobile/VideosViewModel.kt
index e55f8693b..4020b3e2d 100644
--- a/application/vlc-android/src/org/videolan/vlc/viewmodels/mobile/VideosViewModel.kt
+++ b/application/vlc-android/src/org/videolan/vlc/viewmodels/mobile/VideosViewModel.kt
@@ -34,6 +34,7 @@ import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.tools.FORCE_PLAY_ALL
import org.videolan.tools.Settings
import org.videolan.tools.isStarted
+import org.videolan.vlc.gui.helpers.UiTools
import org.videolan.vlc.gui.helpers.UiTools.addToPlaylist
import org.videolan.vlc.gui.video.VideoGridFragment
import org.videolan.vlc.media.MediaUtils
@@ -128,6 +129,10 @@ class VideosViewModel(context: Context, type: VideoGroupingType, val folder: Fol
internal fun playVideo(context: Activity?, mw: MediaWrapper, position: Int, fromStart: Boolean = false, forceAll:Boolean = false) {
if (context === null) return
+ if (!mw.isPresent) {
+ UiTools.snackerMissing(context)
+ return
+ }
mw.removeFlags(MediaWrapper.MEDIA_FORCE_AUDIO)
val settings = Settings.getInstance(context)
if (!fromStart && (settings.getBoolean(FORCE_PLAY_ALL, false) || forceAll)) {
More information about the Android
mailing list