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

Show user count in UI

parent b361616e
Branches
Tags
No related merge requests found
Pipeline #
...@@ -84,6 +84,7 @@ import de.kuschku.quasseldroid.util.missingfeatures.RequiredFeatures ...@@ -84,6 +84,7 @@ import de.kuschku.quasseldroid.util.missingfeatures.RequiredFeatures
import de.kuschku.quasseldroid.util.service.ServiceBoundActivity import de.kuschku.quasseldroid.util.service.ServiceBoundActivity
import de.kuschku.quasseldroid.util.ui.DragInterceptBottomSheetBehavior import de.kuschku.quasseldroid.util.ui.DragInterceptBottomSheetBehavior
import de.kuschku.quasseldroid.util.ui.MaterialContentLoadingProgressBar import de.kuschku.quasseldroid.util.ui.MaterialContentLoadingProgressBar
import de.kuschku.quasseldroid.util.ui.NickCountDrawable
import de.kuschku.quasseldroid.viewmodel.EditorViewModel import de.kuschku.quasseldroid.viewmodel.EditorViewModel
import de.kuschku.quasseldroid.viewmodel.data.BufferData import de.kuschku.quasseldroid.viewmodel.data.BufferData
import org.threeten.bp.Instant import org.threeten.bp.Instant
...@@ -681,6 +682,11 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc ...@@ -681,6 +682,11 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
} }
override fun onCreateOptionsMenu(menu: Menu?): Boolean { override fun onCreateOptionsMenu(menu: Menu?): Boolean {
val nickCountDrawableSize = resources.getDimensionPixelSize(R.dimen.size_nick_count)
val nickCountDrawableColor = toolbar.context.theme.styledAttributes(R.attr.colorControlNormal) {
getColor(0, 0)
}
menuInflater.inflate(R.menu.activity_main, menu) menuInflater.inflate(R.menu.activity_main, menu)
menu?.findItem(R.id.action_nicklist)?.isVisible = bufferData?.info?.type?.hasFlag(Buffer_Type.ChannelBuffer) ?: false menu?.findItem(R.id.action_nicklist)?.isVisible = bufferData?.info?.type?.hasFlag(Buffer_Type.ChannelBuffer) ?: false
menu?.findItem(R.id.action_filter_messages)?.isVisible = menu?.findItem(R.id.action_filter_messages)?.isVisible =
...@@ -691,6 +697,12 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc ...@@ -691,6 +697,12 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
bufferData?.info?.type?.hasFlag(Buffer_Type.QueryBuffer) ?: false) && bufferData?.info?.type?.hasFlag(Buffer_Type.QueryBuffer) ?: false) &&
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
menu?.retint(toolbar.context) menu?.retint(toolbar.context)
viewModel.nickData.toLiveData().observe(this, Observer {
val count = it?.count() ?: 0
menu?.findItem(R.id.action_nicklist)?.icon = NickCountDrawable(count,
nickCountDrawableSize,
nickCountDrawableColor)
})
return super.onCreateOptionsMenu(menu) return super.onCreateOptionsMenu(menu)
} }
......
package de.kuschku.quasseldroid.util.ui
import android.graphics.*
import android.graphics.drawable.Drawable
import android.support.annotation.ColorInt
import android.support.annotation.Dimension
class NickCountDrawable(
count: Int,
@Dimension private val size: Int,
@ColorInt textColor: Int
) : Drawable() {
private val paint = Paint().apply {
color = textColor
isAntiAlias = true
style = Paint.Style.FILL
typeface = Typeface.DEFAULT_BOLD
textAlign = Paint.Align.CENTER
}
private val formattedText: String = formatCount(count)
private fun formatCount(count: Int) = when {
count >= 10_000 -> String.format("%.00fK", count / 1_000f)
count >= 1_000 -> String.format("%.01fK", count / 1_000f)
else -> "$count"
}
private val showText: Boolean = count > 0
private val icon = Path().apply {
moveTo(16f, 13f)
cubicTo(15.71f, 13f, 15.38f, 13f, 15.03f, 13.05f)
cubicTo(16.19f, 13.89f, 17f, 15f, 17f, 16.5f)
lineTo(17f, 19f)
lineTo(23f, 19f)
lineTo(23f, 16.5f)
cubicTo(23f, 14.17f, 18.33f, 13f, 16f, 13f)
moveTo(8f, 13f)
cubicTo(5.67f, 13f, 1f, 14.17f, 1f, 16.5f)
lineTo(1f, 19f)
lineTo(15f, 19f)
lineTo(15f, 16.5f)
cubicTo(15f, 14.17f, 10.33f, 13f, 8f, 13f)
addCircle(8f, 8f, 3f, Path.Direction.CCW)
addCircle(16f, 8f, 3f, Path.Direction.CCW)
close()
}
override fun getIntrinsicHeight() = size
override fun getIntrinsicWidth() = size
private val tmpPath = Path()
override fun setAlpha(alpha: Int) {
paint.alpha = alpha
}
override fun getOpacity(): Int = PixelFormat.TRANSLUCENT
override fun setColorFilter(colorFilter: ColorFilter?) {
paint.colorFilter = colorFilter
}
override fun draw(canvas: Canvas) {
if (bounds.width() <= 0 || bounds.height() <= 0) {
// Nothing to draw
return
}
val smallestDimension = Math.min(bounds.width(), bounds.height())
icon.transform(Matrix().apply {
preScale(smallestDimension / 24f, smallestDimension / 24f, 0f, 0f)
if (showText) {
preTranslate(0f, -8f)
}
}, tmpPath)
paint.textSize = smallestDimension * 0.6f
canvas.drawPath(tmpPath, paint)
if (showText) {
canvas.drawText(formattedText, bounds.width() / 2f,
bounds.height() * 0.85f - ((paint.descent() + paint.ascent()) / 2f), paint)
}
}
}
...@@ -43,4 +43,5 @@ ...@@ -43,4 +43,5 @@
<dimen name="notification_avatar_width">64dp</dimen> <dimen name="notification_avatar_width">64dp</dimen>
<dimen name="notification_avatar_height">64dp</dimen> <dimen name="notification_avatar_height">64dp</dimen>
<dimen name="size_nick_count">24dp</dimen>
</resources> </resources>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment