package com.anas4tech.noteable import android.app.PendingIntent import android.appwidget.AppWidgetManager import android.content.Context import android.content.Intent import android.content.SharedPreferences import android.view.View import android.widget.RemoteViews import es.antonborri.home_widget.HomeWidgetLaunchIntent import es.antonborri.home_widget.HomeWidgetProvider import androidx.core.content.edit import androidx.core.net.toUri open class SelectedNoteWidgetProvider : HomeWidgetProvider() { override fun onUpdate( context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray, widgetData: SharedPreferences ) { val configuredWidgetIds = widgetData.getString("selected_note_widget_ids", "") .orEmpty().split(',').mapNotNull(String::toIntOrNull).toMutableSet() configuredWidgetIds.addAll(appWidgetIds.toList()) widgetData.edit { putString("selected_note_widget_ids", configuredWidgetIds.joinToString(",")) } appWidgetIds.forEach { appWidgetId -> val views = RemoteViews(context.packageName, R.layout.selected_note_widget) val palette = WidgetTheme.palette(context, widgetData) views.setInt(R.id.selected_note_widget_container, "setBackgroundResource", palette.backgroundResource) if (!palette.followsSystem) { views.setTextColor(R.id.selected_note_title, palette.primaryText) views.setTextColor(R.id.selected_note_line_text, palette.secondaryText) } val description = widgetData.getString("selected_note_${appWidgetId}_description", "").orEmpty() val title = widgetData.getString("selected_note_${appWidgetId}_title", "").orEmpty() val noteId = widgetData.getInt("selected_note_${appWidgetId}_id", -1) views.setTextViewText(R.id.selected_note_title, title) views.setViewVisibility(R.id.selected_note_title, if (title.isEmpty()) View.GONE else View.VISIBLE) views.setViewVisibility(R.id.selected_note_lines, if (description.isEmpty()) View.GONE else View.VISIBLE) views.setViewVisibility(R.id.selected_note_empty, if (description.isEmpty()) View.VISIBLE else View.GONE) val adapterIntent = Intent(context, SelectedNoteLinesRemoteViewsService::class.java).apply { putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) data = "selected-note-lines://widget/$appWidgetId".toUri() } views.setRemoteAdapter(R.id.selected_note_lines, adapterIntent) views.setEmptyView(R.id.selected_note_lines, R.id.selected_note_empty) if (noteId > 0) { val openIntent = HomeWidgetLaunchIntent.getActivity( context, MainActivity::class.java, "noteable://open-note/$noteId?source=widget_view".toUri() ) views.setOnClickPendingIntent(R.id.selected_note_title, openIntent) views.setOnClickPendingIntent(R.id.selected_note_empty, openIntent) views.setOnClickPendingIntent(R.id.selected_note_widget_container, openIntent) val lineClickIntent = Intent(context, WidgetItemClickReceiver::class.java) val lineClickPendingIntent = PendingIntent.getBroadcast( context, appWidgetId, lineClickIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE ) views.setPendingIntentTemplate(R.id.selected_note_lines, lineClickPendingIntent) } appWidgetManager.updateAppWidget(appWidgetId, views) appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.selected_note_lines) } } }