diff options
author | Ricki Hirner <hirner@bitfire.at> | 2021-08-23 01:34:59 +0300 |
---|---|---|
committer | Ricki Hirner <hirner@bitfire.at> | 2021-08-23 01:34:59 +0300 |
commit | a574ff294dceaf57df7f33c4e1441f650c49992e (patch) | |
tree | e602c9c48f124f78bea6374f78feef8493ae381d | |
parent | c4f7abf79bf59d69f8c3ae8cf7a1c3286d26f545 (diff) |
Raise SDK compatibility level to 31 (Android 12); lint
18 files changed, 27 insertions, 59 deletions
diff --git a/build.gradle b/build.gradle index 3697b85..d51350e 100644 --- a/build.gradle +++ b/build.gradle @@ -30,12 +30,12 @@ apply plugin: 'kotlin-android' apply plugin: 'org.jetbrains.dokka' android { - compileSdkVersion 30 + compileSdkVersion 31 buildToolsVersion '30.0.3' defaultConfig { minSdkVersion 16 // Android 4.1 - targetSdkVersion 30 // Android 11 + targetSdkVersion 31 // Android 12 } compileOptions { diff --git a/src/androidTest/java/at/bitfire/vcard4android/contactrow/EmailHandlerTest.kt b/src/androidTest/java/at/bitfire/vcard4android/contactrow/EmailHandlerTest.kt index e91d5b9..6229ffe 100644 --- a/src/androidTest/java/at/bitfire/vcard4android/contactrow/EmailHandlerTest.kt +++ b/src/androidTest/java/at/bitfire/vcard4android/contactrow/EmailHandlerTest.kt @@ -3,7 +3,6 @@ package at.bitfire.vcard4android.contactrow import android.content.ContentValues import android.provider.ContactsContract.CommonDataKinds.Email import at.bitfire.vcard4android.Contact -import at.bitfire.vcard4android.datavalues.EmailHandler import at.bitfire.vcard4android.property.CustomType import ezvcard.parameter.EmailType import org.junit.Assert.* diff --git a/src/androidTest/java/at/bitfire/vcard4android/contactrow/PhotoHandlerTest.kt b/src/androidTest/java/at/bitfire/vcard4android/contactrow/PhotoHandlerTest.kt index 9db3a19..80ec1fc 100644 --- a/src/androidTest/java/at/bitfire/vcard4android/contactrow/PhotoHandlerTest.kt +++ b/src/androidTest/java/at/bitfire/vcard4android/contactrow/PhotoHandlerTest.kt @@ -3,7 +3,6 @@ package at.bitfire.vcard4android.contactrow import android.content.ContentValues import android.provider.ContactsContract.CommonDataKinds.Photo import at.bitfire.vcard4android.Contact -import at.bitfire.vcard4android.datavalues.PhotoHandler import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Test diff --git a/src/main/java/at/bitfire/vcard4android/AndroidContact.kt b/src/main/java/at/bitfire/vcard4android/AndroidContact.kt index a19b5aa..385ae04 100644 --- a/src/main/java/at/bitfire/vcard4android/AndroidContact.kt +++ b/src/main/java/at/bitfire/vcard4android/AndroidContact.kt @@ -150,9 +150,9 @@ open class AndroidContact( // - We'll only delete rows we have inserted so that unknown rows like // vnd.android.cursor.item/important_people (= contact is in Samsung "edge panel") remain untouched. val typesToRemove = processor.builderMimeTypes() - val sqlTypesToRemove = typesToRemove.map { mimeType -> + val sqlTypesToRemove = typesToRemove.joinToString(",") { mimeType -> DatabaseUtils.sqlEscapeString(mimeType) - }.joinToString(",") + } batch.enqueue(BatchOperation.CpoBuilder .newDelete(dataSyncURI()) .withSelection(Data.RAW_CONTACT_ID + "=? AND ${Data.MIMETYPE} IN ($sqlTypesToRemove)", arrayOf(id!!.toString()))) @@ -205,19 +205,6 @@ open class AndroidContact( // helpers - protected fun insertDataBuilder(rawContactKeyName: String): BatchOperation.CpoBuilder { - val builder = BatchOperation.CpoBuilder.newInsert(dataSyncURI()) - if (id == null) - builder.withValueBackReference(rawContactKeyName, 0) - else - builder.withValue(rawContactKeyName, id) - - if (addressBook.readOnly) - builder.withValue(Data.IS_READ_ONLY, 1) - - return builder - } - protected fun rawContactSyncURI(): Uri { val id = requireNotNull(id) return addressBook.syncAdapterURI(ContentUris.withAppendedId(RawContacts.CONTENT_URI, id)) diff --git a/src/main/java/at/bitfire/vcard4android/BatchOperation.kt b/src/main/java/at/bitfire/vcard4android/BatchOperation.kt index bbe2bbf..9895606 100644 --- a/src/main/java/at/bitfire/vcard4android/BatchOperation.kt +++ b/src/main/java/at/bitfire/vcard4android/BatchOperation.kt @@ -87,7 +87,7 @@ class BatchOperation( * @param end index of last operation which will be run (exclusive!) * @throws RemoteException on calendar provider errors * @throws OperationApplicationException when the batch can't be processed - * @throws CalendarStorageException if the transaction is too large + * @throws ContactsStorageException if the transaction is too large */ private fun runBatch(start: Int, end: Int) { if (end == start) diff --git a/src/main/java/at/bitfire/vcard4android/Contact.kt b/src/main/java/at/bitfire/vcard4android/Contact.kt index 889a812..442b1bc 100644 --- a/src/main/java/at/bitfire/vcard4android/Contact.kt +++ b/src/main/java/at/bitfire/vcard4android/Contact.kt @@ -27,8 +27,7 @@ import java.util.* * * Data shall be stored without workarounds in the most appropriate form. For instance, * an anniversary should be stored as [anniversary] and not in [customDates] with a - * proprietary label ([Contact.DATE_LABEL_ANNIVERSARY]). Strings should not be empty values - * (rather *null* in this case). + * proprietary label. Strings should not be empty values (rather *null* in this case). * * vCards are parsed to [Contact]s by [ContactReader]. * [Contact]s are written to vCards by [ContactWriter]. diff --git a/src/main/java/at/bitfire/vcard4android/ContactWriter.kt b/src/main/java/at/bitfire/vcard4android/ContactWriter.kt index a737960..e6db1f8 100644 --- a/src/main/java/at/bitfire/vcard4android/ContactWriter.kt +++ b/src/main/java/at/bitfire/vcard4android/ContactWriter.kt @@ -41,7 +41,7 @@ class ContactWriter private constructor(val contact: Contact, val version: VCard addProperties() } - fun addProperties() { + private fun addProperties() { contact.uid?.let { vCard.uid = Uid(it) } Contact.productID?.let { vCard.setProductId(it) } @@ -120,19 +120,17 @@ class ContactWriter private constructor(val contact: Contact, val version: VCard } else /* version == VCardVersion.V3_0 */ { // vCard 3 REQUIRES FN [RFC 2426 p. 29] - var fn = + val fn = // use display name, if available StringUtils.trimToNull(contact.displayName) ?: // no display name, try organization - contact.organization?.let { org -> - org.values.joinToString(" / ") - } ?: + contact.organization?.values?.joinToString(" / ") ?: // otherwise, try nickname - contact.nickName?.let { nick -> nick.property.values.firstOrNull() } ?: + contact.nickName?.property?.values?.firstOrNull() ?: // otherwise, try email address - contact.emails.firstOrNull()?.let { email -> email.property.value } ?: + contact.emails.firstOrNull()?.property?.value ?: // otherwise, try phone number - contact.phoneNumbers.firstOrNull()?.let { phone -> phone.property.text } ?: + contact.phoneNumbers.firstOrNull()?.property?.text ?: // otherwise, try UID or use empty string contact.uid ?: "" vCard.setFormattedName(fn) @@ -199,7 +197,7 @@ class ContactWriter private constructor(val contact: Contact, val version: VCard if (relation.types.isEmpty()) name.addParameter("TYPE", "other") else - label = relation.types.map { type -> WordUtils.capitalize(type.value) }.joinToString(", ") + label = relation.types.joinToString(", ") { type -> WordUtils.capitalize(type.value) } } } diff --git a/src/main/java/at/bitfire/vcard4android/LabeledProperty.kt b/src/main/java/at/bitfire/vcard4android/LabeledProperty.kt index a5d2a7c..51b4657 100644 --- a/src/main/java/at/bitfire/vcard4android/LabeledProperty.kt +++ b/src/main/java/at/bitfire/vcard4android/LabeledProperty.kt @@ -9,7 +9,6 @@ package at.bitfire.vcard4android import ezvcard.property.VCardProperty -import org.apache.commons.lang3.StringUtils data class LabeledProperty<out T: VCardProperty> @JvmOverloads constructor( val property: T, diff --git a/src/main/java/at/bitfire/vcard4android/contactrow/ContactProcessor.kt b/src/main/java/at/bitfire/vcard4android/contactrow/ContactProcessor.kt index 3ceb183..5305fc2 100644 --- a/src/main/java/at/bitfire/vcard4android/contactrow/ContactProcessor.kt +++ b/src/main/java/at/bitfire/vcard4android/contactrow/ContactProcessor.kt @@ -8,8 +8,6 @@ import at.bitfire.vcard4android.AndroidContact import at.bitfire.vcard4android.BatchOperation import at.bitfire.vcard4android.Constants import at.bitfire.vcard4android.Contact -import at.bitfire.vcard4android.datavalues.EmailHandler -import at.bitfire.vcard4android.datavalues.PhotoHandler import java.util.logging.Level class ContactProcessor( diff --git a/src/main/java/at/bitfire/vcard4android/contactrow/DataRowHandler.kt b/src/main/java/at/bitfire/vcard4android/contactrow/DataRowHandler.kt index d8401b8..be91709 100644 --- a/src/main/java/at/bitfire/vcard4android/contactrow/DataRowHandler.kt +++ b/src/main/java/at/bitfire/vcard4android/contactrow/DataRowHandler.kt @@ -6,10 +6,6 @@ import at.bitfire.vcard4android.Contact /** * Handler for a raw contact's data row. - * - * @param provider content provider client that has been used to fetch the data row; - * may be used by the handler to fetch further data (like a photo) - * */ abstract class DataRowHandler { diff --git a/src/main/java/at/bitfire/vcard4android/contactrow/EmailHandler.kt b/src/main/java/at/bitfire/vcard4android/contactrow/EmailHandler.kt index b8b8d84..8a16a55 100644 --- a/src/main/java/at/bitfire/vcard4android/contactrow/EmailHandler.kt +++ b/src/main/java/at/bitfire/vcard4android/contactrow/EmailHandler.kt @@ -1,10 +1,9 @@ -package at.bitfire.vcard4android.datavalues +package at.bitfire.vcard4android.contactrow import android.content.ContentValues import android.provider.ContactsContract.CommonDataKinds.Email import at.bitfire.vcard4android.Contact import at.bitfire.vcard4android.LabeledProperty -import at.bitfire.vcard4android.contactrow.DataRowHandler import at.bitfire.vcard4android.property.CustomType import ezvcard.parameter.EmailType diff --git a/src/main/java/at/bitfire/vcard4android/contactrow/EventBuilder.kt b/src/main/java/at/bitfire/vcard4android/contactrow/EventBuilder.kt index b90211b..c326527 100644 --- a/src/main/java/at/bitfire/vcard4android/contactrow/EventBuilder.kt +++ b/src/main/java/at/bitfire/vcard4android/contactrow/EventBuilder.kt @@ -35,8 +35,7 @@ class EventBuilder(dataRowUri: Uri, rawContactId: Long?, contact: Contact) if (dateOrTime == null) return null - val dateStr: String - dateStr = when { + val dateStr: String = when { dateOrTime.date != null -> { val format = SimpleDateFormat("yyyy-MM-dd", Locale.ROOT) format.format(dateOrTime.date) diff --git a/src/main/java/at/bitfire/vcard4android/contactrow/PhotoBuilder.kt b/src/main/java/at/bitfire/vcard4android/contactrow/PhotoBuilder.kt index 5fca982..6ea5e63 100644 --- a/src/main/java/at/bitfire/vcard4android/contactrow/PhotoBuilder.kt +++ b/src/main/java/at/bitfire/vcard4android/contactrow/PhotoBuilder.kt @@ -10,13 +10,14 @@ import at.bitfire.vcard4android.Constants import at.bitfire.vcard4android.Contact import java.io.ByteArrayOutputStream import java.util.* +import kotlin.math.min class PhotoBuilder(dataRowUri: Uri, rawContactId: Long?, contact: Contact) : DataRowBuilder(Factory.mimeType(), dataRowUri, rawContactId, contact) { companion object { - val MAX_PHOTO_BLOB_SIZE = 950*1024 // IPC limit 1 MB, minus 50 kB for the protocol itself = 950 kB - val MAX_RESIZE_PASSES = 10 + const val MAX_PHOTO_BLOB_SIZE = 950*1024 // IPC limit 1 MB, minus 50 kB for the protocol itself = 950 kB + const val MAX_RESIZE_PASSES = 10 } override fun build(): List<BatchOperation.CpoBuilder> { @@ -59,7 +60,7 @@ class PhotoBuilder(dataRowUri: Uri, rawContactId: Long?, contact: Contact) return null } - var size = Math.min(bitmap.width, bitmap.height).toFloat() + var size = min(bitmap.width, bitmap.height).toFloat() var resized: ByteArray = blob var count = 0 var quality = 98 diff --git a/src/main/java/at/bitfire/vcard4android/contactrow/PhotoHandler.kt b/src/main/java/at/bitfire/vcard4android/contactrow/PhotoHandler.kt index a7f03b6..06c14ef 100644 --- a/src/main/java/at/bitfire/vcard4android/contactrow/PhotoHandler.kt +++ b/src/main/java/at/bitfire/vcard4android/contactrow/PhotoHandler.kt @@ -1,4 +1,4 @@ -package at.bitfire.vcard4android.datavalues +package at.bitfire.vcard4android.contactrow import android.content.ContentProviderClient import android.content.ContentUris @@ -7,7 +7,6 @@ import android.provider.ContactsContract import android.provider.ContactsContract.CommonDataKinds.Photo import at.bitfire.vcard4android.Constants import at.bitfire.vcard4android.Contact -import at.bitfire.vcard4android.contactrow.DataRowHandler import org.apache.commons.io.IOUtils import java.io.IOException import java.util.logging.Level diff --git a/src/main/java/at/bitfire/vcard4android/contactrow/RelationBuilder.kt b/src/main/java/at/bitfire/vcard4android/contactrow/RelationBuilder.kt index 0298e1a..9a3c1ea 100644 --- a/src/main/java/at/bitfire/vcard4android/contactrow/RelationBuilder.kt +++ b/src/main/java/at/bitfire/vcard4android/contactrow/RelationBuilder.kt @@ -20,7 +20,7 @@ class RelationBuilder(dataRowUri: Uri, rawContactId: Long?, contact: Contact) if (name.isNullOrBlank()) continue - var typeCode = when { + val typeCode = when { // specific Android types (not defined in RFC 6350) related.types.contains(CustomType.Related.ASSISTANT) -> Relation.TYPE_ASSISTANT related.types.contains(CustomType.Related.BROTHER) -> Relation.TYPE_BROTHER diff --git a/src/main/java/at/bitfire/vcard4android/property/CustomScribes.kt b/src/main/java/at/bitfire/vcard4android/property/CustomScribes.kt index 6a35f17..640e657 100644 --- a/src/main/java/at/bitfire/vcard4android/property/CustomScribes.kt +++ b/src/main/java/at/bitfire/vcard4android/property/CustomScribes.kt @@ -8,7 +8,7 @@ import ezvcard.io.text.VCardWriter object CustomScribes { /** list of all custom scribes (will be registered to readers/writers) **/ - val customScribes = arrayOf( + private val customScribes = arrayOf( XAbDate.Scribe, XAbLabel.Scribe, XAbRelatedNames.Scribe, diff --git a/src/main/java/at/bitfire/vcard4android/property/CustomType.kt b/src/main/java/at/bitfire/vcard4android/property/CustomType.kt index 3a4df3f..2b1ccd9 100644 --- a/src/main/java/at/bitfire/vcard4android/property/CustomType.kt +++ b/src/main/java/at/bitfire/vcard4android/property/CustomType.kt @@ -9,17 +9,17 @@ import ezvcard.parameter.TelephoneType */ object CustomType { - val HOME = "home" - val WORK = "work" + const val HOME = "home" + const val WORK = "work" object Email { val MOBILE = EmailType.get("x-mobile") } object Nickname { - val INITIALS = "x-initials" - val MAIDEN_NAME = "x-maiden-name" - val SHORT_NAME = "x-short-name" + const val INITIALS = "x-initials" + const val MAIDEN_NAME = "x-maiden-name" + const val SHORT_NAME = "x-short-name" } object Phone { diff --git a/src/main/java/at/bitfire/vcard4android/property/XSip.kt b/src/main/java/at/bitfire/vcard4android/property/XSip.kt index 30c5ad1..8368871 100644 --- a/src/main/java/at/bitfire/vcard4android/property/XSip.kt +++ b/src/main/java/at/bitfire/vcard4android/property/XSip.kt @@ -1,12 +1,7 @@ package at.bitfire.vcard4android.property -import android.net.Uri -import ezvcard.io.scribe.ImppScribe import ezvcard.io.scribe.StringPropertyScribe -import ezvcard.io.scribe.UriPropertyScribe -import ezvcard.property.Impp import ezvcard.property.TextProperty -import ezvcard.property.UriProperty class XSip(value: String?): TextProperty(value) { |