Sharrit/app/src/main/java/com/shaarit/widget/ShaarliWidgetProvider.kt
Bruno Charest 7277342d4a docs: Comprehensive README update with new features and architecture details
- Add extensive documentation for offline mode, sync, collections, and dashboard features
- Document new Material You theming, OLED mode, and widget capabilities
- Include detailed sections on metadata extraction, Markdown editor, and import/export
- Update technology stack versions (Kotlin 2.0.0, Hilt 2.51.1, Retrofit 2.11.0, Room 2.6.1)
- Simplify installation and compilation instructions
- Add user guide with first-time setup and
2026-01-29 13:14:47 -05:00

136 lines
5.0 KiB
Kotlin

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)
}
}