?6KK$fT{bnu*3@re{JKFe3k
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,
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 9e095cd9cc063c1db539e6bbb901526a77877a1d..9116b296c3ce187074cd51388895fecc515eb0f2 100644
GIT binary patch
literal 3824
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
UapwdY-~a#s07*qoM6N<$f`ZNP82|tP
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 9e095cd9cc063c1db539e6bbb901526a77877a1d..9116b296c3ce187074cd51388895fecc515eb0f2 100644
GIT binary patch
literal 3824
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