fixup! Implement Shizuku installer support

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-06-29 17:47:20 +05:30
parent 1c642110c8
commit 8a58a26792
2 changed files with 64 additions and 7 deletions

View File

@@ -36,6 +36,7 @@ import com.aurora.store.data.installer.AppInstaller.Companion.hasShizuku
import com.aurora.store.data.installer.AppInstaller.Companion.hasShizukuPerm import com.aurora.store.data.installer.AppInstaller.Companion.hasShizukuPerm
import com.aurora.store.data.model.Installer import com.aurora.store.data.model.Installer
import com.aurora.store.databinding.FragmentOnboardingInstallerBinding import com.aurora.store.databinding.FragmentOnboardingInstallerBinding
import com.aurora.store.util.Log
import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_INSTALLER_ID import com.aurora.store.util.Preferences.PREFERENCE_INSTALLER_ID
import com.aurora.store.util.save import com.aurora.store.util.save
@@ -53,11 +54,22 @@ class InstallerFragment : BaseFragment() {
var installerId: Int = 0 var installerId: Int = 0
private var shizukuAlive = false
private val shizukuAliveListener = Shizuku.OnBinderReceivedListener {
Log.d("ShizukuInstaller Alive!")
shizukuAlive = true
}
private val shizukuDeadListener = Shizuku.OnBinderDeadListener {
Log.d("ShizukuInstaller Dead!")
shizukuAlive = false
}
private val shizukuResultListener = private val shizukuResultListener =
Shizuku.OnRequestPermissionResultListener { _: Int, result: Int -> Shizuku.OnRequestPermissionResultListener { _: Int, result: Int ->
if (result == PackageManager.PERMISSION_GRANTED) { if (result == PackageManager.PERMISSION_GRANTED) {
this.installerId = 5 this.installerId = 5
save(PREFERENCE_INSTALLER_ID, 5) save(PREFERENCE_INSTALLER_ID, 5)
B.epoxyRecycler.requestModelBuild()
} else { } else {
showDialog( showDialog(
R.string.action_installations, R.string.action_installations,
@@ -71,7 +83,11 @@ class InstallerFragment : BaseFragment() {
container: ViewGroup?, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View { ): View {
Shizuku.addBinderReceivedListenerSticky(shizukuAliveListener)
Shizuku.addBinderDeadListener(shizukuDeadListener)
Shizuku.addRequestPermissionResultListener(shizukuResultListener) Shizuku.addRequestPermissionResultListener(shizukuResultListener)
B = FragmentOnboardingInstallerBinding.bind( B = FragmentOnboardingInstallerBinding.bind(
inflater.inflate( inflater.inflate(
R.layout.fragment_onboarding_installer, R.layout.fragment_onboarding_installer,
@@ -166,10 +182,10 @@ class InstallerFragment : BaseFragment() {
} }
5 -> { 5 -> {
if (hasShizuku(requireContext()) && isOAndAbove()) { if (hasShizuku(requireContext()) && isOAndAbove()) {
if (hasShizukuPerm()) { if (shizukuAlive && hasShizukuPerm()) {
this.installerId = installerId this.installerId = installerId
save(PREFERENCE_INSTALLER_ID, installerId) save(PREFERENCE_INSTALLER_ID, installerId)
} else if (Shizuku.shouldShowRequestPermissionRationale()) { } else if (shizukuAlive && !Shizuku.shouldShowRequestPermissionRationale()) {
Shizuku.requestPermission(9000) Shizuku.requestPermission(9000)
} else { } else {
showDialog( showDialog(

View File

@@ -24,15 +24,18 @@ import android.os.Bundle
import android.view.View import android.view.View
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import com.aurora.extensions.isOAndAbove
import com.aurora.extensions.runOnUiThread import com.aurora.extensions.runOnUiThread
import com.aurora.extensions.showDialog import com.aurora.extensions.showDialog
import com.aurora.extensions.toast import com.aurora.extensions.toast
import com.aurora.store.BuildConfig import com.aurora.store.BuildConfig
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.data.installer.AMInstaller import com.aurora.store.data.installer.AMInstaller
import com.aurora.store.data.installer.AppInstaller
import com.aurora.store.data.installer.ServiceInstaller import com.aurora.store.data.installer.ServiceInstaller
import com.aurora.store.data.installer.ShizukuInstaller import com.aurora.store.data.installer.ShizukuInstaller
import com.aurora.store.util.CommonUtil import com.aurora.store.util.CommonUtil
import com.aurora.store.util.Log
import com.aurora.store.util.PackageUtil import com.aurora.store.util.PackageUtil
import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences
import com.aurora.store.util.save import com.aurora.store.util.save
@@ -42,6 +45,29 @@ import rikka.shizuku.Shizuku
class InstallationPreference : PreferenceFragmentCompat() { class InstallationPreference : PreferenceFragmentCompat() {
private var shizukuAlive = false
private val shizukuAliveListener = Shizuku.OnBinderReceivedListener {
Log.d("ShizukuInstaller Alive!")
shizukuAlive = true
}
private val shizukuDeadListener = Shizuku.OnBinderDeadListener {
Log.d("ShizukuInstaller Dead!")
shizukuAlive = false
}
private val shizukuResultListener =
Shizuku.OnRequestPermissionResultListener { _: Int, result: Int ->
if (result == PackageManager.PERMISSION_GRANTED) {
save(Preferences.PREFERENCE_INSTALLER_ID, 5)
activity?.recreate()
} else {
showDialog(
R.string.action_installations,
R.string.installer_shizuku_unavailable
)
}
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_installation, rootKey) setPreferencesFromResource(R.xml.preferences_installation, rootKey)
} }
@@ -49,6 +75,10 @@ class InstallationPreference : PreferenceFragmentCompat() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
Shizuku.addBinderReceivedListenerSticky(shizukuAliveListener)
Shizuku.addBinderDeadListener(shizukuDeadListener)
Shizuku.addRequestPermissionResultListener(shizukuResultListener)
val abandonPreference: Preference? = val abandonPreference: Preference? =
findPreference(Preferences.INSTALLATION_ABANDON_SESSION) findPreference(Preferences.INSTALLATION_ABANDON_SESSION)
@@ -104,9 +134,20 @@ class InstallationPreference : PreferenceFragmentCompat() {
false false
} }
} else if (selectedId == 5) { } else if (selectedId == 5) {
if (checkShizukuAvailability()) { if (AppInstaller.hasShizuku(requireContext()) && isOAndAbove()) {
save(Preferences.PREFERENCE_INSTALLER_ID, selectedId) if (shizukuAlive && AppInstaller.hasShizukuPerm()) {
true save(Preferences.PREFERENCE_INSTALLER_ID, selectedId)
true
} else if (shizukuAlive && !Shizuku.shouldShowRequestPermissionRationale()) {
Shizuku.requestPermission(9000)
false
} else {
showDialog(
R.string.action_installations,
R.string.installer_shizuku_unavailable
)
false
}
} else { } else {
showDialog( showDialog(
R.string.action_installations, R.string.action_installations,
@@ -154,6 +195,6 @@ class InstallationPreference : PreferenceFragmentCompat() {
private fun checkShizukuAvailability(): Boolean { private fun checkShizukuAvailability(): Boolean {
return PackageUtil.isInstalled(requireContext(), ShizukuInstaller.SHIZUKU_PACKAGE_NAME) && return PackageUtil.isInstalled(requireContext(), ShizukuInstaller.SHIZUKU_PACKAGE_NAME) &&
Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED shizukuAlive && Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED
} }
} }