From 67cd4c8caee3747e7aa5b2822d8db9b3a564ab4f Mon Sep 17 00:00:00 2001 From: billy Date: Sat, 14 Dec 2024 07:57:21 +0000 Subject: [PATCH 1/2] icons: Add info icon for the main menu The icon is taken from Zulip web: https://github.com/zulip/zulip/blob/74d7f1192/web/shared/icons/info.svg Because there were no suitable icon in the Icons page of the Figma design: https://www.figma.com/design/1JTNtYo9memgW7vV6d0ygq/Zulip-Mobile?node-id=544-22131&p=f --- assets/icons/ZulipIcons.ttf | Bin 11420 -> 11668 bytes assets/icons/info.svg | 1 + lib/widgets/icons.dart | 35 +++++++++++++++++++---------------- 3 files changed, 20 insertions(+), 16 deletions(-) create mode 100644 assets/icons/info.svg diff --git a/assets/icons/ZulipIcons.ttf b/assets/icons/ZulipIcons.ttf index f3a09b83387dea5fb0de957b5ff009e7906044e8..57a301f2e8125621e6f781304f2eed0793d16c48 100644 GIT binary patch delta 1791 zcmb7FTWB0*6h8m#&L(?JjoW0iY1WvX%-*uMnc10SHycZ6s~~7-Z0cg9Zqi)M%{Ima zimPDz(ih8!h>Dgx6;UV+ga~~ok~e+GgBFw^HR#*E1cW}++c%RxsXn^HH|M{cbG~!F ze`fa6$_KC1h!K&O-XRC&o*h0ncO_(ErYEWwSAN^R1K$ULK8=M&<}71;7m%jsmshWE|NSRo zw=n;GZgIR^9aubl5($>DaAm%_y2Q@06DS~rdFMiPe&YDnNrfnZeZg2-yu5s^_&E}$ zZo#L1<8IVnwmU!q^HBvwO$ zFiKF7AYms~kx0dMFC4RW0bv9y6hvqe6sk?0p(jYB0-}1b(u{GEH2C$?lZZ*83>hW6 zC`18jw976bV;md>u!+bg!(XMEL6uzqrm3q7`czuk7@?N(?}sBq2=QO zg$#|(&{-OVmX;n8C=a!;)JRYVGNtWx)#i}Fc7nv((PG5z=Rmx6P^jo4K~G_HkWM5Y z0*mwo zIiF!s^L^({^Pbab=EPcd&wdMtc2OGM1r+6g3dHu1_crDplq%r5Kr^(qA2oj#qxm>^ zG-OYJH;;%kj@KJvW99q;=f38?=jr$C zcvrmZzNGJMf53mqf7|~@;ESfg|9@?K=lQV-?+kv9J;xrN=P(|MQ#fj+rGo`sU2>Ue zx{;4y+>m!=m^Q#f%@|;YuCzv2YfG>pz#3d#u?&mJtSi8R5vCZrp=&WYCJWRY4ol&1 zbFjTV7zhOdp}*3yboG2?yK?@jBp(jXV$6P--JG4>{9&}B>AF@K6$Zo2`^{}_xP`xF z9kC9^{Gs+%|D&=0gdS#L_1VquH)pNL`&NpL^{{#j{|NV!s{$J^Ur2o>I%gIp7tMO= GtA79(^8KCw delta 1542 zcmb7^OK4nG9LB#pnVDoJne<_*(WEhE-kJB!Yw{37YpaN0Xlg_(v}2k_F==8OYa-&f z6G4#n)`b$Jptz7$#1wRqg^S{%xF{l`uCgg^idb+_1kv9;bE0mY!*{=X&iVhp|KprH zmtWX?zAi^ntKL+T%1=x`d+6{dN1l_Ms?@aqndy={b8GsN6nq-1Q?tvp)!60EAEeMG zYu6W+Hsb}j zTUwcYv^Kg`W)huZ;kD)3`l@r>=_Y|r=DlZY%X0_5nslYi>r!B3b>;lpNB7=4C-q;) z=Jv(ycx=K{Kox_>w!gf1r{YX_Js*x7Xc2xJ0J1!e;8D5$9V zG^Qy9C_ceRDy1~sublEKVA0C6ptwrR(<-x5kxQ`Xf9x~HFH7^9u}!OJ{IhcE2s}s% zE&>@N>>}i{J%V8ohZc1rbRUjc0=Oo0LHiWaAU-)(_Vb?A03pUnGmL#ZUVf@$sHD*y zBtnR^l32OMrbl~7Jg$1tWZiEns1UZKy^65WSpO$a((FYdiJ)&2CPWJPqdKM&df4AcoApm#@fClu2*E*z&mq4tpnpk2!tbX7GwP z8LF3d%&nJxCL#X|&cjhYi5)aQV;&{V0OO?2Xyb05_iHF#NfToL)=9>3YT!k1} zN*kd;3GykB-4K^xTvhK-_z3c0Z(nn*3-5ta#x3XacvS|o$&t}Su`o828n3edhIc9y z@!o9?*S{ya{~HG5lA3iGdHkbuuy6yY_C0{jYXlS{8HY}=JH(Ne%ymQg?^nA-Vk?zP$ \ No newline at end of file diff --git a/lib/widgets/icons.dart b/lib/widgets/icons.dart index 2bc1621b56..ba21bec42f 100644 --- a/lib/widgets/icons.dart +++ b/lib/widgets/icons.dart @@ -78,53 +78,56 @@ abstract final class ZulipIcons { /// The Zulip custom icon "inbox". static const IconData inbox = IconData(0xf112, fontFamily: "Zulip Icons"); + /// The Zulip custom icon "info". + static const IconData info = IconData(0xf113, fontFamily: "Zulip Icons"); + /// The Zulip custom icon "inherit". - static const IconData inherit = IconData(0xf113, fontFamily: "Zulip Icons"); + static const IconData inherit = IconData(0xf114, fontFamily: "Zulip Icons"); /// The Zulip custom icon "language". - static const IconData language = IconData(0xf114, fontFamily: "Zulip Icons"); + static const IconData language = IconData(0xf115, fontFamily: "Zulip Icons"); /// The Zulip custom icon "lock". - static const IconData lock = IconData(0xf115, fontFamily: "Zulip Icons"); + static const IconData lock = IconData(0xf116, fontFamily: "Zulip Icons"); /// The Zulip custom icon "menu". - static const IconData menu = IconData(0xf116, fontFamily: "Zulip Icons"); + static const IconData menu = IconData(0xf117, fontFamily: "Zulip Icons"); /// The Zulip custom icon "message_feed". - static const IconData message_feed = IconData(0xf117, fontFamily: "Zulip Icons"); + static const IconData message_feed = IconData(0xf118, fontFamily: "Zulip Icons"); /// The Zulip custom icon "mute". - static const IconData mute = IconData(0xf118, fontFamily: "Zulip Icons"); + static const IconData mute = IconData(0xf119, fontFamily: "Zulip Icons"); /// The Zulip custom icon "read_receipts". - static const IconData read_receipts = IconData(0xf119, fontFamily: "Zulip Icons"); + static const IconData read_receipts = IconData(0xf11a, fontFamily: "Zulip Icons"); /// The Zulip custom icon "send". - static const IconData send = IconData(0xf11a, fontFamily: "Zulip Icons"); + static const IconData send = IconData(0xf11b, fontFamily: "Zulip Icons"); /// The Zulip custom icon "share". - static const IconData share = IconData(0xf11b, fontFamily: "Zulip Icons"); + static const IconData share = IconData(0xf11c, fontFamily: "Zulip Icons"); /// The Zulip custom icon "share_ios". - static const IconData share_ios = IconData(0xf11c, fontFamily: "Zulip Icons"); + static const IconData share_ios = IconData(0xf11d, fontFamily: "Zulip Icons"); /// The Zulip custom icon "smile". - static const IconData smile = IconData(0xf11d, fontFamily: "Zulip Icons"); + static const IconData smile = IconData(0xf11e, fontFamily: "Zulip Icons"); /// The Zulip custom icon "star". - static const IconData star = IconData(0xf11e, fontFamily: "Zulip Icons"); + static const IconData star = IconData(0xf11f, fontFamily: "Zulip Icons"); /// The Zulip custom icon "star_filled". - static const IconData star_filled = IconData(0xf11f, fontFamily: "Zulip Icons"); + static const IconData star_filled = IconData(0xf120, fontFamily: "Zulip Icons"); /// The Zulip custom icon "topic". - static const IconData topic = IconData(0xf120, fontFamily: "Zulip Icons"); + static const IconData topic = IconData(0xf121, fontFamily: "Zulip Icons"); /// The Zulip custom icon "unmute". - static const IconData unmute = IconData(0xf121, fontFamily: "Zulip Icons"); + static const IconData unmute = IconData(0xf122, fontFamily: "Zulip Icons"); /// The Zulip custom icon "user". - static const IconData user = IconData(0xf122, fontFamily: "Zulip Icons"); + static const IconData user = IconData(0xf123, fontFamily: "Zulip Icons"); // END GENERATED ICON DATA } From eb3e2aab520266553db3777b231731a1555647ad Mon Sep 17 00:00:00 2001 From: billy Date: Fri, 13 Dec 2024 21:17:14 +0000 Subject: [PATCH 2/2] nav: Add an About Zulip button to the main menu Fixes: #1128 --- lib/widgets/home.dart | 19 +++++++++++++++++++ test/widgets/home_test.dart | 11 +++++++++++ 2 files changed, 30 insertions(+) diff --git a/lib/widgets/home.dart b/lib/widgets/home.dart index 45c5ea43c1..9616454f30 100644 --- a/lib/widgets/home.dart +++ b/lib/widgets/home.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import '../generated/l10n/zulip_localizations.dart'; import '../model/narrow.dart'; +import 'about_zulip.dart'; import 'action_sheet.dart'; import 'app.dart'; import 'app_bar.dart'; @@ -269,6 +270,7 @@ void _showMainMenu(BuildContext context, { // TODO(#97): Settings // TODO(#661): Notifications // const SizedBox(height: 8), + const _AboutZulipButton(), // TODO(#1095): VersionInfo ]; @@ -556,6 +558,23 @@ class _SwitchAccountButton extends _MenuButton { } } +class _AboutZulipButton extends _MenuButton { + const _AboutZulipButton(); + + @override + IconData get icon => ZulipIcons.info; + + @override + String label(ZulipLocalizations zulipLocalizations) { + return zulipLocalizations.aboutPageTitle; + } + + @override + void onPressed(BuildContext context) { + Navigator.of(context).push(AboutZulipPage.buildRoute(context)); + } +} + /// Apply [Transform.scale] to the child widget when tapped, and reset its scale /// when released, while animating the transitions. class AnimatedScaleOnTap extends StatefulWidget { diff --git a/test/widgets/home_test.dart b/test/widgets/home_test.dart index 27b3cac8e0..a86bc5c34e 100644 --- a/test/widgets/home_test.dart +++ b/test/widgets/home_test.dart @@ -5,6 +5,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:zulip/api/model/events.dart'; import 'package:zulip/model/narrow.dart'; import 'package:zulip/model/store.dart'; +import 'package:zulip/widgets/about_zulip.dart'; import 'package:zulip/widgets/app.dart'; import 'package:zulip/widgets/app_bar.dart'; import 'package:zulip/widgets/home.dart'; @@ -238,6 +239,16 @@ void main () { check(find.byType(ProfilePage)).findsOne(); check(find.text(eg.selfUser.fullName)).findsAny(); }); + + testWidgets('_AboutZulipButton', (tester) async { + await prepare(tester); + await tapOpenMenu(tester); + + await tester.tap(find.byIcon(ZulipIcons.info)); + await tester.pump(Duration.zero); // tap the button + await tester.pump(const Duration(milliseconds: 250)); // wait for animation + check(find.byType(AboutZulipPage)).findsOne(); + }); }); group('_LoadingPlaceholderPage', () {