1
0
mirror of https://github.com/etesync/android synced 2024-11-22 07:58:09 +00:00

Account Settings: drop very old upgrade path.

The cod was rotting and people should already be very much up
to date.
This commit is contained in:
Tom Hacohen 2019-01-06 13:14:16 +00:00
parent 467701047f
commit 9e87d1725b

View File

@ -12,30 +12,19 @@ import android.accounts.AccountManager
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.annotation.TargetApi import android.annotation.TargetApi
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
import android.content.ContentProviderClient
import android.content.ContentResolver import android.content.ContentResolver
import android.content.ContentValues
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.PeriodicSync
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Parcel import at.bitfire.vcard4android.ContactsStorageException
import android.os.RemoteException import at.bitfire.vcard4android.GroupMethod
import android.provider.ContactsContract
import com.etesync.syncadapter.journalmanager.Crypto import com.etesync.syncadapter.journalmanager.Crypto
import com.etesync.syncadapter.model.CollectionInfo
import com.etesync.syncadapter.resource.LocalAddressBook
import com.etesync.syncadapter.utils.Base64 import com.etesync.syncadapter.utils.Base64
import java.net.URI import java.net.URI
import java.net.URISyntaxException import java.net.URISyntaxException
import java.util.logging.Level import java.util.logging.Level
import at.bitfire.vcard4android.ContactsStorageException
import at.bitfire.vcard4android.GroupMethod
class AccountSettings @TargetApi(Build.VERSION_CODES.LOLLIPOP) class AccountSettings @TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Throws(InvalidAccountException::class) @Throws(InvalidAccountException::class)
constructor(internal val context: Context, internal val account: Account) { constructor(internal val context: Context, internal val account: Account) {
@ -192,79 +181,6 @@ constructor(internal val context: Context, internal val account: Account) {
@Throws(ContactsStorageException::class) @Throws(ContactsStorageException::class)
private fun updateInner(fromVersion: Int) { private fun updateInner(fromVersion: Int) {
if (fromVersion < 2) { if (fromVersion < 2) {
var affected: Long = -1
var newCount: Long = -1
val provider = context.contentResolver.acquireContentProviderClient(ContactsContract.AUTHORITY)
?: // no access to contacts provider
return
// don't run syncs during the migration
ContentResolver.setIsSyncable(account, ContactsContract.AUTHORITY, 0)
ContentResolver.setIsSyncable(account, App.addressBooksAuthority, 0)
ContentResolver.cancelSync(account, null)
try {
// get previous address book settings (including URL)
val raw = ContactsContract.SyncState.get(provider, account)
if (raw == null)
App.log.info("No contacts sync state, ignoring account")
else {
val parcel = Parcel.obtain()
parcel.unmarshall(raw, 0, raw.size)
parcel.setDataPosition(0)
val params = parcel.readBundle()
parcel.recycle()
val url = params.getString("url")
if (url == null)
App.log.info("No address book URL, ignoring account")
else {
// create new address book
val info = CollectionInfo()
info.type = CollectionInfo.Type.ADDRESS_BOOK
info.uid = url
info.displayName = account.name
App.log.log(Level.INFO, "Creating new address book account", url)
val addressBookAccount = Account(LocalAddressBook.accountName(account, info), App.addressBookAccountType)
if (!accountManager.addAccountExplicitly(addressBookAccount, null, null))
throw ContactsStorageException("Couldn't create address book account")
LocalAddressBook.setUserData(accountManager, addressBookAccount, account, info.uid!!)
val newAddressBook = LocalAddressBook(context, addressBookAccount, provider)
// move contacts to new address book
App.log.info("Moving contacts from $account to $addressBookAccount")
val newAccount = ContentValues(2)
newAccount.put(ContactsContract.RawContacts.ACCOUNT_NAME, addressBookAccount.name)
newAccount.put(ContactsContract.RawContacts.ACCOUNT_TYPE, addressBookAccount.type)
affected = provider.update(ContactsContract.RawContacts.CONTENT_URI.buildUpon()
.appendQueryParameter(ContactsContract.RawContacts.ACCOUNT_NAME, account.name)
.appendQueryParameter(ContactsContract.RawContacts.ACCOUNT_TYPE, account.type)
.appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build(),
newAccount,
ContactsContract.RawContacts.ACCOUNT_NAME + "=? AND " + ContactsContract.RawContacts.ACCOUNT_TYPE + "=?",
arrayOf(account.name, account.type)).toLong()
App.log.info(affected.toString() + " contacts moved to new address book")
newCount = newAddressBook.count()
}
ContactsContract.SyncState.set(provider, account, null)
}
} catch (e: RemoteException) {
throw ContactsStorageException("Couldn't migrate contacts to new address book", e)
}
provider.release()
// request sync of new address book account
ContentResolver.setIsSyncable(account, App.addressBooksAuthority, 1)
setSyncInterval(App.addressBooksAuthority!!, Constants.DEFAULT_SYNC_INTERVAL.toLong())
// Error handling
if (affected != -1L && affected != newCount) {
val notificationHelper = NotificationHelper(context, "account-migration", Constants.NOTIFICATION_ACCOUNT_UPDATE)
notificationHelper.setThrowable(AccountMigrationException("Failed to upgrade account"))
notificationHelper.notify("Account upgrade failed", "upgrading account")
}
} }
} }