1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
package it.niedermann.owncloud.notes.widget.notelist;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.widget.RemoteViews;
import java.util.NoSuchElementException;
import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.persistence.NotesRepository;
import it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData;
public class NoteListWidget extends AppWidgetProvider {
private static final String TAG = NoteListWidget.class.getSimpleName();
static void updateAppWidget(Context context, AppWidgetManager awm, int[] appWidgetIds) {
final NotesRepository repo = NotesRepository.getInstance(context);
RemoteViews views;
for (int appWidgetId : appWidgetIds) {
try {
final NotesListWidgetData data = repo.getNoteListWidgetData(appWidgetId);
final Intent serviceIntent = new Intent(context, NoteListWidgetService.class);
serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME)));
final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_COMPONENT);
Log.v(TAG, "-- data - " + data);
views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list);
views.setRemoteAdapter(R.id.note_list_widget_lv, serviceIntent);
views.setPendingIntentTemplate(R.id.note_list_widget_lv, pendingIntent);
views.setEmptyView(R.id.note_list_widget_lv, R.id.widget_note_list_placeholder_tv);
awm.notifyAppWidgetViewDataChanged(appWidgetId, R.id.note_list_widget_lv);
awm.updateAppWidget(appWidgetId, views);
} catch (NoSuchElementException e) {
Log.i(TAG, "onUpdate has been triggered before the user finished configuring the widget");
}
}
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
updateAppWidget(context, appWidgetManager, appWidgetIds);
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
AppWidgetManager awm = AppWidgetManager.getInstance(context);
if (intent.getAction() != null) {
if (intent.getAction().equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE)) {
if (intent.hasExtra(AppWidgetManager.EXTRA_APPWIDGET_ID)) {
if (intent.getExtras() != null) {
updateAppWidget(context, awm, new int[]{intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, -1)});
} else {
Log.w(TAG, "intent.getExtras() is null");
}
} else {
updateAppWidget(context, awm, awm.getAppWidgetIds(new ComponentName(context, NoteListWidget.class)));
}
}
} else {
Log.w(TAG, "intent.getAction() is null");
}
}
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
super.onDeleted(context, appWidgetIds);
final NotesRepository repo = NotesRepository.getInstance(context);
for (int appWidgetId : appWidgetIds) {
new Thread(() -> repo.removeNoteListWidget(appWidgetId)).start();
}
}
/**
* Update note list widgets, if the note data was changed.
*/
public static void updateNoteListWidgets(Context context) {
context.sendBroadcast(new Intent(context, NoteListWidget.class).setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE));
}
}
|