chnages to download system
This commit is contained in:
parent
8e65ae8d95
commit
1a9575cf65
|
@ -37,7 +37,7 @@
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.MainActivity"
|
android:name=".ui.MainActivity"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:theme="@style/Theme.MaterialComponents"/>
|
android:theme="@style/DarkTheme.Blue"/>
|
||||||
|
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="preloaded_fonts"
|
android:name="preloaded_fonts"
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
package com.vanced.manager.core.downloader
|
package com.vanced.manager.core.downloader
|
||||||
|
|
||||||
import android.app.Service
|
import android.app.Service
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
|
import com.downloader.Error
|
||||||
import com.downloader.OnDownloadListener
|
import com.downloader.OnDownloadListener
|
||||||
import com.downloader.OnStartOrResumeListener
|
|
||||||
import com.downloader.PRDownloader
|
import com.downloader.PRDownloader
|
||||||
import com.vanced.manager.R
|
import com.vanced.manager.R
|
||||||
import com.vanced.manager.core.installer.AppInstaller
|
import com.vanced.manager.core.installer.AppInstaller
|
||||||
|
import com.vanced.manager.ui.fragments.HomeFragment
|
||||||
import com.vanced.manager.utils.InternetTools.baseUrl
|
import com.vanced.manager.utils.InternetTools.baseUrl
|
||||||
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
|
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
|
||||||
import com.vanced.manager.utils.InternetTools.getObjectFromJson
|
import com.vanced.manager.utils.InternetTools.getObjectFromJson
|
||||||
import com.vanced.manager.utils.NotificationHelper
|
|
||||||
import com.vanced.manager.utils.NotificationHelper.cancelNotif
|
|
||||||
import com.vanced.manager.utils.NotificationHelper.createBasicNotif
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
|
|
||||||
class MicrogDownloadService: Service() {
|
class MicrogDownloadService: Service() {
|
||||||
|
|
||||||
//private var downloadId: Long = 0
|
//private var downloadId: Long = 0
|
||||||
|
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(this) }
|
||||||
|
|
||||||
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
||||||
//registerReceiver(receiver, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE))
|
//registerReceiver(receiver, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE))
|
||||||
|
@ -34,7 +34,6 @@ class MicrogDownloadService: Service() {
|
||||||
val context = this
|
val context = this
|
||||||
runBlocking {
|
runBlocking {
|
||||||
launch {
|
launch {
|
||||||
val prefs = getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
|
|
||||||
val url = getObjectFromJson(
|
val url = getObjectFromJson(
|
||||||
"${PreferenceManager.getDefaultSharedPreferences(context)
|
"${PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
.getString("install_url", baseUrl)}/microg.json", "url"
|
.getString("install_url", baseUrl)}/microg.json", "url"
|
||||||
|
@ -42,43 +41,23 @@ class MicrogDownloadService: Service() {
|
||||||
|
|
||||||
//downloadId = download(url, "apk", "microg.apk", this@MicrogDownloadService)
|
//downloadId = download(url, "apk", "microg.apk", this@MicrogDownloadService)
|
||||||
|
|
||||||
val channel = 420
|
|
||||||
PRDownloader.download(url, getExternalFilesDir("apk")?.path, "microg.apk")
|
PRDownloader.download(url, getExternalFilesDir("apk")?.path, "microg.apk")
|
||||||
.build()
|
.build()
|
||||||
.setOnStartOrResumeListener {
|
|
||||||
OnStartOrResumeListener {
|
|
||||||
prefs?.edit()?.putBoolean("isMicrogDownloading", true)?.apply()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.setOnProgressListener { progress ->
|
.setOnProgressListener { progress ->
|
||||||
val mProgress = progress.currentBytes * 100 / progress.totalBytes
|
val mProgress = progress.currentBytes * 100 / progress.totalBytes
|
||||||
NotificationHelper.displayDownloadNotif(
|
localBroadcastManager.sendBroadcast(Intent(HomeFragment.MICROG_DOWNLOADING).putExtra("progress", mProgress).putExtra("file", getFileNameFromUrl(url)))
|
||||||
channel,
|
|
||||||
mProgress.toInt(),
|
|
||||||
getFileNameFromUrl(url),
|
|
||||||
this@MicrogDownloadService
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
.start(object : OnDownloadListener {
|
.start(object : OnDownloadListener {
|
||||||
override fun onDownloadComplete() {
|
override fun onDownloadComplete() {
|
||||||
prefs?.edit()?.putBoolean("isMicrogDownloading", false)?.apply()
|
|
||||||
cancelNotif(channel, this@MicrogDownloadService)
|
|
||||||
val intent = Intent(this@MicrogDownloadService, AppInstaller::class.java)
|
val intent = Intent(this@MicrogDownloadService, AppInstaller::class.java)
|
||||||
intent.putExtra("path", "${getExternalFilesDir("apk")}/microg.apk")
|
intent.putExtra("path", "${getExternalFilesDir("apk")}/microg.apk")
|
||||||
intent.putExtra("pkg", "com.mgoogle.android.gms")
|
intent.putExtra("pkg", "com.mgoogle.android.gms")
|
||||||
//val mIntent = Intent(HomeFragment.MICROG_DOWNLOADED)
|
localBroadcastManager.sendBroadcast(Intent(HomeFragment.MICROG_INSTALLING))
|
||||||
//mIntent.action = HomeFragment.MICROG_DOWNLOADED
|
|
||||||
//LocalBroadcastManager.getInstance(this@MicrogDownloadService).sendBroadcast(mIntent)
|
|
||||||
startService(intent)
|
startService(intent)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onError(error: com.downloader.Error?) {
|
override fun onError(error: Error?) {
|
||||||
prefs?.edit()?.putBoolean("isMicrogDownloading", false)?.apply()
|
Toast.makeText(this@MicrogDownloadService, getString(R.string.error_downloading, "microG"), Toast.LENGTH_SHORT).show()
|
||||||
createBasicNotif(
|
|
||||||
getString(R.string.error_downloading, "Microg"),
|
|
||||||
channel,
|
|
||||||
this@MicrogDownloadService
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -102,11 +81,6 @@ class MicrogDownloadService: Service() {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
override fun onDestroy() {
|
|
||||||
super.onDestroy()
|
|
||||||
cancelNotif(420, this)
|
|
||||||
//unregisterReceiver(receiver)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onBind(intent: Intent?): IBinder? {
|
override fun onBind(intent: Intent?): IBinder? {
|
||||||
return null
|
return null
|
||||||
|
|
|
@ -5,6 +5,7 @@ import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.downloader.Error
|
import com.downloader.Error
|
||||||
|
@ -17,9 +18,6 @@ import com.vanced.manager.ui.fragments.HomeFragment
|
||||||
import com.vanced.manager.utils.InternetTools.baseUrl
|
import com.vanced.manager.utils.InternetTools.baseUrl
|
||||||
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
|
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
|
||||||
import com.vanced.manager.utils.InternetTools.getObjectFromJson
|
import com.vanced.manager.utils.InternetTools.getObjectFromJson
|
||||||
import com.vanced.manager.utils.NotificationHelper.cancelNotif
|
|
||||||
import com.vanced.manager.utils.NotificationHelper.createBasicNotif
|
|
||||||
import com.vanced.manager.utils.NotificationHelper.displayDownloadNotif
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
|
|
||||||
|
@ -28,6 +26,7 @@ class VancedDownloadService: Service() {
|
||||||
//private var downloadId: Long = 0
|
//private var downloadId: Long = 0
|
||||||
//private var apkType: String = "arch"
|
//private var apkType: String = "arch"
|
||||||
private var count: Int = 0
|
private var count: Int = 0
|
||||||
|
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(this) }
|
||||||
|
|
||||||
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
||||||
//registerReceiver(receiver, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE))
|
//registerReceiver(receiver, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE))
|
||||||
|
@ -67,14 +66,12 @@ class VancedDownloadService: Service() {
|
||||||
//apkType = type
|
//apkType = type
|
||||||
//downloadId = download(url, "apks", getFileNameFromUrl(url), this@VancedDownloadService)
|
//downloadId = download(url, "apks", getFileNameFromUrl(url), this@VancedDownloadService)
|
||||||
|
|
||||||
val channel = 69
|
|
||||||
PRDownloader
|
PRDownloader
|
||||||
.download(url, getExternalFilesDir("apks")?.path, getFileNameFromUrl(url))
|
.download(url, getExternalFilesDir("apks")?.path, getFileNameFromUrl(url))
|
||||||
.build()
|
.build()
|
||||||
//.setOnStartOrResumeListener { OnStartOrResumeListener { prefs?.edit()?.putBoolean("isVancedDownloading", true)?.apply() } }
|
|
||||||
.setOnProgressListener { progress ->
|
.setOnProgressListener { progress ->
|
||||||
val mProgress = progress.currentBytes * 100 / progress.totalBytes
|
val mProgress = progress.currentBytes * 100 / progress.totalBytes
|
||||||
displayDownloadNotif(channel, mProgress.toInt(), getFileNameFromUrl(url), this@VancedDownloadService)
|
localBroadcastManager.sendBroadcast(Intent(HomeFragment.VANCED_DOWNLOADING).putExtra("progress", mProgress).putExtra("file", getFileNameFromUrl(url)))
|
||||||
}
|
}
|
||||||
.start(object : OnDownloadListener {
|
.start(object : OnDownloadListener {
|
||||||
override fun onDownloadComplete() {
|
override fun onDownloadComplete() {
|
||||||
|
@ -83,18 +80,16 @@ class VancedDownloadService: Service() {
|
||||||
"theme" -> downloadSplits("lang")
|
"theme" -> downloadSplits("lang")
|
||||||
"lang" -> {
|
"lang" -> {
|
||||||
count++
|
count++
|
||||||
if (count < lang?.count()!!) {
|
if (count < lang?.count()!!)
|
||||||
downloadSplits("lang")
|
downloadSplits("lang")
|
||||||
} else {
|
else
|
||||||
prepareInstall(variant!!)
|
prepareInstall(variant!!)
|
||||||
cancelNotif(channel, this@VancedDownloadService)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onError(error: Error?) {
|
override fun onError(error: Error?) {
|
||||||
createBasicNotif(getString(R.string.error_downloading, "Vanced"), channel, this@VancedDownloadService)
|
Toast.makeText(this@VancedDownloadService, getString(R.string.error_downloading, "Vanced"), Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -130,19 +125,13 @@ class VancedDownloadService: Service() {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private fun prepareInstall(variant: String) {
|
private fun prepareInstall(variant: String) {
|
||||||
//LocalBroadcastManager.getInstance(this).sendBroadcast(Intent(HomeFragment.VANCED_DOWNLOADED))
|
localBroadcastManager.sendBroadcast(Intent(HomeFragment.VANCED_INSTALLING))
|
||||||
if (variant == "root")
|
if (variant == "root")
|
||||||
startService(Intent(this, RootSplitInstallerService::class.java))
|
startService(Intent(this, RootSplitInstallerService::class.java))
|
||||||
else
|
else
|
||||||
startService(Intent(this, SplitInstaller::class.java))
|
startService(Intent(this, SplitInstaller::class.java))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
|
||||||
super.onDestroy()
|
|
||||||
cancelNotif(69, this)
|
|
||||||
//unregisterReceiver(receiver)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onBind(intent: Intent?): IBinder? {
|
override fun onBind(intent: Intent?): IBinder? {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,27 +1,23 @@
|
||||||
package com.vanced.manager.core.installer
|
package com.vanced.manager.core.installer
|
||||||
|
|
||||||
import android.app.Service
|
import android.app.Service
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageInstaller
|
import android.content.pm.PackageInstaller
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager
|
||||||
import com.vanced.manager.R
|
|
||||||
import com.vanced.manager.ui.MainActivity
|
|
||||||
import com.vanced.manager.ui.fragments.HomeFragment
|
import com.vanced.manager.ui.fragments.HomeFragment
|
||||||
import com.vanced.manager.utils.AppUtils.getErrorMessage
|
import com.vanced.manager.utils.AppUtils.sendFailure
|
||||||
//import com.vanced.manager.utils.AppUtils.sendRefreshHome
|
|
||||||
import com.vanced.manager.utils.NotificationHelper.createBasicNotif
|
|
||||||
|
|
||||||
class AppInstallerService: Service() {
|
class AppInstallerService: Service() {
|
||||||
|
|
||||||
|
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(this) }
|
||||||
|
|
||||||
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
|
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
|
||||||
val notifId = 42
|
|
||||||
when (intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999)) {
|
when (intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999)) {
|
||||||
PackageInstaller.STATUS_PENDING_USER_ACTION -> {
|
PackageInstaller.STATUS_PENDING_USER_ACTION -> {
|
||||||
Log.d(TAG, "Requesting user confirmation for installation")
|
Log.d(TAG, "Requesting user confirmation for installation")
|
||||||
createBasicNotif(getString(R.string.installing_app, "MicroG"), notifId, this)
|
localBroadcastManager.sendBroadcast(Intent(HomeFragment.MICROG_INSTALLING))
|
||||||
val confirmationIntent = intent.getParcelableExtra<Intent>(Intent.EXTRA_INTENT)
|
val confirmationIntent = intent.getParcelableExtra<Intent>(Intent.EXTRA_INTENT)
|
||||||
confirmationIntent?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
confirmationIntent?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
try {
|
try {
|
||||||
|
@ -32,32 +28,14 @@ class AppInstallerService: Service() {
|
||||||
}
|
}
|
||||||
PackageInstaller.STATUS_SUCCESS -> {
|
PackageInstaller.STATUS_SUCCESS -> {
|
||||||
Log.d(TAG, "Installation succeed")
|
Log.d(TAG, "Installation succeed")
|
||||||
LocalBroadcastManager.getInstance(this).sendBroadcast(Intent(HomeFragment.REFRESH_HOME))
|
localBroadcastManager.sendBroadcast(Intent(HomeFragment.REFRESH_HOME))
|
||||||
createBasicNotif(getString(
|
|
||||||
R.string.successfully_installed,
|
|
||||||
"Microg"
|
|
||||||
), notifId, this)
|
|
||||||
}
|
|
||||||
else -> {
|
|
||||||
sendFailure(intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999))
|
|
||||||
createBasicNotif(
|
|
||||||
getErrorMessage(intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999), this),
|
|
||||||
notifId,
|
|
||||||
this
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
else -> sendFailure(this, intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999))
|
||||||
}
|
}
|
||||||
stopSelf()
|
stopSelf()
|
||||||
return START_NOT_STICKY
|
return START_NOT_STICKY
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun sendFailure(status: Int) {
|
|
||||||
val mIntent = Intent(MainActivity.INSTALL_FAILED)
|
|
||||||
mIntent.action = MainActivity.INSTALL_FAILED
|
|
||||||
mIntent.putExtra("errorMsg", getErrorMessage(status, this))
|
|
||||||
LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onBind(intent: Intent?): IBinder? {
|
override fun onBind(intent: Intent?): IBinder? {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,10 +11,8 @@ import androidx.annotation.WorkerThread
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
import com.vanced.manager.R
|
import com.vanced.manager.R
|
||||||
import com.vanced.manager.ui.MainActivity
|
|
||||||
import com.vanced.manager.ui.fragments.HomeFragment
|
import com.vanced.manager.ui.fragments.HomeFragment
|
||||||
import com.vanced.manager.utils.FileInfo
|
import com.vanced.manager.utils.FileInfo
|
||||||
import com.vanced.manager.utils.NotificationHelper.createBasicNotif
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.nio.charset.Charset
|
import java.nio.charset.Charset
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
|
@ -24,10 +22,10 @@ import kotlin.collections.ArrayList
|
||||||
|
|
||||||
class RootSplitInstallerService: Service() {
|
class RootSplitInstallerService: Service() {
|
||||||
|
|
||||||
|
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(this) }
|
||||||
|
|
||||||
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
||||||
Shell.getShell {
|
Shell.getShell {
|
||||||
val isRoot = it.isRoot
|
|
||||||
Log.d("AppLog", "isRoot ?$isRoot ")
|
|
||||||
AsyncTask.execute {
|
AsyncTask.execute {
|
||||||
val apkFilesPath = getExternalFilesDir("apks")?.path
|
val apkFilesPath = getExternalFilesDir("apks")?.path
|
||||||
val fileInfoList = apkFilesPath?.let { it1 -> getFileInfoList(it1) }
|
val fileInfoList = apkFilesPath?.let { it1 -> getFileInfoList(it1) }
|
||||||
|
@ -42,9 +40,7 @@ class RootSplitInstallerService: Service() {
|
||||||
|
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
private fun installSplitApkFiles(apkFiles: ArrayList<FileInfo>) {
|
private fun installSplitApkFiles(apkFiles: ArrayList<FileInfo>) {
|
||||||
val broadcast = LocalBroadcastManager.getInstance(this)
|
|
||||||
var sessionId: Int?
|
var sessionId: Int?
|
||||||
val notifId = 666
|
|
||||||
Log.d("AppLog", "installing split apk files:$apkFiles")
|
Log.d("AppLog", "installing split apk files:$apkFiles")
|
||||||
run {
|
run {
|
||||||
val sessionIdResult = Shell.su("pm install-create -r -t").exec().out
|
val sessionIdResult = Shell.su("pm install-create -r -t").exec().out
|
||||||
|
@ -55,7 +51,6 @@ class RootSplitInstallerService: Service() {
|
||||||
}
|
}
|
||||||
for (apkFile in apkFiles) {
|
for (apkFile in apkFiles) {
|
||||||
Log.d("AppLog", "installing APK : ${apkFile.name} ${apkFile.fileSize} ")
|
Log.d("AppLog", "installing APK : ${apkFile.name} ${apkFile.fileSize} ")
|
||||||
createBasicNotif(getString(R.string.installing_app, "Vanced"), notifId, this)
|
|
||||||
val command = arrayOf("su", "-c", "pm", "install-write", "-S", "${apkFile.fileSize}", "$sessionId", apkFile.name)
|
val command = arrayOf("su", "-c", "pm", "install-write", "-S", "${apkFile.fileSize}", "$sessionId", apkFile.name)
|
||||||
val process: Process = Runtime.getRuntime().exec(command)
|
val process: Process = Runtime.getRuntime().exec(command)
|
||||||
val inputPipe = apkFile.getInputStream()
|
val inputPipe = apkFile.getInputStream()
|
||||||
|
@ -78,14 +73,12 @@ class RootSplitInstallerService: Service() {
|
||||||
Log.d("AppLog", "committing...")
|
Log.d("AppLog", "committing...")
|
||||||
val installResult = Shell.su("pm install-commit $sessionId").exec()
|
val installResult = Shell.su("pm install-commit $sessionId").exec()
|
||||||
if (installResult.isSuccess) {
|
if (installResult.isSuccess) {
|
||||||
broadcast.sendBroadcast(Intent(HomeFragment.REFRESH_HOME))
|
localBroadcastManager.sendBroadcast(Intent(HomeFragment.REFRESH_HOME))
|
||||||
broadcast.sendBroadcast(Intent(MainActivity.INSTALL_COMPLETED).putExtra("pkg", "vanced"))
|
localBroadcastManager.sendBroadcast(Intent(HomeFragment.VANCED_INSTALLED).putExtra("pkg", "vanced"))
|
||||||
createBasicNotif(getString(R.string.successfully_installed, "Vanced"), notifId, this)
|
|
||||||
} else {
|
} else {
|
||||||
val mIntent = Intent(MainActivity.INSTALL_FAILED)
|
val mIntent = Intent(HomeFragment.INSTALL_FAILED)
|
||||||
mIntent.putExtra("errorMsg", getString(R.string.installation_signature))
|
mIntent.putExtra("errorMsg", getString(R.string.installation_signature))
|
||||||
broadcast.sendBroadcast(mIntent)
|
localBroadcastManager.sendBroadcast(mIntent)
|
||||||
createBasicNotif(getString(R.string.installation_signature), notifId, this)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,22 @@
|
||||||
package com.vanced.manager.core.installer
|
package com.vanced.manager.core.installer
|
||||||
|
|
||||||
import android.app.Service
|
import android.app.Service
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageInstaller
|
import android.content.pm.PackageInstaller
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager
|
||||||
import com.vanced.manager.R
|
|
||||||
import com.vanced.manager.ui.MainActivity
|
|
||||||
import com.vanced.manager.ui.fragments.HomeFragment
|
import com.vanced.manager.ui.fragments.HomeFragment
|
||||||
import com.vanced.manager.utils.AppUtils.getErrorMessage
|
import com.vanced.manager.utils.AppUtils.sendFailure
|
||||||
import com.vanced.manager.utils.AppUtils.sendRefreshHome
|
|
||||||
import com.vanced.manager.utils.NotificationHelper.createBasicNotif
|
|
||||||
|
|
||||||
class SplitInstallerService: Service() {
|
class SplitInstallerService: Service() {
|
||||||
|
|
||||||
|
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(this) }
|
||||||
|
|
||||||
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
|
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
|
||||||
val notifId = 666
|
|
||||||
when (intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999)) {
|
when (intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999)) {
|
||||||
PackageInstaller.STATUS_PENDING_USER_ACTION -> {
|
PackageInstaller.STATUS_PENDING_USER_ACTION -> {
|
||||||
createBasicNotif(getString(R.string.installing_app, "Vanced"), notifId, this)
|
localBroadcastManager.sendBroadcast(Intent(HomeFragment.VANCED_INSTALLING))
|
||||||
Log.d(TAG, "Requesting user confirmation for installation")
|
Log.d(TAG, "Requesting user confirmation for installation")
|
||||||
val confirmationIntent = intent.getParcelableExtra<Intent>(Intent.EXTRA_INTENT)
|
val confirmationIntent = intent.getParcelableExtra<Intent>(Intent.EXTRA_INTENT)
|
||||||
confirmationIntent?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
confirmationIntent?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
|
@ -31,32 +27,15 @@ class SplitInstallerService: Service() {
|
||||||
}
|
}
|
||||||
PackageInstaller.STATUS_SUCCESS -> {
|
PackageInstaller.STATUS_SUCCESS -> {
|
||||||
Log.d(TAG, "Installation succeed")
|
Log.d(TAG, "Installation succeed")
|
||||||
LocalBroadcastManager.getInstance(this).sendBroadcast(Intent(HomeFragment.REFRESH_HOME))
|
localBroadcastManager.sendBroadcast(Intent(HomeFragment.REFRESH_HOME))
|
||||||
createBasicNotif(
|
|
||||||
getString(R.string.successfully_installed, "Vanced"),
|
|
||||||
notifId,
|
|
||||||
this
|
|
||||||
)
|
|
||||||
}
|
|
||||||
else -> {
|
|
||||||
sendFailure(intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999))
|
|
||||||
createBasicNotif(
|
|
||||||
getErrorMessage(intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999), this),
|
|
||||||
notifId,
|
|
||||||
this
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
else -> sendFailure(this, intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999))
|
||||||
|
|
||||||
}
|
}
|
||||||
stopSelf()
|
stopSelf()
|
||||||
return START_NOT_STICKY
|
return START_NOT_STICKY
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun sendFailure(status: Int) {
|
|
||||||
val mIntent = Intent(MainActivity.INSTALL_FAILED)
|
|
||||||
mIntent.putExtra("errorMsg", getErrorMessage(status, this))
|
|
||||||
LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onBind(intent: Intent?): IBinder? {
|
override fun onBind(intent: Intent?): IBinder? {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import com.vanced.manager.R
|
||||||
import com.vanced.manager.databinding.ActivityMainBinding
|
import com.vanced.manager.databinding.ActivityMainBinding
|
||||||
import com.vanced.manager.ui.dialogs.DialogContainer
|
import com.vanced.manager.ui.dialogs.DialogContainer
|
||||||
import com.vanced.manager.ui.fragments.UpdateCheckFragment
|
import com.vanced.manager.ui.fragments.UpdateCheckFragment
|
||||||
|
import com.vanced.manager.utils.AppUtils.isInstallationRunning
|
||||||
import com.vanced.manager.utils.InternetTools
|
import com.vanced.manager.utils.InternetTools
|
||||||
import com.vanced.manager.utils.PackageHelper
|
import com.vanced.manager.utils.PackageHelper
|
||||||
import com.vanced.manager.utils.ThemeHelper.setFinalTheme
|
import com.vanced.manager.utils.ThemeHelper.setFinalTheme
|
||||||
|
@ -36,13 +37,6 @@ class MainActivity : AppCompatActivity() {
|
||||||
private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
|
private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
when (intent.action) {
|
when (intent.action) {
|
||||||
INSTALL_COMPLETED -> {
|
|
||||||
if (intent.getStringExtra("package") == "split")
|
|
||||||
DialogContainer.launchVanced(this@MainActivity)
|
|
||||||
else
|
|
||||||
DialogContainer.regularPackageInstalled(getString(R.string.successfully_installed, "MicroG"), this@MainActivity)
|
|
||||||
}
|
|
||||||
INSTALL_FAILED -> DialogContainer.installAlertBuilder(intent.getStringExtra("errorMsg") as String, this@MainActivity)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -94,25 +88,26 @@ class MainActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
val navHost = findNavController(R.id.bottom_nav_host)
|
if (!isInstallationRunning(this)) {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
android.R.id.home -> {
|
android.R.id.home -> {
|
||||||
onBackPressed()
|
onBackPressed()
|
||||||
return true
|
return true
|
||||||
|
}
|
||||||
|
R.id.toolbar_about -> {
|
||||||
|
navHost.navigate(R.id.toAboutFragment)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
R.id.toolbar_settings -> {
|
||||||
|
navHost.navigate(R.id.action_settingsFragment)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
R.id.dev_settings -> {
|
||||||
|
navHost.navigate(R.id.toDevSettingsFragment)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
else -> super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
R.id.toolbar_about -> {
|
|
||||||
navHost.navigate(R.id.toAboutFragment)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
R.id.toolbar_settings -> {
|
|
||||||
navHost.navigate(R.id.action_settingsFragment)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
R.id.dev_settings -> {
|
|
||||||
navHost.navigate(R.id.toDevSettingsFragment)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
else -> super.onOptionsItemSelected(item)
|
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -127,8 +122,6 @@ class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
private fun registerReceivers() {
|
private fun registerReceivers() {
|
||||||
val intentFilter = IntentFilter()
|
val intentFilter = IntentFilter()
|
||||||
intentFilter.addAction(INSTALL_COMPLETED)
|
|
||||||
intentFilter.addAction(INSTALL_FAILED)
|
|
||||||
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter)
|
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -178,7 +171,5 @@ class MainActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val INSTALL_COMPLETED = "install_completed"
|
|
||||||
const val INSTALL_FAILED = "install_failed"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@ import androidx.core.content.ContextCompat.startActivity
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.vanced.manager.R
|
import com.vanced.manager.R
|
||||||
import com.vanced.manager.ui.MainActivity
|
|
||||||
import com.vanced.manager.utils.InternetTools.openUrl
|
import com.vanced.manager.utils.InternetTools.openUrl
|
||||||
import com.vanced.manager.utils.MiuiHelper
|
import com.vanced.manager.utils.MiuiHelper
|
||||||
|
|
||||||
|
@ -97,16 +96,6 @@ object DialogContainer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun regularPackageInstalled(msg: String, activity: MainActivity) {
|
|
||||||
MaterialAlertDialogBuilder(activity)
|
|
||||||
.setTitle(activity.getString(R.string.success))
|
|
||||||
.setMessage(msg)
|
|
||||||
.setPositiveButton(activity.getString(R.string.close)) { _, _ -> activity.restartActivity() }
|
|
||||||
.setCancelable(false)
|
|
||||||
.create()
|
|
||||||
.show()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun basicDialog(title: String, msg: String, activity: Activity) {
|
fun basicDialog(title: String, msg: String, activity: Activity) {
|
||||||
MaterialAlertDialogBuilder(activity)
|
MaterialAlertDialogBuilder(activity)
|
||||||
.setTitle(title)
|
.setTitle(title)
|
||||||
|
@ -116,7 +105,7 @@ object DialogContainer {
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun launchVanced(activity: MainActivity) {
|
fun launchVanced(activity: Activity) {
|
||||||
val intent = Intent()
|
val intent = Intent()
|
||||||
intent.component =
|
intent.component =
|
||||||
if (PreferenceManager.getDefaultSharedPreferences(activity).getString("vanced_variant", "nonroot") == "root")
|
if (PreferenceManager.getDefaultSharedPreferences(activity).getString("vanced_variant", "nonroot") == "root")
|
||||||
|
@ -133,10 +122,6 @@ object DialogContainer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.setNegativeButton(activity.getString(R.string.close)) { dialog, _ -> dialog.dismiss() }
|
.setNegativeButton(activity.getString(R.string.close)) { dialog, _ -> dialog.dismiss() }
|
||||||
.setOnDismissListener {
|
|
||||||
activity.restartActivity()
|
|
||||||
}
|
|
||||||
.setCancelable(false)
|
|
||||||
.create()
|
.create()
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,10 @@ import com.vanced.manager.core.downloader.MicrogDownloadService
|
||||||
import com.vanced.manager.core.downloader.VancedDownloadService
|
import com.vanced.manager.core.downloader.VancedDownloadService
|
||||||
import com.vanced.manager.databinding.FragmentHomeBinding
|
import com.vanced.manager.databinding.FragmentHomeBinding
|
||||||
import com.vanced.manager.ui.MainActivity
|
import com.vanced.manager.ui.MainActivity
|
||||||
|
import com.vanced.manager.ui.dialogs.DialogContainer.installAlertBuilder
|
||||||
|
import com.vanced.manager.ui.dialogs.DialogContainer.launchVanced
|
||||||
import com.vanced.manager.ui.viewmodels.HomeViewModel
|
import com.vanced.manager.ui.viewmodels.HomeViewModel
|
||||||
|
import com.vanced.manager.utils.AppUtils.isInstallationRunning
|
||||||
import com.vanced.manager.utils.PackageHelper
|
import com.vanced.manager.utils.PackageHelper
|
||||||
|
|
||||||
class HomeFragment : Fragment(), View.OnClickListener {
|
class HomeFragment : Fragment(), View.OnClickListener {
|
||||||
|
@ -45,7 +48,7 @@ class HomeFragment : Fragment(), View.OnClickListener {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
||||||
val variantPref = getDefaultSharedPreferences(activity).getString("vanced_variant", "nonroot")
|
val variantPref = getDefaultSharedPreferences(requireActivity()).getString("vanced_variant", "nonroot")
|
||||||
|
|
||||||
with(binding) {
|
with(binding) {
|
||||||
rootSwitch.setOnClickListener(this@HomeFragment)
|
rootSwitch.setOnClickListener(this@HomeFragment)
|
||||||
|
@ -92,8 +95,8 @@ class HomeFragment : Fragment(), View.OnClickListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClick(v: View?) {
|
override fun onClick(v: View?) {
|
||||||
val prefs = activity?.getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
|
val prefs = requireActivity().getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
|
||||||
val variant = getDefaultSharedPreferences(activity).getString("vanced_variant", "nonroot")
|
val variant = getDefaultSharedPreferences(requireActivity()).getString("vanced_variant", "nonroot")
|
||||||
val vancedPkgName =
|
val vancedPkgName =
|
||||||
if (variant == "root") {
|
if (variant == "root") {
|
||||||
"com.google.android.youtube"
|
"com.google.android.youtube"
|
||||||
|
@ -103,46 +106,44 @@ class HomeFragment : Fragment(), View.OnClickListener {
|
||||||
|
|
||||||
when (v?.id) {
|
when (v?.id) {
|
||||||
R.id.vanced_installbtn -> {
|
R.id.vanced_installbtn -> {
|
||||||
if (viewModel.microgInstalled.get()!!) {
|
if (!isInstallationRunning(requireActivity())) {
|
||||||
if (prefs?.getBoolean("valuesModified", false)!!) {
|
if (viewModel.microgInstalled.get()!!) {
|
||||||
activity?.startService(
|
if (prefs?.getBoolean("valuesModified", false)!!) {
|
||||||
Intent(
|
requireActivity().startService(
|
||||||
activity,
|
Intent(
|
||||||
VancedDownloadService::class.java
|
requireActivity(),
|
||||||
|
VancedDownloadService::class.java
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
} else {
|
||||||
} else {
|
view?.findNavController()?.navigate(R.id.toInstallThemeFragment)
|
||||||
view?.findNavController()?.navigate(R.id.toInstallThemeFragment)
|
}
|
||||||
}
|
} else
|
||||||
} else
|
Snackbar.make(binding.homeRefresh, R.string.no_microg, Snackbar.LENGTH_LONG)
|
||||||
Snackbar.make(binding.homeRefresh, R.string.no_microg, Snackbar.LENGTH_LONG)
|
.setAction(R.string.install) {
|
||||||
.setAction(R.string.install) {
|
requireActivity().startService(
|
||||||
activity?.startService(Intent(activity, MicrogDownloadService::class.java))
|
Intent(
|
||||||
}.show()
|
requireActivity(),
|
||||||
|
MicrogDownloadService::class.java
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}.show()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
R.id.microg_installbtn -> {
|
R.id.microg_installbtn -> {
|
||||||
activity?.startService(Intent(activity, MicrogDownloadService::class.java))
|
if (!isInstallationRunning(requireActivity()))
|
||||||
}
|
requireActivity().startService(Intent(requireActivity(), MicrogDownloadService::class.java))
|
||||||
R.id.microg_uninstallbtn -> activity?.let {
|
|
||||||
PackageHelper.uninstallApk(
|
|
||||||
"com.mgoogle.android.gms",
|
|
||||||
it
|
|
||||||
)
|
|
||||||
}
|
|
||||||
R.id.vanced_uninstallbtn -> activity?.let {
|
|
||||||
PackageHelper.uninstallApk(
|
|
||||||
vancedPkgName,
|
|
||||||
it
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
R.id.microg_uninstallbtn -> PackageHelper.uninstallApk("com.mgoogle.android.gms", requireActivity())
|
||||||
|
R.id.vanced_uninstallbtn -> PackageHelper.uninstallApk(vancedPkgName, requireActivity())
|
||||||
R.id.nonroot_switch -> writeToVariantPref("nonroot", R.anim.slide_in_left, R.anim.slide_out_right)
|
R.id.nonroot_switch -> writeToVariantPref("nonroot", R.anim.slide_in_left, R.anim.slide_out_right)
|
||||||
R.id.root_switch ->
|
R.id.root_switch ->
|
||||||
if (Shell.rootAccess()) {
|
if (Shell.rootAccess()) {
|
||||||
writeToVariantPref("root", R.anim.slide_in_right, R.anim.slide_out_left)
|
writeToVariantPref("root", R.anim.slide_in_right, R.anim.slide_out_left)
|
||||||
} else {
|
} else {
|
||||||
writeToVariantPref("nonroot", R.anim.slide_in_left, R.anim.slide_out_right)
|
writeToVariantPref("nonroot", R.anim.slide_in_left, R.anim.slide_out_right)
|
||||||
Toast.makeText(activity, activity?.getString(R.string.root_not_granted), Toast.LENGTH_SHORT).show()
|
Toast.makeText(requireActivity(), activity?.getString(R.string.root_not_granted), Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -189,8 +190,42 @@ class HomeFragment : Fragment(), View.OnClickListener {
|
||||||
private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
|
private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
when (intent.action) {
|
when (intent.action) {
|
||||||
MICROG_DOWNLOADED -> binding.includeMicrogLayout.microgInstalling.visibility = View.VISIBLE
|
VANCED_DOWNLOADING -> {
|
||||||
VANCED_DOWNLOADED -> binding.includeVancedLayout.vancedInstalling.visibility = View.VISIBLE
|
with(binding.includeVancedLayout) {
|
||||||
|
vancedDownloading.visibility = View.VISIBLE
|
||||||
|
vancedDownloading.progress = intent.getIntExtra("progress", 0)
|
||||||
|
vancedDownloadingTxt.visibility = View.VISIBLE
|
||||||
|
vancedDownloadingTxt.text = requireActivity().getString(R.string.downloading_file, intent.getStringExtra("file"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MICROG_DOWNLOADING -> {
|
||||||
|
with(binding.includeMicrogLayout) {
|
||||||
|
microgDownloading.visibility = View.VISIBLE
|
||||||
|
microgDownloading.progress = intent.getIntExtra("progress", 0)
|
||||||
|
microgDownloadingTxt.visibility = View.VISIBLE
|
||||||
|
microgDownloadingTxt.text = requireActivity().getString(R.string.downloading_file, "microg.apk")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MICROG_INSTALLING -> {
|
||||||
|
with (binding.includeMicrogLayout) {
|
||||||
|
microgDownloading.visibility = View.GONE
|
||||||
|
microgDownloadingTxt.visibility = View.GONE
|
||||||
|
microgInstalling.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
VANCED_INSTALLING -> {
|
||||||
|
with (binding.includeVancedLayout) {
|
||||||
|
vancedDownloading.visibility = View.GONE
|
||||||
|
vancedDownloadingTxt.visibility = View.GONE
|
||||||
|
vancedInstalling.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
VANCED_INSTALLED -> {
|
||||||
|
binding.includeVancedLayout.vancedInstalling.visibility = View.GONE
|
||||||
|
launchVanced(requireActivity())
|
||||||
|
}
|
||||||
|
MICROG_INSTALLED -> binding.includeMicrogLayout.microgInstalling.visibility = View.GONE
|
||||||
|
INSTALL_FAILED -> installAlertBuilder(intent.getStringExtra("errorMsg") as String, requireActivity())
|
||||||
REFRESH_HOME -> {
|
REFRESH_HOME -> {
|
||||||
Log.d("VMRefresh", "Refreshing home page")
|
Log.d("VMRefresh", "Refreshing home page")
|
||||||
viewModel.fetchData()
|
viewModel.fetchData()
|
||||||
|
@ -201,8 +236,12 @@ class HomeFragment : Fragment(), View.OnClickListener {
|
||||||
|
|
||||||
private fun registerReceivers() {
|
private fun registerReceivers() {
|
||||||
val intentFilter = IntentFilter()
|
val intentFilter = IntentFilter()
|
||||||
//intentFilter.addAction(VANCED_DOWNLOADED)
|
intentFilter.addAction(VANCED_DOWNLOADING)
|
||||||
//intentFilter.addAction(MICROG_DOWNLOADED)
|
intentFilter.addAction(MICROG_DOWNLOADING)
|
||||||
|
intentFilter.addAction(VANCED_INSTALLING)
|
||||||
|
intentFilter.addAction(MICROG_INSTALLING)
|
||||||
|
intentFilter.addAction(VANCED_INSTALLED)
|
||||||
|
intentFilter.addAction(MICROG_INSTALLED)
|
||||||
intentFilter.addAction(REFRESH_HOME)
|
intentFilter.addAction(REFRESH_HOME)
|
||||||
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter)
|
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter)
|
||||||
}
|
}
|
||||||
|
@ -212,20 +251,14 @@ class HomeFragment : Fragment(), View.OnClickListener {
|
||||||
super.onCreateOptionsMenu(menu, inflater)
|
super.onCreateOptionsMenu(menu, inflater)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
private fun disableVancedButton() {
|
|
||||||
binding.includeVancedLayout.vancedInstallbtn.apply {
|
|
||||||
icon = null
|
|
||||||
isEnabled = false
|
|
||||||
backgroundTintList = ColorStateList.valueOf(Color.DKGRAY)
|
|
||||||
setTextColor(ColorStateList.valueOf(Color.GRAY))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val VANCED_DOWNLOADED = "vanced_downloaded"
|
const val VANCED_DOWNLOADING = "vanced_downloading"
|
||||||
const val MICROG_DOWNLOADED = "microg_downloaded"
|
const val MICROG_DOWNLOADING = "microg_downloading"
|
||||||
|
const val VANCED_INSTALLING = "vanced_installing"
|
||||||
|
const val MICROG_INSTALLING = "microg_installing"
|
||||||
|
const val VANCED_INSTALLED = "vanced_installed"
|
||||||
|
const val MICROG_INSTALLED = "microg_installed"
|
||||||
|
const val INSTALL_FAILED = "install_failed"
|
||||||
const val REFRESH_HOME = "refresh_home"
|
const val REFRESH_HOME = "refresh_home"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.vanced.manager.utils
|
package com.vanced.manager.utils
|
||||||
|
|
||||||
|
import android.app.ActivityManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageInstaller
|
import android.content.pm.PackageInstaller
|
||||||
|
@ -9,10 +10,26 @@ import com.vanced.manager.ui.fragments.HomeFragment
|
||||||
|
|
||||||
object AppUtils {
|
object AppUtils {
|
||||||
|
|
||||||
fun sendRefreshHome(context: Context) {
|
@Suppress("DEPRECATION")
|
||||||
val intent = Intent()
|
fun isInstallationRunning(context: Context): Boolean {
|
||||||
intent.action = HomeFragment.REFRESH_HOME
|
val services = arrayOf("VancedDownloadService", "MicrogDownloadService", "AppInstaller", "SplitInstaller", "RootSplitInstallerService")
|
||||||
LocalBroadcastManager.getInstance(context).sendBroadcast(intent)
|
val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
|
||||||
|
val runningServices = activityManager.getRunningServices(Int.MAX_VALUE)
|
||||||
|
|
||||||
|
services.forEach { name ->
|
||||||
|
runningServices.forEach { info ->
|
||||||
|
if (info.service.className == name) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
fun sendFailure(context: Context, status: Int) {
|
||||||
|
val mIntent = Intent(HomeFragment.INSTALL_FAILED)
|
||||||
|
mIntent.putExtra("errorMsg", getErrorMessage(status, context))
|
||||||
|
LocalBroadcastManager.getInstance(context).sendBroadcast(mIntent)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getErrorMessage(status: Int, context: Context): String {
|
fun getErrorMessage(status: Int, context: Context): String {
|
||||||
|
|
|
@ -1,72 +0,0 @@
|
||||||
package com.vanced.manager.utils
|
|
||||||
|
|
||||||
import android.app.Notification
|
|
||||||
import android.app.NotificationChannel
|
|
||||||
import android.app.NotificationManager
|
|
||||||
import android.content.Context
|
|
||||||
import android.os.Build
|
|
||||||
import com.vanced.manager.R
|
|
||||||
|
|
||||||
object NotificationHelper {
|
|
||||||
|
|
||||||
fun createNotifChannel(context: Context) {
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
||||||
val notifChannel = NotificationChannel(
|
|
||||||
"69420",
|
|
||||||
context.getString(R.string.notif_channel_name),
|
|
||||||
NotificationManager.IMPORTANCE_HIGH
|
|
||||||
)
|
|
||||||
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
|
||||||
notificationManager.createNotificationChannel(notifChannel)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun displayDownloadNotif(channel: Int, progress:Int, filename: String, context: Context) {
|
|
||||||
val notifBuilder =
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
|
||||||
Notification.Builder(context, channel.toString()).setChannelId("69420")
|
|
||||||
else
|
|
||||||
Notification.Builder(context).setPriority(Notification.PRIORITY_HIGH)
|
|
||||||
|
|
||||||
notifBuilder.apply {
|
|
||||||
setContentTitle(context.getString(R.string.app_name))
|
|
||||||
setContentText(context.getString(R.string.downloading_file, filename))
|
|
||||||
setSmallIcon(R.drawable.ic_stat_name)
|
|
||||||
setOnlyAlertOnce(true)
|
|
||||||
setOngoing(true)
|
|
||||||
}
|
|
||||||
|
|
||||||
val notif = notifBuilder.build()
|
|
||||||
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
|
||||||
notificationManager.apply {
|
|
||||||
notifBuilder.setProgress(100, progress, false)
|
|
||||||
notify(channel, notif)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fun createBasicNotif(text: String, channel: Int, context: Context) {
|
|
||||||
val notifBuilder =
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
|
||||||
Notification.Builder(context, channel.toString()).setChannelId("69420")
|
|
||||||
else
|
|
||||||
Notification.Builder(context).setPriority(Notification.PRIORITY_DEFAULT)
|
|
||||||
|
|
||||||
notifBuilder.apply {
|
|
||||||
setContentTitle(context.getString(R.string.app_name))
|
|
||||||
setContentText(text)
|
|
||||||
style = Notification.BigTextStyle().bigText(text)
|
|
||||||
setSmallIcon(R.drawable.ic_stat_name)
|
|
||||||
}
|
|
||||||
|
|
||||||
val notif = notifBuilder.build()
|
|
||||||
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
|
||||||
notificationManager.notify(channel, notif)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun cancelNotif(id: Int, context: Context) {
|
|
||||||
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
|
||||||
notificationManager.cancel(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -120,6 +120,21 @@
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/microg_downloading_txt"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/microg_downloading"
|
||||||
|
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
android:id="@+id/microg_installing"
|
android:id="@+id/microg_installing"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
@ -110,6 +110,21 @@
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/vanced_downloading_txt"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/vanced_downloading"
|
||||||
|
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
android:id="@+id/vanced_installing"
|
android:id="@+id/vanced_installing"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
Loading…
Reference in New Issue