new downloader library and various additions/fixes

This commit is contained in:
X1nto 2020-06-21 23:24:14 +04:00
parent c4eb9188b0
commit 77921e92fd
19 changed files with 214 additions and 227 deletions

File diff suppressed because one or more lines are too long

View File

@ -58,7 +58,7 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.3.0'
implementation 'androidx.fragment:fragment-ktx:1.2.4'
implementation 'androidx.fragment:fragment-ktx:1.2.5'
implementation 'androidx.preference:preference-ktx:1.1.1'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.browser:browser:1.2.0'
@ -67,8 +67,8 @@ dependencies {
implementation 'androidx.navigation:navigation-ui-ktx:2.2.2'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'com.github.ssseasonnn.RxDownload:rxdownload4:1.0.9'
implementation 'com.github.100rabhkr:GetJSON:1.0'
implementation 'com.github.pwittchen:reactivenetwork-rx2:3.0.8'
implementation 'com.github.topjohnwu.libsu:core:2.5.1'
implementation 'com.mindorks.android:prdownloader:0.6.0'
}

View File

@ -10,6 +10,7 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:name=".core.App"
android:allowBackup="false"
android:fullBackupContent="false"
android:icon="@mipmap/ic_launcher"
@ -59,6 +60,7 @@
<service android:name=".core.installer.RootSplitInstallerService" />
<service android:name=".core.installer.StubInstaller" />
<service android:name=".core.installer.RootAppUninstaller" />
<service android:name=".core.installer.AppUninstallerService" />
<service android:name=".core.downloader.VancedDownloadService" />
<service android:name=".core.downloader.MicrogDownloadService" />

View File

@ -0,0 +1,13 @@
package com.vanced.manager.core
import android.app.Application
import com.downloader.PRDownloader
class App: Application() {
override fun onCreate() {
super.onCreate()
PRDownloader.initialize(applicationContext)
}
}

View File

@ -1,19 +1,6 @@
package com.vanced.manager.core.base;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
public class DummyJava {
private final Activity activity;
public DummyJava(Activity activity) {
this.activity = activity;
}
private void SomeVoid() {
SharedPreferences bullshit = activity.getSharedPreferences("installPrefs", Context.MODE_PRIVATE);
}
}

View File

