Skip to content
Snippets Groups Projects
Commit ca89fa4b authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Implement markerline display

parent 9090d941
No related branches found
No related tags found
No related merge requests found
Showing
with 252 additions and 114 deletions
......@@ -137,6 +137,7 @@ dependencies {
androidTestImplementation("com.android.support.test.espresso", "espresso-core", "3.0.1")
}
/*
tasks.withType(KotlinCompile::class.java) {
kotlinOptions {
freeCompilerArgs = listOf(
......@@ -145,6 +146,7 @@ tasks.withType(KotlinCompile::class.java) {
)
}
}
*/
fun cmd(vararg command: String) = try {
val stdOut = ByteArrayOutputStream()
......
......@@ -92,7 +92,7 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
config.live_buffers.switchMap { ids ->
val bufferSyncer = manager.bufferSyncer
if (bufferSyncer != null) {
bufferSyncer.live_bufferInfos.switchMap {
bufferSyncer.liveBufferInfos().switchMap {
Observable.combineLatest(
ids.mapNotNull { id ->
bufferSyncer.bufferInfo(id)
......
......@@ -3,5 +3,6 @@ package de.kuschku.quasseldroid_ng.ui.chat
class FormattedMessage(
val id: Int,
val time: CharSequence,
val content: CharSequence
val content: CharSequence,
val markerline: Boolean
)
\ No newline at end of file
package de.kuschku.quasseldroid_ng.ui.chat
import android.arch.lifecycle.LiveData
import android.arch.paging.PagedListAdapter
import android.content.Context
import android.support.v7.recyclerview.extensions.DiffCallback
import android.util.LruCache
import android.view.LayoutInflater
import android.view.ViewGroup
import de.kuschku.libquassel.protocol.Message_Flag
import de.kuschku.libquassel.protocol.Message_Flags
import de.kuschku.libquassel.protocol.Message_Type
import de.kuschku.libquassel.protocol.Message_Types
import de.kuschku.libquassel.protocol.*
import de.kuschku.libquassel.util.hasFlag
import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase
import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase.DatabaseMessage
import de.kuschku.quasseldroid_ng.ui.settings.data.RenderingSettings
import de.kuschku.quasseldroid_ng.util.helper.getOrPut
class MessageAdapter(context: Context) :
PagedListAdapter<QuasselDatabase.DatabaseMessage, QuasselMessageViewHolder>(
QuasselDatabase.DatabaseMessage.MessageDiffCallback
class MessageAdapter(
context: Context,
private val markerLine: LiveData<Pair<MsgId, MsgId>?>
) : PagedListAdapter<QuasselDatabase.DatabaseMessage, QuasselMessageViewHolder>(
object : DiffCallback<QuasselDatabase.DatabaseMessage>() {
override fun areItemsTheSame(oldItem: QuasselDatabase.DatabaseMessage,
newItem: QuasselDatabase.DatabaseMessage)
= DatabaseMessage.MessageDiffCallback.areItemsTheSame(oldItem, newItem)
override fun areContentsTheSame(oldItem: QuasselDatabase.DatabaseMessage,
newItem: QuasselDatabase.DatabaseMessage)
= DatabaseMessage.MessageDiffCallback.areContentsTheSame(oldItem, newItem) &&
oldItem.messageId != markerLine.value?.first &&
oldItem.messageId != markerLine.value?.second
}
) {
private val messageRenderer: MessageRenderer = QuasselMessageRenderer(
context,
......@@ -34,8 +46,14 @@ class MessageAdapter(context: Context) :
getItem(position)?.let {
messageRenderer.bind(
holder,
if (it.messageId == markerLine.value?.second || it.messageId == markerLine.value?.first) {
val value = messageRenderer.render(it, markerLine.value?.second ?: -1)
messageCache.put(it.messageId, value)
value
} else {
messageCache.getOrPut(it.messageId) {
messageRenderer.render(it)
messageRenderer.render(it, markerLine.value?.second ?: -1)
}
}
)
}
......
......@@ -15,6 +15,7 @@ import android.view.ViewGroup
import butterknife.BindView
import butterknife.ButterKnife
import de.kuschku.libquassel.protocol.BufferId
import de.kuschku.libquassel.protocol.MsgId
import de.kuschku.libquassel.session.Backend
import de.kuschku.libquassel.session.SessionManager
import de.kuschku.quasseldroid_ng.R
......@@ -22,6 +23,8 @@ import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase
import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread
import de.kuschku.quasseldroid_ng.util.helper.*
import de.kuschku.quasseldroid_ng.util.service.ServiceBoundFragment
import io.reactivex.Observable
import io.reactivex.functions.BiFunction
class MessageListFragment : ServiceBoundFragment() {
val currentBuffer: MutableLiveData<LiveData<BufferId?>?> = MutableLiveData()
......@@ -29,6 +32,19 @@ class MessageListFragment : ServiceBoundFragment() {
private val sessionManager: LiveData<SessionManager?> = backend.map(Backend::sessionManager)
val markerLine = buffer.switchMap { buffer ->
sessionManager.switchMapRx { manager ->
manager.session.switchMap { session ->
val raw = session.bufferSyncer?.liveMarkerLine(buffer)
Observable.zip(
Observable.just(-1).concatWith(raw),
raw,
BiFunction<MsgId, MsgId, Pair<MsgId, MsgId>> { a, b -> a to b }
)
}
}
}
private val handler = AndroidHandlerThread("Chat")
private lateinit var database: QuasselDatabase
......@@ -60,12 +76,13 @@ class MessageListFragment : ServiceBoundFragment() {
val view = inflater.inflate(R.layout.fragment_messages, container, false)
ButterKnife.bind(this, view)
val adapter = MessageAdapter(context!!)
val adapter = MessageAdapter(context!!, markerLine)
messageList.adapter = adapter
val linearLayoutManager = LinearLayoutManager(context)
linearLayoutManager.reverseLayout = true
messageList.layoutManager = linearLayoutManager
messageList.itemAnimator = null
messageList.setItemViewCacheSize(20)
messageList.addOnScrollListener(
......@@ -117,6 +134,8 @@ class MessageListFragment : ServiceBoundFragment() {
)
}
markerLine.observe(this, Observer { adapter.notifyDataSetChanged() })
data.observe(
this, Observer { list ->
val findFirstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition()
......
......@@ -2,6 +2,7 @@ package de.kuschku.quasseldroid_ng.ui.chat
import android.support.annotation.LayoutRes
import de.kuschku.libquassel.protocol.Message_Type
import de.kuschku.libquassel.protocol.MsgId
import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase
interface MessageRenderer {
......@@ -9,7 +10,7 @@ interface MessageRenderer {
fun layout(type: Message_Type?, hasHighlight: Boolean): Int
fun bind(holder: QuasselMessageViewHolder, message: FormattedMessage)
fun render(message: QuasselDatabase.DatabaseMessage): FormattedMessage
fun render(message: QuasselDatabase.DatabaseMessage, markerLine: MsgId): FormattedMessage
fun init(viewHolder: QuasselMessageViewHolder,
messageType: Message_Type?,
hasHighlight: Boolean) {
......
......@@ -11,6 +11,7 @@ import android.text.style.URLSpan
import de.kuschku.libquassel.protocol.Message.MessageType.*
import de.kuschku.libquassel.protocol.Message_Flag
import de.kuschku.libquassel.protocol.Message_Type
import de.kuschku.libquassel.protocol.MsgId
import de.kuschku.libquassel.util.hasFlag
import de.kuschku.quasseldroid_ng.R
import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase
......@@ -18,6 +19,7 @@ import de.kuschku.quasseldroid_ng.ui.settings.data.RenderingSettings
import de.kuschku.quasseldroid_ng.ui.settings.data.RenderingSettings.ColorizeNicknamesMode
import de.kuschku.quasseldroid_ng.ui.settings.data.RenderingSettings.ShowPrefixMode
import de.kuschku.quasseldroid_ng.util.helper.styledAttributes
import de.kuschku.quasseldroid_ng.util.helper.visibleIf
import de.kuschku.quasseldroid_ng.util.irc.format.IrcFormatDeserializer
import de.kuschku.quasseldroid_ng.util.quassel.IrcUserUtils
import de.kuschku.quasseldroid_ng.util.ui.SpanFormatter
......@@ -81,9 +83,11 @@ class QuasselMessageRenderer(
override fun bind(holder: QuasselMessageViewHolder, message: FormattedMessage) {
holder.time.text = message.time
holder.content.text = message.content
holder.markerline.visibleIf(message.markerline)
}
override fun render(message: QuasselDatabase.DatabaseMessage): FormattedMessage {
override fun render(message: QuasselDatabase.DatabaseMessage,
markerLine: MsgId): FormattedMessage {
return when (Message_Type.of(message.type).enabledValues().firstOrNull()) {
Message_Type.Plain -> FormattedMessage(
message.messageId,
......@@ -93,7 +97,8 @@ class QuasselMessageRenderer(
formatPrefix(message.senderPrefixes),
formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)),
formatContent(message.content)
)
),
message.messageId == markerLine
)
Message_Type.Action -> FormattedMessage(
message.messageId,
......@@ -103,7 +108,8 @@ class QuasselMessageRenderer(
formatPrefix(message.senderPrefixes),
formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)),
formatContent(message.content)
)
),
message.messageId == markerLine
)
Message_Type.Notice -> FormattedMessage(
message.messageId,
......@@ -113,7 +119,8 @@ class QuasselMessageRenderer(
formatPrefix(message.senderPrefixes),
formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)),
formatContent(message.content)
)
),
message.messageId == markerLine
)
Message_Type.Nick -> FormattedMessage(
message.messageId,
......@@ -124,7 +131,8 @@ class QuasselMessageRenderer(
formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)),
formatPrefix(message.senderPrefixes),
formatNick(message.content, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self))
)
),
message.messageId == markerLine
)
Message_Type.Mode -> FormattedMessage(
message.messageId,
......@@ -134,7 +142,8 @@ class QuasselMessageRenderer(
message.content,
formatPrefix(message.senderPrefixes),
formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self))
)
),
message.messageId == markerLine
)
Message_Type.Join -> FormattedMessage(
message.messageId,
......@@ -143,7 +152,8 @@ class QuasselMessageRenderer(
context.getString(R.string.message_format_join),
formatPrefix(message.senderPrefixes),
formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self))
)
),
message.messageId == markerLine
)
Message_Type.Part -> FormattedMessage(
message.messageId,
......@@ -161,7 +171,8 @@ class QuasselMessageRenderer(
formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)),
message.content
)
}
},
message.messageId == markerLine
)
Message_Type.Quit -> FormattedMessage(
message.messageId,
......@@ -179,7 +190,8 @@ class QuasselMessageRenderer(
formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)),
message.content
)
}
},
message.messageId == markerLine
)
Message_Type.NetsplitJoin -> {
val split = message.content.split("#:#")
......@@ -190,7 +202,8 @@ class QuasselMessageRenderer(
timeFormatter.format(message.time.atZone(zoneId)),
context.resources.getQuantityString(
R.plurals.message_netsplit_join, usersAffected, server1, server2, usersAffected
)
),
message.messageId == markerLine
)
}
Message_Type.NetsplitQuit -> {
......@@ -202,7 +215,8 @@ class QuasselMessageRenderer(
timeFormatter.format(message.time.atZone(zoneId)),
context.resources.getQuantityString(
R.plurals.message_netsplit_quit, usersAffected, server1, server2, usersAffected
)
),
message.messageId == markerLine
)
}
Message_Type.Server,
......@@ -210,12 +224,14 @@ class QuasselMessageRenderer(
Message_Type.Error -> FormattedMessage(
message.messageId,
timeFormatter.format(message.time.atZone(zoneId)),
formatContent(message.content)
formatContent(message.content),
message.messageId == markerLine
)
Message_Type.Topic -> FormattedMessage(
message.messageId,
timeFormatter.format(message.time.atZone(zoneId)),
formatContent(message.content)
formatContent(message.content),
message.messageId == markerLine
)
else -> FormattedMessage(
message.messageId,
......@@ -226,7 +242,8 @@ class QuasselMessageRenderer(
formatPrefix(message.senderPrefixes),
formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)),
message.content
)
),
message.messageId == markerLine
)
}
}
......
......@@ -15,6 +15,9 @@ class QuasselMessageViewHolder(itemView: View) : RecyclerView.ViewHolder(itemVie
@BindView(R.id.content)
lateinit var content: TextView
@BindView(R.id.markerline)
lateinit var markerline: View
init {
ButterKnife.bind(this, itemView)
content.movementMethod = LinkMovementMethod.getInstance()
......
......@@ -59,7 +59,7 @@ class ToolbarFragment : ServiceBoundFragment() {
manager.session.switchMap {
val bufferSyncer = it.bufferSyncer
if (bufferSyncer != null) {
bufferSyncer.live_bufferInfos.switchMap {
bufferSyncer.liveBufferInfos().switchMap {
val info = bufferSyncer.bufferInfo(id)
val network = manager.networks[info?.networkId]
if (info == null) {
......
......@@ -7,7 +7,7 @@ import io.reactivex.Observable
@MainThread
inline fun <X, Y> LiveData<X?>.switchMap(
noinline func: (X) -> LiveData<Y>?
crossinline func: (X) -> LiveData<Y>?
): LiveData<Y> {
val result = MediatorLiveData<Y>()
result.addSource(
......@@ -35,7 +35,7 @@ inline fun <X, Y> LiveData<X?>.switchMap(
@MainThread
inline fun <X, Y> LiveData<X?>.switchMapRx(
strategy: BackpressureStrategy,
noinline func: (X) -> Observable<Y>?
crossinline func: (X) -> Observable<Y>?
): LiveData<Y?> {
val result = MediatorLiveData<Y>()
result.addSource(
......@@ -61,13 +61,13 @@ inline fun <X, Y> LiveData<X?>.switchMapRx(
}
@MainThread
inline fun <X, Y> LiveData<X?>.switchMapRx(
noinline func: (X) -> Observable<Y>?
inline fun <X, Y> LiveData<out X?>.switchMapRx(
crossinline func: (X) -> Observable<Y>?
): LiveData<Y?> = switchMapRx(BackpressureStrategy.LATEST, func)
@MainThread
inline fun <X, Y> LiveData<X?>.map(
noinline func: (X) -> Y?
crossinline func: (X) -> Y?
): LiveData<Y?> {
val result = MediatorLiveData<Y?>()
result.addSource(this) { x ->
......@@ -78,7 +78,7 @@ inline fun <X, Y> LiveData<X?>.map(
@MainThread
inline fun <X> LiveData<X>.orElse(
noinline func: () -> X
crossinline func: () -> X
): LiveData<X> {
val result = object : MediatorLiveData<X>() {
override fun getValue() = super.getValue() ?: func()
......
......@@ -25,17 +25,21 @@
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:gravity="top"
android:orientation="vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
tools:background="@android:color/background_light"
tools:theme="@style/Theme.ChatTheme.Quassel_Light">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="@dimen/message_vertical"
android:paddingEnd="@dimen/message_horizontal"
android:paddingLeft="@dimen/message_horizontal"
android:paddingRight="@dimen/message_horizontal"
android:paddingStart="@dimen/message_horizontal"
android:paddingTop="@dimen/message_vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
tools:background="@android:color/background_light"
tools:theme="@style/Theme.ChatTheme.Quassel_Light">
android:paddingTop="@dimen/message_vertical">
<TextView
android:id="@+id/time"
......@@ -57,3 +61,11 @@
android:textStyle="italic"
tools:text="-*- justJanne loves the new version" />
</LinearLayout>
<View
android:id="@+id/markerline"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?colorMarkerLine"
android:visibility="gone" />
</LinearLayout>
\ No newline at end of file
......@@ -3,20 +3,23 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorBackgroundSecondary"
android:clickable="true"
android:focusable="true"
android:gravity="top"
android:orientation="vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
tools:background="@android:color/background_light"
tools:theme="@style/Theme.ChatTheme.Quassel_Light">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="@dimen/message_vertical"
android:paddingEnd="@dimen/message_horizontal"
android:paddingLeft="@dimen/message_horizontal"
android:paddingRight="@dimen/message_horizontal"
android:paddingStart="@dimen/message_horizontal"
android:paddingTop="@dimen/message_vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
tools:background="@android:color/background_light"
tools:theme="@style/Theme.ChatTheme.Quassel_Light">
android:paddingTop="@dimen/message_vertical">
<TextView
android:id="@+id/time"
......@@ -37,3 +40,11 @@
android:textIsSelectable="true"
tools:text="everyone: deserves a chance to fly. No such channel" />
</LinearLayout>
<View
android:id="@+id/markerline"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?colorMarkerLine"
android:visibility="gone" />
</LinearLayout>
\ No newline at end of file
......@@ -3,20 +3,23 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorBackgroundSecondary"
android:clickable="true"
android:focusable="true"
android:gravity="top"
android:orientation="vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
tools:background="@android:color/background_light"
tools:theme="@style/Theme.ChatTheme.Quassel_Light">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="@dimen/message_vertical"
android:paddingEnd="@dimen/message_horizontal"
android:paddingLeft="@dimen/message_horizontal"
android:paddingRight="@dimen/message_horizontal"
android:paddingStart="@dimen/message_horizontal"
android:paddingTop="@dimen/message_vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
tools:background="@android:color/background_light"
tools:theme="@style/Theme.ChatTheme.Quassel_Light">
android:paddingTop="@dimen/message_vertical">
<TextView
android:id="@+id/time"
......@@ -38,3 +41,11 @@
android:textStyle="italic"
tools:text="Connecting to irc.freenode.net:6667..." />
</LinearLayout>
<View
android:id="@+id/markerline"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?colorMarkerLine"
android:visibility="gone" />
</LinearLayout>
\ No newline at end of file
......@@ -3,20 +3,23 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorBackgroundSecondary"
android:clickable="true"
android:focusable="true"
android:gravity="top"
android:orientation="vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
tools:background="@android:color/background_light"
tools:theme="@style/Theme.ChatTheme.Quassel_Light">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="@dimen/message_vertical"
android:paddingEnd="@dimen/message_horizontal"
android:paddingLeft="@dimen/message_horizontal"
android:paddingRight="@dimen/message_horizontal"
android:paddingStart="@dimen/message_horizontal"
android:paddingTop="@dimen/message_vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
tools:background="@android:color/background_light"
tools:theme="@style/Theme.ChatTheme.Quassel_Light">
android:paddingTop="@dimen/message_vertical">
<TextView
android:id="@+id/time"
......@@ -37,3 +40,11 @@
android:textIsSelectable="true"
tools:text="Connecting to irc.freenode.net:6667..." />
</LinearLayout>
<View
android:id="@+id/markerline"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?colorMarkerLine"
android:visibility="gone" />
</LinearLayout>
\ No newline at end of file
......@@ -3,8 +3,6 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="top"
android:orientation="horizontal"
tools:background="@android:color/background_light"
tools:theme="@style/Theme.ChatTheme.Quassel_Light">
......@@ -19,4 +17,10 @@
android:layout_width="0dip"
android:layout_height="0dip"
android:visibility="gone" />
<View
android:id="@+id/markerline"
android:layout_width="0dip"
android:layout_height="0dip"
android:visibility="gone" />
</LinearLayout>
\ No newline at end of file
......@@ -5,17 +5,21 @@
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:gravity="top"
android:orientation="vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
tools:background="@android:color/background_light"
tools:theme="@style/Theme.ChatTheme.Quassel_Light">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="@dimen/message_vertical"
android:paddingEnd="@dimen/message_horizontal"
android:paddingLeft="@dimen/message_horizontal"
android:paddingRight="@dimen/message_horizontal"
android:paddingStart="@dimen/message_horizontal"
android:paddingTop="@dimen/message_vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
tools:background="@android:color/background_light"
tools:theme="@style/Theme.ChatTheme.Quassel_Light">
android:paddingTop="@dimen/message_vertical">
<TextView
android:id="@+id/time"
......@@ -36,3 +40,11 @@
android:textIsSelectable="true"
tools:text="justJanne: hiii" />
</LinearLayout>
<View
android:id="@+id/markerline"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?colorMarkerLine"
android:visibility="gone" />
</LinearLayout>
\ No newline at end of file
......@@ -3,20 +3,23 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorBackgroundSecondary"
android:clickable="true"
android:focusable="true"
android:gravity="top"
android:orientation="vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
tools:background="@android:color/background_light"
tools:theme="@style/Theme.ChatTheme.Quassel_Light">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="@dimen/message_vertical"
android:paddingEnd="@dimen/message_horizontal"
android:paddingLeft="@dimen/message_horizontal"
android:paddingRight="@dimen/message_horizontal"
android:paddingStart="@dimen/message_horizontal"
android:paddingTop="@dimen/message_vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
tools:background="@android:color/background_light"
tools:theme="@style/Theme.ChatTheme.Quassel_Light">
android:paddingTop="@dimen/message_vertical">
<TextView
android:id="@+id/time"
......@@ -38,3 +41,11 @@
android:typeface="monospace"
tools:text="Connecting to irc.freenode.net:6667..." />
</LinearLayout>
<View
android:id="@+id/markerline"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?colorMarkerLine"
android:visibility="gone" />
</LinearLayout>
\ No newline at end of file
......@@ -55,11 +55,12 @@
<attr name="colorBackgroundCard" format="color" />
<attr name="colorBackgroundDialog" format="color" />
<attr name="colorMarkerLine" format="color" />
<!-- Tint colors for drawer -->
<attr name="colorTintActivity" format="color" />
<attr name="colorTintMessage" format="color" />
<attr name="colorTintHighlight" format="color" />
<attr name="chatlineExpandedSize" />
<!-- Icons -->
<attr name="colorOffline" format="color" />
......
......@@ -37,6 +37,8 @@
<item name="colorBackgroundCard">#FFFFFF</item>
<item name="colorBackgroundDialog">#FAFAFA</item>
<item name="colorMarkerLine">#ff0000</item>
<item name="colorTintActivity">#88cc33</item>
<item name="colorTintMessage">#2277dd</item>
<item name="colorTintHighlight">#ff8811</item>
......
......@@ -23,6 +23,7 @@ dependencies {
testImplementation("junit:junit:4.12")
}
/*
tasks.withType(KotlinCompile::class.java) {
kotlinOptions {
freeCompilerArgs = listOf(
......@@ -31,6 +32,7 @@ tasks.withType(KotlinCompile::class.java) {
)
}
}
*/
/**
* Builds the dependency notation for the named AppCompat [module] at the given [version].
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment