Compare commits

...

3 Commits

Author SHA1 Message Date
Tom Hacohen d59ed821ed Github actions: remove broken CI workflow.
11 months ago
Tom Hacohen 88daffcbaf Bump version and update changelog.
11 months ago
Tom Hacohen 3f05b7fc1f Bump target SDK version, update Gradle, and adjust code
11 months ago

@ -1,6 +1,9 @@
# Changelog
*NOTE:* may be removed in the future in favor of the fastlane changelog.
## Version 2.4.0
* Update compile and target SDK versions
## Version 2.3.0
* Sync: add an option to sync every 30 minutes
* Update translations

@ -9,20 +9,18 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId "com.etesync.syncadapter"
minSdkVersion 21
targetSdkVersion 29
targetSdkVersion 33
versionCode 20300
versionName "2.3.0"
versionCode 20400
versionName "2.4.0"
buildConfigField "boolean", "customCerts", "true"
}
@ -60,35 +58,14 @@ android {
}
}
lintOptions {
disable 'GoogleAppIndexingWarning' // we don't need Google indexing, thanks
disable 'GradleDependency'
disable 'GradleDynamicVersion'
disable 'IconColors'
disable 'IconLauncherShape'
disable 'IconMissingDensityFolder'
disable 'ImpliedQuantity', 'MissingQuantity'
disable 'MissingTranslation', 'ExtraTranslation' // translations from Transifex are not always up to date
disable 'Recycle' // doesn't understand Lombok's @Cleanup
disable 'RtlEnabled'
disable 'RtlHardcoded'
disable 'Typos'
disable "RestrictedApi" // https://code.google.com/p/android/issues/detail?id=230387
}
dexOptions {
preDexLibraries = true
// dexInProcess requires much RAM, which is not available on all dev systems
dexInProcess = false
javaMaxHeapSize "2g"
}
packagingOptions {
exclude 'LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
resources {
excludes += ['LICENSE', 'META-INF/LICENSE.txt', 'META-INF/NOTICE.txt']
}
}
testOptions {
unitTests.returnDefaultValues = true
}
@ -125,16 +102,16 @@ android {
// enable because ical4android requires desugaring
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
buildFeatures {
dataBinding = true
viewBinding = true
}
lint {
disable 'GoogleAppIndexingWarning', 'GradleDependency', 'GradleDynamicVersion', 'IconColors', 'IconLauncherShape', 'IconMissingDensityFolder', 'ImpliedQuantity', 'MissingQuantity', 'MissingTranslation', 'ExtraTranslation', 'Recycle', 'RtlEnabled', 'RtlHardcoded', 'Typos', 'RestrictedApi'
}
}
@ -159,9 +136,9 @@ dependencies {
// KTX extensions
implementation "androidx.core:core-ktx:1.3.1"
implementation "androidx.fragment:fragment-ktx:1.2.5"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.4.0"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.0"
implementation 'com.google.android.material:material:1.2.0-beta01'

@ -178,7 +178,7 @@
android:enabled="true">
</service>
<receiver android:name=".PackageChangedReceiver">
<receiver android:name=".PackageChangedReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="android.intent.action.PACKAGE_FULLY_REMOVED"/>
@ -189,6 +189,7 @@
<activity
android:name=".ui.AccountsActivity"
android:label="@string/app_name"
android:exported="true"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>

@ -204,7 +204,7 @@ class LocalAddressBook(
if (provider != null) {
val values = ContentValues(1)
values.put(RawContacts.ACCOUNT_NAME, newAccountName)
provider.update(syncAdapterURI(RawContacts.CONTENT_URI), values, RawContacts.ACCOUNT_NAME + "=? AND " + RawContacts.ACCOUNT_TYPE + "=?",
(provider as ContentProviderClient).update(syncAdapterURI(RawContacts.CONTENT_URI), values, RawContacts.ACCOUNT_NAME + "=? AND " + RawContacts.ACCOUNT_TYPE + "=?",
arrayOf(account.name, account.type))
}
} catch (e: RemoteException) {
@ -235,7 +235,7 @@ class LocalAddressBook(
if (provider != null) {
val values = ContentValues(1)
values.put(RawContacts.ACCOUNT_NAME, newAccountName)
provider.update(syncAdapterURI(RawContacts.CONTENT_URI), values, RawContacts.ACCOUNT_NAME + "=? AND " + RawContacts.ACCOUNT_TYPE + "=?",
(provider as ContentProviderClient).update(syncAdapterURI(RawContacts.CONTENT_URI), values, RawContacts.ACCOUNT_NAME + "=? AND " + RawContacts.ACCOUNT_TYPE + "=?",
arrayOf(account.name, account.type))
}
} catch (e: RemoteException) {
@ -423,7 +423,7 @@ class LocalAddressBook(
val values = ContentValues(1)
values.put(Groups.TITLE, title)
val uri = provider.insert(syncAdapterURI(Groups.CONTENT_URI), values)
val uri = (provider as ContentProviderClient).insert(syncAdapterURI(Groups.CONTENT_URI), values)
return ContentUris.parseId(uri!!)
}

@ -8,6 +8,7 @@
package com.etesync.syncadapter.resource
import android.content.ContentProviderClient
import android.content.ContentProviderOperation
import android.content.ContentUris
import android.content.ContentValues
@ -44,7 +45,7 @@ class LocalGroup : AndroidGroup, LocalAddress {
"$COLUMN_PENDING_MEMBERS IS NOT NULL", null,
null
)?.use { cursor ->
val batch = BatchOperation(addressBook.provider)
val batch = BatchOperation(addressBook.provider as ContentProviderClient)
while (cursor.moveToNext()) {
val id = cursor.getLong(0)

@ -74,7 +74,7 @@ class AboutActivity : BaseActivity() {
@SuppressLint("SetTextI18n")
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val info = components[arguments!!.getInt(KEY_POSITION)]
val info = components[requireArguments().getInt(KEY_POSITION)]
val v = inflater.inflate(R.layout.about_component, container, false)

@ -47,6 +47,8 @@ class CollectionMembersActivity : BaseActivity(), Refreshable {
CollectionInfo.Type.ADDRESS_BOOK -> {
colorSquare.visibility = View.GONE
}
null -> {
}
}
findViewById<View>(R.id.progressBar).visibility = View.GONE

@ -82,6 +82,8 @@ open class CreateCollectionActivity : BaseActivity() {
val colorGroup = findViewById<View>(R.id.color_group)
colorGroup.visibility = View.GONE
}
null -> {
}
}
}
@ -121,6 +123,10 @@ open class CreateCollectionActivity : BaseActivity() {
}
CollectionInfo.Type.ADDRESS_BOOK -> {
}
CollectionInfo.Type.TASKS -> {
}
null -> {
}
}
info.selected = true

@ -42,6 +42,8 @@ class EditCollectionActivity : CreateCollectionActivity() {
}
CollectionInfo.Type.ADDRESS_BOOK -> {
}
null -> {
}
}
val edit = findViewById<View>(R.id.display_name) as EditText

@ -146,6 +146,8 @@ class JournalItemActivity : BaseActivity(), Refreshable {
}
}
}
null -> {
}
}
val dialog = AlertDialog.Builder(this)
@ -231,6 +233,8 @@ class JournalItemActivity : BaseActivity(), Refreshable {
v = inflater.inflate(R.layout.task_info, container, false)
asyncTask = loadTaskTask(v)
}
null -> {
}
}
return v

