InstallerFragment: Relocate to settings instead of onboarding
* This makes onboarding minimal and only required screens are shown * SessionInstaller is the recommended choice, user who needs a different can configure in settings * Instead of showing minimal list, show installer fragment that contains more information * Also show all installers like before Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -66,15 +66,14 @@ class OnboardingFragment : Fragment(R.layout.fragment_onboarding) {
|
||||
override fun createFragment(position: Int): Fragment {
|
||||
when (position) {
|
||||
0 -> return WelcomeFragment()
|
||||
1 -> return InstallerFragment()
|
||||
2 -> return AppLinksFragment()
|
||||
3 -> return PermissionsFragment()
|
||||
1 -> return AppLinksFragment()
|
||||
2 -> return PermissionsFragment()
|
||||
}
|
||||
return Fragment()
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return 4
|
||||
return 3
|
||||
}
|
||||
}
|
||||
|
||||
@@ -123,9 +122,9 @@ class OnboardingFragment : Fragment(R.layout.fragment_onboarding) {
|
||||
|
||||
fun refreshButtonState() {
|
||||
binding.btnBackward.isEnabled = lastPosition != 0
|
||||
binding.btnForward.isEnabled = lastPosition != 3
|
||||
binding.btnForward.isEnabled = lastPosition != 2
|
||||
|
||||
if (lastPosition == 3) {
|
||||
if (lastPosition == 2) {
|
||||
binding.btnForward.text = getString(R.string.action_finish)
|
||||
binding.btnForward.isEnabled = true
|
||||
binding.btnForward.setOnClickListener {
|
||||
|
||||
@@ -22,56 +22,45 @@ package com.aurora.store.view.ui.preferences
|
||||
import android.app.admin.DevicePolicyManager
|
||||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.preference.Preference
|
||||
import com.aurora.extensions.isOAndAbove
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import com.aurora.extensions.runOnUiThread
|
||||
import com.aurora.extensions.showDialog
|
||||
import com.aurora.extensions.toast
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.installer.AppInstaller
|
||||
import com.aurora.store.util.CommonUtil
|
||||
import com.aurora.store.util.Log
|
||||
import com.aurora.store.util.Preferences
|
||||
import com.aurora.store.util.Preferences.INSTALLATION_ABANDON_SESSION
|
||||
import com.aurora.store.util.Preferences.PREFERENCE_INSTALLATION_DEVICE_OWNER
|
||||
import com.aurora.store.util.save
|
||||
import com.aurora.store.view.custom.preference.AuroraListPreference
|
||||
import com.aurora.store.util.Preferences.PREFERENCE_INSTALLER_ID
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import rikka.shizuku.Shizuku
|
||||
import rikka.sui.Sui
|
||||
|
||||
@AndroidEntryPoint
|
||||
class InstallationPreference : BasePreferenceFragment() {
|
||||
|
||||
private var shizukuAlive = Sui.isSui()
|
||||
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
|
||||
)
|
||||
}
|
||||
}
|
||||
class InstallationPreference : PreferenceFragmentCompat() {
|
||||
|
||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||
setPreferencesFromResource(R.xml.preferences_installation, rootKey)
|
||||
|
||||
findPreference<Preference>(PREFERENCE_INSTALLER_ID)?.apply {
|
||||
setOnPreferenceClickListener {
|
||||
findNavController().navigate(R.id.installerFragment)
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
findPreference<Preference>(INSTALLATION_ABANDON_SESSION)?.apply {
|
||||
setOnPreferenceClickListener {
|
||||
CommonUtil.cleanupInstallationSessions(requireContext())
|
||||
runOnUiThread {
|
||||
requireContext().toast(R.string.toast_abandon_sessions)
|
||||
}
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
findPreference<Preference>(PREFERENCE_INSTALLATION_DEVICE_OWNER)?.apply {
|
||||
val packageName = context.packageName
|
||||
val devicePolicyManager =
|
||||
@@ -101,103 +90,5 @@ class InstallationPreference : BasePreferenceFragment() {
|
||||
title = getString(R.string.title_installation)
|
||||
setNavigationOnClickListener { findNavController().navigateUp() }
|
||||
}
|
||||
|
||||
if (isOAndAbove() && AppInstaller.hasShizukuOrSui(requireContext())) {
|
||||
Shizuku.addBinderReceivedListenerSticky(shizukuAliveListener)
|
||||
Shizuku.addBinderDeadListener(shizukuDeadListener)
|
||||
Shizuku.addRequestPermissionResultListener(shizukuResultListener)
|
||||
}
|
||||
|
||||
val abandonPreference: Preference? =
|
||||
findPreference(Preferences.INSTALLATION_ABANDON_SESSION)
|
||||
|
||||
abandonPreference?.let {
|
||||
it.onPreferenceClickListener =
|
||||
Preference.OnPreferenceClickListener {
|
||||
CommonUtil.cleanupInstallationSessions(requireContext())
|
||||
runOnUiThread {
|
||||
requireContext().toast(R.string.toast_abandon_sessions)
|
||||
}
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
val installerPreference: AuroraListPreference? =
|
||||
findPreference(Preferences.PREFERENCE_INSTALLER_ID)
|
||||
|
||||
installerPreference?.let {
|
||||
it.onPreferenceChangeListener =
|
||||
Preference.OnPreferenceChangeListener { _, newValue ->
|
||||
val selectedId = Integer.parseInt(newValue as String)
|
||||
if (selectedId == 2) {
|
||||
if (AppInstaller.hasRootAccess()) {
|
||||
save(Preferences.PREFERENCE_INSTALLER_ID, selectedId)
|
||||
true
|
||||
} else {
|
||||
showDialog(
|
||||
R.string.action_installations,
|
||||
R.string.installer_root_unavailable
|
||||
)
|
||||
false
|
||||
}
|
||||
} else if (selectedId == 3) {
|
||||
if (AppInstaller.hasAuroraService(requireContext())) {
|
||||
save(Preferences.PREFERENCE_INSTALLER_ID, selectedId)
|
||||
true
|
||||
} else {
|
||||
showDialog(
|
||||
R.string.action_installations,
|
||||
R.string.installer_service_unavailable
|
||||
)
|
||||
false
|
||||
}
|
||||
} else if (selectedId == 4) {
|
||||
if (AppInstaller.hasAppManager(requireContext())) {
|
||||
save(Preferences.PREFERENCE_INSTALLER_ID, selectedId)
|
||||
true
|
||||
} else {
|
||||
showDialog(
|
||||
R.string.action_installations,
|
||||
R.string.installer_am_unavailable
|
||||
)
|
||||
false
|
||||
}
|
||||
} else if (selectedId == 5) {
|
||||
if (isOAndAbove() && AppInstaller.hasShizukuOrSui(requireContext())) {
|
||||
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,
|
||||
R.string.installer_shizuku_unavailable
|
||||
)
|
||||
false
|
||||
}
|
||||
} else {
|
||||
save(Preferences.PREFERENCE_INSTALLER_ID, selectedId)
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
if (isOAndAbove() && AppInstaller.hasShizukuOrSui(requireContext())) {
|
||||
Shizuku.removeBinderReceivedListener(shizukuAliveListener)
|
||||
Shizuku.removeBinderDeadListener(shizukuDeadListener)
|
||||
Shizuku.removeRequestPermissionResultListener(shizukuResultListener)
|
||||
}
|
||||
super.onDestroy()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
package com.aurora.store.view.ui.onboarding
|
||||
package com.aurora.store.view.ui.preferences
|
||||
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Bundle
|
||||
@@ -29,15 +29,14 @@ 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.AppInstaller
|
||||
import com.aurora.store.data.installer.NativeInstaller
|
||||
import com.aurora.store.data.installer.RootInstaller
|
||||
import com.aurora.store.data.installer.ServiceInstaller
|
||||
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.databinding.FragmentInstallerBinding
|
||||
import com.aurora.store.util.Log
|
||||
import com.aurora.store.util.Preferences
|
||||
import com.aurora.store.util.Preferences.PREFERENCE_INSTALLER_ID
|
||||
@@ -49,9 +48,9 @@ import rikka.shizuku.Shizuku
|
||||
import rikka.sui.Sui
|
||||
|
||||
@AndroidEntryPoint
|
||||
class InstallerFragment : BaseFragment(R.layout.fragment_onboarding_installer) {
|
||||
class InstallerFragment : BaseFragment(R.layout.fragment_installer) {
|
||||
|
||||
private var _binding: FragmentOnboardingInstallerBinding? = null
|
||||
private var _binding: FragmentInstallerBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
|
||||
private var installerId: Int = 0
|
||||
@@ -82,11 +81,14 @@ class InstallerFragment : BaseFragment(R.layout.fragment_onboarding_installer) {
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
_binding = FragmentOnboardingInstallerBinding.bind(view)
|
||||
_binding = FragmentInstallerBinding.bind(view)
|
||||
|
||||
// Toolbar
|
||||
binding.toolbar.setNavigationOnClickListener { findNavController().navigateUp() }
|
||||
|
||||
installerId = Preferences.getInteger(requireContext(), PREFERENCE_INSTALLER_ID)
|
||||
|
||||
if (isOAndAbove() && hasShizukuOrSui(requireContext())) {
|
||||
if (isOAndAbove() && AppInstaller.hasShizukuOrSui(requireContext())) {
|
||||
Shizuku.addBinderReceivedListenerSticky(shizukuAliveListener)
|
||||
Shizuku.addBinderDeadListener(shizukuDeadListener)
|
||||
Shizuku.addRequestPermissionResultListener(shizukuResultListener)
|
||||
@@ -95,7 +97,7 @@ class InstallerFragment : BaseFragment(R.layout.fragment_onboarding_installer) {
|
||||
// RecyclerView
|
||||
binding.epoxyRecycler.withModels {
|
||||
setFilterDuplicates(true)
|
||||
getRecommendedInstallers().forEach {
|
||||
getInstallers().forEach {
|
||||
add(
|
||||
InstallerViewModel_()
|
||||
.id(it.id)
|
||||
@@ -110,9 +112,7 @@ class InstallerFragment : BaseFragment(R.layout.fragment_onboarding_installer) {
|
||||
}
|
||||
|
||||
if (isMIUI() && !isMiuiOptimizationDisabled()) {
|
||||
findNavController().navigate(
|
||||
OnboardingFragmentDirections.actionOnboardingFragmentToDeviceMiuiSheet()
|
||||
)
|
||||
findNavController().navigate(R.id.deviceMiuiSheet)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ class InstallerFragment : BaseFragment(R.layout.fragment_onboarding_installer) {
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
if (isOAndAbove() && hasShizukuOrSui(requireContext())) {
|
||||
if (isOAndAbove() && AppInstaller.hasShizukuOrSui(requireContext())) {
|
||||
Shizuku.removeBinderReceivedListener(shizukuAliveListener)
|
||||
Shizuku.removeBinderDeadListener(shizukuDeadListener)
|
||||
Shizuku.removeRequestPermissionResultListener(shizukuResultListener)
|
||||
@@ -134,15 +134,13 @@ class InstallerFragment : BaseFragment(R.layout.fragment_onboarding_installer) {
|
||||
when (installerId) {
|
||||
0 -> {
|
||||
if (isMIUI() && !isMiuiOptimizationDisabled()) {
|
||||
findNavController().navigate(
|
||||
OnboardingFragmentDirections.actionOnboardingFragmentToDeviceMiuiSheet()
|
||||
)
|
||||
findNavController().navigate(R.id.deviceMiuiSheet)
|
||||
}
|
||||
this.installerId = installerId
|
||||
save(PREFERENCE_INSTALLER_ID, installerId)
|
||||
}
|
||||
2 -> {
|
||||
if (hasRootAccess()) {
|
||||
if (AppInstaller.hasRootAccess()) {
|
||||
this.installerId = installerId
|
||||
save(PREFERENCE_INSTALLER_ID, installerId)
|
||||
} else {
|
||||
@@ -152,8 +150,19 @@ class InstallerFragment : BaseFragment(R.layout.fragment_onboarding_installer) {
|
||||
)
|
||||
}
|
||||
}
|
||||
3 -> {
|
||||
if (AppInstaller.hasAuroraService(requireContext())) {
|
||||
this.installerId = installerId
|
||||
save(PREFERENCE_INSTALLER_ID, installerId)
|
||||
} else {
|
||||
showDialog(
|
||||
R.string.action_installations,
|
||||
R.string.installer_service_unavailable
|
||||
)
|
||||
}
|
||||
}
|
||||
4 -> {
|
||||
if (hasAppManager(requireContext())) {
|
||||
if (AppInstaller.hasAppManager(requireContext())) {
|
||||
this.installerId = installerId
|
||||
save(PREFERENCE_INSTALLER_ID, installerId)
|
||||
} else {
|
||||
@@ -164,8 +173,8 @@ class InstallerFragment : BaseFragment(R.layout.fragment_onboarding_installer) {
|
||||
}
|
||||
}
|
||||
5 -> {
|
||||
if (isOAndAbove() && hasShizukuOrSui(requireContext())) {
|
||||
if (shizukuAlive && hasShizukuPerm()) {
|
||||
if (isOAndAbove() && AppInstaller.hasShizukuOrSui(requireContext())) {
|
||||
if (shizukuAlive && AppInstaller.hasShizukuPerm()) {
|
||||
this.installerId = installerId
|
||||
save(PREFERENCE_INSTALLER_ID, installerId)
|
||||
} else if (shizukuAlive && !Shizuku.shouldShowRequestPermissionRationale()) {
|
||||
@@ -190,10 +199,12 @@ class InstallerFragment : BaseFragment(R.layout.fragment_onboarding_installer) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun getRecommendedInstallers(): List<Installer> {
|
||||
private fun getInstallers(): List<Installer> {
|
||||
val installers = mutableListOf(
|
||||
SessionInstaller.getInstallerInfo(requireContext()),
|
||||
NativeInstaller.getInstallerInfo(requireContext()),
|
||||
RootInstaller.getInstallerInfo(requireContext()),
|
||||
ServiceInstaller.getInstallerInfo(requireContext()),
|
||||
AMInstaller.getInstallerInfo(requireContext())
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user