diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt index 845049650b35b65044c78022057737167ce27c81..c7029ec9b6f22ace4790301424e727ac344132d5 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt @@ -18,6 +18,7 @@ import de.kuschku.quasseldroid.settings.MessageSettings import de.kuschku.quasseldroid.ui.chat.info.channel.ChannelInfoActivity import de.kuschku.quasseldroid.ui.chat.info.user.UserInfoActivity import de.kuschku.quasseldroid.util.helper.combineLatest +import de.kuschku.quasseldroid.util.helper.styledAttributes import de.kuschku.quasseldroid.util.helper.toLiveData import de.kuschku.quasseldroid.util.helper.visibleIf import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer @@ -68,6 +69,42 @@ class ToolbarFragment : ServiceBoundFragment() { val view = inflater.inflate(R.layout.fragment_toolbar, container, false) ButterKnife.bind(this, view) + val mircColors = requireContext().theme.styledAttributes( + R.attr.mircColor00, R.attr.mircColor01, R.attr.mircColor02, R.attr.mircColor03, + R.attr.mircColor04, R.attr.mircColor05, R.attr.mircColor06, R.attr.mircColor07, + R.attr.mircColor08, R.attr.mircColor09, R.attr.mircColor10, R.attr.mircColor11, + R.attr.mircColor12, R.attr.mircColor13, R.attr.mircColor14, R.attr.mircColor15, + R.attr.mircColor16, R.attr.mircColor17, R.attr.mircColor18, R.attr.mircColor19, + R.attr.mircColor20, R.attr.mircColor21, R.attr.mircColor22, R.attr.mircColor23, + R.attr.mircColor24, R.attr.mircColor25, R.attr.mircColor26, R.attr.mircColor27, + R.attr.mircColor28, R.attr.mircColor29, R.attr.mircColor30, R.attr.mircColor31, + R.attr.mircColor32, R.attr.mircColor33, R.attr.mircColor34, R.attr.mircColor35, + R.attr.mircColor36, R.attr.mircColor37, R.attr.mircColor38, R.attr.mircColor39, + R.attr.mircColor40, R.attr.mircColor41, R.attr.mircColor42, R.attr.mircColor43, + R.attr.mircColor44, R.attr.mircColor45, R.attr.mircColor46, R.attr.mircColor47, + R.attr.mircColor48, R.attr.mircColor49, R.attr.mircColor50, R.attr.mircColor51, + R.attr.mircColor52, R.attr.mircColor53, R.attr.mircColor54, R.attr.mircColor55, + R.attr.mircColor56, R.attr.mircColor57, R.attr.mircColor58, R.attr.mircColor59, + R.attr.mircColor60, R.attr.mircColor61, R.attr.mircColor62, R.attr.mircColor63, + R.attr.mircColor64, R.attr.mircColor65, R.attr.mircColor66, R.attr.mircColor67, + R.attr.mircColor68, R.attr.mircColor69, R.attr.mircColor70, R.attr.mircColor71, + R.attr.mircColor72, R.attr.mircColor73, R.attr.mircColor74, R.attr.mircColor75, + R.attr.mircColor76, R.attr.mircColor77, R.attr.mircColor78, R.attr.mircColor79, + R.attr.mircColor80, R.attr.mircColor81, R.attr.mircColor82, R.attr.mircColor83, + R.attr.mircColor84, R.attr.mircColor85, R.attr.mircColor86, R.attr.mircColor87, + R.attr.mircColor88, R.attr.mircColor89, R.attr.mircColor90, R.attr.mircColor91, + R.attr.mircColor92, R.attr.mircColor93, R.attr.mircColor94, R.attr.mircColor95, + R.attr.mircColor96, R.attr.mircColor97, R.attr.mircColor98 + ) { + IntArray(99) { + getColor(it, 0) + } + } + + fun colorizeDescription(description: String?) = ircFormatDeserializer.formatString( + mircColors, description, messageSettings.colorizeMirc + ) + combineLatest(viewModel.bufferData, viewModel.isSecure, viewModel.lag).toLiveData() .observe(this, Observer { if (it != null) { @@ -113,8 +150,4 @@ class ToolbarFragment : ServiceBoundFragment() { return view } - - private fun colorizeDescription(description: String?) = ircFormatDeserializer.formatString( - requireContext(), description, messageSettings.colorizeMirc - ) } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt index de4aa99e0905479fc7f43a378f09b50de9bb6761..236aa7b559d519555cb0e1bb45aaee1cfe9d56ba 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt @@ -23,6 +23,7 @@ import de.kuschku.quasseldroid.persistence.QuasselDatabase import de.kuschku.quasseldroid.settings.AppearanceSettings import de.kuschku.quasseldroid.settings.MessageSettings import de.kuschku.quasseldroid.util.helper.combineLatest +import de.kuschku.quasseldroid.util.helper.styledAttributes import de.kuschku.quasseldroid.util.helper.toLiveData import de.kuschku.quasseldroid.util.helper.zip import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer @@ -177,6 +178,38 @@ class BufferViewConfigFragment : ServiceBoundFragment() { val view = inflater.inflate(R.layout.fragment_chat_list, container, false) ButterKnife.bind(this, view) + val mircColors = requireContext().theme.styledAttributes( + R.attr.mircColor00, R.attr.mircColor01, R.attr.mircColor02, R.attr.mircColor03, + R.attr.mircColor04, R.attr.mircColor05, R.attr.mircColor06, R.attr.mircColor07, + R.attr.mircColor08, R.attr.mircColor09, R.attr.mircColor10, R.attr.mircColor11, + R.attr.mircColor12, R.attr.mircColor13, R.attr.mircColor14, R.attr.mircColor15, + R.attr.mircColor16, R.attr.mircColor17, R.attr.mircColor18, R.attr.mircColor19, + R.attr.mircColor20, R.attr.mircColor21, R.attr.mircColor22, R.attr.mircColor23, + R.attr.mircColor24, R.attr.mircColor25, R.attr.mircColor26, R.attr.mircColor27, + R.attr.mircColor28, R.attr.mircColor29, R.attr.mircColor30, R.attr.mircColor31, + R.attr.mircColor32, R.attr.mircColor33, R.attr.mircColor34, R.attr.mircColor35, + R.attr.mircColor36, R.attr.mircColor37, R.attr.mircColor38, R.attr.mircColor39, + R.attr.mircColor40, R.attr.mircColor41, R.attr.mircColor42, R.attr.mircColor43, + R.attr.mircColor44, R.attr.mircColor45, R.attr.mircColor46, R.attr.mircColor47, + R.attr.mircColor48, R.attr.mircColor49, R.attr.mircColor50, R.attr.mircColor51, + R.attr.mircColor52, R.attr.mircColor53, R.attr.mircColor54, R.attr.mircColor55, + R.attr.mircColor56, R.attr.mircColor57, R.attr.mircColor58, R.attr.mircColor59, + R.attr.mircColor60, R.attr.mircColor61, R.attr.mircColor62, R.attr.mircColor63, + R.attr.mircColor64, R.attr.mircColor65, R.attr.mircColor66, R.attr.mircColor67, + R.attr.mircColor68, R.attr.mircColor69, R.attr.mircColor70, R.attr.mircColor71, + R.attr.mircColor72, R.attr.mircColor73, R.attr.mircColor74, R.attr.mircColor75, + R.attr.mircColor76, R.attr.mircColor77, R.attr.mircColor78, R.attr.mircColor79, + R.attr.mircColor80, R.attr.mircColor81, R.attr.mircColor82, R.attr.mircColor83, + R.attr.mircColor84, R.attr.mircColor85, R.attr.mircColor86, R.attr.mircColor87, + R.attr.mircColor88, R.attr.mircColor89, R.attr.mircColor90, R.attr.mircColor91, + R.attr.mircColor92, R.attr.mircColor93, R.attr.mircColor94, R.attr.mircColor95, + R.attr.mircColor96, R.attr.mircColor97, R.attr.mircColor98 + ) { + IntArray(99) { + getColor(it, 0) + } + } + val adapter = BufferViewConfigAdapter() viewModel.bufferViewConfigs.switchMap { combineLatest(it.map(BufferViewConfig::liveUpdates)) @@ -220,7 +253,7 @@ class BufferViewConfigFragment : ServiceBoundFragment() { props.copy( activity = activity, description = ircFormatDeserializer.formatString( - requireContext(), + mircColors, props.description.toString(), colorize = messageSettings.colorizeMirc ), diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt index 87b4a5f353bfe640b7fd53048b1a7c949d199dca..052e9aec1d29ad5e79a19616fd05fd3a0d3f21cb 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt @@ -14,10 +14,7 @@ import de.kuschku.libquassel.quassel.syncables.IrcChannel import de.kuschku.libquassel.util.helpers.value import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.ui.chat.topic.TopicActivity -import de.kuschku.quasseldroid.util.helper.combineLatest -import de.kuschku.quasseldroid.util.helper.retint -import de.kuschku.quasseldroid.util.helper.setTooltip -import de.kuschku.quasseldroid.util.helper.toLiveData +import de.kuschku.quasseldroid.util.helper.* import de.kuschku.quasseldroid.util.irc.format.ContentFormatter import de.kuschku.quasseldroid.util.service.ServiceBoundFragment import de.kuschku.quasseldroid.util.ui.LinkLongClickMenuHelper @@ -52,6 +49,38 @@ class ChannelInfoFragment : ServiceBoundFragment() { val view = inflater.inflate(R.layout.fragment_info_channel, container, false) ButterKnife.bind(this, view) + val mircColors = requireContext().theme.styledAttributes( + R.attr.mircColor00, R.attr.mircColor01, R.attr.mircColor02, R.attr.mircColor03, + R.attr.mircColor04, R.attr.mircColor05, R.attr.mircColor06, R.attr.mircColor07, + R.attr.mircColor08, R.attr.mircColor09, R.attr.mircColor10, R.attr.mircColor11, + R.attr.mircColor12, R.attr.mircColor13, R.attr.mircColor14, R.attr.mircColor15, + R.attr.mircColor16, R.attr.mircColor17, R.attr.mircColor18, R.attr.mircColor19, + R.attr.mircColor20, R.attr.mircColor21, R.attr.mircColor22, R.attr.mircColor23, + R.attr.mircColor24, R.attr.mircColor25, R.attr.mircColor26, R.attr.mircColor27, + R.attr.mircColor28, R.attr.mircColor29, R.attr.mircColor30, R.attr.mircColor31, + R.attr.mircColor32, R.attr.mircColor33, R.attr.mircColor34, R.attr.mircColor35, + R.attr.mircColor36, R.attr.mircColor37, R.attr.mircColor38, R.attr.mircColor39, + R.attr.mircColor40, R.attr.mircColor41, R.attr.mircColor42, R.attr.mircColor43, + R.attr.mircColor44, R.attr.mircColor45, R.attr.mircColor46, R.attr.mircColor47, + R.attr.mircColor48, R.attr.mircColor49, R.attr.mircColor50, R.attr.mircColor51, + R.attr.mircColor52, R.attr.mircColor53, R.attr.mircColor54, R.attr.mircColor55, + R.attr.mircColor56, R.attr.mircColor57, R.attr.mircColor58, R.attr.mircColor59, + R.attr.mircColor60, R.attr.mircColor61, R.attr.mircColor62, R.attr.mircColor63, + R.attr.mircColor64, R.attr.mircColor65, R.attr.mircColor66, R.attr.mircColor67, + R.attr.mircColor68, R.attr.mircColor69, R.attr.mircColor70, R.attr.mircColor71, + R.attr.mircColor72, R.attr.mircColor73, R.attr.mircColor74, R.attr.mircColor75, + R.attr.mircColor76, R.attr.mircColor77, R.attr.mircColor78, R.attr.mircColor79, + R.attr.mircColor80, R.attr.mircColor81, R.attr.mircColor82, R.attr.mircColor83, + R.attr.mircColor84, R.attr.mircColor85, R.attr.mircColor86, R.attr.mircColor87, + R.attr.mircColor88, R.attr.mircColor89, R.attr.mircColor90, R.attr.mircColor91, + R.attr.mircColor92, R.attr.mircColor93, R.attr.mircColor94, R.attr.mircColor95, + R.attr.mircColor96, R.attr.mircColor97, R.attr.mircColor98 + ) { + IntArray(99) { + getColor(it, 0) + } + } + val openBuffer = arguments?.getBoolean("openBuffer") combineLatest(viewModel.session, viewModel.networks).map { (sessionOptional, networks) -> @@ -70,7 +99,7 @@ class ChannelInfoFragment : ServiceBoundFragment() { }.switchMap(IrcChannel::updates).toLiveData().observe(this, Observer { channel -> if (channel != null) { name.text = channel.name() - topic.text = contentFormatter.format(requireContext(), channel.topic()) + topic.text = contentFormatter.format(mircColors, channel.topic()) actionEditTopic.setOnClickListener { TopicActivity.launch(requireContext(), buffer = arguments?.getInt("bufferId") ?: -1) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt index 9bc92d7103fe6bab2efc53f44e1726af211f4c2a..178980a7386ceccc5d54142173ab07f3a519afb4 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt @@ -104,6 +104,38 @@ class UserInfoFragment : ServiceBoundFragment() { } } + val mircColors = requireContext().theme.styledAttributes( + R.attr.mircColor00, R.attr.mircColor01, R.attr.mircColor02, R.attr.mircColor03, + R.attr.mircColor04, R.attr.mircColor05, R.attr.mircColor06, R.attr.mircColor07, + R.attr.mircColor08, R.attr.mircColor09, R.attr.mircColor10, R.attr.mircColor11, + R.attr.mircColor12, R.attr.mircColor13, R.attr.mircColor14, R.attr.mircColor15, + R.attr.mircColor16, R.attr.mircColor17, R.attr.mircColor18, R.attr.mircColor19, + R.attr.mircColor20, R.attr.mircColor21, R.attr.mircColor22, R.attr.mircColor23, + R.attr.mircColor24, R.attr.mircColor25, R.attr.mircColor26, R.attr.mircColor27, + R.attr.mircColor28, R.attr.mircColor29, R.attr.mircColor30, R.attr.mircColor31, + R.attr.mircColor32, R.attr.mircColor33, R.attr.mircColor34, R.attr.mircColor35, + R.attr.mircColor36, R.attr.mircColor37, R.attr.mircColor38, R.attr.mircColor39, + R.attr.mircColor40, R.attr.mircColor41, R.attr.mircColor42, R.attr.mircColor43, + R.attr.mircColor44, R.attr.mircColor45, R.attr.mircColor46, R.attr.mircColor47, + R.attr.mircColor48, R.attr.mircColor49, R.attr.mircColor50, R.attr.mircColor51, + R.attr.mircColor52, R.attr.mircColor53, R.attr.mircColor54, R.attr.mircColor55, + R.attr.mircColor56, R.attr.mircColor57, R.attr.mircColor58, R.attr.mircColor59, + R.attr.mircColor60, R.attr.mircColor61, R.attr.mircColor62, R.attr.mircColor63, + R.attr.mircColor64, R.attr.mircColor65, R.attr.mircColor66, R.attr.mircColor67, + R.attr.mircColor68, R.attr.mircColor69, R.attr.mircColor70, R.attr.mircColor71, + R.attr.mircColor72, R.attr.mircColor73, R.attr.mircColor74, R.attr.mircColor75, + R.attr.mircColor76, R.attr.mircColor77, R.attr.mircColor78, R.attr.mircColor79, + R.attr.mircColor80, R.attr.mircColor81, R.attr.mircColor82, R.attr.mircColor83, + R.attr.mircColor84, R.attr.mircColor85, R.attr.mircColor86, R.attr.mircColor87, + R.attr.mircColor88, R.attr.mircColor89, R.attr.mircColor90, R.attr.mircColor91, + R.attr.mircColor92, R.attr.mircColor93, R.attr.mircColor94, R.attr.mircColor95, + R.attr.mircColor96, R.attr.mircColor97, R.attr.mircColor98 + ) { + IntArray(99) { + getColor(it, 0) + } + } + val networkId = arguments?.getInt("networkId") val nickName = arguments?.getString("nick") combineLatest(viewModel.session, viewModel.networks).switchMap { (sessionOptional, networks) -> @@ -134,7 +166,7 @@ class UserInfoFragment : ServiceBoundFragment() { ) nick.text = user.nick() - realName.text = contentFormatter.format(requireContext(), user.realName()) + realName.text = contentFormatter.format(mircColors, user.realName()) realName.visibleIf(user.realName().isNotBlank() && user.realName() != user.nick()) awayMessage.text = user.awayMessage() diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt index bafac822081ca1fe1fc10d06eeb5b1141c72b3ef..40a96701c5b96344b64c2df1f562519d4b04e3a2 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt @@ -44,6 +44,38 @@ class AutoCompleteHelper( IntArray(length()) { getColor(it, 0) } } + val mircColors = activity.theme.styledAttributes( + R.attr.mircColor00, R.attr.mircColor01, R.attr.mircColor02, R.attr.mircColor03, + R.attr.mircColor04, R.attr.mircColor05, R.attr.mircColor06, R.attr.mircColor07, + R.attr.mircColor08, R.attr.mircColor09, R.attr.mircColor10, R.attr.mircColor11, + R.attr.mircColor12, R.attr.mircColor13, R.attr.mircColor14, R.attr.mircColor15, + R.attr.mircColor16, R.attr.mircColor17, R.attr.mircColor18, R.attr.mircColor19, + R.attr.mircColor20, R.attr.mircColor21, R.attr.mircColor22, R.attr.mircColor23, + R.attr.mircColor24, R.attr.mircColor25, R.attr.mircColor26, R.attr.mircColor27, + R.attr.mircColor28, R.attr.mircColor29, R.attr.mircColor30, R.attr.mircColor31, + R.attr.mircColor32, R.attr.mircColor33, R.attr.mircColor34, R.attr.mircColor35, + R.attr.mircColor36, R.attr.mircColor37, R.attr.mircColor38, R.attr.mircColor39, + R.attr.mircColor40, R.attr.mircColor41, R.attr.mircColor42, R.attr.mircColor43, + R.attr.mircColor44, R.attr.mircColor45, R.attr.mircColor46, R.attr.mircColor47, + R.attr.mircColor48, R.attr.mircColor49, R.attr.mircColor50, R.attr.mircColor51, + R.attr.mircColor52, R.attr.mircColor53, R.attr.mircColor54, R.attr.mircColor55, + R.attr.mircColor56, R.attr.mircColor57, R.attr.mircColor58, R.attr.mircColor59, + R.attr.mircColor60, R.attr.mircColor61, R.attr.mircColor62, R.attr.mircColor63, + R.attr.mircColor64, R.attr.mircColor65, R.attr.mircColor66, R.attr.mircColor67, + R.attr.mircColor68, R.attr.mircColor69, R.attr.mircColor70, R.attr.mircColor71, + R.attr.mircColor72, R.attr.mircColor73, R.attr.mircColor74, R.attr.mircColor75, + R.attr.mircColor76, R.attr.mircColor77, R.attr.mircColor78, R.attr.mircColor79, + R.attr.mircColor80, R.attr.mircColor81, R.attr.mircColor82, R.attr.mircColor83, + R.attr.mircColor84, R.attr.mircColor85, R.attr.mircColor86, R.attr.mircColor87, + R.attr.mircColor88, R.attr.mircColor89, R.attr.mircColor90, R.attr.mircColor91, + R.attr.mircColor92, R.attr.mircColor93, R.attr.mircColor94, R.attr.mircColor95, + R.attr.mircColor96, R.attr.mircColor97, R.attr.mircColor98 + ) { + IntArray(99) { + getColor(it, 0) + } + } + private val avatarSize = activity.resources.getDimensionPixelSize(R.dimen.avatar_size) init { @@ -89,7 +121,7 @@ class AutoCompleteHelper( it.modes.substring(0, Math.min(it.modes.length, 1)) }, realname = ircFormatDeserializer.formatString( - activity, it.realname.toString(), messageSettings.colorizeMirc + mircColors, it.realname.toString(), messageSettings.colorizeMirc ) ) } else { diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt index 3c28394720beb6098c6c6a8ca383f401d38962ee..19d19b30e35b51ea14a529a22963558d9791c3ca 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt @@ -82,6 +82,46 @@ class ChatlineFragment : ServiceBoundFragment() { val view = inflater.inflate(R.layout.fragment_chatline, container, false) ButterKnife.bind(this, view) + val mircColors = requireContext().theme.styledAttributes( + R.attr.mircColor00, R.attr.mircColor01, R.attr.mircColor02, R.attr.mircColor03, + R.attr.mircColor04, R.attr.mircColor05, R.attr.mircColor06, R.attr.mircColor07, + R.attr.mircColor08, R.attr.mircColor09, R.attr.mircColor10, R.attr.mircColor11, + R.attr.mircColor12, R.attr.mircColor13, R.attr.mircColor14, R.attr.mircColor15, + R.attr.mircColor16, R.attr.mircColor17, R.attr.mircColor18, R.attr.mircColor19, + R.attr.mircColor20, R.attr.mircColor21, R.attr.mircColor22, R.attr.mircColor23, + R.attr.mircColor24, R.attr.mircColor25, R.attr.mircColor26, R.attr.mircColor27, + R.attr.mircColor28, R.attr.mircColor29, R.attr.mircColor30, R.attr.mircColor31, + R.attr.mircColor32, R.attr.mircColor33, R.attr.mircColor34, R.attr.mircColor35, + R.attr.mircColor36, R.attr.mircColor37, R.attr.mircColor38, R.attr.mircColor39, + R.attr.mircColor40, R.attr.mircColor41, R.attr.mircColor42, R.attr.mircColor43, + R.attr.mircColor44, R.attr.mircColor45, R.attr.mircColor46, R.attr.mircColor47, + R.attr.mircColor48, R.attr.mircColor49, R.attr.mircColor50, R.attr.mircColor51, + R.attr.mircColor52, R.attr.mircColor53, R.attr.mircColor54, R.attr.mircColor55, + R.attr.mircColor56, R.attr.mircColor57, R.attr.mircColor58, R.attr.mircColor59, + R.attr.mircColor60, R.attr.mircColor61, R.attr.mircColor62, R.attr.mircColor63, + R.attr.mircColor64, R.attr.mircColor65, R.attr.mircColor66, R.attr.mircColor67, + R.attr.mircColor68, R.attr.mircColor69, R.attr.mircColor70, R.attr.mircColor71, + R.attr.mircColor72, R.attr.mircColor73, R.attr.mircColor74, R.attr.mircColor75, + R.attr.mircColor76, R.attr.mircColor77, R.attr.mircColor78, R.attr.mircColor79, + R.attr.mircColor80, R.attr.mircColor81, R.attr.mircColor82, R.attr.mircColor83, + R.attr.mircColor84, R.attr.mircColor85, R.attr.mircColor86, R.attr.mircColor87, + R.attr.mircColor88, R.attr.mircColor89, R.attr.mircColor90, R.attr.mircColor91, + R.attr.mircColor92, R.attr.mircColor93, R.attr.mircColor94, R.attr.mircColor95, + R.attr.mircColor96, R.attr.mircColor97, R.attr.mircColor98 + ) { + IntArray(99) { + getColor(it, 0) + } + } + + val mircColorMap = mircColors.take(16).mapIndexed { index: Int, color: Int -> + color to index + }.toMap() + + val colorForegroundMirc = requireContext().theme.styledAttributes(R.attr.colorForegroundMirc) { + getColor(0, 0) + } + val editorViewModel = ViewModelProviders.of(this).get(EditorViewModel::class.java) editorViewModel.quasselViewModel.onNext(viewModel) @@ -128,7 +168,9 @@ class ChatlineFragment : ServiceBoundFragment() { fun send() { if (chatline.text.isNotBlank()) { val lines = chatline.text.lineSequence().map { - it.toString() to ircFormatSerializer.toEscapeCodes(SpannableString(it)) + it.toString() to ircFormatSerializer.toEscapeCodes(colorForegroundMirc, + mircColorMap, + SpannableString(it)) } viewModel.session { sessionOptional -> diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt index b4e9e903ec14fdf9811b5255e672eb34e9944d13..199aa0ecb430e314a6460b2e3aa970c654033668 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt @@ -1,6 +1,7 @@ package de.kuschku.quasseldroid.ui.chat.messages import android.arch.paging.PagedListAdapter +import android.content.Context import android.support.v7.util.DiffUtil import android.support.v7.widget.RecyclerView import android.util.LruCache @@ -141,6 +142,10 @@ class MessageAdapter @Inject constructor( null } + fun updateColors(context: Context) { + messageRenderer.updateColors(context) + } + class QuasselMessageViewHolder( itemView: View, clickListener: ((FormattedMessage) -> Unit)? = null, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt index dc30cff52db1650f76b1363ceed72df3ad7e1108..9b609b96e336ac1503cd8e85b642cc106b9ec0b9 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt @@ -208,6 +208,8 @@ class MessageListFragment : ServiceBoundFragment() { messageList.layoutManager = linearLayoutManager messageList.itemAnimator = null + adapter.updateColors(requireContext()) + val senderColors = requireContext().theme.styledAttributes( R.attr.senderColor0, R.attr.senderColor1, R.attr.senderColor2, R.attr.senderColor3, R.attr.senderColor4, R.attr.senderColor5, R.attr.senderColor6, R.attr.senderColor7, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageRenderer.kt index 58b09710ee0ea7c4dad5cef808b2ead1ff1a19a7..13a80ff87d37fb28f504ac1dd05598842c7c7899 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageRenderer.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageRenderer.kt @@ -7,6 +7,8 @@ import de.kuschku.quasseldroid.persistence.QuasselDatabase import de.kuschku.quasseldroid.viewmodel.data.FormattedMessage interface MessageRenderer { + fun updateColors(context: Context) + @LayoutRes fun layout(type: Message_Type?, hasHighlight: Boolean, isFollowUp: Boolean, isEmoji: Boolean): Int diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt index 22cbf88c0258ce2be7de4f54cfe5078afe5e1e56..306a8207a4f184bd094e1409d00558fd84bdfbdb 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt @@ -58,6 +58,7 @@ class QuasselMessageRenderer @Inject constructor( else -> "HH:mm" } + private lateinit var mircColors: IntArray private lateinit var senderColors: IntArray private var selfColor: Int = 0 @@ -157,7 +158,39 @@ class QuasselMessageRenderer @Inject constructor( holder.bind(message, original, !isDayChange, !isDayChange) } - override fun render(context: Context, message: DisplayMessage): FormattedMessage { + override fun updateColors(context: Context) { + mircColors = context.theme.styledAttributes( + R.attr.mircColor00, R.attr.mircColor01, R.attr.mircColor02, R.attr.mircColor03, + R.attr.mircColor04, R.attr.mircColor05, R.attr.mircColor06, R.attr.mircColor07, + R.attr.mircColor08, R.attr.mircColor09, R.attr.mircColor10, R.attr.mircColor11, + R.attr.mircColor12, R.attr.mircColor13, R.attr.mircColor14, R.attr.mircColor15, + R.attr.mircColor16, R.attr.mircColor17, R.attr.mircColor18, R.attr.mircColor19, + R.attr.mircColor20, R.attr.mircColor21, R.attr.mircColor22, R.attr.mircColor23, + R.attr.mircColor24, R.attr.mircColor25, R.attr.mircColor26, R.attr.mircColor27, + R.attr.mircColor28, R.attr.mircColor29, R.attr.mircColor30, R.attr.mircColor31, + R.attr.mircColor32, R.attr.mircColor33, R.attr.mircColor34, R.attr.mircColor35, + R.attr.mircColor36, R.attr.mircColor37, R.attr.mircColor38, R.attr.mircColor39, + R.attr.mircColor40, R.attr.mircColor41, R.attr.mircColor42, R.attr.mircColor43, + R.attr.mircColor44, R.attr.mircColor45, R.attr.mircColor46, R.attr.mircColor47, + R.attr.mircColor48, R.attr.mircColor49, R.attr.mircColor50, R.attr.mircColor51, + R.attr.mircColor52, R.attr.mircColor53, R.attr.mircColor54, R.attr.mircColor55, + R.attr.mircColor56, R.attr.mircColor57, R.attr.mircColor58, R.attr.mircColor59, + R.attr.mircColor60, R.attr.mircColor61, R.attr.mircColor62, R.attr.mircColor63, + R.attr.mircColor64, R.attr.mircColor65, R.attr.mircColor66, R.attr.mircColor67, + R.attr.mircColor68, R.attr.mircColor69, R.attr.mircColor70, R.attr.mircColor71, + R.attr.mircColor72, R.attr.mircColor73, R.attr.mircColor74, R.attr.mircColor75, + R.attr.mircColor76, R.attr.mircColor77, R.attr.mircColor78, R.attr.mircColor79, + R.attr.mircColor80, R.attr.mircColor81, R.attr.mircColor82, R.attr.mircColor83, + R.attr.mircColor84, R.attr.mircColor85, R.attr.mircColor86, R.attr.mircColor87, + R.attr.mircColor88, R.attr.mircColor89, R.attr.mircColor90, R.attr.mircColor91, + R.attr.mircColor92, R.attr.mircColor93, R.attr.mircColor94, R.attr.mircColor95, + R.attr.mircColor96, R.attr.mircColor97, R.attr.mircColor98 + ) { + IntArray(99) { + getColor(it, 0) + } + } + context.theme.styledAttributes( R.attr.senderColor0, R.attr.senderColor1, R.attr.senderColor2, R.attr.senderColor3, R.attr.senderColor4, R.attr.senderColor5, R.attr.senderColor6, R.attr.senderColor7, @@ -170,7 +203,9 @@ class QuasselMessageRenderer @Inject constructor( } selfColor = getColor(16, 0) } + } + override fun render(context: Context, message: DisplayMessage): FormattedMessage { val avatarSize = TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_SP, messageSettings.textSize * 2.5f, @@ -181,7 +216,7 @@ class QuasselMessageRenderer @Inject constructor( val highlight = Message_Flag.of(message.content.flag).hasFlag(Message_Flag.Highlight) return when (Message_Type.of(message.content.type).enabledValues().firstOrNull()) { Message_Type.Plain -> { - val realName = contentFormatter.format(context, message.content.realName, highlight) + val realName = contentFormatter.format(mircColors, message.content.realName, highlight) val nick = SpannableStringBuilder().apply { append(formatPrefix(message.content.senderPrefixes, highlight)) append(formatNick( @@ -195,7 +230,7 @@ class QuasselMessageRenderer @Inject constructor( append(realName) } } - val content = contentFormatter.format(context, message.content.content, highlight) + val content = contentFormatter.format(mircColors, message.content.content, highlight) val nickName = HostmaskHelper.nick(message.content.sender) val senderColorIndex = IrcUserUtils.senderColor(nickName) val rawInitial = nickName.trimStart('-', '_', '[', ']', '{', '}', '|', '`', '^', '.', '\\') @@ -231,7 +266,7 @@ class QuasselMessageRenderer @Inject constructor( context.getString(R.string.message_format_action), formatPrefix(message.content.senderPrefixes, highlight), formatNick(message.content.sender, self, highlight, false), - contentFormatter.format(context, message.content.content, highlight) + contentFormatter.format(mircColors, message.content.content, highlight) ), isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, @@ -244,7 +279,7 @@ class QuasselMessageRenderer @Inject constructor( context.getString(R.string.message_format_notice), formatPrefix(message.content.senderPrefixes, highlight), formatNick(message.content.sender, self, highlight, false), - contentFormatter.format(context, message.content.content, highlight) + contentFormatter.format(mircColors, message.content.content, highlight) ), isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, @@ -318,7 +353,7 @@ class QuasselMessageRenderer @Inject constructor( self, highlight, messageSettings.showHostmaskActions), - contentFormatter.format(context, message.content.content, highlight) + contentFormatter.format(mircColors, message.content.content, highlight) ) }, isMarkerLine = message.isMarkerLine, @@ -342,7 +377,7 @@ class QuasselMessageRenderer @Inject constructor( self, highlight, messageSettings.showHostmaskActions), - contentFormatter.format(context, message.content.content, highlight) + contentFormatter.format(mircColors, message.content.content, highlight) ) }, isMarkerLine = message.isMarkerLine, @@ -373,7 +408,7 @@ class QuasselMessageRenderer @Inject constructor( self, highlight, messageSettings.showHostmaskActions), - contentFormatter.format(context, reason, highlight) + contentFormatter.format(mircColors, reason, highlight) ) }, isMarkerLine = message.isMarkerLine, @@ -405,7 +440,7 @@ class QuasselMessageRenderer @Inject constructor( self, highlight, messageSettings.showHostmaskActions), - contentFormatter.format(context, reason, highlight) + contentFormatter.format(mircColors, reason, highlight) ) }, isMarkerLine = message.isMarkerLine, @@ -450,7 +485,7 @@ class QuasselMessageRenderer @Inject constructor( Message_Type.Error -> FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), - combined = contentFormatter.format(context, message.content.content, highlight), + combined = contentFormatter.format(mircColors, message.content.content, highlight), isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected @@ -458,7 +493,7 @@ class QuasselMessageRenderer @Inject constructor( Message_Type.Topic -> FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), - combined = contentFormatter.format(context, message.content.content, highlight), + combined = contentFormatter.format(mircColors, message.content.content, highlight), isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt index 40b5c4861abda3c03cec2536d677e95d53604448..3e2e45167b6c606fa00082e983bc524ddb43a345 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt @@ -74,6 +74,38 @@ class NickListFragment : ServiceBoundFragment() { } } + val mircColors = requireContext().theme.styledAttributes( + R.attr.mircColor00, R.attr.mircColor01, R.attr.mircColor02, R.attr.mircColor03, + R.attr.mircColor04, R.attr.mircColor05, R.attr.mircColor06, R.attr.mircColor07, + R.attr.mircColor08, R.attr.mircColor09, R.attr.mircColor10, R.attr.mircColor11, + R.attr.mircColor12, R.attr.mircColor13, R.attr.mircColor14, R.attr.mircColor15, + R.attr.mircColor16, R.attr.mircColor17, R.attr.mircColor18, R.attr.mircColor19, + R.attr.mircColor20, R.attr.mircColor21, R.attr.mircColor22, R.attr.mircColor23, + R.attr.mircColor24, R.attr.mircColor25, R.attr.mircColor26, R.attr.mircColor27, + R.attr.mircColor28, R.attr.mircColor29, R.attr.mircColor30, R.attr.mircColor31, + R.attr.mircColor32, R.attr.mircColor33, R.attr.mircColor34, R.attr.mircColor35, + R.attr.mircColor36, R.attr.mircColor37, R.attr.mircColor38, R.attr.mircColor39, + R.attr.mircColor40, R.attr.mircColor41, R.attr.mircColor42, R.attr.mircColor43, + R.attr.mircColor44, R.attr.mircColor45, R.attr.mircColor46, R.attr.mircColor47, + R.attr.mircColor48, R.attr.mircColor49, R.attr.mircColor50, R.attr.mircColor51, + R.attr.mircColor52, R.attr.mircColor53, R.attr.mircColor54, R.attr.mircColor55, + R.attr.mircColor56, R.attr.mircColor57, R.attr.mircColor58, R.attr.mircColor59, + R.attr.mircColor60, R.attr.mircColor61, R.attr.mircColor62, R.attr.mircColor63, + R.attr.mircColor64, R.attr.mircColor65, R.attr.mircColor66, R.attr.mircColor67, + R.attr.mircColor68, R.attr.mircColor69, R.attr.mircColor70, R.attr.mircColor71, + R.attr.mircColor72, R.attr.mircColor73, R.attr.mircColor74, R.attr.mircColor75, + R.attr.mircColor76, R.attr.mircColor77, R.attr.mircColor78, R.attr.mircColor79, + R.attr.mircColor80, R.attr.mircColor81, R.attr.mircColor82, R.attr.mircColor83, + R.attr.mircColor84, R.attr.mircColor85, R.attr.mircColor86, R.attr.mircColor87, + R.attr.mircColor88, R.attr.mircColor89, R.attr.mircColor90, R.attr.mircColor91, + R.attr.mircColor92, R.attr.mircColor93, R.attr.mircColor94, R.attr.mircColor95, + R.attr.mircColor96, R.attr.mircColor97, R.attr.mircColor98 + ) { + IntArray(99) { + getColor(it, 0) + } + } + val avatarSize = resources.getDimensionPixelSize(R.dimen.avatar_size) viewModel.nickData.toLiveData().observe(this, Observer { runInBackground { @@ -120,7 +152,7 @@ class NickListFragment : ServiceBoundFragment() { it.modes.substring(0, Math.min(it.modes.length, 1)) }, realname = ircFormatDeserializer.formatString( - requireContext(), it.realname.toString(), messageSettings.colorizeMirc + mircColors, it.realname.toString(), messageSettings.colorizeMirc ), avatarUrls = AvatarHelper.avatar(messageSettings, it, avatarSize) ) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt index c68b8e0c25eebbca7cdc77566827a90e5e0adbfe..4e1fdf20376cc842fa8f2ee40b8e65e31ed4ea58 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt @@ -18,6 +18,7 @@ import de.kuschku.quasseldroid.settings.MessageSettings import de.kuschku.quasseldroid.ui.chat.input.* import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment import de.kuschku.quasseldroid.util.helper.invoke +import de.kuschku.quasseldroid.util.helper.styledAttributes import de.kuschku.quasseldroid.util.helper.toLiveData import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer import de.kuschku.quasseldroid.util.irc.format.IrcFormatSerializer @@ -51,11 +52,55 @@ class TopicFragment : SettingsFragment(), SettingsFragment.Savable { private lateinit var editorHelper: EditorHelper + private lateinit var mircColorMap: Map<Int, Int> + + private var colorForegroundMirc: Int = 0 + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_topic, container, false) ButterKnife.bind(this, view) + val mircColors = requireContext().theme.styledAttributes( + R.attr.mircColor00, R.attr.mircColor01, R.attr.mircColor02, R.attr.mircColor03, + R.attr.mircColor04, R.attr.mircColor05, R.attr.mircColor06, R.attr.mircColor07, + R.attr.mircColor08, R.attr.mircColor09, R.attr.mircColor10, R.attr.mircColor11, + R.attr.mircColor12, R.attr.mircColor13, R.attr.mircColor14, R.attr.mircColor15, + R.attr.mircColor16, R.attr.mircColor17, R.attr.mircColor18, R.attr.mircColor19, + R.attr.mircColor20, R.attr.mircColor21, R.attr.mircColor22, R.attr.mircColor23, + R.attr.mircColor24, R.attr.mircColor25, R.attr.mircColor26, R.attr.mircColor27, + R.attr.mircColor28, R.attr.mircColor29, R.attr.mircColor30, R.attr.mircColor31, + R.attr.mircColor32, R.attr.mircColor33, R.attr.mircColor34, R.attr.mircColor35, + R.attr.mircColor36, R.attr.mircColor37, R.attr.mircColor38, R.attr.mircColor39, + R.attr.mircColor40, R.attr.mircColor41, R.attr.mircColor42, R.attr.mircColor43, + R.attr.mircColor44, R.attr.mircColor45, R.attr.mircColor46, R.attr.mircColor47, + R.attr.mircColor48, R.attr.mircColor49, R.attr.mircColor50, R.attr.mircColor51, + R.attr.mircColor52, R.attr.mircColor53, R.attr.mircColor54, R.attr.mircColor55, + R.attr.mircColor56, R.attr.mircColor57, R.attr.mircColor58, R.attr.mircColor59, + R.attr.mircColor60, R.attr.mircColor61, R.attr.mircColor62, R.attr.mircColor63, + R.attr.mircColor64, R.attr.mircColor65, R.attr.mircColor66, R.attr.mircColor67, + R.attr.mircColor68, R.attr.mircColor69, R.attr.mircColor70, R.attr.mircColor71, + R.attr.mircColor72, R.attr.mircColor73, R.attr.mircColor74, R.attr.mircColor75, + R.attr.mircColor76, R.attr.mircColor77, R.attr.mircColor78, R.attr.mircColor79, + R.attr.mircColor80, R.attr.mircColor81, R.attr.mircColor82, R.attr.mircColor83, + R.attr.mircColor84, R.attr.mircColor85, R.attr.mircColor86, R.attr.mircColor87, + R.attr.mircColor88, R.attr.mircColor89, R.attr.mircColor90, R.attr.mircColor91, + R.attr.mircColor92, R.attr.mircColor93, R.attr.mircColor94, R.attr.mircColor95, + R.attr.mircColor96, R.attr.mircColor97, R.attr.mircColor98 + ) { + IntArray(99) { + getColor(it, 0) + } + } + + mircColorMap = mircColors.take(16).mapIndexed { index: Int, color: Int -> + color to index + }.toMap() + + colorForegroundMirc = requireContext().theme.styledAttributes(R.attr.colorForegroundMirc) { + getColor(0, 0) + } + val editorViewModel = ViewModelProviders.of(this).get(EditorViewModel::class.java) editorViewModel.quasselViewModel.onNext(viewModel) @@ -93,7 +138,7 @@ class TopicFragment : SettingsFragment(), SettingsFragment.Savable { viewModel.bufferData.filter { it.info != null }.firstElement().toLiveData().observe(this, Observer { - chatline.setText(formatDeserializer.formatString(chatline.context, it?.description, true)) + chatline.setText(formatDeserializer.formatString(mircColors, it?.description, true)) }) return view @@ -104,7 +149,9 @@ class TopicFragment : SettingsFragment(), SettingsFragment.Savable { val session = sessionOptional.orNull() viewModel.buffer { bufferId -> session?.bufferSyncer?.bufferInfo(bufferId)?.also { bufferInfo -> - val topic = formatSerializer.toEscapeCodes(chatline.text) + val topic = formatSerializer.toEscapeCodes(colorForegroundMirc, + mircColorMap, + chatline.text) session.rpcHandler?.sendInput(bufferInfo, "/topic $topic") return true } diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/ContentFormatter.kt b/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/ContentFormatter.kt index 5bc19c0130e08dfae83c53d8fda26bb3b8f80cea..0a540246283eb0c1ed4f4716c7e2580c602f5393 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/ContentFormatter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/ContentFormatter.kt @@ -1,6 +1,5 @@ package de.kuschku.quasseldroid.util.irc.format -import android.content.Context import android.text.SpannableString import android.text.Spanned import android.text.TextPaint @@ -42,9 +41,9 @@ class ContentFormatter @Inject constructor( } } - fun format(context: Context, content: String, highlight: Boolean = false): CharSequence { + fun format(mircColors: IntArray, content: String, highlight: Boolean = false): CharSequence { val formattedText = ircFormatDeserializer.formatString( - context, content, messageSettings.colorizeMirc + mircColors, content, messageSettings.colorizeMirc ) val text = SpannableString(formattedText) diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/IrcFormatDeserializer.kt b/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/IrcFormatDeserializer.kt index e6957ebd525bd9a7a780e657136da724faf8f5b3..2fb160b6d19f5d23d5292faa95f3b4f34f80661b 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/IrcFormatDeserializer.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/IrcFormatDeserializer.kt @@ -1,10 +1,7 @@ package de.kuschku.quasseldroid.util.irc.format -import android.content.Context import android.text.SpannableStringBuilder import android.text.Spanned -import de.kuschku.quasseldroid.R -import de.kuschku.quasseldroid.util.helper.styledAttributes import de.kuschku.quasseldroid.util.irc.format.spans.* import javax.inject.Inject @@ -19,41 +16,9 @@ class IrcFormatDeserializer @Inject constructor() { * @param str mIRC formatted String * @return a CharSequence with Android’s span format representing the input string */ - fun formatString(context: Context, str: String?, colorize: Boolean): CharSequence { + fun formatString(mircColors: IntArray, str: String?, colorize: Boolean): CharSequence { if (str == null) return "" - val mircColors = context.theme.styledAttributes( - R.attr.mircColor00, R.attr.mircColor01, R.attr.mircColor02, R.attr.mircColor03, - R.attr.mircColor04, R.attr.mircColor05, R.attr.mircColor06, R.attr.mircColor07, - R.attr.mircColor08, R.attr.mircColor09, R.attr.mircColor10, R.attr.mircColor11, - R.attr.mircColor12, R.attr.mircColor13, R.attr.mircColor14, R.attr.mircColor15, - R.attr.mircColor16, R.attr.mircColor17, R.attr.mircColor18, R.attr.mircColor19, - R.attr.mircColor20, R.attr.mircColor21, R.attr.mircColor22, R.attr.mircColor23, - R.attr.mircColor24, R.attr.mircColor25, R.attr.mircColor26, R.attr.mircColor27, - R.attr.mircColor28, R.attr.mircColor29, R.attr.mircColor30, R.attr.mircColor31, - R.attr.mircColor32, R.attr.mircColor33, R.attr.mircColor34, R.attr.mircColor35, - R.attr.mircColor36, R.attr.mircColor37, R.attr.mircColor38, R.attr.mircColor39, - R.attr.mircColor40, R.attr.mircColor41, R.attr.mircColor42, R.attr.mircColor43, - R.attr.mircColor44, R.attr.mircColor45, R.attr.mircColor46, R.attr.mircColor47, - R.attr.mircColor48, R.attr.mircColor49, R.attr.mircColor50, R.attr.mircColor51, - R.attr.mircColor52, R.attr.mircColor53, R.attr.mircColor54, R.attr.mircColor55, - R.attr.mircColor56, R.attr.mircColor57, R.attr.mircColor58, R.attr.mircColor59, - R.attr.mircColor60, R.attr.mircColor61, R.attr.mircColor62, R.attr.mircColor63, - R.attr.mircColor64, R.attr.mircColor65, R.attr.mircColor66, R.attr.mircColor67, - R.attr.mircColor68, R.attr.mircColor69, R.attr.mircColor70, R.attr.mircColor71, - R.attr.mircColor72, R.attr.mircColor73, R.attr.mircColor74, R.attr.mircColor75, - R.attr.mircColor76, R.attr.mircColor77, R.attr.mircColor78, R.attr.mircColor79, - R.attr.mircColor80, R.attr.mircColor81, R.attr.mircColor82, R.attr.mircColor83, - R.attr.mircColor84, R.attr.mircColor85, R.attr.mircColor86, R.attr.mircColor87, - R.attr.mircColor88, R.attr.mircColor89, R.attr.mircColor90, R.attr.mircColor91, - R.attr.mircColor92, R.attr.mircColor93, R.attr.mircColor94, R.attr.mircColor95, - R.attr.mircColor96, R.attr.mircColor97, R.attr.mircColor98 - ) { - IntArray(99) { - getColor(it, 0) - } - } - val plainText = SpannableStringBuilder() var bold: FormatDescription<BoldIrcFormat>? = null var italic: FormatDescription<ItalicIrcFormat>? = null diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/IrcFormatSerializer.kt b/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/IrcFormatSerializer.kt index d5645dec04d69ca1f316b4ab6b04b085ed1ed436..77e591833ac0e5b06967992dc674748ab3181413 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/IrcFormatSerializer.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/IrcFormatSerializer.kt @@ -1,59 +1,22 @@ package de.kuschku.quasseldroid.util.irc.format -import android.content.Context import android.graphics.Typeface +import android.support.annotation.ColorInt import android.text.Spanned import android.text.style.* -import de.kuschku.quasseldroid.R -import de.kuschku.quasseldroid.util.helper.styledAttributes import java.util.* import javax.inject.Inject -class IrcFormatSerializer @Inject constructor(private val context: Context) { - val mircColors = context.theme.styledAttributes( - R.attr.mircColor00, R.attr.mircColor01, R.attr.mircColor02, R.attr.mircColor03, - R.attr.mircColor04, R.attr.mircColor05, R.attr.mircColor06, R.attr.mircColor07, - R.attr.mircColor08, R.attr.mircColor09, R.attr.mircColor10, R.attr.mircColor11, - R.attr.mircColor12, R.attr.mircColor13, R.attr.mircColor14, R.attr.mircColor15, - R.attr.mircColor16, R.attr.mircColor17, R.attr.mircColor18, R.attr.mircColor19, - R.attr.mircColor20, R.attr.mircColor21, R.attr.mircColor22, R.attr.mircColor23, - R.attr.mircColor24, R.attr.mircColor25, R.attr.mircColor26, R.attr.mircColor27, - R.attr.mircColor28, R.attr.mircColor29, R.attr.mircColor30, R.attr.mircColor31, - R.attr.mircColor32, R.attr.mircColor33, R.attr.mircColor34, R.attr.mircColor35, - R.attr.mircColor36, R.attr.mircColor37, R.attr.mircColor38, R.attr.mircColor39, - R.attr.mircColor40, R.attr.mircColor41, R.attr.mircColor42, R.attr.mircColor43, - R.attr.mircColor44, R.attr.mircColor45, R.attr.mircColor46, R.attr.mircColor47, - R.attr.mircColor48, R.attr.mircColor49, R.attr.mircColor50, R.attr.mircColor51, - R.attr.mircColor52, R.attr.mircColor53, R.attr.mircColor54, R.attr.mircColor55, - R.attr.mircColor56, R.attr.mircColor57, R.attr.mircColor58, R.attr.mircColor59, - R.attr.mircColor60, R.attr.mircColor61, R.attr.mircColor62, R.attr.mircColor63, - R.attr.mircColor64, R.attr.mircColor65, R.attr.mircColor66, R.attr.mircColor67, - R.attr.mircColor68, R.attr.mircColor69, R.attr.mircColor70, R.attr.mircColor71, - R.attr.mircColor72, R.attr.mircColor73, R.attr.mircColor74, R.attr.mircColor75, - R.attr.mircColor76, R.attr.mircColor77, R.attr.mircColor78, R.attr.mircColor79, - R.attr.mircColor80, R.attr.mircColor81, R.attr.mircColor82, R.attr.mircColor83, - R.attr.mircColor84, R.attr.mircColor85, R.attr.mircColor86, R.attr.mircColor87, - R.attr.mircColor88, R.attr.mircColor89, R.attr.mircColor90, R.attr.mircColor91, - R.attr.mircColor92, R.attr.mircColor93, R.attr.mircColor94, R.attr.mircColor95, - R.attr.mircColor96, R.attr.mircColor97, R.attr.mircColor98 - ) { - IntArray(99) { - getColor(it, 0) - } - } - - val mircColorMap = mircColors.take(16).mapIndexed { index: Int, color: Int -> - color to index - }.toMap() - - fun toEscapeCodes(text: Spanned): String { +class IrcFormatSerializer @Inject constructor() { + fun toEscapeCodes(@ColorInt colorForegroundMirc: Int, mircColorMap: Map<Int, Int>, + text: Spanned): String { val out = StringBuilder() - withinParagraph(out, text, 0, text.length) + withinParagraph(colorForegroundMirc, mircColorMap, out, text, 0, text.length) return out.toString() } - private fun withinParagraph(out: StringBuilder, text: Spanned, - start: Int, end: Int) { + private fun withinParagraph(@ColorInt colorForegroundMirc: Int, mircColorMap: Map<Int, Int>, + out: StringBuilder, text: Spanned, start: Int, end: Int) { fun writeBold() { out.append(CODE_BOLD) } @@ -78,12 +41,7 @@ class IrcFormatSerializer @Inject constructor(private val context: Context) { out.append(CODE_COLOR) if (foreground == null && background != null) { out.append( - String.format( - Locale.US, "%02d,%02d", - context.theme.styledAttributes(R.attr.colorForegroundMirc) { - getColor(0, 0) - }, background - ) + String.format(Locale.US, "%02d,%02d", colorForegroundMirc, background) ) } else if (background == null && foreground != null) { out.append(String.format(Locale.US, "%02d", foreground))