Skip to content

Commit

Permalink
feat: Handle app dialogs with team applock (WPB -2388) (#2390)
Browse files Browse the repository at this point in the history
  • Loading branch information
ohassine committed Nov 9, 2023
1 parent 98659c9 commit 23af8cd
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 80 deletions.
Expand Up @@ -55,6 +55,7 @@ class GlobalDataStore @Inject constructor(@ApplicationContext private val contex
private val IS_LOGGING_ENABLED = booleanPreferencesKey("is_logging_enabled")
private val IS_ENCRYPTED_PROTEUS_STORAGE_ENABLED =
booleanPreferencesKey("is_encrypted_proteus_storage_enabled")
private val IS_APP_LOCKED_BY_USER = booleanPreferencesKey("is_app_locked_by_user")
private val APP_LOCK_PASSCODE = stringPreferencesKey("app_lock_passcode")
private val TEAM_APP_LOCK_PASSCODE = stringPreferencesKey("team_app_lock_passcode")
val APP_THEME_OPTION = stringPreferencesKey("app_theme_option")
Expand Down
29 changes: 14 additions & 15 deletions app/src/main/kotlin/com/wire/android/ui/AppLockActivity.kt
Expand Up @@ -49,22 +49,22 @@ class AppLockActivity : AppCompatActivity() {
WireTheme {
val navigator = rememberNavigator(this@AppLockActivity::finish)

val startDestination =
if (intent.getBooleanExtra(SET_TEAM_APP_LOCK, false)) {
appLogger.i("appLock: requesting set team app lock")
SetLockCodeScreenDestination
} else {
val canAuthenticateWithBiometrics = BiometricManager
.from(this)
.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG)
if (canAuthenticateWithBiometrics == BiometricManager.BIOMETRIC_SUCCESS) {
appLogger.i("appLock: requesting app Unlock with biometrics")
AppUnlockWithBiometricsScreenDestination
val startDestination =
if (intent.getBooleanExtra(SET_TEAM_APP_LOCK, false)) {
appLogger.i("appLock: requesting set team app lock")
SetLockCodeScreenDestination
} else {
appLogger.i("appLock: requesting app Unlock with passcode")
EnterLockCodeScreenDestination
val canAuthenticateWithBiometrics = BiometricManager
.from(this)
.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG)
if (canAuthenticateWithBiometrics == BiometricManager.BIOMETRIC_SUCCESS) {
appLogger.i("appLock: requesting app Unlock with biometrics")
AppUnlockWithBiometricsScreenDestination
} else {
appLogger.i("appLock: requesting app Unlock with passcode")
EnterLockCodeScreenDestination
}
}
}

NavigationGraph(
navigator = navigator,
Expand All @@ -74,7 +74,6 @@ class AppLockActivity : AppCompatActivity() {
}
}
}

companion object {
const val SET_TEAM_APP_LOCK = "set_team_app_lock"
}
Expand Down
139 changes: 74 additions & 65 deletions app/src/main/kotlin/com/wire/android/ui/WireActivity.kt
Expand Up @@ -249,20 +249,6 @@ class WireActivity : AppCompatActivity() {
private fun handleDialogs(navigate: (NavigationCommand) -> Unit) {
featureFlagNotificationViewModel.loadInitialSync()
with(featureFlagNotificationViewModel.featureFlagState) {
if (showFileSharingDialog) {
FileRestrictionDialog(
isFileSharingEnabled = isFileSharingEnabledState,
hideDialogStatus = featureFlagNotificationViewModel::dismissFileSharingDialog
)
}

if (shouldShowGuestRoomLinkDialog) {
GuestRoomLinkFeatureFlagDialog(
isGuestRoomLinkEnabled = isGuestRoomLinkEnabled,
onDismiss = featureFlagNotificationViewModel::dismissGuestRoomLinkDialog
)
}

if (shouldShowTeamAppLockDialog) {
TeamAppLockFeatureFlagDialog(
isTeamAppLockEnabled = isTeamAppLockEnabled,
Expand Down Expand Up @@ -290,28 +276,83 @@ class WireActivity : AppCompatActivity() {
}
}
)
}
} else {
if (showFileSharingDialog) {
FileRestrictionDialog(
isFileSharingEnabled = isFileSharingEnabledState,
hideDialogStatus = featureFlagNotificationViewModel::dismissFileSharingDialog
)
}

if (shouldShowSelfDeletingMessagesDialog) {
SelfDeletingMessagesDialog(
areSelfDeletingMessagesEnabled = areSelfDeletedMessagesEnabled,
enforcedTimeout = enforcedTimeoutDuration,
hideDialogStatus = featureFlagNotificationViewModel::dismissSelfDeletingMessagesDialog
)
}
if (shouldShowGuestRoomLinkDialog) {
GuestRoomLinkFeatureFlagDialog(
isGuestRoomLinkEnabled = isGuestRoomLinkEnabled,
onDismiss = featureFlagNotificationViewModel::dismissGuestRoomLinkDialog
)
}

e2EIRequired?.let {
E2EIRequiredDialog(
result = e2EIRequired,
getCertificate = featureFlagNotificationViewModel::getE2EICertificate,
snoozeDialog = featureFlagNotificationViewModel::snoozeE2EIdRequiredDialog
)
}
if (shouldShowSelfDeletingMessagesDialog) {
SelfDeletingMessagesDialog(
areSelfDeletingMessagesEnabled = areSelfDeletedMessagesEnabled,
enforcedTimeout = enforcedTimeoutDuration,
hideDialogStatus = featureFlagNotificationViewModel::dismissSelfDeletingMessagesDialog
)
}

e2EIRequired?.let {
E2EIRequiredDialog(
result = e2EIRequired,
getCertificate = featureFlagNotificationViewModel::getE2EICertificate,
snoozeDialog = featureFlagNotificationViewModel::snoozeE2EIdRequiredDialog
)
}

e2EISnoozeInfo?.let {
E2EISnoozeDialog(
timeLeft = e2EISnoozeInfo.timeLeft,
dismissDialog = featureFlagNotificationViewModel::dismissSnoozeE2EIdRequiredDialog
)
}

e2EISnoozeInfo?.let {
E2EISnoozeDialog(
timeLeft = e2EISnoozeInfo.timeLeft,
dismissDialog = featureFlagNotificationViewModel::dismissSnoozeE2EIdRequiredDialog
UpdateAppDialog(viewModel.globalAppState.updateAppDialog, ::updateTheApp)
JoinConversationDialog(
viewModel.globalAppState.conversationJoinedDialog,
navigate,
viewModel::onJoinConversationFlowCompleted
)
CustomBackendDialog(
viewModel.globalAppState,
viewModel::dismissCustomBackendDialog
) {
viewModel.customBackendDialogProceedButtonClicked {
navigate(
NavigationCommand(
WelcomeScreenDestination
)
)
}
}
MaxAccountDialog(
shouldShow = viewModel.globalAppState.maxAccountDialog,
onConfirm = {
viewModel.dismissMaxAccountDialog()
navigate(NavigationCommand(SelfUserProfileScreenDestination))
},
onDismiss = viewModel::dismissMaxAccountDialog
)
AccountLoggedOutDialog(
viewModel.globalAppState.blockUserUI
) { viewModel.tryToSwitchAccount(NavigationSwitchAccountActions(navigate)) }
NewClientDialog(
viewModel.globalAppState.newClientDialog,
{ navigate(NavigationCommand(SelfDevicesScreenDestination)) },
{
viewModel.switchAccount(
userId = it,
actions = NavigationSwitchAccountActions(navigate),
onComplete = { navigate(NavigationCommand(SelfDevicesScreenDestination)) })
},
viewModel::dismissNewClientsDialog
)
}
if (showCallEndedBecauseOfConversationDegraded) {
Expand All @@ -320,38 +361,6 @@ class WireActivity : AppCompatActivity() {
)
}
}
UpdateAppDialog(viewModel.globalAppState.updateAppDialog, ::updateTheApp)
JoinConversationDialog(
viewModel.globalAppState.conversationJoinedDialog,
navigate,
viewModel::onJoinConversationFlowCompleted
)
CustomBackendDialog(
viewModel.globalAppState,
viewModel::dismissCustomBackendDialog
) { viewModel.customBackendDialogProceedButtonClicked { navigate(NavigationCommand(WelcomeScreenDestination)) } }
MaxAccountDialog(
shouldShow = viewModel.globalAppState.maxAccountDialog,
onConfirm = {
viewModel.dismissMaxAccountDialog()
navigate(NavigationCommand(SelfUserProfileScreenDestination))
},
onDismiss = viewModel::dismissMaxAccountDialog
)
AccountLoggedOutDialog(
viewModel.globalAppState.blockUserUI
) { viewModel.tryToSwitchAccount(NavigationSwitchAccountActions(navigate)) }
NewClientDialog(
viewModel.globalAppState.newClientDialog,
{ navigate(NavigationCommand(SelfDevicesScreenDestination)) },
{
viewModel.switchAccount(
userId = it,
actions = NavigationSwitchAccountActions(navigate),
onComplete = { navigate(NavigationCommand(SelfDevicesScreenDestination)) })
},
viewModel::dismissNewClientsDialog
)
}

private fun updateTheApp() {
Expand Down

0 comments on commit 23af8cd

Please sign in to comment.