From 2f1c16c78185905d0feb09c5166387c428dd129e Mon Sep 17 00:00:00 2001 From: dijunkun Date: Sun, 4 Oct 2026 15:06:19 +0800 Subject: [PATCH] [fix] improve mobile notification and settings icons --- .../java/cn/crossdesk/mobile/MainActivity.java | 6 +++--- .../main/java/cn/crossdesk/mobile/MobileUi.java | 17 +++++++++++++---- .../CrossDeskMobile/AnnouncementInboxView.swift | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/apps/android/app/src/main/java/cn/crossdesk/mobile/MainActivity.java b/apps/android/app/src/main/java/cn/crossdesk/mobile/MainActivity.java index c9d434c6..cf3a98a9 100644 --- a/apps/android/app/src/main/java/cn/crossdesk/mobile/MainActivity.java +++ b/apps/android/app/src/main/java/cn/crossdesk/mobile/MainActivity.java @@ -165,10 +165,10 @@ public final class MainActivity extends Activity implements NativeSession.Listen else if(signalState==1)toast("已连接 "+serverKey()); else {stopSignaling();ensureSignaling();} });renderSignaling();toolbar.addView(signalBadge,ui.size(-2,34));toolbar.addView(new View(this),new LinearLayout.LayoutParams(0,1,1)); - FrameLayout bell=(FrameLayout)ui.iconButton("bell","通知公告",this::announcements);bell.setClipChildren(false);toolbar.setClipChildren(false);toolbar.setClipToPadding(false); + FrameLayout announcementButton=(FrameLayout)ui.iconButton("envelope","通知公告",this::announcements);announcementButton.setClipChildren(false);toolbar.setClipChildren(false);toolbar.setClipToPadding(false); announcementBadge=text("",10,true);announcementBadge.setTextColor(Color.WHITE);announcementBadge.setGravity(Gravity.CENTER);announcementBadge.setMinWidth(dp(16));announcementBadge.setPadding(dp(4),0,dp(4),0);announcementBadge.setBackground(ui.background(RED,12));announcementBadge.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO); - FrameLayout.LayoutParams badgePosition=new FrameLayout.LayoutParams(-2,dp(16),Gravity.TOP|Gravity.END);badgePosition.topMargin=-dp(3);badgePosition.setMarginEnd(-dp(5));bell.addView(announcementBadge,badgePosition);renderAnnouncements(); - toolbar.addView(bell,ui.size(40,40));View spacer=new View(this);toolbar.addView(spacer,ui.size(12,1)); + FrameLayout.LayoutParams badgePosition=new FrameLayout.LayoutParams(-2,dp(16),Gravity.TOP|Gravity.END);badgePosition.topMargin=-dp(3);badgePosition.setMarginEnd(-dp(5));announcementButton.addView(announcementBadge,badgePosition);renderAnnouncements(); + toolbar.addView(announcementButton,ui.size(40,40));View spacer=new View(this);toolbar.addView(spacer,ui.size(12,1)); FrameLayout settingsButton=(FrameLayout)ui.iconButton("settings","设置",this::settings);settingsButton.setClipChildren(false);settingsUpdateButton=settingsButton; TextView updateBadge=text("!",10,true);updateBadge.setTextColor(Color.WHITE);updateBadge.setGravity(Gravity.CENTER);updateBadge.setIncludeFontPadding(false);updateBadge.setBackground(ui.background(RED,8));updateBadge.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);settingsUpdateDot=updateBadge; FrameLayout.LayoutParams updatePosition=new FrameLayout.LayoutParams(dp(16),dp(16),Gravity.TOP|Gravity.END);updatePosition.topMargin=-dp(3);updatePosition.setMarginEnd(-dp(5));settingsButton.addView(settingsUpdateDot,updatePosition); diff --git a/apps/android/app/src/main/java/cn/crossdesk/mobile/MobileUi.java b/apps/android/app/src/main/java/cn/crossdesk/mobile/MobileUi.java index 3749887e..5c7e46c4 100644 --- a/apps/android/app/src/main/java/cn/crossdesk/mobile/MobileUi.java +++ b/apps/android/app/src/main/java/cn/crossdesk/mobile/MobileUi.java @@ -89,10 +89,19 @@ final class MobileUi { c.save();c.scale(getWidth()/24f,getHeight()/24f);paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth(1.7f);paint.setStrokeCap(Paint.Cap.ROUND);paint.setStrokeJoin(Paint.Join.ROUND); switch(name){ case "settings": - c.drawCircle(12,12,7,paint);c.drawCircle(12,12,3,paint); - for(int i=0;i<8;i++){c.save();c.rotate(i*45,12,12);c.drawLine(12,2,12,5,paint);c.restore();}break; - case "bell": - path(c,5,17,6,14,6,9,7,6,10,4,14,4,17,6,18,9,18,14,19,17,5,17);c.drawArc(9,17,15,22,0,180,false,paint);c.drawLine(12,2,12,4,paint);break; + Path gear=new Path(); + float[] toothAngles={-17,-10,10,17}; + for(int tooth=0;tooth<8;tooth++){ + for(int corner=0;corner<4;corner++){ + double angle=Math.toRadians(tooth*45-90+toothAngles[corner]); + float radius=corner==0||corner==3?7.5f:10f; + float x=12+radius*(float)Math.cos(angle),y=12+radius*(float)Math.sin(angle); + if(tooth==0&&corner==0)gear.moveTo(x,y);else gear.lineTo(x,y); + } + } + gear.close();c.drawPath(gear,paint);c.drawCircle(12,12,3.2f,paint);break; + case "envelope": + c.drawRoundRect(2,5,22,19,2,2,paint);path(c,3,6,12,13,21,6);break; case "history": c.drawArc(4,4,21,21,215,315,false,paint);path(c,3,4,3,10,9,10);path(c,12,7,12,13,16,15);break; case "back":path(c,15,4,7,12,15,20);break; diff --git a/apps/ios/CrossDeskMobile/AnnouncementInboxView.swift b/apps/ios/CrossDeskMobile/AnnouncementInboxView.swift index acd5f5b5..941bafdc 100644 --- a/apps/ios/CrossDeskMobile/AnnouncementInboxView.swift +++ b/apps/ios/CrossDeskMobile/AnnouncementInboxView.swift @@ -4,7 +4,7 @@ struct AnnouncementBadge: View { @ObservedObject var inbox: AnnouncementInbox var body: some View { - Image(systemName: "bell") + Image(systemName: "envelope") .font(.system(size: 18, weight: .semibold)) .frame(width: 40, height: 40) .background(Color(.secondarySystemGroupedBackground),