Theme mxid-based username colors

TODO for follow-up commit: same for mxid-based room colors (maybe with
an extra setting?)

Change-Id: I827bd967e615f20e12f205c0ae5b24a777e90d45
This commit is contained in:
SpiritCroc 2021-09-15 20:21:53 +02:00
parent fbfacc68a4
commit d87c03c505
7 changed files with 91 additions and 4 deletions

View File

@ -28,6 +28,18 @@
<attr name="user_color_pl_1" format="color" /> <attr name="user_color_pl_1" format="color" />
<attr name="user_color_pl_0" format="color" /> <attr name="user_color_pl_0" format="color" />
<attr name="user_color_hash_01" format="color" />
<attr name="user_color_hash_02" format="color" />
<attr name="user_color_hash_03" format="color" />
<attr name="user_color_hash_04" format="color" />
<attr name="user_color_hash_05" format="color" />
<attr name="user_color_hash_06" format="color" />
<attr name="user_color_hash_07" format="color" />
<attr name="user_color_hash_08" format="color" />
<attr name="room_color_hash_01" format="color" />
<attr name="room_color_hash_02" format="color" />
<attr name="room_color_hash_03" format="color" />
<attr name="verification_request_background" format="color" /> <attr name="verification_request_background" format="color" />
<attr name="conference_animation_from" format="color" /> <attr name="conference_animation_from" format="color" />
<attr name="conference_animation_to" format="color" /> <attr name="conference_animation_to" format="color" />

View File

@ -75,6 +75,14 @@
<color name="user_color_sc_pl_1">#03A9F4</color> <color name="user_color_sc_pl_1">#03A9F4</color>
<color name="user_color_sc_pl_0">#8bc34a</color> <color name="user_color_sc_pl_0">#8bc34a</color>
--> -->
<color name="user_color_sc_mxid_1">#4189c9</color>
<color name="user_color_sc_mxid_2">#aa43a7</color>
<color name="user_color_sc_mxid_3">#48a188</color>
<color name="user_color_sc_mxid_4">#b3526d</color>
<color name="user_color_sc_mxid_5">#be6a31</color>
<color name="user_color_sc_mxid_6">#299ea0</color>
<color name="user_color_sc_mxid_7">#5c57df</color>
<color name="user_color_sc_mxid_8">#69a011</color>
<!-- Code background colors --> <!-- Code background colors -->
<color name="code_background_sc">#121212</color> <color name="code_background_sc">#121212</color>

View File

@ -138,6 +138,17 @@
<item name="backgroundColorLight">@color/element_background_light</item> <item name="backgroundColorLight">@color/element_background_light</item>
<item name="conference_animation_from">@color/palette_element_green</item> <item name="conference_animation_from">@color/palette_element_green</item>
<item name="conference_animation_to">@color/join_conference_animated_color</item> <item name="conference_animation_to">@color/join_conference_animated_color</item>
<item name="user_color_hash_01">@color/element_name_01</item>
<item name="user_color_hash_02">@color/element_name_02</item>
<item name="user_color_hash_03">@color/element_name_03</item>
<item name="user_color_hash_04">@color/element_name_04</item>
<item name="user_color_hash_05">@color/element_name_05</item>
<item name="user_color_hash_06">@color/element_name_06</item>
<item name="user_color_hash_07">@color/element_name_07</item>
<item name="user_color_hash_08">@color/element_name_08</item>
<item name="room_color_hash_01">@color/element_room_01</item>
<item name="room_color_hash_02">@color/element_room_02</item>
<item name="room_color_hash_03">@color/element_room_03</item>
<item name="android:statusBarColor">@color/android_status_bar_background_dark</item> <item name="android:statusBarColor">@color/android_status_bar_background_dark</item>
<item name="android:navigationBarColor">@color/android_navigation_bar_background_dark</item> <item name="android:navigationBarColor">@color/android_navigation_bar_background_dark</item>

View File

@ -138,6 +138,17 @@
<item name="backgroundColorLight">@color/element_background_light</item> <item name="backgroundColorLight">@color/element_background_light</item>
<item name="conference_animation_from">@color/palette_element_green</item> <item name="conference_animation_from">@color/palette_element_green</item>
<item name="conference_animation_to">@color/join_conference_animated_color</item> <item name="conference_animation_to">@color/join_conference_animated_color</item>
<item name="user_color_hash_01">@color/element_name_01</item>
<item name="user_color_hash_02">@color/element_name_02</item>
<item name="user_color_hash_03">@color/element_name_03</item>
<item name="user_color_hash_04">@color/element_name_04</item>
<item name="user_color_hash_05">@color/element_name_05</item>
<item name="user_color_hash_06">@color/element_name_06</item>
<item name="user_color_hash_07">@color/element_name_07</item>
<item name="user_color_hash_08">@color/element_name_08</item>
<item name="room_color_hash_01">@color/element_room_01</item>
<item name="room_color_hash_02">@color/element_room_02</item>
<item name="room_color_hash_03">@color/element_room_03</item>
<!-- Use dark color, to have enough contrast with icons color. windowLightStatusBar is only available in API 23+ --> <!-- Use dark color, to have enough contrast with icons color. windowLightStatusBar is only available in API 23+ -->
<item name="android:statusBarColor">@color/android_status_bar_background_dark</item> <item name="android:statusBarColor">@color/android_status_bar_background_dark</item>

View File

