diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b86439dc..d6dcfc36 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -56,10 +56,22 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloadService.kt b/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloadService.kt
index dcca7d5e..e211cd23 100644
--- a/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloadService.kt
+++ b/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloadService.kt
@@ -12,11 +12,13 @@ import com.downloader.OnDownloadListener
import com.downloader.OnStartOrResumeListener
import com.downloader.PRDownloader
import com.vanced.manager.R
+import com.vanced.manager.core.installer.AppInstaller
import com.vanced.manager.ui.fragments.HomeFragment
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
import com.vanced.manager.utils.NotificationHelper
import com.vanced.manager.utils.NotificationHelper.cancelNotif
import com.vanced.manager.utils.NotificationHelper.createBasicNotif
+import com.vanced.manager.utils.PackageHelper.installApp
import java.lang.Exception
import java.lang.IllegalStateException
import java.lang.RuntimeException
@@ -61,6 +63,10 @@ class MicrogDownloadService: Service() {
override fun onDownloadComplete() {
prefs?.edit()?.putBoolean("isMicrogDownloading", false)?.apply()
cancelNotif(channel, this@MicrogDownloadService)
+ val intent = Intent(this@MicrogDownloadService, AppInstaller::class.java)
+ intent.putExtra("path", "${filesDir.path}/microg.apk")
+ intent.putExtra("pkg", "com.mgoogle.android.gms")
+ startService(intent)
}
override fun onError(error: Error) {
prefs?.edit()?.putBoolean("isMicrogDownloading", false)?.apply()
diff --git a/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloadService.kt b/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloadService.kt
index 7e8a4c65..daf1a345 100644
--- a/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloadService.kt
+++ b/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloadService.kt
@@ -108,7 +108,7 @@ class VancedDownloadService: Service() {
if (variant == "root")
startService(Intent(this, RootSplitInstallerService::class.java))
else
- SplitInstaller.installSplitApk(this)
+ startService(Intent(this, SplitInstaller::class.java))
}
override fun onBind(intent: Intent?): IBinder? {
diff --git a/app/src/main/java/com/vanced/manager/core/installer/AppInstaller.kt b/app/src/main/java/com/vanced/manager/core/installer/AppInstaller.kt
new file mode 100644
index 00000000..7c53e0dd
--- /dev/null
+++ b/app/src/main/java/com/vanced/manager/core/installer/AppInstaller.kt
@@ -0,0 +1,38 @@
+package com.vanced.manager.core.installer
+
+import android.app.PendingIntent
+import android.app.Service
+import android.content.Intent
+import android.content.pm.PackageInstaller
+import android.os.IBinder
+import java.io.FileInputStream
+import java.io.InputStream
+
+class AppInstaller: Service() {
+
+ override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
+ val callbackIntent = Intent(applicationContext, AppInstallerService::class.java)
+ val pendingIntent = PendingIntent.getService(applicationContext, 0, callbackIntent, 0)
+ val packageInstaller = packageManager.packageInstaller
+ val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
+ params.setAppPackageName(intent?.getStringExtra("pkg"))
+ val sessionId = packageInstaller.createSession(params)
+ val session = packageInstaller.openSession(sessionId)
+ val inputStream: InputStream = FileInputStream(intent?.getStringExtra("path") as String)
+ val outputStream = session.openWrite("install", 0, -1)
+ val buffer = ByteArray(65536)
+ var c: Int
+ while (inputStream.read(buffer).also { c = it } != -1) {
+ outputStream.write(buffer, 0, c)
+ }
+ session.fsync(outputStream)
+ inputStream.close()
+ outputStream.close()
+ session.commit(pendingIntent.intentSender)
+ return START_STICKY
+ }
+
+ override fun onBind(intent: Intent?): IBinder? {
+ return null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/vanced/manager/core/installer/SplitInstaller.kt b/app/src/main/java/com/vanced/manager/core/installer/SplitInstaller.kt
index 9bbcb7b3..6d76af4e 100644
--- a/app/src/main/java/com/vanced/manager/core/installer/SplitInstaller.kt
+++ b/app/src/main/java/com/vanced/manager/core/installer/SplitInstaller.kt
@@ -1,15 +1,26 @@
package com.vanced.manager.core.installer
import android.app.PendingIntent
+import android.app.Service
import android.content.Context
import android.content.Intent
import android.content.pm.PackageInstaller
+import android.os.IBinder
import android.util.Log
import java.io.*
-object SplitInstaller {
+class SplitInstaller: Service() {
- fun installSplitApk(context: Context): Int {
+ override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
+ installSplitApk(this)
+ return START_STICKY
+ }
+
+ override fun onBind(intent: Intent?): IBinder? {
+ return null
+ }
+
+ private fun installSplitApk(context: Context): Int {
val apkFolderPath = context.cacheDir.path + "/"
val nameSizeMap = HashMap()
var totalSize: Long = 0
diff --git a/app/src/main/java/com/vanced/manager/utils/NotificationHelper.kt b/app/src/main/java/com/vanced/manager/utils/NotificationHelper.kt
index 4d76489d..e5541a91 100644
--- a/app/src/main/java/com/vanced/manager/utils/NotificationHelper.kt
+++ b/app/src/main/java/com/vanced/manager/utils/NotificationHelper.kt
@@ -17,7 +17,7 @@ object NotificationHelper {
val notifChannel = NotificationChannel(
"69420",
context.getString(R.string.notif_channel_name),
- NotificationManager.IMPORTANCE_DEFAULT
+ NotificationManager.IMPORTANCE_LOW
)
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(notifChannel)
@@ -29,7 +29,7 @@ object NotificationHelper {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
Notification.Builder(context, channel.toString()).setChannelId("69420")
else
- Notification.Builder(context).setPriority(Notification.PRIORITY_DEFAULT)
+ Notification.Builder(context).setPriority(Notification.PRIORITY_LOW)
val cancelDownload = Intent(context, DownloadBroadcastReceiver::class.java).apply {
action = "cancel"
diff --git a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt
index 503ffb71..286034f8 100644
--- a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt
+++ b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt
@@ -2,6 +2,7 @@ package com.vanced.manager.utils
import android.app.Activity
import android.app.PendingIntent
+import android.content.Context
import android.content.Intent
import android.content.pm.PackageInstaller.SessionParams
import android.content.pm.PackageManager
@@ -24,13 +25,13 @@ object PackageHelper {
@Throws(IOException::class)
fun installApp(
- activity: Activity,
+ context: Context,
path: String,
pkg: String?
) {
- val callbackIntent = Intent(activity.applicationContext, AppInstallerService::class.java)
- val pendingIntent = PendingIntent.getService(activity.applicationContext, 0, callbackIntent, 0)
- val packageInstaller = activity.packageManager.packageInstaller
+ val callbackIntent = Intent(context.applicationContext, AppInstallerService::class.java)
+ val pendingIntent = PendingIntent.getService(context.applicationContext, 0, callbackIntent, 0)
+ val packageInstaller = context.packageManager.packageInstaller
val params = SessionParams(SessionParams.MODE_FULL_INSTALL)
params.setAppPackageName(pkg)
val sessionId = packageInstaller.createSession(params)