From d768ab69cd967bd5439fcfa628cb9f1e1095c9e3 Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Tue, 1 Sep 2020 10:24:37 +0300 Subject: [PATCH] Fix parsing of #RRGGBBAA collection colors. --- .../syncadapter/resource/LocalCalendar.kt | 17 +++++++++++++++-- .../syncadapter/resource/LocalTaskList.kt | 4 +--- .../etesync/syncadapter/ui/AccountActivity.kt | 5 ++--- .../ui/etebase/CollectionMembersFragment.kt | 3 +-- .../ui/etebase/EditCollectionFragment.kt | 5 ++--- .../ui/etebase/ViewCollectionFragment.kt | 3 +-- 6 files changed, 22 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalCalendar.kt b/app/src/main/java/com/etesync/syncadapter/resource/LocalCalendar.kt index 8ce27a0d..4bfedc51 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalCalendar.kt +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalCalendar.kt @@ -13,7 +13,6 @@ import android.content.ContentProviderClient import android.content.ContentProviderOperation import android.content.ContentUris import android.content.ContentValues -import android.graphics.Color.parseColor import android.net.Uri import android.os.RemoteException import android.provider.CalendarContract @@ -35,6 +34,20 @@ class LocalCalendar private constructor( companion object { val defaultColor = -0x743cb6 // light green 500 - should be "8BC349"? + fun parseColor(color_: String?): Int { + if (color_.isNullOrBlank()) { + return defaultColor + } + val color = color_.replaceFirst("^#".toRegex(), "") + if (color.length == 8) { + return (color.substring(0, 6).toLong(16) or (color.substring(6, 8).toLong(16) shl 24)).toInt() + } else if (color.length == 6) { + return (color.toLong(16) or (0xFF000000)).toInt() + } else { + return defaultColor + } + } + val COLUMN_CTAG = Calendars.CAL_SYNC1 fun create(account: Account, provider: ContentProviderClient, journalEntity: JournalEntity): Uri { @@ -111,7 +124,7 @@ class LocalCalendar private constructor( values.put(Calendars.CALENDAR_DISPLAY_NAME, meta.name) if (withColor) - values.put(Calendars.CALENDAR_COLOR, if (!meta.color.isNullOrBlank()) parseColor(meta.color) else defaultColor) + values.put(Calendars.CALENDAR_COLOR, parseColor(meta.color)) if (col.accessLevel == "ro") values.put(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_READ) diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalTaskList.kt b/app/src/main/java/com/etesync/syncadapter/resource/LocalTaskList.kt index dd716adb..10e7c344 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalTaskList.kt +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalTaskList.kt @@ -11,11 +11,9 @@ package com.etesync.syncadapter.resource import android.accounts.Account import android.content.ContentValues import android.content.Context -import android.graphics.Color import android.net.Uri import android.os.Build import android.os.RemoteException -import android.provider.CalendarContract import at.bitfire.ical4android.AndroidTaskList import at.bitfire.ical4android.AndroidTaskListFactory import at.bitfire.ical4android.CalendarStorageException @@ -89,7 +87,7 @@ class LocalTaskList private constructor( values.put(TaskLists.LIST_NAME, meta.name) if (withColor) - values.put(TaskLists.LIST_COLOR, if (!meta.color.isNullOrBlank()) Color.parseColor(meta.color) else defaultColor) + values.put(TaskLists.LIST_COLOR, LocalCalendar.parseColor(meta.color)) return values } diff --git a/app/src/main/java/com/etesync/syncadapter/ui/AccountActivity.kt b/app/src/main/java/com/etesync/syncadapter/ui/AccountActivity.kt index 6d3445b1..455b1fe9 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/AccountActivity.kt +++ b/app/src/main/java/com/etesync/syncadapter/ui/AccountActivity.kt @@ -13,7 +13,6 @@ import android.accounts.AccountManager import android.app.LoaderManager import android.content.* import android.content.ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE -import android.graphics.Color.parseColor import android.net.Uri import android.os.Build import android.os.Bundle @@ -31,10 +30,10 @@ import at.bitfire.vcard4android.ContactsStorageException import com.etebase.client.CollectionManager import com.etebase.client.Utils import com.etebase.client.exceptions.EtebaseException -import com.etesync.syncadapter.* import com.etesync.journalmanager.Crypto import com.etesync.journalmanager.Exceptions import com.etesync.journalmanager.JournalAuthenticator +import com.etesync.syncadapter.* import com.etesync.syncadapter.Constants.* import com.etesync.syncadapter.log.Logger import com.etesync.syncadapter.model.CollectionInfo @@ -399,7 +398,7 @@ class AccountActivity : BaseActivity(), Toolbar.OnMenuItemClickListener, PopupMe val isAdmin = accessLevel == "adm" val metaColor = meta.color - val color = if (!metaColor.isNullOrBlank()) parseColor(metaColor) else null + val color = if (!metaColor.isNullOrBlank()) LocalCalendar.parseColor(metaColor) else null CollectionListItemInfo(it.col.uid, type, meta.name, meta.description ?: "", color, isReadOnly, isAdmin, null) }.filterNotNull() diff --git a/app/src/main/java/com/etesync/syncadapter/ui/etebase/CollectionMembersFragment.kt b/app/src/main/java/com/etesync/syncadapter/ui/etebase/CollectionMembersFragment.kt index 721103cc..f50bece7 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/etebase/CollectionMembersFragment.kt +++ b/app/src/main/java/com/etesync/syncadapter/ui/etebase/CollectionMembersFragment.kt @@ -2,7 +2,6 @@ package com.etesync.syncadapter.ui.etebase import android.app.Dialog import android.app.ProgressDialog -import android.graphics.Color.parseColor import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -51,7 +50,7 @@ class CollectionMembersFragment : Fragment() { val meta = cachedCollection.meta val colorSquare = v.findViewById(R.id.color) - val color = if (!meta.color.isNullOrBlank()) parseColor(meta.color) else LocalCalendar.defaultColor + val color = LocalCalendar.parseColor(meta.color) when (meta.collectionType) { Constants.ETEBASE_TYPE_CALENDAR -> { colorSquare.setBackgroundColor(color) diff --git a/app/src/main/java/com/etesync/syncadapter/ui/etebase/EditCollectionFragment.kt b/app/src/main/java/com/etesync/syncadapter/ui/etebase/EditCollectionFragment.kt index 5377704e..c392f40d 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/etebase/EditCollectionFragment.kt +++ b/app/src/main/java/com/etesync/syncadapter/ui/etebase/EditCollectionFragment.kt @@ -1,6 +1,5 @@ package com.etesync.syncadapter.ui.etebase -import android.graphics.Color.parseColor import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.text.TextUtils @@ -79,7 +78,7 @@ class EditCollectionFragment(private val cachedCollection: CachedCollection, pri Constants.ETEBASE_TYPE_CALENDAR -> { title.setHint(R.string.create_calendar_display_name_hint) - val color = if (!meta.color.isNullOrBlank()) parseColor(meta.color) else LocalCalendar.defaultColor + val color = LocalCalendar.parseColor(meta.color) colorSquare.setBackgroundColor(color) colorSquare.setOnClickListener { AmbilWarnaDialog(context, (colorSquare.background as ColorDrawable).color, true, object : AmbilWarnaDialog.OnAmbilWarnaListener { @@ -94,7 +93,7 @@ class EditCollectionFragment(private val cachedCollection: CachedCollection, pri Constants.ETEBASE_TYPE_TASKS -> { title.setHint(R.string.create_tasklist_display_name_hint) - val color = if (!meta.color.isNullOrBlank()) parseColor(meta.color) else LocalCalendar.defaultColor + val color = LocalCalendar.parseColor(meta.color) colorSquare.setBackgroundColor(color) colorSquare.setOnClickListener { AmbilWarnaDialog(context, (colorSquare.background as ColorDrawable).color, true, object : AmbilWarnaDialog.OnAmbilWarnaListener { diff --git a/app/src/main/java/com/etesync/syncadapter/ui/etebase/ViewCollectionFragment.kt b/app/src/main/java/com/etesync/syncadapter/ui/etebase/ViewCollectionFragment.kt index 0d188f04..89cdcf20 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/etebase/ViewCollectionFragment.kt +++ b/app/src/main/java/com/etesync/syncadapter/ui/etebase/ViewCollectionFragment.kt @@ -1,7 +1,6 @@ package com.etesync.syncadapter.ui.etebase import android.content.DialogInterface -import android.graphics.Color.parseColor import android.os.Bundle import android.view.* import android.widget.TextView @@ -67,7 +66,7 @@ class ViewCollectionFragment : Fragment() { val isAdmin = col.accessLevel == "adm" val colorSquare = container.findViewById(R.id.color) - val color = if (!meta.color.isNullOrBlank()) parseColor(meta.color) else LocalCalendar.defaultColor + val color = LocalCalendar.parseColor(meta.color) when (meta.collectionType) { Constants.ETEBASE_TYPE_CALENDAR -> { colorSquare.setBackgroundColor(color)