Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .env
Binary file not shown.
26 changes: 13 additions & 13 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,27 @@
<!-- playing radio in background permissions -->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<application
android:label="ToPWR"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">

<!-- playing radio in background permissions -->
<service
android:name="com.ryanheise.audioservice.AudioService"
android:foregroundServiceType="mediaPlayback"
android:enabled="true"
android:exported="true"
tools:ignore="Instantiatable"
android:stopWithTask="true" >
<!-- Audio Service -->
<service android:name="com.ryanheise.audioservice.AudioService"
android:foregroundServiceType="mediaPlayback"
android:exported="true" tools:ignore="Instantiatable">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService" />
</intent-filter>
</service>

<!-- playing radio in background permissions -->
<receiver android:name="com.ryanheise.audioservice.MediaButtonReceiver"
android:exported="true" tools:ignore="Instantiatable">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>

<meta-data android:name="com.google.android.geo.API_KEY"
Expand All @@ -41,7 +38,6 @@
<!-- name attribute has to be change to play radio in foreground -->
<activity
android:name="com.ryanheise.audioservice.AudioServiceActivity"
android:enableOnBackInvokedCallback="true"
android:exported="true"
android:launchMode="singleTask"
android:theme="@style/LaunchTheme"
Expand Down Expand Up @@ -80,6 +76,10 @@
<meta-data
android:name="flutterEmbedding"
android:value="2" />
<!-- Android Auto Definition -->
<meta-data
android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/>
</application>
<!-- Required to query activities that can process text, see:
https://developer.android.com/training/package-visibility?hl=en and
Expand Down
4 changes: 4 additions & 0 deletions android/app/src/main/res/xml/automotive_app_desc.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<automotiveApp>
<uses name="media" />
</automotiveApp>
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import "dart:async";

import "package:audioplayers/audioplayers.dart";
import "package:flutter/material.dart";
import "package:flutter_hooks/flutter_hooks.dart";
import "package:just_audio/just_audio.dart";

import "../../../../../../config/ui_config.dart";
import "../../../../../../theme/app_theme.dart";
Expand All @@ -22,15 +22,15 @@ class MyAudioPlayer extends HookWidget {
final totalTime = useState(Duration.zero);

useEffect(() {
final stateSubscription = audioPlayer.onPlayerStateChanged.listen((state) {
isPlaying.value = state == PlayerState.playing;
final stateSubscription = audioPlayer.playerStateStream.listen((state) {
isPlaying.value = state.playing;
});

final durationSubscription = audioPlayer.onDurationChanged.listen((duration) {
totalTime.value = duration;
final durationSubscription = audioPlayer.durationStream.listen((duration) {
totalTime.value = duration ?? Duration.zero;
});

final positionSubscription = audioPlayer.onPositionChanged.listen((position) {
final positionSubscription = audioPlayer.positionStream.listen((position) {
currentTime.value = position;
});

Expand All @@ -46,7 +46,8 @@ class MyAudioPlayer extends HookWidget {
if (isPlaying.value) {
await audioPlayer.pause();
} else {
await audioPlayer.play(UrlSource(audioUrl));
await audioPlayer.setUrl(audioUrl);
await audioPlayer.play();
}
}, [audioUrl]);

Expand Down
11 changes: 11 additions & 0 deletions lib/features/radio_luz/data/models/now_playing.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import "package:freezed_annotation/freezed_annotation.dart";

part "now_playing.freezed.dart";
part "now_playing.g.dart";

@freezed
abstract class NowPlaying with _$NowPlaying {
const factory NowPlaying({required String? now, required String? next}) = _NowPlaying;

factory NowPlaying.fromJson(Map<String, dynamic> json) => _$NowPlayingFromJson(json);
}
17 changes: 15 additions & 2 deletions lib/features/radio_luz/presentation/radio_luz_view.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
import "dart:async";

import "package:auto_route/auto_route.dart";
import "package:flutter/material.dart";
import "package:flutter_hooks/flutter_hooks.dart";
import "package:hooks_riverpod/hooks_riverpod.dart";

import "../../../config/ui_config.dart";
import "../../../theme/app_theme.dart";
import "../../../utils/context_extensions.dart";
import "../../../widgets/horizontal_symmetric_safe_area.dart";
import "../service/radio_player_controller.dart";
import "audio_player_widget.dart";
import "broadcasts_section.dart";
import "now_playing_section.dart";
Expand All @@ -13,13 +18,21 @@ import "radio_luz_socials_section.dart";
import "radio_luz_title.dart";

@RoutePage()
class RadioLuzView extends StatelessWidget {
class RadioLuzView extends HookConsumerWidget {
const RadioLuzView({super.key});

@override
Widget build(BuildContext context) {
Widget build(BuildContext context, WidgetRef ref) {
final l10n = context.localize;
final cappedTextScale = context.textScaler.clamp(maxScaleFactor: 1.7);

useEffect(() {
WidgetsBinding.instance.addPostFrameCallback((_) {
unawaited(ref.read(radioControllerProvider.notifier).preload());
});
return null;
}, []);

return MediaQuery(
data: MediaQuery.of(context).copyWith(textScaler: cappedTextScale),
child: HorizontalSymmetricSafeAreaScaffold(
Expand Down
8 changes: 4 additions & 4 deletions lib/features/radio_luz/service/audio_player_streams.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ part "audio_player_streams.g.dart";

@riverpod
Stream<PlayerState> audioPlayerState(Ref ref) {
final player = ref.watch(radioPlayerProvider);
return player.playerStateStream;
final handler = ref.watch(radioPlayerProvider);
return handler.playerState;
}

@riverpod
Stream<double> audioPlayerVolume(Ref ref) {
final player = ref.watch(radioPlayerProvider);
return player.volumeStream;
final handler = ref.watch(radioPlayerProvider);
return handler.volume;
}
Loading
Loading