diff --git a/assets/fonts/CwtchIcons.ttf b/assets/fonts/CwtchIcons.ttf new file mode 100644 index 0000000..a2dd204 Binary files /dev/null and b/assets/fonts/CwtchIcons.ttf differ diff --git a/lib/config.dart b/lib/config.dart index 7d0c4b8..281f4c0 100644 --- a/lib/config.dart +++ b/lib/config.dart @@ -3,4 +3,4 @@ const dev_version = "development"; class EnvironmentConfig { static const BUILD_VER = String.fromEnvironment('BUILD_VER', defaultValue: dev_version); static const BUILD_DATE = String.fromEnvironment('BUILD_DATE', defaultValue: "now"); -} +} \ No newline at end of file diff --git a/lib/cwtch_icons_icons.dart b/lib/cwtch_icons_icons.dart new file mode 100644 index 0000000..127cfcf --- /dev/null +++ b/lib/cwtch_icons_icons.dart @@ -0,0 +1,105 @@ +/// Flutter icons MyFlutterApp +/// Copyright (C) 2021 by original authors @ fluttericon.com, fontello.com +/// This font was generated by FlutterIcon.com, which is derived from Fontello. +/// +/// To use this font, place it in your fonts/ directory and include the +/// following in your pubspec.yaml +/// +/// flutter: +/// fonts: +/// - family: CwtchIcons +/// fonts: +/// - asset: assets/fonts/CwtchIcons.ttf +/// +/// +/// +import 'package:flutter/widgets.dart'; + +class CwtchIcons { + CwtchIcons._(); + + static const _kFontFam = 'CwtchIcons'; + static const String? _kFontPkg = null; + + static const IconData arrow_back_24px = IconData(0xe800, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData attach_file_24px = IconData(0xe801, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData block_peer = IconData(0xe802, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData block_unknown = IconData(0xe803, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData block_24px = IconData(0xe804, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData brightness_5_24px = IconData(0xe805, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData camera_alt_24px = IconData(0xe806, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData change_language = IconData(0xe807, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData change_theme = IconData(0xe808, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData chat_bubble_empty_24px = IconData(0xe809, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData chat_bubble_24px = IconData(0xe80a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData chat_seetings_24px = IconData(0xe80b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData check_24px = IconData(0xe80c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData chevron_left_24px = IconData(0xe80d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData clear_24px = IconData(0xe80e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData content_copy_24px = IconData(0xe80f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData create_group = IconData(0xe810, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData cwtch_knott = IconData(0xe811, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData dark_mode_24px = IconData(0xe812, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData delete_24px = IconData(0xe813, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData dns_24px = IconData(0xe814, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData drag_indicator_24px = IconData(0xe815, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData edit_24px = IconData(0xe816, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData enable_experiments = IconData(0xe817, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData enable_groups = IconData(0xe818, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData eye_closed = IconData(0xe819, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData eye_open = IconData(0xe81a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData favorite_24dp = IconData(0xe81b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData favorite_black_24dp_broken = IconData(0xe81c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData favorite_black_24dp_brokenhalf = IconData(0xe81d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData favorite_black_24dp_malformed = IconData(0xe81e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData favorite_black_24dp_sad = IconData(0xe81f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData group_add_24px = IconData(0xe820, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData group_settings_24px = IconData(0xe821, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData groups_24px = IconData(0xe822, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData info_24px = IconData(0xe823, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData join_group = IconData(0xe824, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData list_black_24dp = IconData(0xe825, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData lock_open_24px = IconData(0xe826, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData lock_24px = IconData(0xe827, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData maps_ugc_24px = IconData(0xe828, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData menu_24px = IconData(0xe829, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData message_24px = IconData(0xe82a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData mood_24px = IconData(0xe82b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData more_vert_24px = IconData(0xe82c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData negative_heart_24px = IconData(0xe82d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData onion_off = IconData(0xe82e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData onion_on = IconData(0xe82f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData onion_waiting = IconData(0xe830, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData peer_history = IconData(0xe831, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData peer_settings_24px = IconData(0xe832, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData person_add_alt_1_24px = IconData(0xe833, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData person_add_24px = IconData(0xe834, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData person_24px = IconData(0xe835, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData push_pin_black_24dp = IconData(0xe836, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData push_pin_24px = IconData(0xe837, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData search_24px = IconData(0xe838, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData send_24px = IconData(0xe839, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData settings_24px = IconData(0xe83a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData signal_cellular_4_bar_24px = IconData(0xe83b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData signal_cellular_alt_24px = IconData(0xe83c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData signal_cellular_connected_no_internet_4_bar_24px = IconData(0xe83d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData signal_cellular_off_24px = IconData(0xe83e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData swap_horiz_24px = IconData(0xe83f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData sync_disabled_24px = IconData(0xe840, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData sync_problem_24px = IconData(0xe841, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData sync_24px = IconData(0xe842, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData syncing_01 = IconData(0xe843, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData syncing_02 = IconData(0xe844, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData syncing_03 = IconData(0xe845, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData toggle_on_24px = IconData(0xe846, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData vpn_key_24px = IconData(0xe847, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData account_blocked = IconData(0xe848, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData account_circle_24px = IconData(0xe849, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData account_circle_24px_lines = IconData(0xe84a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData account_circle_24px_lines_thin___blocked = IconData(0xe84b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData account_circle_24px_user = IconData(0xe84c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData add_circle_24px = IconData(0xe84d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData add_group = IconData(0xe84e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData add_peer = IconData(0xe84f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData add_24px = IconData(0xe850, fontFamily: _kFontFam, fontPackage: _kFontPkg); +} diff --git a/lib/model.dart b/lib/model.dart index 2752e26..97d7c83 100644 --- a/lib/model.dart +++ b/lib/model.dart @@ -382,7 +382,7 @@ class MessageState extends ChangeNotifier { late String _inviteNick; late DateTime _timestamp; late String _senderOnion; - late String _senderImage; + String? _senderImage; late String _signature = ""; late bool _ackd = false; late bool _error = false; @@ -404,10 +404,10 @@ class MessageState extends ChangeNotifier { get timestamp => this._timestamp; bool get ackd => this._ackd; bool get error => this._error; - get malformed => this._malformed; + bool get malformed => this._malformed; + bool get loaded => this._loaded; get senderOnion => this._senderOnion; get senderImage => this._senderImage; - get loaded => this._loaded; get signature => this._signature; get isInvite => this.overlay == 100 || this.overlay == 101; get inviteTarget => this._inviteTarget; @@ -423,13 +423,22 @@ class MessageState extends ChangeNotifier { notifyListeners(); } + set malformed(bool newVal) { + this._malformed = newVal; + notifyListeners(); + } + + set loaded(bool newVal) { + this._loaded = newVal; + notifyListeners(); + } + void tryLoad(BuildContext context) { Provider.of(context, listen: false).cwtch.GetMessage(profileOnion, contactHandle, messageIndex).then((jsonMessage) { try { dynamic messageWrapper = jsonDecode(jsonMessage); if (messageWrapper['Message'] == null || messageWrapper['Message'] == '' || messageWrapper['Message'] == '{}') { this._senderOnion = profileOnion; - //todo: remove once sent group messages are prestored Future.delayed(const Duration(milliseconds: 2), () { tryLoad(context); }); @@ -463,7 +472,7 @@ class MessageState extends ChangeNotifier { } } - this._loaded = true; + this.loaded = true; //update ackd and error last as they are changenotified this.ackd = messageWrapper['Acknowledged']; @@ -471,7 +480,9 @@ class MessageState extends ChangeNotifier { this.error = true; } } catch (e) { - this._malformed = true; + this._overlay = -1; + this.loaded = true; + this.malformed = true; } }); } diff --git a/lib/views/addcontactview.dart b/lib/views/addcontactview.dart index 2ab248c..6446aca 100644 --- a/lib/views/addcontactview.dart +++ b/lib/views/addcontactview.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:cwtch/cwtch_icons_icons.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:cwtch/errorHandler.dart'; @@ -80,7 +81,7 @@ class _AddContactViewState extends State { return TabBar( tabs: [ Tab( - icon: Icon(Icons.person_add_rounded), + icon: Icon(CwtchIcons.add_peer), text: AppLocalizations.of(context)!.addPeer, ), ], @@ -92,11 +93,11 @@ class _AddContactViewState extends State { return TabBar( tabs: [ Tab( - icon: Icon(Icons.person_add_rounded), + icon: Icon(CwtchIcons.add_peer), text: AppLocalizations.of(context)!.tooltipAddContact, ), //Tab(icon: Icon(Icons.backup), text: AppLocalizations.of(context)!.titleManageServers), - Tab(icon: Icon(Icons.group), text: AppLocalizations.of(context)!.createGroup), + Tab(icon: Icon(CwtchIcons.add_group), text: AppLocalizations.of(context)!.createGroup), ], ); } diff --git a/lib/views/addeditprofileview.dart b/lib/views/addeditprofileview.dart index b991c41..c27308c 100644 --- a/lib/views/addeditprofileview.dart +++ b/lib/views/addeditprofileview.dart @@ -99,6 +99,7 @@ class _AddEditProfileViewState extends State { ), CwtchTextField( controller: ctrlrNick, + autofocus: true, labelText: AppLocalizations.of(context)!.yourDisplayName, validator: (value) { if (value.isEmpty) { @@ -167,7 +168,7 @@ class _AddEditProfileViewState extends State { height: 20, ), ])), - CwtchLabel(label: AppLocalizations.of(context)!.password1Label), + CwtchLabel(label: AppLocalizations.of(context)!.newPassword), SizedBox( height: 20, ), diff --git a/lib/views/contactsview.dart b/lib/views/contactsview.dart index 1c5c077..d52709b 100644 --- a/lib/views/contactsview.dart +++ b/lib/views/contactsview.dart @@ -1,3 +1,4 @@ +import 'package:cwtch/cwtch_icons_icons.dart'; import 'package:flutter/material.dart'; import 'package:cwtch/views/torstatusview.dart'; import 'package:cwtch/widgets/contactrow.dart'; @@ -66,7 +67,7 @@ class _ContactsViewState extends State { floatingActionButton: FloatingActionButton( onPressed: _pushAddContact, tooltip: AppLocalizations.of(context)!.tooltipAddContact, - child: const Icon(Icons.person_add_sharp), + child: const Icon(CwtchIcons.person_add_alt_1_24px), ), body: showSearchBar || Provider.of(context).isFiltered ? _buildFilterable() : _buildContactList()); } diff --git a/lib/views/globalsettingsview.dart b/lib/views/globalsettingsview.dart index b776d77..1e8caf7 100644 --- a/lib/views/globalsettingsview.dart +++ b/lib/views/globalsettingsview.dart @@ -1,5 +1,6 @@ import 'dart:convert'; import 'dart:io'; +import 'package:cwtch/cwtch_icons_icons.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:flutter/material.dart'; import 'package:cwtch/opaque.dart'; @@ -46,7 +47,7 @@ class _GlobalSettingsViewState extends State { child: Column(children: [ ListTile( title: Text(AppLocalizations.of(context)!.settingLanguage, style: TextStyle(color: settings.current().mainTextColor())), - leading: Icon(Icons.language, color: settings.current().mainTextColor()), + leading: Icon(CwtchIcons.change_language, color: settings.current().mainTextColor()), trailing: DropdownButton( value: Provider.of(context).locale.languageCode, onChanged: (String? newValue) { @@ -74,7 +75,9 @@ class _GlobalSettingsViewState extends State { // Save Settings... saveSettings(context); }, - secondary: Icon(Icons.lightbulb_outline, color: settings.current().mainTextColor()), + activeTrackColor: settings.theme.defaultButtonActiveColor(), + inactiveTrackColor: settings.theme.defaultButtonDisabledColor(), + secondary: Icon(CwtchIcons.change_theme, color: settings.current().mainTextColor()), ), ListTile( title: Text(/*AppLocalizations.of(context)!.settingLanguage*/ "UI Columns", style: TextStyle(color: settings.current().mainTextColor())), @@ -111,7 +114,9 @@ class _GlobalSettingsViewState extends State { // Save Settings... saveSettings(context); }, - secondary: Icon(Icons.app_blocking, color: settings.current().mainTextColor()), + activeTrackColor: settings.theme.defaultButtonActiveColor(), + inactiveTrackColor: settings.theme.defaultButtonDisabledColor(), + secondary: Icon(CwtchIcons.block_unknown, color: settings.current().mainTextColor()), ), SwitchListTile( title: Text(AppLocalizations.of(context)!.experimentsEnabled, style: TextStyle(color: settings.current().mainTextColor())), @@ -126,7 +131,9 @@ class _GlobalSettingsViewState extends State { // Save Settings... saveSettings(context); }, - secondary: Icon(Icons.science, color: settings.current().mainTextColor()), + activeTrackColor: settings.theme.defaultButtonActiveColor(), + inactiveTrackColor: settings.theme.defaultButtonDisabledColor(), + secondary: Icon(CwtchIcons.enable_experiments, color: settings.current().mainTextColor()), ), Visibility( visible: settings.experimentsEnabled, @@ -145,7 +152,9 @@ class _GlobalSettingsViewState extends State { // Save Settings... saveSettings(context); }, - secondary: Icon(Icons.group_sharp, color: settings.current().mainTextColor()), + activeTrackColor: settings.theme.defaultButtonActiveColor(), + inactiveTrackColor: settings.theme.defaultButtonDisabledColor(), + secondary: Icon(CwtchIcons.enable_groups, color: settings.current().mainTextColor()), ), ], )), diff --git a/lib/views/groupsettingsview.dart b/lib/views/groupsettingsview.dart index c4efe5d..422138e 100644 --- a/lib/views/groupsettingsview.dart +++ b/lib/views/groupsettingsview.dart @@ -1,3 +1,4 @@ +import 'package:cwtch/cwtch_icons_icons.dart'; import 'package:flutter/services.dart'; import 'package:cwtch/model.dart'; import 'package:cwtch/widgets/buttontextfield.dart'; @@ -135,12 +136,12 @@ class _GroupSettingsViewState extends State { height: 20, ), Tooltip( - message: AppLocalizations.of(context)!.rejectGroupBtn, + message: AppLocalizations.of(context)!.leaveGroup, child: ElevatedButton.icon( onPressed: () { showAlertDialog(context); }, - icon: Icon(Icons.delete), + icon: Icon(CwtchIcons.delete_24px), label: Text(AppLocalizations.of(context)!.leaveGroup), )) ]) diff --git a/lib/views/messageview.dart b/lib/views/messageview.dart index 1955481..04e4e99 100644 --- a/lib/views/messageview.dart +++ b/lib/views/messageview.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:cwtch/cwtch_icons_icons.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:cwtch/views/peersettingsview.dart'; @@ -49,7 +50,7 @@ class _MessageViewState extends State { //IconButton(icon: Icon(Icons.chat), onPressed: _pushContactSettings), //IconButton(icon: Icon(Icons.list), onPressed: _pushContactSettings), //IconButton(icon: Icon(Icons.push_pin), onPressed: _pushContactSettings), - IconButton(icon: Icon(Icons.settings), tooltip: AppLocalizations.of(context)!.conversationSettings, onPressed: _pushContactSettings), + IconButton(icon: Provider.of(context, listen: false).isGroup == true ? Icon(CwtchIcons.group_settings_24px) : Icon(CwtchIcons.peer_settings_24px), tooltip: AppLocalizations.of(context)!.conversationSettings, onPressed: _pushContactSettings), ], ), body: Padding(padding: EdgeInsets.fromLTRB(8.0, 8.0, 8.0, 108.0), child: MessageList()), @@ -138,7 +139,7 @@ class _MessageViewState extends State { tooltip: "Send a contact or group invite", onPressed: () => _modalSendInvitation(context)), suffixIcon: IconButton( - icon: Icon(Icons.send, size: 24, color: Provider.of(context).theme.mainTextColor()), + icon: Icon(CwtchIcons.send_24px, size: 24, color: Provider.of(context).theme.mainTextColor()), tooltip: "Send Message", onPressed: _sendMessage, ), diff --git a/lib/views/peersettingsview.dart b/lib/views/peersettingsview.dart index ca9b5d4..7bd3cb3 100644 --- a/lib/views/peersettingsview.dart +++ b/lib/views/peersettingsview.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'package:cwtch/cwtch_icons_icons.dart'; import 'package:flutter/services.dart'; import 'package:cwtch/model.dart'; import 'package:cwtch/widgets/buttontextfield.dart'; @@ -138,12 +139,14 @@ class _PeerSettingsViewState extends State { Provider.of(context, listen: false).cwtch.SendProfileEvent(profileOnion, setPeerAttributeJson); } }, - secondary: Icon(Icons.block, color: settings.current().mainTextColor()), + activeTrackColor: settings.theme.defaultButtonActiveColor(), + inactiveTrackColor: settings.theme.defaultButtonDisabledColor(), + secondary: Icon(CwtchIcons.block_peer, color: settings.current().mainTextColor()), ), ListTile( title: Text(AppLocalizations.of(context)!.savePeerHistory, style: TextStyle(color: settings.current().mainTextColor())), subtitle: Text(AppLocalizations.of(context)!.savePeerHistoryDescription), - leading: Icon(Icons.history_sharp, color: settings.current().mainTextColor()), + leading: Icon(CwtchIcons.peer_history, color: settings.current().mainTextColor()), trailing: DropdownButton( value: Provider.of(context).savePeerHistory == "DefaultDeleteHistory" ? AppLocalizations.of(context)!.dontSavePeerHistory diff --git a/lib/views/profilemgrview.dart b/lib/views/profilemgrview.dart index 65ffdce..2b977d6 100644 --- a/lib/views/profilemgrview.dart +++ b/lib/views/profilemgrview.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:cwtch/cwtch_icons_icons.dart'; import 'package:flutter/material.dart'; import 'package:cwtch/settings.dart'; import 'package:cwtch/views/torstatusview.dart'; @@ -11,6 +12,7 @@ import 'package:provider/provider.dart'; import '../main.dart'; import '../model.dart'; import '../opaque.dart'; +import '../torstatus.dart'; import 'addeditprofileview.dart'; import 'globalsettingsview.dart'; @@ -57,10 +59,13 @@ class _ProfileMgrViewState extends State { Expanded(child: Text(AppLocalizations.of(context)!.titleManageProfiles, style: TextStyle(color: settings.current().mainTextColor()))) ]), actions: [ - IconButton(icon: TorIcon(), onPressed: _pushTorStatus), + IconButton(icon: TorIcon(), onPressed: _pushTorStatus, tooltip: Provider.of(context).progress == 100 + ? AppLocalizations.of(context)!.networkStatusOnline + : (Provider.of(context).progress == 0 ? AppLocalizations.of(context)!.networkStatusDisconnected : AppLocalizations.of(context)!.networkStatusAttemptingTor), + ), IconButton(icon: Icon(Icons.bug_report_outlined), onPressed: _setLoggingLevelDebug), IconButton( - icon: Icon(Icons.lock_open), + icon: Icon(CwtchIcons.lock_open_24px), tooltip: AppLocalizations.of(context)!.tooltipUnlockProfiles, onPressed: _modalUnlockProfiles, ), diff --git a/lib/widgets/invitationbubble.dart b/lib/widgets/invitationbubble.dart index 0187b15..00f6094 100644 --- a/lib/widgets/invitationbubble.dart +++ b/lib/widgets/invitationbubble.dart @@ -133,7 +133,6 @@ class InvitationBubbleState extends State { child: Row(children: [ SelectableText( chrome, - key: Key(myKey), focusNode: _focus, style: TextStyle( color: Provider.of(context).theme.messageFromMeTextColor(), @@ -161,7 +160,6 @@ class InvitationBubbleState extends State { child: Row(children: [ SelectableText( chrome, - key: Key(myKey), focusNode: _focus, style: TextStyle( color: Provider.of(context).theme.messageFromOtherTextColor(), diff --git a/lib/widgets/malformedbubble.dart b/lib/widgets/malformedbubble.dart index cc8bfcd..8c1339a 100644 --- a/lib/widgets/malformedbubble.dart +++ b/lib/widgets/malformedbubble.dart @@ -1,10 +1,6 @@ -import 'dart:convert'; -import 'dart:ffi'; - +import 'package:cwtch/cwtch_icons_icons.dart'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import '../settings.dart'; final Color malformedColor = Color(0xFFE85DA1); @@ -40,15 +36,10 @@ class MalformedBubbleState extends State { widthFactor: 1, child: Padding( padding: EdgeInsets.all(4), - child: Image( - image: AssetImage("assets/core/broken_heart_24.png"), - filterQuality: FilterQuality.medium, - // We need some theme specific blending here...we might want to consider making this a theme level attribute - colorBlendMode: BlendMode.srcIn, - color: Provider.of(context).theme.mainTextColor(), - isAntiAlias: false, - width: 32, - height: 32))), + child: Icon( + CwtchIcons.favorite_black_24dp_broken, + size: 24, + ))), Center( widthFactor: 1.0, child: Column( diff --git a/lib/widgets/messagerow.dart b/lib/widgets/messagerow.dart index 764ad5a..9c30359 100644 --- a/lib/widgets/messagerow.dart +++ b/lib/widgets/messagerow.dart @@ -34,7 +34,7 @@ class _MessageRowState extends State { Widget wdgBubble = Flexible( flex: 3, fit: FlexFit.loose, - child: malformed ? MalformedBubble() : (Provider.of(context).loaded == true ? widgetForOverlay(Provider.of(context).overlay) : MessageLoadingBubble())); + child: Provider.of(context).loaded == true ? widgetForOverlay(Provider.of(context).overlay) : MessageLoadingBubble()); Widget wdgIcons = Icon(Icons.delete_forever_outlined, color: Provider.of(context).theme.dropShadowColor()); Widget wdgSpacer = Expanded(child: SizedBox(width: 60, height: 10)); var widgetRow = []; diff --git a/lib/widgets/passwordfield.dart b/lib/widgets/passwordfield.dart index 7b8804d..5b095a0 100644 --- a/lib/widgets/passwordfield.dart +++ b/lib/widgets/passwordfield.dart @@ -1,3 +1,4 @@ +import 'package:cwtch/cwtch_icons_icons.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../settings.dart'; @@ -5,7 +6,7 @@ import '../settings.dart'; // Provides a styled Password Input Field for use in Form Widgets. // Callers must provide a text controller, label helper text and a validator. class CwtchPasswordField extends StatefulWidget { - CwtchPasswordField({required this.controller, required this.validator, this.action, this.autofocus = true}); + CwtchPasswordField({required this.controller, required this.validator, this.action, this.autofocus = false}); final TextEditingController controller; final FormFieldValidator validator; final Function(String)? action; @@ -43,7 +44,7 @@ class _CwtchTextFieldState extends State { obscureText = !obscureText; }); }, - icon: Icon((obscureText ? Icons.remove_red_eye : Icons.remove_red_eye_outlined), semanticLabel: label), + icon: Icon((obscureText ? CwtchIcons.eye_closed : CwtchIcons.eye_open), semanticLabel: label), tooltip: label, color: theme.current().mainTextColor(), highlightColor: theme.current().defaultButtonColor(), diff --git a/lib/widgets/textfield.dart b/lib/widgets/textfield.dart index 4addae7..4b68593 100644 --- a/lib/widgets/textfield.dart +++ b/lib/widgets/textfield.dart @@ -7,11 +7,12 @@ doNothing(String x) {} // Provides a styled Text Field for use in Form Widgets. // Callers must provide a text controller, label helper text and a validator. class CwtchTextField extends StatefulWidget { - CwtchTextField({required this.controller, required this.labelText, this.validator = null, this.onChanged = doNothing}); + CwtchTextField({required this.controller, required this.labelText, this.validator = null, this.autofocus=false, this.onChanged = doNothing}); final TextEditingController controller; final String labelText; final FormFieldValidator? validator; final Function(String) onChanged; + final bool autofocus; @override _CwtchTextFieldState createState() => _CwtchTextFieldState(); @@ -25,6 +26,7 @@ class _CwtchTextFieldState extends State { controller: widget.controller, validator: widget.validator, onChanged: widget.onChanged, + autofocus: widget.autofocus, decoration: InputDecoration( labelText: widget.labelText, labelStyle: TextStyle(color: theme.current().mainTextColor(), backgroundColor: theme.current().textfieldBackgroundColor()), diff --git a/lib/widgets/tor_icon.dart b/lib/widgets/tor_icon.dart index eb0c2bf..8ebf1ad 100644 --- a/lib/widgets/tor_icon.dart +++ b/lib/widgets/tor_icon.dart @@ -1,3 +1,4 @@ +import 'package:cwtch/cwtch_icons_icons.dart'; import 'package:flutter/cupertino.dart'; import 'package:provider/provider.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -16,14 +17,9 @@ class _TorIconState extends State { @override Widget build(BuildContext context) { return RepaintBoundary( - child: Image( - image: AssetImage(Provider.of(context).progress == 0 - ? "assets/core/Tor_OFF.png" - : (Provider.of(context).progress == 100 ? "assets/core/Tor_icon.png" : "assets/core/Tor_Booting_up.png")), - // Color the onion per the text color... + child: Icon(Provider.of(context).progress == 0 ? CwtchIcons.onion_off : (Provider.of(context).progress == 100 ? CwtchIcons.onion_on: CwtchIcons.onion_waiting), color: Provider.of(context).theme.mainTextColor(), - colorBlendMode: BlendMode.srcIn, - semanticLabel: Provider.of(context).progress == 100 + semanticLabel: Provider.of(context).progress == 100 ? AppLocalizations.of(context)!.networkStatusOnline : (Provider.of(context).progress == 0 ? AppLocalizations.of(context)!.networkStatusDisconnected : AppLocalizations.of(context)!.networkStatusAttemptingTor), )); diff --git a/pubspec.yaml b/pubspec.yaml index 34fc3c2..3bcc763 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -95,6 +95,11 @@ flutter: - assets/profiles/ - assets/servers/ + fonts: + - family: CwtchIcons + fonts: + - asset: assets/fonts/CwtchIcons.ttf + # To add custom fonts to your application, add a fonts section here, # in this "flutter" section. Each entry in this list should have a # "family" key with the font family name, and a "fonts" key with a