diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-10-28 17:33:18 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2020-10-28 17:33:18 +0300 |
commit | 14cc414704fba83c9570d448b8d0f38c184a17ad (patch) | |
tree | 6f1b3f6ca2fbf133dd83aa6c7bb60e6e7df561c9 /app/src/main/java/it | |
parent | 9343be904e3daa3ead65bb79f0447bb017e884f5 (diff) |
Use ColorUtil from android-commons where possible
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it')
21 files changed, 159 insertions, 284 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java index 2add622f0..c552a7f9e 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java @@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.exceptions.DeckException; import it.niedermann.nextcloud.deck.model.AccessControl; @@ -39,7 +40,6 @@ import it.niedermann.nextcloud.deck.model.ocs.projects.OcsProjectResource; import it.niedermann.nextcloud.deck.model.ocs.user.GroupMemberUIDs; import it.niedermann.nextcloud.deck.model.ocs.user.OcsUser; import it.niedermann.nextcloud.deck.model.ocs.user.OcsUserList; -import it.niedermann.nextcloud.deck.util.ColorUtil; import static it.niedermann.nextcloud.deck.exceptions.DeckException.Hint.CAPABILITIES_VERSION_NOT_PARSABLE; import static it.niedermann.nextcloud.deck.exceptions.TraceableException.makeTraceableIfFails; @@ -117,6 +117,7 @@ public class JsonToEntityParser { }, obj); return ocsUserList; } + private static OcsUser parseSingleOcsUser(JsonObject obj) { DeckLog.verbose(obj.toString()); OcsUser ocsUser = new OcsUser(); @@ -124,10 +125,10 @@ public class JsonToEntityParser { JsonElement data = obj.get("ocs").getAsJsonObject().get("data"); if (!data.isJsonNull()) { JsonObject user = data.getAsJsonObject(); - if (user.has("id")){ + if (user.has("id")) { ocsUser.setId(user.get("id").getAsString()); } - if (user.has("displayname")){ + if (user.has("displayname")) { ocsUser.setDisplayName(user.get("displayname").getAsString()); } } @@ -135,6 +136,7 @@ public class JsonToEntityParser { }, obj); return ocsUser; } + private static OcsProjectList parseOcsProjectList(JsonObject obj) { DeckLog.verbose(obj.toString()); OcsProjectList projectList = new OcsProjectList(); @@ -150,10 +152,10 @@ public class JsonToEntityParser { project.setName(getNullAsEmptyString(jsonObject.get("name"))); project.setResources(new ArrayList<>()); JsonElement jsonResources = jsonObject.get("resources"); - if (jsonResources != null && jsonResources.isJsonArray()){ + if (jsonResources != null && jsonResources.isJsonArray()) { JsonArray resourcesArray = jsonResources.getAsJsonArray(); for (JsonElement resourceElement : resourcesArray) { - if (resourceElement.isJsonObject()){ + if (resourceElement.isJsonObject()) { OcsProjectResource resource = parseOcsProjectResource(resourceElement.getAsJsonObject()); resource.setProjectId(project.getId()); project.getResources().add(resource); @@ -176,7 +178,7 @@ public class JsonToEntityParser { if (obj.has("id")) { String idString = obj.get("id").getAsString(); if (idString != null && idString.trim().length() > 0) { - if (idString.matches("[0-9]+")){ + if (idString.matches("[0-9]+")) { resource.setId(Long.parseLong(idString.trim())); } else { resource.setIdString(idString); @@ -196,15 +198,15 @@ public class JsonToEntityParser { resource.setIconUrl(getNullAsEmptyString(obj.get("iconUrl"))); } if (obj.has("path")) { - resource.setPath(obj.get("path").getAsString()); + resource.setPath(obj.get("path").getAsString()); } if (obj.has("mimetype")) { - resource.setMimetype(obj.get("mimetype").getAsString()); + resource.setMimetype(obj.get("mimetype").getAsString()); } if (obj.has("preview-available")) { - resource.setPreviewAvailable(obj.get("preview-available").getAsBoolean()); + resource.setPreviewAvailable(obj.get("preview-available").getAsBoolean()); } else { - resource.setPreviewAvailable(false); + resource.setPreviewAvailable(false); } }, obj); @@ -242,17 +244,18 @@ public class JsonToEntityParser { deckComment.setActorType(commentJson.get("actorType").getAsString()); deckComment.setCreationDateTime(getTimestampFromString(commentJson.get("creationDateTime"))); - if (commentJson.has("replyTo")){ - JsonObject replyTo = commentJson.get("replyTo").getAsJsonObject(); - deckComment.setParentId(replyTo.get("id").getAsLong()); - } + if (commentJson.has("replyTo")) { + JsonObject replyTo = commentJson.get("replyTo").getAsJsonObject(); + deckComment.setParentId(replyTo.get("id").getAsLong()); + } - JsonElement mentions = commentJson.get("mentions"); - if (mentions != null && mentions.isJsonArray()) { - for (JsonElement mention : mentions.getAsJsonArray()) { - deckComment.addMention(parseMention(mention)); + JsonElement mentions = commentJson.get("mentions"); + if (mentions != null && mentions.isJsonArray()) { + for (JsonElement mention : mentions.getAsJsonArray()) { + deckComment.addMention(parseMention(mention)); + } } - }}, data); + }, data); return deckComment; } @@ -480,7 +483,7 @@ public class JsonToEntityParser { protected static User parseUser(JsonElement userElement) { DeckLog.verbose(userElement.toString()); - if (userElement.isJsonNull()){ + if (userElement.isJsonNull()) { return null; } User user = new User(); @@ -560,7 +563,7 @@ public class JsonToEntityParser { String rawString = getNullAsEmptyString(element.get(field)); try { if (!rawString.trim().isEmpty()) { - String colorAsString = ColorUtil.formatColorToParsableHexString(rawString); + String colorAsString = ColorUtil.INSTANCE.formatColorToParsableHexString(rawString); return Color.parseColor(colorAsString); } } catch (Exception e) { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/json/JsonColorSerializer.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/json/JsonColorSerializer.java index 9ce238236..5169e7f5e 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/api/json/JsonColorSerializer.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/json/JsonColorSerializer.java @@ -6,7 +6,7 @@ import com.google.gson.stream.JsonWriter; import java.io.IOException; -import it.niedermann.nextcloud.deck.util.ColorUtil; +import it.niedermann.android.util.ColorUtil; public class JsonColorSerializer extends TypeAdapter<Integer> { @Override @@ -14,7 +14,7 @@ public class JsonColorSerializer extends TypeAdapter<Integer> { if (value == null) { out.nullValue(); } else { - out.value(ColorUtil.intColorToHexString(value)); + out.value(ColorUtil.INSTANCE.intColorToHexString(value)); } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/Board.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/Board.java index ba1abe3c1..c5cf7c843 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/model/Board.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/Board.java @@ -13,11 +13,11 @@ import com.google.gson.annotations.JsonAdapter; import java.io.Serializable; import java.util.Date; +import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.api.json.JsonColorSerializer; import it.niedermann.nextcloud.deck.model.enums.DBStatus; import it.niedermann.nextcloud.deck.model.interfaces.AbstractRemoteEntity; -import it.niedermann.nextcloud.deck.util.ColorUtil; @Entity( inheritSuperIndices = true, @@ -91,7 +91,7 @@ public class Board extends AbstractRemoteEntity implements Serializable { public void setColor(String color) { try { - setColor(Color.parseColor(ColorUtil.formatColorToParsableHexString(color))); + setColor(Color.parseColor(ColorUtil.INSTANCE.formatColorToParsableHexString(color))); } catch (Exception e) { DeckLog.logError(e); setColor(Color.GRAY); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/Label.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/Label.java index 6ae40a5ec..da24edb5a 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/model/Label.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/Label.java @@ -13,10 +13,10 @@ import com.google.gson.annotations.JsonAdapter; import java.io.Serializable; +import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.api.json.JsonColorSerializer; import it.niedermann.nextcloud.deck.model.interfaces.AbstractRemoteEntity; -import it.niedermann.nextcloud.deck.util.ColorUtil; @Entity(inheritSuperIndices = true, indices = {@Index("boardId"), @Index(value = {"boardId", "title"}, unique = true, name = "idx_label_title_unique")}, @@ -68,7 +68,7 @@ public class Label extends AbstractRemoteEntity implements Serializable { public void setColor(String color) { try { - setColor(Color.parseColor(ColorUtil.formatColorToParsableHexString(color))); + setColor(Color.parseColor(ColorUtil.INSTANCE.formatColorToParsableHexString(color))); } catch (Exception e) { DeckLog.logError(e); setColor(Color.GRAY); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DeckDatabase.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DeckDatabase.java index cb8bb558f..d2106f03b 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DeckDatabase.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DeckDatabase.java @@ -14,6 +14,7 @@ import androidx.room.TypeConverters; import androidx.room.migration.Migration; import androidx.sqlite.db.SupportSQLiteDatabase; +import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.api.LastSyncUtil; import it.niedermann.nextcloud.deck.model.AccessControl; @@ -66,7 +67,6 @@ import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.dao.projects.Oc import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.dao.projects.OcsProjectResourceDao; import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.dao.widgets.SingleCardWidgetModelDao; import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.dao.widgets.StackWidgetModelDao; -import it.niedermann.nextcloud.deck.util.ColorUtil; @Database( entities = { @@ -275,9 +275,9 @@ public abstract class DeckDatabase extends RoomDatabase { String suffix = "_new"; { String tableName = "Account"; - database.execSQL("CREATE TABLE `"+tableName+suffix+"` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT NOT NULL, `userName` TEXT NOT NULL, `url` TEXT NOT NULL, " + + database.execSQL("CREATE TABLE `" + tableName + suffix + "` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT NOT NULL, `userName` TEXT NOT NULL, `url` TEXT NOT NULL, " + "`color` INTEGER NOT NULL DEFAULT 0, `textColor` INTEGER NOT NULL DEFAULT 0, `serverDeckVersion` TEXT NOT NULL DEFAULT '0.6.4', `maintenanceEnabled` INTEGER NOT NULL DEFAULT 0, `etag` TEXT)"); - Cursor cursor = database.query("select * from `"+tableName+"`"); + Cursor cursor = database.query("select * from `" + tableName + "`"); while (cursor.moveToNext()) { String colorAsString1 = cursor.getString(4); // color String colorAsString2 = cursor.getString(5); // textColor @@ -285,44 +285,44 @@ public abstract class DeckDatabase extends RoomDatabase { @ColorInt Integer color1 = null; @ColorInt Integer color2 = null; try { - color1 = Color.parseColor(ColorUtil.formatColorToParsableHexString(colorAsString1)); - color2 = Color.parseColor(ColorUtil.formatColorToParsableHexString(colorAsString2)); + color1 = Color.parseColor(ColorUtil.INSTANCE.formatColorToParsableHexString(colorAsString1)); + color2 = Color.parseColor(ColorUtil.INSTANCE.formatColorToParsableHexString(colorAsString2)); } catch (Exception e) { color1 = Color.GRAY; color2 = Color.GRAY; } - database.execSQL("Insert into `"+tableName+suffix+"` VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", new Object[] { + database.execSQL("Insert into `" + tableName + suffix + "` VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", new Object[]{ cursor.getLong(0), cursor.getString(1), cursor.getString(2), cursor.getString(3), - color1, color2, cursor.getString(6), cursor.getInt(7), cursor.getString(8)}); + color1, color2, cursor.getString(6), cursor.getInt(7), cursor.getString(8)}); } - database.execSQL("DROP TABLE `"+ tableName +"`"); - database.execSQL("ALTER TABLE `"+tableName+suffix+"` RENAME TO `"+tableName+"`"); - database.execSQL("CREATE UNIQUE INDEX `index_Account_name` ON `"+tableName+"` (`name`)"); - database.execSQL("UPDATE SQLITE_SEQUENCE SET seq = (select max(id) from "+tableName+") WHERE name = ?", new Object[] {tableName}); + database.execSQL("DROP TABLE `" + tableName + "`"); + database.execSQL("ALTER TABLE `" + tableName + suffix + "` RENAME TO `" + tableName + "`"); + database.execSQL("CREATE UNIQUE INDEX `index_Account_name` ON `" + tableName + "` (`name`)"); + database.execSQL("UPDATE SQLITE_SEQUENCE SET seq = (select max(id) from " + tableName + ") WHERE name = ?", new Object[]{tableName}); } { String tableName = "Board"; - database.execSQL("CREATE TABLE `"+tableName+suffix+"` (`localId` INTEGER PRIMARY KEY AUTOINCREMENT, `accountId` INTEGER NOT NULL, `id` INTEGER, `status` INTEGER NOT NULL, " + + database.execSQL("CREATE TABLE `" + tableName + suffix + "` (`localId` INTEGER PRIMARY KEY AUTOINCREMENT, `accountId` INTEGER NOT NULL, `id` INTEGER, `status` INTEGER NOT NULL, " + "`lastModified` INTEGER, `lastModifiedLocal` INTEGER, `title` TEXT, `ownerId` INTEGER NOT NULL, `color` INTEGER, " + "`archived` INTEGER NOT NULL, `shared` INTEGER NOT NULL, `deletedAt` INTEGER, `permissionRead` INTEGER NOT NULL, " + "`permissionEdit` INTEGER NOT NULL, `permissionManage` INTEGER NOT NULL, `permissionShare` INTEGER NOT NULL, " + "FOREIGN KEY(`ownerId`) REFERENCES `User`(`localId`) ON UPDATE NO ACTION ON DELETE SET NULL )"); - Cursor cursor = database.query("select * from `"+tableName+"`"); + Cursor cursor = database.query("select * from `" + tableName + "`"); while (cursor.moveToNext()) { String colorAsString1 = cursor.getString(8); // color @ColorInt Integer color1 = null; try { - color1 = Color.parseColor(ColorUtil.formatColorToParsableHexString(colorAsString1)); + color1 = Color.parseColor(ColorUtil.INSTANCE.formatColorToParsableHexString(colorAsString1)); } catch (Exception e) { color1 = Color.GRAY; } - database.execSQL("Insert into `"+tableName+suffix+"` VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", new Object[] { + database.execSQL("Insert into `" + tableName + suffix + "` VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", new Object[]{ cursor.getLong(0), cursor.getLong(1), cursor.getLong(2), cursor.getInt(3), - cursor.getLong(4), cursor.getLong(5), cursor.getString(6), cursor.getLong(7) , color1, + cursor.getLong(4), cursor.getLong(5), cursor.getString(6), cursor.getLong(7), color1, cursor.getInt(9), cursor.getInt(10), cursor.getInt(11), cursor.getInt(12), cursor.getInt(13), cursor.getInt(14), cursor.getInt(15) }); @@ -330,46 +330,46 @@ public abstract class DeckDatabase extends RoomDatabase { } - database.execSQL("DROP TABLE `"+ tableName +"`"); - database.execSQL("ALTER TABLE `"+tableName+suffix+"` RENAME TO `"+tableName+"`"); - database.execSQL("CREATE INDEX `index_Board_accountId` ON `"+tableName+"` (`accountId`)"); - database.execSQL("CREATE UNIQUE INDEX `index_Board_accountId_id` ON `"+tableName+"` (`accountId`, `id`)"); - database.execSQL("CREATE INDEX `index_Board_id` ON `"+tableName+"` (`id`)"); - database.execSQL("CREATE INDEX `index_Board_ownerId` ON `"+tableName+"` (`ownerId`)"); - database.execSQL("CREATE INDEX `index_Board_lastModifiedLocal` ON `"+tableName+"` (`lastModifiedLocal`)"); - database.execSQL("UPDATE SQLITE_SEQUENCE SET seq = (select max(id) from "+tableName+") WHERE name = ?", new Object[] {tableName}); + database.execSQL("DROP TABLE `" + tableName + "`"); + database.execSQL("ALTER TABLE `" + tableName + suffix + "` RENAME TO `" + tableName + "`"); + database.execSQL("CREATE INDEX `index_Board_accountId` ON `" + tableName + "` (`accountId`)"); + database.execSQL("CREATE UNIQUE INDEX `index_Board_accountId_id` ON `" + tableName + "` (`accountId`, `id`)"); + database.execSQL("CREATE INDEX `index_Board_id` ON `" + tableName + "` (`id`)"); + database.execSQL("CREATE INDEX `index_Board_ownerId` ON `" + tableName + "` (`ownerId`)"); + database.execSQL("CREATE INDEX `index_Board_lastModifiedLocal` ON `" + tableName + "` (`lastModifiedLocal`)"); + database.execSQL("UPDATE SQLITE_SEQUENCE SET seq = (select max(id) from " + tableName + ") WHERE name = ?", new Object[]{tableName}); } { String tableName = "Label"; - database.execSQL("CREATE TABLE `"+tableName+suffix+"` (`localId` INTEGER PRIMARY KEY AUTOINCREMENT, `accountId` INTEGER NOT NULL, `id` INTEGER, `status` INTEGER NOT NULL, " + + database.execSQL("CREATE TABLE `" + tableName + suffix + "` (`localId` INTEGER PRIMARY KEY AUTOINCREMENT, `accountId` INTEGER NOT NULL, `id` INTEGER, `status` INTEGER NOT NULL, " + "`lastModified` INTEGER, `lastModifiedLocal` INTEGER, `title` TEXT, `color` INTEGER NOT NULL DEFAULT 0, `boardId` INTEGER NOT NULL, " + "FOREIGN KEY(`boardId`) REFERENCES `Board`(`localId`) ON UPDATE NO ACTION ON DELETE CASCADE )"); - Cursor cursor = database.query("select * from `"+tableName+"`"); + Cursor cursor = database.query("select * from `" + tableName + "`"); while (cursor.moveToNext()) { String colorAsString1 = cursor.getString(7); // color @ColorInt Integer color1 = null; try { - color1 = Color.parseColor(ColorUtil.formatColorToParsableHexString(colorAsString1)); + color1 = Color.parseColor(ColorUtil.INSTANCE.formatColorToParsableHexString(colorAsString1)); } catch (Exception e) { color1 = Color.GRAY; } - database.execSQL("Insert into `"+tableName+suffix+"` VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", new Object[] { + database.execSQL("Insert into `" + tableName + suffix + "` VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", new Object[]{ cursor.getLong(0), cursor.getLong(1), cursor.getLong(2), cursor.getInt(3), cursor.getLong(4), cursor.getLong(5), cursor.getString(6), color1, cursor.getLong(8)}); } - database.execSQL("DROP TABLE `"+ tableName +"`"); - database.execSQL("ALTER TABLE `"+tableName+suffix+"` RENAME TO `"+tableName+"`"); - database.execSQL("CREATE UNIQUE INDEX `index_Label_accountId_id` ON `"+tableName+"` (`accountId`, `id`)"); - database.execSQL("CREATE INDEX `index_Label_boardId` ON `"+tableName+"` (`boardId`)"); - database.execSQL("CREATE INDEX `index_Label_accountId` ON `"+tableName+"` (`accountId`)"); - database.execSQL("CREATE UNIQUE INDEX `idx_label_title_unique` ON `"+tableName+"` (`boardId`, `title`)"); - database.execSQL("CREATE INDEX `index_Label_id` ON `"+tableName+"` (`id`)"); - database.execSQL("CREATE INDEX `index_Label_lastModifiedLocal` ON `"+tableName+"` (`lastModifiedLocal`)"); - database.execSQL("UPDATE SQLITE_SEQUENCE SET seq = (select max(id) from "+tableName+") WHERE name = ?", new Object[] {tableName}); + database.execSQL("DROP TABLE `" + tableName + "`"); + database.execSQL("ALTER TABLE `" + tableName + suffix + "` RENAME TO `" + tableName + "`"); + database.execSQL("CREATE UNIQUE INDEX `index_Label_accountId_id` ON `" + tableName + "` (`accountId`, `id`)"); + database.execSQL("CREATE INDEX `index_Label_boardId` ON `" + tableName + "` (`boardId`)"); + database.execSQL("CREATE INDEX `index_Label_accountId` ON `" + tableName + "` (`accountId`)"); + database.execSQL("CREATE UNIQUE INDEX `idx_label_title_unique` ON `" + tableName + "` (`boardId`, `title`)"); + database.execSQL("CREATE INDEX `index_Label_id` ON `" + tableName + "` (`id`)"); + database.execSQL("CREATE INDEX `index_Label_lastModifiedLocal` ON `" + tableName + "` (`lastModifiedLocal`)"); + database.execSQL("UPDATE SQLITE_SEQUENCE SET seq = (select max(id) from " + tableName + ") WHERE name = ?", new Object[]{tableName}); } } }; diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java index 6d9758174..91c08ffad 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java @@ -114,8 +114,8 @@ import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandTo import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.clearBrandColors; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.getSecondaryForegroundColorDependingOnTheme; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.saveBrandColors; -import static it.niedermann.nextcloud.deck.util.ColorUtil.contrastRatioIsSufficient; -import static it.niedermann.nextcloud.deck.util.ColorUtil.contrastRatioIsSufficientBigAreas; +import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSufficient; +import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSufficientBigAreas; import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_ABOUT; import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_ADD_BOARD; import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_ARCHIVED_BOARDS; diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/PickStackActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/PickStackActivity.java index b8d9946fc..e0a9b6a06 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/PickStackActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/PickStackActivity.java @@ -14,6 +14,7 @@ import androidx.core.graphics.drawable.DrawableCompat; import java.util.List; +import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.ActivityPickStackBinding; @@ -25,13 +26,12 @@ import it.niedermann.nextcloud.deck.ui.branding.Branded; import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler; import it.niedermann.nextcloud.deck.ui.pickstack.PickStackFragment; import it.niedermann.nextcloud.deck.ui.pickstack.PickStackListener; -import it.niedermann.nextcloud.deck.util.ColorUtil; import static androidx.lifecycle.Transformations.switchMap; import static it.niedermann.nextcloud.deck.DeckApplication.isDarkTheme; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.getSecondaryForegroundColorDependingOnTheme; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.isBrandingEnabled; -import static it.niedermann.nextcloud.deck.util.ColorUtil.contrastRatioIsSufficientBigAreas; +import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSufficientBigAreas; public abstract class PickStackActivity extends AppCompatActivity implements Branded, PickStackListener { @@ -105,7 +105,7 @@ public abstract class PickStackActivity extends AppCompatActivity implements Bra ? mainColor : isDarkTheme(this) ? Color.WHITE : Color.BLACK; DrawableCompat.setTintList(binding.submit.getBackground(), ColorStateList.valueOf(finalMainColor)); - binding.submit.setTextColor(ColorUtil.getForegroundColorForBackgroundColor(finalMainColor)); + binding.submit.setTextColor(ColorUtil.INSTANCE.getForegroundColorForBackgroundColor(finalMainColor)); binding.cancel.setTextColor(getSecondaryForegroundColorDependingOnTheme(this, mainColor)); } } catch (Throwable t) { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationActivity.java index cf79bf511..a02f5aad3 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationActivity.java @@ -12,6 +12,7 @@ import androidx.appcompat.app.AppCompatActivity; import com.nextcloud.android.sso.helper.SingleAccountHelper; +import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.api.IResponseCallback; @@ -20,7 +21,6 @@ import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; import it.niedermann.nextcloud.deck.ui.card.EditActivity; import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler; -import it.niedermann.nextcloud.deck.util.ColorUtil; import it.niedermann.nextcloud.deck.util.ProjectUtil; import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce; @@ -200,7 +200,7 @@ public class PushNotificationActivity extends AppCompatActivity { @ColorInt final int mainColor = account.getColor(); try { binding.submit.setBackgroundColor(mainColor); - binding.submit.setTextColor(ColorUtil.getForegroundColorForBackgroundColor(mainColor)); + binding.submit.setTextColor(ColorUtil.INSTANCE.getForegroundColorForBackgroundColor(mainColor)); } catch (Throwable t) { DeckLog.logError(t); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentLicenseTab.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentLicenseTab.java index c00ff212a..0bd92bc78 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentLicenseTab.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentLicenseTab.java @@ -14,13 +14,13 @@ import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; import androidx.core.graphics.drawable.DrawableCompat; +import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.FragmentAboutLicenseTabBinding; import it.niedermann.nextcloud.deck.ui.branding.BrandedFragment; -import it.niedermann.nextcloud.deck.util.ColorUtil; import static it.niedermann.nextcloud.deck.DeckApplication.isDarkTheme; -import static it.niedermann.nextcloud.deck.util.ColorUtil.contrastRatioIsSufficientBigAreas; +import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSufficientBigAreas; import static it.niedermann.nextcloud.deck.util.SpannableUtil.setTextWithURL; public class AboutFragmentLicenseTab extends BrandedFragment { @@ -42,6 +42,6 @@ public class AboutFragmentLicenseTab extends BrandedFragment { ? mainColor : isDarkTheme(requireContext()) ? Color.WHITE : Color.BLACK; DrawableCompat.setTintList(binding.aboutAppLicenseButton.getBackground(), ColorStateList.valueOf(finalMainColor)); - binding.aboutAppLicenseButton.setTextColor(ColorUtil.getForegroundColorForBackgroundColor(finalMainColor)); + binding.aboutAppLicenseButton.setTextColor(ColorUtil.INSTANCE.getForegroundColorForBackgroundColor(finalMainColor)); } }
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsViewHolder.java index d5898334b..381a290e6 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsViewHolder.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsViewHolder.java @@ -5,9 +5,9 @@ import android.content.res.ColorStateList; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.databinding.ItemManageLabelBinding; import it.niedermann.nextcloud.deck.model.Label; -import it.niedermann.nextcloud.deck.util.ColorUtil; public class ManageLabelsViewHolder extends RecyclerView.ViewHolder { private ItemManageLabelBinding binding; @@ -23,7 +23,7 @@ public class ManageLabelsViewHolder extends RecyclerView.ViewHolder { binding.label.setText(label.getTitle()); final int labelColor = label.getColor(); binding.label.setChipBackgroundColor(ColorStateList.valueOf(labelColor)); - final int color = ColorUtil.getForegroundColorForBackgroundColor(labelColor); + final int color = ColorUtil.INSTANCE.getForegroundColorForBackgroundColor(labelColor); binding.label.setTextColor(color); binding.delete.setOnClickListener((v) -> listener.requestDelete(label)); binding.editText.setOnClickListener((v) -> listener.requestEdit(label)); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedDatePickerDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedDatePickerDialog.java index 5bef66f2c..f429436a6 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedDatePickerDialog.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedDatePickerDialog.java @@ -17,7 +17,7 @@ import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; import java.util.Calendar; import it.niedermann.nextcloud.deck.R; -import it.niedermann.nextcloud.deck.util.ColorUtil; +import it.niedermann.nextcloud.deck.util.DeckColorUtil; import static it.niedermann.nextcloud.deck.DeckApplication.isDarkTheme; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.getSecondaryForegroundColorDependingOnTheme; @@ -44,7 +44,7 @@ public class BrandedDatePickerDialog extends DatePickerDialog implements Branded setOkColor(buttonTextColor); setCancelColor(buttonTextColor); // Text in picker title is always white - setAccentColor(ColorUtil.contrastRatioIsSufficientBigAreas(Color.WHITE, mainColor) ? mainColor : ContextCompat.getColor(requireContext(), R.color.accent)); + setAccentColor(DeckColorUtil.contrastRatioIsSufficientBigAreas(Color.WHITE, mainColor) ? mainColor : ContextCompat.getColor(requireContext(), R.color.accent)); } /** diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedSnackbar.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedSnackbar.java index 8f7219b11..0159a59dc 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedSnackbar.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedSnackbar.java @@ -11,8 +11,8 @@ import androidx.core.content.ContextCompat; import com.google.android.material.snackbar.BaseTransientBottomBar; import com.google.android.material.snackbar.Snackbar; +import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.R; -import it.niedermann.nextcloud.deck.util.ColorUtil; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.isBrandingEnabled; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.readBrandMainColor; @@ -25,7 +25,7 @@ public class BrandedSnackbar { final Snackbar snackbar = Snackbar.make(view, text, duration); if (isBrandingEnabled(view.getContext())) { @ColorInt final int color = readBrandMainColor(view.getContext()); - snackbar.setActionTextColor(ColorUtil.isColorDark(color) ? Color.WHITE : color); + snackbar.setActionTextColor(ColorUtil.INSTANCE.isColorDark(color) ? Color.WHITE : color); } else { snackbar.setActionTextColor(ContextCompat.getColor(view.getContext(), R.color.defaultBrand)); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedTimePickerDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedTimePickerDialog.java index a1963aa18..bd5e65ddd 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedTimePickerDialog.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedTimePickerDialog.java @@ -17,7 +17,7 @@ import com.wdullaer.materialdatetimepicker.time.TimePickerDialog; import java.util.Calendar; import it.niedermann.nextcloud.deck.R; -import it.niedermann.nextcloud.deck.util.ColorUtil; +import it.niedermann.nextcloud.deck.util.DeckColorUtil; import static it.niedermann.nextcloud.deck.DeckApplication.isDarkTheme; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.getSecondaryForegroundColorDependingOnTheme; @@ -44,7 +44,7 @@ public class BrandedTimePickerDialog extends TimePickerDialog implements Branded setOkColor(buttonTextColor); setCancelColor(buttonTextColor); // Text in picker title is always white - setAccentColor(ColorUtil.contrastRatioIsSufficientBigAreas(Color.WHITE, mainColor) ? mainColor : ContextCompat.getColor(requireContext(), R.color.accent)); + setAccentColor(DeckColorUtil.contrastRatioIsSufficientBigAreas(Color.WHITE, mainColor) ? mainColor : ContextCompat.getColor(requireContext(), R.color.accent)); } /** diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandingUtil.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandingUtil.java index 11781e27b..b780efec5 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandingUtil.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandingUtil.java @@ -17,14 +17,13 @@ import androidx.preference.PreferenceManager; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.tabs.TabLayout; +import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.R; import static it.niedermann.nextcloud.deck.DeckApplication.isDarkTheme; -import static it.niedermann.nextcloud.deck.util.ColorUtil.contrastRatioIsSufficient; -import static it.niedermann.nextcloud.deck.util.ColorUtil.contrastRatioIsSufficientBigAreas; -import static it.niedermann.nextcloud.deck.util.ColorUtil.getContrastRatio; -import static it.niedermann.nextcloud.deck.util.ColorUtil.getForegroundColorForBackgroundColor; +import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSufficient; +import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSufficientBigAreas; public abstract class BrandingUtil { @@ -87,13 +86,13 @@ public abstract class BrandingUtil { fab.setSupportBackgroundTintList(ColorStateList.valueOf(contrastRatioIsSufficient ? mainColor : ContextCompat.getColor(fab.getContext(), R.color.accent))); - fab.setColorFilter(contrastRatioIsSufficient ? getForegroundColorForBackgroundColor(mainColor) : mainColor); + fab.setColorFilter(contrastRatioIsSufficient ? ColorUtil.INSTANCE.getForegroundColorForBackgroundColor(mainColor) : mainColor); } public static void applyBrandToPrimaryTabLayout(@ColorInt int mainColor, @NonNull TabLayout tabLayout) { @ColorInt final int finalMainColor = getSecondaryForegroundColorDependingOnTheme(tabLayout.getContext(), mainColor); tabLayout.setBackgroundColor(ContextCompat.getColor(tabLayout.getContext(), R.color.primary)); - final boolean contrastRatioIsSufficient = getContrastRatio(mainColor, ContextCompat.getColor(tabLayout.getContext(), R.color.primary)) > 1.7d; + final boolean contrastRatioIsSufficient = ColorUtil.INSTANCE.getContrastRatio(mainColor, ContextCompat.getColor(tabLayout.getContext(), R.color.primary)) > 1.7d; tabLayout.setSelectedTabIndicatorColor(contrastRatioIsSufficient ? mainColor : finalMainColor); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/LabelAutoCompleteAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/LabelAutoCompleteAdapter.java index cd6beae1d..fe974f2a0 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/LabelAutoCompleteAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/LabelAutoCompleteAdapter.java @@ -19,11 +19,11 @@ import java.util.Collection; import java.util.List; import java.util.Random; +import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.ItemAutocompleteLabelBinding; import it.niedermann.nextcloud.deck.model.Label; import it.niedermann.nextcloud.deck.util.AutoCompleteAdapter; -import it.niedermann.nextcloud.deck.util.ColorUtil; import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce; @@ -61,7 +61,7 @@ public class LabelAutoCompleteAdapter extends AutoCompleteAdapter<Label> { final Label label = getItem(position); final int labelColor = label.getColor(); - final int color = ColorUtil.getForegroundColorForBackgroundColor(labelColor); + final int color = ColorUtil.INSTANCE.getForegroundColorForBackgroundColor(labelColor); binding.label.setText(label.getTitle()); binding.label.setChipBackgroundColor(ColorStateList.valueOf(labelColor)); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java index 3f2e8d580..361984fdb 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java @@ -37,6 +37,7 @@ import java.util.Calendar; import java.util.Date; import java.util.Locale; +import it.niedermann.android.util.ColorUtil; import it.niedermann.android.util.DimensionUtil; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.R; @@ -55,7 +56,6 @@ import it.niedermann.nextcloud.deck.ui.card.UserAutoCompleteAdapter; import it.niedermann.nextcloud.deck.ui.card.assignee.CardAssigneeDialog; import it.niedermann.nextcloud.deck.ui.card.assignee.CardAssigneeListener; import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment; -import it.niedermann.nextcloud.deck.util.ColorUtil; import it.niedermann.nextcloud.deck.util.MarkDownUtil; import static android.text.format.DateFormat.getDateFormat; @@ -321,7 +321,7 @@ public class CardDetailsFragment extends BrandedFragment implements OnDateSetLis try { final int labelColor = label.getColor(); chip.setChipBackgroundColor(ColorStateList.valueOf(labelColor)); - final int color = ColorUtil.getForegroundColorForBackgroundColor(labelColor); + final int color = ColorUtil.INSTANCE.getForegroundColorForBackgroundColor(labelColor); chip.setTextColor(color); if (chip.getCloseIcon() != null) { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java index 047b6c270..6aa03b811 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java @@ -20,6 +20,7 @@ import androidx.viewpager2.widget.ViewPager2; import com.google.android.material.tabs.TabLayoutMediator; +import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogFilterBinding; import it.niedermann.nextcloud.deck.model.enums.EDueType; @@ -28,7 +29,6 @@ import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.getSecondaryForegroundColorDependingOnTheme; -import static it.niedermann.nextcloud.deck.util.ColorUtil.getContrastRatio; public class FilterDialogFragment extends BrandedDialogFragment { @@ -107,7 +107,7 @@ public class FilterDialogFragment extends BrandedDialogFragment { @Override public void applyBrand(int mainColor) { @ColorInt final int finalMainColor = getSecondaryForegroundColorDependingOnTheme(binding.tabLayout.getContext(), mainColor); - final boolean contrastRatioIsSufficient = getContrastRatio(mainColor, ContextCompat.getColor(binding.tabLayout.getContext(), R.color.primary)) > 1.7d; + final boolean contrastRatioIsSufficient = ColorUtil.INSTANCE.getContrastRatio(mainColor, ContextCompat.getColor(binding.tabLayout.getContext(), R.color.primary)) > 1.7d; binding.tabLayout.setSelectedTabIndicatorColor(contrastRatioIsSufficient ? mainColor : finalMainColor); indicator.setColorFilter(contrastRatioIsSufficient ? mainColor : finalMainColor, PorterDuff.Mode.SRC_ATOP); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterLabelsAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterLabelsAdapter.java index 1dbf89d61..39fb791be 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterLabelsAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterLabelsAdapter.java @@ -12,10 +12,10 @@ import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; +import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.ItemFilterLabelBinding; import it.niedermann.nextcloud.deck.model.Label; -import it.niedermann.nextcloud.deck.util.ColorUtil; @SuppressWarnings("WeakerAccess") public class FilterLabelsAdapter extends RecyclerView.Adapter<FilterLabelsAdapter.LabelViewHolder> { @@ -80,7 +80,7 @@ public class FilterLabelsAdapter extends RecyclerView.Adapter<FilterLabelsAdapte binding.label.setText(label.getTitle()); final int labelColor = label.getColor(); binding.label.setChipBackgroundColor(ColorStateList.valueOf(labelColor)); - final int color = ColorUtil.getForegroundColorForBackgroundColor(labelColor); + final int color = ColorUtil.INSTANCE.getForegroundColorForBackgroundColor(labelColor); binding.label.setTextColor(color); itemView.setSelected(selectedLabels.contains(label)); bindClickListener(label); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/labelchip/LabelChip.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/labelchip/LabelChip.java index 8980419b9..83853f0b2 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/labelchip/LabelChip.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/labelchip/LabelChip.java @@ -11,9 +11,9 @@ import androidx.annotation.Px; import com.google.android.flexbox.FlexboxLayout; import com.google.android.material.chip.Chip; +import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.model.Label; -import it.niedermann.nextcloud.deck.util.ColorUtil; @SuppressLint("ViewConstructor") public class LabelChip extends Chip { @@ -45,7 +45,7 @@ public class LabelChip extends Chip { int labelColor = label.getColor(); ColorStateList c = ColorStateList.valueOf(labelColor); setChipBackgroundColor(c); - setTextColor(ColorUtil.getForegroundColorForBackgroundColor(labelColor)); + setTextColor(ColorUtil.INSTANCE.getForegroundColorForBackgroundColor(labelColor)); } catch (IllegalArgumentException e) { DeckLog.logError(e); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/util/ColorUtil.java b/app/src/main/java/it/niedermann/nextcloud/deck/util/ColorUtil.java deleted file mode 100644 index c9a9fd922..000000000 --- a/app/src/main/java/it/niedermann/nextcloud/deck/util/ColorUtil.java +++ /dev/null @@ -1,186 +0,0 @@ -package it.niedermann.nextcloud.deck.util; - -import android.graphics.Color; - -import androidx.annotation.ColorInt; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.util.Pair; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -public final class ColorUtil { - - private static final Map<ColorPair, Boolean> CONTRAST_RATIO_SUFFICIENT_CACHE = new HashMap<>(); - private static final Map<Integer, Integer> FOREGROUND_CACHE = new HashMap<>(); - private static final Map<Integer, Boolean> IS_DARK_COLOR_CACHE = new HashMap<>(); - - private ColorUtil() { - } - - @ColorInt - public static int getForegroundColorForBackgroundColor(@ColorInt int color) { - Integer ret = FOREGROUND_CACHE.get(color); - if (ret == null) { - if (Color.TRANSPARENT == color) - ret = Color.BLACK; - else if (isColorDark(color)) - ret = Color.WHITE; - else - ret = Color.BLACK; - - FOREGROUND_CACHE.put(color, ret); - } - return ret; - } - - /** - * @return well formatted string starting with a hash followed by 6 hex numbers that is parsable by {@link Color#parseColor(String)}. - */ - public static String formatColorToParsableHexString(String input) { - if (input == null) { - throw new IllegalArgumentException("input color string is null"); - } - if (isParsableValidHexColorString(input)) { - return input; - } - final char[] chars = input.replaceAll("#", "").toCharArray(); - final StringBuilder sb = new StringBuilder(7).append("#"); - switch (chars.length) { - case 8: { // Strip alpha channel - sb.append(Arrays.copyOfRange(chars, 0, 6)); - break; - } - case 6: { // Default long - sb.append(chars); - break; - } - case 4: { // Strip alpha channel - for (char c : Arrays.copyOfRange(chars, 0, 3)) { - sb.append(c).append(c); - } - break; - } - case 3: { // Default short - for (char c : chars) { - sb.append(c).append(c); - } - break; - } - default: { - throw new IllegalArgumentException("unparsable color string: \"" + input + "\""); - } - } - final String formattedHexColor = sb.toString(); - if (isParsableValidHexColorString(formattedHexColor)) { - return formattedHexColor; - } else { - throw new IllegalArgumentException("\"" + input + "\" is not a valid color string. Result of tried normalizing: " + formattedHexColor); - } - } - - /** - * Checking for {@link Color#parseColor(String)} being able to parse the input is the important part because we don't know the implementation and rely on it to be able to parse the color. - * - * @return true, if the input starts with a hash followed by 6 characters of hex numbers and is parsable by {@link Color#parseColor(String)}. - */ - private static boolean isParsableValidHexColorString(@NonNull String input) { - try { - Color.parseColor(input); - return input.matches("#[a-fA-F0-9]{6}"); - } catch (Exception e) { - return false; - } - } - - public static boolean isColorDark(@ColorInt int color) { - Boolean ret = IS_DARK_COLOR_CACHE.get(color); - if (ret == null) { - ret = getBrightness(color) < 200; - IS_DARK_COLOR_CACHE.put(color, ret); - } - return ret; - } - - private static int getBrightness(@ColorInt int color) { - final int[] rgb = {Color.red(color), Color.green(color), Color.blue(color)}; - - return (int) Math.sqrt(rgb[0] * rgb[0] * .241 + rgb[1] - * rgb[1] * .691 + rgb[2] * rgb[2] * .068); - } - - // --------------------------------------------------- - // Based on https://github.com/LeaVerou/contrast-ratio - // --------------------------------------------------- - - public static boolean contrastRatioIsSufficient(@ColorInt int colorOne, @ColorInt int colorTwo) { - ColorPair key = new ColorPair(colorOne, colorTwo); - Boolean ret = CONTRAST_RATIO_SUFFICIENT_CACHE.get(key); - if (ret == null) { - ret = getContrastRatio(colorOne, colorTwo) > 3d; - CONTRAST_RATIO_SUFFICIENT_CACHE.put(key, ret); - return ret; - } - return ret; - } - - public static boolean contrastRatioIsSufficientBigAreas(@ColorInt int colorOne, @ColorInt int colorTwo) { - ColorPair key = new ColorPair(colorOne, colorTwo); - Boolean ret = CONTRAST_RATIO_SUFFICIENT_CACHE.get(key); - if (ret == null) { - ret = getContrastRatio(colorOne, colorTwo) > 1.47d; - CONTRAST_RATIO_SUFFICIENT_CACHE.put(key, ret); - return ret; - } - return ret; - } - - public static double getContrastRatio(@ColorInt int colorOne, @ColorInt int colorTwo) { - final double lum1 = getLuminanace(colorOne); - final double lum2 = getLuminanace(colorTwo); - final double brightest = Math.max(lum1, lum2); - final double darkest = Math.min(lum1, lum2); - return (brightest + 0.05) / (darkest + 0.05); - } - - private static double getLuminanace(@ColorInt int color) { - final int[] rgb = {Color.red(color), Color.green(color), Color.blue(color)}; - return getSubcolorLuminance(rgb[0]) * 0.2126 + getSubcolorLuminance(rgb[1]) * 0.7152 + getSubcolorLuminance(rgb[2]) * 0.0722; - } - - private static double getSubcolorLuminance(@ColorInt int color) { - final double value = color / 255d; - return value <= 0.03928 - ? value / 12.92 - : Math.pow((value + 0.055) / 1.055, 2.4); - } - - private static class ColorPair extends Pair<Integer, Integer> { - - private ColorPair(@Nullable Integer first, @Nullable Integer second) { - super(first, second); - } - - @SuppressWarnings({"EqualsWhichDoesntCheckParameterClass", "NumberEquality"}) - @Override - public boolean equals(Object o) { - final ColorPair colorPair = (ColorPair) o; - if (first != colorPair.first) return false; - return second == colorPair.second; - } - - @SuppressWarnings("ConstantConditions") - @Override - public int hashCode() { - int result = first; - result = 31 * result + second; - return result; - } - } - - public static String intColorToHexString(int color) { - return String.format("%06X", (0xFFFFFF & color)); - } -} diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/util/DeckColorUtil.java b/app/src/main/java/it/niedermann/nextcloud/deck/util/DeckColorUtil.java new file mode 100644 index 000000000..e01d0ec29 --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/util/DeckColorUtil.java @@ -0,0 +1,59 @@ +package it.niedermann.nextcloud.deck.util; + +import androidx.annotation.ColorInt; +import androidx.annotation.Nullable; +import androidx.core.util.Pair; + +import java.util.HashMap; +import java.util.Map; + +import it.niedermann.android.util.ColorUtil; + +public final class DeckColorUtil { + + private static final Map<ColorPair, Boolean> CONTRAST_RATIO_SUFFICIENT_CACHE = new HashMap<>(); + + public static boolean contrastRatioIsSufficient(@ColorInt int colorOne, @ColorInt int colorTwo) { + ColorPair key = new ColorPair(colorOne, colorTwo); + Boolean ret = CONTRAST_RATIO_SUFFICIENT_CACHE.get(key); + if (ret == null) { + ret = ColorUtil.INSTANCE.getContrastRatio(colorOne, colorTwo) > 3d; + CONTRAST_RATIO_SUFFICIENT_CACHE.put(key, ret); + return ret; + } + return ret; + } + + public static boolean contrastRatioIsSufficientBigAreas(@ColorInt int colorOne, @ColorInt int colorTwo) { + ColorPair key = new ColorPair(colorOne, colorTwo); + Boolean ret = CONTRAST_RATIO_SUFFICIENT_CACHE.get(key); + if (ret == null) { + ret = ColorUtil.INSTANCE.getContrastRatio(colorOne, colorTwo) > 1.47d; + CONTRAST_RATIO_SUFFICIENT_CACHE.put(key, ret); + return ret; + } + return ret; + } + + private static class ColorPair extends Pair<Integer, Integer> { + + private ColorPair(@Nullable Integer first, @Nullable Integer second) { + super(first, second); + } + + @SuppressWarnings({"EqualsWhichDoesntCheckParameterClass", "NumberEquality"}) + @Override + public boolean equals(Object o) { + final ColorPair colorPair = (ColorPair) o; + if (first != colorPair.first) return false; + return second == colorPair.second; + } + + @Override + public int hashCode() { + int result = first; + result = 31 * result + second; + return result; + } + } +} |