diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 753d81c0cf28945c6a231f0f8d4618a3e5fef3a7..7f0c3f784b7be3dd40a1ea4d8a7181ab0dae2e36 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -89,9 +89,9 @@ android { } val appCompatVersion = "27.0.2" -val appArchVersion = "1.0.0" +val appArchVersion = "1.1.0" dependencies { - implementation(kotlin("stdlib", "1.2.0")) + implementation(kotlin("stdlib", "1.2.21")) implementation(appCompat("appcompat-v7")) implementation(appCompat("design")) @@ -100,18 +100,17 @@ dependencies { implementation(appCompat("recyclerview-v7")) implementation(appCompat("constraint", "constraint-layout", version = "1.0.2")) - implementation("com.github.StephenVinouze.AdvancedRecyclerView", "core", "1.1.6") - - implementation("io.reactivex.rxjava2", "rxjava", "2.1.3") + implementation("io.reactivex.rxjava2", "rxjava", "2.1.9") implementation(appArch("lifecycle", "extensions")) implementation(appArch("lifecycle", "reactivestreams")) kapt(appArch("lifecycle", "compiler")) - implementation(appArch("persistence.room", "runtime")) - kapt(appArch("persistence.room", "compiler")) + implementation(appArch("persistence.room", "runtime", "1.0.0")) + implementation(appArch("persistence.room", "rxjava2", "1.0.0")) + kapt(appArch("persistence.room", "compiler", "1.0.0")) - implementation(appArch("paging", "runtime", version = "1.0.0-alpha3")) { + implementation(appArch("paging", "runtime", version = "1.0.0-alpha5")) { exclude(group = "junit", module = "junit") } @@ -127,7 +126,7 @@ dependencies { } implementation(project(":malheur")) - testImplementation(appArch("persistence.room", "testing")) + testImplementation(appArch("persistence.room", "testing", "1.0.0")) testImplementation("junit", "junit", "4.12") androidTestImplementation("com.android.support.test", "runner", "1.0.1") diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt index b17dc281a6222e3869ee814a98ca83611dbf5fd4..17bc32a3daeb01d5d3d038468af56d075e301955 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt @@ -170,6 +170,11 @@ class BufferListAdapter( var bufferId: BufferId? = null var networkId: NetworkId? = null + private var none: Int = 0 + private var activity: Int = 0 + private var message: Int = 0 + private var highlight: Int = 0 + init { ButterKnife.bind(this, itemView) itemView.setOnClickListener { @@ -183,6 +188,16 @@ class BufferListAdapter( if (network != null) expansionListener?.invoke(network) } + + itemView.context.theme.styledAttributes( + R.attr.colorTextSecondary, R.attr.colorTintActivity, R.attr.colorTintMessage, + R.attr.colorTintHighlight + ) { + none = getColor(0, 0) + activity = getColor(1, 0) + message = getColor(2, 0) + highlight = getColor(3, 0) + } } override fun bind(props: BufferProps, state: BufferState) { @@ -190,6 +205,15 @@ class BufferListAdapter( bufferId = props.info.bufferId networkId = props.info.networkId + name.setTextColor( + when (props.activity) { + Buffer_Activity.NoActivity -> none + Buffer_Activity.OtherActivity -> activity + Buffer_Activity.NewMessage -> message + Buffer_Activity.Highlight -> highlight + } + ) + if (state.networkExpanded) { status.setImageDrawable(itemView.context.getCompatDrawable(R.drawable.ic_chevron_up)) } else { @@ -234,7 +258,7 @@ class BufferListAdapter( itemView.context.theme.styledAttributes( R.attr.colorAccent, R.attr.colorAway, - R.attr.colorForeground, R.attr.colorTintActivity, R.attr.colorTintMessage, + R.attr.colorTextPrimary, R.attr.colorTintActivity, R.attr.colorTintMessage, R.attr.colorTintHighlight ) { DrawableCompat.setTint(online, getColor(0, 0)) @@ -313,7 +337,7 @@ class BufferListAdapter( itemView.context.theme.styledAttributes( R.attr.colorAccent, R.attr.colorAway, - R.attr.colorForeground, R.attr.colorTintActivity, R.attr.colorTintMessage, + R.attr.colorTextPrimary, R.attr.colorTintActivity, R.attr.colorTintMessage, R.attr.colorTintHighlight ) { DrawableCompat.setTint(online, getColor(0, 0)) @@ -394,7 +418,7 @@ class BufferListAdapter( itemView.context.theme.styledAttributes( R.attr.colorAccent, R.attr.colorAway, - R.attr.colorForeground, R.attr.colorTintActivity, R.attr.colorTintMessage, + R.attr.colorTextPrimary, R.attr.colorTintActivity, R.attr.colorTintMessage, R.attr.colorTintHighlight ) { DrawableCompat.setTint(online, getColor(0, 0)) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt index b0cc94e298a8e85472512654a057cba72ee1f041..bd29ef6b7bff3b7e05b1d0f23bd18bbb4ca57eed 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt @@ -81,68 +81,77 @@ class BufferViewConfigFragment : ServiceBoundFragment() { bufferIdList.switchMapRx { ids -> val bufferSyncer = manager.bufferSyncer if (bufferSyncer != null) { - Observable.combineLatest( - ids.mapNotNull { id -> - manager.bufferSyncer?.bufferInfo( - id - ) - }.mapNotNull { - val network = manager.networks[it.networkId] - if (network == null) { - null - } else { - it to network - } - }.map { (info, network) -> - bufferSyncer.liveActivity(info.bufferId).map { activity -> - when { - activity.hasFlag(Message.MessageType.Plain) || - activity.hasFlag(Message.MessageType.Notice) || - activity.hasFlag(Message.MessageType.Action) -> Buffer_Activity.NewMessage - activity.nonEmpty() -> Buffer_Activity.OtherActivity - else -> Buffer_Activity.NoActivity + bufferSyncer.live_bufferInfos.switchMap { + Observable.combineLatest( + ids.mapNotNull { id -> + bufferSyncer.bufferInfo(id) + }.mapNotNull { + val network = manager.networks[it.networkId] + if (network == null) { + null + } else { + it to network } - }.switchMap { activity -> - when (info.type.toInt()) { - BufferInfo.Type.QueryBuffer.toInt() -> { - network.liveIrcUser(info.bufferName).switchMap { user -> - user.live_away.switchMap { away -> - user.live_realName.map { realName -> + }.map { (info, network) -> + bufferSyncer.liveActivity(info.bufferId).map { activity -> + when { + activity.hasFlag(Message.MessageType.Plain) || + activity.hasFlag(Message.MessageType.Notice) || + activity.hasFlag(Message.MessageType.Action) -> Buffer_Activity.NewMessage + activity.nonEmpty() -> Buffer_Activity.OtherActivity + else -> Buffer_Activity.NoActivity + } + }.switchMap { activity -> + when (info.type.toInt()) { + BufferInfo.Type.QueryBuffer.toInt() -> { + network.liveIrcUser(info.bufferName).switchMap { user -> + user.live_away.switchMap { away -> + user.live_realName.map { realName -> + BufferListAdapter.BufferProps( + info = info, + network = network.networkInfo(), + bufferStatus = when { + user == IrcUser.NULL -> BufferListAdapter.BufferStatus.OFFLINE + away -> BufferListAdapter.BufferStatus.AWAY + else -> BufferListAdapter.BufferStatus.ONLINE + }, + description = realName, + activity = activity + ) + } + } + } + } + BufferInfo.Type.ChannelBuffer.toInt() -> { + network.liveIrcChannel( + info.bufferName + ).switchMap { channel -> + channel.live_topic.map { topic -> BufferListAdapter.BufferProps( info = info, network = network.networkInfo(), - bufferStatus = when { - user == IrcUser.NULL -> BufferListAdapter.BufferStatus.OFFLINE - away -> BufferListAdapter.BufferStatus.AWAY - else -> BufferListAdapter.BufferStatus.ONLINE + bufferStatus = when (channel) { + IrcChannel.NULL -> BufferListAdapter.BufferStatus.OFFLINE + else -> BufferListAdapter.BufferStatus.ONLINE }, - description = realName, + description = topic, activity = activity ) } } } - } - BufferInfo.Type.ChannelBuffer.toInt() -> { - network.liveIrcChannel( - info.bufferName - ).switchMap { channel -> - channel.live_topic.map { topic -> + BufferInfo.Type.StatusBuffer.toInt() -> { + network.liveConnectionState.map { BufferListAdapter.BufferProps( info = info, network = network.networkInfo(), - bufferStatus = when (channel) { - IrcChannel.NULL -> BufferListAdapter.BufferStatus.OFFLINE - else -> BufferListAdapter.BufferStatus.ONLINE - }, - description = topic, + bufferStatus = BufferListAdapter.BufferStatus.OFFLINE, + description = "", activity = activity ) } } - } - BufferInfo.Type.StatusBuffer.toInt() -> { - network.liveConnectionState.map { + else -> Observable.just( BufferListAdapter.BufferProps( info = info, network = network.networkInfo(), @@ -150,23 +159,14 @@ class BufferViewConfigFragment : ServiceBoundFragment() { description = "", activity = activity ) - } - } - else -> Observable.just( - BufferListAdapter.BufferProps( - info = info, - network = network.networkInfo(), - bufferStatus = BufferListAdapter.BufferStatus.OFFLINE, - description = "", - activity = activity ) - ) + } } + }, { array: Array<Any> -> + array.toList() as List<BufferListAdapter.BufferProps> } - }, { array: Array<Any> -> - array.toList() as List<BufferListAdapter.BufferProps> - } - ) + ) + } } else { Observable.empty() } diff --git a/app/src/main/res/layout/widget_buffer.xml b/app/src/main/res/layout/widget_buffer.xml index fdf7d6c7118645c5700f909077d4c3ad0298f23e..f057d26addce6b55b1ec7279da9db41479bf23f2 100644 --- a/app/src/main/res/layout/widget_buffer.xml +++ b/app/src/main/res/layout/widget_buffer.xml @@ -35,7 +35,7 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:singleLine="true" - android:textColor="?attr/colorForeground" + android:textColor="?attr/colorTextPrimary" android:textSize="13sp" android:textStyle="bold" tools:text="#quasseldroid" /> @@ -46,7 +46,7 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:singleLine="true" - android:textColor="?attr/colorForegroundSecondary" + android:textColor="?attr/colorTextSecondary" android:textSize="12sp" tools:text="QuasselDroid is an Android client for #quassel ♥ justJanne's much improved version: https://dl.kuschku.de/releases/quasseldroid/ ♥ http://github.com/sandsmark/QuasselDroid ♥ Quasseldroid on play https://market.android.com/details?id=com.iskrembilen.quasseldroid ♥ Sign up for beta: https://plus.google.com/communities/104094956084217666662" /> </LinearLayout> diff --git a/app/src/main/res/layout/widget_network.xml b/app/src/main/res/layout/widget_network.xml index fa16ceb4fc0d01aa86fd03fcc425c93cb74c6bae..0ec8859d288b138fd30a99c2ef6676fc6a15a4a2 100644 --- a/app/src/main/res/layout/widget_network.xml +++ b/app/src/main/res/layout/widget_network.xml @@ -4,37 +4,52 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:foreground="?attr/selectableItemBackgroundBorderless" - android:minHeight="48dp" + android:background="?attr/selectableItemBackground" + android:orientation="vertical" tools:background="@android:color/background_light" tools:theme="@style/Theme.ChatTheme.Quassel_Light"> - <TextView - android:id="@+id/name" - android:layout_width="0dip" + <View + android:layout_width="match_parent" + android:layout_height="1dp" + android:background="?attr/colorDivider" /> + + <LinearLayout + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="center" - android:layout_marginBottom="8dp" - android:layout_marginLeft="16dp" - android:layout_marginRight="16dp" - android:layout_marginTop="8dp" - android:layout_weight="1" - android:singleLine="true" - android:textColor="?attr/colorForeground" - android:textSize="14sp" - android:textStyle="bold" - tools:text="Freenode" /> + android:minHeight="48dp"> + + <TextView + android:id="@+id/name" + android:layout_width="0dip" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginBottom="8dp" + android:layout_marginLeft="16dp" + android:layout_marginRight="16dp" + android:layout_marginTop="8dp" + android:layout_weight="1" + android:singleLine="true" + android:textColor="?attr/colorTextSecondary" + android:textSize="14sp" + android:textStyle="bold" + tools:text="Freenode" /> - <ImageView - android:id="@+id/status" - android:layout_width="wrap_content" - android:layout_height="match_parent" - android:minWidth="72dp" - android:paddingBottom="12dp" - android:paddingEnd="16dp" - android:paddingStart="16dp" - android:paddingTop="12dp" - android:scaleType="fitEnd" - android:tint="?attr/colorForegroundSecondary" - app:srcCompat="@drawable/ic_chevron_down" /> + <ImageView + android:id="@+id/status" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:background="?attr/selectableItemBackgroundBorderless" + android:clickable="true" + android:contentDescription="Expand" + android:focusable="true" + android:minWidth="72dp" + android:paddingBottom="12dp" + android:paddingEnd="16dp" + android:paddingStart="16dp" + android:paddingTop="12dp" + android:scaleType="fitEnd" + android:tint="?attr/colorTextSecondary" + app:srcCompat="@drawable/ic_chevron_down" /> + </LinearLayout> </LinearLayout> \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 46a053646ce0fed01fb5e8b8740b82110e0b67e2..81d04fca80d8140b75051c4e0be5ea837b9c6cf8 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -44,6 +44,8 @@ <attr name="colorForegroundMirc" format="integer" /> + <attr name="colorTextPrimary" format="color" /> + <attr name="colorTextSecondary" format="color" /> <attr name="colorDivider" format="color" /> <attr name="colorBackground" format="color" /> diff --git a/app/src/main/res/values/themes_base.xml b/app/src/main/res/values/themes_base.xml index 2c4ea184d98da57bc1d4b4cb03286b37f482d70d..7557a2d36936e6d70d64d99774c67d13280c0a2b 100644 --- a/app/src/main/res/values/themes_base.xml +++ b/app/src/main/res/values/themes_base.xml @@ -40,6 +40,8 @@ <item name="windowActionModeOverlay">true</item> + <item name="colorTextPrimary">#8a8a8a</item> + <item name="colorTextSecondary">#dedede</item> <item name="colorDivider">#1FFFFFFF</item> <item name="colorFill">@color/colorFillDark</item> @@ -74,6 +76,8 @@ <item name="windowActionModeOverlay">true</item> + <item name="colorTextPrimary">#212121</item> + <item name="colorTextSecondary">#757575</item> <item name="colorDivider">#1F000000</item>> <item name="colorFill">@color/colorFillLight</item>