diff --git a/app/src/main/kotlin/at/bitfire/davdroid/push/PushNotificationManager.kt b/app/src/main/kotlin/at/bitfire/davdroid/push/PushNotificationManager.kt
index d8e689fece43d08f96b52f98e00565823ab77af9..0719bebc13b03caa98924b5c015260265afdac36 100644
--- a/app/src/main/kotlin/at/bitfire/davdroid/push/PushNotificationManager.kt
+++ b/app/src/main/kotlin/at/bitfire/davdroid/push/PushNotificationManager.kt
@@ -23,13 +23,6 @@ class PushNotificationManager @Inject constructor(
private val notificationRegistry: NotificationRegistry
) {
- /**
- * Generates the notification ID for a push notification.
- */
- private fun notificationId(account: Account, dataType: SyncDataType): Int {
- return account.name.hashCode() + account.type.hashCode() + dataType.hashCode()
- }
-
/**
* Sends a notification to inform the user that a push notification has been received, the
* sync has been scheduled, but it still has not run.
@@ -67,4 +60,12 @@ class PushNotificationManager @Inject constructor(
.cancel(notificationId(account, dataType))
}
+ companion object {
+ /**
+ * Generates the notification ID for a push notification.
+ */
+ fun notificationId(account: Account, dataType: SyncDataType): Int {
+ return account.name.hashCode() + account.type.hashCode() + dataType.hashCode()
+ }
+ }
}
diff --git a/app/src/main/kotlin/at/bitfire/davdroid/ui/account/AccountSettingsScreen.kt b/app/src/main/kotlin/at/bitfire/davdroid/ui/account/AccountSettingsScreen.kt
index 70f7f9278ac21f75c2ba5e317b3453ceec7e4a59..91755aa3ce30bbd75133334999a3ab13ae9a2d6e 100644
--- a/app/src/main/kotlin/at/bitfire/davdroid/ui/account/AccountSettingsScreen.kt
+++ b/app/src/main/kotlin/at/bitfire/davdroid/ui/account/AccountSettingsScreen.kt
@@ -6,8 +6,8 @@ package at.bitfire.davdroid.ui.account
import android.accounts.Account
import android.app.Activity
+import android.content.Intent
import android.security.KeyChain
-import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.annotation.StringRes
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -69,6 +69,7 @@ import at.bitfire.davdroid.ui.composable.SettingsHeader
import at.bitfire.davdroid.ui.composable.SwitchSetting
import at.bitfire.davdroid.util.PermissionUtils
import at.bitfire.vcard4android.GroupMethod
+import foundation.e.accountmanager.ui.setup.ReOAuthActivity
import kotlinx.coroutines.launch
@Composable
@@ -77,20 +78,13 @@ fun AccountSettingsScreen(
account: Account,
onNavWifiPermissionsScreen: () -> Unit
) {
+ val context = LocalContext.current
val model = hiltViewModel { factory: AccountSettingsModel.Factory ->
factory.create(account)
}
val uiState by model.uiState.collectAsState()
val canAccessWifiSsid by PermissionUtils.rememberCanAccessWifiSsid()
- // contract to open the browser for re-authentication
- val authRequestContract = rememberLauncherForActivityResult(model.authorizationContract()) { authResponse ->
- if (authResponse != null)
- model.authenticate(authResponse)
- else
- model.authCodeFailed()
- }
-
AppTheme {
AccountSettingsScreen(
accountName = account.name,
@@ -123,9 +117,9 @@ fun AccountSettingsScreen(
credentials = uiState.credentials,
onUpdateCredentials = model::updateCredentials,
onAuthenticateOAuth = {
- val request = model.newAuthorizationRequest()
- if (request != null)
- authRequestContract.launch(request)
+ val intent = Intent(context, ReOAuthActivity::class.java)
+ intent.putExtra(AccountSettingsActivity.EXTRA_ACCOUNT, account)
+ context.startActivity(intent)
},
isCredentialsUpdateAllowed = uiState.allowCredentialsChange,
diff --git a/app/src/main/kotlin/foundation/e/accountmanager/ui/setup/ReOAuthActivity.kt b/app/src/main/kotlin/foundation/e/accountmanager/ui/setup/ReOAuthActivity.kt
index 8d2070fb80606423db2d9654ba2f83b96a774a1b..2dc734ddb6cda429bd7f34c960bc1308159e7a8b 100644
--- a/app/src/main/kotlin/foundation/e/accountmanager/ui/setup/ReOAuthActivity.kt
+++ b/app/src/main/kotlin/foundation/e/accountmanager/ui/setup/ReOAuthActivity.kt
@@ -19,13 +19,18 @@ package foundation.e.accountmanager.ui.setup
import android.accounts.Account
import android.os.Bundle
+import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.compose.setContent
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.platform.LocalContext
+import androidx.core.app.NotificationManagerCompat
import androidx.hilt.navigation.compose.hiltViewModel
+import at.bitfire.davdroid.R
+import at.bitfire.davdroid.push.PushNotificationManager
+import at.bitfire.davdroid.sync.SyncDataType
import at.bitfire.davdroid.ui.AppTheme
import at.bitfire.davdroid.ui.account.AccountSettingsActivity
import at.bitfire.davdroid.ui.account.AccountSettingsModel
@@ -77,6 +82,19 @@ fun OAuthHandlerScreen(
// Sync after authenticated
AccountHelper.scheduleSyncWithDelay(context)
+
+ // Cancel all notifications for this account
+ val notificationManager = NotificationManagerCompat.from(context)
+ for (dataType in SyncDataType.entries) {
+ val notificationId = PushNotificationManager.notificationId(account, dataType)
+ notificationManager.cancel(notificationId)
+ }
+
+ Toast.makeText(
+ context,
+ context.getString(R.string.account_updated_toast),
+ Toast.LENGTH_SHORT
+ ).show()
} else {
model.authCodeFailed()
}
diff --git a/app/src/main/res/values/e_strings.xml b/app/src/main/res/values/e_strings.xml
index 8e8adc9808ad89e8242c4ae5d23b033d4e3882e2..0e3c1e2add9c1e92f03f6477e3b00a817e69740d 100644
--- a/app/src/main/res/values/e_strings.xml
+++ b/app/src/main/res/values/e_strings.xml
@@ -36,4 +36,5 @@
Legacy Murena.io
Authentication issue. Tap to sign in again
+ Account updated successfully