fix: compact chat subpage typography

This commit is contained in:
AI Bot
2026-06-05 10:53:54 +08:00
parent eb8961fc3f
commit 9807c7a275
10 changed files with 148 additions and 40 deletions

View File

@@ -1,5 +1,7 @@
package com.hyzq.boss;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import android.content.Context;
@@ -38,4 +40,28 @@ public class BossUiMessageBubbleTest {
assertTrue(bodyView.getText().toString().contains("重点"));
assertTrue(bodyView.getText().toString().contains("代码"));
}
@Test
public void buildMessageBubble_usesWechatCompactTextMetrics() {
Context context = RuntimeEnvironment.getApplication();
LinearLayout wrapper = BossUi.buildMessageBubble(
context,
"线程",
"这是一条普通对话内容",
"10:26",
false,
"结果"
);
TextView metaView = (TextView) wrapper.getChildAt(0);
LinearLayout bubble = (LinearLayout) wrapper.getChildAt(1);
TextView kindView = (TextView) bubble.getChildAt(0);
TextView bodyView = (TextView) bubble.getChildAt(1);
assertFalse("消息时间/发送人不应保留默认字体留白", metaView.getIncludeFontPadding());
assertFalse("消息类型标签不应保留默认字体留白", kindView.getIncludeFontPadding());
assertFalse("消息正文不应保留默认字体留白", bodyView.getIncludeFontPadding());
assertEquals("消息正文应对标微信聊天正文", 14f, bodyView.getTextSize() / context.getResources().getDisplayMetrics().scaledDensity, 0.5f);
}
}

View File

@@ -12,6 +12,7 @@ import android.content.SharedPreferences;
import android.graphics.drawable.ColorDrawable;
import android.content.res.ColorStateList;
import android.graphics.drawable.GradientDrawable;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
@@ -47,6 +48,49 @@ import java.util.function.BooleanSupplier;
@RunWith(RobolectricTestRunner.class)
@Config(sdk = 34)
public class ProjectDetailActivityUiTest {
@Test
public void chatSubpageTypographyUsesWechatCompactSizing() {
Intent intent = new Intent()
.putExtra(ProjectDetailActivity.EXTRA_PROJECT_ID, "project-1")
.putExtra(ProjectDetailActivity.EXTRA_PROJECT_NAME, "北区试产线回归");
TestProjectDetailActivity activity = Robolectric
.buildActivity(TestProjectDetailActivity.class, intent)
.setup()
.get();
LinearLayout topBar = activity.findViewById(R.id.screen_top_bar);
TextView title = activity.findViewById(R.id.screen_title);
TextView subtitle = activity.findViewById(R.id.screen_subtitle);
LinearLayout quickActions = activity.findViewById(R.id.project_chat_quick_actions);
ImageButton attachButton = activity.findViewById(R.id.project_chat_attach);
EditText input = activity.findViewById(R.id.project_chat_input);
Button sendButton = activity.findViewById(R.id.project_chat_send);
ReflectionHelpers.callInstanceMethod(activity, "renderQuickActions");
assertEquals("聊天子页面顶部栏左侧留白应和首页一致", BossUi.dp(activity, 16), topBar.getPaddingLeft());
assertFalse("聊天子页面标题不应保留 TextView 默认额外字体留白", title.getIncludeFontPadding());
assertFalse("聊天子页面副标题不应保留 TextView 默认额外字体留白", subtitle.getIncludeFontPadding());
assertEquals("聊天子页面标题不应换行撑高顶部栏", 1, title.getMaxLines());
assertEquals("聊天子页面副标题不应换行撑高顶部栏", 1, subtitle.getMaxLines());
assertEquals("聊天子页面副标题过长时应单行省略", TextUtils.TruncateAt.END, subtitle.getEllipsize());
assertEquals("聊天子页面标题应对标微信页面标题", 18f, title.getTextSize() / activity.getResources().getDisplayMetrics().scaledDensity, 0.5f);
assertEquals("聊天子页面副标题应对标微信辅助说明", 11f, subtitle.getTextSize() / activity.getResources().getDisplayMetrics().scaledDensity, 0.5f);
assertTrue("聊天子页面应渲染项目目标/版本记录按钮", quickActions.getChildCount() >= 2);
Button goalsButton = (Button) quickActions.getChildAt(0);
Button versionsButton = (Button) quickActions.getChildAt(1);
assertEquals("聊天子页面快捷按钮高度不应继续使用旧的大按钮", BossUi.dp(activity, 36), goalsButton.getLayoutParams().height);
assertEquals("聊天子页面快捷按钮文字应对标微信按钮字号", 13f, goalsButton.getTextSize() / activity.getResources().getDisplayMetrics().scaledDensity, 0.5f);
assertEquals("聊天子页面快捷按钮高度应统一", BossUi.dp(activity, 36), versionsButton.getLayoutParams().height);
assertEquals("聊天输入附件按钮不应继续使用 48dp 大图标", BossUi.dp(activity, 40), attachButton.getLayoutParams().width);
assertEquals("聊天输入附件按钮不应继续使用 48dp 大图标", BossUi.dp(activity, 40), attachButton.getLayoutParams().height);
assertTrue("聊天输入框最小高度不应继续撑大底部输入区", input.getMinHeight() <= BossUi.dp(activity, 40));
assertEquals("聊天输入框字号应和微信输入区一致", 14f, input.getTextSize() / activity.getResources().getDisplayMetrics().scaledDensity, 0.5f);
assertEquals("发送按钮高度应和输入框一致", BossUi.dp(activity, 40), sendButton.getLayoutParams().height);
assertEquals("发送按钮字号应对标微信按钮字号", 13f, sendButton.getTextSize() / activity.getResources().getDisplayMetrics().scaledDensity, 0.5f);
}
@Test
public void typingAtInComposerShowsAgentMentionSuggestions() {
Intent intent = new Intent()
@@ -486,8 +530,8 @@ public class ProjectDetailActivityUiTest {
assertTrue(attachView instanceof ImageButton);
ViewGroup.LayoutParams params = attachView.getLayoutParams();
assertTrue(params.width >= BossUi.dp(activity, 46));
assertTrue(params.height >= BossUi.dp(activity, 46));
assertEquals(BossUi.dp(activity, 40), params.width);
assertEquals(BossUi.dp(activity, 40), params.height);
}
@Test
@@ -517,8 +561,8 @@ public class ProjectDetailActivityUiTest {
assertTrue((params.gravity & Gravity.LEFT) == Gravity.LEFT || (params.gravity & Gravity.START) == Gravity.START);
assertEquals(BossUi.dp(activity, 12), params.leftMargin);
assertTrue(params.bottomMargin >= BossUi.dp(activity, 12));
assertEquals(BossUi.dp(activity, 48), params.width);
assertEquals(BossUi.dp(activity, 48), params.height);
assertEquals(BossUi.dp(activity, 44), params.width);
assertEquals(BossUi.dp(activity, 44), params.height);
int baselineScrollCount = activity.scrollChatToBottomCount;
shortcutView.performClick();