diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1fb4bc07..63d789e1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -172,8 +172,29 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
,
var writeSubs: Boolean = false,
- var subsLanguages: String = "en.*,.*-orig"
+ var subsLanguages: String = "en.*,.*-orig",
+ var removeAudio: Boolean = false
)
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/BlankActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/BlankActivity.kt
new file mode 100644
index 00000000..7235a476
--- /dev/null
+++ b/app/src/main/java/com/deniscerri/ytdlnis/receiver/BlankActivity.kt
@@ -0,0 +1,83 @@
+package com.deniscerri.ytdlnis.receiver
+
+import android.Manifest
+import android.app.Activity
+import android.content.Context
+import android.content.DialogInterface
+import android.content.Intent
+import android.content.SharedPreferences
+import android.content.pm.PackageManager
+import android.content.res.Configuration
+import android.graphics.drawable.ColorDrawable
+import android.net.Uri
+import android.os.Build
+import android.os.Bundle
+import android.provider.Settings
+import android.util.Log
+import android.view.Window
+import android.view.WindowManager
+import android.widget.FrameLayout
+import android.widget.TextView
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.app.ActivityCompat
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowCompat
+import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.lifecycleScope
+import com.deniscerri.ytdlnis.MainActivity
+import com.deniscerri.ytdlnis.R
+import com.deniscerri.ytdlnis.database.models.DownloadItem
+import com.deniscerri.ytdlnis.database.models.ResultItem
+import com.deniscerri.ytdlnis.database.viewmodel.CookieViewModel
+import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
+import com.deniscerri.ytdlnis.database.viewmodel.ResultViewModel
+import com.deniscerri.ytdlnis.ui.BaseActivity
+import com.deniscerri.ytdlnis.ui.downloadcard.DownloadBottomSheetDialog
+import com.deniscerri.ytdlnis.ui.downloadcard.SelectPlaylistItemsBottomSheetDialog
+import com.deniscerri.ytdlnis.util.FileUtil
+import com.deniscerri.ytdlnis.util.NotificationUtil
+import com.deniscerri.ytdlnis.util.ThemeUtil
+import com.deniscerri.ytdlnis.util.UiUtil
+import com.google.android.material.bottomsheet.BottomSheetDialog
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+import java.io.File
+import kotlin.properties.Delegates
+import kotlin.system.exitProcess
+
+class BlankActivity : BaseActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.blank)
+ val intent = intent
+ handleIntents(intent)
+ }
+
+ override fun onNewIntent(intent: Intent) {
+ super.onNewIntent(intent)
+ handleIntents(intent)
+ }
+
+ private fun handleIntents(intent: Intent) {
+ val message = intent.getStringExtra("message")
+ val path = intent.getStringExtra("path")
+ val notificationId = intent.getIntExtra("notificationID", 0)
+ if (message != null && path != null) {
+ if (notificationId != 0) NotificationUtil(this).cancelDownloadNotification(notificationId)
+ val uiUtil = UiUtil(FileUtil())
+ when(message) {
+ "share" -> {
+ uiUtil.shareFileIntent(this, listOf(path))
+ }
+ "open" -> {
+ uiUtil.openFileIntent(this, path)
+ }
+ }
+
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/OpenDownloadNotificationReceiver.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/OpenDownloadNotificationReceiver.kt
deleted file mode 100644
index d3be13c7..00000000
--- a/app/src/main/java/com/deniscerri/ytdlnis/receiver/OpenDownloadNotificationReceiver.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.deniscerri.ytdlnis.receiver
-
-import android.content.BroadcastReceiver
-import android.content.Context
-import android.content.Intent
-import androidx.work.WorkManager
-import com.deniscerri.ytdlnis.util.FileUtil
-import com.deniscerri.ytdlnis.util.NotificationUtil
-import com.deniscerri.ytdlnis.util.UiUtil
-import com.yausername.youtubedl_android.YoutubeDL
-
-class OpenDownloadNotificationReceiver : BroadcastReceiver() {
- override fun onReceive(c: Context, intent: Intent) {
- val message = intent.getStringExtra("open")
- val path = intent.getStringExtra("path")
- val notificationId = intent.getIntExtra("notificationID", 0)
- if (message != null && path != null) {
- if (notificationId != 0) NotificationUtil(c).cancelDownloadNotification(notificationId)
- val uiUtil = UiUtil(FileUtil())
- uiUtil.openFileIntent(c, path)
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/SharedDownloadNotificationReceiver.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/SharedDownloadNotificationReceiver.kt
deleted file mode 100644
index 4c5fb25d..00000000
--- a/app/src/main/java/com/deniscerri/ytdlnis/receiver/SharedDownloadNotificationReceiver.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.deniscerri.ytdlnis.receiver
-
-import android.content.BroadcastReceiver
-import android.content.Context
-import android.content.Intent
-import com.deniscerri.ytdlnis.util.FileUtil
-import com.deniscerri.ytdlnis.util.NotificationUtil
-import com.deniscerri.ytdlnis.util.UiUtil
-
-class SharedDownloadNotificationReceiver : BroadcastReceiver() {
- override fun onReceive(c: Context, intent: Intent) {
- val message = intent.getStringExtra("share")
- val path = intent.getStringExtra("path")
- val notificationId = intent.getIntExtra("notificationID", 0)
- if (message != null && path != null) {
- if (notificationId != 0) NotificationUtil(c).cancelDownloadNotification(notificationId)
- val uiUtil = UiUtil(FileUtil())
- uiUtil.shareFileIntent(c, listOf(path))
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/SharedNotificationReceiver.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/SharedNotificationReceiver.kt
new file mode 100644
index 00000000..488e42b6
--- /dev/null
+++ b/app/src/main/java/com/deniscerri/ytdlnis/receiver/SharedNotificationReceiver.kt
@@ -0,0 +1,25 @@
+package com.deniscerri.ytdlnis.receiver
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import com.deniscerri.ytdlnis.R
+import com.deniscerri.ytdlnis.util.FileUtil
+import com.deniscerri.ytdlnis.util.NotificationUtil
+import com.deniscerri.ytdlnis.util.UiUtil
+
+class SharedDownloadNotificationReceiver : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.blank)
+ val intent = intent
+ val message = intent.getStringExtra("share")
+ val path = intent.getStringExtra("path")
+ val notificationId = intent.getIntExtra("notificationID", 0)
+ if (message != null && path != null) {
+ if (notificationId != 0) NotificationUtil(this).cancelDownloadNotification(notificationId)
+ val uiUtil = UiUtil(FileUtil())
+ uiUtil.shareFileIntent(this, listOf(path))
+ this.finishAffinity()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt
index d56cc89e..d38b228c 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt
@@ -148,7 +148,7 @@ class DownloadMultipleBottomSheetDialog(private var results: List,
}
items.forEachIndexed { index, it ->
it.allFormats.clear()
- it.allFormats.addAll(formatCollection[index])
+ if (formatCollection.isNotEmpty() && formatCollection[index].isNotEmpty()) it.allFormats.addAll(formatCollection[index])
it.format = selectedFormats[index]
}
listAdapter.submitList(items.toList())
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt
index 03c7755f..ec5fbfd7 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt
@@ -360,6 +360,11 @@ class DownloadVideoFragment(private val resultItem: ResultItem, private var curr
dialog.getButton(AlertDialog.BUTTON_NEUTRAL).gravity = Gravity.START
}
+ val removeAudio = view.findViewById(R.id.remove_audio)
+ removeAudio.setOnCheckedChangeListener { compoundButton, b ->
+ downloadItem.videoPreferences.removeAudio = removeAudio.isChecked
+ }
+
} catch (e: Exception) {
e.printStackTrace()
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/FormatSelectionBottomSheetDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/FormatSelectionBottomSheetDialog.kt
index b239dacb..05272e0a 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/FormatSelectionBottomSheetDialog.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/FormatSelectionBottomSheetDialog.kt
@@ -199,6 +199,11 @@ class FormatSelectionBottomSheetDialog(private val items: List, p
formatCollection.forEach {
selectedFormats.add(it.first{ f -> f.format_id == format.format_id})
}
+ if (selectedFormats.isEmpty()) {
+ items.forEach {
+ selectedFormats.add(format)
+ }
+ }
listener.onFormatClick(formatCollection, selectedFormats)
}
dismiss()
@@ -220,7 +225,7 @@ class FormatSelectionBottomSheetDialog(private val items: List, p
else {
formatIdParent?.findViewById(R.id.format_id_value)?.text = format.format_id
formatIdParent?.setOnClickListener {
- copyToClipboard(format.format_note)
+ copyToClipboard(format.format_id)
}
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/TerminalActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/TerminalActivity.kt
index 07c8870e..7f27226f 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/TerminalActivity.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/TerminalActivity.kt
@@ -15,14 +15,12 @@ import android.view.View
import android.view.ViewGroup
import android.view.Window
import android.view.inputmethod.InputMethodManager
-import android.widget.EditText
-import android.widget.LinearLayout
-import android.widget.ScrollView
-import android.widget.TextView
+import android.widget.*
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.forEach
+import androidx.core.view.get
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.work.*
@@ -86,31 +84,49 @@ class TerminalActivity : BaseActivity() {
bottomAppBar = findViewById(R.id.bottomAppBar)
+ var templateCount = 0
+ var shortcutCount = 0
lifecycleScope.launch {
- val templateCount = withContext(Dispatchers.IO){
+ templateCount = withContext(Dispatchers.IO){
commandTemplateViewModel.getTotalNumber()
}
- if (templateCount == 0) bottomAppBar.menu.getItem(0).isEnabled = false
+ if (templateCount == 0){
+ bottomAppBar.menu.getItem(0).icon?.alpha = 30
+ }else{
+ bottomAppBar.menu.getItem(0).icon?.alpha = 255
+ }
- val shortcutCount = withContext(Dispatchers.IO){
+ shortcutCount = withContext(Dispatchers.IO){
commandTemplateViewModel.getTotalShortcutNumber()
}
- if (shortcutCount == 0) bottomAppBar.menu.getItem(1).isEnabled = false
+ if (shortcutCount == 0) {
+ bottomAppBar.menu.getItem(1).icon?.alpha = 30
+ }else{
+ bottomAppBar.menu.getItem(1).icon?.alpha = 255
+ }
}
bottomAppBar.setOnMenuItemClickListener {
when(it.itemId){
R.id.command_templates -> {
- lifecycleScope.launch {
- uiUtil.showCommandTemplates(this@TerminalActivity, commandTemplateViewModel){ template ->
- input!!.text.insert(input!!.selectionStart, template.content + " ")
- input!!.postDelayed({
- input!!.requestFocus()
- imm.showSoftInput(input!!, 0)
- }, 200)
+ if (templateCount == 0){
+ Toast.makeText(context, getString(R.string.add_template_first), Toast.LENGTH_SHORT).show()
+ }else{
+ lifecycleScope.launch {
+ uiUtil.showCommandTemplates(this@TerminalActivity, commandTemplateViewModel){ template ->
+ input!!.text.insert(input!!.selectionStart, template.content + " ")
+ input!!.postDelayed({
+ input!!.requestFocus()
+ imm.showSoftInput(input!!, 0)
+ }, 200)
+ }
}
}
}
- R.id.shortcuts -> showShortcuts()
+ R.id.shortcuts -> {
+ if (shortcutCount > 0){
+ showShortcuts()
+ }
+ }
R.id.folder -> {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt b/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt
index 2a7b10a3..6080a5b8 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt
@@ -310,7 +310,23 @@ class InfoUtil(private val context: Context) {
for (f in 0 until formatsInJSON.length()){
val format = formatsInJSON.getJSONObject(f)
if(!format.has("container")) continue
- formats.add(Gson().fromJson(format.toString(), Format::class.java))
+ val formatObj = Gson().fromJson(format.toString(), Format::class.java)
+ try{
+ if (!formatObj.format_note.contains("audio", ignoreCase = true)){
+ val codecs = "\"([^\"]*)\"".toRegex().find(format.getString("type").split(";")[1])!!.value.split(",")
+ if (codecs.size > 1){
+ formatObj.vcodec = codecs[0].replace("\"", "")
+ formatObj.acodec = codecs[1].replace("\"", "")
+ }else if (codecs.size == 1){
+ formatObj.vcodec = codecs[0].replace("\"", "")
+ formatObj.acodec = "none"
+ }
+ }
+ }catch (e: Exception) {
+ e.printStackTrace()
+ }
+
+ formats.add(formatObj)
}
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt b/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt
index bf48aea5..3c4a714b 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt
@@ -6,14 +6,20 @@ import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
+import android.content.pm.PackageManager
+import android.content.pm.ResolveInfo
import android.graphics.BitmapFactory
+import android.net.Uri
import android.os.Build
import androidx.core.app.NotificationCompat
+import androidx.core.content.ContextCompat.startActivity
+import androidx.core.content.FileProvider
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.receiver.CancelDownloadNotificationReceiver
-import com.deniscerri.ytdlnis.receiver.OpenDownloadNotificationReceiver
import com.deniscerri.ytdlnis.receiver.SharedDownloadNotificationReceiver
import com.deniscerri.ytdlnis.ui.more.downloadLogs.DownloadLogActivity
+import java.io.File
+
class NotificationUtil(var context: Context) {
private val downloadNotificationBuilder: NotificationCompat.Builder = NotificationCompat.Builder(context, DOWNLOAD_SERVICE_CHANNEL_ID)
@@ -108,41 +114,42 @@ class NotificationUtil(var context: Context) {
) {
val notificationBuilder = getBuilder(channel)
- val openIntent = Intent(context, OpenDownloadNotificationReceiver::class.java)
- openIntent.putExtra("open", "")
- openIntent.putExtra("path", filepath)
- openIntent.putExtra("notificationID", DOWNLOAD_FINISHED_NOTIFICATION_ID)
- val openNotificationPendingIntent = PendingIntent.getBroadcast(
- context,
- 1,
- openIntent,
- PendingIntent.FLAG_IMMUTABLE
- )
-
- val shareIntent = Intent(context, SharedDownloadNotificationReceiver::class.java)
- shareIntent.putExtra("share", "")
- shareIntent.putExtra("path", filepath)
- openIntent.putExtra("notificationID", DOWNLOAD_FINISHED_NOTIFICATION_ID)
- val shareNotificationPendingIntent = PendingIntent.getBroadcast(
- context,
- 1,
- shareIntent,
- PendingIntent.FLAG_IMMUTABLE
- )
-
notificationBuilder
.setContentTitle("${context.getString(R.string.downloaded)} $title")
- .setSmallIcon(R.drawable.ic_app_icon)
+ .setSmallIcon(R.drawable.ic_launcher_foreground_large)
.setLargeIcon(
BitmapFactory.decodeResource(
context.resources,
- R.drawable.ic_app_icon
+ R.drawable.ic_launcher_foreground_large
)
)
.setPriority(NotificationCompat.PRIORITY_MAX)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.clearActions()
if (filepath != null){
+ val file = File(filepath)
+ val uri = FileProvider.getUriForFile(
+ context,
+ "com.deniscerri.ytdl.fileprovider",
+ file
+ )
+
+ //open intent
+ val intent = Intent()
+ intent.action = Intent.ACTION_VIEW
+ intent.setDataAndType(uri, "*/*")
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+ val openNotificationPendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
+
+ //share intent
+ val shareIntent = Intent(context, SharedDownloadNotificationReceiver::class.java)
+ shareIntent.putExtra("share", "")
+ shareIntent.putExtra("path", filepath)
+ shareIntent.putExtra("notificationID", DOWNLOAD_FINISHED_NOTIFICATION_ID)
+ shareIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
+ val shareNotificationPendingIntent = PendingIntent.getActivity(context, 0, shareIntent, PendingIntent.FLAG_IMMUTABLE)
+
+
notificationBuilder.addAction(0, context.getString(R.string.Open_File), openNotificationPendingIntent)
notificationBuilder.addAction(0, context.getString(R.string.share), shareNotificationPendingIntent)
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt b/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt
index e1c775cf..39c701d7 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt
@@ -18,6 +18,7 @@ import com.deniscerri.ytdlnis.database.repository.DownloadRepository
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
import com.deniscerri.ytdlnis.ui.more.downloadLogs.DownloadLogActivity
import com.deniscerri.ytdlnis.util.FileUtil
+import com.deniscerri.ytdlnis.util.InfoUtil
import com.deniscerri.ytdlnis.util.NotificationUtil
import com.yausername.youtubedl_android.YoutubeDL
import com.yausername.youtubedl_android.YoutubeDLRequest
@@ -25,6 +26,8 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
import java.io.File
+import java.util.*
+import kotlin.collections.ArrayList
class DownloadWorker(
@@ -37,6 +40,7 @@ class DownloadWorker(
val notificationUtil = NotificationUtil(context)
val fileUtil = FileUtil()
+ val infoUtil = InfoUtil(context)
val dbManager = DBManager.getInstance(context)
val dao = dbManager.downloadDao
val repository = DownloadRepository(dao)
@@ -209,12 +213,12 @@ class DownloadWorker(
var videoFormatID = downloadItem.format.format_id
Log.e(TAG, videoFormatID)
- var formatArgument = "bestvideo+bestaudio/best"
+ var formatArgument = if (downloadItem.videoPreferences.removeAudio) "bestvideo" else "bestvideo+bestaudio/best"
if (videoFormatID.isNotEmpty()) {
if (videoFormatID == context.resources.getString(R.string.best_quality)) videoFormatID = "bestvideo"
else if (videoFormatID == context.resources.getString(R.string.worst_quality)) videoFormatID = "worst"
else if (defaultFormats.contains(videoFormatID)) videoFormatID = "bestvideo[height<="+videoFormatID.substring(0, videoFormatID.length -1)+"]"
- formatArgument = "$videoFormatID+bestaudio/best/$videoFormatID"
+ if (!downloadItem.videoPreferences.removeAudio) formatArgument = "$videoFormatID+bestaudio/best/$videoFormatID"
}
Log.e(TAG, formatArgument)
request.addOption("-f", formatArgument)
@@ -237,6 +241,11 @@ class DownloadWorker(
request.addOption("--sub-langs", downloadItem.videoPreferences.subsLanguages)
}
+ if (downloadItem.videoPreferences.removeAudio &&
+ (downloadItem.format.acodec.isNotEmpty() && downloadItem.format.acodec != "none")){
+ request.addOption("--ppa", "ffmpeg:-an")
+ }
+
if (downloadItem.videoPreferences.splitByChapters && downloadItem.downloadSections.isBlank()){
request.addOption("--split-chapters")
request.addOption("-P", tempFileDir.absolutePath)
@@ -280,6 +289,7 @@ class DownloadWorker(
if (downloadItem.title.isEmpty()) downloadItem.title = info.title.toString()
if (downloadItem.author.isEmpty()) downloadItem.author = info.uploader.toString()
if (downloadItem.thumb.isEmpty()) downloadItem.thumb = info.thumbnail.toString()
+ downloadItem.duration = infoUtil.formatIntegerDuration(info.duration, Locale.US)
runBlocking {
dao.update(downloadItem)
}
diff --git a/app/src/main/res/drawable/ic_launcher_foreground_large.xml b/app/src/main/res/drawable/ic_launcher_foreground_large.xml
new file mode 100644
index 00000000..49c10894
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_foreground_large.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/active_download_card.xml b/app/src/main/res/layout/active_download_card.xml
index 1d82499b..ec4882e8 100644
--- a/app/src/main/res/layout/active_download_card.xml
+++ b/app/src/main/res/layout/active_download_card.xml
@@ -38,6 +38,7 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_download_video.xml b/app/src/main/res/layout/fragment_download_video.xml
index de48731d..8830bd8c 100644
--- a/app/src/main/res/layout/fragment_download_video.xml
+++ b/app/src/main/res/layout/fragment_download_video.xml
@@ -249,6 +249,19 @@
android:checked="false"
android:text="@string/subtitle_languages"/>
+
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
index bbd3e021..50ec8862 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -2,4 +2,5 @@
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
index 50ec8862..bbd3e021 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -2,5 +2,4 @@
-
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
index 9e095cd9..9116b296 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
index 9e095cd9..9116b296 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
index dca1e264..2cf8c0de 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
index dca1e264..2cf8c0de 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index 3173af87..9e362b82 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
index 3173af87..9e362b82 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 6815665e..3be1c6d9 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
index 6815665e..3be1c6d9 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index 35d57100..c385f20c 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
index 35d57100..c385f20c 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 864b3c8e..28da3367 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -243,4 +243,5 @@
Notification for finished or faulty downloads
Quick Download
Don\'t fetch data beforehand
+ Remove Audio
\ No newline at end of file
diff --git a/app/src/main/res/xml/provider_paths.xml b/app/src/main/res/xml/provider_paths.xml
index 20151e82..bce93183 100644
--- a/app/src/main/res/xml/provider_paths.xml
+++ b/app/src/main/res/xml/provider_paths.xml
@@ -1,7 +1,6 @@
-
diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml
index 207afdb3..7eba0278 100644
--- a/app/src/main/res/xml/root_preferences.xml
+++ b/app/src/main/res/xml/root_preferences.xml
@@ -55,7 +55,7 @@
app:title="@string/video_directory" />