Skip to content

Commit 87c56d9

Browse files
committed
Widget crash fix
1 parent 2e18c00 commit 87c56d9

File tree

1 file changed

+28
-16
lines changed

1 file changed

+28
-16
lines changed

app/src/main/java/com/example/abhishek/newsapp/widget/SavedNewsWidget.java

+28-16
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
import android.app.PendingIntent;
44
import android.appwidget.AppWidgetManager;
55
import android.appwidget.AppWidgetProvider;
6-
import androidx.lifecycle.LiveData;
7-
import androidx.lifecycle.Observer;
86
import android.content.Context;
97
import android.content.Intent;
108
import android.graphics.Bitmap;
9+
import android.os.Build;
1110
import android.view.View;
1211
import android.widget.RemoteViews;
1312

14-
import com.bumptech.glide.request.RequestOptions;
13+
import androidx.annotation.NonNull;
14+
1515
import com.bumptech.glide.request.target.AppWidgetTarget;
1616
import com.bumptech.glide.request.transition.Transition;
1717
import com.example.abhishek.newsapp.R;
@@ -47,7 +47,7 @@ static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
4747

4848
AppWidgetTarget appWidgetTarget = new AppWidgetTarget(context, R.id.iv_news_image, views, appWidgetId) {
4949
@Override
50-
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
50+
public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
5151
super.onResourceReady(resource, transition);
5252
}
5353
};
@@ -62,18 +62,18 @@ public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transiti
6262
Intent nextIntent = new Intent(context, SavedNewsService.class);
6363
nextIntent.setAction(SavedNewsService.ACTION_GET_NEXT);
6464
nextIntent.putExtra(SavedNewsService.PARAM_CURRENT, selected);
65-
PendingIntent nextPendingIntent = PendingIntent.getService(context, 0, nextIntent, PendingIntent.FLAG_UPDATE_CURRENT);
65+
PendingIntent nextPendingIntent = getPendingIntent(context, nextIntent, false);
6666
views.setOnClickPendingIntent(R.id.ib_next, nextPendingIntent);
6767

6868
Intent previousIntent = new Intent(context, SavedNewsService.class);
6969
previousIntent.setAction(SavedNewsService.ACTION_GET_PREVIOUS);
7070
previousIntent.putExtra(SavedNewsService.PARAM_CURRENT, selected);
71-
PendingIntent previousPendingIntent = PendingIntent.getService(context, 0, previousIntent, PendingIntent.FLAG_UPDATE_CURRENT);
71+
PendingIntent previousPendingIntent = getPendingIntent(context, previousIntent, false);
7272
views.setOnClickPendingIntent(R.id.ib_previous, previousPendingIntent);
7373

7474
Intent detail = new Intent(context, DetailActivity.class);
7575
detail.putExtra(DetailActivity.PARAM_ARTICLE, articles.get(selected));
76-
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, detail, PendingIntent.FLAG_UPDATE_CURRENT);
76+
PendingIntent pendingIntent = getPendingIntent(context, detail, true);
7777
views.setOnClickPendingIntent(R.id.widget_parent, pendingIntent);
7878

7979
} else {
@@ -85,7 +85,7 @@ public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transiti
8585
views.setViewVisibility(R.id.tv_error, View.VISIBLE);
8686

8787
Intent home = new Intent(context, MainActivity.class);
88-
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, home, PendingIntent.FLAG_UPDATE_CURRENT);
88+
PendingIntent pendingIntent = getPendingIntent(context, home, true);
8989
views.setOnClickPendingIntent(R.id.widget_parent, pendingIntent);
9090
}
9191
// Instruct the widget manager to update the widget
@@ -97,7 +97,7 @@ public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] a
9797
Intent nextIntent = new Intent(context, SavedNewsService.class);
9898
nextIntent.setAction(SavedNewsService.ACTION_GET_NEXT);
9999
nextIntent.putExtra(SavedNewsService.PARAM_CURRENT, -1);
100-
PendingIntent nextPendingIntent = PendingIntent.getService(context, 0, nextIntent, PendingIntent.FLAG_UPDATE_CURRENT);
100+
PendingIntent nextPendingIntent = getPendingIntent(context, nextIntent, false);
101101
try {
102102
nextPendingIntent.send();
103103
} catch (PendingIntent.CanceledException e) {
@@ -106,13 +106,6 @@ public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] a
106106

107107
}
108108

109-
public static void updateNewsWidgets(Context context, AppWidgetManager appWidgetManager, List<Article> articles, int selected, int[] appWidgetIds) {
110-
// There may be multiple widgets active, so update all of them
111-
for (int appWidgetId : appWidgetIds) {
112-
updateAppWidget(context, appWidgetManager, articles, selected, appWidgetId);
113-
}
114-
}
115-
116109
@Override
117110
public void onEnabled(Context context) {
118111
// Enter relevant functionality for when the first widget is created
@@ -122,5 +115,24 @@ public void onEnabled(Context context) {
122115
public void onDisabled(Context context) {
123116
// Enter relevant functionality for when the last widget is disabled
124117
}
118+
119+
public static void updateNewsWidgets(Context context, AppWidgetManager appWidgetManager, List<Article> articles, int selected, int[] appWidgetIds) {
120+
// There may be multiple widgets active, so update all of them
121+
for (int appWidgetId : appWidgetIds) {
122+
updateAppWidget(context, appWidgetManager, articles, selected, appWidgetId);
123+
}
124+
}
125+
126+
private static PendingIntent getPendingIntent(Context context, Intent intent, boolean isActivity) {
127+
int flag = PendingIntent.FLAG_UPDATE_CURRENT;
128+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
129+
flag = PendingIntent.FLAG_IMMUTABLE;
130+
}
131+
if (isActivity) {
132+
return PendingIntent.getActivity(context, 0, intent, flag);
133+
134+
}
135+
return PendingIntent.getService(context, 0, intent, flag);
136+
}
125137
}
126138

0 commit comments

Comments
 (0)