Skip to content

Commit

Permalink
Merge pull request #509 from provokateurin/fix/hide-useless-push-noti…
Browse files Browse the repository at this point in the history
…fications-popups

fix(neon): Hide useless push notifications popups
  • Loading branch information
provokateurin authored Aug 1, 2023
2 parents ff713f7 + df35c6e commit 2b919be
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 43 deletions.
1 change: 1 addition & 0 deletions packages/neon/neon/lib/src/pages/home.dart
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ class _HomePageState extends State<HomePage> {
@override
void dispose() {
unawaited(_versionCheckSubscription.cancel());
GlobalPopups().dispose();
super.dispose();
}

Expand Down
109 changes: 66 additions & 43 deletions packages/neon/neon/lib/src/utils/global_popups.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:meta/meta.dart';
import 'package:neon/l10n/localizations.dart';
import 'package:neon/src/blocs/first_launch.dart';
import 'package:neon/src/blocs/next_push.dart';
import 'package:neon/src/pages/settings.dart';
import 'package:neon/src/platform/platform.dart';
import 'package:neon/src/router.dart';
import 'package:neon/src/utils/global_options.dart';
import 'package:provider/provider.dart';
Expand All @@ -22,62 +25,82 @@ class GlobalPopups {
static GlobalPopups? instance;

bool _registered = false;
late BuildContext _context;
final _subscriptions = <StreamSubscription>[];

void dispose() {
for (final subscription in _subscriptions) {
unawaited(subscription.cancel());
}
_subscriptions.clear();
_registered = false;
}

void register(final BuildContext context) {
_context = context;
if (_registered) {
return;
}

final globalOptions = Provider.of<GlobalOptions>(context, listen: false);
final firstLaunchBloc = Provider.of<FirstLaunchBloc>(context, listen: false);
final nextPushBloc = Provider.of<NextPushBloc>(context, listen: false);
final platform = Provider.of<NeonPlatform>(context, listen: false);

firstLaunchBloc.onFirstLaunch.listen((final _) {
if (globalOptions.pushNotificationsEnabled.enabled) {
if (!context.mounted) {
return;
}
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(AppLocalizations.of(context).firstLaunchGoToSettingsToEnablePushNotifications),
action: SnackBarAction(
label: AppLocalizations.of(context).settings,
onPressed: () {
const SettingsRoute(initialCategory: SettingsCageories.pushNotifications).go(context);
},
),
),
);
}
});
_subscriptions.addAll([
if (platform.canUsePushNotifications) ...[
firstLaunchBloc.onFirstLaunch.listen((final _) {
assert(context.mounted, 'Context should be mounted');
if (!globalOptions.pushNotificationsEnabled.enabled) {
return;
}

nextPushBloc.onNextPushSupported.listen((final _) async {
await showDialog(
context: context,
builder: (final context) => AlertDialog(
title: Text(AppLocalizations.of(context).nextPushSupported),
content: Text(AppLocalizations.of(context).nextPushSupportedText),
actions: [
OutlinedButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text(AppLocalizations.of(context).actionNo),
ScaffoldMessenger.of(_context).showSnackBar(
SnackBar(
content: Text(AppLocalizations.of(_context).firstLaunchGoToSettingsToEnablePushNotifications),
action: SnackBarAction(
label: AppLocalizations.of(_context).settings,
onPressed: () {
const SettingsRoute(initialCategory: SettingsCageories.pushNotifications).go(_context);
},
),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).pop();
launchUrlString(
'https://f-droid.org/packages/$unifiedPushNextPushID',
mode: LaunchMode.externalApplication,
);
},
child: Text(AppLocalizations.of(context).nextPushSupportedInstall),
);
}),
nextPushBloc.onNextPushSupported.listen((final _) async {
assert(context.mounted, 'Context should be mounted');
if (!globalOptions.pushNotificationsEnabled.enabled) {
return;
}

await showDialog(
context: _context,
builder: (final context) => AlertDialog(
title: Text(AppLocalizations.of(context).nextPushSupported),
content: Text(AppLocalizations.of(context).nextPushSupportedText),
actions: [
OutlinedButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text(AppLocalizations.of(context).actionNo),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).pop();
launchUrlString(
'https://f-droid.org/packages/$unifiedPushNextPushID',
mode: LaunchMode.externalApplication,
);
},
child: Text(AppLocalizations.of(context).nextPushSupportedInstall),
),
],
),
],
),
);
});
);
}),
],
]);

_registered = true;
}
Expand Down

0 comments on commit 2b919be

Please sign in to comment.