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

Usability enhancements

parent a9870114
Branches
Tags
No related merge requests found
......@@ -24,6 +24,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.widget.AppCompatImageView
import androidx.lifecycle.Observer
import butterknife.BindView
import butterknife.ButterKnife
......@@ -31,14 +32,15 @@ import de.kuschku.libquassel.protocol.Buffer_Type
import de.kuschku.libquassel.quassel.BufferInfo
import de.kuschku.libquassel.util.flag.hasFlag
import de.kuschku.libquassel.util.helpers.value
import de.kuschku.quasseldroid.GlideApp
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.settings.AppearanceSettings
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.toLiveData
import de.kuschku.quasseldroid.util.helper.visibleIf
import de.kuschku.quasseldroid.util.ColorContext
import de.kuschku.quasseldroid.util.avatars.AvatarHelper
import de.kuschku.quasseldroid.util.helper.*
import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
import de.kuschku.quasseldroid.util.service.ServiceBoundFragment
import de.kuschku.quasseldroid.util.ui.SpanFormatter
......@@ -51,6 +53,9 @@ class ToolbarFragment : ServiceBoundFragment() {
@BindView(R.id.toolbar_subtitle)
lateinit var toolbarSubtitle: TextView
@BindView(R.id.toolbar_icon)
lateinit var icon: AppCompatImageView
@BindView(R.id.toolbar_action_area)
lateinit var actionArea: View
......@@ -91,10 +96,42 @@ class ToolbarFragment : ServiceBoundFragment() {
description, messageSettings.colorizeMirc
)
combineLatest(viewModel.bufferDataThrottled, viewModel.lag).toLiveData()
val avatarSize = resources.getDimensionPixelSize(R.dimen.avatar_size_buffer)
val colorContext = ColorContext(requireContext(), messageSettings)
combineLatest(viewModel.bufferDataThrottled, viewModel.lag).map {
val avatarInfo = it.first?.ircUser?.let { user ->
val avatarUrls = AvatarHelper.avatar(messageSettings, user, avatarSize)
val nickName = user.nick()
val useSelfColor = when (messageSettings.colorizeNicknames) {
MessageSettings.ColorizeNicknamesMode.ALL -> false
MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE ->
user.network().isMyNick(nickName)
MessageSettings.ColorizeNicknamesMode.NONE -> true
}
val fallbackDrawable = colorContext.buildTextDrawable(user.nick(), useSelfColor)
Pair(avatarUrls, fallbackDrawable)
}
Triple(it.first, it.second, avatarInfo)
}.toLiveData()
.observe(this, Observer {
if (it != null) {
val (data, lag) = it
val (data, lag, avatarInfo) = it
if (avatarInfo != null) {
val (avatarUrls, fallbackDrawable) = avatarInfo
icon.loadAvatars(avatarUrls, fallbackDrawable, crop = !messageSettings.squareAvatars)
icon.visibility = View.VISIBLE
} else {
GlideApp.with(icon).clear(icon)
icon.visibility = View.GONE
}
if (data?.info?.type?.hasFlag(Buffer_Type.StatusBuffer) == true) {
this.title = data.network?.networkName()
} else {
......@@ -140,6 +177,7 @@ class ToolbarFragment : ServiceBoundFragment() {
}
}
}
actionArea.setTooltip()
return view
}
......
......@@ -202,6 +202,7 @@ class ChatlineFragment : ServiceBoundFragment() {
editorHelper.setOnEnterListener(::send)
send.setOnClickListener { send() }
send.setTooltip()
tabComplete.visibleIf(autoCompleteSettings.button)
tabComplete.setOnClickListener {
......
......@@ -20,18 +20,35 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/toolbar_action_area"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="false"
android:gravity="center_vertical|start"
android:minHeight="?attr/actionBarSize"
android:orientation="vertical"
android:contentDescription="@string/label_info"
android:theme="?attr/actionBarTheme"
android:orientation="horizontal"
tools:showIn="@layout/activity_main">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/toolbar_icon"
android:layout_width="@dimen/avatar_size_buffer"
android:layout_height="@dimen/avatar_size_buffer"
android:layout_gravity="center_vertical"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:visibility="gone"
tools:src="@tools:sample/avatars"
tools:visibility="visible" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical|start"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
......@@ -39,20 +56,6 @@
android:layout_marginTop="-2dp"
android:baselineAligned="false">
<TextView
android:id="@+id/key"
style="@style/Widget.RtlConformTextView"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_marginEnd="2dp"
android:layout_marginRight="2dp"
android:layout_marginTop="2dp"
android:gravity="center"
android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
android:textColor="?android:textColorPrimary"
android:textSize="16sp"
android:visibility="gone" />
<TextView
android:id="@+id/toolbar_title"
style="@style/Widget.RtlConformTextView"
......@@ -77,4 +80,6 @@
android:singleLine="true"
android:textColor="?android:textColorSecondary"
android:visibility="gone" />
</LinearLayout>
</LinearLayout>
......@@ -45,6 +45,7 @@
android:padding="12dp"
android:scaleType="fitXY"
app:layout_constraintStart_toStartOf="parent"
android:contentDescription="@string/label_autocomplete"
app:srcCompat="@drawable/ic_tab"
app:tint="?attr/colorTextSecondary" />
......@@ -89,6 +90,7 @@
android:scaleType="fitXY"
app:layout_constraintEnd_toEndOf="parent"
app:srcCompat="@drawable/ic_send"
android:contentDescription="@string/label_send"
app:tint="?attr/colorAccent"
tools:ignore="UnusedAttribute" />
</androidx.constraintlayout.widget.ConstraintLayout>
......
......@@ -29,6 +29,7 @@
<string name="label_about">About</string>
<string name="label_accept">Accept</string>
<string name="label_autocomplete">Autocomplete</string>
<string name="label_avatar">Avatar</string>
<string name="label_back">Back</string>
<string name="label_buffer_name">Buffer Name</string>
......@@ -56,6 +57,7 @@
<string name="label_hide_temp">Hide Temporarily</string>
<string name="label_ignore">Ignore</string>
<string name="label_ignore_long">Add/remove user to/from ignore list</string>
<string name="label_info">Details</string>
<string name="label_info_channel">Channel Details</string>
<string name="label_info_core">Core Details</string>
<string name="label_info_user">User Details</string>
......@@ -92,6 +94,7 @@
<string name="label_rename">Rename</string>
<string name="label_save">Save</string>
<string name="label_select">Select</string>
<string name="label_send">Send</string>
<string name="label_set_default">Set Default</string>
<string name="label_settings">Settings</string>
<string name="label_settings_client">Client Settings</string>
......
......@@ -161,7 +161,8 @@ class QuasselViewModel : ViewModel() {
BufferData(
info = info,
network = network,
description = user.realName()
description = user.realName(),
ircUser = user
)
}
}
......
......@@ -20,11 +20,13 @@
package de.kuschku.quasseldroid.viewmodel.data
import de.kuschku.libquassel.quassel.BufferInfo
import de.kuschku.libquassel.quassel.syncables.IrcUser
import de.kuschku.libquassel.quassel.syncables.Network
data class BufferData(
val info: BufferInfo? = null,
val network: Network? = null,
val description: String? = null,
val userCount: Int = 0
val userCount: Int = 0,
val ircUser: IrcUser? = null
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment