Skip to content

Commit

Permalink
feat(PermissionsOnboarding): Fix sync discovery and permissions being…
Browse files Browse the repository at this point in the history
… displayed over onboarding when recreating activity
  • Loading branch information
FabianDevel authored and KevinBoulongne committed Jan 24, 2024
1 parent 578d7e3 commit 1ff1516
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ class LocalSettings private constructor(context: Context) : SharedValues {
var showSyncDiscoveryBottomSheet by sharedValue("showSyncDiscoveryBottomSheetKey", true)
var appReviewLaunches by sharedValue("appReviewLaunchesKey", DEFAULT_APP_REVIEW_LAUNCHES)
var showAppReviewDialog by sharedValue("showAppReviewDialogKey", true)
var showPermissionsOnboarding by sharedValue("showPermissionsOnboardingKey", true)

fun removeSettings() = sharedPreferences.transaction { clear() }

Expand Down
16 changes: 11 additions & 5 deletions app/src/main/java/com/infomaniak/mail/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ import com.infomaniak.mail.ui.alertDialogs.DescriptionAlertDialog
import com.infomaniak.mail.ui.alertDialogs.TitleAlertDialog
import com.infomaniak.mail.ui.main.folder.TwoPaneFragment
import com.infomaniak.mail.ui.main.menu.MenuDrawerFragment
import com.infomaniak.mail.ui.main.onboarding.PermissionsOnboardingPagerFragment
import com.infomaniak.mail.ui.newMessage.NewMessageActivity
import com.infomaniak.mail.ui.sync.SyncAutoConfigActivity
import com.infomaniak.mail.utils.*
Expand Down Expand Up @@ -364,8 +365,11 @@ class MainActivity : BaseActivity() {
}

fun popBack() {
val fragment = currentFragment
if (fragment is TwoPaneFragment) fragment.handleOnBackPressed() else navController.popBackStack()
when (val fragment = currentFragment) {
is TwoPaneFragment -> fragment.handleOnBackPressed()
is PermissionsOnboardingPagerFragment -> fragment.leaveOnboarding()
else -> navController.popBackStack()
}
}

onBackPressedDispatcher.addCallback(this@MainActivity) {
Expand Down Expand Up @@ -481,8 +485,10 @@ class MainActivity : BaseActivity() {

private fun managePermissionsRequesting() {
if (!hasPermissions(PermissionUtils.getMainPermissions(mustRequireNotification = true))) {
if (localSettings.appLaunches == 0) {
navController.navigate(R.id.permissionsOnboardingPagerFragment)
if (localSettings.showPermissionsOnboarding) {
if (currentFragment !is PermissionsOnboardingPagerFragment) {
navController.navigate(R.id.permissionsOnboardingPagerFragment)
}
} else {
permissionUtils.requestMainPermissionsIfNeeded()
}
Expand Down Expand Up @@ -514,7 +520,7 @@ class MainActivity : BaseActivity() {
}

private fun showSyncDiscovery() = with(localSettings) {
if (showSyncDiscoveryBottomSheet && appLaunches > 1 && !isUserAlreadySynchronized()) {
if (!showPermissionsOnboarding && showSyncDiscoveryBottomSheet && appLaunches > 1 && !isUserAlreadySynchronized()) {
showSyncDiscoveryBottomSheet = false
navController.navigate(R.id.syncDiscoveryBottomSheetDialog)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ import javax.inject.Inject
class PermissionsOnboardingPagerFragment : Fragment() {

private var binding: FragmentPermissionsOnboardingPagerBinding by safeBinding()
private val permissionsOnboardingViewModel: PermissionsOnboardingViewModel by activityViewModels()
private val mainViewModel: MainViewModel by activityViewModels()
private var currentPosition = 0

@Inject
lateinit var localSettings: LocalSettings
Expand All @@ -64,17 +64,21 @@ class PermissionsOnboardingPagerFragment : Fragment() {
permissionsViewpager.apply {
adapter = PermissionsPagerAdapter(childFragmentManager, viewLifecycleOwner.lifecycle)
isUserInputEnabled = false
setCurrentItem(permissionsOnboardingViewModel.currentPermissionPosition, false)
savedInstanceState?.getInt(VIEW_PAGER_POSITION_KEY)?.let { setCurrentItem(it, false) }
removeOverScrollForApiBelow31()
}

continueButton.setOnClickListener {
permissionsOnboardingViewModel.currentPermissionPosition = permissionsViewpager.currentItem
when (permissionsViewpager.currentItem) {
0 -> {
permissionUtils.requestReadContactsPermission { hasPermission ->
if (hasPermission) mainViewModel.updateUserInfo()
if (permissionsViewpager.isLastPage()) leaveOnboarding() else permissionsViewpager.currentItem += 1
if (permissionsViewpager.isLastPage()) {
leaveOnboarding()
} else {
currentPosition += 1
permissionsViewpager.currentItem += 1
}
}
}
1 -> permissionUtils.requestNotificationsPermissionIfNeeded { leaveOnboarding() }
Expand All @@ -84,9 +88,19 @@ class PermissionsOnboardingPagerFragment : Fragment() {
requireActivity().window.statusBarColor = localSettings.accentColor.getOnboardingSecondaryBackground(context)
}

override fun onSaveInstanceState(outState: Bundle) {
outState.putInt(VIEW_PAGER_POSITION_KEY, currentPosition)
super.onSaveInstanceState(outState)
}

private fun ViewPager2.isLastPage() = adapter?.let { currentItem == it.itemCount - 1 } ?: true

private fun leaveOnboarding() {
fun leaveOnboarding() {
localSettings.showPermissionsOnboarding = false
safeNavigate(R.id.threadListFragment)
}

companion object {
private const val VIEW_PAGER_POSITION_KEY = "viewPagerPositionKey"
}
}

This file was deleted.

0 comments on commit 1ff1516

Please sign in to comment.