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.model.Installer
import com.aurora.store.databinding.FragmentOnboardingInstallerBinding
import com.aurora.store.util.Log
import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_INSTALLER_ID
import com.aurora.store.util.save
@@ -53,11 +54,22 @@ class InstallerFragment : BaseFragment() {
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 =
Shizuku.OnRequestPermissionResultListener { _: Int, result: Int ->
if (result == PackageManager.PERMISSION_GRANTED) {
this.installerId = 5
save(PREFERENCE_INSTALLER_ID, 5)
B.epoxyRecycler.requestModelBuild()
} else {
showDialog(
R.string.action_installations,
@@ -71,7 +83,11 @@ class InstallerFragment : BaseFragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
Shizuku.addBinderReceivedListenerSticky(shizukuAliveListener)
Shizuku.addBinderDeadListener(shizukuDeadListener)
Shizuku.addRequestPermissionResultListener(shizukuResultListener)
B = FragmentOnboardingInstallerBinding.bind(
inflater.inflate(
R.layout.fragment_onboarding_installer,
@@ -166,10 +182,10 @@ class InstallerFragment : BaseFragment() {
}
5 -> {
if (hasShizuku(requireContext()) && isOAndAbove()) {
if (hasShizukuPerm()) {
if (shizukuAlive && hasShizukuPerm()) {
this.installerId = installerId
save(PREFERENCE_INSTALLER_ID, installerId)
} else if (Shizuku.shouldShowRequestPermissionRationale()) {
} else if (shizukuAlive && !Shizuku.shouldShowRequestPermissionRationale()) {
Shizuku.requestPermission(9000)
} else {
showDialog(
@@ -204,4 +220,4 @@ class InstallerFragment : BaseFragment() {
)
}
}
}

View File

@@ -24,15 +24,18 @@ import android.os.Bundle
import android.view.View
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import com.aurora.extensions.isOAndAbove
import com.aurora.extensions.runOnUiThread
import com.aurora.extensions.showDialog
import com.aurora.extensions.toast
import com.aurora.store.BuildConfig
import com.aurora.store.R
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.ShizukuInstaller
import com.aurora.store.util.CommonUtil
import com.aurora.store.util.Log
import com.aurora.store.util.PackageUtil
import com.aurora.store.util.Preferences
import com.aurora.store.util.save
@@ -42,6 +45,29 @@ import rikka.shizuku.Shizuku
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?) {
setPreferencesFromResource(R.xml.preferences_installation, rootKey)
}
@@ -49,6 +75,10 @@ class InstallationPreference : PreferenceFragmentCompat() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Shizuku.addBinderReceivedListenerSticky(shizukuAliveListener)
Shizuku.addBinderDeadListener(shizukuDeadListener)
Shizuku.addRequestPermissionResultListener(shizukuResultListener)
val abandonPreference: Preference? =
findPreference(Preferences.INSTALLATION_ABANDON_SESSION)
@@ -104,9 +134,20 @@ class InstallationPreference : PreferenceFragmentCompat() {
false
}
} else if (selectedId == 5) {
if (checkShizukuAvailability()) {
save(Preferences.PREFERENCE_INSTALLER_ID, selectedId)
true
if (AppInstaller.hasShizuku(requireContext()) && isOAndAbove()) {
if (shizukuAlive && AppInstaller.hasShizukuPerm()) {
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 {
showDialog(
R.string.action_installations,
@@ -154,6 +195,6 @@ class InstallationPreference : PreferenceFragmentCompat() {
private fun checkShizukuAvailability(): Boolean {
return PackageUtil.isInstalled(requireContext(), ShizukuInstaller.SHIZUKU_PACKAGE_NAME) &&
Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED
shizukuAlive && Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED
}
}