Skip to content

Commit 9f015f5

Browse files
committed
nav: Add about-zulip button to menu bar
This is an implementation for issue #1128 This commit includes localizations and tests for the button as well.
1 parent 28b3536 commit 9f015f5

10 files changed

+61
-0
lines changed

assets/l10n/app_en.arb

+4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323
"@switchAccountButton": {
2424
"description": "Label for main-menu button leading to the choose-account page."
2525
},
26+
"aboutZulipMenuItem": "About Zulip",
27+
"@aboutZulipMenuItem": {
28+
"description": "Label for the 'About Zulip' option in the main menu."
29+
},
2630
"tryAnotherAccountMessage": "Your account at {url} is taking a while to load.",
2731
"@tryAnotherAccountMessage": {
2832
"description": "Message that appears on the loading screen after waiting for some time.",

lib/generated/l10n/zulip_localizations.dart

+6
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,12 @@ abstract class ZulipLocalizations {
139139
/// **'Switch account'**
140140
String get switchAccountButton;
141141

142+
/// Label for the 'About Zulip' option in the main menu.
143+
///
144+
/// In en, this message translates to:
145+
/// **'About Zulip'**
146+
String get aboutZulipMenuItem;
147+
142148
/// Message that appears on the loading screen after waiting for some time.
143149
///
144150
/// In en, this message translates to:

lib/generated/l10n/zulip_localizations_ar.dart

+3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class ZulipLocalizationsAr extends ZulipLocalizations {
2626
@override
2727
String get switchAccountButton => 'Switch account';
2828

29+
@override
30+
String get aboutZulipMenuItem => 'About Zulip';
31+
2932
@override
3033
String tryAnotherAccountMessage(Object url) {
3134
return 'Your account at $url is taking a while to load.';

lib/generated/l10n/zulip_localizations_en.dart

+3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class ZulipLocalizationsEn extends ZulipLocalizations {
2626
@override
2727
String get switchAccountButton => 'Switch account';
2828

29+
@override
30+
String get aboutZulipMenuItem => 'About Zulip';
31+
2932
@override
3033
String tryAnotherAccountMessage(Object url) {
3134
return 'Your account at $url is taking a while to load.';

lib/generated/l10n/zulip_localizations_fr.dart

+3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class ZulipLocalizationsFr extends ZulipLocalizations {
2626
@override
2727
String get switchAccountButton => 'Switch account';
2828

29+
@override
30+
String get aboutZulipMenuItem => 'About Zulip';
31+
2932
@override
3033
String tryAnotherAccountMessage(Object url) {
3134
return 'Your account at $url is taking a while to load.';

lib/generated/l10n/zulip_localizations_ja.dart

+3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class ZulipLocalizationsJa extends ZulipLocalizations {
2626
@override
2727
String get switchAccountButton => 'Switch account';
2828

29+
@override
30+
String get aboutZulipMenuItem => 'About Zulip';
31+
2932
@override
3033
String tryAnotherAccountMessage(Object url) {
3134
return 'Your account at $url is taking a while to load.';

lib/generated/l10n/zulip_localizations_pl.dart

+3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class ZulipLocalizationsPl extends ZulipLocalizations {
2626
@override
2727
String get switchAccountButton => 'Switch account';
2828

29+
@override
30+
String get aboutZulipMenuItem => 'About Zulip';
31+
2932
@override
3033
String tryAnotherAccountMessage(Object url) {
3134
return 'Your account at $url is taking a while to load.';

lib/generated/l10n/zulip_localizations_ru.dart

+3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class ZulipLocalizationsRu extends ZulipLocalizations {
2626
@override
2727
String get switchAccountButton => 'Switch account';
2828

29+
@override
30+
String get aboutZulipMenuItem => 'About Zulip';
31+
2932
@override
3033
String tryAnotherAccountMessage(Object url) {
3134
return 'Your account at $url is taking a while to load.';

lib/widgets/home.dart

+19
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
44

55
import '../generated/l10n/zulip_localizations.dart';
66
import '../model/narrow.dart';
7+
import 'about_zulip.dart';
78
import 'action_sheet.dart';
89
import 'app.dart';
910
import 'app_bar.dart';
@@ -259,6 +260,7 @@ void _showMainMenu(BuildContext context, {
259260
// TODO(#1094): Users
260261
const _MyProfileButton(),
261262
const _SwitchAccountButton(),
263+
const _AboutZulipButton(),
262264
// TODO(#198): Set my status
263265
// const SizedBox(height: 8),
264266
// TODO(#97): Settings
@@ -551,6 +553,23 @@ class _SwitchAccountButton extends _MenuButton {
551553
}
552554
}
553555

556+
class _AboutZulipButton extends _MenuButton {
557+
const _AboutZulipButton();
558+
559+
@override
560+
IconData get icon => Icons.info;
561+
562+
@override
563+
String label(ZulipLocalizations zulipLocalizations) {
564+
return zulipLocalizations.aboutZulipMenuItem;
565+
}
566+
567+
@override
568+
void onPressed(BuildContext context) {
569+
Navigator.of(context).push(AboutZulipPage.buildRoute(context));
570+
}
571+
}
572+
554573
/// Apply [Transform.scale] to the child widget when tapped, and reset its scale
555574
/// when released, while animating the transitions.
556575
class AnimatedScaleOnTap extends StatefulWidget {

test/widgets/home_test.dart

+14
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:flutter_checks/flutter_checks.dart';
44
import 'package:flutter_test/flutter_test.dart';
55
import 'package:zulip/api/model/events.dart';
66
import 'package:zulip/model/store.dart';
7+
import 'package:zulip/widgets/about_zulip.dart';
78
import 'package:zulip/widgets/app.dart';
89
import 'package:zulip/widgets/app_bar.dart';
910
import 'package:zulip/widgets/home.dart';
@@ -105,6 +106,9 @@ void main () {
105106
final combinedFeedMenuIconFinder = find.descendant(
106107
of: find.byType(BottomSheet),
107108
matching: find.byIcon(ZulipIcons.message_feed));
109+
final aboutZulipMenuIconFinder = find.descendant(
110+
of: find.byType(BottomSheet),
111+
matching: find.byIcon(Icons.info));
108112

109113
Future<void> tapOpenMenu(WidgetTester tester) async {
110114
await tester.tap(find.byIcon(ZulipIcons.menu));
@@ -215,6 +219,16 @@ void main () {
215219
check(find.byType(ProfilePage)).findsOne();
216220
check(find.text(eg.selfUser.fullName)).findsAny();
217221
});
222+
223+
testWidgets('_AboutZulipButton', (tester) async {
224+
await prepare(tester);
225+
await tapOpenMenu(tester);
226+
227+
await tester.tap(aboutZulipMenuIconFinder);
228+
await tester.pump(Duration.zero); // tap the button
229+
await tester.pump(const Duration(milliseconds: 250)); // wait for animation
230+
check(find.byType(AboutZulipPage)).findsOne();
231+
});
218232
});
219233

220234
group('_LoadingPlaceholderPage', () {

0 commit comments

Comments
 (0)