From fb9322dad1ea1dc0e29b1481d225e2eae8c08a14 Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Tue, 27 Apr 2021 13:07:59 -0700 Subject: [PATCH] Update Tor Icons --- assets/core/Tor_Booting_up.png | Bin 0 -> 1060 bytes assets/core/Tor_Booting_up.svg | 63 ++++++++++++++++++++++++++++++ assets/core/Tor_OFF.png | Bin 0 -> 1090 bytes assets/core/Tor_OFF.svg | 63 ++++++++++++++++++++++++++++++ assets/core/Tor_icon.png | Bin 575 -> 919 bytes assets/core/Tor_icon.svg | 12 +++--- lib/cwtch/cwtchNotifier.dart | 9 +---- lib/main_test.dart | 8 ++-- lib/views/addeditprofileview.dart | 7 +++- lib/views/contactsview.dart | 2 +- lib/views/messageview.dart | 12 +++--- lib/views/profilemgrview.dart | 11 +----- lib/views/torstatusview.dart | 10 +---- lib/widgets/tor_icon.dart | 30 ++++++++++++++ 14 files changed, 185 insertions(+), 42 deletions(-) create mode 100644 assets/core/Tor_Booting_up.png create mode 100644 assets/core/Tor_Booting_up.svg create mode 100644 assets/core/Tor_OFF.png create mode 100644 assets/core/Tor_OFF.svg create mode 100644 lib/widgets/tor_icon.dart diff --git a/assets/core/Tor_Booting_up.png b/assets/core/Tor_Booting_up.png new file mode 100644 index 0000000000000000000000000000000000000000..bfb300d3c9b4ff2657718d96634ab776653ab289 GIT binary patch literal 1060 zcmV+<1l#+GP)hJM4POjQFzfVq&K=^QKYzLe*C(4=ArYx zxwc>Iz{@#j-Z}H1GiPSbJTO60XQ->xn5eGtfOo3zsdLpC)Kai z1!L7UX1A%Wz}>(W;0NF?;AUWTMEp8deKW?o0eAvf1T4vM4sh>yz{f>uzxt%wU`_O&g`$ai9z61BQU@5%KqA7%(bQ zThyI7-e)<->E0dM>Zw zHFZ42Y*fJA>c{!mw5#)z-=e-%q~nk3{gVxTkGfx7SMYAhu`|7KvZ*M&J}KT%pHlbL zCr;i%bxzKEa@=eq?Nd7@3SQrLTfysYS}#ssXP#X3ka|@ivqs&m9!XE_%k&-j^;K_D z`_x$luf5!)UT@V0tjqOL^`g4Gka^XS=|gq;NCxasSLJ+qd7|Xqr_NM+)D`M=>KE$X zLgtYsz@Myww4_%`z0-1I3$Q#Q`f7eeoGlb@0M13kUqDAh8~`2wjsc$(`Wlo29|1d? zcw5TD)rDvoa5%x*fQvbwr@jCjj)?x0J(U630t^F#Dceoer2HSv0#?+EI&HeC9vOg$ zh)Y(lT`#aLA}%FJYef8Fm6EM#z^OuUbC6wIALcSfG#GHc*nBR>hk^GC@Bo&mL%;&6 zR%|Y?5a_2W(Px1&b~cXSg~57KU%@fp&Yah|+!hhP7n?Q#1Hk+=awc$fy)Pop0K1!j z-T~fj;vI;H!3K_1jX$o=${Y{1xA?zPeJJN^)!WojR)Gw>U518{30w+#3?=Ur6p9|o4DM_x)jL%ZU6KT!tDNl8D#=>;S%{%JX-DH>sk#?*BW1rzvtdsh#R8X-st4 z$3cA%*iO|24FHR&8q*WN#4p4d#DOXEAU4e(+BJV ezO3uTSm_@RSRG)|G71*}0000Q literal 0 HcmV?d00001 diff --git a/assets/core/Tor_Booting_up.svg b/assets/core/Tor_Booting_up.svg new file mode 100644 index 0000000..616371d --- /dev/null +++ b/assets/core/Tor_Booting_up.svg @@ -0,0 +1,63 @@ + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/assets/core/Tor_OFF.png b/assets/core/Tor_OFF.png new file mode 100644 index 0000000000000000000000000000000000000000..fc7742f74ba536c830e8395e2eb81e80412c74fb GIT binary patch literal 1090 zcmV-I1ikx-P)=u zcm6sw|9N;e=iJx%e($;W+v9#FqjkEoqf4xAC#s`jae z)nWC9GYLK|fJ?IRjDZJ%r5X4(bzFBSmzpsGuLe#6rL*1#bf=V@D1ou2;ZHy-@C)!8 z&;$H4QSgdHeIs;d9Ko8&@LS14bWZ4+vi8&yP%oyq0|5I&-yW~w)Joj^Pt`WHE>dw{ z9K&XH##8|}sL!kKsI%23wN`CZ*JtVYr+UX^gI}V4mOEDGhHi^r@CQfATk6co0ACSr z{QRu1Sv@c8&d@8%2=uBA69r$a?ogYuzNXx99LFNHD!U8csME4JE$XHq^;O)J>;4bC zF&wpIef4Th)}9lDZjJVb>X6!z&ACxM>glD&(K1KfP&#upm4{PZpw3b+Ra@2N>ND#5 z*_?LuM1bWahSg(XZyJrj4z)h)+On}FYFCL!=ymEtYIinoYk=%hFH(00_&w^{7(1@c zF0HAGh35hTDW&59ZuFm}t^@j0O50;ipV}7o3E=mbTLUbQ{sllcunbrY>;xW>) z9}WcAGT?)h(vfW86+lboU@mZB*vEkWum$dm2t5YeOhhW=k8%QgfXl<49=biH^lfRP zx(YZDyZRNF7rR;rkWv~3-j3-%0^b841CLTf^63~m2z*Yts5|3^pB-oaKsHvT-WhgR zWXX%_M;7&AZH%?5`{S~mEK9*s`~Dm^{|&bQ8&XRBz-*wkloh}Qz;|KKq&VwVigQ07 zSQ}C3qbS#Rb85*y2y9F#J$uUTgZ&JPk7bd?dw-XDZ??0Jug(zw>b%nemyuYZ?o}_d_=dNs%_ZQ_-4_4AD`g=*YEe5@BqIuvlu|G7Aka$@ z_9ua-EPlCWwT>d}w*g&czNP~!&7SVD$Z5-J^-ACcij@2s=%6S@4*@p;^MU+L{|k6H zrL?&c@KFh5L>2?9fUALaU + + + + + image/svg+xml + + + + + + + + + + + diff --git a/assets/core/Tor_icon.png b/assets/core/Tor_icon.png index 0c03273feebff9d0cd81e44073509c90ace6d2ad..0c871e9fa17285d24fc57ad5b4c24be9ab8d4dbf 100644 GIT binary patch delta 873 zcmV-v1D5>11eXUPiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^pPPN3lpyZ z028kPW9E*-kwzzf0~AR_K~z|Uy_Qdi)m0S7KWCmg&P+2pDH_I9k`);xK~PW#MW&e& zwF!b2EvCpt;JQuFqE^Fzwfyce~-1E-&`#bmCdk*wK)Uo;6_VoaK7ci9bD;9-+fVxBt^=05R&`|dS*Z<#t zmvn;wa4WC_7zAzyUI(^E#Ft(2UoGk;^?CJ-dRYBK-Q08F5`hEiN%c2%Mtxv0!I!F2 z{wvQc8h8@eTms)$$49LsR38LZ0(Ye92jJN{zUp4X31A~|9QY2{8xiMf`l=`DTRGmH zM^G#C7xEB)t;n%)*}C@x)b*w1WRAPlMl1WSin=o&oU7CUby)o=kKv$tWv_r&sBfyT zCFtsW2Ue<2magNZx=W32f^Srhs9Q?94LM$$h3IoHm3O-m4Rwq9X}QL$Yt_-5-;>pF zoBx%s)RBdN-=u!l{F40ARqFCwH!=^l=H65b67MX3gusXD)j97|2TOaQUZ<{8AIW?; z+Jb=Pqq|%xuc5jX_#z^H&V*VT5z{4;Z4}MN2yhs92sl>ZZg)=|9C)P^jZumS%mHVCc1`HoR?2qe_&i0)od#xsdx3)yVS=v)ZUN4upE=-$ zHvT4CDceQhTi`C>V&3Jkh&Wl=e-toM zMq?0I2CPfFR`O9qOm#}&ec(omIzIz^4?G5cpf01xd=hj$@GEe0g|9tTAe96nVh(s3 zcpDf7P60dAk&Mb{iNG*LG7hwG^+rT|+%bV9aTItCc#k5?dx1R`b$?CM4A>6b*}}!4 z{D^9dcAHI6?+0E5J^;P}ZlgGo3E&CfVTxR6%3r{XzzY#EJ0FbskXWvctDj`ixuDK4 z<mzR3l78p z01m_fl`9S#kwzzf0lY~>K~zYI?UX%hR8bIypV^JU%|?P>t3o0{G>FY&IAq z8^J{Xft?`OScza`k;cCuifADL5fOrgjUeL35>Y{1!4C{%c`Wvbak*D_FW1huI?SDU z-Z^(T0|ljSS0~l#pYnzZfNQ``;22N=o&a|Wb(v!@tKL_CAE|StffKy0zEQuc=Sqbq zgQIqJOO3MOXVq(JOWoXWU1b1|HgFzT0-FEAU>Mi{d;_LSHBgTy_iaWYCXlas!es5zw2%u zCvyhs0pKxz@C6_uzN%9|6?hAb1E1EE%&7bOHUJI-i$FCZR@E6`B_iGd>wr4&xu@n( z7ASAojQ}6Jm+>I56cKH82hd3-z1lK}!AoEQ_yANAe0TcR0j4s5tt?R9FS-YuN)0qp zY&0UC1Dk+JptdG|6}Z{AK}5Wu`*NE=L){1bTyA?+fZknnB_ftHSvfaA9R@A~PgBimage/svg+xml \ No newline at end of file diff --git a/lib/cwtch/cwtchNotifier.dart b/lib/cwtch/cwtchNotifier.dart index 86417d3..dd4d379 100644 --- a/lib/cwtch/cwtchNotifier.dart +++ b/lib/cwtch/cwtchNotifier.dart @@ -97,13 +97,8 @@ class CwtchNotifier { print("new group invite: $data"); // TODO Add Group Dynamically dynamic groupInvite = jsonDecode(data["GroupInvite"]); - profileCN.getProfile(data["ProfileOnion"]).contactList.add(ContactInfoState( - onion: groupInvite["GroupID"], - isInvitation: true, - imagePath: data["PicturePath"], - nickname: groupInvite["GroupName"], - server: groupInvite["ServerHost"], - isGroup: true)); + profileCN.getProfile(data["ProfileOnion"]).contactList.add( + ContactInfoState(onion: groupInvite["GroupID"], isInvitation: true, imagePath: data["PicturePath"], nickname: groupInvite["GroupName"], server: groupInvite["ServerHost"], isGroup: true)); break; case "ServerStateChange": print("server state change: $data"); diff --git a/lib/main_test.dart b/lib/main_test.dart index b62f734..7ed40f0 100644 --- a/lib/main_test.dart +++ b/lib/main_test.dart @@ -36,9 +36,9 @@ class DiskAssetBundle extends CachingAssetBundle { /// Creates a [DiskAssetBundle] by loading [globs] of assets under `assets/`. static Future loadGlob( - Iterable globs, { - String from = 'assets', - }) async { + Iterable globs, { + String from = 'assets', + }) async { final cache = {}; for (final pattern in globs) { await for (final path in Glob(pattern).list(root: from)) { @@ -68,4 +68,4 @@ class DiskAssetBundle extends CachingAssetBundle { Future load(String key) async { return _cache[key]; } -} \ No newline at end of file +} diff --git a/lib/views/addeditprofileview.dart b/lib/views/addeditprofileview.dart index fb18d8e..9104198 100644 --- a/lib/views/addeditprofileview.dart +++ b/lib/views/addeditprofileview.dart @@ -83,7 +83,12 @@ class _AddEditProfileViewState extends State { Visibility( visible: Provider.of(context).onion.isNotEmpty, child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [ - ProfileImage(imagePath: Provider.of(context).imagePath, diameter: 120, maskOut: false, border: theme.theme.portraitOnlineBorderColor(),) + ProfileImage( + imagePath: Provider.of(context).imagePath, + diameter: 120, + maskOut: false, + border: theme.theme.portraitOnlineBorderColor(), + ) ])), Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ CwtchLabel(label: AppLocalizations.of(context).displayNameLabel), diff --git a/lib/views/contactsview.dart b/lib/views/contactsview.dart index f51556b..2ccbaad 100644 --- a/lib/views/contactsview.dart +++ b/lib/views/contactsview.dart @@ -70,6 +70,6 @@ class _ContactsViewState extends State { } void _debugFakeMessage() { - Provider.of(context, listen:false).contactList.getContact("44pknjvf4ju46nbuyn5getuayb6dj6z6zoppl56syn7pmscptoahlaid").unreadMessages++; + Provider.of(context, listen: false).contactList.getContact("44pknjvf4ju46nbuyn5getuayb6dj6z6zoppl56syn7pmscptoahlaid").unreadMessages++; } } diff --git a/lib/views/messageview.dart b/lib/views/messageview.dart index d538eb4..be85854 100644 --- a/lib/views/messageview.dart +++ b/lib/views/messageview.dart @@ -97,12 +97,12 @@ class _MessageViewState extends State { child: Row( children: [ Expanded( - child: TextField( - key: Key('txtCompose'), - controller: ctrlrCompose, - focusNode: focusNode, - textInputAction: TextInputAction.send, - onSubmitted: _sendMessage, + child: TextField( + key: Key('txtCompose'), + controller: ctrlrCompose, + focusNode: focusNode, + textInputAction: TextInputAction.send, + onSubmitted: _sendMessage, )), SizedBox( width: 90, diff --git a/lib/views/profilemgrview.dart b/lib/views/profilemgrview.dart index ded564b..e9d1c74 100644 --- a/lib/views/profilemgrview.dart +++ b/lib/views/profilemgrview.dart @@ -5,6 +5,7 @@ import 'package:flutter_app/settings.dart'; import 'package:flutter_app/torstatus.dart'; import 'package:flutter_app/views/torstatusview.dart'; import 'package:flutter_app/widgets/passwordfield.dart'; +import 'package:flutter_app/widgets/tor_icon.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_app/widgets/profilerow.dart'; import 'package:provider/provider.dart'; @@ -36,15 +37,7 @@ class _ProfileMgrViewState extends State { appBar: AppBar( title: Text(AppLocalizations.of(context).titleManageProfiles), actions: [ - IconButton( - icon: Image( - image: AssetImage(Provider.of(context).progress == 100 ? "assets/core/Tor_icon.png" : "assets/core/Tor_icon_error.png"), - filterQuality: FilterQuality.low, - isAntiAlias: false, - color: Provider.of(context).theme.mainTextColor(), - colorBlendMode: BlendMode.srcIn, - ), - onPressed: _pushTorStatus), + IconButton(icon: TorIcon(), onPressed: _pushTorStatus), IconButton(icon: Icon(Icons.bug_report_outlined), onPressed: _setLoggingLevelDebug), IconButton( icon: Icon(Icons.lock_open), diff --git a/lib/views/torstatusview.dart b/lib/views/torstatusview.dart index 7e7bcb9..63602f0 100644 --- a/lib/views/torstatusview.dart +++ b/lib/views/torstatusview.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_app/settings.dart'; import 'package:flutter_app/torstatus.dart'; +import 'package:flutter_app/widgets/tor_icon.dart'; import 'package:provider/provider.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -44,14 +45,7 @@ class _TorStatusView extends State { ), child: Column(children: [ ListTile( - leading: Image( - image: AssetImage(torStatus.progress == 100 ? "assets/core/Tor_icon.png" : "assets/core/Tor_icon_error.png"), - filterQuality: FilterQuality.low, - isAntiAlias: false, - // Color the onion per the text color... - color: Provider.of(context).theme.mainTextColor(), - colorBlendMode: BlendMode.srcIn, - ), + leading: TorIcon(), title: Text("Tor Status"), subtitle: Text(torStatus.progress == 100 ? AppLocalizations.of(context).networkStatusOnline : torStatus.status), trailing: ElevatedButton( diff --git a/lib/widgets/tor_icon.dart b/lib/widgets/tor_icon.dart new file mode 100644 index 0000000..2fb657f --- /dev/null +++ b/lib/widgets/tor_icon.dart @@ -0,0 +1,30 @@ +import 'package:flutter/cupertino.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import '../settings.dart'; +import '../torstatus.dart'; + +/// A reusable Tor Icon Widget that displays the current status of the underlying Tor connections +class TorIcon extends StatefulWidget { + TorIcon(); + + @override + State createState() => _TorIconState(); +} + +class _TorIconState extends State { + @override + Widget build(BuildContext context) { + return 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... + color: Provider.of(context).theme.mainTextColor(), + colorBlendMode: BlendMode.srcIn, + semanticLabel: Provider.of(context).progress == 100 + ? AppLocalizations.of(context).networkStatusOnline + : (Provider.of(context).progress == 0 ? AppLocalizations.of(context).networkStatusDisconnected : AppLocalizations.of(context).networkStatusAttemptingTor), + ); + } +}