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 @@
+
+