@ -100,6 +100,14 @@
<item name="backgroundColorLight">@color/background_sc_light</item> <item name="backgroundColorLight">@color/background_sc_light</item>
<item name="conference_animation_from">?colorAccent</item> <item name="conference_animation_from">?colorAccent</item>
<item name="conference_animation_to">?colorAccentPale</item> <item name="conference_animation_to">?colorAccentPale</item>
<item name="user_color_hash_01">@color/user_color_sc_mxid_1</item>
<item name="user_color_hash_02">@color/user_color_sc_mxid_2</item>
<item name="user_color_hash_03">@color/user_color_sc_mxid_3</item>
<item name="user_color_hash_04">@color/user_color_sc_mxid_4</item>
<item name="user_color_hash_05">@color/user_color_sc_mxid_5</item>
<item name="user_color_hash_06">@color/user_color_sc_mxid_6</item>
<item name="user_color_hash_07">@color/user_color_sc_mxid_7</item>
<item name="user_color_hash_08">@color/user_color_sc_mxid_8</item>
<item name="android:statusBarColor">@color/background_black_sc</item> <item name="android:statusBarColor">@color/background_black_sc</item>
<item name="android:navigationBarColor">@color/background_black_sc</item> <item name="android:navigationBarColor">@color/background_black_sc</item>

View File

@ -99,6 +99,14 @@
<item name="backgroundColorLight">@color/background_sc_light</item> <item name="backgroundColorLight">@color/background_sc_light</item>
<item name="conference_animation_from">?colorAccent</item> <item name="conference_animation_from">?colorAccent</item>
<item name="conference_animation_to">?colorAccentPale</item> <item name="conference_animation_to">?colorAccentPale</item>
<item name="user_color_hash_01">@color/user_color_sc_mxid_1</item>
<item name="user_color_hash_02">@color/user_color_sc_mxid_2</item>
<item name="user_color_hash_03">@color/user_color_sc_mxid_3</item>
<item name="user_color_hash_04">@color/user_color_sc_mxid_4</item>
<item name="user_color_hash_05">@color/user_color_sc_mxid_5</item>
<item name="user_color_hash_06">@color/user_color_sc_mxid_6</item>
<item name="user_color_hash_07">@color/user_color_sc_mxid_7</item>
<item name="user_color_hash_08">@color/user_color_sc_mxid_8</item>
<item name="android:statusBarColor">@color/background_black_sc</item> <item name="android:statusBarColor">@color/background_black_sc</item>
<item name="android:navigationBarColor">@color/background_black_sc</item> <item name="android:navigationBarColor">@color/background_black_sc</item>

View File

@ -16,13 +16,13 @@
package im.vector.app.features.home.room.detail.timeline.helper package im.vector.app.features.home.room.detail.timeline.helper
import androidx.annotation.AttrRes
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.annotation.ColorRes import androidx.annotation.ColorRes
import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.resources.ColorProvider import im.vector.app.core.resources.ColorProvider
import im.vector.app.features.settings.VectorPreferences import im.vector.app.features.settings.VectorPreferences
import im.vector.app.features.themes.ThemeUtils
import org.matrix.android.sdk.api.util.MatrixItem import org.matrix.android.sdk.api.util.MatrixItem
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton import javax.inject.Singleton
@ -55,10 +55,10 @@ class MatrixItemColorProvider @Inject constructor(
} }
USER_COLORING_FROM_ID -> { USER_COLORING_FROM_ID -> {
return cache.getOrPut(matrixItem.id) { return cache.getOrPut(matrixItem.id) {
colorProvider.getColor( colorProvider.getColorFromAttribute(
when (matrixItem) { when (matrixItem) {
is MatrixItem.UserItem -> getColorFromUserId(matrixItem.id) is MatrixItem.UserItem -> getColorAttrFromUserId(matrixItem.id)
else -> getColorFromRoomId(matrixItem.id) else -> getColorAttrFromRoomId(matrixItem.id)
} }
) )
} }
@ -69,9 +69,37 @@ class MatrixItemColorProvider @Inject constructor(
} }
} }
@AttrRes
fun getColorAttrFromUserId(userId: String?): Int {
var hash = 0
userId?.toList()?.map { chr -> hash = (hash shl 5) - hash + chr.code }
return when (abs(hash) % 8) {
1 -> R.attr.user_color_hash_02
2 -> R.attr.user_color_hash_03
3 -> R.attr.user_color_hash_04
4 -> R.attr.user_color_hash_05
5 -> R.attr.user_color_hash_06
6 -> R.attr.user_color_hash_07
7 -> R.attr.user_color_hash_08
else -> R.attr.user_color_hash_01
}
}
@AttrRes
private fun getColorAttrFromRoomId(roomId: String?): Int {
return when ((roomId?.toList()?.sumOf { it.code } ?: 0) % 3) {
1 -> R.attr.room_color_hash_02
2 -> R.attr.room_color_hash_03
else -> R.attr.room_color_hash_01
}
}
companion object { companion object {
@ColorRes @ColorRes
@VisibleForTesting @VisibleForTesting
@Deprecated("Use getColorAttrFromUserId")
fun getColorFromUserId(userId: String?): Int { fun getColorFromUserId(userId: String?): Int {
var hash = 0 var hash = 0
@ -90,6 +118,7 @@ class MatrixItemColorProvider @Inject constructor(
} }
@ColorRes @ColorRes
@Deprecated("Use getColorAttrFromRoomId")
private fun getColorFromRoomId(roomId: String?): Int { private fun getColorFromRoomId(roomId: String?): Int {
return when ((roomId?.toList()?.sumOf { it.code } ?: 0) % 3) { return when ((roomId?.toList()?.sumOf { it.code } ?: 0) % 3) {
1 -> R.color.element_room_02 1 -> R.color.element_room_02