Loading app/src/main/java/foundation/e/accountmanager/settings/AccountSettings.kt +11 −3 Original line number Diff line number Diff line Loading @@ -157,10 +157,18 @@ class AccountSettings( } fun credentials(credentials: Credentials) { if (credentials.authState == null) { accountManager.setUserData(account, KEY_USERNAME, credentials.userName) accountManager.setPassword(account, credentials.password) accountManager.setUserData(account, KEY_CERTIFICATE_ALIAS, credentials.certificateAlias) } else { accountManager.setUserData(account, KEY_USERNAME, credentials.userName) accountManager.setPassword(account, credentials.password) accountManager.setUserData(account, KEY_AUTH_STATE, credentials.authState.jsonSerializeString()) accountManager.setUserData(account, KEY_CERTIFICATE_ALIAS, credentials.certificateAlias) } } // sync. settings Loading app/src/main/java/foundation/e/accountmanager/syncadapter/CalendarsSyncAdapterService.kt +30 −1 Original line number Diff line number Diff line Loading @@ -13,14 +13,17 @@ import android.content.ContentResolver import android.content.Context import android.content.SyncResult import android.os.Bundle import android.os.AsyncTask import android.provider.CalendarContract import foundation.e.accountmanager.log.Logger import foundation.e.accountmanager.model.AppDatabase import foundation.e.accountmanager.model.Collection import foundation.e.accountmanager.model.Credentials import foundation.e.accountmanager.model.Service import foundation.e.accountmanager.resource.LocalCalendar import foundation.e.accountmanager.settings.AccountSettings import foundation.e.ical4android.AndroidCalendar import net.openid.appauth.AuthorizationService import okhttp3.HttpUrl import java.util.logging.Level Loading Loading @@ -58,7 +61,33 @@ class CalendarsSyncAdapterService: SyncAdapterService() { for (calendar in calendars) { Logger.log.info("Synchronizing calendar #${calendar.id}, URL: ${calendar.name}") CalendarSyncManager(context, account, accountSettings, extras, authority, syncResult, calendar).use { val authState = accountSettings.credentials().authState if (authState != null) { if (authState.needsTokenRefresh) { val tokenRequest = authState.createTokenRefreshRequest() AuthorizationService(context).performTokenRequest(tokenRequest, AuthorizationService.TokenResponseCallback { tokenResponse, ex -> authState.update(tokenResponse, ex) accountSettings.credentials(Credentials(account.name, null, authState, null)) it.accountSettings.credentials(Credentials(it.account.name, null, authState, null)) object : AsyncTask<Void, Void, Void>() { override fun doInBackground(vararg params: Void): Void? { it.performSync() return null } }.execute() }) } else { it.performSync() } } else { it.performSync() } } } } catch(e: Exception) { Loading app/src/main/java/foundation/e/accountmanager/syncadapter/ContactsSyncAdapterService.kt +30 −1 Original line number Diff line number Diff line Loading @@ -13,11 +13,14 @@ import android.content.ContentProviderClient import android.content.ContentResolver import android.content.Context import android.content.SyncResult import android.os.AsyncTask import android.os.Bundle import android.provider.ContactsContract import foundation.e.accountmanager.log.Logger import foundation.e.accountmanager.resource.LocalAddressBook import foundation.e.accountmanager.model.Credentials import foundation.e.accountmanager.settings.AccountSettings import net.openid.appauth.AuthorizationService import java.util.logging.Level class ContactsSyncAdapterService: SyncAdapterService() { Loading Loading @@ -65,7 +68,33 @@ class ContactsSyncAdapterService: SyncAdapterService() { Logger.log.info("Taking settings from: ${addressBook.mainAccount}") ContactsSyncManager(context, account, accountSettings, extras, authority, syncResult, provider, addressBook).use { val authState = accountSettings.credentials().authState if (authState != null) { if (authState.needsTokenRefresh) { val tokenRequest = authState.createTokenRefreshRequest() AuthorizationService(context).performTokenRequest(tokenRequest, AuthorizationService.TokenResponseCallback { tokenResponse, ex -> authState.update(tokenResponse, ex) accountSettings.credentials(Credentials(account.name, null, authState, null)) it.accountSettings.credentials(Credentials(it.account.name, null, authState, null)) object : AsyncTask<Void, Void, Void>() { override fun doInBackground(vararg params: Void): Void? { it.performSync() return null } }.execute() }) } else { it.performSync() } } else { it.performSync() } } } catch(e: Exception) { Logger.log.log(Level.SEVERE, "Couldn't sync contacts", e) Loading app/src/main/java/foundation/e/accountmanager/syncadapter/TasksSyncAdapterService.kt +30 −1 Original line number Diff line number Diff line Loading @@ -16,18 +16,21 @@ import android.graphics.drawable.BitmapDrawable import android.net.Uri import android.os.Build import android.os.Bundle import android.os.AsyncTask import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import foundation.e.accountmanager.R import foundation.e.accountmanager.log.Logger import foundation.e.accountmanager.model.AppDatabase import foundation.e.accountmanager.model.Collection import foundation.e.accountmanager.model.Credentials import foundation.e.accountmanager.model.Service import foundation.e.accountmanager.resource.LocalTaskList import foundation.e.accountmanager.settings.AccountSettings import foundation.e.accountmanager.ui.NotificationUtils import foundation.e.ical4android.AndroidTaskList import foundation.e.ical4android.TaskProvider import net.openid.appauth.AuthorizationService import okhttp3.HttpUrl import org.dmfs.tasks.contract.TaskContract import java.util.logging.Level Loading Loading @@ -69,7 +72,33 @@ class TasksSyncAdapterService: SyncAdapterService() { for (taskList in taskLists) { Logger.log.info("Synchronizing task list #${taskList.id} [${taskList.syncId}]") TasksSyncManager(context, account, accountSettings, extras, authority, syncResult, taskList).use { val authState = accountSettings.credentials().authState if (authState != null) { if (authState.needsTokenRefresh) { val tokenRequest = authState.createTokenRefreshRequest() AuthorizationService(context).performTokenRequest(tokenRequest, AuthorizationService.TokenResponseCallback { tokenResponse, ex -> authState.update(tokenResponse, ex) accountSettings.credentials(Credentials(account.name, null, authState, null)) it.accountSettings.credentials(Credentials(it.account.name, null, authState, null)) object : AsyncTask<Void, Void, Void>() { override fun doInBackground(vararg params: Void): Void? { it.performSync() return null } }.execute() }) } else { it.performSync() } } else { it.performSync() } } } } catch (e: TaskProvider.ProviderTooOldException) { Loading Loading
app/src/main/java/foundation/e/accountmanager/settings/AccountSettings.kt +11 −3 Original line number Diff line number Diff line Loading @@ -157,10 +157,18 @@ class AccountSettings( } fun credentials(credentials: Credentials) { if (credentials.authState == null) { accountManager.setUserData(account, KEY_USERNAME, credentials.userName) accountManager.setPassword(account, credentials.password) accountManager.setUserData(account, KEY_CERTIFICATE_ALIAS, credentials.certificateAlias) } else { accountManager.setUserData(account, KEY_USERNAME, credentials.userName) accountManager.setPassword(account, credentials.password) accountManager.setUserData(account, KEY_AUTH_STATE, credentials.authState.jsonSerializeString()) accountManager.setUserData(account, KEY_CERTIFICATE_ALIAS, credentials.certificateAlias) } } // sync. settings Loading
app/src/main/java/foundation/e/accountmanager/syncadapter/CalendarsSyncAdapterService.kt +30 −1 Original line number Diff line number Diff line Loading @@ -13,14 +13,17 @@ import android.content.ContentResolver import android.content.Context import android.content.SyncResult import android.os.Bundle import android.os.AsyncTask import android.provider.CalendarContract import foundation.e.accountmanager.log.Logger import foundation.e.accountmanager.model.AppDatabase import foundation.e.accountmanager.model.Collection import foundation.e.accountmanager.model.Credentials import foundation.e.accountmanager.model.Service import foundation.e.accountmanager.resource.LocalCalendar import foundation.e.accountmanager.settings.AccountSettings import foundation.e.ical4android.AndroidCalendar import net.openid.appauth.AuthorizationService import okhttp3.HttpUrl import java.util.logging.Level Loading Loading @@ -58,7 +61,33 @@ class CalendarsSyncAdapterService: SyncAdapterService() { for (calendar in calendars) { Logger.log.info("Synchronizing calendar #${calendar.id}, URL: ${calendar.name}") CalendarSyncManager(context, account, accountSettings, extras, authority, syncResult, calendar).use { val authState = accountSettings.credentials().authState if (authState != null) { if (authState.needsTokenRefresh) { val tokenRequest = authState.createTokenRefreshRequest() AuthorizationService(context).performTokenRequest(tokenRequest, AuthorizationService.TokenResponseCallback { tokenResponse, ex -> authState.update(tokenResponse, ex) accountSettings.credentials(Credentials(account.name, null, authState, null)) it.accountSettings.credentials(Credentials(it.account.name, null, authState, null)) object : AsyncTask<Void, Void, Void>() { override fun doInBackground(vararg params: Void): Void? { it.performSync() return null } }.execute() }) } else { it.performSync() } } else { it.performSync() } } } } catch(e: Exception) { Loading
app/src/main/java/foundation/e/accountmanager/syncadapter/ContactsSyncAdapterService.kt +30 −1 Original line number Diff line number Diff line Loading @@ -13,11 +13,14 @@ import android.content.ContentProviderClient import android.content.ContentResolver import android.content.Context import android.content.SyncResult import android.os.AsyncTask import android.os.Bundle import android.provider.ContactsContract import foundation.e.accountmanager.log.Logger import foundation.e.accountmanager.resource.LocalAddressBook import foundation.e.accountmanager.model.Credentials import foundation.e.accountmanager.settings.AccountSettings import net.openid.appauth.AuthorizationService import java.util.logging.Level class ContactsSyncAdapterService: SyncAdapterService() { Loading Loading @@ -65,7 +68,33 @@ class ContactsSyncAdapterService: SyncAdapterService() { Logger.log.info("Taking settings from: ${addressBook.mainAccount}") ContactsSyncManager(context, account, accountSettings, extras, authority, syncResult, provider, addressBook).use { val authState = accountSettings.credentials().authState if (authState != null) { if (authState.needsTokenRefresh) { val tokenRequest = authState.createTokenRefreshRequest() AuthorizationService(context).performTokenRequest(tokenRequest, AuthorizationService.TokenResponseCallback { tokenResponse, ex -> authState.update(tokenResponse, ex) accountSettings.credentials(Credentials(account.name, null, authState, null)) it.accountSettings.credentials(Credentials(it.account.name, null, authState, null)) object : AsyncTask<Void, Void, Void>() { override fun doInBackground(vararg params: Void): Void? { it.performSync() return null } }.execute() }) } else { it.performSync() } } else { it.performSync() } } } catch(e: Exception) { Logger.log.log(Level.SEVERE, "Couldn't sync contacts", e) Loading
app/src/main/java/foundation/e/accountmanager/syncadapter/TasksSyncAdapterService.kt +30 −1 Original line number Diff line number Diff line Loading @@ -16,18 +16,21 @@ import android.graphics.drawable.BitmapDrawable import android.net.Uri import android.os.Build import android.os.Bundle import android.os.AsyncTask import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import foundation.e.accountmanager.R import foundation.e.accountmanager.log.Logger import foundation.e.accountmanager.model.AppDatabase import foundation.e.accountmanager.model.Collection import foundation.e.accountmanager.model.Credentials import foundation.e.accountmanager.model.Service import foundation.e.accountmanager.resource.LocalTaskList import foundation.e.accountmanager.settings.AccountSettings import foundation.e.accountmanager.ui.NotificationUtils import foundation.e.ical4android.AndroidTaskList import foundation.e.ical4android.TaskProvider import net.openid.appauth.AuthorizationService import okhttp3.HttpUrl import org.dmfs.tasks.contract.TaskContract import java.util.logging.Level Loading Loading @@ -69,7 +72,33 @@ class TasksSyncAdapterService: SyncAdapterService() { for (taskList in taskLists) { Logger.log.info("Synchronizing task list #${taskList.id} [${taskList.syncId}]") TasksSyncManager(context, account, accountSettings, extras, authority, syncResult, taskList).use { val authState = accountSettings.credentials().authState if (authState != null) { if (authState.needsTokenRefresh) { val tokenRequest = authState.createTokenRefreshRequest() AuthorizationService(context).performTokenRequest(tokenRequest, AuthorizationService.TokenResponseCallback { tokenResponse, ex -> authState.update(tokenResponse, ex) accountSettings.credentials(Credentials(account.name, null, authState, null)) it.accountSettings.credentials(Credentials(it.account.name, null, authState, null)) object : AsyncTask<Void, Void, Void>() { override fun doInBackground(vararg params: Void): Void? { it.performSync() return null } }.execute() }) } else { it.performSync() } } else { it.performSync() } } } } catch (e: TaskProvider.ProviderTooOldException) { Loading