@ -68,6 +68,7 @@ class StartupDialogFragment : DialogFragment() {
.setNeutralButton(R.string.startup_vendor_specific_bugs_open_faq) { dialog, which -> WebViewActivity.openUrl(context!!, Constants.faqUri.buildUpon().encodedFragment("vendor-issues").build()) }
.setNegativeButton(R.string.startup_dont_show_again) { dialog, which -> HintManager.setHintSeen(context!!, HINT_VENDOR_SPECIFIC_BUGS, true) }
.create()
StartupDialogFragment.Mode.GOOGLE_PLAY_ACCOUNTS_REMOVED -> {}
}
throw IllegalArgumentException(/* illegal mode argument */)

@ -76,6 +76,8 @@ class ViewCollectionActivity : BaseActivity(), Refreshable {
CollectionInfo.Type.ADDRESS_BOOK -> {
colorSquare.visibility = View.GONE
}
null -> {
}
}
LoadCountTask().execute()
@ -244,6 +246,8 @@ class ViewCollectionActivity : BaseActivity(), Refreshable {
e.printStackTrace()
}
}
null -> {
}
}
return count
}
@ -268,6 +272,8 @@ class ViewCollectionActivity : BaseActivity(), Refreshable {
stats.text = String.format(Locale.getDefault(), "Contacts: %d, Journal Entries: %d",
result, entryCount)
}
null -> {
}
}
}
}

@ -153,6 +153,8 @@ class ListEntriesFragment : ListFragment(), AdapterView.OnItemClickListener {
CollectionInfo.Type.ADDRESS_BOOK -> {
prefix = "FN:"
}
null -> {
}
}
var content = getLine(fullContent, prefix)

@ -7,16 +7,16 @@
*/
ext {
kotlin_version = '1.4.10'
gradle_version = '4.0.1'
compileSdkVersion = 30
buildToolsVersion = '30.0.2'
kotlin_version = '1.8.21'
gradle_version = '8.0.2'
compileSdkVersion = 33
buildToolsVersion = '33.0.0'
}
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.4.10'
ext.gradle_version = '4.0.1'
ext.kotlin_version = '1.8.21'
ext.gradle_version = '7.4.2'
repositories {
jcenter()

@ -1 +1 @@
Subproject commit 47bc6842daf9b93b28ae2ad8b65754dae2bc3ece
Subproject commit d01a3455bdb7fb49362e3e7acef043d34b7124f6

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-all.zip

@ -1 +1 @@
Subproject commit b023c079b2a8cd2fe69360a835cf0d872b71cd53
Subproject commit b62dfc46f61aa310a65383e7b99f66a99959da2b

@ -1 +1 @@
Subproject commit e98a3a553511f66b9bbdb914f2d2c91176108aab
Subproject commit beb8ad2904bd1a46646dce0e707c54417858eaa2
Loading…
Cancel
Save