fixup! Implement Shizuku installer support
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -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(
|
||||||
@@ -204,4 +220,4 @@ class InstallerFragment : BaseFragment() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user