2020-07-15 14:52:31 +00:00
|
|
|
package com.vanced.manager.utils
|
|
|
|
|
|
|
|
import android.content.Context
|
2020-09-29 10:47:38 +00:00
|
|
|
import android.content.Intent
|
2020-07-15 14:52:31 +00:00
|
|
|
import android.net.Uri
|
2020-09-29 10:47:38 +00:00
|
|
|
import android.os.Build
|
|
|
|
import android.util.Log
|
|
|
|
import androidx.core.content.FileProvider
|
2020-11-15 14:53:25 +00:00
|
|
|
import androidx.lifecycle.MutableLiveData
|
2020-11-23 16:00:41 +00:00
|
|
|
import com.github.kittinunf.fuel.Fuel
|
2020-07-15 14:52:31 +00:00
|
|
|
import com.vanced.manager.R
|
2020-10-31 19:45:39 +00:00
|
|
|
import com.vanced.manager.model.ProgressModel
|
|
|
|
import com.vanced.manager.utils.AppUtils.sendCloseDialog
|
2020-11-23 16:00:41 +00:00
|
|
|
import kotlinx.coroutines.CoroutineScope
|
2020-09-29 10:47:38 +00:00
|
|
|
import kotlinx.coroutines.Dispatchers
|
2020-11-23 16:00:41 +00:00
|
|
|
import kotlinx.coroutines.launch
|
2020-09-29 10:47:38 +00:00
|
|
|
import java.io.File
|
2020-07-15 14:52:31 +00:00
|
|
|
|
2020-11-23 16:00:41 +00:00
|
|
|
object DownloadHelper : CoroutineScope by CoroutineScope(Dispatchers.IO) {
|
2020-07-15 14:52:31 +00:00
|
|
|
|
2020-11-23 16:00:41 +00:00
|
|
|
fun fuelDownload(url: String, fileFolder: String, fileName: String, context: Context, onDownloadComplete: () -> Unit, onError: (error: String) -> Unit) = launch {
|
|
|
|
downloadProgress.value?.downloadingFile?.postValue(context.getString(R.string.downloading_file, fileName))
|
|
|
|
downloadProgress.value?.currentDownload = Fuel.download(url)
|
|
|
|
.fileDestination { _, _ ->
|
|
|
|
File(context.getExternalFilesDir(fileFolder)?.path, fileName)
|
|
|
|
}
|
|
|
|
.progress { readBytes, totalBytes ->
|
|
|
|
downloadProgress.value?.downloadProgress?.postValue((readBytes * 100 / totalBytes).toInt())
|
|
|
|
}
|
2020-12-13 11:54:52 +00:00
|
|
|
.responseString { _, _, result ->
|
2020-11-23 16:00:41 +00:00
|
|
|
result.fold(success = {
|
|
|
|
downloadProgress.value?.downloadProgress?.postValue(0)
|
|
|
|
onDownloadComplete()
|
|
|
|
}, failure = { error ->
|
2020-12-13 11:54:52 +00:00
|
|
|
Log.d("VMDownloader", error.cause.toString())
|
2020-11-23 16:00:41 +00:00
|
|
|
onError(error.errorData.toString())
|
|
|
|
})
|
|
|
|
}
|
2020-07-15 14:52:31 +00:00
|
|
|
}
|
|
|
|
|
2020-11-15 14:53:25 +00:00
|
|
|
val downloadProgress = MutableLiveData<ProgressModel>()
|
2020-10-31 19:45:39 +00:00
|
|
|
|
|
|
|
init {
|
2020-11-15 14:53:25 +00:00
|
|
|
downloadProgress.value = ProgressModel()
|
2020-10-31 19:45:39 +00:00
|
|
|
}
|
|
|
|
|
2020-11-23 16:00:41 +00:00
|
|
|
fun downloadManager(context: Context) {
|
|
|
|
val url = "https://github.com/YTVanced/VancedManager/releases/latest/download/manager.apk"
|
|
|
|
fuelDownload(url, "manager", "manager.apk", context, onDownloadComplete = {
|
|
|
|
val apk = File("${context.getExternalFilesDir("manager")?.path}/manager.apk")
|
|
|
|
val uri =
|
2020-12-13 11:54:52 +00:00
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
|
|
|
FileProvider.getUriForFile(context, "${context.packageName}.provider", apk)
|
|
|
|
else
|
|
|
|
Uri.fromFile(apk)
|
2020-09-29 10:47:38 +00:00
|
|
|
|
2020-11-23 16:00:41 +00:00
|
|
|
val intent = Intent(Intent.ACTION_VIEW)
|
|
|
|
intent.setDataAndType(uri, "application/vnd.android.package-archive")
|
|
|
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
|
|
|
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
|
|
|
context.startActivity(intent)
|
|
|
|
sendCloseDialog(context)
|
|
|
|
}, onError = {
|
|
|
|
downloadProgress.value?.downloadingFile?.postValue(context.getString(R.string.error_downloading, "manager.apk"))
|
|
|
|
})
|
|
|
|
}
|
2020-09-29 10:47:38 +00:00
|
|
|
|
2020-09-06 10:33:04 +00:00
|
|
|
}
|