From 757baf34355ded7e0d614faa093873161dfb9640 Mon Sep 17 00:00:00 2001 From: Duncan McNamara Date: Wed, 18 Sep 2024 15:59:35 +0200 Subject: [PATCH] VlcMigration: move obsolete version helpers --- .../org/videolan/television/ui/FileTvItemAdapter.kt | 3 ++- .../videolan/television/ui/MediaTvItemAdapter.kt | 3 ++- .../television/ui/browser/TvAdapterUtils.kt | 6 +++--- .../src/org/videolan/vlc/PlaybackService.kt | 2 +- .../vlc/gui/AudioPlayerContainerActivity.kt | 4 ++-- .../vlc/gui/browser/StorageBrowserFragment.kt | 4 ++-- .../src/org/videolan/vlc/gui/helpers/BitmapUtil.kt | 4 ++-- .../src/org/videolan/vlc/gui/helpers/UiTools.kt | 13 +++++++------ .../vlc/gui/helpers/hf/WriteExternalDelegate.kt | 4 ++-- .../videolan/vlc/gui/video/VideoPlayerActivity.kt | 7 ++++--- .../vlc/gui/video/VideoPlayerOverlayDelegate.kt | 2 +- .../videolan/vlc/providers/FileBrowserProvider.kt | 3 ++- .../src/org/videolan/vlc/util/FileUtils.kt | 3 ++- .../src/org/videolan/vlc/util/Permissions.kt | 3 ++- .../src/org/videolan/vlc/util/VoiceSearchParams.kt | 4 ++-- .../src/org/videolan/vlc/VlcMigrationHelper.java | 8 ++++++++ .../src/org/videolan/vlc/VlcMigrationHelper.java | 4 ++++ 17 files changed, 48 insertions(+), 29 deletions(-) diff --git a/application/television/src/main/java/org/videolan/television/ui/FileTvItemAdapter.kt b/application/television/src/main/java/org/videolan/television/ui/FileTvItemAdapter.kt index 9c7196096..8dea62ef3 100644 --- a/application/television/src/main/java/org/videolan/television/ui/FileTvItemAdapter.kt +++ b/application/television/src/main/java/org/videolan/television/ui/FileTvItemAdapter.kt @@ -22,6 +22,7 @@ import org.videolan.television.databinding.MediaBrowserTvItemBinding import org.videolan.television.databinding.MediaBrowserTvItemListBinding import org.videolan.television.ui.browser.TvAdapterUtils import org.videolan.tools.Settings +import org.videolan.vlc.VlcMigrationHelper import org.videolan.vlc.gui.DiffUtilAdapter import org.videolan.vlc.gui.helpers.getBitmapFromDrawable import org.videolan.vlc.gui.helpers.getMediaIconDrawable @@ -154,7 +155,7 @@ class FileTvItemAdapter(private val eventsHandler: IEventsHandler drawable.bitmap - drawable is VectorDrawableCompat || (AndroidUtil.isLolliPopOrLater && drawable is VectorDrawable) -> { + drawable is VectorDrawableCompat || (VlcMigrationHelper.isLolliPopOrLater && drawable is VectorDrawable) -> { val bitmap = if (width > 0 && height > 0) Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) else 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 4831dcd92..33b131ab6 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 @@ -92,6 +92,7 @@ import org.videolan.vlc.BuildConfig.VLC_VERSION_NAME import org.videolan.vlc.MediaParsingService import org.videolan.vlc.R import org.videolan.vlc.StartActivity +import org.videolan.vlc.VlcMigrationHelper import org.videolan.vlc.gui.* import org.videolan.vlc.gui.browser.MediaBrowserFragment import org.videolan.vlc.gui.dialogs.* @@ -292,7 +293,7 @@ object UiTools { fun snacker(activity:Activity, message: String) { val view = getSnackAnchorView(activity) ?: return val snack = Snackbar.make(view, message, Snackbar.LENGTH_SHORT) - if (AndroidUtil.isLolliPopOrLater) + if (VlcMigrationHelper.isLolliPopOrLater) snack.view.elevation = view.resources.getDimensionPixelSize(R.dimen.audio_player_elevation).toFloat() snack.show() } @@ -306,7 +307,7 @@ object UiTools { val snack = Snackbar.make(view, message, Snackbar.LENGTH_LONG) .setAction(confirmMessage) { action.invoke() } if (overAudioPlayer) snack.setAnchorView(R.id.time) - if (AndroidUtil.isLolliPopOrLater) + if (VlcMigrationHelper.isLolliPopOrLater) snack.view.elevation = view.resources.getDimensionPixelSize(R.dimen.audio_player_elevation).toFloat() snack.show() } @@ -316,7 +317,7 @@ object UiTools { val view = getSnackAnchorView(activity) ?: return val snack = Snackbar.make(view, message, Snackbar.LENGTH_LONG) .setAction(R.string.ok) { launch { action.invoke() } } - if (AndroidUtil.isLolliPopOrLater) + if (VlcMigrationHelper.isLolliPopOrLater) snack.view.elevation = view.resources.getDimensionPixelSize(R.dimen.audio_player_elevation).toFloat() snack.show() } @@ -333,7 +334,7 @@ object UiTools { sHandler.removeCallbacks(action) cancelAction.invoke() } - if (AndroidUtil.isLolliPopOrLater) + if (VlcMigrationHelper.isLolliPopOrLater) snack.view.elevation = view.resources.getDimensionPixelSize(R.dimen.audio_player_elevation).toFloat() if (overAudioPlayer) snack.setAnchorView(R.id.time) snack.show() @@ -354,7 +355,7 @@ object UiTools { PreferencesActivity.launchWithPref(activity, "include_missing") } } - if (AndroidUtil.isLolliPopOrLater) + if (VlcMigrationHelper.isLolliPopOrLater) snack.view.elevation = view.resources.getDimensionPixelSize(R.dimen.audio_player_elevation).toFloat() snack.show() } @@ -812,7 +813,7 @@ object UiTools { @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) fun setRotationAnimation(activity: Activity) { - if (!AndroidUtil.isJellyBeanMR2OrLater) return + if (!VlcMigrationHelper.isJellyBeanMR2OrLater) return val win = activity.window val winParams = win.attributes winParams.rotationAnimation = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS else WindowManager.LayoutParams.ROTATION_ANIMATION_JUMPCUT diff --git a/application/vlc-android/src/org/videolan/vlc/gui/helpers/hf/WriteExternalDelegate.kt b/application/vlc-android/src/org/videolan/vlc/gui/helpers/hf/WriteExternalDelegate.kt index 787b01900..64910140f 100644 --- a/application/vlc-android/src/org/videolan/vlc/gui/helpers/hf/WriteExternalDelegate.kt +++ b/application/vlc-android/src/org/videolan/vlc/gui/helpers/hf/WriteExternalDelegate.kt @@ -15,12 +15,12 @@ import androidx.documentfile.provider.DocumentFile import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import kotlinx.coroutines.launch -import org.videolan.libvlc.util.AndroidUtil import org.videolan.resources.AndroidDevices import org.videolan.tools.AppScope import org.videolan.tools.Settings import org.videolan.tools.putSingle import org.videolan.vlc.R +import org.videolan.vlc.VlcMigrationHelper import org.videolan.vlc.util.FileUtils class WriteExternalDelegate : BaseHeadlessFragment() { @@ -104,7 +104,7 @@ class WriteExternalDelegate : BaseHeadlessFragment() { fun needsWritePermission(uri: Uri) : Boolean { val path = uri.path ?: return false - return AndroidUtil.isLolliPopOrLater && ("file" == uri.scheme || uri.scheme == null) + return VlcMigrationHelper.isLolliPopOrLater && ("file" == uri.scheme || uri.scheme == null) && path.isNotEmpty() && path.startsWith('/') && !path.startsWith(AndroidDevices.EXTERNAL_PUBLIC_DIRECTORY) && !(FileUtils.findFile(uri)?.canWrite() ?: false) diff --git a/application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.kt index 3bb1c4d04..8884ede5a 100644 --- a/application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.kt +++ b/application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.kt @@ -178,6 +178,7 @@ import org.videolan.tools.setVisible import org.videolan.vlc.BuildConfig import org.videolan.vlc.PlaybackService import org.videolan.vlc.R +import org.videolan.vlc.VlcMigrationHelper import org.videolan.vlc.getAllTracks import org.videolan.vlc.getSelectedVideoTrack import org.videolan.vlc.gui.DialogActivity @@ -330,7 +331,7 @@ open class VideoPlayerActivity : AppCompatActivity(), PlaybackService.Callback, @TargetApi(Build.VERSION_CODES.KITKAT_WATCH) get() { val pm = applicationContext.getSystemService()!! - return if (AndroidUtil.isLolliPopOrLater) pm.isInteractive else pm.isScreenOn + return if (VlcMigrationHelper.isLolliPopOrLater) pm.isInteractive else pm.isScreenOn } val playlistObserver = Observer> { mediaWrappers -> if (mediaWrappers != null) overlayDelegate.playlistAdapter.update(mediaWrappers) } @@ -672,7 +673,7 @@ open class VideoPlayerActivity : AppCompatActivity(), PlaybackService.Callback, * @return the flag corresponding to the gesture the user wants to use */ private fun generateTouchFlags() = if (!isTv) { - val audioTouch = (!AndroidUtil.isLolliPopOrLater || !audiomanager.isVolumeFixed) && settings.getBoolean(ENABLE_VOLUME_GESTURE, true) + val audioTouch = (!VlcMigrationHelper.isLolliPopOrLater || !audiomanager.isVolumeFixed) && settings.getBoolean(ENABLE_VOLUME_GESTURE, true) val brightnessTouch = !AndroidDevices.isChromeBook && settings.getBoolean(ENABLE_BRIGHTNESS_GESTURE, true) ((if (audioTouch) TOUCH_FLAG_AUDIO_VOLUME else 0) + (if (brightnessTouch) TOUCH_FLAG_BRIGHTNESS else 0) @@ -2283,7 +2284,7 @@ open class VideoPlayerActivity : AppCompatActivity(), PlaybackService.Callback, @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) fun getScreenOrientation(mode: PlayerOrientationMode): Int { return if (!mode.locked) { - if (AndroidUtil.isJellyBeanMR2OrLater) + if (VlcMigrationHelper.isJellyBeanMR2OrLater) ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR else ActivityInfo.SCREEN_ORIENTATION_SENSOR diff --git a/application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerOverlayDelegate.kt b/application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerOverlayDelegate.kt index 08b3f1eaf..1f253737f 100644 --- a/application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerOverlayDelegate.kt +++ b/application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerOverlayDelegate.kt @@ -381,7 +381,7 @@ class VideoPlayerOverlayDelegate (private val player: VideoPlayerActivity) { if (dim || player.isLocked) { player.window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) navbar = navbar or (View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LOW_PROFILE or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) - if (AndroidUtil.isKitKatOrLater) visibility = visibility or View.SYSTEM_UI_FLAG_IMMERSIVE + if (VlcMigrationHelper.isKitKatOrLater) visibility = visibility or View.SYSTEM_UI_FLAG_IMMERSIVE visibility = visibility or View.SYSTEM_UI_FLAG_FULLSCREEN } else { player.window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) diff --git a/application/vlc-android/src/org/videolan/vlc/providers/FileBrowserProvider.kt b/application/vlc-android/src/org/videolan/vlc/providers/FileBrowserProvider.kt index d3a17f0ff..9bcc68b11 100644 --- a/application/vlc-android/src/org/videolan/vlc/providers/FileBrowserProvider.kt +++ b/application/vlc-android/src/org/videolan/vlc/providers/FileBrowserProvider.kt @@ -36,6 +36,7 @@ import org.videolan.resources.AndroidDevices import org.videolan.tools.livedata.LiveDataset import org.videolan.vlc.ExternalMonitor import org.videolan.vlc.R +import org.videolan.vlc.VlcMigrationHelper import org.videolan.vlc.gui.helpers.hf.StoragePermissionsDelegate import org.videolan.vlc.gui.helpers.hf.getDocumentFiles import org.videolan.vlc.repository.DirectoryRepository @@ -92,7 +93,7 @@ open class FileBrowserProvider( dataset.value = arrayListOf() return } - if (AndroidUtil.isLolliPopOrLater && !ExternalMonitor.devices.isEmpty()) { + if (VlcMigrationHelper.isLolliPopOrLater && !ExternalMonitor.devices.isEmpty()) { val otg = MLServiceLocator.getAbstractMediaWrapper("otg://".toUri()).apply { title = context.getString(R.string.otg_device_title) type = MediaWrapper.TYPE_DIR diff --git a/application/vlc-android/src/org/videolan/vlc/util/FileUtils.kt b/application/vlc-android/src/org/videolan/vlc/util/FileUtils.kt index 96add03bb..e7d564b0f 100644 --- a/application/vlc-android/src/org/videolan/vlc/util/FileUtils.kt +++ b/application/vlc-android/src/org/videolan/vlc/util/FileUtils.kt @@ -47,6 +47,7 @@ import org.videolan.resources.util.isExternalStorageManager import org.videolan.tools.* import org.videolan.vlc.BuildConfig import org.videolan.vlc.R +import org.videolan.vlc.VlcMigrationHelper import org.videolan.vlc.media.MediaUtils import java.io.* import java.lang.Runnable @@ -228,7 +229,7 @@ object FileUtils { @WorkerThread fun deleteFile(uri: Uri): Boolean { - if (isExternalStorageManager() || !AndroidUtil.isLolliPopOrLater || uri.path!!.startsWith(AndroidDevices.EXTERNAL_PUBLIC_DIRECTORY)) return deleteFile(uri.path) + if (isExternalStorageManager() || !VlcMigrationHelper.isLolliPopOrLater || uri.path!!.startsWith(AndroidDevices.EXTERNAL_PUBLIC_DIRECTORY)) return deleteFile(uri.path) val docFile = findFile(uri) if (docFile != null) try { diff --git a/application/vlc-android/src/org/videolan/vlc/util/Permissions.kt b/application/vlc-android/src/org/videolan/vlc/util/Permissions.kt index 4fd9c2c81..306bf0482 100644 --- a/application/vlc-android/src/org/videolan/vlc/util/Permissions.kt +++ b/application/vlc-android/src/org/videolan/vlc/util/Permissions.kt @@ -52,6 +52,7 @@ import org.videolan.tools.isCallable import org.videolan.tools.putSingle import org.videolan.vlc.BuildConfig import org.videolan.vlc.R +import org.videolan.vlc.VlcMigrationHelper import org.videolan.vlc.gui.helpers.hf.StoragePermissionsDelegate.Companion.askStoragePermission import org.videolan.vlc.gui.helpers.hf.WriteExternalDelegate @@ -317,7 +318,7 @@ object Permissions { askWriteStoragePermission(activity, false, callback) return false } - } else if (AndroidUtil.isLolliPopOrLater && WriteExternalDelegate.needsWritePermission(uri)) { + } else if (VlcMigrationHelper.isLolliPopOrLater && WriteExternalDelegate.needsWritePermission(uri)) { WriteExternalDelegate.askForExtWrite(activity, uri, callback) return false } diff --git a/application/vlc-android/src/org/videolan/vlc/util/VoiceSearchParams.kt b/application/vlc-android/src/org/videolan/vlc/util/VoiceSearchParams.kt index f3bb01a8d..a255fc1dc 100644 --- a/application/vlc-android/src/org/videolan/vlc/util/VoiceSearchParams.kt +++ b/application/vlc-android/src/org/videolan/vlc/util/VoiceSearchParams.kt @@ -25,7 +25,7 @@ package org.videolan.vlc.util import android.os.Bundle import android.provider.MediaStore -import org.videolan.libvlc.util.AndroidUtil +import org.videolan.vlc.VlcMigrationHelper class VoiceSearchParams(val query: String, extras: Bundle?) { var isAny: Boolean = false @@ -47,7 +47,7 @@ class VoiceSearchParams(val query: String, extras: Bundle?) { } else if (extras == null || !extras.containsKey(MediaStore.EXTRA_MEDIA_FOCUS)) { isUnstructured = true } else { - val genreKey = if (AndroidUtil.isLolliPopOrLater) + val genreKey = if (VlcMigrationHelper.isLolliPopOrLater) MediaStore.EXTRA_MEDIA_GENRE else "android.intent.extra.genre" diff --git a/medialibrary/vlc3/src/org/videolan/vlc/VlcMigrationHelper.java b/medialibrary/vlc3/src/org/videolan/vlc/VlcMigrationHelper.java index 4027585f7..025e50ca6 100644 --- a/medialibrary/vlc3/src/org/videolan/vlc/VlcMigrationHelper.java +++ b/medialibrary/vlc3/src/org/videolan/vlc/VlcMigrationHelper.java @@ -24,6 +24,10 @@ package org.videolan.vlc; +import static org.videolan.libvlc.util.AndroidUtil.isMarshMallowOrLater; + +import android.os.Build; + import org.videolan.libvlc.interfaces.IMedia; import java.util.ArrayList; @@ -37,4 +41,8 @@ public class VlcMigrationHelper { } return result; } + + public static final boolean isLolliPopOrLater = isMarshMallowOrLater || android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; + public static final boolean isKitKatOrLater = isLolliPopOrLater || android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; + public static final boolean isJellyBeanMR2OrLater = isKitKatOrLater || android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2; } diff --git a/medialibrary/vlc4/src/org/videolan/vlc/VlcMigrationHelper.java b/medialibrary/vlc4/src/org/videolan/vlc/VlcMigrationHelper.java index 861c67b43..9d125e7a3 100644 --- a/medialibrary/vlc4/src/org/videolan/vlc/VlcMigrationHelper.java +++ b/medialibrary/vlc4/src/org/videolan/vlc/VlcMigrationHelper.java @@ -38,4 +38,8 @@ public class VlcMigrationHelper { } return Arrays.asList(tracks); } + + public static final boolean isLolliPopOrLater = true; + public static final boolean isKitKatOrLater = true; + public static final boolean isJellyBeanMR2OrLater = true; }