Skip to content

Commit e314f2d

Browse files
authored
fix: Showing no connection page when wwan is connection is active (#1393)
Fixes #1390
1 parent 0b11515 commit e314f2d

File tree

12 files changed

+47
-153
lines changed

12 files changed

+47
-153
lines changed

lib/app/connectivity_model.dart

Lines changed: 24 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,44 @@
11
import 'dart:async';
22

3-
import 'package:connectivity_plus/connectivity_plus.dart';
4-
import 'package:flutter/material.dart';
5-
import 'package:flutter_it/flutter_it.dart';
3+
import 'package:internet_connection_checker_plus/internet_connection_checker_plus.dart';
64
import 'package:safe_change_notifier/safe_change_notifier.dart';
75

8-
import '../common/data/audio_type.dart';
9-
import '../common/view/snackbars.dart';
10-
import '../extensions/connectivity_x.dart';
11-
import '../l10n/l10n.dart';
126
import '../player/player_service.dart';
13-
import '../radio/radio_model.dart';
14-
import '../settings/settings_model.dart';
157

168
class ConnectivityModel extends SafeChangeNotifier {
179
ConnectivityModel({
1810
required PlayerService playerService,
19-
required Connectivity connectivity,
20-
}) : _connectivity = connectivity,
21-
_playerService = playerService;
11+
required InternetConnection internetConnection,
12+
}) : _playerService = playerService,
13+
_internetConnection = internetConnection;
2214

2315
final PlayerService _playerService;
24-
final Connectivity _connectivity;
25-
Stream<List<ConnectivityResult>> get onConnectivityChanged =>
26-
_connectivity.onConnectivityChanged;
27-
StreamSubscription<List<ConnectivityResult>>? _connectivitySubscription;
16+
final InternetConnection _internetConnection;
17+
StreamSubscription<InternetStatus>? _internetConnectionSubscription;
2818

29-
Future<void> init() async {
30-
// TODO: fix https://github.com/fluttercommunity/plus_plugins/issues/1451
31-
final fallback = [ConnectivityResult.wifi];
32-
33-
_connectivitySubscription ??= _connectivity.onConnectivityChanged.listen(
34-
_updateConnectivity,
35-
onError: (e) => _result = fallback,
36-
);
37-
38-
return _connectivity
39-
.checkConnectivity()
40-
.then(_updateConnectivity)
41-
.catchError((_) => _updateConnectivity(fallback));
42-
}
43-
44-
bool get isOnline => _connectivity.isOnline(_result);
45-
46-
bool get isMaybeLowBandWidth => _connectivity.isNotWifiNorEthernet(_result);
19+
InternetStatus? _internetStatus;
20+
bool get isOnline => _internetStatus == InternetStatus.connected;
4721

48-
List<ConnectivityResult>? get result => _result;
49-
List<ConnectivityResult>? _result;
50-
void _updateConnectivity(List<ConnectivityResult> newResult) {
51-
if (!_connectivity.isOnline(newResult) &&
52-
_playerService.audio?.audioType == AudioType.radio) {
53-
_playerService.pause();
54-
}
55-
_result = newResult;
56-
notifyListeners();
22+
Future<void> init() async {
23+
_internetConnectionSubscription ??= _internetConnection.onStatusChange
24+
.listen((status) {
25+
if (status == InternetStatus.disconnected &&
26+
_playerService.audio!.path == null) {
27+
_playerService.pause();
28+
}
29+
_internetStatus = status;
30+
notifyListeners();
31+
});
32+
33+
return _internetConnection.internetStatus.then((status) {
34+
_internetStatus = status;
35+
notifyListeners();
36+
});
5737
}
5838

5939
@override
6040
Future<void> dispose() async {
61-
await _connectivitySubscription?.cancel();
41+
await _internetConnectionSubscription?.cancel();
6242
super.dispose();
6343
}
6444
}
65-
66-
void onConnectivityChangedHandler(
67-
BuildContext context,
68-
AsyncSnapshot<List<ConnectivityResult>?> res,
69-
void Function() cancel,
70-
) {
71-
final l10n = context.l10n;
72-
final dataSafeMode = di<RadioModel>().dataSafeMode;
73-
final notifyDataSafeMode = di<SettingsModel>().notifyDataSafeMode;
74-
if (!res.hasData || !context.mounted || !notifyDataSafeMode) {
75-
return;
76-
}
77-
78-
if (!dataSafeMode && di<Connectivity>().isNotWifiNorEthernet(res.data)) {
79-
di<RadioModel>().setDataSafeMode(true);
80-
showSnackBar(context: context, content: Text(l10n.dataSafeModeEnabled));
81-
} else if (dataSafeMode &&
82-
!di<Connectivity>().isNotWifiNorEthernet(res.data)) {
83-
di<RadioModel>().setDataSafeMode(false);
84-
showSnackBar(context: context, content: Text(l10n.dataSafeModeDisabled));
85-
}
86-
}

lib/app/view/desktop_home_page.dart

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,6 @@ class _DesktopHomePageState extends State<DesktopHomePage> {
7373
select: (DownloadModel m) => m.messageStream,
7474
handler: downloadMessageStreamHandler,
7575
);
76-
77-
registerStreamHandler(
78-
select: (ConnectivityModel m) => m.onConnectivityChanged,
79-
handler: onConnectivityChangedHandler,
80-
);
81-
8276
registerStreamHandler(
8377
select: (LocalAudioModel m) =>
8478
m.fileWatcher?.events ?? const Stream<WatchEvent>.empty(),

lib/app/view/mobile_page.dart

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import '../../player/view/player_main_controls.dart';
1111
import '../../player/view/player_view.dart';
1212
import '../../podcasts/download_model.dart';
1313
import '../app_model.dart';
14-
import '../connectivity_model.dart';
1514
import 'create_master_items.dart';
1615
import 'mobile_bottom_bar.dart';
1716
import 'routing_manager.dart';
@@ -31,11 +30,6 @@ class MobilePage extends StatelessWidget with WatchItMixin {
3130
handler: downloadMessageStreamHandler,
3231
);
3332

34-
registerStreamHandler(
35-
select: (ConnectivityModel m) => m.onConnectivityChanged,
36-
handler: onConnectivityChangedHandler,
37-
);
38-
3933
return PopScope(
4034
canPop: !fullWindowMode,
4135
onPopInvokedWithResult: (didPop, result) {

lib/common/view/data_safe_mode_dialog.dart

Lines changed: 0 additions & 45 deletions
This file was deleted.

lib/extensions/connectivity_x.dart

Lines changed: 0 additions & 12 deletions
This file was deleted.

lib/podcasts/view/lazy_podcast_page.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
22
import 'package:podcast_search/podcast_search.dart';
33
import 'package:flutter_it/flutter_it.dart';
44

5+
import '../../app/connectivity_model.dart';
56
import '../../common/data/audio.dart';
67
import '../../common/logging.dart';
78
import '../../common/view/no_search_result_page.dart';
@@ -68,7 +69,10 @@ class _LazyPodcastPageState extends State<LazyPodcastPage> {
6869

6970
@override
7071
Widget build(BuildContext context) {
72+
final isOnline = watchPropertyValue((ConnectivityModel m) => m.isOnline);
73+
7174
return FutureBuilder(
75+
key: ValueKey(isOnline),
7276
future: _episodes,
7377
builder: (context, snapshot) {
7478
final feedUrl = widget.feedUrl ?? widget.podcastItem?.feedUrl;
@@ -119,6 +123,7 @@ class _LazyPodcastPageState extends State<LazyPodcastPage> {
119123
episodes: episodes,
120124
feedUrl: feedUrl,
121125
title: title,
126+
isOnline: isOnline,
122127
);
123128
},
124129
);

lib/podcasts/view/podcast_page.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,14 @@ class PodcastPage extends StatelessWidget with WatchItMixin {
3232
required this.feedUrl,
3333
required this.episodes,
3434
required this.title,
35+
this.isOnline = true,
3536
});
3637

3738
final String feedUrl;
3839
final String? imageUrl;
3940
final String title;
4041
final List<Audio> episodes;
42+
final bool isOnline;
4143

4244
@override
4345
Widget build(BuildContext context) {
@@ -165,6 +167,7 @@ class PodcastPage extends StatelessWidget with WatchItMixin {
165167
sliver: SliverPodcastPageList(
166168
audios: episodesWithDownloads,
167169
pageId: feedUrl,
170+
isOnline: isOnline,
168171
),
169172
),
170173
],

lib/podcasts/view/sliver_podcast_page_list.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_it/flutter_it.dart';
33

4-
import '../../app/connectivity_model.dart';
54
import '../../common/data/audio.dart';
65
import '../../library/library_model.dart';
76
import '../../player/player_model.dart';
@@ -12,17 +11,18 @@ class SliverPodcastPageList extends StatelessWidget with WatchItMixin {
1211
super.key,
1312
required this.audios,
1413
required this.pageId,
14+
required this.isOnline,
1515
});
1616

1717
final List<Audio> audios;
1818
final String pageId;
19+
final bool isOnline;
1920

2021
@override
2122
Widget build(BuildContext context) {
2223
final playerModel = di<PlayerModel>();
2324
final libraryModel = di<LibraryModel>();
2425
final selectedAudio = watchPropertyValue((PlayerModel m) => m.audio);
25-
final isOnline = watchPropertyValue((ConnectivityModel m) => m.isOnline);
2626

2727
return SliverList(
2828
delegate: SliverChildBuilderDelegate(childCount: audios.length, (

lib/register.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import 'package:connectivity_plus/connectivity_plus.dart';
21
import 'package:dio/dio.dart';
32
import 'package:flutter/material.dart';
43
import 'package:flutter_discord_rpc/flutter_discord_rpc.dart';
54
import 'package:flutter_it/flutter_it.dart';
65
import 'package:github/github.dart';
6+
import 'package:internet_connection_checker_plus/internet_connection_checker_plus.dart';
77
import 'package:local_notifier/local_notifier.dart';
88
import 'package:media_kit/media_kit.dart';
99
import 'package:media_kit_video/media_kit_video.dart';
@@ -227,7 +227,7 @@ void registerDependencies() {
227227
),
228228
dependsOn: [SettingsService, LibraryService, NotificationsService],
229229
)
230-
..registerLazySingleton<Connectivity>(() => Connectivity())
230+
..registerLazySingleton<InternetConnection>(() => InternetConnection())
231231
..registerSingletonAsync<RadioService>(
232232
() async {
233233
final s = RadioService(
@@ -245,7 +245,7 @@ void registerDependencies() {
245245
..registerSingletonAsync<ConnectivityModel>(() async {
246246
final connectivityModel = ConnectivityModel(
247247
playerService: di<PlayerService>(),
248-
connectivity: di<Connectivity>(),
248+
internetConnection: di<InternetConnection>(),
249249
);
250250
await connectivityModel.init();
251251
return connectivityModel;

lib/settings/view/resource_section.dart

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,6 @@ class ResourceSection extends StatelessWidget with WatchItMixin {
5252
value: watchPropertyValue((RadioModel m) => m.dataSafeMode),
5353
),
5454
),
55-
YaruTile(
56-
title: Text(l10n.notifyMeAboutDataSafeModeTitle),
57-
subtitle: Text(l10n.notifyMeAboutDataSafeModeDescription),
58-
trailing: CommonSwitch(
59-
onChanged: di<SettingsModel>().setNotifyDataSafeMode,
60-
value: watchPropertyValue(
61-
(SettingsModel m) => m.notifyDataSafeMode,
62-
),
63-
),
64-
),
6555
YaruTile(
6656
title: Text(l10n.saveWindowSizeTitle),
6757
subtitle: Text(l10n.saveWindowSizeDescription),

0 commit comments

Comments
 (0)