diff --git a/app/src/main/java/com/radiola/widget/PlayerWidgetProvider.kt b/app/src/main/java/com/radiola/widget/PlayerWidgetProvider.kt new file mode 100644 index 0000000..1f38fc0 --- /dev/null +++ b/app/src/main/java/com/radiola/widget/PlayerWidgetProvider.kt @@ -0,0 +1,79 @@ +package com.radiola.widget + +import android.app.PendingIntent +import android.appwidget.AppWidgetManager +import android.appwidget.AppWidgetProvider +import android.content.Context +import android.content.Intent +import android.widget.RemoteViews +import com.radiola.MainActivity +import com.radiola.R +import com.radiola.service.PlayerService + +class PlayerWidgetProvider : AppWidgetProvider() { + + companion object { + const val ACTION_PLAY_PAUSE = "com.radiola.widget.ACTION_PLAY_PAUSE" + + fun updateWidget( + context: Context, + appWidgetManager: AppWidgetManager, + appWidgetId: Int, + stationName: String, + trackTitle: String, + isPlaying: Boolean + ) { + val views = RemoteViews(context.packageName, R.layout.widget_player) + + views.setTextViewText(R.id.widget_station_name, stationName) + views.setTextViewText(R.id.widget_track_title, trackTitle) + views.setImageViewResource( + R.id.widget_play_pause, + if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play + ) + + // Open app on click + val openAppIntent = Intent(context, MainActivity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP + } + val openAppPendingIntent = PendingIntent.getActivity( + context, 0, openAppIntent, + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + ) + views.setOnClickPendingIntent(R.id.widget_root, openAppPendingIntent) + + // Play/Pause button + val playPauseIntent = Intent(context, PlayerWidgetProvider::class.java).apply { + action = ACTION_PLAY_PAUSE + } + val playPausePendingIntent = PendingIntent.getBroadcast( + context, 1, playPauseIntent, + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + ) + views.setOnClickPendingIntent(R.id.widget_play_pause, playPausePendingIntent) + + appWidgetManager.updateAppWidget(appWidgetId, views) + } + } + + override fun onUpdate( + context: Context, + appWidgetManager: AppWidgetManager, + appWidgetIds: IntArray + ) { + for (appWidgetId in appWidgetIds) { + updateWidget(context, appWidgetManager, appWidgetId, "radiOLA", "", false) + } + } + + override fun onReceive(context: Context, intent: Intent) { + super.onReceive(context, intent) + if (intent.action == ACTION_PLAY_PAUSE) { + // Start service to handle play/pause + val serviceIntent = Intent(context, PlayerService::class.java).apply { + action = ACTION_PLAY_PAUSE + } + context.startService(serviceIntent) + } + } +} diff --git a/app/src/main/res/drawable/ic_pause.xml b/app/src/main/res/drawable/ic_pause.xml new file mode 100644 index 0000000..8c35c41 --- /dev/null +++ b/app/src/main/res/drawable/ic_pause.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_play.xml b/app/src/main/res/drawable/ic_play.xml new file mode 100644 index 0000000..fdf1b75 --- /dev/null +++ b/app/src/main/res/drawable/ic_play.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/widget_background.xml b/app/src/main/res/drawable/widget_background.xml new file mode 100644 index 0000000..1b32f6c --- /dev/null +++ b/app/src/main/res/drawable/widget_background.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/drawable/widget_cover_placeholder.xml b/app/src/main/res/drawable/widget_cover_placeholder.xml new file mode 100644 index 0000000..e841c0d --- /dev/null +++ b/app/src/main/res/drawable/widget_cover_placeholder.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/app/src/main/res/layout/widget_player.xml b/app/src/main/res/layout/widget_player.xml new file mode 100644 index 0000000..927f5ba --- /dev/null +++ b/app/src/main/res/layout/widget_player.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/xml/player_widget_info.xml b/app/src/main/res/xml/player_widget_info.xml new file mode 100644 index 0000000..7cf6a88 --- /dev/null +++ b/app/src/main/res/xml/player_widget_info.xml @@ -0,0 +1,9 @@ + +