mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-29 00:10:32 +05:30
Merge pull request #796 from Bnyro/master
add data saver mode, history preference category
This commit is contained in:
commit
a36fde0cf6
@ -1,7 +1,16 @@
|
|||||||
package com.github.libretube
|
package com.github.libretube
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Global variables can be stored here
|
||||||
|
*/
|
||||||
object Globals {
|
object Globals {
|
||||||
|
// for the player fragment
|
||||||
var isFullScreen = false
|
var isFullScreen = false
|
||||||
var isMiniPlayerVisible = false
|
var isMiniPlayerVisible = false
|
||||||
|
|
||||||
|
// for the settings
|
||||||
var isCurrentViewMainSettings = true
|
var isCurrentViewMainSettings = true
|
||||||
|
|
||||||
|
// for the data saver mode
|
||||||
|
var dataSaverModeEnabled = false
|
||||||
}
|
}
|
||||||
|
@ -75,6 +75,13 @@ class MainActivity : AppCompatActivity() {
|
|||||||
RetrofitInstance.url
|
RetrofitInstance.url
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// save whether the data saver mode is enabled
|
||||||
|
Globals.dataSaverModeEnabled = PreferenceHelper.getBoolean(
|
||||||
|
this,
|
||||||
|
"data_saver_mode",
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
// show noInternet Activity if no internet available on app startup
|
// show noInternet Activity if no internet available on app startup
|
||||||
if (!ConnectionHelper.isNetworkAvailable(this)) {
|
if (!ConnectionHelper.isNetworkAvailable(this)) {
|
||||||
val noInternetIntent = Intent(this, NoInternetActivity::class.java)
|
val noInternetIntent = Intent(this, NoInternetActivity::class.java)
|
||||||
@ -268,7 +275,8 @@ class MainActivity : AppCompatActivity() {
|
|||||||
minimizePlayer()
|
minimizePlayer()
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
if (navController.currentDestination?.id == startFragmentId) {
|
if (navController.currentDestination?.id == startFragmentId) {
|
||||||
super.onBackPressed()
|
// close app
|
||||||
|
moveTaskToBack(true)
|
||||||
} else {
|
} else {
|
||||||
navController.popBackStack()
|
navController.popBackStack()
|
||||||
}
|
}
|
||||||
|
@ -3,9 +3,10 @@ package com.github.libretube.activities
|
|||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import com.github.libretube.Globals
|
|
||||||
import com.github.libretube.R
|
import com.github.libretube.R
|
||||||
import com.github.libretube.databinding.ActivitySettingsBinding
|
import com.github.libretube.databinding.ActivitySettingsBinding
|
||||||
|
import com.github.libretube.preferences.AboutFragment
|
||||||
|
import com.github.libretube.preferences.CommunityFragment
|
||||||
import com.github.libretube.preferences.MainSettings
|
import com.github.libretube.preferences.MainSettings
|
||||||
import com.github.libretube.util.ThemeHelper
|
import com.github.libretube.util.ThemeHelper
|
||||||
|
|
||||||
@ -22,6 +23,8 @@ class SettingsActivity : AppCompatActivity() {
|
|||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
binding = ActivitySettingsBinding.inflate(layoutInflater)
|
binding = ActivitySettingsBinding.inflate(layoutInflater)
|
||||||
|
|
||||||
|
// animate the layout transition
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
overridePendingTransition(50, 50)
|
overridePendingTransition(50, 50)
|
||||||
}
|
}
|
||||||
@ -43,16 +46,24 @@ class SettingsActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
override fun onBackPressed() {
|
||||||
if (Globals.isCurrentViewMainSettings) {
|
when (supportFragmentManager.findFragmentById(R.id.settings)) {
|
||||||
super.onBackPressed()
|
is MainSettings -> {
|
||||||
finishAndRemoveTask()
|
super.onBackPressed()
|
||||||
} else {
|
finishAndRemoveTask()
|
||||||
Globals.isCurrentViewMainSettings = true
|
}
|
||||||
supportFragmentManager
|
is CommunityFragment -> {
|
||||||
.beginTransaction()
|
supportFragmentManager
|
||||||
.replace(R.id.settings, MainSettings())
|
.beginTransaction()
|
||||||
.commit()
|
.replace(R.id.settings, AboutFragment())
|
||||||
changeTopBarText(getString(R.string.settings))
|
.commit()
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
supportFragmentManager
|
||||||
|
.beginTransaction()
|
||||||
|
.replace(R.id.settings, MainSettings())
|
||||||
|
.commit()
|
||||||
|
changeTopBarText(getString(R.string.settings))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,8 +12,8 @@ import com.github.libretube.databinding.VideoChannelRowBinding
|
|||||||
import com.github.libretube.dialogs.VideoOptionsDialog
|
import com.github.libretube.dialogs.VideoOptionsDialog
|
||||||
import com.github.libretube.fragments.PlayerFragment
|
import com.github.libretube.fragments.PlayerFragment
|
||||||
import com.github.libretube.obj.StreamItem
|
import com.github.libretube.obj.StreamItem
|
||||||
|
import com.github.libretube.util.ConnectionHelper
|
||||||
import com.github.libretube.util.formatShort
|
import com.github.libretube.util.formatShort
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
|
|
||||||
class ChannelAdapter(
|
class ChannelAdapter(
|
||||||
private val videoFeed: MutableList<StreamItem>,
|
private val videoFeed: MutableList<StreamItem>,
|
||||||
@ -45,7 +45,7 @@ class ChannelAdapter(
|
|||||||
DateUtils.getRelativeTimeSpanString(trending.uploaded!!)
|
DateUtils.getRelativeTimeSpanString(trending.uploaded!!)
|
||||||
channelDuration.text =
|
channelDuration.text =
|
||||||
DateUtils.formatElapsedTime(trending.duration!!)
|
DateUtils.formatElapsedTime(trending.duration!!)
|
||||||
Picasso.get().load(trending.thumbnail).into(channelThumbnail)
|
ConnectionHelper.loadImage(trending.thumbnail, channelThumbnail)
|
||||||
root.setOnClickListener {
|
root.setOnClickListener {
|
||||||
var bundle = Bundle()
|
var bundle = Bundle()
|
||||||
bundle.putString("videoId", trending.url!!.replace("/watch?v=", ""))
|
bundle.putString("videoId", trending.url!!.replace("/watch?v=", ""))
|
||||||
|
@ -5,8 +5,8 @@ import android.view.ViewGroup
|
|||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.github.libretube.databinding.ChapterColumnBinding
|
import com.github.libretube.databinding.ChapterColumnBinding
|
||||||
import com.github.libretube.obj.ChapterSegment
|
import com.github.libretube.obj.ChapterSegment
|
||||||
|
import com.github.libretube.util.ConnectionHelper
|
||||||
import com.google.android.exoplayer2.ExoPlayer
|
import com.google.android.exoplayer2.ExoPlayer
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
|
|
||||||
class ChaptersAdapter(
|
class ChaptersAdapter(
|
||||||
private val chapters: List<ChapterSegment>,
|
private val chapters: List<ChapterSegment>,
|
||||||
@ -23,7 +23,7 @@ class ChaptersAdapter(
|
|||||||
override fun onBindViewHolder(holder: ChaptersViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: ChaptersViewHolder, position: Int) {
|
||||||
val chapter = chapters[position]
|
val chapter = chapters[position]
|
||||||
holder.binding.apply {
|
holder.binding.apply {
|
||||||
Picasso.get().load(chapter.image).fit().centerCrop().into(chapterImage)
|
ConnectionHelper.loadImage(chapter.image, chapterImage)
|
||||||
chapterTitle.text = chapter.title
|
chapterTitle.text = chapter.title
|
||||||
|
|
||||||
root.setOnClickListener {
|
root.setOnClickListener {
|
||||||
|
@ -14,9 +14,9 @@ import com.github.libretube.activities.MainActivity
|
|||||||
import com.github.libretube.databinding.CommentsRowBinding
|
import com.github.libretube.databinding.CommentsRowBinding
|
||||||
import com.github.libretube.obj.Comment
|
import com.github.libretube.obj.Comment
|
||||||
import com.github.libretube.obj.CommentsPage
|
import com.github.libretube.obj.CommentsPage
|
||||||
|
import com.github.libretube.util.ConnectionHelper
|
||||||
import com.github.libretube.util.RetrofitInstance
|
import com.github.libretube.util.RetrofitInstance
|
||||||
import com.github.libretube.util.formatShort
|
import com.github.libretube.util.formatShort
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -53,7 +53,7 @@ class CommentsAdapter(
|
|||||||
" • " + comment.commentedTime.toString()
|
" • " + comment.commentedTime.toString()
|
||||||
commentText.text =
|
commentText.text =
|
||||||
comment.commentText.toString()
|
comment.commentText.toString()
|
||||||
Picasso.get().load(comment.thumbnail).fit().centerCrop().into(commentorImage)
|
ConnectionHelper.loadImage(comment.thumbnail, commentorImage)
|
||||||
likesTextView.text =
|
likesTextView.text =
|
||||||
comment.likeCount?.toLong().formatShort()
|
comment.likeCount?.toLong().formatShort()
|
||||||
if (comment.verified == true) {
|
if (comment.verified == true) {
|
||||||
|
@ -17,8 +17,8 @@ import com.github.libretube.fragments.PlayerFragment
|
|||||||
import com.github.libretube.obj.PlaylistId
|
import com.github.libretube.obj.PlaylistId
|
||||||
import com.github.libretube.obj.StreamItem
|
import com.github.libretube.obj.StreamItem
|
||||||
import com.github.libretube.preferences.PreferenceHelper
|
import com.github.libretube.preferences.PreferenceHelper
|
||||||
|
import com.github.libretube.util.ConnectionHelper
|
||||||
import com.github.libretube.util.RetrofitInstance
|
import com.github.libretube.util.RetrofitInstance
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -55,7 +55,7 @@ class PlaylistAdapter(
|
|||||||
playlistTitle.text = streamItem.title
|
playlistTitle.text = streamItem.title
|
||||||
playlistDescription.text = streamItem.uploaderName
|
playlistDescription.text = streamItem.uploaderName
|
||||||
playlistDuration.text = DateUtils.formatElapsedTime(streamItem.duration!!)
|
playlistDuration.text = DateUtils.formatElapsedTime(streamItem.duration!!)
|
||||||
Picasso.get().load(streamItem.thumbnail).into(playlistThumbnail)
|
ConnectionHelper.loadImage(streamItem.thumbnail, playlistThumbnail)
|
||||||
root.setOnClickListener {
|
root.setOnClickListener {
|
||||||
var bundle = Bundle()
|
var bundle = Bundle()
|
||||||
bundle.putString("videoId", streamItem.url!!.replace("/watch?v=", ""))
|
bundle.putString("videoId", streamItem.url!!.replace("/watch?v=", ""))
|
||||||
|
@ -12,9 +12,9 @@ import com.github.libretube.databinding.PlaylistsRowBinding
|
|||||||
import com.github.libretube.obj.PlaylistId
|
import com.github.libretube.obj.PlaylistId
|
||||||
import com.github.libretube.obj.Playlists
|
import com.github.libretube.obj.Playlists
|
||||||
import com.github.libretube.preferences.PreferenceHelper
|
import com.github.libretube.preferences.PreferenceHelper
|
||||||
|
import com.github.libretube.util.ConnectionHelper
|
||||||
import com.github.libretube.util.RetrofitInstance
|
import com.github.libretube.util.RetrofitInstance
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -45,7 +45,7 @@ class PlaylistsAdapter(
|
|||||||
override fun onBindViewHolder(holder: PlaylistsViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: PlaylistsViewHolder, position: Int) {
|
||||||
val playlist = playlists[position]
|
val playlist = playlists[position]
|
||||||
holder.binding.apply {
|
holder.binding.apply {
|
||||||
Picasso.get().load(playlist.thumbnail).into(playlistThumbnail)
|
ConnectionHelper.loadImage(playlist.thumbnail, playlistThumbnail)
|
||||||
// set imageview drawable as empty playlist if imageview empty
|
// set imageview drawable as empty playlist if imageview empty
|
||||||
if (playlistThumbnail.drawable == null) {
|
if (playlistThumbnail.drawable == null) {
|
||||||
playlistThumbnail.setImageResource(R.drawable.ic_empty_playlist)
|
playlistThumbnail.setImageResource(R.drawable.ic_empty_playlist)
|
||||||
|
@ -10,8 +10,8 @@ import com.github.libretube.R
|
|||||||
import com.github.libretube.activities.MainActivity
|
import com.github.libretube.activities.MainActivity
|
||||||
import com.github.libretube.databinding.RepliesRowBinding
|
import com.github.libretube.databinding.RepliesRowBinding
|
||||||
import com.github.libretube.obj.Comment
|
import com.github.libretube.obj.Comment
|
||||||
|
import com.github.libretube.util.ConnectionHelper
|
||||||
import com.github.libretube.util.formatShort
|
import com.github.libretube.util.formatShort
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
|
|
||||||
class RepliesAdapter(
|
class RepliesAdapter(
|
||||||
private val replies: MutableList<Comment>
|
private val replies: MutableList<Comment>
|
||||||
@ -44,7 +44,7 @@ class RepliesAdapter(
|
|||||||
" • " + reply.commentedTime.toString()
|
" • " + reply.commentedTime.toString()
|
||||||
commentText.text =
|
commentText.text =
|
||||||
reply.commentText.toString()
|
reply.commentText.toString()
|
||||||
Picasso.get().load(reply.thumbnail).fit().centerCrop().into(commentorImage)
|
ConnectionHelper.loadImage(reply.thumbnail, commentorImage)
|
||||||
likesTextView.text =
|
likesTextView.text =
|
||||||
reply.likeCount?.toLong().formatShort()
|
reply.likeCount?.toLong().formatShort()
|
||||||
if (reply.verified == true) {
|
if (reply.verified == true) {
|
||||||
|
@ -20,9 +20,9 @@ import com.github.libretube.fragments.PlayerFragment
|
|||||||
import com.github.libretube.obj.SearchItem
|
import com.github.libretube.obj.SearchItem
|
||||||
import com.github.libretube.obj.Subscribe
|
import com.github.libretube.obj.Subscribe
|
||||||
import com.github.libretube.preferences.PreferenceHelper
|
import com.github.libretube.preferences.PreferenceHelper
|
||||||
|
import com.github.libretube.util.ConnectionHelper
|
||||||
import com.github.libretube.util.RetrofitInstance
|
import com.github.libretube.util.RetrofitInstance
|
||||||
import com.github.libretube.util.formatShort
|
import com.github.libretube.util.formatShort
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -84,14 +84,14 @@ class SearchAdapter(
|
|||||||
|
|
||||||
private fun bindWatch(item: SearchItem, binding: VideoSearchRowBinding) {
|
private fun bindWatch(item: SearchItem, binding: VideoSearchRowBinding) {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
Picasso.get().load(item.thumbnail).fit().centerCrop().into(searchThumbnail)
|
ConnectionHelper.loadImage(item.thumbnail, searchThumbnail)
|
||||||
if (item.duration != -1L) {
|
if (item.duration != -1L) {
|
||||||
searchThumbnailDuration.text = DateUtils.formatElapsedTime(item.duration!!)
|
searchThumbnailDuration.text = DateUtils.formatElapsedTime(item.duration!!)
|
||||||
} else {
|
} else {
|
||||||
searchThumbnailDuration.text = root.context.getString(R.string.live)
|
searchThumbnailDuration.text = root.context.getString(R.string.live)
|
||||||
searchThumbnailDuration.setBackgroundColor(R.attr.colorPrimaryDark)
|
searchThumbnailDuration.setBackgroundColor(R.attr.colorPrimaryDark)
|
||||||
}
|
}
|
||||||
Picasso.get().load(item.uploaderAvatar).fit().centerCrop().into(searchChannelImage)
|
ConnectionHelper.loadImage(item.uploaderAvatar, searchChannelImage)
|
||||||
searchDescription.text = item.title
|
searchDescription.text = item.title
|
||||||
val viewsString = if (item.views?.toInt() != -1) item.views.formatShort() else ""
|
val viewsString = if (item.views?.toInt() != -1) item.views.formatShort() else ""
|
||||||
val uploadDate = if (item.uploadedDate != null) item.uploadedDate else ""
|
val uploadDate = if (item.uploadedDate != null) item.uploadedDate else ""
|
||||||
@ -131,7 +131,7 @@ class SearchAdapter(
|
|||||||
|
|
||||||
private fun bindChannel(item: SearchItem, binding: ChannelSearchRowBinding) {
|
private fun bindChannel(item: SearchItem, binding: ChannelSearchRowBinding) {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
Picasso.get().load(item.thumbnail).fit().centerCrop().into(searchChannelImage)
|
ConnectionHelper.loadImage(item.thumbnail, searchChannelImage)
|
||||||
searchChannelName.text = item.name
|
searchChannelName.text = item.name
|
||||||
searchViews.text = root.context.getString(
|
searchViews.text = root.context.getString(
|
||||||
R.string.subscribers,
|
R.string.subscribers,
|
||||||
@ -219,7 +219,7 @@ class SearchAdapter(
|
|||||||
|
|
||||||
private fun bindPlaylist(item: SearchItem, binding: PlaylistSearchRowBinding) {
|
private fun bindPlaylist(item: SearchItem, binding: PlaylistSearchRowBinding) {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
Picasso.get().load(item.thumbnail).fit().centerCrop().into(searchThumbnail)
|
ConnectionHelper.loadImage(item.thumbnail, searchThumbnail)
|
||||||
if (item.videos?.toInt() != -1) searchPlaylistNumber.text = item.videos.toString()
|
if (item.videos?.toInt() != -1) searchPlaylistNumber.text = item.videos.toString()
|
||||||
searchDescription.text = item.name
|
searchDescription.text = item.name
|
||||||
searchName.text = item.uploaderName
|
searchName.text = item.uploaderName
|
||||||
|
@ -15,8 +15,8 @@ import com.github.libretube.databinding.TrendingRowBinding
|
|||||||
import com.github.libretube.dialogs.VideoOptionsDialog
|
import com.github.libretube.dialogs.VideoOptionsDialog
|
||||||
import com.github.libretube.fragments.PlayerFragment
|
import com.github.libretube.fragments.PlayerFragment
|
||||||
import com.github.libretube.obj.StreamItem
|
import com.github.libretube.obj.StreamItem
|
||||||
|
import com.github.libretube.util.ConnectionHelper
|
||||||
import com.github.libretube.util.formatShort
|
import com.github.libretube.util.formatShort
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
|
|
||||||
class SubscriptionAdapter(
|
class SubscriptionAdapter(
|
||||||
private val videoFeed: List<StreamItem>,
|
private val videoFeed: List<StreamItem>,
|
||||||
@ -72,8 +72,8 @@ class SubscriptionAdapter(
|
|||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Picasso.get().load(trending.thumbnail).into(thumbnail)
|
ConnectionHelper.loadImage(trending.thumbnail, thumbnail)
|
||||||
Picasso.get().load(trending.uploaderAvatar).into(channelImage)
|
ConnectionHelper.loadImage(trending.uploaderAvatar, channelImage)
|
||||||
root.setOnClickListener {
|
root.setOnClickListener {
|
||||||
val bundle = Bundle()
|
val bundle = Bundle()
|
||||||
bundle.putString("videoId", trending.url!!.replace("/watch?v=", ""))
|
bundle.putString("videoId", trending.url!!.replace("/watch?v=", ""))
|
||||||
|
@ -12,8 +12,8 @@ import com.github.libretube.databinding.ChannelSubscriptionRowBinding
|
|||||||
import com.github.libretube.obj.Subscribe
|
import com.github.libretube.obj.Subscribe
|
||||||
import com.github.libretube.obj.Subscription
|
import com.github.libretube.obj.Subscription
|
||||||
import com.github.libretube.preferences.PreferenceHelper
|
import com.github.libretube.preferences.PreferenceHelper
|
||||||
|
import com.github.libretube.util.ConnectionHelper
|
||||||
import com.github.libretube.util.RetrofitInstance
|
import com.github.libretube.util.RetrofitInstance
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -40,7 +40,7 @@ class SubscriptionChannelAdapter(private val subscriptions: MutableList<Subscrip
|
|||||||
val subscription = subscriptions[position]
|
val subscription = subscriptions[position]
|
||||||
holder.binding.apply {
|
holder.binding.apply {
|
||||||
subscriptionChannelName.text = subscription.name
|
subscriptionChannelName.text = subscription.name
|
||||||
Picasso.get().load(subscription.avatar).into(subscriptionChannelImage)
|
ConnectionHelper.loadImage(subscription.avatar, subscriptionChannelImage)
|
||||||
root.setOnClickListener {
|
root.setOnClickListener {
|
||||||
val activity = root.context as MainActivity
|
val activity = root.context as MainActivity
|
||||||
val bundle = bundleOf("channel_id" to subscription.url)
|
val bundle = bundleOf("channel_id" to subscription.url)
|
||||||
|
@ -15,8 +15,8 @@ import com.github.libretube.databinding.TrendingRowBinding
|
|||||||
import com.github.libretube.dialogs.VideoOptionsDialog
|
import com.github.libretube.dialogs.VideoOptionsDialog
|
||||||
import com.github.libretube.fragments.PlayerFragment
|
import com.github.libretube.fragments.PlayerFragment
|
||||||
import com.github.libretube.obj.StreamItem
|
import com.github.libretube.obj.StreamItem
|
||||||
|
import com.github.libretube.util.ConnectionHelper
|
||||||
import com.github.libretube.util.formatShort
|
import com.github.libretube.util.formatShort
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
|
|
||||||
class TrendingAdapter(
|
class TrendingAdapter(
|
||||||
private val videoFeed: List<StreamItem>,
|
private val videoFeed: List<StreamItem>,
|
||||||
@ -63,12 +63,8 @@ class TrendingAdapter(
|
|||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (trending.thumbnail!!.isNotEmpty()) {
|
ConnectionHelper.loadImage(trending.thumbnail, thumbnail)
|
||||||
Picasso.get().load(trending.thumbnail).into(thumbnail)
|
ConnectionHelper.loadImage(trending.uploaderAvatar, channelImage)
|
||||||
}
|
|
||||||
if (trending.uploaderAvatar!!.isNotEmpty()) {
|
|
||||||
Picasso.get().load(trending.uploaderAvatar).into(channelImage)
|
|
||||||
}
|
|
||||||
|
|
||||||
root.setOnClickListener {
|
root.setOnClickListener {
|
||||||
var bundle = Bundle()
|
var bundle = Bundle()
|
||||||
|
@ -15,7 +15,7 @@ import com.github.libretube.databinding.WatchHistoryRowBinding
|
|||||||
import com.github.libretube.dialogs.VideoOptionsDialog
|
import com.github.libretube.dialogs.VideoOptionsDialog
|
||||||
import com.github.libretube.fragments.PlayerFragment
|
import com.github.libretube.fragments.PlayerFragment
|
||||||
import com.github.libretube.obj.WatchHistoryItem
|
import com.github.libretube.obj.WatchHistoryItem
|
||||||
import com.squareup.picasso.Picasso
|
import com.github.libretube.util.ConnectionHelper
|
||||||
|
|
||||||
class WatchHistoryAdapter(
|
class WatchHistoryAdapter(
|
||||||
private val watchHistory: MutableList<WatchHistoryItem>,
|
private val watchHistory: MutableList<WatchHistoryItem>,
|
||||||
@ -43,8 +43,8 @@ class WatchHistoryAdapter(
|
|||||||
channelName.text = video.uploader
|
channelName.text = video.uploader
|
||||||
uploadDate.text = video.uploadDate
|
uploadDate.text = video.uploadDate
|
||||||
thumbnailDuration.text = DateUtils.formatElapsedTime(video.duration?.toLong()!!)
|
thumbnailDuration.text = DateUtils.formatElapsedTime(video.duration?.toLong()!!)
|
||||||
Picasso.get().load(video.thumbnailUrl).into(thumbnail)
|
ConnectionHelper.loadImage(video.thumbnailUrl, thumbnail)
|
||||||
Picasso.get().load(video.uploaderAvatar).into(channelImage)
|
ConnectionHelper.loadImage(video.uploaderAvatar, channelImage)
|
||||||
|
|
||||||
channelImage.setOnClickListener {
|
channelImage.setOnClickListener {
|
||||||
val activity = root.context as MainActivity
|
val activity = root.context as MainActivity
|
||||||
|
@ -14,9 +14,9 @@ import com.github.libretube.adapters.ChannelAdapter
|
|||||||
import com.github.libretube.databinding.FragmentChannelBinding
|
import com.github.libretube.databinding.FragmentChannelBinding
|
||||||
import com.github.libretube.obj.Subscribe
|
import com.github.libretube.obj.Subscribe
|
||||||
import com.github.libretube.preferences.PreferenceHelper
|
import com.github.libretube.preferences.PreferenceHelper
|
||||||
|
import com.github.libretube.util.ConnectionHelper
|
||||||
import com.github.libretube.util.RetrofitInstance
|
import com.github.libretube.util.RetrofitInstance
|
||||||
import com.github.libretube.util.formatShort
|
import com.github.libretube.util.formatShort
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import retrofit2.HttpException
|
import retrofit2.HttpException
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
@ -194,8 +194,8 @@ class ChannelFragment : Fragment() {
|
|||||||
binding.channelDescription.text = response.description?.trim()
|
binding.channelDescription.text = response.description?.trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
Picasso.get().load(response.bannerUrl).into(binding.channelBanner)
|
ConnectionHelper.loadImage(response.bannerUrl, binding.channelBanner)
|
||||||
Picasso.get().load(response.avatarUrl).into(binding.channelImage)
|
ConnectionHelper.loadImage(response.avatarUrl, binding.channelImage)
|
||||||
channelAdapter = ChannelAdapter(
|
channelAdapter = ChannelAdapter(
|
||||||
response.relatedStreams!!.toMutableList(),
|
response.relatedStreams!!.toMutableList(),
|
||||||
childFragmentManager
|
childFragmentManager
|
||||||
|
@ -57,6 +57,7 @@ import com.github.libretube.obj.Subscribe
|
|||||||
import com.github.libretube.preferences.PreferenceHelper
|
import com.github.libretube.preferences.PreferenceHelper
|
||||||
import com.github.libretube.services.IS_DOWNLOAD_RUNNING
|
import com.github.libretube.services.IS_DOWNLOAD_RUNNING
|
||||||
import com.github.libretube.util.BackgroundMode
|
import com.github.libretube.util.BackgroundMode
|
||||||
|
import com.github.libretube.util.ConnectionHelper
|
||||||
import com.github.libretube.util.CronetHelper
|
import com.github.libretube.util.CronetHelper
|
||||||
import com.github.libretube.util.DescriptionAdapter
|
import com.github.libretube.util.DescriptionAdapter
|
||||||
import com.github.libretube.util.RetrofitInstance
|
import com.github.libretube.util.RetrofitInstance
|
||||||
@ -87,7 +88,6 @@ import com.google.android.exoplayer2.util.RepeatModeUtil
|
|||||||
import com.google.android.exoplayer2.video.VideoSize
|
import com.google.android.exoplayer2.video.VideoSize
|
||||||
import com.google.android.material.button.MaterialButton
|
import com.google.android.material.button.MaterialButton
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -739,17 +739,19 @@ class PlayerFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun initializePlayerView(view: View, response: Streams) {
|
private fun initializePlayerView(view: View, response: Streams) {
|
||||||
binding.playerViewsInfo.text =
|
binding.apply {
|
||||||
context?.getString(R.string.views, response.views.formatShort()) +
|
playerViewsInfo.text =
|
||||||
" • " + response.uploadDate
|
context?.getString(R.string.views, response.views.formatShort()) +
|
||||||
binding.textLike.text = response.likes.formatShort()
|
" • " + response.uploadDate
|
||||||
binding.textDislike.text = response.dislikes.formatShort()
|
textLike.text = response.likes.formatShort()
|
||||||
Picasso.get().load(response.uploaderAvatar).into(binding.playerChannelImage)
|
textDislike.text = response.dislikes.formatShort()
|
||||||
binding.playerChannelName.text = response.uploader
|
ConnectionHelper.loadImage(response.uploaderAvatar, binding.playerChannelImage)
|
||||||
|
playerChannelName.text = response.uploader
|
||||||
|
|
||||||
binding.titleTextView.text = response.title
|
titleTextView.text = response.title
|
||||||
binding.playerTitle.text = response.title
|
playerTitle.text = response.title
|
||||||
binding.playerDescription.text = response.description
|
playerDescription.text = response.description
|
||||||
|
}
|
||||||
|
|
||||||
playerBinding.exoTitle.text = response.title
|
playerBinding.exoTitle.text = response.title
|
||||||
|
|
||||||
|
@ -81,6 +81,13 @@ class AboutFragment : Fragment() {
|
|||||||
showSnackBar(text)
|
showSnackBar(text)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.community.setOnClickListener {
|
||||||
|
val communityFragment = CommunityFragment()
|
||||||
|
parentFragmentManager.beginTransaction()
|
||||||
|
.replace(R.id.settings, communityFragment)
|
||||||
|
.commitNow()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun openLinkFromHref(link: String) {
|
private fun openLinkFromHref(link: String) {
|
||||||
|
@ -3,6 +3,7 @@ package com.github.libretube.preferences
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
|
import androidx.preference.SwitchPreferenceCompat
|
||||||
import com.github.libretube.R
|
import com.github.libretube.R
|
||||||
import com.github.libretube.activities.SettingsActivity
|
import com.github.libretube.activities.SettingsActivity
|
||||||
import com.github.libretube.dialogs.RequireRestartDialog
|
import com.github.libretube.dialogs.RequireRestartDialog
|
||||||
@ -17,18 +18,10 @@ class AdvancedSettings : PreferenceFragmentCompat() {
|
|||||||
val settingsActivity = activity as SettingsActivity
|
val settingsActivity = activity as SettingsActivity
|
||||||
settingsActivity.changeTopBarText(getString(R.string.advanced))
|
settingsActivity.changeTopBarText(getString(R.string.advanced))
|
||||||
|
|
||||||
// clear search history
|
val dataSaverMode = findPreference<SwitchPreferenceCompat>("data_saver_mode")
|
||||||
val clearHistory = findPreference<Preference>("clear_history")
|
dataSaverMode?.setOnPreferenceChangeListener { _, _ ->
|
||||||
clearHistory?.setOnPreferenceClickListener {
|
val restartDialog = RequireRestartDialog()
|
||||||
PreferenceHelper.removePreference(requireContext(), "search_history")
|
restartDialog.show(childFragmentManager, "RequireRestartDialog")
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
// clear watch history and positions
|
|
||||||
val clearWatchHistory = findPreference<Preference>("clear_watch_history")
|
|
||||||
clearWatchHistory?.setOnPreferenceClickListener {
|
|
||||||
PreferenceHelper.removePreference(requireContext(), "watch_history")
|
|
||||||
PreferenceHelper.removePreference(requireContext(), "watch_positions")
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,38 @@
|
|||||||
|
package com.github.libretube.preferences
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.preference.Preference
|
||||||
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
|
import com.github.libretube.R
|
||||||
|
import com.github.libretube.activities.SettingsActivity
|
||||||
|
|
||||||
|
class HistorySettings : PreferenceFragmentCompat() {
|
||||||
|
|
||||||
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
|
setPreferencesFromResource(R.xml.history_settings, rootKey)
|
||||||
|
|
||||||
|
val settingsActivity = activity as SettingsActivity
|
||||||
|
settingsActivity.changeTopBarText(getString(R.string.history))
|
||||||
|
|
||||||
|
// clear search history
|
||||||
|
val clearHistory = findPreference<Preference>("clear_history")
|
||||||
|
clearHistory?.setOnPreferenceClickListener {
|
||||||
|
PreferenceHelper.removePreference(requireContext(), "search_history")
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
// clear watch history and positions
|
||||||
|
val clearWatchHistory = findPreference<Preference>("clear_watch_history")
|
||||||
|
clearWatchHistory?.setOnPreferenceClickListener {
|
||||||
|
PreferenceHelper.removePreference(requireContext(), "watch_history")
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
// clear watch positions
|
||||||
|
val clearWatchPositions = findPreference<Preference>("clear_watch_positions")
|
||||||
|
clearWatchPositions?.setOnPreferenceClickListener {
|
||||||
|
PreferenceHelper.removePreference(requireContext(), "watch_positions")
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -64,6 +64,13 @@ class MainSettings : PreferenceFragmentCompat() {
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val history = findPreference<Preference>("history")
|
||||||
|
history?.setOnPreferenceClickListener {
|
||||||
|
val newFragment = HistorySettings()
|
||||||
|
navigateToSettingsFragment(newFragment)
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
val advanced = findPreference<Preference>("advanced")
|
val advanced = findPreference<Preference>("advanced")
|
||||||
advanced?.setOnPreferenceClickListener {
|
advanced?.setOnPreferenceClickListener {
|
||||||
val newFragment = AdvancedSettings()
|
val newFragment = AdvancedSettings()
|
||||||
@ -84,13 +91,6 @@ class MainSettings : PreferenceFragmentCompat() {
|
|||||||
navigateToSettingsFragment(newFragment)
|
navigateToSettingsFragment(newFragment)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
val community = findPreference<Preference>("community")
|
|
||||||
community?.setOnPreferenceClickListener {
|
|
||||||
val newFragment = CommunityFragment()
|
|
||||||
navigateToSettingsFragment(newFragment)
|
|
||||||
true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun navigateToSettingsFragment(newFragment: Fragment) {
|
private fun navigateToSettingsFragment(newFragment: Fragment) {
|
||||||
|
@ -2,6 +2,9 @@ package com.github.libretube.util
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.ConnectivityManager
|
import android.net.ConnectivityManager
|
||||||
|
import android.widget.ImageView
|
||||||
|
import com.github.libretube.Globals
|
||||||
|
import com.squareup.picasso.Picasso
|
||||||
|
|
||||||
object ConnectionHelper {
|
object ConnectionHelper {
|
||||||
fun isNetworkAvailable(context: Context): Boolean {
|
fun isNetworkAvailable(context: Context): Boolean {
|
||||||
@ -33,4 +36,12 @@ object ConnectionHelper {
|
|||||||
|
|
||||||
return connectivityManager.activeNetworkInfo?.isConnected ?: false
|
return connectivityManager.activeNetworkInfo?.isConnected ?: false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// load an image from a url into an imageView
|
||||||
|
fun loadImage(url: String?, target: ImageView) {
|
||||||
|
// only load the image if the data saver mode is disabled
|
||||||
|
if (!Globals.dataSaverModeEnabled) {
|
||||||
|
Picasso.get().load(url).fit().centerCrop().into(target)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
10
app/src/main/res/drawable/ic_data_saver.xml
Normal file
10
app/src/main/res/drawable/ic_data_saver.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:tint="?android:attr/colorControlNormal"
|
||||||
|
android:viewportWidth="48"
|
||||||
|
android:viewportHeight="48">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FF000000"
|
||||||
|
android:pathData="M22.55,31.45L22.55,25.4L16.5,25.4v-3h6.05v-6.05h3v6.05h6v3h-6v6.05ZM42.15,32.55 L37.75,30.1q0.6,-1.55 0.9,-3.075 0.3,-1.525 0.3,-3.025 0,-5.8 -3.825,-10.05Q31.3,9.7 25.6,9.2L25.6,4.1q7.85,0.55 13.15,6.225Q44.05,16 44.05,23.8q0,2.25 -0.475,4.425T42.15,32.55ZM24.05,44q-4.1,0 -7.75,-1.575 -3.65,-1.575 -6.375,-4.275t-4.3,-6.35Q4.05,28.15 4.05,24.05q0,-7.9 5.325,-13.6Q14.7,4.75 22.6,4.15v5.1q-5.75,0.55 -9.6,4.775Q9.15,18.25 9.15,24.05q0,6.2 4.35,10.525T24.05,38.9q3.6,0 6.8,-1.625 3.2,-1.625 5.45,-4.575l4.4,2.55q-2.9,4.15 -7.275,6.45T24.05,44Z" />
|
||||||
|
</vector>
|
@ -117,6 +117,24 @@
|
|||||||
|
|
||||||
</com.google.android.material.card.MaterialCardView>
|
</com.google.android.material.card.MaterialCardView>
|
||||||
|
|
||||||
|
<com.google.android.material.card.MaterialCardView
|
||||||
|
android:id="@+id/community"
|
||||||
|
style="@style/AboutCard">
|
||||||
|
|
||||||
|
<LinearLayout style="@style/AboutItem">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
style="@style/AboutImageView"
|
||||||
|
android:src="@drawable/ic_community" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
style="@style/AboutTextView"
|
||||||
|
android:text="@string/community" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</com.google.android.material.card.MaterialCardView>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</ScrollView>
|
</ScrollView>
|
@ -23,8 +23,7 @@
|
|||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/thumbnail"
|
android:id="@+id/thumbnail"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent" />
|
||||||
android:src="@mipmap/ic_launcher" />
|
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
<androidx.cardview.widget.CardView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
@ -145,7 +145,7 @@
|
|||||||
<string name="advanced">Advanced</string>
|
<string name="advanced">Advanced</string>
|
||||||
<string name="player">Player</string>
|
<string name="player">Player</string>
|
||||||
<string name="appearance_summary">Adjust the app to your liking.</string>
|
<string name="appearance_summary">Adjust the app to your liking.</string>
|
||||||
<string name="advanced_summary">Downloads, history</string>
|
<string name="advanced_summary">Downloads, reset</string>
|
||||||
<string name="live">Live</string>
|
<string name="live">Live</string>
|
||||||
<string name="no_replies">This comment has no replies.</string>
|
<string name="no_replies">This comment has no replies.</string>
|
||||||
<string name="authors">Authors</string>
|
<string name="authors">Authors</string>
|
||||||
@ -209,7 +209,7 @@
|
|||||||
<string name="restore">Restore</string>
|
<string name="restore">Restore</string>
|
||||||
<string name="watch_history">Watch History</string>
|
<string name="watch_history">Watch History</string>
|
||||||
<string name="watch_positions">Remember position</string>
|
<string name="watch_positions">Remember position</string>
|
||||||
<string name="watch_positions_summary">Remember the watch position and automatically seek to it.</string>
|
<string name="watch_positions_summary">Restore last watch position</string>
|
||||||
<string name="auth_instance">Authentication instance</string>
|
<string name="auth_instance">Authentication instance</string>
|
||||||
<string name="auth_instance_summary">Use a different instance for authenticated calls.</string>
|
<string name="auth_instance_summary">Use a different instance for authenticated calls.</string>
|
||||||
<string name="auth_instances">Choose an auth instance</string>
|
<string name="auth_instances">Choose an auth instance</string>
|
||||||
@ -242,4 +242,11 @@
|
|||||||
<string name="pure_theme">Pure theme</string>
|
<string name="pure_theme">Pure theme</string>
|
||||||
<string name="pure_theme_summary">Pure white/black theme</string>
|
<string name="pure_theme_summary">Pure white/black theme</string>
|
||||||
<string name="no_player_found">No external player found. Please make sure you have one installed.</string>
|
<string name="no_player_found">No external player found. Please make sure you have one installed.</string>
|
||||||
|
<string name="data_saver_mode">Data saver mode</string>
|
||||||
|
<string name="data_saver_mode_summary">Don\'t load thumbnails and other images to save data.</string>
|
||||||
|
<string name="search_history_summary">Store the search queries locally</string>
|
||||||
|
<string name="watch_history_summary">Keep track of watched videos locally</string>
|
||||||
|
<string name="history_summary">Watch and search history</string>
|
||||||
|
<string name="watch_positions_title">Watch positions</string>
|
||||||
|
<string name="reset_watch_positions">Reset watch positions</string>
|
||||||
</resources>
|
</resources>
|
@ -31,44 +31,13 @@
|
|||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory app:title="@string/search_history">
|
<PreferenceCategory app:title="@string/advanced">
|
||||||
|
|
||||||
<SwitchPreferenceCompat
|
<SwitchPreferenceCompat
|
||||||
android:defaultValue="true"
|
android:icon="@drawable/ic_data_saver"
|
||||||
android:icon="@drawable/ic_history_filled"
|
android:summary="@string/data_saver_mode_summary"
|
||||||
app:key="search_history_toggle"
|
app:key="data_saver_mode"
|
||||||
app:title="@string/search_history" />
|
app:title="@string/data_saver_mode" />
|
||||||
|
|
||||||
<Preference
|
|
||||||
android:icon="@drawable/ic_trash"
|
|
||||||
app:key="clear_history"
|
|
||||||
app:title="@string/clear_history" />
|
|
||||||
|
|
||||||
</PreferenceCategory>
|
|
||||||
|
|
||||||
<PreferenceCategory app:title="@string/watch_history">
|
|
||||||
|
|
||||||
<SwitchPreferenceCompat
|
|
||||||
android:defaultValue="true"
|
|
||||||
android:icon="@drawable/ic_time_outlined"
|
|
||||||
app:key="watch_history_toggle"
|
|
||||||
app:title="@string/watch_history" />
|
|
||||||
|
|
||||||
<SwitchPreferenceCompat
|
|
||||||
android:defaultValue="true"
|
|
||||||
android:icon="@drawable/ic_play_filled"
|
|
||||||
app:key="watch_position_toggle"
|
|
||||||
app:summary="@string/watch_positions_summary"
|
|
||||||
app:title="@string/watch_positions" />
|
|
||||||
|
|
||||||
<Preference
|
|
||||||
android:icon="@drawable/ic_trash"
|
|
||||||
app:key="clear_watch_history"
|
|
||||||
app:title="@string/clear_history" />
|
|
||||||
|
|
||||||
</PreferenceCategory>
|
|
||||||
|
|
||||||
<PreferenceCategory>
|
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:icon="@drawable/ic_reset"
|
android:icon="@drawable/ic_reset"
|
||||||
|
53
app/src/main/res/xml/history_settings.xml
Normal file
53
app/src/main/res/xml/history_settings.xml
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<PreferenceCategory app:title="@string/search_history">
|
||||||
|
|
||||||
|
<SwitchPreferenceCompat
|
||||||
|
android:defaultValue="true"
|
||||||
|
android:icon="@drawable/ic_history_filled"
|
||||||
|
android:summary="@string/search_history_summary"
|
||||||
|
app:key="search_history_toggle"
|
||||||
|
app:title="@string/search_history" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:icon="@drawable/ic_trash"
|
||||||
|
app:key="clear_history"
|
||||||
|
app:title="@string/clear_history" />
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
<PreferenceCategory app:title="@string/watch_history">
|
||||||
|
|
||||||
|
<SwitchPreferenceCompat
|
||||||
|
android:defaultValue="true"
|
||||||
|
android:icon="@drawable/ic_time_outlined"
|
||||||
|
android:summary="@string/watch_history_summary"
|
||||||
|
app:key="watch_history_toggle"
|
||||||
|
app:title="@string/watch_history" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:icon="@drawable/ic_trash"
|
||||||
|
app:key="clear_watch_history"
|
||||||
|
app:title="@string/clear_history" />
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
<PreferenceCategory app:title="@string/watch_positions_title">
|
||||||
|
|
||||||
|
<SwitchPreferenceCompat
|
||||||
|
android:defaultValue="true"
|
||||||
|
android:icon="@drawable/ic_play_filled"
|
||||||
|
app:key="watch_position_toggle"
|
||||||
|
app:summary="@string/watch_positions_summary"
|
||||||
|
app:title="@string/watch_positions" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
app:title="@string/reset_watch_positions"
|
||||||
|
android:icon="@drawable/ic_reset"
|
||||||
|
app:key="reset_watch_positions" />
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
@ -50,6 +50,12 @@
|
|||||||
app:summary="@string/player_summary"
|
app:summary="@string/player_summary"
|
||||||
app:title="@string/audio_video" />
|
app:title="@string/audio_video" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:icon="@drawable/ic_history_filled"
|
||||||
|
android:summary="@string/history_summary"
|
||||||
|
app:key="history"
|
||||||
|
app:title="@string/history" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:icon="@drawable/ic_list"
|
android:icon="@drawable/ic_list"
|
||||||
app:key="advanced"
|
app:key="advanced"
|
||||||
@ -71,11 +77,6 @@
|
|||||||
app:key="about"
|
app:key="about"
|
||||||
app:title="@string/about" />
|
app:title="@string/about" />
|
||||||
|
|
||||||
<Preference
|
|
||||||
android:icon="@drawable/ic_community"
|
|
||||||
app:key="community"
|
|
||||||
app:title="@string/community" />
|
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user