From 87c56d9452590abc23b6688c95fc6378621d069a Mon Sep 17 00:00:00 2001 From: Abhishek Chaudhary Date: Sun, 17 Jul 2022 04:46:37 +0530 Subject: [PATCH] Widget crash fix --- .../newsapp/widget/SavedNewsWidget.java | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/example/abhishek/newsapp/widget/SavedNewsWidget.java b/app/src/main/java/com/example/abhishek/newsapp/widget/SavedNewsWidget.java index d35948d..0763479 100644 --- a/app/src/main/java/com/example/abhishek/newsapp/widget/SavedNewsWidget.java +++ b/app/src/main/java/com/example/abhishek/newsapp/widget/SavedNewsWidget.java @@ -3,15 +3,15 @@ import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; -import androidx.lifecycle.LiveData; -import androidx.lifecycle.Observer; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; +import android.os.Build; import android.view.View; import android.widget.RemoteViews; -import com.bumptech.glide.request.RequestOptions; +import androidx.annotation.NonNull; + import com.bumptech.glide.request.target.AppWidgetTarget; import com.bumptech.glide.request.transition.Transition; import com.example.abhishek.newsapp.R; @@ -47,7 +47,7 @@ static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, AppWidgetTarget appWidgetTarget = new AppWidgetTarget(context, R.id.iv_news_image, views, appWidgetId) { @Override - public void onResourceReady(Bitmap resource, Transition transition) { + public void onResourceReady(@NonNull Bitmap resource, Transition transition) { super.onResourceReady(resource, transition); } }; @@ -62,18 +62,18 @@ public void onResourceReady(Bitmap resource, Transition transiti Intent nextIntent = new Intent(context, SavedNewsService.class); nextIntent.setAction(SavedNewsService.ACTION_GET_NEXT); nextIntent.putExtra(SavedNewsService.PARAM_CURRENT, selected); - PendingIntent nextPendingIntent = PendingIntent.getService(context, 0, nextIntent, PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent nextPendingIntent = getPendingIntent(context, nextIntent, false); views.setOnClickPendingIntent(R.id.ib_next, nextPendingIntent); Intent previousIntent = new Intent(context, SavedNewsService.class); previousIntent.setAction(SavedNewsService.ACTION_GET_PREVIOUS); previousIntent.putExtra(SavedNewsService.PARAM_CURRENT, selected); - PendingIntent previousPendingIntent = PendingIntent.getService(context, 0, previousIntent, PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent previousPendingIntent = getPendingIntent(context, previousIntent, false); views.setOnClickPendingIntent(R.id.ib_previous, previousPendingIntent); Intent detail = new Intent(context, DetailActivity.class); detail.putExtra(DetailActivity.PARAM_ARTICLE, articles.get(selected)); - PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, detail, PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent pendingIntent = getPendingIntent(context, detail, true); views.setOnClickPendingIntent(R.id.widget_parent, pendingIntent); } else { @@ -85,7 +85,7 @@ public void onResourceReady(Bitmap resource, Transition transiti views.setViewVisibility(R.id.tv_error, View.VISIBLE); Intent home = new Intent(context, MainActivity.class); - PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, home, PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent pendingIntent = getPendingIntent(context, home, true); views.setOnClickPendingIntent(R.id.widget_parent, pendingIntent); } // Instruct the widget manager to update the widget @@ -97,7 +97,7 @@ public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] a Intent nextIntent = new Intent(context, SavedNewsService.class); nextIntent.setAction(SavedNewsService.ACTION_GET_NEXT); nextIntent.putExtra(SavedNewsService.PARAM_CURRENT, -1); - PendingIntent nextPendingIntent = PendingIntent.getService(context, 0, nextIntent, PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent nextPendingIntent = getPendingIntent(context, nextIntent, false); try { nextPendingIntent.send(); } catch (PendingIntent.CanceledException e) { @@ -106,13 +106,6 @@ public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] a } - public static void updateNewsWidgets(Context context, AppWidgetManager appWidgetManager, List
articles, int selected, int[] appWidgetIds) { - // There may be multiple widgets active, so update all of them - for (int appWidgetId : appWidgetIds) { - updateAppWidget(context, appWidgetManager, articles, selected, appWidgetId); - } - } - @Override public void onEnabled(Context context) { // Enter relevant functionality for when the first widget is created @@ -122,5 +115,24 @@ public void onEnabled(Context context) { public void onDisabled(Context context) { // Enter relevant functionality for when the last widget is disabled } + + public static void updateNewsWidgets(Context context, AppWidgetManager appWidgetManager, List
articles, int selected, int[] appWidgetIds) { + // There may be multiple widgets active, so update all of them + for (int appWidgetId : appWidgetIds) { + updateAppWidget(context, appWidgetManager, articles, selected, appWidgetId); + } + } + + private static PendingIntent getPendingIntent(Context context, Intent intent, boolean isActivity) { + int flag = PendingIntent.FLAG_UPDATE_CURRENT; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + flag = PendingIntent.FLAG_IMMUTABLE; + } + if (isActivity) { + return PendingIntent.getActivity(context, 0, intent, flag); + + } + return PendingIntent.getService(context, 0, intent, flag); + } }