Skip to content

Commit

Permalink
Merge pull request #1378 from Infomaniak/ft/switch-account-with-doubl…
Browse files Browse the repository at this point in the history
…e-tap-or-long-press

Can now change accounts by double-tap and hold on the profile icon
  • Loading branch information
FabianDevel authored Aug 29, 2024
2 parents b86ed11 + f57f5f0 commit bc48d98
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 0 deletions.
24 changes: 24 additions & 0 deletions app/src/main/java/com/infomaniak/drive/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ import android.os.Bundle
import android.os.FileObserver
import android.provider.DocumentsContract
import android.provider.MediaStore
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View
import androidx.activity.result.IntentSenderRequest
import androidx.activity.result.contract.ActivityResultContracts
Expand Down Expand Up @@ -60,6 +62,7 @@ import com.google.android.material.snackbar.Snackbar
import com.infomaniak.drive.BuildConfig
import com.infomaniak.drive.GeniusScanUtils.scanResultProcessing
import com.infomaniak.drive.GeniusScanUtils.startScanFlow
import com.infomaniak.drive.MatomoDrive.trackAccountEvent
import com.infomaniak.drive.MatomoDrive.trackEvent
import com.infomaniak.drive.MatomoDrive.trackInAppReview
import com.infomaniak.drive.MatomoDrive.trackInAppUpdate
Expand Down Expand Up @@ -88,6 +91,7 @@ import com.infomaniak.lib.core.utils.SnackbarUtils.showIndefiniteSnackbar
import com.infomaniak.lib.core.utils.SnackbarUtils.showSnackbar
import com.infomaniak.lib.core.utils.UtilsUi.generateInitialsAvatarDrawable
import com.infomaniak.lib.core.utils.UtilsUi.getBackgroundColorBasedOnId
import com.infomaniak.lib.core.utils.context
import com.infomaniak.lib.core.utils.whenResultIsOk
import com.infomaniak.lib.stores.StoreUtils.checkUpdateIsRequired
import com.infomaniak.lib.stores.StoreUtils.launchInAppReview
Expand Down Expand Up @@ -202,7 +206,27 @@ class MainActivity : BaseActivity() {
}
}

// We use this SuppressLint because we don't want to execute performClick on profileItem when double tapping.
@SuppressLint("ClickableViewAccessibility")
private fun setupBottomNavigation() = with(binding) {

val gestureDetector = GestureDetector(this@MainActivity, object : GestureDetector.SimpleOnGestureListener() {
override fun onDoubleTap(e: MotionEvent): Boolean {
context.trackAccountEvent("switchDoubleTap")
mainViewModel.switchToNextUser { navController.navigate(R.id.homeFragment) }
return true
}

override fun onLongPress(e: MotionEvent) {
context.trackAccountEvent("longPressDirectAccess")
navController.navigate(R.id.switchUserActivity)
}
})

bottomNavigation.findViewById<View>(R.id.menuFragment).setOnTouchListener { _, event ->
gestureDetector.onTouchEvent(event)
}

bottomNavigation.apply {
setupWithNavControllerCustom(navController)
itemIconTintList = ContextCompat.getColorStateList(this@MainActivity, R.color.item_icon_tint_bottom)
Expand Down
8 changes: 8 additions & 0 deletions app/src/main/java/com/infomaniak/drive/ui/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -632,6 +632,14 @@ class MainViewModel(
}
}

fun switchToNextUser(onUserSwitched: () -> Unit) = viewModelScope.launch(Dispatchers.IO) {
if (AccountUtils.getAllUsersSync().size < 2) return@launch

AccountUtils.switchToNextUser()

withContext(Dispatchers.Main) { onUserSwitched() }
}

override fun onCleared() {
realm.close()
super.onCleared()
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/java/com/infomaniak/drive/utils/AccountUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,13 @@ object AccountUtils : CredentialManager() {
return currentDrive
}

fun switchToNextUser() {
val users = getAllUsersSync()
currentUser = users[(users.indexOf(currentUser) + 1) % users.size]
currentDriveId = -1
reloadApp?.invoke(bundleOf())
}

private suspend fun resetApp(context: Context) {
if (getAllUsersCount() == 0) {
AppSettings.removeAppSettings()
Expand Down

0 comments on commit bc48d98

Please sign in to comment.