From da7d4e0a7d864e496f58c1f0cdae39a9bc9823d3 Mon Sep 17 00:00:00 2001 From: kris Date: Fri, 3 Apr 2026 11:14:45 +0800 Subject: [PATCH] style: tighten pinned header and context ring --- .../src/main/java/com/hyzq/boss/BossUi.java | 20 +++++++++---------- .../hyzq/boss/BossUiConversationRowTest.java | 18 +++++++++++++++++ 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/android/app/src/main/java/com/hyzq/boss/BossUi.java b/android/app/src/main/java/com/hyzq/boss/BossUi.java index 65941a1..77801bf 100644 --- a/android/app/src/main/java/com/hyzq/boss/BossUi.java +++ b/android/app/src/main/java/com/hyzq/boss/BossUi.java @@ -42,8 +42,8 @@ public final class BossUi { private static final int DEVICE_STATUS_ABNORMAL = Color.parseColor("#FF5A5A"); private static final int DEVICE_STATUS_OFFLINE = Color.parseColor("#A7AFB7"); private static final int PINNED_ROW_BG = Color.parseColor("#FFF7F7F7"); - private static final int CONTEXT_RING_TRACK = Color.parseColor("#FFD7D7D7"); - private static final int CONTEXT_RING_BG = Color.parseColor("#FFF4F4F4"); + private static final int CONTEXT_RING_TRACK = Color.parseColor("#FFD0D0D0"); + private static final int CONTEXT_RING_BG = Color.parseColor("#FFFFFFFF"); private BossUi() {} @@ -706,10 +706,10 @@ public final class BossUi { if (row.contextIndicatorVisible) { FrameLayout ringWrap = new FrameLayout(context); - LinearLayout.LayoutParams ringWrapParams = new LinearLayout.LayoutParams(dp(context, 28), dp(context, 28)); - ringWrapParams.topMargin = dp(context, 8); + LinearLayout.LayoutParams ringWrapParams = new LinearLayout.LayoutParams(dp(context, 24), dp(context, 24)); + ringWrapParams.topMargin = dp(context, 6); ringWrap.setLayoutParams(ringWrapParams); - ringWrap.setBackground(createRoundedBackground(CONTEXT_RING_BG, dp(context, 14))); + ringWrap.setBackground(createRoundedBackground(CONTEXT_RING_BG, dp(context, 12))); ringWrap.setContentDescription(TextUtils.isEmpty(row.contextStatusLabel) ? "上下文使用量" : "上下文使用量:" + row.contextStatusLabel); @@ -720,7 +720,7 @@ public final class BossUi { row.contextStatusLevel, row.contextMustFinish ); - FrameLayout.LayoutParams ringParams = new FrameLayout.LayoutParams(dp(context, 18), dp(context, 18), Gravity.CENTER); + FrameLayout.LayoutParams ringParams = new FrameLayout.LayoutParams(dp(context, 16), dp(context, 16), Gravity.CENTER); ring.setLayoutParams(ringParams); ringWrap.addView(ring); trailingColumn.addView(ringWrap); @@ -745,9 +745,9 @@ public final class BossUi { ); params.leftMargin = dp(context, 16); params.rightMargin = dp(context, 16); - params.bottomMargin = dp(context, 8); + params.bottomMargin = dp(context, 6); row.setLayoutParams(params); - row.setPadding(0, dp(context, 6), 0, dp(context, 4)); + row.setPadding(0, dp(context, 4), 0, dp(context, 2)); if (listener != null) { row.setClickable(true); row.setFocusable(true); @@ -1430,7 +1430,7 @@ public final class BossUi { ) { final int clampedUsage = Math.max(0, Math.min(100, usagePercent)); final int ringColor = resolveContextRingColor(level, mustFinish); - final float strokeWidth = dp(context, 2.4f); + final float strokeWidth = dp(context, 2f); return new View(context) { private final Paint trackPaint = new Paint(Paint.ANTI_ALIAS_FLAG); private final Paint progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG); @@ -1451,7 +1451,7 @@ public final class BossUi { @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - float inset = strokeWidth; + float inset = strokeWidth / 2f + dp(context, 0.5f); arcRect.set(inset, inset, getWidth() - inset, getHeight() - inset); canvas.drawArc(arcRect, -90, 360, false, trackPaint); canvas.drawArc(arcRect, -90, (360f * clampedUsage) / 100f, false, progressPaint); diff --git a/android/app/src/test/java/com/hyzq/boss/BossUiConversationRowTest.java b/android/app/src/test/java/com/hyzq/boss/BossUiConversationRowTest.java index 450dd04..5798a38 100644 --- a/android/app/src/test/java/com/hyzq/boss/BossUiConversationRowTest.java +++ b/android/app/src/test/java/com/hyzq/boss/BossUiConversationRowTest.java @@ -7,6 +7,7 @@ import static org.junit.Assert.assertTrue; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.view.View; +import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.TextView; @@ -95,6 +96,11 @@ public class BossUiConversationRowTest { assertEquals("空闲会话不应再渲染活动点", 2, trailingColumn.getChildCount()); assertFalse("右下角应改成环形上下文状态,而不是文字", viewTreeContainsText(trailingColumn, "上下文紧张 34%")); + FrameLayout ringWrap = (FrameLayout) trailingColumn.getChildAt(1); + assertEquals("上下文环外框应更克制,接近微信右侧小图标尺寸", BossUi.dp(context, 24), ringWrap.getLayoutParams().width); + assertEquals("上下文环外框应更克制,接近微信右侧小图标尺寸", BossUi.dp(context, 24), ringWrap.getLayoutParams().height); + assertEquals("上下文环本体应更细更轻", BossUi.dp(context, 16), ringWrap.getChildAt(0).getLayoutParams().width); + assertEquals("上下文环本体应更细更轻", BossUi.dp(context, 16), ringWrap.getChildAt(0).getLayoutParams().height); } @Test @@ -127,6 +133,18 @@ public class BossUiConversationRowTest { assertFalse("置顶会话不应再显示右侧“置顶”文字", viewTreeContainsText(rowView, "置顶")); } + @Test + public void buildConversationSectionHeader_usesTighterWechatSpacing() { + Context context = RuntimeEnvironment.getApplication(); + + LinearLayout header = BossUi.buildConversationSectionHeader(context, "置顶会话", "收起", null); + + LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) header.getLayoutParams(); + assertEquals("分组标题和列表之间应再收紧一点", BossUi.dp(context, 6), params.bottomMargin); + assertEquals("分组头顶部留白应更轻", BossUi.dp(context, 4), header.getPaddingTop()); + assertEquals("分组头底部留白应更轻", BossUi.dp(context, 2), header.getPaddingBottom()); + } + private static boolean viewTreeContainsText(View root, String expectedText) { if (root instanceof TextView) { CharSequence text = ((TextView) root).getText();