fixed some bugs on terminal mode and download card
This commit is contained in:
parent
e46976e182
commit
24f04ec2ba
14 changed files with 72 additions and 52 deletions
|
|
@ -66,21 +66,24 @@ android {
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
minifyEnabled false
|
minifyEnabled true
|
||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
debuggable false
|
debuggable false
|
||||||
signingConfig signingConfigs.debug
|
signingConfig signingConfigs.debug
|
||||||
}
|
}
|
||||||
|
|
||||||
dev {
|
dev {
|
||||||
initWith buildTypes.release
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||||
debuggable true
|
debuggable true
|
||||||
|
signingConfig signingConfigs.debug
|
||||||
}
|
}
|
||||||
|
|
||||||
debug {
|
debug {
|
||||||
initWith buildTypes.release
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||||
debuggable true
|
debuggable true
|
||||||
proguardFiles 'baseline-profiles-rules.pro'
|
signingConfig signingConfigs.debug
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -116,9 +119,9 @@ android {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
|
|
||||||
implementation "com.github.junkfood02.youtubedl-android:library:$youtubedlAndroidVer"
|
implementation "com.github.JunkFood02.youtubedl-android:library:$youtubedlAndroidVer"
|
||||||
implementation "com.github.junkfood02.youtubedl-android:ffmpeg:$youtubedlAndroidVer"
|
implementation "com.github.JunkFood02.youtubedl-android:ffmpeg:$youtubedlAndroidVer"
|
||||||
implementation "com.github.junkfood02.youtubedl-android:aria2c:$youtubedlAndroidVer"
|
implementation "com.github.JunkFood02.youtubedl-android:aria2c:$youtubedlAndroidVer"
|
||||||
|
|
||||||
implementation "androidx.appcompat:appcompat:$appCompatVer"
|
implementation "androidx.appcompat:appcompat:$appCompatVer"
|
||||||
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
|
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
|
||||||
|
|
@ -136,7 +139,7 @@ dependencies {
|
||||||
androidTestImplementation "junit:junit:$junitVer"
|
androidTestImplementation "junit:junit:$junitVer"
|
||||||
androidTestImplementation "androidx.test.ext:junit:$androidJunitVer"
|
androidTestImplementation "androidx.test.ext:junit:$androidJunitVer"
|
||||||
androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVer"
|
androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVer"
|
||||||
androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.2.0-alpha09"
|
androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.2.0-alpha10"
|
||||||
androidTestImplementation "androidx.test:runner:1.5.2"
|
androidTestImplementation "androidx.test:runner:1.5.2"
|
||||||
androidTestImplementation "androidx.test:core:1.5.0"
|
androidTestImplementation "androidx.test:core:1.5.0"
|
||||||
androidTestImplementation "androidx.test:rules:1.5.0"
|
androidTestImplementation "androidx.test:rules:1.5.0"
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,7 @@
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
|
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
|
||||||
tools:ignore="ScopedStorage" />
|
|
||||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,10 @@ import com.yausername.aria2c.Aria2c
|
||||||
import com.yausername.ffmpeg.FFmpeg
|
import com.yausername.ffmpeg.FFmpeg
|
||||||
import com.yausername.youtubedl_android.YoutubeDL
|
import com.yausername.youtubedl_android.YoutubeDL
|
||||||
import com.yausername.youtubedl_android.YoutubeDLException
|
import com.yausername.youtubedl_android.YoutubeDLException
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.SupervisorJob
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
|
|
||||||
|
|
@ -30,6 +34,16 @@ class App : Application() {
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
applicationScope = CoroutineScope(SupervisorJob())
|
||||||
|
applicationScope.launch((Dispatchers.IO)) {
|
||||||
|
try {
|
||||||
|
initLibraries()
|
||||||
|
}catch (e: Exception){
|
||||||
|
Toast.makeText(this@App, e.message, Toast.LENGTH_SHORT).show()
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
WorkManager.initialize(
|
WorkManager.initialize(
|
||||||
this@App,
|
this@App,
|
||||||
Configuration.Builder()
|
Configuration.Builder()
|
||||||
|
|
@ -38,12 +52,8 @@ class App : Application() {
|
||||||
.getInt("concurrent_downloads", 1)))
|
.getInt("concurrent_downloads", 1)))
|
||||||
.build())
|
.build())
|
||||||
|
|
||||||
try {
|
|
||||||
initLibraries()
|
|
||||||
}catch (e: Exception){
|
|
||||||
Toast.makeText(this@App, e.message, Toast.LENGTH_SHORT).show()
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
val locale = getSharedPreferences("root_preferences", MODE_PRIVATE)
|
val locale = getSharedPreferences("root_preferences", MODE_PRIVATE)
|
||||||
.getString("app_language", Locale.getDefault().language)!!
|
.getString("app_language", Locale.getDefault().language)!!
|
||||||
AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(locale))
|
AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(locale))
|
||||||
|
|
@ -62,5 +72,6 @@ class App : Application() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val TAG = "App"
|
private const val TAG = "App"
|
||||||
|
private lateinit var applicationScope: CoroutineScope
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -100,6 +100,11 @@ class CustomCommandActivity : AppCompatActivity() {
|
||||||
|
|
||||||
|
|
||||||
private fun startDownload(command: String?) {
|
private fun startDownload(command: String?) {
|
||||||
|
var cmd: String = ""
|
||||||
|
if (command!!.contains("yt-dlp")) cmd = command.replace("yt-dlp", "")
|
||||||
|
else cmd = command
|
||||||
|
cmd = cmd.trim()
|
||||||
|
|
||||||
downloadID = System.currentTimeMillis().toInt()
|
downloadID = System.currentTimeMillis().toInt()
|
||||||
|
|
||||||
val theIntent = Intent(this, CustomCommandActivity::class.java)
|
val theIntent = Intent(this, CustomCommandActivity::class.java)
|
||||||
|
|
@ -121,8 +126,7 @@ class CustomCommandActivity : AppCompatActivity() {
|
||||||
notify(downloadID, commandNotification)
|
notify(downloadID, commandNotification)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
val commandRegex = "(-\\S+)|(\\S+)"
|
||||||
val commandRegex = "\"([^\"]*)\"|(\\S+)"
|
|
||||||
val request = YoutubeDLRequest(emptyList())
|
val request = YoutubeDLRequest(emptyList())
|
||||||
|
|
||||||
val tempFolder = StringBuilder(context!!.cacheDir.absolutePath + """/${command}##terminal""")
|
val tempFolder = StringBuilder(context!!.cacheDir.absolutePath + """/${command}##terminal""")
|
||||||
|
|
@ -130,8 +134,8 @@ class CustomCommandActivity : AppCompatActivity() {
|
||||||
tempFileDir.delete()
|
tempFileDir.delete()
|
||||||
tempFileDir.mkdir()
|
tempFileDir.mkdir()
|
||||||
|
|
||||||
|
Log.e(TAG, cmd)
|
||||||
val m = Pattern.compile(commandRegex).matcher(command!!)
|
val m = Pattern.compile(commandRegex).matcher(cmd)
|
||||||
while (m.find()) {
|
while (m.find()) {
|
||||||
if (m.group(1) != null) {
|
if (m.group(1) != null) {
|
||||||
request.addOption(m.group(1)!!)
|
request.addOption(m.group(1)!!)
|
||||||
|
|
@ -140,30 +144,34 @@ class CustomCommandActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
request.addOption("-o", tempFileDir.absolutePath + "/%(uploader)s - %(title)s.%(ext)s")
|
request.addOption("-P", tempFileDir.absolutePath)
|
||||||
|
|
||||||
cancelFab!!.visibility = View.VISIBLE
|
cancelFab!!.visibility = View.VISIBLE
|
||||||
fab!!.visibility = View.GONE
|
fab!!.visibility = View.GONE
|
||||||
|
|
||||||
val disposable: Disposable = Observable.fromCallable {
|
val disposable: Disposable = Observable.fromCallable {
|
||||||
try{
|
try{
|
||||||
YoutubeDL.getInstance().execute(request, downloadID.toString()){ progress, _, line ->
|
YoutubeDL.getInstance().execute(request, downloadID.toString()){ progress, _, line ->
|
||||||
|
Log.e(TAG, line)
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
output!!.append("\n" + line)
|
output!!.append("\n" + line)
|
||||||
output!!.scrollTo(0, output!!.height)
|
output!!.scrollTo(0, output!!.height)
|
||||||
scrollView!!.fullScroll(View.FOCUS_DOWN)
|
scrollView!!.fullScroll(View.FOCUS_DOWN)
|
||||||
|
|
||||||
val title: String = getString(R.string.terminal)
|
|
||||||
notificationUtil.updateDownloadNotification(
|
|
||||||
downloadID,
|
|
||||||
line, progress.toInt(), 0, title,
|
|
||||||
NotificationUtil.COMMAND_DOWNLOAD_SERVICE_CHANNEL_ID
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val title: String = getString(R.string.terminal)
|
||||||
|
notificationUtil.updateDownloadNotification(
|
||||||
|
downloadID,
|
||||||
|
line, progress.toInt(), 0, title,
|
||||||
|
NotificationUtil.COMMAND_DOWNLOAD_SERVICE_CHANNEL_ID
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}catch (e: Exception){
|
}catch (e: Exception){
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
|
output!!.append("\n" + e.message)
|
||||||
|
output!!.scrollTo(0, output!!.height)
|
||||||
|
scrollView!!.fullScroll(View.FOCUS_DOWN)
|
||||||
|
|
||||||
input!!.isEnabled = true
|
input!!.isEnabled = true
|
||||||
|
|
||||||
cancelFab!!.visibility = View.GONE
|
cancelFab!!.visibility = View.GONE
|
||||||
|
|
@ -190,6 +198,7 @@ class CustomCommandActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
notificationUtil.cancelDownloadNotification(downloadID)
|
notificationUtil.cancelDownloadNotification(downloadID)
|
||||||
}) { e ->
|
}) { e ->
|
||||||
|
e.printStackTrace()
|
||||||
scrollView!!.scrollTo(0, scrollView!!.maxScrollAmount)
|
scrollView!!.scrollTo(0, scrollView!!.maxScrollAmount)
|
||||||
input!!.setText("yt-dlp ")
|
input!!.setText("yt-dlp ")
|
||||||
input!!.isEnabled = true
|
input!!.isEnabled = true
|
||||||
|
|
|
||||||
|
|
@ -48,10 +48,6 @@ class DownloadAudioFragment(private var resultItem: ResultItem) : Fragment() {
|
||||||
|
|
||||||
lateinit var downloadItem: DownloadItem
|
lateinit var downloadItem: DownloadItem
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,6 @@ class DownloadMultipleBottomSheetDialog(private val items: List<DownloadItem>) :
|
||||||
|
|
||||||
recyclerView = view.findViewById(R.id.downloadMultipleRecyclerview)
|
recyclerView = view.findViewById(R.id.downloadMultipleRecyclerview)
|
||||||
recyclerView.layoutManager = LinearLayoutManager(requireContext())
|
recyclerView.layoutManager = LinearLayoutManager(requireContext())
|
||||||
recyclerView.setHasFixedSize(true)
|
|
||||||
recyclerView.adapter = listAdapter
|
recyclerView.adapter = listAdapter
|
||||||
|
|
||||||
downloadViewModel.processingDownloads.observe(this) {
|
downloadViewModel.processingDownloads.observe(this) {
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,9 @@ import com.deniscerri.ytdlnis.util.FileUtil
|
||||||
import com.deniscerri.ytdlnis.util.UiUtil
|
import com.deniscerri.ytdlnis.util.UiUtil
|
||||||
import com.google.android.material.chip.Chip
|
import com.google.android.material.chip.Chip
|
||||||
import com.google.android.material.textfield.TextInputLayout
|
import com.google.android.material.textfield.TextInputLayout
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
|
|
||||||
class DownloadVideoFragment(private val resultItem: ResultItem) : Fragment() {
|
class DownloadVideoFragment(private val resultItem: ResultItem) : Fragment() {
|
||||||
|
|
@ -142,7 +144,6 @@ class DownloadVideoFragment(private val resultItem: ResultItem) : Fragment() {
|
||||||
val listener = object : OnFormatClickListener {
|
val listener = object : OnFormatClickListener {
|
||||||
override fun onFormatClick(allFormats: List<Format>, item: Format) {
|
override fun onFormatClick(allFormats: List<Format>, item: Format) {
|
||||||
downloadItem.format = item
|
downloadItem.format = item
|
||||||
Log.e("Aa", item.toString())
|
|
||||||
|
|
||||||
if (containers.contains(item.container)){
|
if (containers.contains(item.container)){
|
||||||
downloadItem.format.container = item.container
|
downloadItem.format.container = item.container
|
||||||
|
|
@ -150,15 +151,8 @@ class DownloadVideoFragment(private val resultItem: ResultItem) : Fragment() {
|
||||||
}else{
|
}else{
|
||||||
containerAutoCompleteTextView.setText(containers[0], false)
|
containerAutoCompleteTextView.setText(containers[0], false)
|
||||||
}
|
}
|
||||||
if (resultItem.formats.isEmpty()){
|
|
||||||
resultItem.formats = ArrayList(allFormats)
|
|
||||||
}else{
|
|
||||||
resultItem.formats = ArrayList(resultItem.formats.filter { it.format_note.contains("audio", ignoreCase = true) })
|
|
||||||
resultItem.formats.addAll(allFormats)
|
|
||||||
}
|
|
||||||
resultViewModel.update(resultItem)
|
|
||||||
formats = allFormats.toMutableList()
|
formats = allFormats.toMutableList()
|
||||||
Log.e("Aa", item.toString())
|
|
||||||
uiUtil.populateFormatCard(formatCard, item)
|
uiUtil.populateFormatCard(formatCard, item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ import kotlin.math.max
|
||||||
import kotlin.math.pow
|
import kotlin.math.pow
|
||||||
|
|
||||||
class FileUtil() {
|
class FileUtil() {
|
||||||
|
|
||||||
fun deleteFile(path: String){
|
fun deleteFile(path: String){
|
||||||
val file = File(path)
|
val file = File(path)
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
|
|
@ -127,6 +126,7 @@ class FileUtil() {
|
||||||
bytes = inputStream.read(buffer)
|
bytes = inputStream.read(buffer)
|
||||||
}
|
}
|
||||||
}catch (e : Exception){
|
}catch (e : Exception){
|
||||||
|
e.printStackTrace()
|
||||||
Toast.makeText(context, e.message, Toast.LENGTH_LONG).show()
|
Toast.makeText(context, e.message, Toast.LENGTH_LONG).show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -110,6 +110,7 @@ class DownloadWorker(
|
||||||
}
|
}
|
||||||
if (downloadItem.customFileNameTemplate.isEmpty()) downloadItem.customFileNameTemplate = "%(uploader)s - %(title)s"
|
if (downloadItem.customFileNameTemplate.isEmpty()) downloadItem.customFileNameTemplate = "%(uploader)s - %(title)s"
|
||||||
|
|
||||||
|
request.addOption("--restrict-filenames")
|
||||||
|
|
||||||
when(type){
|
when(type){
|
||||||
DownloadViewModel.Type.audio -> {
|
DownloadViewModel.Type.audio -> {
|
||||||
|
|
@ -183,7 +184,7 @@ class DownloadWorker(
|
||||||
request.addOption("-o", tempFileDir.absolutePath + "/${downloadItem.customFileNameTemplate}.%(ext)s")
|
request.addOption("-o", tempFileDir.absolutePath + "/${downloadItem.customFileNameTemplate}.%(ext)s")
|
||||||
}
|
}
|
||||||
DownloadViewModel.Type.command -> {
|
DownloadViewModel.Type.command -> {
|
||||||
val commandRegex = "\"([^\"]*)\"|(\\S+)"
|
val commandRegex = "\"([^\"]*)\"|(-\\S+)"
|
||||||
val command = commandTemplateDao.getTemplate(downloadItem.format.format_id.toLong())
|
val command = commandTemplateDao.getTemplate(downloadItem.format.format_id.toLong())
|
||||||
val m = Pattern.compile(commandRegex).matcher(command.content)
|
val m = Pattern.compile(commandRegex).matcher(command.content)
|
||||||
while (m.find()) {
|
while (m.find()) {
|
||||||
|
|
@ -193,6 +194,8 @@ class DownloadWorker(
|
||||||
request.addOption(m.group(2)!!)
|
request.addOption(m.group(2)!!)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
request.addOption("-P", tempFileDir.absolutePath)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -230,6 +233,7 @@ class DownloadWorker(
|
||||||
}
|
}
|
||||||
}catch (e: Exception){
|
}catch (e: Exception){
|
||||||
finalPath = context.getString(R.string.unfound_file)
|
finalPath = context.getString(R.string.unfound_file)
|
||||||
|
e.printStackTrace()
|
||||||
handler.postDelayed({
|
handler.postDelayed({
|
||||||
Toast.makeText(context, e.message, Toast.LENGTH_SHORT).show()
|
Toast.makeText(context, e.message, Toast.LENGTH_SHORT).show()
|
||||||
}, 1000)
|
}, 1000)
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,12 @@
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:id="@+id/format_card_constraintLayout"
|
android:id="@+id/format_card_constraintLayout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
android:clickable="true"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingVertical="10dp"
|
android:paddingVertical="5dp"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
android:background="?android:attr/selectableItemBackground"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:focusable="true">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/container"
|
android:id="@+id/container"
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,8 @@
|
||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:scrollbars="none"
|
android:scrollbars="none"
|
||||||
android:padding="20dp"
|
android:paddingTop="10dp"
|
||||||
|
android:paddingHorizontal="10dp"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/please_wait"
|
android:text="@string/please_wait"
|
||||||
android:textSize="20sp"
|
android:textSize="17sp"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
android:textColor="?attr/colorAccent"
|
android:textColor="?attr/colorAccent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/cancel"
|
android:text="@string/cancel"
|
||||||
android:textSize="20sp"
|
android:textSize="17sp"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -124,6 +124,7 @@
|
||||||
<string name="album">Album</string>
|
<string name="album">Album</string>
|
||||||
<string name="video_quality">Video Quality</string>
|
<string name="video_quality">Video Quality</string>
|
||||||
<string name="embed_subtitles">Embed Subtitles</string>
|
<string name="embed_subtitles">Embed Subtitles</string>
|
||||||
|
<string name="embed_subs">Embed Subtitles</string>
|
||||||
<string name="add_chapter">Add Chapters</string>
|
<string name="add_chapter">Add Chapters</string>
|
||||||
<string name="show_download_card">Show Options for Downloading</string>
|
<string name="show_download_card">Show Options for Downloading</string>
|
||||||
<string name="download_card_summary">Settings for how to download items</string>
|
<string name="download_card_summary">Settings for how to download items</string>
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ buildscript {
|
||||||
commonsIoVer = '2.5'
|
commonsIoVer = '2.5'
|
||||||
// supports java 1.6
|
// supports java 1.6
|
||||||
commonsCompressVer = '1.12'
|
commonsCompressVer = '1.12'
|
||||||
youtubedlAndroidVer = "970b819246"
|
youtubedlAndroidVer = "7222fe9637"
|
||||||
workVer = "2.8.0"
|
workVer = "2.8.0"
|
||||||
composeVer = "1.4.0-alpha02"
|
composeVer = "1.4.0-alpha02"
|
||||||
kotlinVer = "1.7.21"
|
kotlinVer = "1.7.21"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue