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:
@@ -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()
|
||||
|
||||
|
||||
@@ -2,6 +2,6 @@ package com.aurora.store.data.model
|
||||
|
||||
enum class UpdateMode {
|
||||
DISABLED,
|
||||
CHECK_ONLY,
|
||||
CHECK_AND_NOTIFY,
|
||||
CHECK_AND_INSTALL
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user