style: tighten pinned header and context ring

This commit is contained in:
kris
2026-04-03 11:14:45 +08:00
parent 4d2d567bf9
commit da7d4e0a7d
2 changed files with 28 additions and 10 deletions

View File

@@ -42,8 +42,8 @@ public final class BossUi {
private static final int DEVICE_STATUS_ABNORMAL = Color.parseColor("#FF5A5A"); private static final int DEVICE_STATUS_ABNORMAL = Color.parseColor("#FF5A5A");
private static final int DEVICE_STATUS_OFFLINE = Color.parseColor("#A7AFB7"); private static final int DEVICE_STATUS_OFFLINE = Color.parseColor("#A7AFB7");
private static final int PINNED_ROW_BG = Color.parseColor("#FFF7F7F7"); 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_TRACK = Color.parseColor("#FFD0D0D0");
private static final int CONTEXT_RING_BG = Color.parseColor("#FFF4F4F4"); private static final int CONTEXT_RING_BG = Color.parseColor("#FFFFFFFF");
private BossUi() {} private BossUi() {}
@@ -706,10 +706,10 @@ public final class BossUi {
if (row.contextIndicatorVisible) { if (row.contextIndicatorVisible) {
FrameLayout ringWrap = new FrameLayout(context); FrameLayout ringWrap = new FrameLayout(context);
LinearLayout.LayoutParams ringWrapParams = new LinearLayout.LayoutParams(dp(context, 28), dp(context, 28)); LinearLayout.LayoutParams ringWrapParams = new LinearLayout.LayoutParams(dp(context, 24), dp(context, 24));
ringWrapParams.topMargin = dp(context, 8); ringWrapParams.topMargin = dp(context, 6);
ringWrap.setLayoutParams(ringWrapParams); 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) ringWrap.setContentDescription(TextUtils.isEmpty(row.contextStatusLabel)
? "上下文使用量" ? "上下文使用量"
: "上下文使用量:" + row.contextStatusLabel); : "上下文使用量:" + row.contextStatusLabel);
@@ -720,7 +720,7 @@ public final class BossUi {
row.contextStatusLevel, row.contextStatusLevel,
row.contextMustFinish 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); ring.setLayoutParams(ringParams);
ringWrap.addView(ring); ringWrap.addView(ring);
trailingColumn.addView(ringWrap); trailingColumn.addView(ringWrap);
@@ -745,9 +745,9 @@ public final class BossUi {
); );
params.leftMargin = dp(context, 16); params.leftMargin = dp(context, 16);
params.rightMargin = dp(context, 16); params.rightMargin = dp(context, 16);
params.bottomMargin = dp(context, 8); params.bottomMargin = dp(context, 6);
row.setLayoutParams(params); 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) { if (listener != null) {
row.setClickable(true); row.setClickable(true);
row.setFocusable(true); row.setFocusable(true);
@@ -1430,7 +1430,7 @@ public final class BossUi {
) { ) {
final int clampedUsage = Math.max(0, Math.min(100, usagePercent)); final int clampedUsage = Math.max(0, Math.min(100, usagePercent));
final int ringColor = resolveContextRingColor(level, mustFinish); final int ringColor = resolveContextRingColor(level, mustFinish);
final float strokeWidth = dp(context, 2.4f); final float strokeWidth = dp(context, 2f);
return new View(context) { return new View(context) {
private final Paint trackPaint = new Paint(Paint.ANTI_ALIAS_FLAG); private final Paint trackPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
private final Paint progressPaint = 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 @Override
protected void onDraw(Canvas canvas) { protected void onDraw(Canvas canvas) {
super.onDraw(canvas); super.onDraw(canvas);
float inset = strokeWidth; float inset = strokeWidth / 2f + dp(context, 0.5f);
arcRect.set(inset, inset, getWidth() - inset, getHeight() - inset); arcRect.set(inset, inset, getWidth() - inset, getHeight() - inset);
canvas.drawArc(arcRect, -90, 360, false, trackPaint); canvas.drawArc(arcRect, -90, 360, false, trackPaint);
canvas.drawArc(arcRect, -90, (360f * clampedUsage) / 100f, false, progressPaint); canvas.drawArc(arcRect, -90, (360f * clampedUsage) / 100f, false, progressPaint);

View File

@@ -7,6 +7,7 @@ import static org.junit.Assert.assertTrue;
import android.content.Context; import android.content.Context;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.view.View; import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
@@ -95,6 +96,11 @@ public class BossUiConversationRowTest {
assertEquals("空闲会话不应再渲染活动点", 2, trailingColumn.getChildCount()); assertEquals("空闲会话不应再渲染活动点", 2, trailingColumn.getChildCount());
assertFalse("右下角应改成环形上下文状态,而不是文字", viewTreeContainsText(trailingColumn, "上下文紧张 34%")); 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 @Test
@@ -127,6 +133,18 @@ public class BossUiConversationRowTest {
assertFalse("置顶会话不应再显示右侧“置顶”文字", viewTreeContainsText(rowView, "置顶")); 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) { private static boolean viewTreeContainsText(View root, String expectedText) {
if (root instanceof TextView) { if (root instanceof TextView) {
CharSequence text = ((TextView) root).getText(); CharSequence text = ((TextView) root).getText();