diff --git a/application/tools/src/main/java/org/videolan/tools/Settings.kt b/application/tools/src/main/java/org/videolan/tools/Settings.kt index 2950063ef..32c199ded 100644 --- a/application/tools/src/main/java/org/videolan/tools/Settings.kt +++ b/application/tools/src/main/java/org/videolan/tools/Settings.kt @@ -28,6 +28,7 @@ object Settings : SingletonHolder({ init(it.applicat var videoDoubleTapJumpDelay = 10 var audioJumpDelay = 10 var audioLongJumpDelay = 20 + var audioShowTrackNumbers = MutableLiveData(false) var showHiddenFiles = false var showTrackNumber = true var tvFoldersFirst = true @@ -54,6 +55,7 @@ object Settings : SingletonHolder({ init(it.applicat videoDoubleTapJumpDelay = prefs.getInt(KEY_VIDEO_DOUBLE_TAP_JUMP_DELAY, 10) audioJumpDelay = prefs.getInt(KEY_AUDIO_JUMP_DELAY, 10) audioLongJumpDelay = prefs.getInt(KEY_AUDIO_LONG_JUMP_DELAY, 20) + audioShowTrackNumbers.postValue(prefs.getBoolean(KEY_AUDIO_SHOW_TRACK_NUMBERS, false)) showHiddenFiles = prefs.getBoolean(BROWSER_SHOW_HIDDEN_FILES, !tvUI) showTrackNumber = prefs.getBoolean(ALBUMS_SHOW_TRACK_NUMBER, true) tvFoldersFirst = prefs.getBoolean(TV_FOLDERS_FIRST, true) @@ -115,6 +117,7 @@ const val KEY_VIDEO_DOUBLE_TAP_JUMP_DELAY = "video_double_tap_jump_delay" const val KEY_AUDIO_JUMP_DELAY = "audio_jump_delay" const val KEY_AUDIO_LONG_JUMP_DELAY = "audio_long_jump_delay" const val KEY_AUDIO_FORCE_SHUFFLE = "audio_force_shuffle" +const val KEY_AUDIO_SHOW_TRACK_NUMBERS = "audio_show_track_numbers" // AudioPlayer diff --git a/application/vlc-android/res/layout/playlist_item.xml b/application/vlc-android/res/layout/playlist_item.xml index 968b8af2c..4ce37114e 100644 --- a/application/vlc-android/res/layout/playlist_item.xml +++ b/application/vlc-android/res/layout/playlist_item.xml @@ -35,6 +35,10 @@ name="stopAfterThis" type="java.lang.Boolean" /> + + @@ -98,6 +102,22 @@ app:layout_constraintStart_toStartOf="@+id/coverImage" app:layout_constraintTop_toTopOf="@+id/coverImage" /> + + diff --git a/application/vlc-android/res/xml/preferences_audio_controls.xml b/application/vlc-android/res/xml/preferences_audio_controls.xml index 83602c22d..4b559ca06 100644 --- a/application/vlc-android/res/xml/preferences_audio_controls.xml +++ b/application/vlc-android/res/xml/preferences_audio_controls.xml @@ -5,12 +5,8 @@ android:key="video_category" android:title="@string/video_prefs_category"> - + + + + + + + + + + + diff --git a/application/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.kt b/application/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.kt index 4fc55bb94..678ca0aa9 100644 --- a/application/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.kt +++ b/application/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.kt @@ -31,7 +31,6 @@ import android.support.v4.media.session.PlaybackStateCompat import android.text.Editable import android.text.TextWatcher import android.text.format.DateFormat -import android.util.Log import android.view.LayoutInflater import android.view.MotionEvent import android.view.View @@ -230,6 +229,12 @@ class AudioPlayer : Fragment(), PlaylistAdapter.IPlayer, TextWatcher, IAudioPlay playlistModel.service?.manageAbRepeatStep(binding.abRepeatReset, binding.abRepeatStop, binding.abRepeatContainer, abRepeatAddMarker) } + Settings.audioShowTrackNumbers.observe(viewLifecycleOwner) { showTrackNumbers -> + playlistAdapter.showTrackNumbers = showTrackNumbers + (binding.songsList.layoutManager as? LinearLayoutManager)?.let { + playlistAdapter.notifyItemRangeChanged(it.findFirstVisibleItemPosition(), it.findLastCompletelyVisibleItemPosition()) + } + } abRepeatAddMarker.setOnClickListener { playlistModel.service?.playlistManager?.setABRepeatValue(playlistModel.service?.playlistManager?.getCurrentMedia(), binding.timeline.progress.toLong()) diff --git a/application/vlc-android/src/org/videolan/vlc/gui/audio/PlaylistAdapter.kt b/application/vlc-android/src/org/videolan/vlc/gui/audio/PlaylistAdapter.kt index bc1bd97a5..532ed5fac 100644 --- a/application/vlc-android/src/org/videolan/vlc/gui/audio/PlaylistAdapter.kt +++ b/application/vlc-android/src/org/videolan/vlc/gui/audio/PlaylistAdapter.kt @@ -71,6 +71,7 @@ private const val ACTION_MOVED = "action_moved" class PlaylistAdapter(private val player: IPlayer) : DiffUtilAdapter(), SwipeDragHelperAdapter, SchedulerCallback { + var showTrackNumbers: Boolean = false private var defaultCoverVideo: BitmapDrawable private var defaultCoverAudio: BitmapDrawable private var model: PlaylistModel? = null @@ -130,6 +131,7 @@ class PlaylistAdapter(private val player: IPlayer) : DiffUtilAdapter { Settings.audioLongJumpDelay = sharedPreferences.getInt(KEY_AUDIO_LONG_JUMP_DELAY, 20) } + KEY_AUDIO_SHOW_TRACK_NUMBERS -> { + Settings.audioShowTrackNumbers.postValue(sharedPreferences.getBoolean(KEY_AUDIO_SHOW_TRACK_NUMBERS, false)) + } } Settings.onAudioControlsChanged() } diff --git a/application/vlc-android/src/org/videolan/vlc/util/Kextensions.kt b/application/vlc-android/src/org/videolan/vlc/util/Kextensions.kt index ffc607234..d6e5da05c 100644 --- a/application/vlc-android/src/org/videolan/vlc/util/Kextensions.kt +++ b/application/vlc-android/src/org/videolan/vlc/util/Kextensions.kt @@ -157,6 +157,7 @@ fun FragmentActivity.share(medias: List) = lifecycleScope.launch { fun MediaWrapper?.isMedia() = this != null && (type == MediaWrapper.TYPE_AUDIO || type == MediaWrapper.TYPE_VIDEO) fun MediaWrapper?.isBrowserMedia() = this != null && (isMedia() || type == MediaWrapper.TYPE_DIR || type == MediaWrapper.TYPE_PLAYLIST) +fun MediaWrapper.trackNumberText() = if (trackNumber > 0) "$trackNumber." else "" fun Context.getAppSystemService(name: String) = applicationContext.getSystemService(name)!!