- 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
136 lines
5.0 KiB
Kotlin
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)
|
|
}
|
|
}
|