Merge remote-tracking branch 'upstream/master' into HEAD

This commit is contained in:
Bnyro 2023-02-01 18:05:17 +01:00
commit 0685e1c2d7
74 changed files with 358 additions and 137 deletions

View File

@ -12,12 +12,12 @@ import com.github.libretube.constants.BACKGROUND_CHANNEL_ID
import com.github.libretube.constants.DOWNLOAD_CHANNEL_ID import com.github.libretube.constants.DOWNLOAD_CHANNEL_ID
import com.github.libretube.constants.PUSH_CHANNEL_ID import com.github.libretube.constants.PUSH_CHANNEL_ID
import com.github.libretube.db.DatabaseHolder import com.github.libretube.db.DatabaseHolder
import com.github.libretube.util.ExceptionHandler
import com.github.libretube.helpers.ImageHelper import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NotificationHelper import com.github.libretube.helpers.NotificationHelper
import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.helpers.ProxyHelper import com.github.libretube.helpers.ProxyHelper
import com.github.libretube.helpers.ShortcutHelper import com.github.libretube.helpers.ShortcutHelper
import com.github.libretube.util.ExceptionHandler
class LibreTubeApp : Application() { class LibreTubeApp : Application() {
override fun onCreate() { override fun onCreate() {

View File

@ -17,9 +17,9 @@ import com.github.libretube.extensions.toID
import com.github.libretube.extensions.toLocalPlaylistItem import com.github.libretube.extensions.toLocalPlaylistItem
import com.github.libretube.extensions.toStreamItem import com.github.libretube.extensions.toStreamItem
import com.github.libretube.extensions.toastFromMainThread import com.github.libretube.extensions.toastFromMainThread
import com.github.libretube.obj.ImportPlaylist
import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.helpers.ProxyHelper import com.github.libretube.helpers.ProxyHelper
import com.github.libretube.obj.ImportPlaylist
import java.io.IOException import java.io.IOException
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async import kotlinx.coroutines.async

View File

@ -29,9 +29,9 @@ import com.github.libretube.extensions.awaitQuery
import com.github.libretube.extensions.query import com.github.libretube.extensions.query
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.extensions.toStreamItem import com.github.libretube.extensions.toStreamItem
import com.github.libretube.util.NowPlayingNotification
import com.github.libretube.helpers.PlayerHelper import com.github.libretube.helpers.PlayerHelper
import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams
import com.github.libretube.util.NowPlayingNotification
import com.github.libretube.util.PlayingQueue import com.github.libretube.util.PlayingQueue
import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.MediaItem import com.google.android.exoplayer2.MediaItem

View File

@ -25,14 +25,14 @@ import com.github.libretube.extensions.getContentLength
import com.github.libretube.extensions.query import com.github.libretube.extensions.query
import com.github.libretube.extensions.toDownloadItems import com.github.libretube.extensions.toDownloadItems
import com.github.libretube.extensions.toastFromMainThread import com.github.libretube.extensions.toastFromMainThread
import com.github.libretube.helpers.DownloadHelper
import com.github.libretube.helpers.DownloadHelper.getNotificationId
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.obj.DownloadStatus import com.github.libretube.obj.DownloadStatus
import com.github.libretube.receivers.NotificationReceiver import com.github.libretube.receivers.NotificationReceiver
import com.github.libretube.receivers.NotificationReceiver.Companion.ACTION_DOWNLOAD_PAUSE import com.github.libretube.receivers.NotificationReceiver.Companion.ACTION_DOWNLOAD_PAUSE
import com.github.libretube.receivers.NotificationReceiver.Companion.ACTION_DOWNLOAD_RESUME import com.github.libretube.receivers.NotificationReceiver.Companion.ACTION_DOWNLOAD_RESUME
import com.github.libretube.ui.activities.MainActivity import com.github.libretube.ui.activities.MainActivity
import com.github.libretube.helpers.DownloadHelper
import com.github.libretube.helpers.DownloadHelper.getNotificationId
import com.github.libretube.helpers.ImageHelper
import java.io.File import java.io.File
import java.net.HttpURLConnection import java.net.HttpURLConnection
import java.net.SocketTimeoutException import java.net.SocketTimeoutException

View File

@ -27,6 +27,12 @@ import com.github.libretube.constants.IntentData
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.databinding.ActivityMainBinding import com.github.libretube.databinding.ActivityMainBinding
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.helpers.NavBarHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.helpers.NetworkHelper
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.helpers.ThemeHelper
import com.github.libretube.helpers.WindowHelper
import com.github.libretube.services.ClosingService import com.github.libretube.services.ClosingService
import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.dialogs.ErrorDialog import com.github.libretube.ui.dialogs.ErrorDialog
@ -36,12 +42,6 @@ import com.github.libretube.ui.models.PlayerViewModel
import com.github.libretube.ui.models.SearchViewModel import com.github.libretube.ui.models.SearchViewModel
import com.github.libretube.ui.models.SubscriptionsViewModel import com.github.libretube.ui.models.SubscriptionsViewModel
import com.github.libretube.ui.tools.SleepTimer import com.github.libretube.ui.tools.SleepTimer
import com.github.libretube.helpers.NavBarHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.helpers.NetworkHelper
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.helpers.ThemeHelper
import com.github.libretube.helpers.WindowHelper
import com.google.android.material.elevation.SurfaceColors import com.google.android.material.elevation.SurfaceColors
class MainActivity : BaseActivity() { class MainActivity : BaseActivity() {

View File

@ -6,10 +6,10 @@ import androidx.activity.addCallback
import androidx.fragment.app.commit import androidx.fragment.app.commit
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.databinding.ActivityNointernetBinding import com.github.libretube.databinding.ActivityNointernetBinding
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.fragments.DownloadsFragment
import com.github.libretube.helpers.NavigationHelper import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.helpers.NetworkHelper import com.github.libretube.helpers.NetworkHelper
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.fragments.DownloadsFragment
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
class NoInternetActivity : BaseActivity() { class NoInternetActivity : BaseActivity() {

View File

@ -16,12 +16,12 @@ import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.enums.FileType import com.github.libretube.enums.FileType
import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.awaitQuery
import com.github.libretube.extensions.updateParameters import com.github.libretube.extensions.updateParameters
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.setAspectRatio
import com.github.libretube.ui.models.PlayerViewModel
import com.github.libretube.helpers.PlayerHelper import com.github.libretube.helpers.PlayerHelper
import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams
import com.github.libretube.helpers.WindowHelper import com.github.libretube.helpers.WindowHelper
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.setAspectRatio
import com.github.libretube.ui.models.PlayerViewModel
import com.google.android.exoplayer2.C import com.google.android.exoplayer2.C
import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.MediaItem import com.google.android.exoplayer2.MediaItem

View File

@ -7,8 +7,8 @@ import android.os.Bundle
import android.util.Log import android.util.Log
import com.github.libretube.constants.IntentData import com.github.libretube.constants.IntentData
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.helpers.NavigationHelper import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.util.TextUtils import com.github.libretube.util.TextUtils
class RouterActivity : BaseActivity() { class RouterActivity : BaseActivity() {

View File

@ -7,9 +7,9 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.api.obj.ChapterSegment import com.github.libretube.api.obj.ChapterSegment
import com.github.libretube.databinding.ChapterColumnBinding import com.github.libretube.databinding.ChapterColumnBinding
import com.github.libretube.ui.viewholders.ChaptersViewHolder
import com.github.libretube.helpers.ImageHelper import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.ThemeHelper import com.github.libretube.helpers.ThemeHelper
import com.github.libretube.ui.viewholders.ChaptersViewHolder
import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.ExoPlayer
class ChaptersAdapter( class ChaptersAdapter(

View File

@ -19,13 +19,13 @@ import com.github.libretube.api.obj.Comment
import com.github.libretube.constants.IntentData import com.github.libretube.constants.IntentData
import com.github.libretube.databinding.CommentsRowBinding import com.github.libretube.databinding.CommentsRowBinding
import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.formatShort
import com.github.libretube.ui.fragments.CommentsRepliesFragment
import com.github.libretube.ui.viewholders.CommentsViewHolder
import com.github.libretube.helpers.ClipboardHelper import com.github.libretube.helpers.ClipboardHelper
import com.github.libretube.helpers.ImageHelper import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.util.TextUtils
import com.github.libretube.helpers.ThemeHelper import com.github.libretube.helpers.ThemeHelper
import com.github.libretube.ui.fragments.CommentsRepliesFragment
import com.github.libretube.ui.viewholders.CommentsViewHolder
import com.github.libretube.util.TextUtils
class CommentsAdapter( class CommentsAdapter(
private val fragment: Fragment?, private val fragment: Fragment?,

View File

@ -14,9 +14,9 @@ import com.github.libretube.db.DatabaseHolder
import com.github.libretube.db.obj.DownloadWithItems import com.github.libretube.db.obj.DownloadWithItems
import com.github.libretube.extensions.formatAsFileSize import com.github.libretube.extensions.formatAsFileSize
import com.github.libretube.extensions.query import com.github.libretube.extensions.query
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.ui.activities.OfflinePlayerActivity import com.github.libretube.ui.activities.OfflinePlayerActivity
import com.github.libretube.ui.viewholders.DownloadsViewHolder import com.github.libretube.ui.viewholders.DownloadsViewHolder
import com.github.libretube.helpers.ImageHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.io.File import java.io.File

View File

@ -8,9 +8,9 @@ import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.databinding.AppIconItemBinding import com.github.libretube.databinding.AppIconItemBinding
import com.github.libretube.ui.viewholders.IconsSheetViewHolder
import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.helpers.ThemeHelper import com.github.libretube.helpers.ThemeHelper
import com.github.libretube.ui.viewholders.IconsSheetViewHolder
class IconsSheetAdapter : RecyclerView.Adapter<IconsSheetViewHolder>() { class IconsSheetAdapter : RecyclerView.Adapter<IconsSheetViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): IconsSheetViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): IconsSheetViewHolder {

View File

@ -5,11 +5,11 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.databinding.LegacySubscriptionChannelBinding import com.github.libretube.databinding.LegacySubscriptionChannelBinding
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.sheets.ChannelOptionsBottomSheet import com.github.libretube.ui.sheets.ChannelOptionsBottomSheet
import com.github.libretube.ui.viewholders.LegacySubscriptionViewHolder import com.github.libretube.ui.viewholders.LegacySubscriptionViewHolder
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
class LegacySubscriptionAdapter( class LegacySubscriptionAdapter(
private val subscriptions: List<com.github.libretube.api.obj.Subscription> private val subscriptions: List<com.github.libretube.api.obj.Subscription>

View File

@ -8,10 +8,10 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.databinding.QueueRowBinding import com.github.libretube.databinding.QueueRowBinding
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.ui.viewholders.PlayingQueueViewHolder
import com.github.libretube.helpers.ImageHelper import com.github.libretube.helpers.ImageHelper
import com.github.libretube.util.PlayingQueue
import com.github.libretube.helpers.ThemeHelper import com.github.libretube.helpers.ThemeHelper
import com.github.libretube.ui.viewholders.PlayingQueueViewHolder
import com.github.libretube.util.PlayingQueue
class PlayingQueueAdapter : RecyclerView.Adapter<PlayingQueueViewHolder>() { class PlayingQueueAdapter : RecyclerView.Adapter<PlayingQueueViewHolder>() {

View File

@ -13,13 +13,13 @@ import com.github.libretube.databinding.VideoRowBinding
import com.github.libretube.enums.PlaylistType import com.github.libretube.enums.PlaylistType
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.setFormattedDuration import com.github.libretube.ui.extensions.setFormattedDuration
import com.github.libretube.ui.extensions.setWatchProgressLength import com.github.libretube.ui.extensions.setWatchProgressLength
import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.sheets.VideoOptionsBottomSheet
import com.github.libretube.ui.viewholders.PlaylistViewHolder import com.github.libretube.ui.viewholders.PlaylistViewHolder
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import java.io.IOException import java.io.IOException
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers

View File

@ -12,10 +12,10 @@ import com.github.libretube.db.DatabaseHolder
import com.github.libretube.db.obj.PlaylistBookmark import com.github.libretube.db.obj.PlaylistBookmark
import com.github.libretube.enums.PlaylistType import com.github.libretube.enums.PlaylistType
import com.github.libretube.extensions.query import com.github.libretube.extensions.query
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet
import com.github.libretube.ui.viewholders.PlaylistBookmarkViewHolder
import com.github.libretube.helpers.ImageHelper import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet
import com.github.libretube.ui.viewholders.PlaylistBookmarkViewHolder
class PlaylistBookmarkAdapter( class PlaylistBookmarkAdapter(
private val bookmarks: List<PlaylistBookmark>, private val bookmarks: List<PlaylistBookmark>,

View File

@ -7,12 +7,12 @@ import com.github.libretube.R
import com.github.libretube.api.obj.Playlists import com.github.libretube.api.obj.Playlists
import com.github.libretube.databinding.PlaylistsRowBinding import com.github.libretube.databinding.PlaylistsRowBinding
import com.github.libretube.enums.PlaylistType import com.github.libretube.enums.PlaylistType
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.dialogs.DeletePlaylistDialog import com.github.libretube.ui.dialogs.DeletePlaylistDialog
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet
import com.github.libretube.ui.viewholders.PlaylistsViewHolder import com.github.libretube.ui.viewholders.PlaylistsViewHolder
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
class PlaylistsAdapter( class PlaylistsAdapter(
private val playlists: MutableList<Playlists>, private val playlists: MutableList<Playlists>,

View File

@ -13,6 +13,8 @@ import com.github.libretube.databinding.VideoRowBinding
import com.github.libretube.enums.PlaylistType import com.github.libretube.enums.PlaylistType
import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.formatShort
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.setFormattedDuration import com.github.libretube.ui.extensions.setFormattedDuration
import com.github.libretube.ui.extensions.setWatchProgressLength import com.github.libretube.ui.extensions.setWatchProgressLength
@ -21,8 +23,6 @@ import com.github.libretube.ui.sheets.ChannelOptionsBottomSheet
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet
import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.sheets.VideoOptionsBottomSheet
import com.github.libretube.ui.viewholders.SearchViewHolder import com.github.libretube.ui.viewholders.SearchViewHolder
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.util.TextUtils import com.github.libretube.util.TextUtils
class SearchAdapter( class SearchAdapter(

View File

@ -6,12 +6,12 @@ import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.api.obj.Subscription import com.github.libretube.api.obj.Subscription
import com.github.libretube.databinding.ChannelSubscriptionRowBinding import com.github.libretube.databinding.ChannelSubscriptionRowBinding
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.setupSubscriptionButton import com.github.libretube.ui.extensions.setupSubscriptionButton
import com.github.libretube.ui.sheets.ChannelOptionsBottomSheet import com.github.libretube.ui.sheets.ChannelOptionsBottomSheet
import com.github.libretube.ui.viewholders.SubscriptionChannelViewHolder import com.github.libretube.ui.viewholders.SubscriptionChannelViewHolder
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
class SubscriptionChannelAdapter( class SubscriptionChannelAdapter(
private val subscriptions: MutableList<Subscription> private val subscriptions: MutableList<Subscription>

View File

@ -20,14 +20,14 @@ import com.github.libretube.databinding.VideoRowBinding
import com.github.libretube.extensions.dpToPx import com.github.libretube.extensions.dpToPx
import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.formatShort
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.setFormattedDuration import com.github.libretube.ui.extensions.setFormattedDuration
import com.github.libretube.ui.extensions.setWatchProgressLength import com.github.libretube.ui.extensions.setWatchProgressLength
import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.sheets.VideoOptionsBottomSheet
import com.github.libretube.ui.viewholders.VideosViewHolder import com.github.libretube.ui.viewholders.VideosViewHolder
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.util.TextUtils import com.github.libretube.util.TextUtils
class VideosAdapter( class VideosAdapter(

View File

@ -8,13 +8,13 @@ import com.github.libretube.databinding.VideoRowBinding
import com.github.libretube.db.DatabaseHolder import com.github.libretube.db.DatabaseHolder
import com.github.libretube.db.obj.WatchHistoryItem import com.github.libretube.db.obj.WatchHistoryItem
import com.github.libretube.extensions.query import com.github.libretube.extensions.query
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.setFormattedDuration import com.github.libretube.ui.extensions.setFormattedDuration
import com.github.libretube.ui.extensions.setWatchProgressLength import com.github.libretube.ui.extensions.setWatchProgressLength
import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.sheets.VideoOptionsBottomSheet
import com.github.libretube.ui.viewholders.WatchHistoryViewHolder import com.github.libretube.ui.viewholders.WatchHistoryViewHolder
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
class WatchHistoryAdapter( class WatchHistoryAdapter(
private val watchHistory: MutableList<WatchHistoryItem> private val watchHistory: MutableList<WatchHistoryItem>

View File

@ -7,8 +7,8 @@ import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.databinding.DialogTextPreferenceBinding import com.github.libretube.databinding.DialogTextPreferenceBinding
import com.github.libretube.ui.activities.SettingsActivity
import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.activities.SettingsActivity
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
/** /**

View File

@ -7,9 +7,9 @@ import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.obj.BackupFile import com.github.libretube.obj.BackupFile
import com.github.libretube.obj.PreferenceItem import com.github.libretube.obj.PreferenceItem
import com.github.libretube.helpers.PreferenceHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch

View File

@ -8,8 +8,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.databinding.DialogNavbarOptionsBinding import com.github.libretube.databinding.DialogNavbarOptionsBinding
import com.github.libretube.ui.adapters.NavBarOptionsAdapter
import com.github.libretube.helpers.NavBarHelper import com.github.libretube.helpers.NavBarHelper
import com.github.libretube.ui.adapters.NavBarOptionsAdapter
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
class NavBarOptionsDialog : DialogFragment() { class NavBarOptionsDialog : DialogFragment() {

View File

@ -13,8 +13,8 @@ import com.github.libretube.databinding.DialogShareBinding
import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.enums.ShareObjectType import com.github.libretube.enums.ShareObjectType
import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.awaitQuery
import com.github.libretube.obj.ShareData
import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.obj.ShareData
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
class ShareDialog( class ShareDialog(

View File

@ -1,5 +1,6 @@
package com.github.libretube.ui.fragments package com.github.libretube.ui.fragments
import android.annotation.SuppressLint
import android.content.ComponentName import android.content.ComponentName
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
@ -17,22 +18,28 @@ import com.github.libretube.R
import com.github.libretube.api.obj.StreamItem import com.github.libretube.api.obj.StreamItem
import com.github.libretube.databinding.FragmentAudioPlayerBinding import com.github.libretube.databinding.FragmentAudioPlayerBinding
import com.github.libretube.enums.ShareObjectType import com.github.libretube.enums.ShareObjectType
import com.github.libretube.extensions.normalize
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.helpers.AudioHelper
import com.github.libretube.helpers.BackgroundHelper
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.obj.ShareData import com.github.libretube.obj.ShareData
import com.github.libretube.services.BackgroundMode import com.github.libretube.services.BackgroundMode
import com.github.libretube.ui.activities.MainActivity import com.github.libretube.ui.activities.MainActivity
import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.base.BaseFragment
import com.github.libretube.ui.dialogs.ShareDialog import com.github.libretube.ui.dialogs.ShareDialog
import com.github.libretube.ui.interfaces.AudioPlayerOptions
import com.github.libretube.ui.listeners.AudioPlayerThumbnailListener
import com.github.libretube.ui.sheets.PlaybackOptionsSheet import com.github.libretube.ui.sheets.PlaybackOptionsSheet
import com.github.libretube.ui.sheets.PlayingQueueSheet import com.github.libretube.ui.sheets.PlayingQueueSheet
import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.sheets.VideoOptionsBottomSheet
import com.github.libretube.helpers.BackgroundHelper
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.util.PlayingQueue import com.github.libretube.util.PlayingQueue
class AudioPlayerFragment : BaseFragment() { class AudioPlayerFragment : BaseFragment(), AudioPlayerOptions {
private lateinit var binding: FragmentAudioPlayerBinding private lateinit var binding: FragmentAudioPlayerBinding
private lateinit var audioHelper: AudioHelper
private val onTrackChangeListener: (StreamItem) -> Unit = { private val onTrackChangeListener: (StreamItem) -> Unit = {
updateStreamInfo() updateStreamInfo()
} }
@ -64,6 +71,7 @@ class AudioPlayerFragment : BaseFragment() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
audioHelper = AudioHelper(requireContext())
Intent(activity, BackgroundMode::class.java).also { intent -> Intent(activity, BackgroundMode::class.java).also { intent ->
activity?.bindService(intent, connection, Context.BIND_AUTO_CREATE) activity?.bindService(intent, connection, Context.BIND_AUTO_CREATE)
} }
@ -78,6 +86,7 @@ class AudioPlayerFragment : BaseFragment() {
return binding.root return binding.root
} }
@SuppressLint("ClickableViewAccessibility")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
@ -129,13 +138,8 @@ class AudioPlayerFragment : BaseFragment() {
).show(childFragmentManager, null) ).show(childFragmentManager, null)
} }
binding.thumbnail.setOnClickListener { val listener = AudioPlayerThumbnailListener(requireContext(), this)
val current = PlayingQueue.getCurrent() binding.thumbnail.setOnTouchListener(listener)
current?.let {
VideoOptionsBottomSheet(it.url!!.toID(), it.title!!)
.show(childFragmentManager)
}
}
// Listen for track changes due to autoplay or the notification // Listen for track changes due to autoplay or the notification
PlayingQueue.addOnTrackChangedListener(onTrackChangeListener) PlayingQueue.addOnTrackChangedListener(onTrackChangeListener)
@ -146,6 +150,11 @@ class AudioPlayerFragment : BaseFragment() {
// load the stream info into the UI // load the stream info into the UI
updateStreamInfo() updateStreamInfo()
// update the currently shown volume
binding.volumeProgressBar.let { bar ->
bar.progress = audioHelper.getVolumeWithScale(bar.max)
}
} }
/** /**
@ -232,4 +241,48 @@ class AudioPlayerFragment : BaseFragment() {
super.onDestroy() super.onDestroy()
} }
override fun onSingleTap() {
if (isPaused) playerService?.play() else playerService?.pause()
}
override fun onLongTap() {
val current = PlayingQueue.getCurrent()
VideoOptionsBottomSheet(current?.url?.toID() ?: return, current.title ?: return)
.show(childFragmentManager)
}
override fun onSwipe(distanceY: Float) {
binding.volumeControls.visibility = View.VISIBLE
updateVolume(distanceY)
}
override fun onSwipeEnd() {
binding.volumeControls.visibility = View.GONE
}
private fun updateVolume(distance: Float) {
val bar = binding.volumeProgressBar
binding.volumeControls.apply {
if (visibility == View.GONE) {
visibility = View.VISIBLE
// Volume could be changed using other mediums, sync progress
// bar with new value.
bar.progress = audioHelper.getVolumeWithScale(bar.max)
}
}
if (bar.progress == 0) {
binding.volumeImageView.setImageResource(
when {
distance > 0 -> R.drawable.ic_volume_up
else -> R.drawable.ic_volume_off
}
)
}
bar.incrementProgressBy(distance.toInt() / 3)
audioHelper.setVolumeWithScale(bar.progress, bar.max)
binding.volumeTextView.text = "${bar.progress.normalize(0, bar.max, 0, 100)}"
}
} }

View File

@ -19,6 +19,7 @@ import com.github.libretube.enums.ShareObjectType
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.formatShort
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.obj.ChannelTabs import com.github.libretube.obj.ChannelTabs
import com.github.libretube.obj.ShareData import com.github.libretube.obj.ShareData
import com.github.libretube.ui.adapters.SearchAdapter import com.github.libretube.ui.adapters.SearchAdapter
@ -26,7 +27,6 @@ import com.github.libretube.ui.adapters.VideosAdapter
import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.base.BaseFragment
import com.github.libretube.ui.dialogs.ShareDialog import com.github.libretube.ui.dialogs.ShareDialog
import com.github.libretube.ui.extensions.setupSubscriptionButton import com.github.libretube.ui.extensions.setupSubscriptionButton
import com.github.libretube.helpers.ImageHelper
import java.io.IOException import java.io.IOException
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers

View File

@ -19,13 +19,13 @@ import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.db.obj.DownloadWithItems import com.github.libretube.db.obj.DownloadWithItems
import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.awaitQuery
import com.github.libretube.extensions.formatAsFileSize import com.github.libretube.extensions.formatAsFileSize
import com.github.libretube.helpers.DownloadHelper
import com.github.libretube.obj.DownloadStatus import com.github.libretube.obj.DownloadStatus
import com.github.libretube.receivers.DownloadReceiver import com.github.libretube.receivers.DownloadReceiver
import com.github.libretube.services.DownloadService import com.github.libretube.services.DownloadService
import com.github.libretube.ui.adapters.DownloadsAdapter import com.github.libretube.ui.adapters.DownloadsAdapter
import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.base.BaseFragment
import com.github.libretube.ui.viewholders.DownloadsViewHolder import com.github.libretube.ui.viewholders.DownloadsViewHolder
import com.github.libretube.helpers.DownloadHelper
import java.io.File import java.io.File
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest

View File

@ -18,11 +18,11 @@ import com.github.libretube.databinding.FragmentHomeBinding
import com.github.libretube.db.DatabaseHolder import com.github.libretube.db.DatabaseHolder
import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.awaitQuery
import com.github.libretube.extensions.toastFromMainThread import com.github.libretube.extensions.toastFromMainThread
import com.github.libretube.helpers.LocaleHelper
import com.github.libretube.ui.adapters.PlaylistBookmarkAdapter import com.github.libretube.ui.adapters.PlaylistBookmarkAdapter
import com.github.libretube.ui.adapters.PlaylistsAdapter import com.github.libretube.ui.adapters.PlaylistsAdapter
import com.github.libretube.ui.adapters.VideosAdapter import com.github.libretube.ui.adapters.VideosAdapter
import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.base.BaseFragment
import com.github.libretube.helpers.LocaleHelper
import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch

View File

@ -21,13 +21,13 @@ import com.github.libretube.db.DatabaseHolder
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.awaitQuery
import com.github.libretube.extensions.dpToPx import com.github.libretube.extensions.dpToPx
import com.github.libretube.helpers.NavBarHelper
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.adapters.PlaylistBookmarkAdapter import com.github.libretube.ui.adapters.PlaylistBookmarkAdapter
import com.github.libretube.ui.adapters.PlaylistsAdapter import com.github.libretube.ui.adapters.PlaylistsAdapter
import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.base.BaseFragment
import com.github.libretube.ui.dialogs.CreatePlaylistDialog import com.github.libretube.ui.dialogs.CreatePlaylistDialog
import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.models.PlayerViewModel
import com.github.libretube.helpers.NavBarHelper
import com.github.libretube.helpers.PreferenceHelper
class LibraryFragment : BaseFragment() { class LibraryFragment : BaseFragment() {

View File

@ -67,6 +67,13 @@ import com.github.libretube.extensions.query
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.extensions.toStreamItem import com.github.libretube.extensions.toStreamItem
import com.github.libretube.extensions.updateParameters import com.github.libretube.extensions.updateParameters
import com.github.libretube.helpers.BackgroundHelper
import com.github.libretube.helpers.DashHelper
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.helpers.PlayerHelper
import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.obj.ShareData import com.github.libretube.obj.ShareData
import com.github.libretube.obj.VideoResolution import com.github.libretube.obj.VideoResolution
import com.github.libretube.services.BackgroundMode import com.github.libretube.services.BackgroundMode
@ -81,24 +88,17 @@ import com.github.libretube.ui.dialogs.ShareDialog
import com.github.libretube.ui.extensions.setAspectRatio import com.github.libretube.ui.extensions.setAspectRatio
import com.github.libretube.ui.extensions.setupSubscriptionButton import com.github.libretube.ui.extensions.setupSubscriptionButton
import com.github.libretube.ui.interfaces.OnlinePlayerOptions import com.github.libretube.ui.interfaces.OnlinePlayerOptions
import com.github.libretube.ui.listeners.SeekbarPreviewListener
import com.github.libretube.ui.models.CommentsViewModel import com.github.libretube.ui.models.CommentsViewModel
import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.models.PlayerViewModel
import com.github.libretube.ui.sheets.BaseBottomSheet import com.github.libretube.ui.sheets.BaseBottomSheet
import com.github.libretube.ui.sheets.CommentsSheet import com.github.libretube.ui.sheets.CommentsSheet
import com.github.libretube.ui.sheets.PlayingQueueSheet import com.github.libretube.ui.sheets.PlayingQueueSheet
import com.github.libretube.helpers.BackgroundHelper
import com.github.libretube.helpers.DashHelper
import com.github.libretube.util.DataSaverMode import com.github.libretube.util.DataSaverMode
import com.github.libretube.util.HtmlParser import com.github.libretube.util.HtmlParser
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.util.LinkHandler import com.github.libretube.util.LinkHandler
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.util.NowPlayingNotification import com.github.libretube.util.NowPlayingNotification
import com.github.libretube.helpers.PlayerHelper
import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams
import com.github.libretube.util.PlayingQueue import com.github.libretube.util.PlayingQueue
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.listeners.SeekbarPreviewListener
import com.github.libretube.util.TextUtils import com.github.libretube.util.TextUtils
import com.google.android.exoplayer2.C import com.google.android.exoplayer2.C
import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.ExoPlayer

View File

@ -26,13 +26,13 @@ import com.github.libretube.extensions.dpToPx
import com.github.libretube.extensions.query import com.github.libretube.extensions.query
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.extensions.toPlaylistBookmark import com.github.libretube.extensions.toPlaylistBookmark
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.adapters.PlaylistAdapter import com.github.libretube.ui.adapters.PlaylistAdapter
import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.base.BaseFragment
import com.github.libretube.ui.extensions.serializable import com.github.libretube.ui.extensions.serializable
import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.models.PlayerViewModel
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.util.PlayingQueue import com.github.libretube.util.PlayingQueue
import com.github.libretube.util.TextUtils import com.github.libretube.util.TextUtils

View File

@ -16,9 +16,9 @@ import com.github.libretube.db.DatabaseHelper
import com.github.libretube.db.obj.SearchHistoryItem import com.github.libretube.db.obj.SearchHistoryItem
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.extensions.hideKeyboard import com.github.libretube.extensions.hideKeyboard
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.adapters.SearchAdapter import com.github.libretube.ui.adapters.SearchAdapter
import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.base.BaseFragment
import com.github.libretube.helpers.PreferenceHelper
import java.io.IOException import java.io.IOException
import retrofit2.HttpException import retrofit2.HttpException

View File

@ -13,13 +13,13 @@ import com.github.libretube.R
import com.github.libretube.api.obj.StreamItem import com.github.libretube.api.obj.StreamItem
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.databinding.FragmentSubscriptionsBinding import com.github.libretube.databinding.FragmentSubscriptionsBinding
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.adapters.LegacySubscriptionAdapter import com.github.libretube.ui.adapters.LegacySubscriptionAdapter
import com.github.libretube.ui.adapters.SubscriptionChannelAdapter import com.github.libretube.ui.adapters.SubscriptionChannelAdapter
import com.github.libretube.ui.adapters.VideosAdapter import com.github.libretube.ui.adapters.VideosAdapter
import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.base.BaseFragment
import com.github.libretube.ui.models.SubscriptionsViewModel import com.github.libretube.ui.models.SubscriptionsViewModel
import com.github.libretube.ui.sheets.BaseBottomSheet import com.github.libretube.ui.sheets.BaseBottomSheet
import com.github.libretube.helpers.PreferenceHelper
class SubscriptionsFragment : BaseFragment() { class SubscriptionsFragment : BaseFragment() {
private lateinit var binding: FragmentSubscriptionsBinding private lateinit var binding: FragmentSubscriptionsBinding

View File

@ -12,10 +12,10 @@ import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.databinding.FragmentTrendsBinding import com.github.libretube.databinding.FragmentTrendsBinding
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.helpers.LocaleHelper
import com.github.libretube.ui.activities.SettingsActivity import com.github.libretube.ui.activities.SettingsActivity
import com.github.libretube.ui.adapters.VideosAdapter import com.github.libretube.ui.adapters.VideosAdapter
import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.base.BaseFragment
import com.github.libretube.helpers.LocaleHelper
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import java.io.IOException import java.io.IOException
import retrofit2.HttpException import retrofit2.HttpException

View File

@ -19,12 +19,12 @@ import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.awaitQuery
import com.github.libretube.extensions.dpToPx import com.github.libretube.extensions.dpToPx
import com.github.libretube.extensions.query import com.github.libretube.extensions.query
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.helpers.ProxyHelper
import com.github.libretube.ui.adapters.WatchHistoryAdapter import com.github.libretube.ui.adapters.WatchHistoryAdapter
import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.base.BaseFragment
import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.models.PlayerViewModel
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.util.PlayingQueue import com.github.libretube.util.PlayingQueue
import com.github.libretube.helpers.ProxyHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
class WatchHistoryFragment : BaseFragment() { class WatchHistoryFragment : BaseFragment() {

View File

@ -0,0 +1,12 @@
package com.github.libretube.ui.interfaces
interface AudioPlayerOptions {
fun onSingleTap()
fun onLongTap()
fun onSwipe(distanceY: Float)
fun onSwipeEnd()
}

View File

@ -0,0 +1,81 @@
package com.github.libretube.ui.listeners
import android.annotation.SuppressLint
import android.content.Context
import android.os.Handler
import android.os.Looper
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View
import android.view.ViewConfiguration
import androidx.core.os.postDelayed
import com.github.libretube.ui.interfaces.AudioPlayerOptions
import kotlin.math.abs
class AudioPlayerThumbnailListener(context: Context, private val listener: AudioPlayerOptions) :
View.OnTouchListener {
private val handler = Handler(Looper.getMainLooper())
private val gestureDetector = GestureDetector(context, GestureListener(), handler)
private var isMoving = false
@SuppressLint("ClickableViewAccessibility")
override fun onTouch(v: View, event: MotionEvent): Boolean {
if (event.action == MotionEvent.ACTION_UP && isMoving) {
isMoving = false
listener.onSwipeEnd()
return false
}
runCatching {
gestureDetector.onTouchEvent(event)
}
return true
}
private inner class GestureListener : GestureDetector.SimpleOnGestureListener() {
override fun onDown(e: MotionEvent): Boolean {
if (isMoving) return false
handler.postDelayed(ACTION_INTERVAL, SINGLE_PRESS_TOKEN) {
if (!isMoving) listener.onSingleTap()
}
return true
}
override fun onScroll(
e1: MotionEvent,
e2: MotionEvent,
distanceX: Float,
distanceY: Float
): Boolean {
val insideThreshHold = abs(e2.y - e1.y) <= MOVEMENT_THRESHOLD
// If the movement is inside threshold or scroll is horizontal then return false
if (!isMoving && (insideThreshHold || abs(distanceX) > abs(distanceY))) {
return false
}
isMoving = true
listener.onSwipe(distanceY)
return true
}
override fun onLongPress(e: MotionEvent) {
// remove to single press action from the queue
handler.removeCallbacksAndMessages(SINGLE_PRESS_TOKEN)
listener.onLongTap()
}
}
companion object {
private const val MOVEMENT_THRESHOLD = 10
private val ACTION_INTERVAL = ViewConfiguration.getLongPressTimeout().toLong()
private const val SINGLE_PRESS_TOKEN = "singlePress"
}
}

View File

@ -12,10 +12,10 @@ import android.view.ScaleGestureDetector
import android.view.View import android.view.View
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.core.os.postDelayed import androidx.core.os.postDelayed
import com.github.libretube.helpers.PlayerHelper
import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.interfaces.PlayerGestureOptions import com.github.libretube.ui.interfaces.PlayerGestureOptions
import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.models.PlayerViewModel
import com.github.libretube.helpers.PlayerHelper
import kotlin.math.abs import kotlin.math.abs
class PlayerGestureController(activity: BaseActivity, private val listener: PlayerGestureOptions) : class PlayerGestureController(activity: BaseActivity, private val listener: PlayerGestureOptions) :

View File

@ -9,8 +9,8 @@ import androidx.core.math.MathUtils
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
import coil.request.ImageRequest import coil.request.ImageRequest
import com.github.libretube.api.obj.PreviewFrames import com.github.libretube.api.obj.PreviewFrames
import com.github.libretube.obj.PreviewFrame
import com.github.libretube.helpers.ImageHelper import com.github.libretube.helpers.ImageHelper
import com.github.libretube.obj.PreviewFrame
import com.google.android.exoplayer2.ui.TimeBar import com.google.android.exoplayer2.ui.TimeBar
class SeekbarPreviewListener( class SeekbarPreviewListener(

View File

@ -6,9 +6,9 @@ import androidx.preference.ListPreference
import androidx.preference.Preference import androidx.preference.Preference
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.ui.base.BasePreferenceFragment
import com.github.libretube.helpers.ImageHelper import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.base.BasePreferenceFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
class AdvancedSettings : BasePreferenceFragment() { class AdvancedSettings : BasePreferenceFragment() {

View File

@ -7,12 +7,12 @@ import androidx.preference.Preference
import androidx.preference.SwitchPreferenceCompat import androidx.preference.SwitchPreferenceCompat
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.adapters.IconsSheetAdapter import com.github.libretube.ui.adapters.IconsSheetAdapter
import com.github.libretube.ui.base.BasePreferenceFragment import com.github.libretube.ui.base.BasePreferenceFragment
import com.github.libretube.ui.dialogs.NavBarOptionsDialog import com.github.libretube.ui.dialogs.NavBarOptionsDialog
import com.github.libretube.ui.dialogs.RequireRestartDialog import com.github.libretube.ui.dialogs.RequireRestartDialog
import com.github.libretube.ui.sheets.IconsBottomSheet import com.github.libretube.ui.sheets.IconsBottomSheet
import com.github.libretube.helpers.PreferenceHelper
class AppearanceSettings : BasePreferenceFragment() { class AppearanceSettings : BasePreferenceFragment() {
override val titleResourceId: Int = R.string.appearance override val titleResourceId: Int = R.string.appearance

View File

@ -7,11 +7,11 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.result.contract.ActivityResultContracts.CreateDocument import androidx.activity.result.contract.ActivityResultContracts.CreateDocument
import androidx.preference.Preference import androidx.preference.Preference
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.helpers.BackupHelper
import com.github.libretube.helpers.ImportHelper
import com.github.libretube.obj.BackupFile import com.github.libretube.obj.BackupFile
import com.github.libretube.ui.base.BasePreferenceFragment import com.github.libretube.ui.base.BasePreferenceFragment
import com.github.libretube.ui.dialogs.BackupDialog import com.github.libretube.ui.dialogs.BackupDialog
import com.github.libretube.helpers.BackupHelper
import com.github.libretube.helpers.ImportHelper
import java.time.LocalDateTime import java.time.LocalDateTime
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter

View File

@ -7,10 +7,10 @@ import androidx.preference.Preference
import androidx.preference.SwitchPreferenceCompat import androidx.preference.SwitchPreferenceCompat
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.ui.base.BasePreferenceFragment
import com.github.libretube.ui.dialogs.RequireRestartDialog
import com.github.libretube.helpers.LocaleHelper import com.github.libretube.helpers.LocaleHelper
import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.base.BasePreferenceFragment
import com.github.libretube.ui.dialogs.RequireRestartDialog
class GeneralSettings : BasePreferenceFragment() { class GeneralSettings : BasePreferenceFragment() {
override val titleResourceId: Int = R.string.general override val titleResourceId: Int = R.string.general

View File

@ -15,12 +15,12 @@ import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.awaitQuery
import com.github.libretube.extensions.toastFromMainThread import com.github.libretube.extensions.toastFromMainThread
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.base.BasePreferenceFragment import com.github.libretube.ui.base.BasePreferenceFragment
import com.github.libretube.ui.dialogs.CustomInstanceDialog import com.github.libretube.ui.dialogs.CustomInstanceDialog
import com.github.libretube.ui.dialogs.DeleteAccountDialog import com.github.libretube.ui.dialogs.DeleteAccountDialog
import com.github.libretube.ui.dialogs.LoginDialog import com.github.libretube.ui.dialogs.LoginDialog
import com.github.libretube.ui.dialogs.LogoutDialog import com.github.libretube.ui.dialogs.LogoutDialog
import com.github.libretube.helpers.PreferenceHelper
class InstanceSettings : BasePreferenceFragment() { class InstanceSettings : BasePreferenceFragment() {
override val titleResourceId: Int = R.string.instance override val titleResourceId: Int = R.string.instance

View File

@ -6,9 +6,9 @@ import androidx.preference.SwitchPreferenceCompat
import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.ExistingPeriodicWorkPolicy
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.helpers.NotificationHelper
import com.github.libretube.ui.base.BasePreferenceFragment import com.github.libretube.ui.base.BasePreferenceFragment
import com.github.libretube.ui.views.TimePickerPreference import com.github.libretube.ui.views.TimePickerPreference
import com.github.libretube.helpers.NotificationHelper
class NotificationSettings : BasePreferenceFragment() { class NotificationSettings : BasePreferenceFragment() {
override val titleResourceId: Int = R.string.notifications override val titleResourceId: Int = R.string.notifications

View File

@ -12,9 +12,9 @@ import androidx.preference.Preference
import androidx.preference.SwitchPreferenceCompat import androidx.preference.SwitchPreferenceCompat
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.ui.base.BasePreferenceFragment
import com.github.libretube.helpers.LocaleHelper import com.github.libretube.helpers.LocaleHelper
import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.base.BasePreferenceFragment
class PlayerSettings : BasePreferenceFragment() { class PlayerSettings : BasePreferenceFragment() {
override val titleResourceId: Int = R.string.player override val titleResourceId: Int = R.string.player

View File

@ -7,10 +7,10 @@ import com.github.libretube.api.RetrofitInstance
import com.github.libretube.enums.ShareObjectType import com.github.libretube.enums.ShareObjectType
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.obj.ShareData
import com.github.libretube.ui.dialogs.ShareDialog
import com.github.libretube.helpers.BackgroundHelper import com.github.libretube.helpers.BackgroundHelper
import com.github.libretube.helpers.NavigationHelper import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.obj.ShareData
import com.github.libretube.ui.dialogs.ShareDialog
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
/** /**

View File

@ -12,11 +12,11 @@ import com.github.libretube.extensions.query
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.extensions.toPlaylistBookmark import com.github.libretube.extensions.toPlaylistBookmark
import com.github.libretube.extensions.toastFromMainThread import com.github.libretube.extensions.toastFromMainThread
import com.github.libretube.helpers.BackgroundHelper
import com.github.libretube.obj.ShareData import com.github.libretube.obj.ShareData
import com.github.libretube.ui.dialogs.DeletePlaylistDialog import com.github.libretube.ui.dialogs.DeletePlaylistDialog
import com.github.libretube.ui.dialogs.RenamePlaylistDialog import com.github.libretube.ui.dialogs.RenamePlaylistDialog
import com.github.libretube.ui.dialogs.ShareDialog import com.github.libretube.ui.dialogs.ShareDialog
import com.github.libretube.helpers.BackgroundHelper
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch

View File

@ -5,11 +5,11 @@ import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.enums.ShareObjectType import com.github.libretube.enums.ShareObjectType
import com.github.libretube.extensions.toStreamItem import com.github.libretube.extensions.toStreamItem
import com.github.libretube.helpers.BackgroundHelper
import com.github.libretube.obj.ShareData import com.github.libretube.obj.ShareData
import com.github.libretube.ui.dialogs.AddToPlaylistDialog import com.github.libretube.ui.dialogs.AddToPlaylistDialog
import com.github.libretube.ui.dialogs.DownloadDialog import com.github.libretube.ui.dialogs.DownloadDialog
import com.github.libretube.ui.dialogs.ShareDialog import com.github.libretube.ui.dialogs.ShareDialog
import com.github.libretube.helpers.BackgroundHelper
import com.github.libretube.util.PlayingQueue import com.github.libretube.util.PlayingQueue
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers

View File

@ -7,8 +7,8 @@ import android.os.Process
import androidx.core.os.postDelayed import androidx.core.os.postDelayed
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.ui.activities.MainActivity
import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.activities.MainActivity
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
object SleepTimer { object SleepTimer {

View File

@ -23,19 +23,19 @@ import com.github.libretube.databinding.ExoStyledPlayerControlViewBinding
import com.github.libretube.databinding.PlayerGestureControlsViewBinding import com.github.libretube.databinding.PlayerGestureControlsViewBinding
import com.github.libretube.extensions.dpToPx import com.github.libretube.extensions.dpToPx
import com.github.libretube.extensions.normalize import com.github.libretube.extensions.normalize
import com.github.libretube.helpers.AudioHelper
import com.github.libretube.helpers.BrightnessHelper
import com.github.libretube.helpers.PlayerHelper
import com.github.libretube.obj.BottomSheetItem import com.github.libretube.obj.BottomSheetItem
import com.github.libretube.ui.activities.MainActivity import com.github.libretube.ui.activities.MainActivity
import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.interfaces.OnlinePlayerOptions import com.github.libretube.ui.interfaces.OnlinePlayerOptions
import com.github.libretube.ui.interfaces.PlayerGestureOptions import com.github.libretube.ui.interfaces.PlayerGestureOptions
import com.github.libretube.ui.interfaces.PlayerOptions import com.github.libretube.ui.interfaces.PlayerOptions
import com.github.libretube.ui.listeners.PlayerGestureController
import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.models.PlayerViewModel
import com.github.libretube.ui.sheets.BaseBottomSheet import com.github.libretube.ui.sheets.BaseBottomSheet
import com.github.libretube.ui.sheets.PlaybackOptionsSheet import com.github.libretube.ui.sheets.PlaybackOptionsSheet
import com.github.libretube.helpers.AudioHelper
import com.github.libretube.helpers.BrightnessHelper
import com.github.libretube.ui.listeners.PlayerGestureController
import com.github.libretube.helpers.PlayerHelper
import com.github.libretube.util.PlayingQueue import com.github.libretube.util.PlayingQueue
import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.Player import com.google.android.exoplayer2.Player

View File

@ -19,9 +19,9 @@ import com.github.libretube.constants.PUSH_CHANNEL_ID
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.activities.MainActivity import com.github.libretube.ui.activities.MainActivity
import com.github.libretube.ui.views.TimePickerPreference import com.github.libretube.ui.views.TimePickerPreference
import com.github.libretube.helpers.PreferenceHelper
import java.time.LocalTime import java.time.LocalTime
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking

View File

@ -23,6 +23,41 @@
app:shapeAppearanceOverlay="@style/ShapeAppearance.Material3.Corner.Small" app:shapeAppearanceOverlay="@style/ShapeAppearance.Material3.Corner.Small"
tools:src="@tools:sample/backgrounds/scenic" /> tools:src="@tools:sample/backgrounds/scenic" />
<LinearLayout
android:id="@+id/volumeControls"
android:layout_width="42dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/controls_layout_bg"
android:orientation="vertical"
android:visibility="gone"
tools:ignore="RtlHardcoded">
<TextView
android:id="@+id/volume_textView"
style="@style/SwipeControlString"
android:layout_gravity="center"
app:autoSizeTextType="uniform" />
<ProgressBar
android:id="@+id/volume_progressBar"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="7dp"
android:layout_height="100dp"
android:layout_gravity="center"
android:layout_marginVertical="4dp"
android:progressDrawable="@drawable/vertical_progressbar" />
<ImageView
android:id="@+id/volume_imageView"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
android:contentDescription="@string/volume"
android:src="@drawable/ic_volume_up" />
</LinearLayout>
<ProgressBar <ProgressBar
android:id="@+id/progress" android:id="@+id/progress"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View File

@ -450,4 +450,5 @@
<string name="skip_silence">تخطي الصمت</string> <string name="skip_silence">تخطي الصمت</string>
<string name="help">التعليمات</string> <string name="help">التعليمات</string>
<string name="faq">الأسئلة المتداولة</string> <string name="faq">الأسئلة المتداولة</string>
<string name="replies">الردود</string>
</resources> </resources>

View File

@ -5,7 +5,7 @@
<string name="search_hint">Axtarış</string> <string name="search_hint">Axtarış</string>
<string name="videos">Videolar</string> <string name="videos">Videolar</string>
<string name="subscribe">Abunə Ol</string> <string name="subscribe">Abunə Ol</string>
<string name="unsubscribe">Abunəlikdən çıx</string> <string name="unsubscribe">Abunə olma</string>
<string name="share">Paylaş</string> <string name="share">Paylaş</string>
<string name="save">Saxla</string> <string name="save">Saxla</string>
<string name="download">Yüklə</string> <string name="download">Yüklə</string>
@ -15,13 +15,13 @@
<string name="register">Qeydiyyatdan keç</string> <string name="register">Qeydiyyatdan keç</string>
<string name="logout">Çıx</string> <string name="logout">Çıx</string>
<string name="cancel">Ləğv et</string> <string name="cancel">Ləğv et</string>
<string name="loggedIn">Daxil olundu.</string> <string name="loggedIn">Giriş edildi.</string>
<string name="loggedout">Çıxıldı.</string> <string name="loggedout">Çıxıldı.</string>
<string name="registered">Qeydiyyatdan keçilib. İndi kanallara abunə ola bilərsiniz.</string> <string name="registered">Qeydiyyatdan keçilib. İndi kanallara abunə ola bilərsiniz.</string>
<string name="already_logged_in">Artıq daxil olunub.İstəsəniz hesabınızdan çıxa bilərsiniz.</string> <string name="already_logged_in">Artıq daxil olunub.İstəsəniz hesabınızdan çıxa bilərsiniz.</string>
<string name="login_first">Zəhmət olmasa, daxil ol və təkrar cəhd et.</string> <string name="login_first">Zəhmət olmasa, daxil ol və təkrar cəhd et.</string>
<string name="startpage">Ev</string> <string name="startpage">Ev</string>
<string name="subscriptions">Abunəliklər</string> <string name="subscriptions">Abunələr</string>
<string name="library">Kitabxana</string> <string name="library">Kitabxana</string>
<string name="instances">Seç…</string> <string name="instances">Seç…</string>
<string name="customInstance">Fərdi</string> <string name="customInstance">Fərdi</string>
@ -38,7 +38,7 @@
<string name="music_songs">YT Musiqi Mahnıları</string> <string name="music_songs">YT Musiqi Mahnıları</string>
<string name="music_videos">YT Musiqi Videoları</string> <string name="music_videos">YT Musiqi Videoları</string>
<string name="music_playlists">YT Musiqi Pleylistləri</string> <string name="music_playlists">YT Musiqi Pleylistləri</string>
<string name="defaultTab">Defolt Panel</string> <string name="defaultTab">Standart Panel</string>
<string name="sponsorblock">SponsorBlok</string> <string name="sponsorblock">SponsorBlok</string>
<string name="sponsorblock_summary">https://sponsor.ajay.app API\'sini istifadə edir</string> <string name="sponsorblock_summary">https://sponsor.ajay.app API\'sini istifadə edir</string>
<string name="category_intro_description">Həqiqi məzmunu olmayan aralıq. Fasilə, statik çərçivə, təkrarlanan animasiya ola bilər. Məlumat ehtiva edən keçidlər üçün istifadə edilməməlidir.</string> <string name="category_intro_description">Həqiqi məzmunu olmayan aralıq. Fasilə, statik çərçivə, təkrarlanan animasiya ola bilər. Məlumat ehtiva edən keçidlər üçün istifadə edilməməlidir.</string>
@ -54,33 +54,33 @@
<string name="success">Bitdi.</string> <string name="success">Bitdi.</string>
<string name="comments">Şərhlər</string> <string name="comments">Şərhlər</string>
<string name="noInternet">Əvvəlcə İnternetə Qoşul.</string> <string name="noInternet">Əvvəlcə İnternetə Qoşul.</string>
<string name="retry">Yenidən Cəhd Et</string> <string name="retry">Təkrar Cəhd Et</string>
<string name="segment_skipped">Seqment ötürüldü</string> <string name="segment_skipped">Seqment ötürüldü</string>
<string name="sponsorblock_state"></string> <string name="sponsorblock_state"></string>
<string name="category_sponsor_description">Ödənişli reklam, tövsiyələr və birbaşa reklamlar.Öz reklamı və ya səbəblərə, yaradıcılara, veb saytlara və məhsullara pulsuz orijinal elanlar üçün deyil.</string> <string name="category_sponsor_description">Ödənişli reklam, tövsiyələr və birbaşa reklamlar.Öz reklamı və ya səbəblərə, yaradıcılara, veb saytlara və məhsullara pulsuz orijinal elanlar üçün deyil.</string>
<string name="category_interaction">İnteraksiya xatırladıcı(bəyən və abunə ol)</string> <string name="category_interaction">İnteraksiya xatırladıcı(bəyən və abunə ol)</string>
<string name="category_intro">Fasilə/Giriş Animasiyası</string> <string name="category_intro">Fasilə/Giriş Animasiyası</string>
<string name="login_register">Daxil ol/qeydiyyatdan keç</string> <string name="login_register">Daxil ol/qeydiyyatdan keç</string>
<string name="please_login">Zəhmət olmasa, əvvəlcə tənzimləmələrdə daxil ol və ya qeydiyyatdan keç.</string> <string name="please_login">Zəhmət olmasa, əvvəlcə tənzimləmələrdə giriş et və ya qeydiyyatdan keç.</string>
<string name="importsuccess">Abunə olundu</string> <string name="importsuccess">Abunə olundu</string>
<string name="subscribeIsEmpty">Əvvəlcə bəzi kanallara abunə ol.</string> <string name="subscribeIsEmpty">Əvvəlcə bəzi kanallara abunə ol.</string>
<string name="cannotDownload">Bu yayımı endirmək mümkün deyil.</string> <string name="cannotDownload">Bu yayımı endirmək mümkün deyil.</string>
<string name="dlcomplete">Endirmə tamamlandı.</string> <string name="dlcomplete">Endirmə tamamlandı.</string>
<string name="dlisinprogress">Başqa endirmə artıq davam edir, zəhmət olmasa, bitənə qədər gözlə.</string> <string name="dlisinprogress">Artıq digər endirmə davam edir, zəhmət olmasa, bitənə qədər gözlə.</string>
<string name="downloadfailed">Endirmə alınmadı.</string> <string name="downloadfailed">Endirmə alınmadı.</string>
<string name="vlc">VLC\'də Aç</string> <string name="vlc">VLC\'də Aç</string>
<string name="vlcerror">VLC-də açmaq mümkün olmadı. O, quraşdırılmamış ola bilər.</string> <string name="vlcerror">VLC-də açmaq mümkün olmadı. O, quraşdırılmamış ola bilər.</string>
<string name="import_from_yt">Abunəlikləri idxal et</string> <string name="import_from_yt">Abunəlikləri idxal et</string>
<string name="import_from_yt_summary">YouTube və ya NewPipe\'dan</string> <string name="import_from_yt_summary">YouTube və ya NewPipe\'dan</string>
<string name="app_theme">Tema</string> <string name="app_theme">Tema</string>
<string name="server_error">Serverlə problem yaşanır. Başqa nümunə cəhd edilsinmi\?</string> <string name="server_error">Serverlə problem yaşanır. Başqa nümunə sınansın\?</string>
<string name="unknown_error">Şəbəkə xətası.</string> <string name="unknown_error">Şəbəkə xətası.</string>
<string name="error">Nəsə xəta baş verdi.</string> <string name="error">Nəsə xəta baş verdi.</string>
<string name="empty">İstifadəçi adı və şifrə daxil etməlisiniz.</string> <string name="empty">İstifadəçi adı və şifrə daxil etməlisiniz.</string>
<string name="notgmail">Bu Piped hesabı üçündür.</string> <string name="notgmail">Bu Piped hesabı üçündür.</string>
<string name="defres">Video görüntü imkanı</string> <string name="defres">Video görüntü imkanı</string>
<string name="grid">Şəbəkə sütunları</string> <string name="grid">Şəbəkə sütunları</string>
<string name="emptyList">Burada heç nə yoxdur.</string> <string name="emptyList">Bura boşdur.</string>
<string name="deletePlaylist">Pleylisti sil</string> <string name="deletePlaylist">Pleylisti sil</string>
<string name="areYouSure">Pleylist silinsinmi\?</string> <string name="areYouSure">Pleylist silinsinmi\?</string>
<string name="createPlaylist">Pleylist yarat</string> <string name="createPlaylist">Pleylist yarat</string>
@ -119,7 +119,7 @@
<string name="update_available">%1$s Versiyası Mövcuddur</string> <string name="update_available">%1$s Versiyası Mövcuddur</string>
<string name="update_available_text">Onu endirmək üçün GitHub\'da buraxılışlara keçilsinmi\?</string> <string name="update_available_text">Onu endirmək üçün GitHub\'da buraxılışlara keçilsinmi\?</string>
<string name="appearance">Xarici Görünüş</string> <string name="appearance">Xarici Görünüş</string>
<string name="app_behavior">Davranma</string> <string name="app_behavior">Davranış</string>
<string name="downloads">Yüklənənlər</string> <string name="downloads">Yüklənənlər</string>
<string name="video_format">Video formatı</string> <string name="video_format">Video formatı</string>
<string name="video_format_summary">Səs və video birlikdə endirildisə, faylların dönüşdürülməsi.</string> <string name="video_format_summary">Səs və video birlikdə endirildisə, faylların dönüşdürülməsi.</string>
@ -132,9 +132,9 @@
<string name="playback_speed">Oynatma sürəti</string> <string name="playback_speed">Oynatma sürəti</string>
<string name="advanced">Qabaqcıl</string> <string name="advanced">Qabaqcıl</string>
<string name="player">Oynadıcı</string> <string name="player">Oynadıcı</string>
<string name="appearance_summary">Tətbiqi zövqünüzə uyğunlaşdırın.</string> <string name="appearance_summary">Tətbiqi zövqünüzə görə uyğunlaşdırın.</string>
<string name="advanced_summary">Yüklənənlər və sıfırla</string> <string name="advanced_summary">Yüklənənlər və sıfırla</string>
<string name="update_summary">Yeniləmə üçün yoxla</string> <string name="update_summary">Yeniləmək üçün yoxla</string>
<string name="no_update_available">Ən son versiyanı işlədirsiniz.</string> <string name="no_update_available">Ən son versiyanı işlədirsiniz.</string>
<string name="live">Canlı</string> <string name="live">Canlı</string>
<string name="authors">Müəlliflər</string> <string name="authors">Müəlliflər</string>
@ -148,7 +148,7 @@
<string name="internal_storage">Daxili yaddaş</string> <string name="internal_storage">Daxili yaddaş</string>
<string name="download_folder_summary">Endirilmiş medianın saxlanıldığı qovluğun adı.</string> <string name="download_folder_summary">Endirilmiş medianın saxlanıldığı qovluğun adı.</string>
<string name="views">%1$s baxış</string> <string name="views">%1$s baxış</string>
<string name="defaultIcon">Defolt</string> <string name="defaultIcon">Standart</string>
<string name="legacyIcon">İtmiş miras</string> <string name="legacyIcon">İtmiş miras</string>
<string name="fireIcon">Dəbdəbəli yanğın</string> <string name="fireIcon">Dəbdəbəli yanğın</string>
<string name="gradientIcon">Pərgar meyli</string> <string name="gradientIcon">Pərgar meyli</string>
@ -188,14 +188,14 @@
<string name="hideTrendingPage">\"Trenddə olan\" səhifəsini gizlət</string> <string name="hideTrendingPage">\"Trenddə olan\" səhifəsini gizlət</string>
<string name="quality">Keyfiyyət</string> <string name="quality">Keyfiyyət</string>
<string name="behavior">Davranış</string> <string name="behavior">Davranış</string>
<string name="player_summary">Defolt tənzimləmələr və davranış</string> <string name="player_summary">Standartlar və davranış</string>
<string name="seek_increment">Axtarış artımı</string> <string name="seek_increment">Axtarış artımı</string>
<string name="instance_frontend_url">Nümunə üçün URL</string> <string name="instance_frontend_url">Nümunə üçün URL</string>
<string name="autoplay_summary">Cari videodan sonra növbəti videonu avtomatik oynat.</string> <string name="autoplay_summary">Hazırkı videodan sonra növbəti videonu avtomatik oynat.</string>
<string name="pauseOnScreenOff">Avtomatik fasilə</string> <string name="pauseOnScreenOff">Avtomatik fasilə</string>
<string name="pauseOnScreenOff_summary">Ekran söndürüldükdə oynatmanı dayandır.</string> <string name="pauseOnScreenOff_summary">Ekran söndürüldükdə oynatmanı dayandır.</string>
<string name="clonePlaylist">Pleylisti klonla</string> <string name="clonePlaylist">Pleylisti klonla</string>
<string name="reset">İlkin tənzimləmələri qaytar</string> <string name="reset">Standartları qaytar</string>
<string name="reset_message">Bütün tənzimləmələr sıfırlansın və sistemdən çıxılsın\?</string> <string name="reset_message">Bütün tənzimləmələr sıfırlansın və sistemdən çıxılsın\?</string>
<string name="account">Hesab</string> <string name="account">Hesab</string>
<string name="restore">Bərpa Et</string> <string name="restore">Bərpa Et</string>
@ -204,7 +204,7 @@
<string name="watch_history">Baxış Tarixçəsi</string> <string name="watch_history">Baxış Tarixçəsi</string>
<string name="watch_positions">Mövqe xatırlat</string> <string name="watch_positions">Mövqe xatırlat</string>
<string name="watch_positions_summary">Son oynatma mövqeyindən davam etdir</string> <string name="watch_positions_summary">Son oynatma mövqeyindən davam etdir</string>
<string name="auth_instances">Təsdiqləyici nümunəni seç</string> <string name="auth_instances">Təsdiqləyici nümunə seç</string>
<string name="auth_instance_summary">Təsdiqlənmiş dəvətlər üçün fərqli nümunə istifadə et.</string> <string name="auth_instance_summary">Təsdiqlənmiş dəvətlər üçün fərqli nümunə istifadə et.</string>
<string name="auth_instance">Təsdiqləyici nümunə</string> <string name="auth_instance">Təsdiqləyici nümunə</string>
<string name="github">GitHub</string> <string name="github">GitHub</string>
@ -222,7 +222,7 @@
<string name="twitter">Twitter</string> <string name="twitter">Twitter</string>
<string name="discord">Discord</string> <string name="discord">Discord</string>
<string name="open">Aç…</string> <string name="open">Aç…</string>
<string name="turnInternetOn">Lütfən, İnternetə qoşulmaq üçün Wi-Fi və ya mobil məlumatıın.</string> <string name="turnInternetOn">Zəhmət olmasa, İnternetə qoşulmaq üçün Wi-Fi və ya mobil məlumatıın.</string>
<string name="chapters">Bölmələr</string> <string name="chapters">Bölmələr</string>
<string name="change_playback_speed">Oynatma sürəti</string> <string name="change_playback_speed">Oynatma sürəti</string>
<string name="require_restart_message">Yeni dəyişiklikləri işlətmək üçün tətbiqi yenidən başlat.</string> <string name="require_restart_message">Yeni dəyişiklikləri işlətmək üçün tətbiqi yenidən başlat.</string>
@ -237,10 +237,10 @@
<string name="pure_theme">Təmiz tema</string> <string name="pure_theme">Təmiz tema</string>
<string name="pure_theme_summary">Təmiz ağ/qara tema</string> <string name="pure_theme_summary">Təmiz ağ/qara tema</string>
<string name="no_player_found">Xarici oynadıcı tapılmadı. Zəhmət olmasa, birinin quraşdırıldığından əmin olun.</string> <string name="no_player_found">Xarici oynadıcı tapılmadı. Zəhmət olmasa, birinin quraşdırıldığından əmin olun.</string>
<string name="data_saver_mode">Məlumata qənaət rejimi</string> <string name="data_saver_mode">Məlumat qənaəti rejimi</string>
<string name="autoRotatePlayer_summary">Cihaz fırladıldıqda tam ekran oynat.</string> <string name="autoRotatePlayer_summary">Cihaz fırladıldıqda tam ekran oynat.</string>
<string name="search_history_summary">Axtarışları saxla</string> <string name="search_history_summary">Axtarışları saxla</string>
<string name="watch_history_summary">Baxılan videoları yerli olaraq saxla</string> <string name="watch_history_summary">Baxılan videoların yerli olaraq saxlanılması</string>
<string name="reset_watch_positions">Sıfırla</string> <string name="reset_watch_positions">Sıfırla</string>
<string name="system_caption_style">Sistem altyazı üsulu</string> <string name="system_caption_style">Sistem altyazı üsulu</string>
<string name="captions">Altyazılar</string> <string name="captions">Altyazılar</string>
@ -302,7 +302,7 @@
<string name="resize_mode_zoom">Yaxınlaşdır</string> <string name="resize_mode_zoom">Yaxınlaşdır</string>
<string name="resize_mode_fit">Uyğunlaşdır</string> <string name="resize_mode_fit">Uyğunlaşdır</string>
<string name="repeat_mode_none">Heç biri</string> <string name="repeat_mode_none">Heç biri</string>
<string name="repeat_mode_current">Cari</string> <string name="repeat_mode_current">Hazırkı</string>
<string name="backup_restore">Nüsxələ &amp; bərpa et</string> <string name="backup_restore">Nüsxələ &amp; bərpa et</string>
<string name="backup">Nüsxələ</string> <string name="backup">Nüsxələ</string>
<string name="picture_in_picture">Şəkil içində Şəkil</string> <string name="picture_in_picture">Şəkil içində Şəkil</string>
@ -337,10 +337,10 @@
<string name="background_channel_description">Səs oynadıcını idarə etmək üçün düymələrlə bildiriş göstərir.</string> <string name="background_channel_description">Səs oynadıcını idarə etmək üçün düymələrlə bildiriş göstərir.</string>
<string name="play_next">Sonrakında oynat</string> <string name="play_next">Sonrakında oynat</string>
<string name="navigation_bar">Naviqasiya çubuğu</string> <string name="navigation_bar">Naviqasiya çubuğu</string>
<string name="select_at_least_one">Lütfən, ən az bir element seç</string> <string name="select_at_least_one">Xahiş edirik, ən az bir element seç</string>
<string name="change_region">Trend\'in cari ölkə üçün əlçatan olmadığı görünür.Lütfən, tənzimləmələrdə başqasını seç.</string> <string name="change_region">Trend\'in hazırkı ölkə üçün əlçatan olmadığı görünür.Xahiş edirik, tənzimləmələrdə başqasını seç.</string>
<string name="limit_hls">HLS\'ni 1080p ilə məhdudlaşdır</string> <string name="limit_hls">HLS\'ni 1080p ilə məhdudlaşdır</string>
<string name="default_load_interval">Defolt</string> <string name="default_load_interval">Standart</string>
<string name="progressive_load_interval">Qabaqcıl, yükləmə intervalı ölçüsü</string> <string name="progressive_load_interval">Qabaqcıl, yükləmə intervalı ölçüsü</string>
<string name="progressive_load_interval_summary">Daha aşağı dəyər ilkin video yükləməni sürətləndirə bilər.</string> <string name="progressive_load_interval_summary">Daha aşağı dəyər ilkin video yükləməni sürətləndirə bilər.</string>
<string name="views_placeholder">baxış</string> <string name="views_placeholder">baxış</string>
@ -360,7 +360,7 @@
<string name="sb_markers_summary">Vaxt çubuğunda seqmentləri nişanla.</string> <string name="sb_markers_summary">Vaxt çubuğunda seqmentləri nişanla.</string>
<string name="livestreams">Canlı yayımlar</string> <string name="livestreams">Canlı yayımlar</string>
<string name="alternative_videos_layout">Alternativ video tərtibatı</string> <string name="alternative_videos_layout">Alternativ video tərtibatı</string>
<string name="defaultIconLight">Defolt işıqlı</string> <string name="defaultIconLight">Standart işıqlı</string>
<string name="playlistCloned">Pleylist klonlandı</string> <string name="playlistCloned">Pleylist klonlandı</string>
<string name="confirm_unsubscribe">%1$s abunəliyini ləğv etmək istədiyinizə əminsiniz\?</string> <string name="confirm_unsubscribe">%1$s abunəliyini ləğv etmək istədiyinizə əminsiniz\?</string>
<string name="confirm_unsubscribing">Abunəlik ləğvini təsdiqlə</string> <string name="confirm_unsubscribing">Abunəlik ləğvini təsdiqlə</string>
@ -370,18 +370,18 @@
<string name="start_time">Başlama vaxtı</string> <string name="start_time">Başlama vaxtı</string>
<string name="end_time">Bitmə vaxtı</string> <string name="end_time">Bitmə vaxtı</string>
<string name="notification_time">Bildiriş vaxtı</string> <string name="notification_time">Bildiriş vaxtı</string>
<string name="notification_time_summary">Bildirişlərin göstərilməsinə icazə verilən vaxt aralığı.</string> <string name="notification_time_summary">Bildirişləri göstərmək üçün icazə verilən vaxt aralığı.</string>
<string name="alternative_trending_layout">Alternativ trend tərtibatı</string> <string name="alternative_trending_layout">Alternativ trend tərtibatı</string>
<string name="navbar_order">Ardıcıllıq</string> <string name="navbar_order">Ardıcıllıq</string>
<string name="layout">Tərtibat</string> <string name="layout">Tərtibat</string>
<string name="alternative_player_layout">Alternativ oynadıcı tərtibatı</string> <string name="alternative_player_layout">Alternativ oynadıcı tərtibatı</string>
<string name="alternative_player_layout_summary">Əlaqəli videoları aşağıda deyil, şərhlərin üstündə cərgə kimi göstər.</string> <string name="alternative_player_layout_summary">Əlaqəli videoları aşağıda deyil, şərhlərin üstündə cərgə kimi göstər.</string>
<string name="audio_track">Səs treki</string> <string name="audio_track">Səs treki</string>
<string name="default_audio_track">Defolt</string> <string name="default_audio_track">Standart</string>
<string name="unsupported_file_format">Dəstəklənməyən fayl formatı!</string> <string name="unsupported_file_format">Dəstəklənməyən fayl formatı!</string>
<string name="auto_quality">Avtomatik</string> <string name="auto_quality">Avtomatik</string>
<string name="hls_instead_of_dash">HLS istifadə et</string> <string name="hls_instead_of_dash">HLS istifadə et</string>
<string name="hls_instead_of_dash_summary">DASH əvəzinə HLS istifadə et (daha yavaş olacaq, tövsiyə edilmir)</string> <string name="hls_instead_of_dash_summary">DASH əvəzinə HLS istifadə et (daha yavaş olacaq, tövsiyə edilmədi)</string>
<string name="limit_to_runtime">İş vaxtı məhdudiyyət</string> <string name="limit_to_runtime">İş vaxtı məhdudiyyət</string>
<string name="open_queue_from_notification">Bildirişdən növbə aç</string> <string name="open_queue_from_notification">Bildirişdən növbə aç</string>
<string name="trends">Trendlər</string> <string name="trends">Trendlər</string>
@ -393,21 +393,21 @@
<string name="bookmarks_empty">Hələ əlfəcinlər yoxdur!</string> <string name="bookmarks_empty">Hələ əlfəcinlər yoxdur!</string>
<string name="queue_insert_related_videos">Əlaqəli videoları yerləşdir</string> <string name="queue_insert_related_videos">Əlaqəli videoları yerləşdir</string>
<string name="local_playlists">Yerli pleylistlər</string> <string name="local_playlists">Yerli pleylistlər</string>
<string name="select_other_start_tab">Lütfən, əvvəla başqa başlanğıc paneli seç!</string> <string name="select_other_start_tab">Xahiş edirik, əvvəla başqa başlatma paneli seç!</string>
<string name="not_enabled">Menyu elementi aktiv deyil!</string> <string name="not_enabled">Menyu elementi aktiv deyil!</string>
<string name="brightness">Parlaqlıq</string> <string name="brightness">Parlaqlıq</string>
<string name="auto">Avtomatik</string> <string name="auto">Avtomatik</string>
<string name="swipe_controls_summary">Parlaqlığı və səs səviyyəsini nizamlamaq üçün sürüşdürmə jesti istifadə et.</string> <string name="swipe_controls_summary">Parlaqlığı və səs səviyyəsini nizamlamaq üçün sürüşdürmə jesti istifadə et.</string>
<string name="volume">Səs səviyyəsi</string> <string name="volume">Səs səviyyəsi</string>
<string name="swipe_controls">Sürüşdürmə nəzarətləri</string> <string name="swipe_controls">Sürüşdürmə nəzarətləri</string>
<string name="defaults">Defolt</string> <string name="defaults">Standartlar</string>
<string name="pop_up">Ani pəncərə</string> <string name="pop_up">Ani pəncərə</string>
<string name="no_comments_available">Bu videoda şərhlər əlçatan deyil.</string> <string name="no_comments_available">Bu videoda şərhlər əlçatan deyil.</string>
<string name="comments_disabled">Şərhlər yükləyici tərəfindən deaktiv edilib.</string> <string name="comments_disabled">Şərhlər yükləyici tərəfindən deaktiv edilib.</string>
<string name="double_tap_seek">Axtarmaq üçün iki dəfə kliklə</string> <string name="double_tap_seek">Axtarmaq üçün iki dəfə kliklə</string>
<string name="double_tap_seek_summary">Oynadıcı mövqeyini geri və ya irəli çəkmək üçün sola yaxud sağa iki dəfə kliklə.</string> <string name="double_tap_seek_summary">Oynadıcı mövqeyini geri və ya irəli çəkmək üçün sola yaxud sağa iki dəfə kliklə.</string>
<string name="all_caught_up">Hamısını yuxarıda tutmusunuz</string> <string name="all_caught_up">Hamısını yuxarıda tutmusunuz</string>
<string name="all_caught_up_summary">Bütün yeni videolara baxmısınız</string> <string name="all_caught_up_summary">Bütün yeni videoları gördünüz</string>
<string name="captions_size">Altyazı ölçüsü</string> <string name="captions_size">Altyazı ölçüsü</string>
<string name="import_playlists">Pleylistləri idxal et</string> <string name="import_playlists">Pleylistləri idxal et</string>
<string name="export_playlists">Pleylistləri ixrac et</string> <string name="export_playlists">Pleylistləri ixrac et</string>
@ -422,7 +422,7 @@
<string name="theme_monochrome">Minimalist Tək Rəngli</string> <string name="theme_monochrome">Minimalist Tək Rəngli</string>
<string name="play_latest_videos">Ən son videoları oynat</string> <string name="play_latest_videos">Ən son videoları oynat</string>
<string name="nothing_selected">Heç nə seçilməyib!</string> <string name="nothing_selected">Heç nə seçilməyib!</string>
<string name="color_violet">Hərtərəfli Bənövşəyi</string> <string name="color_violet">Bütöv Bənövşəyi</string>
<string name="failed_fetching_instances">Mövcud nümunələri əldə etmək mümkün olmadı.</string> <string name="failed_fetching_instances">Mövcud nümunələri əldə etmək mümkün olmadı.</string>
<string name="hide_watched_from_feed">Baxılan videoları axından gizlət</string> <string name="hide_watched_from_feed">Baxılan videoları axından gizlət</string>
<string name="hide_watched_from_feed_summary">Abunəliklər panelində 90% daha çox baxılan videoları göstərmə.</string> <string name="hide_watched_from_feed_summary">Abunəliklər panelində 90% daha çox baxılan videoları göstərmə.</string>
@ -432,15 +432,15 @@
<string name="remove_bookmark">Əlfəcini sil</string> <string name="remove_bookmark">Əlfəcini sil</string>
<string name="add_to_bookmarks">Əlfəcinlərə əlavə et</string> <string name="add_to_bookmarks">Əlfəcinlərə əlavə et</string>
<string name="forward">İrəli</string> <string name="forward">İrəli</string>
<string name="pause">Fasilə ver</string> <string name="pause">Dayandır</string>
<string name="alternative_pip_controls">Alternativ PiP nəzarətləri</string> <string name="alternative_pip_controls">Alternativ PiP nəzarətləri</string>
<string name="alternative_pip_controls_summary">Yalnız səsi göstər və irəli və geri çevirmək əvəzində PiP-də idarəetmələri ötür</string> <string name="alternative_pip_controls_summary">PiP\'də, irəli və geri çevirmək əvəzinə \"yalnız səs\" düyməsin göstər və idarəetmələri ötür</string>
<string name="rewind">Geri sar</string> <string name="rewind">Geri sar</string>
<string name="audio_player">Səs oynadıcı</string> <string name="audio_player">Səs oynadıcı</string>
<string name="audio_only_mode">Yalnız səs rejimi</string> <string name="audio_only_mode">Yalnız səs rejimi</string>
<string name="audio_only_mode_summary">LibreTube-u musiqi oynadıcıya dəyiş.</string> <string name="audio_only_mode_summary">LibreTube-u musiqi oynadıcıya dəyiş.</string>
<string name="no_subtitle">Altyazı yoxdur</string> <string name="no_subtitle">Altyazı yoxdur</string>
<string name="download_paused">Endirməyə fasilə verildi</string> <string name="download_paused">Endirmə dayandırıldı</string>
<string name="download_completed">Endirmə tamamlandı</string> <string name="download_completed">Endirmə tamamlandı</string>
<string name="concurrent_downloads">Maksimal paralel endirmələr</string> <string name="concurrent_downloads">Maksimal paralel endirmələr</string>
<string name="concurrent_downloads_limit_reached">Maksimal paralel endirmə limitinə çatıldı.</string> <string name="concurrent_downloads_limit_reached">Maksimal paralel endirmə limitinə çatıldı.</string>
@ -450,4 +450,5 @@
<string name="skip_silence">Səssizliyi ötür</string> <string name="skip_silence">Səssizliyi ötür</string>
<string name="help">Kömək</string> <string name="help">Kömək</string>
<string name="faq">T-TSS</string> <string name="faq">T-TSS</string>
<string name="replies">Cavablar</string>
</resources> </resources>

View File

@ -395,4 +395,5 @@
<string name="bookmark">বুকমার্ক</string> <string name="bookmark">বুকমার্ক</string>
<string name="clear_bookmarks">বুকমার্ক মুছে দিন</string> <string name="clear_bookmarks">বুকমার্ক মুছে দিন</string>
<string name="bookmarks_empty">কোনো বুকমার্ক নেই!</string> <string name="bookmarks_empty">কোনো বুকমার্ক নেই!</string>
<string name="pop_up">পপ-আপ</string>
</resources> </resources>

View File

@ -450,4 +450,5 @@
<string name="skip_silence">Přeskočit ticho</string> <string name="skip_silence">Přeskočit ticho</string>
<string name="help">Nápověda</string> <string name="help">Nápověda</string>
<string name="faq">Často kladené dotazy</string> <string name="faq">Často kladené dotazy</string>
<string name="replies">Odpovědi</string>
</resources> </resources>

View File

@ -441,4 +441,14 @@
<string name="download_completed">Herunterladen abgeschlossen</string> <string name="download_completed">Herunterladen abgeschlossen</string>
<string name="unknown">Unbekannt</string> <string name="unknown">Unbekannt</string>
<string name="resume">Fortsetzen</string> <string name="resume">Fortsetzen</string>
<string name="alternative_pip_controls_summary">\"Nur Audio\"- und Skip-Steuerung anzeigen im Bild-in-Bild-Modus anstelle von Vor- und Zurückspulen</string>
<string name="replies">Antworten</string>
<string name="concurrent_downloads_limit_reached">Maximale Anzahl gleichzeitiger Downloads erreicht.</string>
<string name="audio_only_mode_summary">LibreTube in einen Musikplayer umwandeln.</string>
<string name="faq">Häufig gestellte Fragen</string>
<string name="audio_player">Audio-Player</string>
<string name="help">Hilfe</string>
<string name="concurrent_downloads">Maximale Anzahl gleichzeitiger Downloads</string>
<string name="sleep_timer">Einschlaf-Timer</string>
<string name="skip_silence">Stille überspringen</string>
</resources> </resources>

View File

@ -450,4 +450,5 @@
<string name="skip_silence">Saltar silencio</string> <string name="skip_silence">Saltar silencio</string>
<string name="help">Ayuda</string> <string name="help">Ayuda</string>
<string name="faq">Preguntas frecuentes</string> <string name="faq">Preguntas frecuentes</string>
<string name="replies">Respuestas</string>
</resources> </resources>

View File

@ -450,4 +450,5 @@
<string name="skip_silence">चुप्पी छोड़ें</string> <string name="skip_silence">चुप्पी छोड़ें</string>
<string name="help">सहायता</string> <string name="help">सहायता</string>
<string name="faq">आम सवाल</string> <string name="faq">आम सवाल</string>
<string name="replies">जवाब</string>
</resources> </resources>

View File

@ -450,4 +450,5 @@
<string name="skip_silence">Csend átugrása</string> <string name="skip_silence">Csend átugrása</string>
<string name="help">Súgó</string> <string name="help">Súgó</string>
<string name="faq">GYIK</string> <string name="faq">GYIK</string>
<string name="replies">Válaszok</string>
</resources> </resources>

View File

@ -450,4 +450,5 @@
<string name="skip_silence">Lewati keheningan</string> <string name="skip_silence">Lewati keheningan</string>
<string name="help">Bantuan</string> <string name="help">Bantuan</string>
<string name="faq">SSD</string> <string name="faq">SSD</string>
<string name="replies">Balasan</string>
</resources> </resources>

View File

@ -450,4 +450,5 @@
<string name="skip_silence">דילוג על שקט</string> <string name="skip_silence">דילוג על שקט</string>
<string name="help">עזרה</string> <string name="help">עזרה</string>
<string name="faq">שו״ת</string> <string name="faq">שו״ת</string>
<string name="replies">תגובות</string>
</resources> </resources>

View File

@ -430,4 +430,16 @@
<string name="shuffle">셔플</string> <string name="shuffle">셔플</string>
<string name="add_to_bookmarks">북마크에 추가</string> <string name="add_to_bookmarks">북마크에 추가</string>
<string name="remove_bookmark">북마크 제거</string> <string name="remove_bookmark">북마크 제거</string>
<string name="replies">답글</string>
<string name="unknown">알 수 없음</string>
<string name="faq">FAQ</string>
<string name="concurrent_downloads">최대 동시 다운로드 수</string>
<string name="skip_silence">무음 건너뛰기</string>
<string name="concurrent_downloads_limit_reached">최대 동시 다운로드 수에 도달하였습니다.</string>
<string name="download_completed">다운로드 완료</string>
<string name="pause">일시정지</string>
<string name="sleep_timer">취침 타이머</string>
<string name="audio_player">오디오 플레이어</string>
<string name="audio_only_mode">오디오 모드</string>
<string name="audio_only_mode_summary">LibreTube 를 음악 플에어이로 바꿉니다.</string>
</resources> </resources>

View File

@ -450,4 +450,5 @@
<string name="skip_silence">ନୀରବତା ଛାଡିଦିଅ</string> <string name="skip_silence">ନୀରବତା ଛାଡିଦିଅ</string>
<string name="help">ସାହାଯ୍ୟ</string> <string name="help">ସାହାଯ୍ୟ</string>
<string name="faq">FAQ</string> <string name="faq">FAQ</string>
<string name="replies">ଉତ୍ତର ଗୁଡିକ</string>
</resources> </resources>

View File

@ -113,7 +113,7 @@
<string name="color_blue">ਅਨੰਦਮਈ ਨੀਲਾ</string> <string name="color_blue">ਅਨੰਦਮਈ ਨੀਲਾ</string>
<string name="color_yellow">ਜ਼ੋਰਦਾਰ ਪੀਲਾ</string> <string name="color_yellow">ਜ਼ੋਰਦਾਰ ਪੀਲਾ</string>
<string name="color_green">ਆਕਰਸ਼ਕ ਹਰਾ</string> <string name="color_green">ਆਕਰਸ਼ਕ ਹਰਾ</string>
<string name="color_purple">ਅਨੰਦਦਾਇਕ ਜਾਮ</string> <string name="color_purple">ਅਨੰਦਦਾਇਕ ਜਾਮ</string>
<string name="oledTheme">ਕਾਲ੍ਹਾ</string> <string name="oledTheme">ਕਾਲ੍ਹਾ</string>
<string name="material_you">ਮਟੀਰੀਅਲ ਯੂ</string> <string name="material_you">ਮਟੀਰੀਅਲ ਯੂ</string>
<string name="sponsorblock_notifications">ਨੋਟੀਫਿਕੇਸ਼ਨ</string> <string name="sponsorblock_notifications">ਨੋਟੀਫਿਕੇਸ਼ਨ</string>
@ -450,4 +450,5 @@
<string name="help">ਸਹਾਇਤਾ</string> <string name="help">ਸਹਾਇਤਾ</string>
<string name="faq">ਆਮ ਸਵਾਲ</string> <string name="faq">ਆਮ ਸਵਾਲ</string>
<string name="sleep_timer">ਸਲੀਪ ਟਾਈਮਰ</string> <string name="sleep_timer">ਸਲੀਪ ਟਾਈਮਰ</string>
<string name="replies">ਜਵਾਬ</string>
</resources> </resources>

View File

@ -450,4 +450,5 @@
<string name="skip_silence">Pular silêncio</string> <string name="skip_silence">Pular silêncio</string>
<string name="help">Ajuda</string> <string name="help">Ajuda</string>
<string name="faq">FAQ</string> <string name="faq">FAQ</string>
<string name="replies">Respostas</string>
</resources> </resources>

View File

@ -450,4 +450,5 @@
<string name="faq">FAQ</string> <string name="faq">FAQ</string>
<string name="sleep_timer">Temporizador de sono</string> <string name="sleep_timer">Temporizador de sono</string>
<string name="skip_silence">Ignorar o silêncio</string> <string name="skip_silence">Ignorar o silêncio</string>
<string name="replies">Respostas</string>
</resources> </resources>

View File

@ -450,4 +450,5 @@
<string name="skip_silence">Пропускать тишину</string> <string name="skip_silence">Пропускать тишину</string>
<string name="help">Помощь</string> <string name="help">Помощь</string>
<string name="faq">FAQ</string> <string name="faq">FAQ</string>
<string name="replies">Ответы</string>
</resources> </resources>

View File

@ -22,7 +22,7 @@
<string name="dlisinprogress">Iné sťahovanie práve prebieha, počkajte kým bude ukončené.</string> <string name="dlisinprogress">Iné sťahovanie práve prebieha, počkajte kým bude ukončené.</string>
<string name="downloadfailed">Sťahovanie zlyhalo.</string> <string name="downloadfailed">Sťahovanie zlyhalo.</string>
<string name="vlc">Otvoriť vo VLC</string> <string name="vlc">Otvoriť vo VLC</string>
<string name="vlcerror">Nemožno otvoriť vo VLC. Možno nie je nainštalovaný.</string> <string name="vlcerror">Nepodarilo sa otvoriť vo VLC. Možno nie je nainštalovaný.</string>
<string name="import_from_yt">Import odberov</string> <string name="import_from_yt">Import odberov</string>
<string name="import_from_yt_summary">Z YouTube alebo NewPipe</string> <string name="import_from_yt_summary">Z YouTube alebo NewPipe</string>
<string name="server_error">Na serveri sa vyskytol problém. Skúsiť inú inštanciu\?</string> <string name="server_error">Na serveri sa vyskytol problém. Skúsiť inú inštanciu\?</string>
@ -175,7 +175,7 @@
<string name="hide_chapters">Skryť kapitoly</string> <string name="hide_chapters">Skryť kapitoly</string>
<string name="category_interaction_description">Ak sa uprostred obsahu nachádza krátka pripomienka, aby ste sa prihlásili k odberu alebo sledovaniu. Ak je dlhý alebo o niečom konkrétnom, mal by byť namiesto toho sebapropagáciou.</string> <string name="category_interaction_description">Ak sa uprostred obsahu nachádza krátka pripomienka, aby ste sa prihlásili k odberu alebo sledovaniu. Ak je dlhý alebo o niečom konkrétnom, mal by byť namiesto toho sebapropagáciou.</string>
<string name="buffering_goal">Cieľ vyrovnávacej pamäte</string> <string name="buffering_goal">Cieľ vyrovnávacej pamäte</string>
<string name="category_filler_description">Ide o vedľajšie scény pridané len ako výplň alebo humor, ktoré nie sú potrebné na pochopenie hlavného obsahu videa.</string> <string name="category_filler_description">Pre vedľajšie scény pridané len ako výplň alebo humor, ktoré nie sú potrebné na pochopenie hlavného obsahu videa.</string>
<string name="category_music_offtopic_description">Len na použitie v hudobných videoklipoch. Mal by pokrývať časti videoklipu, ktoré nie sú súčasťou oficiálnych mixov. Nakoniec by sa video malo čo najviac podobať verzii mixu na Spotify alebo akejkoľvek inej verzii mixu, alebo by malo obmedziť hovorenie alebo iné rušivé prvky.</string> <string name="category_music_offtopic_description">Len na použitie v hudobných videoklipoch. Mal by pokrývať časti videoklipu, ktoré nie sú súčasťou oficiálnych mixov. Nakoniec by sa video malo čo najviac podobať verzii mixu na Spotify alebo akejkoľvek inej verzii mixu, alebo by malo obmedziť hovorenie alebo iné rušivé prvky.</string>
<string name="category_outro_description">Informácie po skončení. Nie pre závery s informáciami.</string> <string name="category_outro_description">Informácie po skončení. Nie pre závery s informáciami.</string>
<string name="turnInternetOn">Prosím zapnite si wifi alebo mobilné dáta aby ste sa pripojili na internet.</string> <string name="turnInternetOn">Prosím zapnite si wifi alebo mobilné dáta aby ste sa pripojili na internet.</string>
@ -292,4 +292,5 @@
<string name="best_quality">Najlepšia</string> <string name="best_quality">Najlepšia</string>
<string name="playerAudioFormat">Audio formát pre prehrávač</string> <string name="playerAudioFormat">Audio formát pre prehrávač</string>
<string name="playerAudioQuality">Kvalita zvuku</string> <string name="playerAudioQuality">Kvalita zvuku</string>
<string name="replies">Odpovede</string>
</resources> </resources>

View File

@ -450,4 +450,5 @@
<string name="skip_silence">Sessizliği atla</string> <string name="skip_silence">Sessizliği atla</string>
<string name="help">Yardım</string> <string name="help">Yardım</string>
<string name="faq">SSS</string> <string name="faq">SSS</string>
<string name="replies">Cevaplar</string>
</resources> </resources>

View File

@ -450,4 +450,5 @@
<string name="faq">ЧаПи</string> <string name="faq">ЧаПи</string>
<string name="sleep_timer">Таймер сну</string> <string name="sleep_timer">Таймер сну</string>
<string name="skip_silence">Пропускати тишу</string> <string name="skip_silence">Пропускати тишу</string>
<string name="replies">Відповіді</string>
</resources> </resources>

View File

@ -450,4 +450,5 @@
<string name="skip_silence">跳过静音</string> <string name="skip_silence">跳过静音</string>
<string name="help">帮助</string> <string name="help">帮助</string>
<string name="faq">常见问题</string> <string name="faq">常见问题</string>
<string name="replies">回复</string>
</resources> </resources>