add toggle card type history

pull/1317/head
deniscerri 1 month ago
parent c720dc635f
commit 939c7cca7b
No known key found for this signature in database
GPG Key ID: 95C43D517D830350

@ -13,6 +13,8 @@ import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.core.content.edit
import androidx.core.view.isVisible
import androidx.paging.PagingDataAdapter
import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.DiffUtil
@ -22,6 +24,7 @@ import com.deniscerri.ytdl.database.enums.DownloadType
import com.deniscerri.ytdl.database.models.HistoryItem
import com.deniscerri.ytdl.util.Extensions.loadThumbnail
import com.deniscerri.ytdl.util.Extensions.popup
import com.google.android.material.button.MaterialButton
import com.google.android.material.card.MaterialCardView
import com.google.android.material.color.MaterialColors
import com.google.android.material.floatingactionbutton.FloatingActionButton
@ -38,6 +41,7 @@ class HistoryPaginatedAdapter(onItemClickListener: OnItemClickListener, activity
private val onItemClickListener: OnItemClickListener
private val activity: Activity
private val sharedPreferences: SharedPreferences
var useDownloadCardDesign: Boolean = false
init {
checkedItems = mutableSetOf()
@ -45,38 +49,54 @@ class HistoryPaginatedAdapter(onItemClickListener: OnItemClickListener, activity
this.onItemClickListener = onItemClickListener
this.activity = activity
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity)
useDownloadCardDesign = sharedPreferences.getBoolean("history_use_download_card_design", false)
}
class ViewHolder(itemView: View, onItemClickListener: OnItemClickListener?) : RecyclerView.ViewHolder(itemView) {
val cardView: MaterialCardView
init {
cardView = itemView.findViewById(R.id.downloads_card_view)
cardView = itemView.findViewById(R.id.download_card_view)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HistoryPaginatedAdapter.ViewHolder {
return if (viewType == 0){
val cardView = LayoutInflater.from(parent.context)
.inflate(R.layout.history_card, parent, false)
ViewHolder(cardView, onItemClickListener)
}else{
val cardView = LayoutInflater.from(parent.context)
.inflate(R.layout.history_card_multiple, parent, false)
ViewHolder(cardView, onItemClickListener)
val layoutRes = when (viewType) {
TYPE_STANDARD_MULTIPLE -> R.layout.history_card_multiple
TYPE_DOWNLOAD_CARD_SINGLE -> R.layout.download_card
TYPE_DOWNLOAD_CARD_MULTIPLE -> R.layout.download_card_multiple
else -> R.layout.history_card
}
val cardView = LayoutInflater.from(parent.context).inflate(layoutRes, parent, false)
return ViewHolder(cardView, onItemClickListener)
}
override fun getItemViewType(position: Int): Int {
getItem(position)?.apply {
return if(this.downloadPath.size == 1){
0
}else{
1
val item = getItem(position) ?: return TYPE_STANDARD_SINGLE
if (useDownloadCardDesign) {
return if (item.downloadPath.size == 1) {
TYPE_DOWNLOAD_CARD_SINGLE
} else {
TYPE_DOWNLOAD_CARD_MULTIPLE
}
}
return 0
return if (item.downloadPath.size == 1) {
TYPE_STANDARD_SINGLE
} else {
TYPE_STANDARD_MULTIPLE
}
}
@SuppressLint("NotifyDataSetChanged")
fun toggleCardDesign() {
useDownloadCardDesign = !useDownloadCardDesign
sharedPreferences.edit(commit = true) {
putBoolean("history_use_download_card_design", useDownloadCardDesign)
}
notifyDataSetChanged()
}
override fun onBindViewHolder(holder: ViewHolder, @SuppressLint("RecyclerView") position: Int) {
@ -85,89 +105,191 @@ class HistoryPaginatedAdapter(onItemClickListener: OnItemClickListener, activity
holder.itemView.tag = item.id.toString()
card.tag = item.id.toString()
card.popup()
val uiHandler = Handler(Looper.getMainLooper())
val thumbnail = card.findViewById<ImageView>(R.id.downloads_image_view)
// THUMBNAIL ----------------------------------
val hideThumb = sharedPreferences.getStringSet("hide_thumbnails", emptySet())!!.contains("downloads")
uiHandler.post { thumbnail.loadThumbnail(hideThumb, item!!.thumb) }
if (getItemViewType(position) == TYPE_STANDARD_SINGLE || getItemViewType(position) == TYPE_STANDARD_MULTIPLE) {
val thumbnail = card.findViewById<ImageView>(R.id.downloads_image_view)
// TITLE ----------------------------------
val itemTitle = card.findViewById<TextView>(R.id.downloads_title)
var title = item!!.title.ifEmpty { item.url }
if (title.length > 100) {
title = title.substring(0, 40) + "..."
}
itemTitle.text = title
// THUMBNAIL ----------------------------------
val hideThumb = sharedPreferences.getStringSet("hide_thumbnails", emptySet())!!.contains("downloads")
uiHandler.post { thumbnail.loadThumbnail(hideThumb, item.thumb) }
// Bottom Info ----------------------------------
val author = card.findViewById<TextView>(R.id.downloads_info_bottom)
author.text = item.author
// TITLE ----------------------------------
val itemTitle = card.findViewById<TextView>(R.id.downloads_title)
var title = item.title.ifEmpty { item.url }
if (title.length > 100) {
title = title.substring(0, 40) + "..."
}
itemTitle.text = title
// Bottom Info ----------------------------------
val author = card.findViewById<TextView>(R.id.downloads_info_bottom)
author.text = item.author
val length = card.findViewById<TextView>(R.id.length)
length.text = if(item.downloadPath.size == 1) item.duration else ""
// TIME DOWNLOADED ----------------------------------
val datetime = card.findViewById<TextView>(R.id.downloads_info_time)
datetime.text = SimpleDateFormat(android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "ddMMMyyyy - HHmm"), Locale.getDefault()).format(item.time * 1000L)
// BUTTON ----------------------------------
val btn = card.findViewById<FloatingActionButton>(R.id.downloads_download_button_type)
var filesPresent = true
//IS IN THE FILE SYSTEM?
if (item.downloadPath.all { !File(it).exists() && it.isNotBlank()}) {
filesPresent = false
thumbnail.colorFilter = ColorMatrixColorFilter(object : ColorMatrix() {
init {
setSaturation(0f)
}
})
thumbnail.alpha = 0.7f
btn.backgroundTintList = MaterialColors.getColorStateList(activity, R.attr.colorSurface, ContextCompat.getColorStateList(activity, android.R.color.transparent)!!)
}else{
thumbnail.alpha = 1f
thumbnail.colorFilter = null
btn.backgroundTintList = MaterialColors.getColorStateList(activity, R.attr.colorPrimaryContainer, ContextCompat.getColorStateList(activity, android.R.color.transparent)!!)
}
val length = card.findViewById<TextView>(R.id.length)
length.text = if(item.downloadPath.size == 1) item.duration else ""
if (item.type == DownloadType.audio) {
if (filesPresent) btn.setImageResource(R.drawable.ic_music_downloaded) else {
btn.setImageResource(R.drawable.ic_music)
}
} else if (item.type == DownloadType.video) {
if (filesPresent) btn.setImageResource(R.drawable.ic_video_downloaded) else btn.setImageResource(R.drawable.ic_video)
}else{
if (filesPresent) btn.setImageResource(R.drawable.ic_terminal) else btn.setImageResource(R.drawable.baseline_code_off_24)
}
if (btn.hasOnClickListeners()) btn.setOnClickListener(null)
btn.isClickable = filesPresent
if ((checkedItems.contains(item.id) && !inverted) || (!checkedItems.contains(item.id) && inverted)) {
card.isChecked = true
card.strokeWidth = 5
} else {
card.isChecked = false
card.strokeWidth = 0
}
val finalFilePresent = filesPresent
card.setOnLongClickListener {
checkCard(card, item.id, position)
true
}
card.setOnClickListener {
if (checkedItems.size > 0 || inverted) {
checkCard(card, item.id, position)
} else {
onItemClickListener.onCardClick(item.id, finalFilePresent)
}
}
// TIME DOWNLOADED ----------------------------------
val datetime = card.findViewById<TextView>(R.id.downloads_info_time)
datetime.text = SimpleDateFormat(android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "ddMMMyyyy - HHmm"), Locale.getDefault()).format(item.time * 1000L)
btn.setOnClickListener {
onItemClickListener.onButtonClick(item.id, finalFilePresent)
}
} else {
val thumbnail = card.findViewById<ImageView>(R.id.downloads_image_view)
// BUTTON ----------------------------------
val btn = card.findViewById<FloatingActionButton>(R.id.downloads_download_button_type)
var filesPresent = true
// THUMBNAIL ----------------------------------
val hideThumb = sharedPreferences.getStringSet("hide_thumbnails", emptySet())!!.contains("downloads")
uiHandler.post { thumbnail.loadThumbnail(hideThumb, item.thumb) }
//IS IN THE FILE SYSTEM?
if (item.downloadPath.all { !File(it).exists() && it.isNotBlank()}) {
filesPresent = false
thumbnail.colorFilter = ColorMatrixColorFilter(object : ColorMatrix() {
init {
setSaturation(0f)
// TITLE ----------------------------------
val itemTitle = card.findViewById<TextView>(R.id.title)
var title = item.title.ifEmpty { item.url }
if (title.length > 100) {
title = title.substring(0, 40) + "..."
}
itemTitle.text = title
val length = card.findViewById<TextView>(R.id.duration)
length.text = if(item.downloadPath.size == 1) item.duration else ""
val author = card.findViewById<TextView>(R.id.download_type)
author.text = item.author
val formatNote = card.findViewById<TextView>(R.id.format_note)
if (item.format.format_note == "?" || item.format.format_note == "") formatNote!!.visibility =
View.GONE
else formatNote!!.text = item.format.format_note.uppercase()
val codec = card.findViewById<TextView>(R.id.codec)
val codecText =
if (item.format.encoding != "") {
item.format.encoding.uppercase()
}else if (item.format.vcodec != "none" && item.format.vcodec != ""){
item.format.vcodec.uppercase()
} else {
item.format.acodec.uppercase()
}
})
thumbnail.alpha = 0.7f
btn.backgroundTintList = MaterialColors.getColorStateList(activity, R.attr.colorSurface, ContextCompat.getColorStateList(activity, android.R.color.transparent)!!)
}else{
thumbnail.alpha = 1f
thumbnail.colorFilter = null
btn.backgroundTintList = MaterialColors.getColorStateList(activity, R.attr.colorPrimaryContainer, ContextCompat.getColorStateList(activity, android.R.color.transparent)!!)
}
if (codecText == "" || codecText == "none"){
codec.visibility = View.GONE
}else{
codec.visibility = View.VISIBLE
codec.text = codecText
}
if (item.type == DownloadType.audio) {
if (filesPresent) btn.setImageResource(R.drawable.ic_music_downloaded) else {
btn.setImageResource(R.drawable.ic_music)
// TIME DOWNLOADED ----------------------------------
val datetime = card.findViewById<TextView>(R.id.file_size)
datetime.text = SimpleDateFormat(android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "ddMMMyyyy - HHmm"), Locale.getDefault()).format(item.time * 1000L)
// BUTTON ----------------------------------
val btn = card.findViewById<MaterialButton>(R.id.action_button)
var filesPresent = true
//IS IN THE FILE SYSTEM?
if (item.downloadPath.all { !File(it).exists() && it.isNotBlank()}) {
filesPresent = false
thumbnail.colorFilter = ColorMatrixColorFilter(object : ColorMatrix() {
init {
setSaturation(0f)
}
})
thumbnail.alpha = 0.7f
btn.backgroundTintList = MaterialColors.getColorStateList(activity, R.attr.colorSurface, ContextCompat.getColorStateList(activity, android.R.color.transparent)!!)
}else{
thumbnail.alpha = 1f
thumbnail.colorFilter = null
btn.backgroundTintList = MaterialColors.getColorStateList(activity, R.attr.colorPrimaryContainer, ContextCompat.getColorStateList(activity, android.R.color.transparent)!!)
}
} else if (item.type == DownloadType.video) {
if (filesPresent) btn.setImageResource(R.drawable.ic_video_downloaded) else btn.setImageResource(R.drawable.ic_video)
}else{
if (filesPresent) btn.setImageResource(R.drawable.ic_terminal) else btn.setImageResource(R.drawable.baseline_code_off_24)
}
if (btn.hasOnClickListeners()) btn.setOnClickListener(null)
btn.isClickable = filesPresent
if ((checkedItems.contains(item.id) && !inverted) || (!checkedItems.contains(item.id) && inverted)) {
card.isChecked = true
card.strokeWidth = 5
} else {
card.isChecked = false
card.strokeWidth = 0
}
val finalFilePresent = filesPresent
card.setOnLongClickListener {
checkCard(card, item.id, position)
true
}
card.setOnClickListener {
if (checkedItems.size > 0 || inverted) {
checkCard(card, item.id, position)
if (item.type == DownloadType.audio) {
if (filesPresent) btn.setIconResource(R.drawable.ic_music_downloaded) else {
btn.setIconResource(R.drawable.ic_music)
}
} else if (item.type == DownloadType.video) {
if (filesPresent) btn.setIconResource(R.drawable.ic_video_downloaded) else btn.setIconResource(R.drawable.ic_video)
}else{
if (filesPresent) btn.setIconResource(R.drawable.ic_terminal) else btn.setIconResource(R.drawable.baseline_code_off_24)
}
if (btn.hasOnClickListeners()) btn.setOnClickListener(null)
btn.isClickable = filesPresent
if ((checkedItems.contains(item.id) && !inverted) || (!checkedItems.contains(item.id) && inverted)) {
card.isChecked = true
card.strokeWidth = 5
} else {
onItemClickListener.onCardClick(item.id, finalFilePresent)
card.isChecked = false
card.strokeWidth = 0
}
val finalFilePresent = filesPresent
card.setOnLongClickListener {
checkCard(card, item.id, position)
true
}
card.setOnClickListener {
if (checkedItems.size > 0 || inverted) {
checkCard(card, item.id, position)
} else {
onItemClickListener.onCardClick(item.id, finalFilePresent)
}
}
}
btn.setOnClickListener {
onItemClickListener.onButtonClick(item.id, finalFilePresent)
btn.setOnClickListener {
onItemClickListener.onButtonClick(item.id, finalFilePresent)
}
}
}
@ -228,6 +350,11 @@ class HistoryPaginatedAdapter(onItemClickListener: OnItemClickListener, activity
}
companion object {
private const val TYPE_STANDARD_SINGLE = 0
private const val TYPE_STANDARD_MULTIPLE = 1
private const val TYPE_DOWNLOAD_CARD_SINGLE = 2
private const val TYPE_DOWNLOAD_CARD_MULTIPLE = 3
private val DIFF_CALLBACK: DiffUtil.ItemCallback<HistoryItem> = object : DiffUtil.ItemCallback<HistoryItem>() {
override fun areItemsTheSame(oldItem: HistoryItem, newItem: HistoryItem): Boolean {
val ranged = arrayListOf(oldItem.id, newItem.id)

@ -84,6 +84,7 @@ class HistoryFragment : Fragment(), HistoryPaginatedAdapter.OnItemClickListener{
private lateinit var topAppBar: MaterialToolbar
private lateinit var recyclerView: RecyclerView
private lateinit var historyAdapter: HistoryPaginatedAdapter
private lateinit var toggleAdapterView: Chip
private lateinit var sortSheet: BottomSheetDialog
private lateinit var uiHandler: Handler
private lateinit var noResults: RelativeLayout
@ -127,6 +128,10 @@ class HistoryFragment : Fragment(), HistoryPaginatedAdapter.OnItemClickListener{
historyAdapter = HistoryPaginatedAdapter(this, requireActivity())
recyclerView = view.findViewById(R.id.recyclerviewhistorys)
recyclerView.enableFastScroll()
toggleAdapterView = view.findViewById(R.id.toggleView)
toggleAdapterView.setOnClickListener {
historyAdapter.toggleCardDesign()
}
val preferences = PreferenceManager.getDefaultSharedPreferences(requireContext())
if (preferences.getStringSet("swipe_gesture", requireContext().resources.getStringArray(R.array.swipe_gestures_values).toSet())!!.toList().contains("history")){

@ -0,0 +1,306 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView android:id="@+id/download_card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="@android:color/transparent"
android:checkable="true"
android:clickable="true"
android:focusable="true"
app:checkedIcon="@null"
app:strokeColor="?attr/colorPrimary"
app:cardPreventCornerOverlap="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shapeAppearance="@style/ShapeAppearanceOverlay.Avatar"
app:strokeWidth="0dp"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:paddingEnd="20dp"
android:paddingStart="10dp"
android:paddingVertical="10dp"
android:layout_height="wrap_content">
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:minWidth="0dp"
android:visibility="gone"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.card.MaterialCardView
android:id="@+id/downloads_image_view2"
android:layout_width="0dp"
android:layout_height="40dp"
android:adjustViewBounds="true"
android:layout_marginStart="17dp"
android:layout_marginEnd="10dp"
android:checkable="false"
app:cardCornerRadius="10dp"
app:cardMaxElevation="12dp"
android:backgroundTint="?attr/colorSurfaceContainerHighest"
app:cardPreventCornerOverlap="true"
app:checkedIcon="@null"
app:layout_constraintEnd_toStartOf="@+id/download_item_data"
app:layout_constraintStart_toEndOf="@id/checkBox"
app:layout_constraintTop_toTopOf="parent"
app:strokeWidth="0dp" />
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/downloads_image_view"
android:layout_width="0dp"
android:layout_height="0dp"
android:adjustViewBounds="true"
android:layout_marginTop="10dp"
android:layout_marginStart="10dp"
android:background="?attr/colorSurfaceVariant"
android:scaleType="centerCrop"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="H,16:9"
app:layout_constraintEnd_toStartOf="@+id/download_item_data"
app:layout_constraintHorizontal_weight="0.3"
app:layout_constraintStart_toEndOf="@id/checkBox"
app:layout_constraintTop_toTopOf="parent"
app:shapeAppearance="@style/ShapeAppearanceOverlay.Avatar2" />
<TextView
android:id="@+id/index"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:ellipsize="end"
android:background="@drawable/rounded_corner_index"
android:gravity="center"
android:textStyle="bold"
android:maxLength="17"
android:maxLines="1"
android:text="1"
android:minWidth="10dp"
android:paddingHorizontal="5dp"
android:textSize="12sp"
app:layout_constraintTop_toTopOf="@+id/downloads_image_view"
app:layout_constraintStart_toStartOf="@+id/downloads_image_view" />
<com.google.android.material.button.MaterialButton
android:id="@+id/incognitoLabel"
style="?attr/materialIconButtonStyle"
android:layout_width="20dp"
android:height="20dp"
android:clickable="false"
android:focusable="false"
android:visibility="gone"
android:layout_margin="5dp"
android:layout_height="wrap_content"
android:minHeight="0dp"
android:padding="0dp"
app:cornerRadius="10dp"
app:icon="@drawable/ic_nightly"
app:iconTint="?attr/colorAccent"
app:layout_constraintEnd_toEndOf="@+id/downloads_image_view"
app:layout_constraintTop_toTopOf="@+id/downloads_image_view" />
<TextView
android:id="@+id/duration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:background="#80000000"
android:clickable="false"
android:ellipsize="end"
android:gravity="center"
android:maxLength="17"
android:maxLines="1"
android:minWidth="30dp"
android:paddingHorizontal="5dp"
android:textColor="@color/white"
android:textSize="12sp"
android:textStyle="bold"
app:cornerRadius="10dp"
app:layout_constraintBottom_toBottomOf="@+id/downloads_image_view"
app:layout_constraintEnd_toEndOf="@+id/downloads_image_view" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/download_item_data"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_weight="0.7"
app:layout_constraintStart_toEndOf="@+id/downloads_image_view"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0">
<TextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:paddingHorizontal="5dp"
android:scrollbars="none"
android:textSize="15sp"
android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@+id/action_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="title,action_button" />
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:paddingStart="5dp"
android:paddingEnd="0dp"
android:scrollbars="none"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/barrier">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent">
<TextView
android:id="@+id/download_type"
style="@style/Widget.Material3.FloatingActionButton.Large.Secondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:background="@drawable/rounded_corner"
android:backgroundTint="?attr/colorSecondary"
android:clickable="false"
android:gravity="center"
android:minWidth="30dp"
android:paddingHorizontal="5dp"
android:textSize="12sp"
android:textStyle="bold"
app:cornerRadius="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/file_size"
style="@style/Widget.Material3.FloatingActionButton.Large.Secondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:background="@drawable/rounded_corner"
android:backgroundTint="?attr/colorSecondary"
android:clickable="false"
android:gravity="center"
android:minWidth="30dp"
android:paddingHorizontal="5dp"
android:textSize="12sp"
android:textStyle="bold"
app:cornerRadius="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/format_note"
style="@style/Widget.Material3.FloatingActionButton.Large.Secondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:background="@drawable/rounded_corner"
android:backgroundTint="?attr/colorPrimaryInverse"
android:clickable="false"
android:ellipsize="end"
android:gravity="center"
android:maxLength="17"
android:maxLines="1"
android:minWidth="30dp"
android:paddingHorizontal="5dp"
android:textSize="12sp"
android:textStyle="bold"
app:cornerRadius="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/container"
style="@style/Widget.Material3.FloatingActionButton.Large.Secondary"
android:layout_width="wrap_content"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:background="@drawable/rounded_corner"
android:backgroundTint="?attr/colorSecondary"
android:clickable="false"
android:gravity="center"
android:minWidth="30dp"
android:paddingHorizontal="5dp"
android:textSize="12sp"
android:textStyle="bold"
app:cornerRadius="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/codec"
style="@style/Widget.Material3.FloatingActionButton.Large.Secondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:background="@drawable/rounded_corner"
android:backgroundTint="?attr/colorSecondary"
android:clickable="false"
android:gravity="center"
android:minWidth="30dp"
android:paddingHorizontal="5dp"
android:textSize="12sp"
android:textStyle="bold"
app:cornerRadius="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
</HorizontalScrollView>
<com.google.android.material.button.MaterialButton
android:id="@+id/action_button"
style="?attr/materialIconButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:minHeight="0dp"
android:padding="0dp"
app:cornerRadius="10dp"
app:iconTint="?attr/colorAccent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>

@ -43,8 +43,30 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:selectionRequired="false"
android:layout_gravity="center"
app:singleSelection="false">
<com.google.android.material.chip.Chip
android:id="@+id/toggleView"
style="@style/Widget.Material3.Chip.Assist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:padding="0dp"
android:gravity="center"
app:ensureMinTouchTargetSize="false"
app:chipEndPadding="-10dp"
app:chipIcon="@drawable/baseline_format_list_numbered_24" />
</com.google.android.material.chip.ChipGroup>
<View style="@style/Divider.Vertical"/>
<com.google.android.material.chip.ChipGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<com.google.android.material.chip.Chip
android:id="@+id/sortChip"
style="@style/Widget.Material3.Chip.Assist"
@ -99,6 +121,9 @@
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerviewhistorys"
android:layout_width="match_parent"
@ -109,7 +134,7 @@
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
app:layout_constraintTop_toBottomOf="@+id/toggleView">
</androidx.recyclerview.widget.RecyclerView>

@ -13,7 +13,7 @@
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.card.MaterialCardView
android:id="@+id/downloads_card_view"
android:id="@+id/download_card_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cardCornerRadius="20dp"

@ -25,17 +25,17 @@
android:layout_marginVertical="5dp"
android:checkable="false"
app:cardCornerRadius="15dp"
app:cardElevation="0dp"
app:cardMaxElevation="12dp"
app:cardPreventCornerOverlap="true"
app:checkedIcon="@null"
android:backgroundTint="?attr/colorSurfaceContainer"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:strokeWidth="0dp" />
<com.google.android.material.card.MaterialCardView
android:id="@+id/downloads_card_view"
android:id="@+id/download_card_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cardCornerRadius="20dp"

@ -232,6 +232,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:outlineProvider="none"
android:stateListAnimator="@null"
app:icon="@drawable/ic_baseline_delete_outline_24"
android:text="@string/Remove" />
@ -241,19 +243,22 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Open_File"
android:outlineProvider="none"
android:stateListAnimator="@null"
android:layout_marginEnd="10dp"
app:icon="@drawable/ic_open_file"
/>
<Button
style="@style/Widget.Material3.Button.ElevatedButton.Icon"
android:id="@+id/bottomsheet_redownload_button"
style="@style/Widget.Material3.Button.ElevatedButton.Icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/redownload"
android:layout_marginEnd="10dp"
app:icon="@drawable/ic_refresh"
/>
android:outlineProvider="none"
android:stateListAnimator="@null"
android:text="@string/redownload"
app:icon="@drawable/ic_refresh" />
</LinearLayout>

Loading…
Cancel
Save