new downloader library and various additions/fixes
This commit is contained in:
parent
c4eb9188b0
commit
77921e92fd
11
app/app.iml
11
app/app.iml
File diff suppressed because one or more lines are too long
|
@ -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'
|
||||
}
|
||||
|
|
|
@ -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" />
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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? {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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) }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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" -> {
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -14,5 +14,7 @@ object InternetTools {
|
|||
customTabsIntent.launchUrl(context, Uri.parse(Url))
|
||||
}
|
||||
|
||||
fun getFileNameFromUrl(url: String) = url.substring(url.lastIndexOf('/')+1, url.length)
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue