package com.shaarit.widget import android.app.PendingIntent import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetProvider import android.content.Context import android.content.Intent import android.net.Uri import android.widget.RemoteViews import com.shaarit.MainActivity import com.shaarit.R /** * Widget Provider pour afficher les liens Shaarli sur l'écran d'accueil */ class ShaarliWidgetProvider : AppWidgetProvider() { companion object { const val ACTION_ADD_LINK = "com.shaarit.widget.ACTION_ADD_LINK" const val ACTION_REFRESH = "com.shaarit.widget.ACTION_REFRESH" const val ACTION_RANDOM = "com.shaarit.widget.ACTION_RANDOM" const val EXTRA_LINK_URL = "link_url" } override fun onUpdate( context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray ) { for (appWidgetId in appWidgetIds) { updateAppWidget(context, appWidgetManager, appWidgetId) } } override fun onReceive(context: Context, intent: Intent) { super.onReceive(context, intent) when (intent.action) { ACTION_ADD_LINK -> { // Ouvrir l'app en mode ajout rapide val mainIntent = Intent(context, MainActivity::class.java).apply { action = Intent.ACTION_SEND type = "text/plain" putExtra(Intent.EXTRA_TEXT, "") flags = Intent.FLAG_ACTIVITY_NEW_TASK } context.startActivity(mainIntent) } ACTION_REFRESH -> { // Rafraîchir le widget val appWidgetManager = AppWidgetManager.getInstance(context) val componentName = android.content.ComponentName(context, ShaarliWidgetProvider::class.java) val appWidgetIds = appWidgetManager.getAppWidgetIds(componentName) onUpdate(context, appWidgetManager, appWidgetIds) } ACTION_RANDOM -> { // Ouvrir un lien aléatoire // TODO: Implémenter la sélection aléatoire val mainIntent = Intent(context, MainActivity::class.java).apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK } context.startActivity(mainIntent) } } } private fun updateAppWidget( context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int ) { val views = RemoteViews(context.packageName, R.layout.widget_shaarli) // Configuration du titre views.setTextViewText(R.id.widget_title, "ShaarIt") // Bouton Ajouter val addIntent = Intent(context, ShaarliWidgetProvider::class.java).apply { action = ACTION_ADD_LINK } val addPendingIntent = PendingIntent.getBroadcast( context, 0, addIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) views.setOnClickPendingIntent(R.id.widget_btn_add, addPendingIntent) // Bouton Rafraîchir val refreshIntent = Intent(context, ShaarliWidgetProvider::class.java).apply { action = ACTION_REFRESH } val refreshPendingIntent = PendingIntent.getBroadcast( context, 1, refreshIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) views.setOnClickPendingIntent(R.id.widget_btn_refresh, refreshPendingIntent) // Bouton Aléatoire val randomIntent = Intent(context, ShaarliWidgetProvider::class.java).apply { action = ACTION_RANDOM } val randomPendingIntent = PendingIntent.getBroadcast( context, 2, randomIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) views.setOnClickPendingIntent(R.id.widget_btn_random, randomPendingIntent) // Configuration de la liste (utilise un RemoteViewsService) val serviceIntent = Intent(context, ShaarliWidgetService::class.java).apply { putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) data = Uri.parse(toUri(Intent.URI_INTENT_SCHEME)) } views.setRemoteAdapter(R.id.widget_list, serviceIntent) // Intent pour les items de la liste val clickIntent = Intent(context, MainActivity::class.java) val clickPendingIntent = PendingIntent.getActivity( context, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE ) views.setPendingIntentTemplate(R.id.widget_list, clickPendingIntent) // Message vide views.setEmptyView(R.id.widget_list, R.id.widget_empty) appWidgetManager.updateAppWidget(appWidgetId, views) } }