fix trending tags for rtl languages (#4889)

closes https://github.com/tuskyapp/Tusky/issues/4887

And some other small improvements like better paddings and font sizes.
Also the `status_info` in `item_status` now looks nicer in rtl mode.
This commit is contained in:
Konrad Pozniak 2025-01-23 19:25:46 +01:00 committed by GitHub
commit 8f8b8195a1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 60 additions and 73 deletions

View file

@ -41,7 +41,7 @@ class TrendingTagViewHolder(
binding.totalAccounts.text = formatNumber(totalAccounts, 1000)
binding.currentUsage.text = numberFormat.format(tagViewData.usage.last())
binding.currentAccounts.text = numberFormat.format(tagViewData.usage.last())
binding.currentAccounts.text = numberFormat.format(tagViewData.accounts.last())
itemView.setOnClickListener {
onViewTag(tagViewData.name)

View file

@ -8,7 +8,6 @@ import kotlin.math.abs
import kotlin.math.ln
import kotlin.math.pow
private val numberFormatter: NumberFormat = NumberFormat.getInstance()
private val ln_1k = ln(1000.0)
/**
@ -19,6 +18,7 @@ private val ln_1k = ln(1000.0)
* a suffix appropriate to the scaling is appended.
*/
fun formatNumber(num: Long, min: Int = 100000): String {
val numberFormatter: NumberFormat = NumberFormat.getInstance()
val absNum = abs(num)
if (absNum < min) return numberFormatter.format(num)

View file

@ -21,6 +21,7 @@ import android.graphics.Paint
import android.graphics.Path
import android.graphics.PathMeasure
import android.graphics.Rect
import android.text.TextUtils
import android.util.AttributeSet
import android.view.View
import androidx.annotation.ColorInt
@ -29,6 +30,7 @@ import androidx.core.content.res.use
import com.google.android.material.R as materialR
import com.google.android.material.color.MaterialColors
import com.keylesspalace.tusky.R
import java.util.Locale
import kotlin.math.max
class GraphView @JvmOverloads constructor(
@ -68,63 +70,40 @@ class GraphView @JvmOverloads constructor(
private var primaryLinePath: Path = Path()
private var secondaryLinePath: Path = Path()
private var isRtlLayout: Boolean = false
var maxTrendingValue: Long = 300
var primaryLineData: List<Long> = if (isInEditMode) {
listOf(
30,
60,
70,
80,
130,
190,
80
)
listOf(30, 60, 70, 80, 130, 190, 80)
} else {
listOf(
1,
1,
1,
1,
1,
1,
1
)
listOf(1, 1, 1, 1, 1, 1, 1)
}
set(value) {
field = value.map { max(1, it) }
if (isRtlLayout) {
field = field.reversed()
}
primaryLinePath.reset()
invalidate()
}
var secondaryLineData: List<Long> = if (isInEditMode) {
listOf(
10,
20,
40,
60,
100,
132,
20
)
listOf(10, 20, 40, 60, 100, 132, 20)
} else {
listOf(
1,
1,
1,
1,
1,
1,
1
)
listOf(1, 1, 1, 1, 1, 1, 1)
}
set(value) {
field = value.map { max(1, it) }
if (isRtlLayout) {
field = field.reversed()
}
secondaryLinePath.reset()
invalidate()
}
init {
initFromXML(attrs)
isRtlLayout = TextUtils.getLayoutDirectionFromLocale(Locale.getDefault()) == LAYOUT_DIRECTION_RTL
}
private fun initFromXML(attr: AttributeSet?) {
@ -291,7 +270,7 @@ class GraphView @JvmOverloads constructor(
linePath = secondaryLinePath,
linePaint = secondaryLinePaint,
circlePaint = secondaryCirclePaint,
lineThickness = lineWidth
lineThickness = lineWidth,
)
drawLine(
canvas = canvas,
@ -317,8 +296,11 @@ class GraphView @JvmOverloads constructor(
)
val pm = PathMeasure(linePath, false)
val dotPosition = if (isRtlLayout) 0f else pm.length
val coord = floatArrayOf(0f, 0f)
pm.getPosTan(pm.length * 1f, coord, null)
pm.getPosTan(dotPosition, coord, null)
drawCircle(coord[0], coord[1], lineThickness * 2f, circlePaint)
}

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="0.6" android:color="@color/colorBackground" />
</selector>
<item android:alpha="0.6" android:color="?android:colorBackground" />
</selector>

View file

@ -39,12 +39,13 @@
android:textAlignment="textEnd"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?attr/colorPrimary"
android:textSize="8sp"
android:textSize="12sp"
android:textStyle="normal"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toTopOf="@id/current_accounts"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/graph"
tools:ignore="RtlSymmetry"
tools:text="12 345" />
<TextView
@ -56,12 +57,13 @@
android:textAlignment="textEnd"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="@color/warning_color"
android:textSize="8sp"
android:textSize="12sp"
android:textStyle="normal"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="@id/graph"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/graph"
tools:ignore="RtlSymmetry"
tools:text="12 345" />
<androidx.constraintlayout.widget.ConstraintLayout
@ -112,14 +114,15 @@
android:id="@+id/usageLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginStart="5dp"
android:importantForAccessibility="no"
android:text="@string/total_usage"
android:textAlignment="textEnd"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:textColorTertiary"
app:layout_constrainedWidth="false"
app:layout_constraintBaseline_toBaselineOf="@+id/total_usage"
app:layout_constraintBottom_toBottomOf="@+id/total_usage"
app:layout_constraintTop_toTopOf="@+id/total_usage"
app:layout_constraintStart_toEndOf="@id/barrier2" />
<TextView
@ -141,13 +144,14 @@
android:id="@+id/accountsLabel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginStart="5dp"
android:importantForAccessibility="no"
android:text="@string/total_accounts"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:textColorTertiary"
app:layout_constrainedWidth="true"
app:layout_constraintBaseline_toBaselineOf="@+id/total_accounts"
app:layout_constraintBottom_toBottomOf="@+id/total_accounts"
app:layout_constraintTop_toTopOf="@+id/total_accounts"
app:layout_constraintStart_toEndOf="@id/barrier2" />
<androidx.constraintlayout.widget.Barrier
@ -157,6 +161,7 @@
app:barrierDirection="end"
app:constraint_referenced_ids="total_usage,total_accounts"
tools:layout_editor_absoluteY="8dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -12,6 +12,7 @@
android:id="@+id/notification_policy_summary_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="@string/filtered_notifications"
android:textColor="?android:textColorSecondary"
android:textStyle="normal|bold"
@ -23,6 +24,7 @@
android:id="@+id/notification_policy_summary_description"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:textColor="?android:textColorSecondary"
app:layout_constraintEnd_toStartOf="@id/notification_policy_summary_badge"
app:layout_constraintStart_toStartOf="parent"

View file

@ -12,21 +12,22 @@
<TextView
android:id="@+id/status_info"
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="14dp"
android:layout_marginTop="@dimen/status_reblogged_bar_padding_top"
android:layout_marginEnd="14dp"
android:drawablePadding="6dp"
android:gravity="center_vertical"
android:gravity="start"
android:importantForAccessibility="no"
android:paddingStart="38dp"
android:textColor="?android:textColorTertiary"
android:textSize="?attr/status_text_medium"
app:drawableStartCompat="@drawable/ic_reblog_18dp"
app:drawableTint="?android:textColorTertiary"
app:layout_constraintLeft_toRightOf="parent"
app:layout_constraintRight_toLeftOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="RtlSymmetry"
tools:text="ConnyDuck boosted"

View file

@ -35,16 +35,17 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:importantForAccessibility="no"
android:paddingStart="6dp"
android:paddingStart="8dp"
android:textAlignment="textEnd"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?attr/colorPrimary"
android:textSize="8sp"
android:textSize="12sp"
android:textStyle="normal"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toTopOf="@id/current_accounts"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1"
app:layout_constraintStart_toEndOf="@id/graph"
tools:ignore="RtlSymmetry"
tools:text="12 345" />
<TextView
@ -52,17 +53,18 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:importantForAccessibility="no"
android:paddingStart="6dp"
android:paddingStart="8dp"
android:textAlignment="textEnd"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="@color/warning_color"
android:textSize="8sp"
android:textSize="12sp"
android:textStyle="normal"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="@id/graph"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1"
app:layout_constraintStart_toEndOf="@id/graph"
tools:text="12 345" />
tools:ignore="RtlSymmetry"
tools:text="13" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/legend_container"
@ -101,8 +103,6 @@
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:textColor="?attr/colorPrimary"
android:textStyle="normal|bold"
app:layout_constrainedWidth="false"
app:layout_constraintEnd_toStartOf="@id/usageLabel"
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tag"
@ -112,16 +112,15 @@
android:id="@+id/usageLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginStart="5dp"
android:importantForAccessibility="no"
android:text="@string/total_usage"
android:textAlignment="textEnd"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:textColorTertiary"
app:layout_constrainedWidth="false"
app:layout_constraintBaseline_toBaselineOf="@+id/total_usage"
app:layout_constraintEnd_toStartOf="@id/total_accounts"
app:layout_constraintStart_toEndOf="@+id/total_usage" />
app:layout_constraintBottom_toBottomOf="@+id/total_usage"
app:layout_constraintStart_toEndOf="@+id/total_usage"
app:layout_constraintTop_toTopOf="@+id/total_usage" />
<TextView
android:id="@+id/total_accounts"
@ -134,8 +133,6 @@
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:textColor="@color/warning_color"
android:textStyle="normal|bold"
app:layout_constrainedWidth="false"
app:layout_constraintEnd_toStartOf="@+id/accountsLabel"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toEndOf="@id/usageLabel"
app:layout_constraintTop_toBottomOf="@+id/tag"
@ -145,14 +142,15 @@
android:id="@+id/accountsLabel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginStart="5dp"
android:importantForAccessibility="no"
android:text="@string/total_accounts"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:textColorTertiary"
app:layout_constrainedWidth="true"
app:layout_constraintBaseline_toBaselineOf="@+id/total_accounts"
app:layout_constraintStart_toEndOf="@id/total_accounts" />
app:layout_constraintBottom_toBottomOf="@+id/total_accounts"
app:layout_constraintStart_toEndOf="@id/total_accounts"
app:layout_constraintTop_toTopOf="@+id/total_accounts" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -12,6 +12,5 @@
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:textAppearance="?android:attr/textAppearanceListItem"
android:textAlignment="textEnd"
android:textColor="?android:textColorTertiary"
tools:text="@string/date_range" />