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 ...@@ -24,6 +24,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.widget.AppCompatImageView
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import butterknife.BindView import butterknife.BindView
import butterknife.ButterKnife import butterknife.ButterKnife
...@@ -31,14 +32,15 @@ import de.kuschku.libquassel.protocol.Buffer_Type ...@@ -31,14 +32,15 @@ import de.kuschku.libquassel.protocol.Buffer_Type
import de.kuschku.libquassel.quassel.BufferInfo import de.kuschku.libquassel.quassel.BufferInfo
import de.kuschku.libquassel.util.flag.hasFlag import de.kuschku.libquassel.util.flag.hasFlag
import de.kuschku.libquassel.util.helpers.value import de.kuschku.libquassel.util.helpers.value
import de.kuschku.quasseldroid.GlideApp
import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.settings.AppearanceSettings import de.kuschku.quasseldroid.settings.AppearanceSettings
import de.kuschku.quasseldroid.settings.MessageSettings import de.kuschku.quasseldroid.settings.MessageSettings
import de.kuschku.quasseldroid.ui.chat.info.channel.ChannelInfoActivity import de.kuschku.quasseldroid.ui.chat.info.channel.ChannelInfoActivity
import de.kuschku.quasseldroid.ui.chat.info.user.UserInfoActivity import de.kuschku.quasseldroid.ui.chat.info.user.UserInfoActivity
import de.kuschku.quasseldroid.util.helper.combineLatest import de.kuschku.quasseldroid.util.ColorContext
import de.kuschku.quasseldroid.util.helper.toLiveData import de.kuschku.quasseldroid.util.avatars.AvatarHelper
import de.kuschku.quasseldroid.util.helper.visibleIf import de.kuschku.quasseldroid.util.helper.*
import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
import de.kuschku.quasseldroid.util.service.ServiceBoundFragment import de.kuschku.quasseldroid.util.service.ServiceBoundFragment
import de.kuschku.quasseldroid.util.ui.SpanFormatter import de.kuschku.quasseldroid.util.ui.SpanFormatter
...@@ -51,6 +53,9 @@ class ToolbarFragment : ServiceBoundFragment() { ...@@ -51,6 +53,9 @@ class ToolbarFragment : ServiceBoundFragment() {
@BindView(R.id.toolbar_subtitle) @BindView(R.id.toolbar_subtitle)
lateinit var toolbarSubtitle: TextView lateinit var toolbarSubtitle: TextView
@BindView(R.id.toolbar_icon)
lateinit var icon: AppCompatImageView
@BindView(R.id.toolbar_action_area) @BindView(R.id.toolbar_action_area)
lateinit var actionArea: View lateinit var actionArea: View
...@@ -91,10 +96,42 @@ class ToolbarFragment : ServiceBoundFragment() { ...@@ -91,10 +96,42 @@ class ToolbarFragment : ServiceBoundFragment() {
description, messageSettings.colorizeMirc 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 { .observe(this, Observer {
if (it != null) { 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) { if (data?.info?.type?.hasFlag(Buffer_Type.StatusBuffer) == true) {
this.title = data.network?.networkName() this.title = data.network?.networkName()
} else { } else {
...@@ -140,6 +177,7 @@ class ToolbarFragment : ServiceBoundFragment() { ...@@ -140,6 +177,7 @@ class ToolbarFragment : ServiceBoundFragment() {
} }
} }
} }
actionArea.setTooltip()
return view return view
} }
......
...@@ -202,6 +202,7 @@ class ChatlineFragment : ServiceBoundFragment() { ...@@ -202,6 +202,7 @@ class ChatlineFragment : ServiceBoundFragment() {
editorHelper.setOnEnterListener(::send) editorHelper.setOnEnterListener(::send)
send.setOnClickListener { send() } send.setOnClickListener { send() }
send.setTooltip()
tabComplete.visibleIf(autoCompleteSettings.button) tabComplete.visibleIf(autoCompleteSettings.button)
tabComplete.setOnClickListener { tabComplete.setOnClickListener {
......
...@@ -20,61 +20,66 @@ ...@@ -20,61 +20,66 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/toolbar_action_area" android:id="@+id/toolbar_action_area"
android:layout_width="fill_parent" android:layout_width="match_parent"
android:layout_height="fill_parent" android:layout_height="match_parent"
android:background="?attr/selectableItemBackgroundBorderless" android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true" android:clickable="true"
android:focusable="true" android:focusable="true"
android:focusableInTouchMode="false" android:focusableInTouchMode="false"
android:gravity="center_vertical|start"
android:minHeight="?attr/actionBarSize" android:minHeight="?attr/actionBarSize"
android:orientation="vertical" android:contentDescription="@string/label_info"
android:theme="?attr/actionBarTheme" android:theme="?attr/actionBarTheme"
android:orientation="horizontal"
tools:showIn="@layout/activity_main"> 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 <LinearLayout
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_gravity="center_vertical|start" android:gravity="center_vertical|start"
android:layout_marginTop="-2dp" android:orientation="vertical">
android:baselineAligned="false">
<TextView <LinearLayout
android:id="@+id/key" android:layout_width="wrap_content"
style="@style/Widget.RtlConformTextView" android:layout_height="wrap_content"
android:layout_width="16dp" android:layout_gravity="center_vertical|start"
android:layout_height="16dp" android:layout_marginTop="-2dp"
android:layout_marginEnd="2dp" android:baselineAligned="false">
android:layout_marginRight="2dp"
android:layout_marginTop="2dp" <TextView
android:gravity="center" android:id="@+id/toolbar_title"
android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" style="@style/Widget.RtlConformTextView"
android:textColor="?android:textColorPrimary" android:layout_width="wrap_content"
android:textSize="16sp" android:layout_height="wrap_content"
android:visibility="gone" /> android:ellipsize="end"
android:gravity="center_vertical"
android:singleLine="true"
android:text="@string/app_name"
android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
android:textColor="?android:textColorPrimary" />
</LinearLayout>
<TextView <TextView
android:id="@+id/toolbar_title" android:id="@+id/toolbar_subtitle"
style="@style/Widget.RtlConformTextView" style="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="-3dp"
android:ellipsize="end" android:ellipsize="end"
android:gravity="center_vertical"
android:singleLine="true" android:singleLine="true"
android:text="@string/app_name" android:textColor="?android:textColorSecondary"
android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" android:visibility="gone" />
android:textColor="?android:textColorPrimary" />
</LinearLayout> </LinearLayout>
<TextView
android:id="@+id/toolbar_subtitle"
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="-3dp"
android:ellipsize="end"
android:singleLine="true"
android:textColor="?android:textColorSecondary"
android:visibility="gone" />
</LinearLayout> </LinearLayout>
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
android:padding="12dp" android:padding="12dp"
android:scaleType="fitXY" android:scaleType="fitXY"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
android:contentDescription="@string/label_autocomplete"
app:srcCompat="@drawable/ic_tab" app:srcCompat="@drawable/ic_tab"
app:tint="?attr/colorTextSecondary" /> app:tint="?attr/colorTextSecondary" />
...@@ -89,6 +90,7 @@ ...@@ -89,6 +90,7 @@
android:scaleType="fitXY" android:scaleType="fitXY"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:srcCompat="@drawable/ic_send" app:srcCompat="@drawable/ic_send"
android:contentDescription="@string/label_send"
app:tint="?attr/colorAccent" app:tint="?attr/colorAccent"
tools:ignore="UnusedAttribute" /> tools:ignore="UnusedAttribute" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
<string name="label_about">About</string> <string name="label_about">About</string>
<string name="label_accept">Accept</string> <string name="label_accept">Accept</string>
<string name="label_autocomplete">Autocomplete</string>
<string name="label_avatar">Avatar</string> <string name="label_avatar">Avatar</string>
<string name="label_back">Back</string> <string name="label_back">Back</string>
<string name="label_buffer_name">Buffer Name</string> <string name="label_buffer_name">Buffer Name</string>
...@@ -56,6 +57,7 @@ ...@@ -56,6 +57,7 @@
<string name="label_hide_temp">Hide Temporarily</string> <string name="label_hide_temp">Hide Temporarily</string>
<string name="label_ignore">Ignore</string> <string name="label_ignore">Ignore</string>
<string name="label_ignore_long">Add/remove user to/from ignore list</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_channel">Channel Details</string>
<string name="label_info_core">Core Details</string> <string name="label_info_core">Core Details</string>
<string name="label_info_user">User Details</string> <string name="label_info_user">User Details</string>
...@@ -92,6 +94,7 @@ ...@@ -92,6 +94,7 @@
<string name="label_rename">Rename</string> <string name="label_rename">Rename</string>
<string name="label_save">Save</string> <string name="label_save">Save</string>
<string name="label_select">Select</string> <string name="label_select">Select</string>
<string name="label_send">Send</string>
<string name="label_set_default">Set Default</string> <string name="label_set_default">Set Default</string>
<string name="label_settings">Settings</string> <string name="label_settings">Settings</string>
<string name="label_settings_client">Client Settings</string> <string name="label_settings_client">Client Settings</string>
......
...@@ -161,7 +161,8 @@ class QuasselViewModel : ViewModel() { ...@@ -161,7 +161,8 @@ class QuasselViewModel : ViewModel() {
BufferData( BufferData(
info = info, info = info,
network = network, network = network,
description = user.realName() description = user.realName(),
ircUser = user
) )
} }
} }
......
...@@ -20,11 +20,13 @@ ...@@ -20,11 +20,13 @@
package de.kuschku.quasseldroid.viewmodel.data package de.kuschku.quasseldroid.viewmodel.data
import de.kuschku.libquassel.quassel.BufferInfo import de.kuschku.libquassel.quassel.BufferInfo
import de.kuschku.libquassel.quassel.syncables.IrcUser
import de.kuschku.libquassel.quassel.syncables.Network import de.kuschku.libquassel.quassel.syncables.Network
data class BufferData( data class BufferData(
val info: BufferInfo? = null, val info: BufferInfo? = null,
val network: Network? = null, val network: Network? = null,
val description: String? = 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