data: installer: Localize installer information

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-04-03 21:23:00 +05:30
parent f0fd8c6f73
commit 5612263e04
10 changed files with 108 additions and 42 deletions

View File

@@ -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) {

View File

@@ -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")

View File

@@ -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")

View File

@@ -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) {

View File

@@ -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")

View File

@@ -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)

View File

@@ -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) {

View File

@@ -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
}
}