@ -6,22 +6,17 @@ import android.content.Intent
import android.os.IBinder
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.dezlum.codelabs.getjson.GetJson
import com.vanced.manager.core.installer.MicrogInstaller.installMicrog
import com.downloader.Error
import com.downloader.OnDownloadListener
import com.downloader.PRDownloader
import com.vanced.manager.ui.fragments.HomeFragment
import io.reactivex.disposables.Disposable
import io.reactivex.rxkotlin.subscribeBy
import io.reactivex.schedulers.Schedulers
import zlc.season.rxdownload4.download
import zlc.season.rxdownload4.file
import zlc.season.rxdownload4.task.Task
import zlc.season.rxdownload4.utils.getFileNameFromUrl
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
class MicrogDownloadService: Service() {
private var disposable: Disposable? = null
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
downloadMicrog()
stopSelf()
return START_NOT_STICKY
}
@ -31,41 +26,30 @@ class MicrogDownloadService: Service() {
val apkUrl = GetJson().AsJSONObject("https://x1nto.github.io/VancedFiles/microg.json")
val dwnldUrl = apkUrl.get("url").asString
val task = filesDir?.path?.let {
Task(
url = dwnldUrl,
saveName = getFileNameFromUrl(dwnldUrl),
savePath = it
)
}
if (task?.file()?.exists()!!)
task.file().delete()
disposable = task
.download()
.observeOn(Schedulers.newThread())
.subscribeBy(
onNext = { progress ->
val intent = Intent(HomeFragment.MICROG_DOWNLOADING)
intent.action = HomeFragment.MICROG_DOWNLOADING
intent.putExtra("microgProgress", progress.percent().toInt())
intent.putExtra("fileName", "Downloading ${getFileNameFromUrl(dwnldUrl)}...")
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
},
onComplete = {
PRDownloader.download(dwnldUrl, filesDir.path, "microg.apk")
.build()
.setOnProgressListener { progress ->
val intent = Intent(HomeFragment.MICROG_DOWNLOADING)
val mProgress = progress.currentBytes * 100 / progress.totalBytes
intent.action = HomeFragment.MICROG_DOWNLOADING
intent.putExtra("microgProgress", mProgress.toInt())
intent.putExtra("fileName", "Downloading ${getFileNameFromUrl(dwnldUrl)}...")
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
}
.start(object : OnDownloadListener {
override fun onDownloadComplete() {
val intent = Intent(HomeFragment.MICROG_DOWNLOADED)
intent.action = HomeFragment.MICROG_DOWNLOADED
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
LocalBroadcastManager.getInstance(this@MicrogDownloadService).sendBroadcast(intent)
prefs?.edit()?.putBoolean("isMicrogDownloading", false)?.apply()
},
onError = { throwable ->
}
override fun onError(error: Error) {
val intent = Intent(HomeFragment.DOWNLOAD_ERROR)
intent.action = HomeFragment.DOWNLOAD_ERROR
intent.putExtra("DownloadError", throwable.toString())
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
intent.putExtra("DownloadError", error.toString())
LocalBroadcastManager.getInstance(this@MicrogDownloadService).sendBroadcast(intent)
}
)
})
}
override fun onBind(intent: Intent?): IBinder? {

View File

@ -7,24 +7,19 @@ import android.os.Build
import android.os.IBinder
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.preference.PreferenceManager
import com.downloader.Error
import com.downloader.OnDownloadListener
import com.downloader.PRDownloader
import com.vanced.manager.core.installer.RootSplitInstallerService
import com.vanced.manager.core.installer.SplitInstaller
import com.vanced.manager.ui.fragments.HomeFragment
import io.reactivex.disposables.Disposable
import io.reactivex.rxkotlin.subscribeBy
import io.reactivex.schedulers.Schedulers
import zlc.season.rxdownload4.delete
import zlc.season.rxdownload4.download
import zlc.season.rxdownload4.file
import zlc.season.rxdownload4.task.Task
import zlc.season.rxdownload4.utils.getFileNameFromUrl
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
class VancedDownloadService: Service() {
private var disposable: Disposable? = null
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
downloadSplits()
stopSelf()
return START_NOT_STICKY
}
@ -33,7 +28,8 @@ class VancedDownloadService: Service() {
) {
val prefs = getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
prefs?.edit()?.putBoolean("isVancedDownloading", true)?.apply()
val variant = PreferenceManager.getDefaultSharedPreferences(this).getString("vanced_variant", "nonroot")
val variant = PreferenceManager.getDefaultSharedPreferences(this)
.getString("vanced_variant", "nonroot")
val lang = prefs?.getString("lang", "en")
val theme = prefs?.getString("theme", "dark")
val arch =
@ -51,28 +47,21 @@ class VancedDownloadService: Service() {
else -> throw NotImplementedError("This type of APK is NOT valid. What the hell did you even do?")
}
val task = cacheDir?.path?.let {
Task(
url = url,
saveName = getFileNameFromUrl(url),
savePath = it
)
}
if (task?.file()?.exists()!!)
task.delete()
disposable = task.download()
.observeOn(Schedulers.newThread())
.subscribeBy(
onNext = { progress ->
val intent = Intent(HomeFragment.VANCED_DOWNLOADING)
intent.action = HomeFragment.VANCED_DOWNLOADING
intent.putExtra("vancedProgress", progress.percent().toInt())
intent.putExtra("fileName", "Downloading ${getFileNameFromUrl(url)}...")
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
},
onComplete = {
PRDownloader.download(url, filesDir.path, getFileNameFromUrl(url))
.build()
.setOnProgressListener { progress ->
val intent = Intent(HomeFragment.VANCED_DOWNLOADING)
val mProgress = progress.currentBytes * 100 / progress.totalBytes
intent.action = HomeFragment.VANCED_DOWNLOADING
intent.putExtra("vancedProgress", mProgress.toInt())
intent.putExtra(
"fileName",
"Downloading ${getFileNameFromUrl(url)}..."
)
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
}
.start(object : OnDownloadListener {
override fun onDownloadComplete() {
when (type) {
"arch" -> downloadSplits("theme")
"theme" -> downloadSplits("lang")
@ -80,25 +69,26 @@ class VancedDownloadService: Service() {
if (lang == "en" || type == "enlang") {
val intent = Intent(HomeFragment.VANCED_DOWNLOADED)
intent.action = HomeFragment.VANCED_DOWNLOADED
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
LocalBroadcastManager.getInstance(this@VancedDownloadService).sendBroadcast(intent)
if (variant == "root")
launchRootInstaller()
else
launchInstaller()
stopSelf()
} else {
downloadSplits("enlang")
}
}
}
},
onError = { throwable ->
}
override fun onError(error: Error) {
val intent = Intent(HomeFragment.DOWNLOAD_ERROR)
intent.action = HomeFragment.DOWNLOAD_ERROR
intent.putExtra("DownloadError", throwable.toString())
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
intent.putExtra("DownloadError", error.toString())
LocalBroadcastManager.getInstance(this@VancedDownloadService)
.sendBroadcast(intent)
}
)
})
}
private fun launchInstaller() {
SplitInstaller.installSplitApk(this)

View File

@ -17,7 +17,7 @@ import com.vanced.manager.core.installer.StubInstaller
import com.vanced.manager.ui.dialogs.DialogContainer.rootModeDetected
import com.vanced.manager.ui.dialogs.DialogContainer.secondMiuiDialog
import com.vanced.manager.utils.MiuiHelper
import com.vanced.manager.utils.PackageHelper.uninstallApp
import com.vanced.manager.utils.PackageHelper.uninstallApk
open class Home : BaseFragment(), View.OnClickListener {
@ -53,9 +53,9 @@ open class Home : BaseFragment(), View.OnClickListener {
val isVancedDownloading: Boolean? = prefs?.getBoolean("isVancedDownloading", false)
val isMicrogDownloading: Boolean? = prefs?.getBoolean("isMicrogDownloading", false)
val variant = getDefaultSharedPreferences(activity)
.getString("vanced_variant", "Nonroot")
.getString("vanced_variant", "nonroot")
val vancedPkgName =
if (variant == "Root") {
if (variant == "root") {
"com.google.android.youtube"
} else {
"com.vanced.android.youtube"
@ -64,7 +64,7 @@ open class Home : BaseFragment(), View.OnClickListener {
when (v?.id) {
R.id.vanced_installbtn -> {
if (!isVancedDownloading!!) {
if (variant == "Root") {
if (variant == "root") {
if (MiuiHelper.isMiui()) {
activity?.let { secondMiuiDialog(it) }
} else
@ -106,9 +106,9 @@ open class Home : BaseFragment(), View.OnClickListener {
val intent = Intent(activity, StubInstaller::class.java)
activity?.startService(intent)
}
R.id.microg_uninstallbtn -> activity?.let { uninstallApp("com.mgoogle.android.gms", it)
R.id.microg_uninstallbtn -> activity?.let { uninstallApk("com.mgoogle.android.gms", it)
}
R.id.vanced_uninstallbtn -> activity?.let { uninstallApp(vancedPkgName, it) }
R.id.vanced_uninstallbtn -> activity?.let { uninstallApk(vancedPkgName, it) }
}
}

View File

@ -0,0 +1,36 @@
package com.vanced.manager.core.installer
import android.app.Service
import android.content.Intent
import android.content.pm.PackageInstaller
import android.os.IBinder
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.vanced.manager.ui.fragments.HomeFragment
class AppUninstallerService: Service() {
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
when (intent?.getIntExtra(PackageInstaller.EXTRA_STATUS, -999)) {
PackageInstaller.STATUS_SUCCESS -> {
sendBroadCast(HomeFragment.APP_UNINSTALLED)
}
PackageInstaller.STATUS_FAILURE -> {
sendBroadCast(HomeFragment.APP_NOT_UNINSTALLED)
}
}
return START_NOT_STICKY
}
private fun sendBroadCast(status: String) {
val mIntent = Intent(status)
mIntent.action = status
mIntent.putExtra("pkgName", PackageInstaller.EXTRA_PACKAGE_NAME)
LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
}
override fun onBind(intent: Intent?): IBinder? {
return null
}
}

View File

@ -9,6 +9,7 @@ import android.util.Log
import android.widget.Toast
import androidx.annotation.Nullable
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.vanced.manager.R
import com.vanced.manager.ui.MainActivity
class SplitInstallerService: Service() {
@ -33,48 +34,29 @@ class SplitInstallerService: Service() {
mIntent.action = MainActivity.INSTALL_COMPLETED
LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
}
PackageInstaller.STATUS_FAILURE_ABORTED -> {
getSharedPreferences("installPrefs", Context.MODE_PRIVATE).edit().putBoolean("isInstalling", false).apply()
val mIntent = Intent(MainActivity.INSTALL_ABORTED)
mIntent.action = MainActivity.INSTALL_ABORTED
LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
}
PackageInstaller.STATUS_FAILURE_INVALID -> {
getSharedPreferences("installPrefs", Context.MODE_PRIVATE).edit().putBoolean("isInstalling", false).apply()
val mIntent = Intent(MainActivity.INSTALL_INVALID)
mIntent.action = MainActivity.INSTALL_INVALID
LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
}
PackageInstaller.STATUS_FAILURE_CONFLICT -> {
getSharedPreferences("installPrefs", Context.MODE_PRIVATE).edit().putBoolean("isInstalling", false).apply()
val mIntent = Intent(MainActivity.INSTALL_CONFLICT)
mIntent.action = MainActivity.INSTALL_CONFLICT
LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
}
PackageInstaller.STATUS_FAILURE_STORAGE -> {
getSharedPreferences("installPrefs", Context.MODE_PRIVATE).edit().putBoolean("isInstalling", false).apply()
val mIntent = Intent(MainActivity.INSTALL_STORAGE)
mIntent.action = MainActivity.INSTALL_STORAGE
LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
}
PackageInstaller.STATUS_FAILURE_BLOCKED -> {
getSharedPreferences("installPrefs", Context.MODE_PRIVATE).edit().putBoolean("isInstalling", false).apply()
val mIntent = Intent(MainActivity.INSTALL_BLOCKED)
mIntent.action = MainActivity.INSTALL_BLOCKED
LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
}
else -> {
getSharedPreferences("installPrefs", Context.MODE_PRIVATE).edit().putBoolean("isInstalling", false).apply()
Log.d(TAG, "Installation failed")
val mIntent = Intent(MainActivity.INSTALL_FAILED)
mIntent.action = MainActivity.INSTALL_FAILED
LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
}
else -> sendFailure(intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999))
}
stopSelf()
return START_NOT_STICKY
}
private fun sendFailure(status: Int) {
val msg = when (status) {
PackageInstaller.STATUS_FAILURE_ABORTED -> getString(R.string.installation_aborted)
PackageInstaller.STATUS_FAILURE_BLOCKED -> getString(R.string.installation_blocked)
PackageInstaller.STATUS_FAILURE_STORAGE -> getString(R.string.installation_storage)
PackageInstaller.STATUS_FAILURE_INVALID -> getString(R.string.installation_invalid)
PackageInstaller.STATUS_FAILURE_INCOMPATIBLE -> getString(R.string.installation_incompatible)
PackageInstaller.STATUS_FAILURE_CONFLICT -> getString(R.string.installation_conflict)
else -> getString(R.string.installation_failed)
}
val mIntent = Intent(MainActivity.INSTALL_FAILED)
mIntent.action = MainActivity.INSTALL_FAILED
mIntent.putExtra("errorMsg", msg)
LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
}
@Nullable
override fun onBind(intent: Intent?): IBinder? {
return null

View File

@ -55,13 +55,9 @@ class MainActivity : Main() {
override fun onReceive(context: Context, intent: Intent) {
when (intent.action) {
INSTALL_COMPLETED -> launchVanced(this@MainActivity)
INSTALL_BLOCKED -> installAlertBuilder(getString(R.string.installation_blocked), this@MainActivity)
INSTALL_FAILED -> installAlertBuilder(getString(R.string.installation_failed), this@MainActivity)
INSTALL_ABORTED -> installAlertBuilder(getString(R.string.installation_aborted), this@MainActivity)
INSTALL_STORAGE -> installAlertBuilder(getString(R.string.installation_storage), this@MainActivity)
INSTALL_CONFLICT -> installAlertBuilder(getString(R.string.installation_conflict), this@MainActivity)
INSTALL_INVALID -> installAlertBuilder(getString(R.string.installation_invalid), this@MainActivity)
INSTALL_FAILED -> {
installAlertBuilder(intent.getStringExtra("errorMsg") as String, this@MainActivity)
}
}
}
}
@ -127,34 +123,14 @@ class MainActivity : Main() {
LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, IntentFilter(
INSTALL_COMPLETED
))
LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, IntentFilter(
INSTALL_ABORTED
))
LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, IntentFilter(
INSTALL_BLOCKED
))
LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, IntentFilter(
INSTALL_STORAGE
))
LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, IntentFilter(
INSTALL_CONFLICT
))
LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, IntentFilter(
INSTALL_FAILED
))
LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, IntentFilter(
INSTALL_INVALID
))
}
companion object {
const val INSTALL_COMPLETED = "Installation completed"
const val INSTALL_ABORTED = "user aborted installation"
const val INSTALL_BLOCKED = "user blocked installation"
const val INSTALL_STORAGE = "there was an error with storage.\n Hold up how is that even possible?"
const val INSTALL_CONFLICT = "app conflicts with already installed app"
const val INSTALL_FAILED = "it just failed idk"
const val INSTALL_INVALID = "apk files are invalid"
}
}

View File

@ -184,7 +184,12 @@ class HomeFragment : Home() {
}
if (variant == "root" && viewModel.signatureStatusTxt.value != getString(R.string.signature_disabled)) {
disableVancedButton(getString(R.string.signature_not_checked))
when (viewModel.signatureStatusTxt.value) {
getString(R.string.unavailable) -> disableVancedButton(getString(R.string.signature_not_checked))
getString(R.string.signature_enabled) -> disableVancedButton(getString(R.string.signature_disable))
else -> throw NotImplementedError("Error handling status")
}
}
val oa2 = ObjectAnimator.ofFloat(networkErrorLayout, "yFraction", 0f, 0.3f)
@ -291,6 +296,15 @@ class HomeFragment : Home() {
Toast.makeText(activity, error, Toast.LENGTH_SHORT).show()
Log.d("VMDwnld", error)
}
APP_UNINSTALLED -> {
val pkgName = intent.getStringExtra("pkgName")
restartActivity()
Log.d(tag, "successfully uninstalled $pkgName")
}
APP_NOT_UNINSTALLED -> {
val pkgName = intent.getStringExtra("pkgName")
Log.d(tag, "Failed to uninstall $pkgName")
}
}
}
}
@ -337,6 +351,18 @@ class HomeFragment : Home() {
)
)
}
activity?.let {
LocalBroadcastManager.getInstance(it).registerReceiver(broadcastReceiver, IntentFilter(
APP_UNINSTALLED
)
)
}
activity?.let {
LocalBroadcastManager.getInstance(it).registerReceiver(broadcastReceiver, IntentFilter(
APP_NOT_UNINSTALLED
)
)
}
}
@ -396,6 +422,9 @@ class HomeFragment : Home() {
const val VANCED_DOWNLOADED = "Vanced downloaded"
const val MICROG_DOWNLOADED = "MicroG downloaded"
const val DOWNLOAD_ERROR = "Error occurred"
const val APP_UNINSTALLED = "App uninstalled"
const val APP_NOT_UNINSTALLED = "App not uninstalled"
}
}

View File

@ -8,9 +8,11 @@ import androidx.preference.*
import com.topjohnwu.superuser.Shell
import com.vanced.manager.R
import com.vanced.manager.ui.MainActivity
import java.util.*
class SettingsFragment : PreferenceFragmentCompat() {
@ExperimentalStdlibApi
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
@ -40,7 +42,9 @@ class SettingsFragment : PreferenceFragmentCompat() {
}
val installMode: DropDownPreference? = findPreference("vanced_variant")
installMode?.summary = preferenceScreen.sharedPreferences.getString("vanced_variant", "nonroot")
installMode?.summary = preferenceScreen.sharedPreferences.getString("vanced_variant",
"nonroot"
)?.capitalize(Locale.ROOT)
installMode?.setOnPreferenceChangeListener{ _, _ ->
when (installMode.value) {
"nonroot" -> {

View File

@ -1,6 +1,5 @@
package com.vanced.manager.ui.fragments
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
@ -19,21 +18,17 @@ import androidx.fragment.app.DialogFragment
import com.dezlum.codelabs.getjson.GetJson
import androidx.core.content.FileProvider
import androidx.preference.PreferenceManager
import com.downloader.Error
import com.downloader.OnDownloadListener
import com.downloader.PRDownloader
import com.vanced.manager.BuildConfig
import com.vanced.manager.R
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.rxkotlin.subscribeBy
import zlc.season.rxdownload4.download
import zlc.season.rxdownload4.file
import zlc.season.rxdownload4.task.Task
import zlc.season.rxdownload4.utils.getFileNameFromUrl
import java.io.File
class UpdateCheckFragment : DialogFragment() {
private var disposable: Disposable? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
@ -44,7 +39,6 @@ class UpdateCheckFragment : DialogFragment() {
return inflater.inflate(R.layout.fragment_update_check, container, false)
}
@SuppressLint("SetTextI18n")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -63,18 +57,18 @@ class UpdateCheckFragment : DialogFragment() {
if (remoteVersion > BuildConfig.VERSION_CODE) {
recheckbtn.visibility = View.GONE
checkingTxt.text = "Update Found!"
checkingTxt.text = getString(R.string.update_found)
updatebtn.setOnClickListener {
upgradeManager(loadBar)
}
} else {
checkingTxt.text = "No updates found"
checkingTxt.text = getString(R.string.update_notfound)
}
} else {
checkingTxt.text = "No connection"
checkingTxt.text = getString(R.string.network_error)
}
}
@ -83,32 +77,22 @@ class UpdateCheckFragment : DialogFragment() {
val apkUrl = GetJson().AsJSONObject("https://vanced.app/api/v1/manager.json")
val dwnldUrl = apkUrl.get("url").asString
val task = activity?.filesDir?.path?.let {
Task(
url = dwnldUrl,
saveName = getFileNameFromUrl(dwnldUrl),
savePath = it
)
}
PRDownloader.download(dwnldUrl, activity?.filesDir?.path, "manager.apk")
.build()
.setOnProgressListener { progress ->
val mProgress = progress.currentBytes * 100 / progress.totalBytes
loadBar.visibility = View.VISIBLE
loadBar.progress = mProgress.toInt()
if (task?.file()?.exists()!!)
task.file().delete()
disposable = task
.download()
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(
onNext = { progress ->
loadBar.visibility = View.VISIBLE
loadBar.progress = progress.percent().toInt()
},
onComplete = {
}
.start(object : OnDownloadListener{
override fun onDownloadComplete() {
val prefs = PreferenceManager.getDefaultSharedPreferences(requireContext())
prefs.getBoolean("isUpgrading", false)
prefs.edit().putBoolean("isUpgrading", true).apply()
val pn = activity?.packageName
val apk = task.file()
val apk = File(activity?.filesDir?.path, "manager.apk")
val uri =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
FileProvider.getUriForFile(requireContext(), "$pn.provider", apk)
@ -119,12 +103,14 @@ class UpdateCheckFragment : DialogFragment() {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
startActivity(intent)
},
onError = { throwable ->
Toast.makeText(activity, throwable.toString(), Toast.LENGTH_SHORT).show()
Log.e("VMUpgrade", throwable.toString())
}
)
override fun onError(error: Error?) {
Toast.makeText(activity, error.toString(), Toast.LENGTH_SHORT).show()
Log.e("VMUpgrade", error.toString())
}
})
}

View File

@ -26,7 +26,6 @@ open class HomeViewModel(application: Application): AndroidViewModel(application
} else {
"com.vanced.android.youtube"
}
//private val signaturePref = getDefaultSharedPreferences(application).getString("signature_status", "unavailable")
val microgInstalled: Boolean = isPackageInstalled("com.mgoogle.android.gms", application.packageManager)
val vancedInstalled: Boolean = isPackageInstalled(vancedPkgName, application.packageManager)

View File

@ -5,6 +5,7 @@ import java.io.FileInputStream
import java.io.InputStream
open class FileInfo(val name: String, val fileSize: Long, val file: File? = null) {
open fun getInputStream(): InputStream =
if (file!= null)
FileInputStream(file)

View File

@ -14,5 +14,7 @@ object InternetTools {
customTabsIntent.launchUrl(context, Uri.parse(Url))
}
fun getFileNameFromUrl(url: String) = url.substring(url.lastIndexOf('/')+1, url.length)
}

View File

@ -1,13 +1,10 @@
package com.vanced.manager.utils
import android.app.Activity
import android.content.ActivityNotFoundException
import android.content.Context
import android.app.PendingIntent
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.widget.Toast
import com.vanced.manager.core.base.BaseFragment
import com.vanced.manager.core.installer.SplitInstallerService
object PackageHelper {
@ -20,15 +17,9 @@ object PackageHelper {
}
}
fun uninstallApp(pkgName: String, activity: Activity) {
try {
val uri = Uri.parse("package:$pkgName")
val uninstall = Intent(Intent.ACTION_DELETE, uri)
uninstall.flags = Intent.FLAG_ACTIVITY_NEW_TASK
uninstall.putExtra(Intent.EXTRA_RETURN_RESULT, true)
activity.startActivityForResult(uninstall, BaseFragment.APP_UNINSTALL)
} catch (e: ActivityNotFoundException) {
Toast.makeText(activity, "Failed to uninstall", Toast.LENGTH_SHORT).show()
}
fun uninstallApk(pkg: String, activity: Activity) {
val callbackIntent = Intent(activity.applicationContext, SplitInstallerService::class.java)
val pendingIntent = PendingIntent.getService(activity.applicationContext, 0, callbackIntent, 0)
activity.packageManager.packageInstaller.uninstall(pkg, pendingIntent.intentSender)
}
}

View File

@ -20,6 +20,7 @@
<string name="installation_blocked">Operation failed because user blocked installation</string>
<string name="installation_conflict">Operation failed because app conflicts with already installed app</string>
<string name="installation_failed">Operation failed because it just failed idk</string>
<string name="installation_incompatible">Operation failed because app is incompatible with your device</string>
<string name="installation_invalid">Operation failed because apk files are invalid</string>
<string name="installation_storage">Operation failed because there was an error with storage. Hold up how is that even possible?</string>
<string name="button_installed">Installed</string>
@ -33,11 +34,12 @@
<string name="useful_links">Useful Links</string>
<string name="vanced_medias">Vanced on Social Media</string>
<string name="website_text">The official website of Vanced</string>
<string name="signature_disable">Disable Sig.</string>
<string name="signature_disabled">Disabled</string>
<string name="signature_enabled">Enabled</string>
<string name="signature_status">status:</string>
<string name="signature_verification">Signature Verification</string>
<string name="signature_not_checked">Signature not checked</string>
<string name="signature_verification">Sig. Verification</string>
<string name="signature_not_checked">Check signature</string>
<string name="support_us">Support us by downloading Brave</string>
<!-- Settings -->
@ -60,6 +62,8 @@
<string name="push_notifications_summary">Receive push notifications when update is released</string>
<string name="re_check">Re-check</string>
<string name="update_center">Update Center</string>
<string name="update_found">Update found!</string>
<string name="update_notfound">No new updates</string>>
<!-- Install Page -->
<string name="choose_preferred_language">Choose your preferred language for Vanced</string>