feat(widget): add 4x1 AppWidgetProvider with play/pause and track info
This commit is contained in:
79
app/src/main/java/com/radiola/widget/PlayerWidgetProvider.kt
Normal file
79
app/src/main/java/com/radiola/widget/PlayerWidgetProvider.kt
Normal file
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user