From e3946c41bb48fbb8ebf9075cb35b4e9e35581f3f Mon Sep 17 00:00:00 2001 From: Giorgio Bertolotti Date: Mon, 14 Oct 2019 18:53:06 +0200 Subject: [PATCH] :sparkles: Added reminder notification and hidden graph when there aren't columns --- .../android/app/src/main/AndroidManifest.xml | 8 +++ .../res/drawable-hdpi/ic_notification.png | Bin 0 -> 678 bytes .../drawable-hdpi/ic_notification_border.png | Bin 0 -> 717 bytes .../res/drawable-mdpi/ic_notification.png | Bin 0 -> 434 bytes .../drawable-mdpi/ic_notification_border.png | Bin 0 -> 430 bytes .../res/drawable-xhdpi/ic_notification.png | Bin 0 -> 970 bytes .../drawable-xhdpi/ic_notification_border.png | Bin 0 -> 908 bytes .../res/drawable-xxhdpi/ic_notification.png | Bin 0 -> 1565 bytes .../ic_notification_border.png | Bin 0 -> 1672 bytes .../res/drawable-xxxhdpi/ic_notification.png | Bin 0 -> 2522 bytes .../ic_notification_border.png | Bin 0 -> 2276 bytes pro_time/lib/ui/project_page.dart | 64 +++++++++++++++++- pro_time/pubspec.lock | 9 ++- pro_time/pubspec.yaml | 1 + 14 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 pro_time/android/app/src/main/res/drawable-hdpi/ic_notification.png create mode 100644 pro_time/android/app/src/main/res/drawable-hdpi/ic_notification_border.png create mode 100644 pro_time/android/app/src/main/res/drawable-mdpi/ic_notification.png create mode 100644 pro_time/android/app/src/main/res/drawable-mdpi/ic_notification_border.png create mode 100644 pro_time/android/app/src/main/res/drawable-xhdpi/ic_notification.png create mode 100644 pro_time/android/app/src/main/res/drawable-xhdpi/ic_notification_border.png create mode 100644 pro_time/android/app/src/main/res/drawable-xxhdpi/ic_notification.png create mode 100644 pro_time/android/app/src/main/res/drawable-xxhdpi/ic_notification_border.png create mode 100644 pro_time/android/app/src/main/res/drawable-xxxhdpi/ic_notification.png create mode 100644 pro_time/android/app/src/main/res/drawable-xxxhdpi/ic_notification_border.png diff --git a/pro_time/android/app/src/main/AndroidManifest.xml b/pro_time/android/app/src/main/AndroidManifest.xml index d409fb4..f41e8e4 100644 --- a/pro_time/android/app/src/main/AndroidManifest.xml +++ b/pro_time/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,7 @@ + + + + + + + + diff --git a/pro_time/android/app/src/main/res/drawable-hdpi/ic_notification.png b/pro_time/android/app/src/main/res/drawable-hdpi/ic_notification.png new file mode 100644 index 0000000000000000000000000000000000000000..bd81380831a295040f4a86637522ef5f337d6196 GIT binary patch literal 678 zcmV;X0$KfuP)kXPSW#MqL8gn0+|UM2ReZ#z(n9BFay{MoCMxTvh7{KVql4+`?*l909^nU zrH#9R!$22s2RJXO%l2#F46p@w06YcGN(#`dkp*OXc{-@JzFX4H#uIE$0SsIR)&qAX zJLw!moqs~KXf&IXyWbVkgWmSc&&pOo5&%(sfIzAPF)aFZ@x>=>J zQzshh72vI;rMWP%uHS)dM?(!|P6O*Cz58!KsUS`TZUbvtX{vu6vXshWfKXsg6g}JV z6p5!sr1>e}A+S=?i(Hk;hAdjbHDCp>1Goj;1C9Yl(|hOTVYm_+Zg(%gpC0Gz^#yL_7EreM{1}G6xp@Ckv=(lm47<0~M+H3l;q&Gz;Cn4FCWD M07*qoM6N<$f{^JdMF0Q* literal 0 HcmV?d00001 diff --git a/pro_time/android/app/src/main/res/drawable-hdpi/ic_notification_border.png b/pro_time/android/app/src/main/res/drawable-hdpi/ic_notification_border.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea6405f56cf6d913c686781baeb3f45b700a715 GIT binary patch literal 717 zcmV;;0y6!HP)dWfDU48VKx&ao^_*bI#*gJpawJxX*oG-~aXhUBCZzJxL#1sgLpK2WodB zwHYdkVhU#CYdV(60#DJCQo3CQR|!-U#VYK%&7r-jNLeiwK#^C2+*6jgV%V3jTm2}!Ry$WQo8bg zfEqy;=i}Od_Mynm*{r9%8M@5Wl?*jkSvlZ&j6)b^_*1jz^(s)9U5Gq< zXk>3!S=omob{Jz%uC~c7uAi=DD4aU{sSI-&n=rjXJB@^O1!!F^`@6Y{u3;YH!hD;v zv!bHp1FGXd@zEbLP_!snZ^F5M$2a)mb8DzY$MW8zj%O&!xK-J=1M3Is&rq*v zXaNq?w6JvzTD#+^dj6k9{T&WrS&N?faPAJH{fMscQ`SXnO)33aez|Ju2qXIuTQItV zLt-Otm}U$Lv8nwjr5FhQU3G)vSggm&d|P+we*lf%I|js4DW#Z9-dn9k>1ej1@rtXU zlR$CDJx?jcK=8rpRG?4MP~|)QK9>#lkTtB~prFW+mGWOc%f`j-ryRSP-bHgZPTexY?RW^1Tb7jifmo z1gytfoWMSuOHy3`3zy~rRkap}u{FuHs@jb6xPw0BPHSTV)U-Z#;*zZ%c+r7ahalH45^aHuEH zUhKn`q^fEGIfdCIpT+_VTk@#C@JKQJ4;VVms`~A-8+GP`=l&p7fiJj$CEO~NeZVQ4$Mwp8Jt7|T z18m@4b>L}4JWMIAp*i>+?+Z9r)V7U?xIYMBH6oS@;5OcttaIScxP{Jce5rJBxW&2l#|H5wX`3FkrxAxexkVJXX-Q)5rmT Y0AhBw85Ag?i2wiq07*qoM6N<$g0*YK?EnA( literal 0 HcmV?d00001 diff --git a/pro_time/android/app/src/main/res/drawable-xhdpi/ic_notification.png b/pro_time/android/app/src/main/res/drawable-xhdpi/ic_notification.png new file mode 100644 index 0000000000000000000000000000000000000000..3dad7277f8ab73702c2321f1fefbad1e77dd2ac0 GIT binary patch literal 970 zcmV;*12z1KP)6Z9A_{>t+$U0*HtUfZKoxz=gnhfdBgz_yhP7*b96r z>CZt$BVrV=3b+_pFX?D0L=ix)-V|UHFeX=gB5(_^7PuF<7I*>p3OE;734Cm;M8wO$ zIN-A!r%3v}1fn)TDnAo=5x6K{`j@1$BEr9Kmb5b>9=1g!ZH$OF(^4L-{A0kazz_Z{ z>GcxjJ*Na<67XJ!@_x>7fC_(q9(XHVZ5i-2;Q#)X^kJ#;r2uaO51#PSN`MaEUkYph zeo0Gt>`F>3@IElP5MZh|H1H5`J1|euk!}cv9Uvmk0B(@9`*?hfI2+gsI0&qg^y(=I z5D}*VHvunYD4p+^pFsBkp94<-4@ml_6k=E`5E18Rh_#y>0Pg9`18IrtfmeVA*F>bATbP0;WrHGW(xI#4g}!z@gP{^@#I^r1f>I(HH}G^-vP!;x~pFRj_+3j&j61Ddn9eIQ2sjLXD9 zVRlYcjS~@<1J45Y15W`14z2wJa7{D|_&IBy!&R=3`(**JA`{yuu8aBxP*q9{1riZ1 zA#Thf&mq??xKWa8rIVJ%HgN&KSiq5Jnxsl=RnhbuAYI3i%K2fjB?Y`i@Q;RwzO#=8N!WF1{<6nW_fS>Y+x=`yv zHCG@a-p#|P&Y1&}&Z+sRMs6?J#QrwmvrjiB7FV6yB>CG|&!sj%*7NRXJLmdSQCFW! sOUa7>N?$e{^ICx6Sk*eu9Pt+T7p!NeKn6guCIA2c07*qoM6N<$f=NBC%m4rY literal 0 HcmV?d00001 diff --git a/pro_time/android/app/src/main/res/drawable-xhdpi/ic_notification_border.png b/pro_time/android/app/src/main/res/drawable-xhdpi/ic_notification_border.png new file mode 100644 index 0000000000000000000000000000000000000000..002b1d9dedab03c776701b65ed27657002e89718 GIT binary patch literal 908 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 P00000NkvXXu0mjfCNAJ< literal 0 HcmV?d00001 diff --git a/pro_time/android/app/src/main/res/drawable-xxhdpi/ic_notification_border.png b/pro_time/android/app/src/main/res/drawable-xxhdpi/ic_notification_border.png new file mode 100644 index 0000000000000000000000000000000000000000..f5baf70d274ff1cf0436bf5ec9704686522248d6 GIT binary patch literal 1672 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 literal 0 HcmV?d00001 diff --git a/pro_time/android/app/src/main/res/drawable-xxxhdpi/ic_notification_border.png b/pro_time/android/app/src/main/res/drawable-xxxhdpi/ic_notification_border.png new file mode 100644 index 0000000000000000000000000000000000000000..e9fbd5da1709c3e6c1fe290f56aee89a46023949 GIT binary patch literal 2276 zcmV=XrndJPq_e}fVch;I&Yu2ojXl1Slq`8jX z2B#4)=S9#6Xavj|fjJM~B%l#6X9VUve3O7iz?>17^YBdq8Ub@gV9vug30MRIa?Upd zZU@{C*af&fES!~{fj1%3ovky83kEq~P#kaNB@@HSv?V0+*OwUb)q?f(n>4%i4B zmQuQ^X1-MfrGNGPwo(G_1$+azRo?+C>$?&9V{z^!^S>6@s&XFV z&Hn^EB&Bq5-+oIzfSmIIzzJJu!*#<`%+Crr=I8a8mV99Yk;2sX8=D2wg&DC+#)u8_nrF# zoDD=fLX#kIXj$UIy&YZ(1wXeg|-PN=Y(0ml6V;{KtT&bRMN& z#eV?r3>9}toV|AgPKg!narbe+^FtlI5BRc2Lg1v3%Eto!jE=;Ai{Ebtyehy~lHL^L z_M74IwH@1i;NN{ZDj}3a1Nj}sA}#L^^O5f1fB_eG^F7%9p}}h+NXj2`)}g*uXyZvqDa8jA-98J7dk1s>l8)gE;u;DD5p>a%lMEd+S7`B12YOH)do zRQ_Lj5}<29>Dd+77Wg*c%2yTb=L!XW6%x}Kq>dHWGy!g+&k($nl6%0W(vyI3tR%pG zEiVsg=)LIH0|A!-j{+`BDUHtgB@!@>m8)M>v=eYN@ctRPP1dvoc-q-BrS#iz1S=)L zP1#eMcoC zz8?OeQ>R$BlB6N&o-m{otUC$N=c2{yhYP-E{nLOuO<39P4L=PjkpvCCy8{|#dNcJk z>1Ho2>xzKC0G|ZD1v~(F4RCC@9wq^(8q$fV#JCT<9?-4+>Tpj#Fs$WLJ7L`ra1ro< zP&c|4UL1ZQfgBwXoM*RpBgx>sS&UO z0on|LZm5d)!rqRleugZKfECcZ0{CE@pbVjR6E5}nv`x5h*x~trqwV*L$Ww@83$ zN58&4qgTZL>qR{uP(pT&C~3nNhbrra09A>RZr)~D3=22>T(|Uh0PhFM_x3QM101B*OB?jC6GhEcZ(eiFsu>GB$(s5u_N8W_t^BcK|>x(*rvb@)}cZUj_ASl2-#pbo$4){TH_2;gF6$Snu2n(5?7K>2!H!fI(G3RzhL?=z-88P#$JnOEU(LmYgKyaqSrd&yFh!&RQQHiNh}j0sa%eo~ zs2JmEJ_jGvt>$7X90S8PE=@StWx~B5DTGS!F`GJX7U3OT=DphLm_=R!%=oxj&bw(7 z?M;9k=A3<>yKlTS8O3By8*5R2Z$9fo&Fq^}G9qqEn*3sPCY z-yS(nFYlW-S`3N^2q`f3(&%GfvHR@PzoOAMN^Pz3V5qyfCXB@Px$DJ!b4HIoyqJI> z!4Posa*qCZk5S8a7!=Y>hTCAR8UcerS=Lb_ ypbWRcS~UU&gR-onMnD;EgSBb|3 GlobalKey _scaffoldKey = GlobalKey(); StreamController barTouchedResultStreamController; int touchedIndex; + FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = + FlutterLocalNotificationsPlugin(); @override void initState() { @@ -59,7 +63,13 @@ class _ProjectPageState extends State } }); }); - + var initializationSettingsAndroid = + AndroidInitializationSettings('ic_notification'); + var initializationSettingsIOS = IOSInitializationSettings(); + var initializationSettings = InitializationSettings( + initializationSettingsAndroid, initializationSettingsIOS); + flutterLocalNotificationsPlugin.initialize(initializationSettings, + onSelectNotification: onSelectNotification); super.initState(); } @@ -211,7 +221,9 @@ class _ProjectPageState extends State ], ), ), - (_project.activities != null && _project.activities.length > 0) + (_project.activities != null && + _project.activities.length > 0 && + _isThereAnyHour()) ? _buildDaysChart() : Container(), (_project.activities != null && _project.activities.length > 0) @@ -241,6 +253,45 @@ class _ProjectPageState extends State ); } + Future onSelectNotification(String id) async { + for (Project project + in Hive.box('projects').values.toList().cast()) { + if (project.id == id) { + await Navigator.pushReplacement( + context, + MaterialPageRoute(builder: (context) => HomePage()), + ); + break; + } + } + } + + _showNotification(Project project) async { + var androidPlatformChannelSpecifics = AndroidNotificationDetails( + 'protime', + 'ProTime', + 'This channel is used by ProTime to send timer reminders.', + importance: Importance.Max, + priority: Priority.High, + ticker: 'ticker', + ); + var iOSPlatformChannelSpecifics = IOSNotificationDetails(); + var platformChannelSpecifics = NotificationDetails( + androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics); + await flutterLocalNotificationsPlugin.schedule( + 0, + 'Tracking reminder', + 'Don\'t forget to stop your tracking of ' + project.name + "!", + DateTime.now().add(Duration( + minutes: (project.getAverageTime().inMinutes * 1.3).toInt())), + platformChannelSpecifics, + payload: project.id); + } + + _cancelNotifications() async { + await flutterLocalNotificationsPlugin.cancelAll(); + } + _startTimer() { ApplicationState appState = Provider.of(context); setState(() { @@ -251,6 +302,7 @@ class _ProjectPageState extends State _startBlink(); _updateProject(); }); + _showNotification(_project); } _pauseTimer() { @@ -269,6 +321,7 @@ class _ProjectPageState extends State _stopBlink(); _updateProject(); }); + _cancelNotifications(); } _startBlink() { @@ -462,6 +515,13 @@ class _ProjectPageState extends State } }); + bool _isThereAnyHour() { + return List.generate(7, (i) { + return _getHoursForDay(i); + }).reduce(max) != + 0.0; + } + double _getHoursForDay(int dayIndex) { int toReturn = 0; for (Activity activity in _project.activities) { diff --git a/pro_time/pubspec.lock b/pro_time/pubspec.lock index 10b982b..1d049d2 100644 --- a/pro_time/pubspec.lock +++ b/pro_time/pubspec.lock @@ -202,6 +202,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.7.3" + flutter_local_notifications: + dependency: "direct main" + description: + name: flutter_local_notifications + url: "https://pub.dartlang.org" + source: hosted + version: "0.8.4" flutter_picker: dependency: "direct main" description: @@ -578,4 +585,4 @@ packages: version: "2.2.0" sdks: dart: ">=2.4.0 <3.0.0" - flutter: ">=0.1.4 <2.0.0" + flutter: ">=1.5.0 <2.0.0" diff --git a/pro_time/pubspec.yaml b/pro_time/pubspec.yaml index 99106e7..b33eb77 100644 --- a/pro_time/pubspec.yaml +++ b/pro_time/pubspec.yaml @@ -21,6 +21,7 @@ dependencies: auto_size_text: ^2.1.0 flutter_picker: ^1.0.15 fl_chart: ^0.3.3 + flutter_local_notifications: ^0.8.4 dev_dependencies: flutter_test: