data: installer: Localize installer information
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -1,27 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": "0",
|
||||
"title": "Session installer",
|
||||
"subtitle": "Session based installer for bundled/split APKs",
|
||||
"description": "Recommended, in-built and supports all Android versions",
|
||||
"url": "https://developer.android.com/reference/android/content/pm/PackageInstaller.Session"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"title": "Root installer",
|
||||
"subtitle": "Installer for background installations",
|
||||
"description": "Requires root, supports all Android versions."
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"title": "AM Installer",
|
||||
"subtitle": "Install using App Manager",
|
||||
"description": "You must have App Manager. Need adb/root mode to install when miui optimization is on."
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"title": "Shizuku Installer",
|
||||
"subtitle": "Install using Shizuku",
|
||||
"description": "Requires an active Shizuku installation, supports Android 8.0+"
|
||||
}
|
||||
]
|
||||
@@ -2,6 +2,8 @@ package com.aurora.store.data.installer
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.model.Installer
|
||||
import com.aurora.store.data.room.download.Download
|
||||
import com.aurora.store.util.Log
|
||||
import com.aurora.store.util.PackageUtil.isSharedLibraryInstalled
|
||||
@@ -15,6 +17,15 @@ class AMInstaller(context: Context) : InstallerBase(context) {
|
||||
companion object {
|
||||
const val AM_PACKAGE_NAME = "io.github.muntashirakon.AppManager"
|
||||
const val AM_DEBUG_PACKAGE_NAME = "io.github.muntashirakon.AppManager.debug"
|
||||
|
||||
fun getInstallerInfo(context: Context): Installer {
|
||||
return Installer(
|
||||
id = 4,
|
||||
title = context.getString(R.string.pref_install_mode_am),
|
||||
subtitle = context.getString(R.string.am_installer_subtitle),
|
||||
description = context.getString(R.string.am_installer_desc)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun install(download: Download) {
|
||||
|
||||
@@ -23,6 +23,8 @@ import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.model.Installer
|
||||
import com.aurora.store.data.room.download.Download
|
||||
import com.aurora.store.util.Log
|
||||
import java.io.File
|
||||
@@ -30,6 +32,18 @@ import java.io.File
|
||||
@Deprecated("Deprecated in favour of SessionInstaller")
|
||||
class NativeInstaller(context: Context) : InstallerBase(context) {
|
||||
|
||||
companion object {
|
||||
|
||||
fun getInstallerInfo(context: Context): Installer {
|
||||
return Installer(
|
||||
id = 1,
|
||||
title = context.getString(R.string.pref_install_mode_native),
|
||||
subtitle = context.getString(R.string.native_installer_subtitle),
|
||||
description = context.getString(R.string.native_installer_desc)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun install(download: Download) {
|
||||
if (isAlreadyQueued(download.packageName)) {
|
||||
Log.i("${download.packageName} already queued")
|
||||
|
||||
@@ -22,6 +22,7 @@ package com.aurora.store.data.installer
|
||||
import android.content.Context
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.event.InstallerEvent
|
||||
import com.aurora.store.data.model.Installer
|
||||
import com.aurora.store.data.room.download.Download
|
||||
import com.aurora.store.util.Log
|
||||
import com.aurora.store.util.PackageUtil.isSharedLibraryInstalled
|
||||
@@ -31,6 +32,18 @@ import java.util.regex.Pattern
|
||||
|
||||
class RootInstaller(context: Context) : InstallerBase(context) {
|
||||
|
||||
companion object {
|
||||
|
||||
fun getInstallerInfo(context: Context): Installer {
|
||||
return Installer(
|
||||
id = 2,
|
||||
title = context.getString(R.string.pref_install_mode_root),
|
||||
subtitle = context.getString(R.string.root_installer_subtitle),
|
||||
description = context.getString(R.string.root_installer_desc)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun install(download: Download) {
|
||||
if (isAlreadyQueued(download.packageName)) {
|
||||
Log.i("${download.packageName} already queued")
|
||||
|
||||
@@ -37,6 +37,7 @@ import com.aurora.store.BuildConfig
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.event.BusEvent
|
||||
import com.aurora.store.data.event.InstallerEvent
|
||||
import com.aurora.store.data.model.Installer
|
||||
import com.aurora.store.data.room.download.Download
|
||||
import com.aurora.store.util.Log
|
||||
import com.aurora.store.util.PackageUtil
|
||||
@@ -57,6 +58,15 @@ class ServiceInstaller(context: Context) : InstallerBase(context) {
|
||||
const val ACTION_INSTALL_REPLACE_EXISTING = 2
|
||||
const val PRIVILEGED_EXTENSION_PACKAGE_NAME = "com.aurora.services"
|
||||
const val PRIVILEGED_EXTENSION_SERVICE_INTENT = "com.aurora.services.IPrivilegedService"
|
||||
|
||||
fun getInstallerInfo(context: Context): Installer {
|
||||
return Installer(
|
||||
id = 3,
|
||||
title = context.getString(R.string.pref_install_mode_services),
|
||||
subtitle = context.getString(R.string.services_installer_subtitle),
|
||||
description = context.getString(R.string.services_installer_desc)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun install(download: Download) {
|
||||
|
||||
@@ -35,6 +35,8 @@ import com.aurora.extensions.isSAndAbove
|
||||
import com.aurora.extensions.isTAndAbove
|
||||
import com.aurora.extensions.isUAndAbove
|
||||
import com.aurora.extensions.runOnUiThread
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.model.Installer
|
||||
import com.aurora.store.data.receiver.InstallerStatusReceiver
|
||||
import com.aurora.store.data.room.download.Download
|
||||
import com.aurora.store.util.Log
|
||||
@@ -48,6 +50,18 @@ class SessionInstaller(context: Context) : InstallerBase(context) {
|
||||
private val packageInstaller = context.packageManager.packageInstaller
|
||||
private val sessionIdMap = mutableMapOf<Int, String>()
|
||||
|
||||
companion object {
|
||||
|
||||
fun getInstallerInfo(context: Context): Installer {
|
||||
return Installer(
|
||||
id = 0,
|
||||
title = context.getString(R.string.pref_install_mode_session),
|
||||
subtitle = context.getString(R.string.session_installer_subtitle),
|
||||
description = context.getString(R.string.session_installer_desc)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun install(download: Download) {
|
||||
if (isAlreadyQueued(download.packageName)) {
|
||||
Log.i("${download.packageName} already queued")
|
||||
|
||||
@@ -31,6 +31,7 @@ import androidx.annotation.RequiresApi
|
||||
import com.aurora.extensions.isOAndAbove
|
||||
import com.aurora.extensions.isSAndAbove
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.model.Installer
|
||||
import com.aurora.store.data.receiver.InstallerStatusReceiver
|
||||
import com.aurora.store.data.room.download.Download
|
||||
import com.aurora.store.util.Log
|
||||
@@ -44,6 +45,15 @@ class ShizukuInstaller(context: Context) : InstallerBase(context) {
|
||||
|
||||
companion object {
|
||||
const val SHIZUKU_PACKAGE_NAME = "moe.shizuku.privileged.api"
|
||||
|
||||
fun getInstallerInfo(context: Context): Installer {
|
||||
return Installer(
|
||||
id = 5,
|
||||
title = context.getString(R.string.pref_install_mode_shizuku),
|
||||
subtitle = context.getString(R.string.shizuku_installer_subtitle),
|
||||
description = context.getString(R.string.shizuku_installer_desc)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Taken from LSPatch (https://github.com/LSPosed/LSPatch)
|
||||
|
||||
@@ -23,8 +23,7 @@ data class Installer(
|
||||
var id: Int,
|
||||
var title: String,
|
||||
var subtitle: String,
|
||||
var description: String,
|
||||
var url: String
|
||||
var description: String
|
||||
) {
|
||||
override fun equals(other: Any?): Boolean {
|
||||
return when (other) {
|
||||
|
||||
@@ -28,10 +28,14 @@ import com.aurora.extensions.isMiuiOptimizationDisabled
|
||||
import com.aurora.extensions.isOAndAbove
|
||||
import com.aurora.extensions.showDialog
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.installer.AMInstaller
|
||||
import com.aurora.store.data.installer.AppInstaller.Companion.hasAppManager
|
||||
import com.aurora.store.data.installer.AppInstaller.Companion.hasRootAccess
|
||||
import com.aurora.store.data.installer.AppInstaller.Companion.hasShizukuOrSui
|
||||
import com.aurora.store.data.installer.AppInstaller.Companion.hasShizukuPerm
|
||||
import com.aurora.store.data.installer.RootInstaller
|
||||
import com.aurora.store.data.installer.SessionInstaller
|
||||
import com.aurora.store.data.installer.ShizukuInstaller
|
||||
import com.aurora.store.data.model.Installer
|
||||
import com.aurora.store.databinding.FragmentOnboardingInstallerBinding
|
||||
import com.aurora.store.util.Log
|
||||
@@ -40,11 +44,9 @@ import com.aurora.store.util.Preferences.PREFERENCE_INSTALLER_ID
|
||||
import com.aurora.store.util.save
|
||||
import com.aurora.store.view.epoxy.views.preference.InstallerViewModel_
|
||||
import com.aurora.store.view.ui.commons.BaseFragment
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import rikka.shizuku.Shizuku
|
||||
import rikka.sui.Sui
|
||||
import java.nio.charset.StandardCharsets
|
||||
|
||||
@AndroidEntryPoint
|
||||
class InstallerFragment : BaseFragment(R.layout.fragment_onboarding_installer) {
|
||||
@@ -93,7 +95,7 @@ class InstallerFragment : BaseFragment(R.layout.fragment_onboarding_installer) {
|
||||
// RecyclerView
|
||||
binding.epoxyRecycler.withModels {
|
||||
setFilterDuplicates(true)
|
||||
loadInstallersFromAssets().forEach {
|
||||
getRecommendedInstallers().forEach {
|
||||
add(
|
||||
InstallerViewModel_()
|
||||
.id(it.id)
|
||||
@@ -188,17 +190,18 @@ class InstallerFragment : BaseFragment(R.layout.fragment_onboarding_installer) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadInstallersFromAssets(): List<Installer> {
|
||||
val inputStream = requireContext().assets.open("installers.json")
|
||||
val bytes = ByteArray(inputStream.available())
|
||||
inputStream.read(bytes)
|
||||
inputStream.close()
|
||||
|
||||
val json = String(bytes, StandardCharsets.UTF_8)
|
||||
return gson.fromJson<MutableList<Installer>?>(
|
||||
json,
|
||||
object : TypeToken<MutableList<Installer?>?>() {}.type
|
||||
private fun getRecommendedInstallers(): List<Installer> {
|
||||
val installers = mutableListOf(
|
||||
SessionInstaller.getInstallerInfo(requireContext()),
|
||||
RootInstaller.getInstallerInfo(requireContext()),
|
||||
AMInstaller.getInstallerInfo(requireContext())
|
||||
)
|
||||
|
||||
if (isOAndAbove()) {
|
||||
installers.add(ShizukuInstaller.getInstallerInfo(requireContext()))
|
||||
}
|
||||
|
||||
return installers
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -401,4 +401,23 @@
|
||||
<string name="failed_apk_export">Failed to export APKs</string>
|
||||
<string name="action_manage">Manage</string>
|
||||
<string name="failed_app_link">Unsupported, please try associating links manually</string>
|
||||
|
||||
<!-- InstallerFragment -->
|
||||
<string name="session_installer_subtitle">Session based installer for bundled/split APKs</string>
|
||||
<string name="session_installer_desc">Recommended, in-built and supports all Android versions</string>
|
||||
|
||||
<string name="root_installer_subtitle">Shell based installer using root permissions</string>
|
||||
<string name="root_installer_desc">Requires root/superuser privileges, supports all Android versions.</string>
|
||||
|
||||
<string name="native_installer_subtitle">Intent based installer, available on all devices</string>
|
||||
<string name="native_installer_desc">Best suited for devices running below Android 4.4</string>
|
||||
|
||||
<string name="services_installer_subtitle">Installer for background installations</string>
|
||||
<string name="services_installer_desc">Requires Aurora Services to be installed as a privileged-system app</string>
|
||||
|
||||
<string name="am_installer_subtitle">Full-featured open source package manager</string>
|
||||
<string name="am_installer_desc">Requires App Manager, need adb/root mode to install when miui optimization is on</string>
|
||||
|
||||
<string name="shizuku_installer_subtitle">Using system APIs directly with adb/root privileges</string>
|
||||
<string name="shizuku_installer_desc">Requires Shizuku or Sui, needs to be setup and permission granted</string>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user