Rework permission flow for updates

* Rename CHECK_ONLY to CHECK_AND_NOTIFY to better reflect it's name

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-11-06 00:41:21 +05:30
parent 93fd6903be
commit 20e7b13851
44 changed files with 77 additions and 331 deletions

View File

@@ -93,7 +93,7 @@ class UpdateHelper @Inject constructor(
*/
fun checkUpdatesNow() {
val inputData = Data.Builder()
.putInt(UPDATE_MODE, UpdateMode.CHECK_ONLY.ordinal)
.putInt(UPDATE_MODE, UpdateMode.CHECK_AND_NOTIFY.ordinal)
.putBoolean(UPDATE_SHOULD_NOTIFY, false)
.build()

View File

@@ -2,6 +2,6 @@ package com.aurora.store.data.model
enum class UpdateMode {
DISABLED,
CHECK_ONLY,
CHECK_AND_NOTIFY,
CHECK_AND_INSTALL
}

View File

@@ -108,7 +108,7 @@ class UpdateWorker @AssistedInject constructor(
}
// Notify and exit if we are only checking for updates or if battery optimizations are enabled
if (updateMode == UpdateMode.CHECK_ONLY || !appContext.isIgnoringBatteryOptimizations()) {
if (updateMode == UpdateMode.CHECK_AND_NOTIFY || !appContext.isIgnoringBatteryOptimizations()) {
Log.i(TAG, "Found updates, notifying!")
notifyUpdates(updates)
return Result.success()

View File

@@ -34,6 +34,7 @@ import com.aurora.extensions.areNotificationsEnabled
import com.aurora.extensions.isIgnoringBatteryOptimizations
import com.aurora.store.R
import com.aurora.store.data.helper.UpdateHelper
import com.aurora.store.data.model.UpdateMode
import com.aurora.store.data.work.CacheWorker
import com.aurora.store.databinding.FragmentOnboardingBinding
import com.aurora.store.util.CertUtil
@@ -189,11 +190,11 @@ class OnboardingFragment : BaseFragment<FragmentOnboardingBinding>() {
private fun setupAutoUpdates() {
val updateMode = when {
requireContext().isIgnoringBatteryOptimizations() -> 2 // Auto-update
requireContext().areNotificationsEnabled() -> 1 // Notify update
else -> 0 // Disable
requireContext().isIgnoringBatteryOptimizations() -> UpdateMode.CHECK_AND_INSTALL
requireContext().areNotificationsEnabled() -> UpdateMode.CHECK_AND_NOTIFY
else -> UpdateMode.DISABLED
}
save(PREFERENCE_UPDATES_AUTO, updateMode)
save(PREFERENCE_UPDATES_AUTO, updateMode.ordinal)
updateHelper.scheduleAutomatedCheck()
}
}

View File

@@ -1,14 +1,23 @@
package com.aurora.store.view.ui.preferences
import android.os.Bundle
import androidx.preference.EditTextPreference
import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import com.aurora.store.data.providers.PermissionProvider
import com.aurora.store.view.custom.preference.M3EditTextPreference
import com.aurora.store.view.custom.preference.M3ListPreference
abstract class BasePreferenceFragment : PreferenceFragmentCompat() {
lateinit var permissionProvider: PermissionProvider
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
permissionProvider = PermissionProvider(this)
}
override fun onDisplayPreferenceDialog(preference: Preference) {
when (preference) {
is EditTextPreference -> {
@@ -30,4 +39,9 @@ abstract class BasePreferenceFragment : PreferenceFragmentCompat() {
else -> super.onDisplayPreferenceDialog(preference)
}
}
override fun onDestroy() {
permissionProvider.unregister()
super.onDestroy()
}
}

View File

@@ -26,13 +26,14 @@ import androidx.navigation.fragment.findNavController
import androidx.preference.ListPreference
import androidx.preference.SeekBarPreference
import androidx.preference.SwitchPreferenceCompat
import com.aurora.extensions.isIgnoringBatteryOptimizations
import com.aurora.store.MobileNavigationDirections
import com.aurora.store.R
import com.aurora.store.data.helper.UpdateHelper
import com.aurora.store.data.model.PermissionType
import com.aurora.store.data.model.UpdateMode
import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_AUTO
import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_CHECK_INTERVAL
import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_EXTENDED
import com.aurora.store.util.save
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@@ -47,22 +48,45 @@ class UpdatesPreference : BasePreferenceFragment() {
findPreference<ListPreference>(PREFERENCE_UPDATES_AUTO)
?.setOnPreferenceChangeListener { _, newValue ->
val value = newValue.toString().toInt()
when (value) {
0 -> updateHelper.cancelAutomatedCheck()
1 -> updateHelper.scheduleAutomatedCheck()
else -> {
if (requireContext().isIgnoringBatteryOptimizations()) {
when (UpdateMode.entries[newValue.toString().toInt()]) {
UpdateMode.DISABLED -> {
updateHelper.cancelAutomatedCheck()
requireContext().save(PREFERENCE_UPDATES_AUTO, 0)
true
}
UpdateMode.CHECK_AND_NOTIFY -> {
if (permissionProvider.isGranted(PermissionType.POST_NOTIFICATIONS)) {
updateHelper.scheduleAutomatedCheck()
return@setOnPreferenceChangeListener true
true
} else {
findNavController().navigate(
MobileNavigationDirections.actionGlobalDozeWarningSheet(true)
)
permissionProvider.request(PermissionType.POST_NOTIFICATIONS) {
if (it) {
requireContext().save(PREFERENCE_UPDATES_AUTO, 1)
updateHelper.scheduleAutomatedCheck()
activity?.recreate()
}
}
false
}
}
UpdateMode.CHECK_AND_INSTALL -> {
if (permissionProvider.isGranted(PermissionType.DOZE_WHITELIST)) {
updateHelper.scheduleAutomatedCheck()
true
} else {
permissionProvider.request(PermissionType.DOZE_WHITELIST) {
if (it) {
requireContext().save(PREFERENCE_UPDATES_AUTO, 2)
updateHelper.scheduleAutomatedCheck()
activity?.recreate()
}
}
false
}
}
}
value != 2
}
findPreference<SeekBarPreference>(PREFERENCE_UPDATES_CHECK_INTERVAL)

View File

@@ -1,45 +0,0 @@
package com.aurora.store.view.ui.sheets
import android.os.Bundle
import android.view.View
import androidx.navigation.fragment.navArgs
import com.aurora.extensions.toast
import com.aurora.store.R
import com.aurora.store.data.helper.UpdateHelper
import com.aurora.store.data.model.PermissionType
import com.aurora.store.databinding.SheetDozeWarningBinding
import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_AUTO
import com.aurora.store.util.save
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@AndroidEntryPoint
class DozeWarningSheet : BaseDialogSheet<SheetDozeWarningBinding>() {
@Inject
lateinit var updateHelper: UpdateHelper
private val args: DozeWarningSheetArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.btnSecondary.setOnClickListener { dismissAllowingStateLoss() }
binding.btnPrimary.setOnClickListener {
permissionProvider.request(PermissionType.DOZE_WHITELIST) {
if (it) {
if (args.enableAutoUpdate) {
requireContext().save(PREFERENCE_UPDATES_AUTO, 2)
updateHelper.scheduleAutomatedCheck()
}
toast(R.string.toast_permission_granted)
activity?.recreate()
} else {
toast(R.string.permissions_denied)
}
dismissAllowingStateLoss()
}
}
}
}