From 76d28160f7a0e2263b04d1acbac94be234a41cda Mon Sep 17 00:00:00 2001 From: Maximilian Mitchell Date: Sun, 5 Dec 2021 17:12:45 +0000 Subject: [PATCH 1/9] Remove SmartRefresher for performance reasons - resolves #217 --- lib/screens/home.dart | 20 +------------------- pubspec.yaml | 1 - 2 files changed, 1 insertion(+), 20 deletions(-) diff --git a/lib/screens/home.dart b/lib/screens/home.dart index b92a4041..c5e7aece 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -5,16 +5,12 @@ import 'package:flutter/widgets.dart'; import 'package:notifi/notifications/notifications_table.dart'; import 'package:notifi/notifications/notifis.dart'; import 'package:notifi/screens/utils/alert.dart'; -import 'package:notifi/screens/utils/loading_gif.dart'; import 'package:notifi/screens/utils/scaffold.dart'; import 'package:notifi/user.dart'; import 'package:notifi/utils/icons.dart'; import 'package:provider/provider.dart'; -import 'package:pull_to_refresh/pull_to_refresh.dart'; class HomeScreen extends StatelessWidget { - final RefreshController _refreshController = RefreshController(); - @override Widget build(BuildContext context) { Provider.of(context, listen: false).setSnackContext(context); @@ -28,21 +24,7 @@ class HomeScreen extends StatelessWidget { onPressed: () async { Navigator.pushNamed(context, '/settings'); }), - body: SmartRefresher( - header: CustomHeader( - builder: (_, RefreshStatus mode) { - if (mode != RefreshStatus.idle) { - return LoadingGif(); - } - return SizedBox(); - }, - ), - controller: _refreshController, - onRefresh: () async { - _refreshController.refreshCompleted(); - await Provider.of(context, listen: false).initWSS(); - }, - child: const NotificationTable()), + body: const NotificationTable(), bottomNavigationBar: BottomAppBar( elevation: 0, // ignore: prefer_const_literals_to_create_immutables diff --git a/pubspec.yaml b/pubspec.yaml index 21cd9470..fc66a998 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -34,7 +34,6 @@ dependencies: package_info_plus: ^1.0.4 path_provider: ^2.0.2 provider: ^6.0.0 - pull_to_refresh: ^2.0.0 share_plus: ^3.0.2 shared_preferences: ^2.0.6 sqflite: ^2.0.0+3 From 67f7ae8cf2fc543788cf3f738d40e3f1d638aec1 Mon Sep 17 00:00:00 2001 From: Maximilian Mitchell Date: Fri, 10 Dec 2021 14:57:15 +0000 Subject: [PATCH 2/9] fix integration tests scrolling --- lib/notifications/notifications_table.dart | 1 - test_driver/app_test.dart | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/notifications/notifications_table.dart b/lib/notifications/notifications_table.dart index 8a7139aa..5ca16748 100644 --- a/lib/notifications/notifications_table.dart +++ b/lib/notifications/notifications_table.dart @@ -35,7 +35,6 @@ class NotificationTableState extends State if (notifications.notifications.isNotEmpty) { return AnimatedList( padding: const EdgeInsets.only(bottom: 10), - shrinkWrap: true, key: notifications.tableKey, controller: notifications.tableController, itemBuilder: _buildNotification, diff --git a/test_driver/app_test.dart b/test_driver/app_test.dart index 52576dfe..2f4657ad 100644 --- a/test_driver/app_test.dart +++ b/test_driver/app_test.dart @@ -102,13 +102,13 @@ void main() { await Future.delayed(Duration(milliseconds: 600)); } - await driver.waitUntilNoTransientCallbacks(timeout: Duration(seconds: 5)); + await driver.waitUntilNoTransientCallbacks(timeout: Duration(seconds: 2)); // wait for notification to appear - SerializableFinder notification = find.text('1'); + SerializableFinder notification = find.text('5'); await driver.waitFor(notification); await driver.scrollIntoView(notification); - await driver.waitUntilNoTransientCallbacks(timeout: Duration(seconds: 5)); + await driver.waitUntilNoTransientCallbacks(timeout: Duration(seconds: 2)); }); }); } From 6fef19783b8bf1f41e3830c0c78f4ce68425aeb7 Mon Sep 17 00:00:00 2001 From: Maximilian Mitchell Date: Fri, 10 Dec 2021 15:18:26 +0000 Subject: [PATCH 3/9] remove unnecessary_import's --- lib/notifications/notification.dart | 2 -- lib/notifications/notifications_table.dart | 3 --- lib/screens/home.dart | 1 - lib/screens/settings.dart | 2 -- lib/screens/utils/loading_gif.dart | 1 - lib/screens/utils/scaffold.dart | 1 - lib/user.dart | 1 - lib/utils/utils.dart | 1 - test/widget_test.dart | 2 ++ 9 files changed, 2 insertions(+), 12 deletions(-) diff --git a/lib/notifications/notification.dart b/lib/notifications/notification.dart index b8bdd686..41d2dfca 100644 --- a/lib/notifications/notification.dart +++ b/lib/notifications/notification.dart @@ -2,10 +2,8 @@ import 'dart:async'; import 'dart:io'; import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:intl/intl.dart' as i; import 'package:json_annotation/json_annotation.dart'; diff --git a/lib/notifications/notifications_table.dart b/lib/notifications/notifications_table.dart index 5ca16748..440b7ed3 100644 --- a/lib/notifications/notifications_table.dart +++ b/lib/notifications/notifications_table.dart @@ -1,10 +1,7 @@ import 'dart:io'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:notifi/notifications/notification.dart'; import 'package:notifi/notifications/notifis.dart'; diff --git a/lib/screens/home.dart b/lib/screens/home.dart index c5e7aece..f0a0d13f 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -1,7 +1,6 @@ import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:notifi/notifications/notifications_table.dart'; import 'package:notifi/notifications/notifis.dart'; import 'package:notifi/screens/utils/alert.dart'; diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart index 88ce6d16..415d4f91 100644 --- a/lib/screens/settings.dart +++ b/lib/screens/settings.dart @@ -4,9 +4,7 @@ import 'package:launch_review/launch_review.dart'; import 'package:app_settings/app_settings.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; -import 'package:flutter/widgets.dart'; import 'package:launch_at_login/launch_at_login.dart'; import 'package:notifi/notifications/notifications_table.dart'; import 'package:notifi/screens/utils/alert.dart'; diff --git a/lib/screens/utils/loading_gif.dart b/lib/screens/utils/loading_gif.dart index efce3dae..ba4ee080 100644 --- a/lib/screens/utils/loading_gif.dart +++ b/lib/screens/utils/loading_gif.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; class LoadingGif extends StatelessWidget { @override diff --git a/lib/screens/utils/scaffold.dart b/lib/screens/utils/scaffold.dart index b06cd704..57d45aec 100644 --- a/lib/screens/utils/scaffold.dart +++ b/lib/screens/utils/scaffold.dart @@ -1,4 +1,3 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:notifi/notifications/notifis.dart'; import 'package:notifi/screens/utils/animated_cnt.dart'; diff --git a/lib/user.dart b/lib/user.dart index a9bb8349..f2dac1bd 100644 --- a/lib/user.dart +++ b/lib/user.dart @@ -4,7 +4,6 @@ import 'dart:io'; import 'package:dio/dio.dart' as d; import 'package:dio/dio.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 37e05325..5ab6cccb 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -1,7 +1,6 @@ import 'dart:io'; import 'package:firebase_messaging/firebase_messaging.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; diff --git a/test/widget_test.dart b/test/widget_test.dart index 38346b94..bc7fa8d5 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -99,6 +99,7 @@ void main() { // got from printing _messageKey.currentContext.size.width double width = 666.33; + // get long title // ignore: literal_only_boolean_expressions while (true) { cnt += 1; @@ -109,6 +110,7 @@ void main() { } } + // get long message // ignore: literal_only_boolean_expressions while (true) { cnt += 1; From 6896cfb1f4dacc187ad80f3b780c8be1979907e7 Mon Sep 17 00:00:00 2001 From: Maximilian Mitchell Date: Fri, 10 Dec 2021 16:44:59 +0000 Subject: [PATCH 4/9] fix tests --- lib/notifications/db_provider.dart | 1 + lib/screens/utils/animated_cnt.dart | 5 ----- .../notification/is_expanded.png | Bin 2906 -> 3561 bytes test/widget_test.dart | 4 ++-- 4 files changed, 3 insertions(+), 7 deletions(-) diff --git a/lib/notifications/db_provider.dart b/lib/notifications/db_provider.dart index 1e54c7ab..7e5ef671 100644 --- a/lib/notifications/db_provider.dart +++ b/lib/notifications/db_provider.dart @@ -84,6 +84,7 @@ class DBProvider { } Future markRead(int id, {bool isRead}) async { + if (isTest) return -1; int read = 0; if (isRead) read = 1; final Database db = await initDB(); diff --git a/lib/screens/utils/animated_cnt.dart b/lib/screens/utils/animated_cnt.dart index 5a17db0c..d0ade845 100644 --- a/lib/screens/utils/animated_cnt.dart +++ b/lib/screens/utils/animated_cnt.dart @@ -16,11 +16,6 @@ class _AnimatedCntState extends State with TickerProviderStateMixin { AnimationController _controller; - @override - void initState() { - super.initState(); - } - @override void dispose() { if (_controller != null) _controller.dispose(); diff --git a/test/golden-asserts/notification/is_expanded.png b/test/golden-asserts/notification/is_expanded.png index af68ef74a07baef929d2079476d3f105fdaa28a8..251def298fc7cc1250735da406b4948b0097ec7e 100644 GIT binary patch literal 3561 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 WyusH?bqQ#MI394ZFWvY3kN*Zy!>Z8$ literal 2906 zcmb7GeOOXw8>jT@OU-SyT)N~PTIY}RJLi7x=ef^w|L)&&pQ~O+ zztvj@UIzk!^boEt-XPG*KHxcY%_`uore>Z4U`4F=x6Yt)fzb%?q8;mu@L2;~32Q=9 zKp-7$gv$XReEx)_($g>;%$wl_*QL#X4OXpXZQba1>9hs3*uwAUUBlP5p4d_4y`$JY z>nVN9#P-fj22WkhW0qZVH!{2r96D$k(u&x=((d|$z5c6Gf7|ElQrr1CgT{NZ5bu}( zXC_+8VN(uiCXCJL8!qdcz|>CXYM1@DZ8FQ^`(IfJd{oZ!h6buBVrd@)hOSQ2+4-tY zsN@ywDINiK@sNo%*EPF3kRzANTLQRchEtjqEZU^&l!ad{j03Zi(%Ph$z3QwM*WM9z z&)%aFym<`ARj3CHrReJEA$mui`El*+rGvHoq`ap}Aru~eBE<|@0dBQqIoIJ@aD8+0lCayV z&e#$Ed}=#j*VUGh6;f%5W87@({3*?PKCxYRR5bj-prxfHQ&?|PQ(G(TiEgnW+e4uk zYeT?AO=;+Hin6AjE*r$`j^Oclvyb%Qa|G}X%b@0)jku{?uC6z+Y4l7W;M-aJ`Jt@` zrtf)|ISL1r$PIw$p%ys$BOz?Lo+UZQUrgj2g zb$t2qb2t|WwFSjVXf?X>id<10u*>B5aNcTt<2iyxZmuh2WL%jKl}9n@f2$IfdP)a) zl=4zwY0%u~`o5YfGu9mxrs1agGP)~*6a)j{wO|i0z1S}q`MQEa+NDU=OEX~iuw6!^(^0#Xn&E3On1Ods>8YO{3~`@V2dT) z=r92R-ifXVC4rLiVkovikUv(C-@y-Zl*enk%(1aCIPpus-Uj_UVHfFF=bzwi-2`fB zf2RFHDGwzE+Ir>;IDgp zWVR5<;P9|(K~P{|Mt!|KmXw$n1hKUh#YMKq7`anTsU0#=Fe7sA^<$m5`OysMR6LDP zCXPSH?vPY=NJ=V)ssd}-Uhe~CdS2>S#hRJC z0A;b+!QkUeq;z`Pt3dzJ^9yOth2K3z$-bVgKbP9nRHcL5YheNU9NY z?9#$i3(gM6cylkHqQRxbh0%oS0IZ#1@5SB-O)2893s-p>l8gOz)aR!LG)gj=%v}ho zi&JPwh|8UA-ZH+FWu4~{raWD_?bybg2)}>;>Z@0$up|NjwR`vOm&z)U5w9{OMf-=P zse@x+(HJ&PK17DnxVcQ(8?~B~MxoH&_29v6K|fa^ z+d0mr+%lyH95ek)o3bP0={^tA7DJ7mZ}&6Eiv4{9l8EYJBt3_Fn9@4vJU>Mo7JFi7Xy~PK zagiwQ?e&p~Ws?cx?6KU^yLUsPqC5&Zezi%bmE>fRa$+K?zOK$oCPc;>@wRULOk35W&s=bX!z~8}21eClanAVU z7^sw>KXeEvdEc%IC)RsQMt={(;r&V{7Z5 z|BqJJq8DB=piWBA6?A!OYATDvVF*x>DFc2~(;Eq}3gdx>&`1(+26c6Hy;NFHvTZ)F zPa&cM18s;Zc1w$8US8g40yuK0ck)`KAFeAF^|zD56V=`{&c>3_9Q;=m=q7I&z}MIq zq%(4h;ndO6uN@p5?plc=POR707b*AXdhoJya;(}*v%rj#-6ywgJff7#W3fonf`zk8 zF_eb(qg1k3r&Y@K(AYoz8}+wt8l_E!W&PIElYaTK78XXfLHTzNPxRDk1-%QDnrxwI z1^VA}{w=JUC2)lI0F5{6E(7gkeHd_9Bvlp8EV=bH5zG}+{k}4~=>8)yu zl$4llHa14eYJtxF`n7Yx`!tWvH*n(QhYLJ|+si9@rc3|Q4_32gH2%9?}Yd+Vdon^T3x>+u5f_u-n`!JZ8H!H OggA86rQG?uOaB2OL~%X< diff --git a/test/widget_test.dart b/test/widget_test.dart index bc7fa8d5..a8252413 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -184,7 +184,7 @@ void main() { ); await pumpWidgetWithNotification(tester, n); await tester.pump(); - await tester.pump(); + await tester.pumpAndSettle(); expect(n.isExpanded, false); expect(n.isRead, false); @@ -192,7 +192,7 @@ void main() { // expand await tester.tap(find.byKey(Key('toggle-expand'))); - await tester.pump(); + await tester.pumpAndSettle(); expect(n.isExpanded, true); expect(n.isRead, true); From 368e1966dbe4dfce8c81d746b4f505319b828aac Mon Sep 17 00:00:00 2001 From: Maximilian Mitchell Date: Sat, 11 Dec 2021 16:10:30 +0000 Subject: [PATCH 5/9] test received each notification --- ios/Runner.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- test_driver/app_test.dart | 11 ++--------- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 444daed0..5a027d6c 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -180,7 +180,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 1210; - LastUpgradeCheck = 1020; + LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140cf..3db53b6e 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ .delayed(Duration(milliseconds: 600)); + await Future.delayed(Duration(seconds: 1)); + await driver.waitFor(find.text('$i')); } - - await driver.waitUntilNoTransientCallbacks(timeout: Duration(seconds: 2)); - - // wait for notification to appear - SerializableFinder notification = find.text('5'); - await driver.waitFor(notification); - await driver.scrollIntoView(notification); - await driver.waitUntilNoTransientCallbacks(timeout: Duration(seconds: 2)); }); }); } From 3fe84562efaa3fff3bf2861fc6c54fe08aae6f5a Mon Sep 17 00:00:00 2001 From: Maximilian Mitchell Date: Sat, 11 Dec 2021 16:20:15 +0000 Subject: [PATCH 6/9] Fix android network connection - resolves #221 --- android/app/src/main/AndroidManifest.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 3ed8c25a..c2727623 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,7 @@ + + From d88bdcae44d1f66f1e85f7157c8ca51092ee274e Mon Sep 17 00:00:00 2001 From: Maximilian Mitchell Date: Sat, 11 Dec 2021 20:01:00 +0000 Subject: [PATCH 7/9] add xserver - Fix ubuntu integration tests - resolves #202 --- .github/workflows/it.yml | 42 +++++++++++++++++++-------------------- test_driver/app_test.dart | 17 +++++++--------- 2 files changed, 28 insertions(+), 31 deletions(-) diff --git a/.github/workflows/it.yml b/.github/workflows/it.yml index b62bbf3d..4f4dec70 100644 --- a/.github/workflows/it.yml +++ b/.github/workflows/it.yml @@ -49,24 +49,24 @@ jobs: profile: Nexus 6P script: ./test_driver/test.sh "${{ matrix.device }}" "${{ matrix.branch }}" "${{ secrets.B64_ENV }}" "${{ secrets.B64_DEV_ENV }}" -# test-linux: -# runs-on: ubuntu-latest -# strategy: -# matrix: -# branch: ["master", "develop"] -# device: ["linux"] -# steps: -# - uses: actions/checkout@v2 -# with: -# ref: "refs/heads/${{ matrix.branch }}" -# - uses: actions/setup-java@v1 -# with: -# java-version: '12.x' -# - name: Test -# run: | -# sudo apt-get update -y -# sudo apt-get install -y ninja-build libgtk-3-dev -# sudo snap install -y flutter -# flutter channel stable -# flutter upgrade -# ./test_driver/test.sh "${{ matrix.device }}" "${{ matrix.branch }}" "${{ secrets.B64_ENV }}" "${{ secrets.B64_DEV_ENV }}" + test-linux: + runs-on: ubuntu-latest + strategy: + matrix: + branch: ["master", "develop"] + device: ["linux"] + steps: + - uses: actions/checkout@v2 + with: + ref: "refs/heads/${{ matrix.branch }}" + - uses: actions/setup-java@v1 + with: + java-version: '12.x' + - name: Test + run: | + sudo apt-get update -y + sudo apt-get install -y ninja-build libgtk-3-dev xserver + sudo snap install -y flutter + flutter channel stable + flutter upgrade + ./test_driver/test.sh "${{ matrix.device }}" "${{ matrix.branch }}" "${{ secrets.B64_ENV }}" "${{ secrets.B64_DEV_ENV }}" diff --git a/test_driver/app_test.dart b/test_driver/app_test.dart index 3cb47e04..d9a6fc0a 100644 --- a/test_driver/app_test.dart +++ b/test_driver/app_test.dart @@ -6,7 +6,7 @@ import 'package:http/http.dart' as http; void main() { - group('Screen Shot', () { + group('Integration Tests', () { FlutterDriver driver; // Connect to the Flutter driver before running any tests. @@ -19,7 +19,7 @@ void main() { await driver.close(); }); - test('SS screens', () async { + test('Initial view', () async { SerializableFinder toggleExpand = find.byValueKey('toggle-expand'); // ss notifications @@ -29,9 +29,10 @@ void main() { await screenshot(driver, 'screenshots/1.png'); }); - test('Screenshot no notifications', () async { + test('No notifications', () async { SerializableFinder deleteAll = find.byValueKey('delete-all'); SerializableFinder ok = find.byValueKey('ok'); + // ss no notifications await driver.tap(deleteAll); await driver.waitFor(ok); @@ -40,7 +41,7 @@ void main() { await screenshot(driver, 'screenshots/2.png'); }); - test('Test new credentials', () async { + test('Create new credentials', () async { SerializableFinder credentials = find.byValueKey('credentials'); SerializableFinder cog = find.byValueKey('cog'); SerializableFinder back = find.byValueKey('back-button'); @@ -74,16 +75,13 @@ void main() { expect(updatedCreds != initialCreds, true); }); - test('Test receiving notifications and scroll', () async { + test('Receive notifications', () async { // Send & Receive notifications // get credentials SerializableFinder credentials = find.byValueKey('credentials'); String creds = await driver.getText(credentials); - // ignore: avoid_print - print(creds); - // get host from .env String host; String file = await File('.env').readAsString(); @@ -99,8 +97,7 @@ void main() { 'https://$host/api?credentials=$creds&title=${i}&message=Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.&link=https://notifi.it&image=https://notifi.it/images/logo.png')); // ignore: avoid_print print(req.statusCode); - await Future.delayed(Duration(seconds: 1)); - await driver.waitFor(find.text('$i')); + await driver.waitFor(find.text('$i'), timeout: Duration(seconds: 20)); } }); }); From 9117f98a7832f3fa1033838cc79e8b037ac911ea Mon Sep 17 00:00:00 2001 From: Maximilian Mitchell Date: Sat, 5 Feb 2022 12:01:03 +0000 Subject: [PATCH 8/9] Upgrade android sdk to 31 - resolves #223 --- .github/workflows/ci.yml | 6 +++--- .github/workflows/it.yml | 2 +- .github/workflows/ss.yml | 2 +- android/app/build.gradle | 7 ++----- android/app/src/main/AndroidManifest.xml | 1 + android/build.gradle | 2 +- macos/Podfile | 2 +- pubspec.yaml | 4 ++-- .../screen/no-notifications.png | Bin 4024 -> 4015 bytes test/golden-asserts/screen/notification.png | Bin 8476 -> 8458 bytes test/golden-asserts/screen/settings.png | Bin 14643 -> 14615 bytes 11 files changed, 12 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 961a9924..e11f2fe0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -130,7 +130,7 @@ jobs: - uses: subosito/flutter-action@v1 with: channel: 'stable' - - name: "Codesign" + - name: "Build & Codesign" run: | flutter config --enable-macos-desktop flutter pub get @@ -155,10 +155,10 @@ jobs: /usr/bin/codesign -vvv --force --deep --options runtime --strict -s Z28DW76Y3W build/macos/Build/Products/Release/notifi.app # codesign sparkle auto update - /usr/bin/codesign -vvv --force --deep --options runtime --strict -s Z28DW76Y3W build/macos/Build/Products/Release/notifi.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app + /usr/bin/codesign -vvv --force --deep --options runtime --strict -s Z28DW76Y3W build/macos/Build/Products/Release/notifi.app/Contents/Frameworks/Sparkle.framework/Versions/Current/Updater.app # codesign binaries - /usr/bin/codesign -vvv --force --deep --options runtime --strict -s Z28DW76Y3W build/macos/Build/Products/Release/notifi.app/Contents/Frameworks/Sparkle.framework/Versions/A/Sparkle + /usr/bin/codesign -vvv --force --deep --options runtime --strict -s Z28DW76Y3W build/macos/Build/Products/Release/notifi.app/Contents/Frameworks/Sparkle.framework/Versions/Current/Sparkle /usr/bin/codesign -vvv --force --deep --options runtime --strict -s Z28DW76Y3W build/macos/Build/Products/Release/notifi.app/Contents/MacOS/notifi - name: "Create & Notarize .dmg" diff --git a/.github/workflows/it.yml b/.github/workflows/it.yml index 4f4dec70..c3bef87c 100644 --- a/.github/workflows/it.yml +++ b/.github/workflows/it.yml @@ -44,7 +44,7 @@ jobs: - name: Test uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 29 + api-level: 31 arch: x86_64 profile: Nexus 6P script: ./test_driver/test.sh "${{ matrix.device }}" "${{ matrix.branch }}" "${{ secrets.B64_ENV }}" "${{ secrets.B64_DEV_ENV }}" diff --git a/.github/workflows/ss.yml b/.github/workflows/ss.yml index baa7489e..25c3c89e 100644 --- a/.github/workflows/ss.yml +++ b/.github/workflows/ss.yml @@ -21,7 +21,7 @@ jobs: - name: Take Screenshot uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 29 + api-level: 31 arch: x86_64 profile: Nexus 6P script: | diff --git a/android/app/build.gradle b/android/app/build.gradle index f0fd0b35..d48806fd 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -33,7 +33,7 @@ apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 30 + compileSdkVersion 31 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -49,10 +49,9 @@ android { } defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "it.notifi.notifi" minSdkVersion 23 - targetSdkVersion 30 + targetSdkVersion 31 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } @@ -68,8 +67,6 @@ android { buildTypes { release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.release } } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index c2727623..eea39a8b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -13,6 +13,7 @@ android:label="notifi"> z-!11x(zR<|GsFDOQzod%k}Q?o4HD8IM#dyWku-mR+t+scWBcQCpZAaVeV^x^=Xtw` zQeu4)pT2)@QhKR)>M6DMlf{5O2X~bI!R{N(5Sk6IdpGZfU;BXysP@7%3xDsUD=EJ{ zeD6~_=?iWD&s(q38A;#au244?eRI9w*N?gWF_Xz()t|Kwxtn4Q>gFb61i>;A^x{!` zP2(kVv=0E_ochOX^rI0yumC*3`2r9ek_g9Ra{0*J2Ic02is*5988AqV#WqO_{%gv$=v3ZJZAh@P3ynST zaiud%dJBrQ{a7A!+NQf}(%ecT&UJiPxB2MfjR5q$#lialP`@r1fW#C50I(R^l1P8T zPbLak8&sS|GXw;cIeAcfM@MAA$&+Mu8~|+u**}1Jf{J;)T{U&z8)XqWoI=P)k=7BT zU_K!PzC>96zvml3S#kVvUlWUVv5!$CYSpa=#Ez>A8x!pAcnRH+yb&;?ad3OO+ynbWmK>Dt1eX zortMqB%eMB^ajJ`Q%`@19DLnVK4)!{$z*13nte#+TazxRln07OF zY-}u5m(xKmZ#DGtdp|#!F;?pzCfrlwGqo_jJA1oMn&Vs?XQaPQ$bQ~x;$l9>po+3+nw?Ap73>ugrWt%-8gJuZ8lt0OaqJ139#KyI-rNwryx=gWHsZldsKXlv z*F#aOp3zo40|NJnmD!18OO?wc;mOz9!qA&z)+7`Z5{&NIR~mL-&vU;WZw?Su`yznA z!de95bv26jSsB7wU$zDdo{?O(+Atx*J)usMLK3V5CKG}p4mHKmAKFxP#IWN#Z{Mi) zA{o%|D=AC%!)OF?5>MbfkC0cYvk%~yJ*Tz=!a{Jj_ z5V_OcsS{+)>E!B1)R@vpw|R@#n75LM&=TjeQsJye^}Mohx{B^Ls!uVyj@-0eb0QA3rXdLoA)fk01zM-Hd+7x zMvDOo09Ujg0R0B00Gh!NnXi}X_2Hs}f_Az_6-40@m_?p6wLFM|JZwryLT#>&G|lyu z;;@|DZDkw^4FJ#f4>AIB9x*VRv*ER#7c(+58E?{OVY-KJ;m+N-CPc_S`4%c$G1@%0 zvoViKDI@CeZzu?XvZ*)B-OY`E$ImVV*6XmQv{Au3Pm$7?KCG2rA!r^c^Ttc35 zJb~IUA(KsS=)4ttX=HBRX@6BbOxs9q;fZ2eNB({idc&T2*if#WR(nv}`1e>!rP9db z`RGs>ZjoLUx#5TQuz2b6+a3wMd8XsO+f)~mX^3lX!CE*O6`Oo=W@1Z} z+Yzmx%*+}ybE3 zW=2m6sZuuPq=|BO$~)11yvdy+B}H{##3e$kp1vkT$kFx)Fc1m#+73 zwZ_drG2j>r1)@VuIHj@-_iz{qg21K_1KFX;cFGB^Pd?ixU-d1l59k%gNx=za8MOt5 z0FeE5^o75pujxT=Fj&hBoqBU|*az8gdUA^OUs{siR zLs|V=H~(L6NzayItRWEt$mb1A{k_&_yLbgBb{60o2|MXDTdG;-(ah31nC~bw?Ths) z*FCWX$%vp`iMhftZo13@f^;|3%WCZybfIUx>mct-VL9WSL_JbUa!z&UpOvx@BbG}%vy zNGLA}Eu5FUHL7B!1I=ulsAmAgPVlVEvhz^;s&S0v_sTK$IOZQ5s?WJ^uMuaIl0^yo z`huk?VBxdWgU-dI{gv{lRuoTf7IHzK^6LwJ%l`%Gqj5Q&kT{?WEw^z@b>i0_>}euk zG@w_4q~@tk27UEYIiwZ=6gm8;=TXi`EBPm-2*YRQT94JodDQ)ckZnX6gk1^`X$c}f F_#edf9H;;Q diff --git a/test/golden-asserts/screen/notification.png b/test/golden-asserts/screen/notification.png index 974ee1276a703ae9d8eb2b50308fd5a8b9d9e2f1..00cb25c24a4668441c3cc47c12f6aedf3ce4776d 100644 GIT binary patch literal 8458 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 j5=vpXTP*bstm$HbXzzI@nN-d;j)71{lw& literal 8476 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 I8=pJ>0Vt}&cK`qY diff --git a/test/golden-asserts/screen/settings.png b/test/golden-asserts/screen/settings.png index 6652b38cdb021bfd75b7f44652d5ac507156a1da..edcc1b605f733f81bf4154c14821048b34e3d490 100644 GIT binary patch literal 14615 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 Je){6I{{^k_an=9; literal 14643 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 Zw3sil_n& Date: Sat, 5 Feb 2022 16:14:53 +0000 Subject: [PATCH 9/9] Fix the android top bar being placed over the top of the app - resolves #224 --- README.md | 1 - lib/main.dart | 2 ++ lib/screens/utils/scaffold.dart | 6 ++++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 41160edc..ce490ec4 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,6 @@ http://itunes.apple.com/lookup?bundleId=it.notifi.notifi ```bash ln -s $(pwd)/pre-commit.sh $(pwd)/.git/hooks/pre-commit -chmod +x $(pwd)/.git/hooks/pre-commit ``` ## linux setup diff --git a/lib/main.dart b/lib/main.dart index 349c1922..3f38192e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -25,6 +25,7 @@ Future main() => mainImpl(); Future mainImpl({bool integration: false}) async { WidgetsFlutterBinding.ensureInitialized(); + final SharedPreferences sp = await SharedPreferences.getInstance(); Globals.isIntegration = integration; @@ -77,6 +78,7 @@ Future mainImpl({bool integration: false}) async { } catch (_) { canBadge = false; } + runApp(MultiProvider( providers: [ ChangeNotifierProvider( diff --git a/lib/screens/utils/scaffold.dart b/lib/screens/utils/scaffold.dart index 57d45aec..700faefe 100644 --- a/lib/screens/utils/scaffold.dart +++ b/lib/screens/utils/scaffold.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:notifi/notifications/notifis.dart'; import 'package:notifi/screens/utils/animated_cnt.dart'; @@ -13,8 +15,8 @@ class MyScaffold extends StatelessWidget { @override Widget build(BuildContext context) { - double paddingTop = 0; - if (MediaQuery.of(context).padding.top > 0) { + double paddingTop = MediaQuery.of(context).padding.top; + if (MediaQuery.of(context).padding.top > 0 && Platform.isIOS) { paddingTop = MediaQuery.of(context).padding.top - 20; } double paddingBottom = 0;