fix(android): models stripping causing it to not work for release apks

This commit is contained in:
Kingkor Roy Tirtho 2024-12-15 13:30:25 +06:00
parent fba1876535
commit 403c4d2c66
3 changed files with 45 additions and 22 deletions

View File

@ -1 +1,8 @@
-keep class androidx.lifecycle.DefaultLifecycleObserver
-keep class androidx.lifecycle.DefaultLifecycleObserver
-keepnames class kotlinx.serialization.** { *; }
-keepnames class oss.krtirtho.spotube.glance.models.** { *; }
-keep @kotlinx.serialization.Serializable class *
-keepclassmembers class ** {
@kotlinx.serialization.* <fields>;
}

View File

@ -82,10 +82,13 @@ class HomePlayerWidget : GlanceAppWidget() {
val isPlaying = prefs.getBoolean("isPlaying", false)
val playbackServerAddress = prefs.getString("playbackServerAddress", null) ?: ""
Log.e("HomePlayerWidget", "Active track String: $activeTrackStr")
var activeTrack: Track? = null
if (activeTrackStr != null) {
activeTrack = gson.fromJson(activeTrackStr, Track::class.java)
}
Log.e("HomePlayerWidget", "Active track: $activeTrack")
val playIcon = Icon.createWithResource(context, android.R.drawable.ic_media_play);

View File

@ -5,6 +5,7 @@ import 'package:home_widget/home_widget.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:http/http.dart';
import 'package:logger/logger.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/provider/audio_player/audio_player.dart';
import 'package:spotube/provider/server/server.dart';
import 'package:spotube/services/audio_player/audio_player.dart';
@ -70,8 +71,38 @@ Future<void> _updateWidget() async {
}
}
Future<void> _sendActiveTrack(Track? track) async {
if (track == null) {
await _saveWidgetData("activeTrack", null);
await _updateWidget();
return;
}
final jsonTrack = track.toJson();
final image = track.album?.images?.first;
final cachedImage = await DefaultCacheManager().getSingleFile(image!.url!);
final data = {
...jsonTrack,
"album": {
...jsonTrack["album"],
"images": [
{
...image.toJson(),
"path": cachedImage.path,
}
]
}
};
await _saveWidgetData("activeTrack", jsonEncode(data));
await _updateWidget();
}
final glanceProvider = Provider((ref) {
final server = ref.read(serverProvider);
final activeTrack = ref.read(audioPlayerProvider).activeTrack;
server.whenData(
(value) async {
@ -85,6 +116,8 @@ final glanceProvider = Provider((ref) {
},
);
_sendActiveTrack(activeTrack);
ref.listen(serverProvider, (prev, next) async {
next.whenData(
(value) async {
@ -105,27 +138,7 @@ final glanceProvider = Provider((ref) {
try {
if (previous?.activeTrack != next.activeTrack &&
next.activeTrack != null) {
final jsonTrack = next.activeTrack!.toJson();
final image = next.activeTrack!.album?.images?.first;
final cachedImage =
await DefaultCacheManager().getSingleFile(image!.url!);
final data = {
...jsonTrack,
"album": {
...jsonTrack["album"],
"images": [
{
...image.toJson(),
"path": cachedImage.path,
}
]
}
};
await _saveWidgetData("activeTrack", jsonEncode(data));
await _updateWidget();
await _sendActiveTrack(next.activeTrack);
}
} catch (e, stack) {
AppLogger.reportError(e, stack);