mirror of
				https://github.com/commons-app/apps-android-commons.git
				synced 2025-10-31 14:53:59 +01:00 
			
		
		
		
	add version check condition to compare with API 23 before adding flag
This commit is contained in:
		
							parent
							
								
									ba573edfcd
								
							
						
					
					
						commit
						21b21846ac
					
				
					 2 changed files with 71 additions and 48 deletions
				
			
		|  | @ -65,14 +65,11 @@ public class NotificationHelper { | ||||||
|             .setPriority(PRIORITY_HIGH); |             .setPriority(PRIORITY_HIGH); | ||||||
| 
 | 
 | ||||||
|         int flags = PendingIntent.FLAG_UPDATE_CURRENT; |         int flags = PendingIntent.FLAG_UPDATE_CURRENT; | ||||||
| 
 |         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { | ||||||
|         // Check if the API level is 31 or higher to modify the flag |             flags |= PendingIntent.FLAG_IMMUTABLE; // This flag was introduced in API 23 | ||||||
|         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { |  | ||||||
|             // For API level 31 or above, PendingIntent requires either FLAG_IMMUTABLE or FLAG_MUTABLE to be set |  | ||||||
|             flags |= PendingIntent.FLAG_IMMUTABLE; |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intent, flags); |         final PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intent, flags); | ||||||
|         notificationBuilder.setContentIntent(pendingIntent); |         notificationBuilder.setContentIntent(pendingIntent); | ||||||
|         notificationManager.notify(notificationId, notificationBuilder.build()); |         notificationManager.notify(notificationId, notificationBuilder.build()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -41,17 +41,28 @@ import static android.content.Intent.ACTION_VIEW; | ||||||
|  */ |  */ | ||||||
| public class PicOfDayAppWidget extends AppWidgetProvider { | public class PicOfDayAppWidget extends AppWidgetProvider { | ||||||
| 
 | 
 | ||||||
|     private CompositeDisposable compositeDisposable = new CompositeDisposable(); |     private final CompositeDisposable compositeDisposable = new CompositeDisposable(); | ||||||
| 
 | 
 | ||||||
|     @Inject |     @Inject | ||||||
|     MediaClient mediaClient; |     MediaClient mediaClient; | ||||||
| 
 | 
 | ||||||
|     void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { |     void updateAppWidget( | ||||||
|         RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.pic_of_day_app_widget); |         final Context context, | ||||||
|  |         final AppWidgetManager appWidgetManager, | ||||||
|  |         final int appWidgetId | ||||||
|  |     ) { | ||||||
|  |         final RemoteViews views = new RemoteViews( | ||||||
|  |             context.getPackageName(), R.layout.pic_of_day_app_widget); | ||||||
| 
 | 
 | ||||||
|         // Launch App on Button Click |         // Launch App on Button Click | ||||||
|         Intent viewIntent = new Intent(context, MainActivity.class); |         final Intent viewIntent = new Intent(context, MainActivity.class); | ||||||
|         PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, viewIntent, PendingIntent.FLAG_IMMUTABLE); |         int flags = PendingIntent.FLAG_UPDATE_CURRENT; | ||||||
|  |         if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) { | ||||||
|  |             flags |= PendingIntent.FLAG_IMMUTABLE; | ||||||
|  |         } | ||||||
|  |         final PendingIntent pendingIntent = PendingIntent.getActivity( | ||||||
|  |             context, 0, viewIntent, flags); | ||||||
|  | 
 | ||||||
|         views.setOnClickPendingIntent(R.id.camera_button, pendingIntent); |         views.setOnClickPendingIntent(R.id.camera_button, pendingIntent); | ||||||
|         appWidgetManager.updateAppWidget(appWidgetId, views); |         appWidgetManager.updateAppWidget(appWidgetId, views); | ||||||
| 
 | 
 | ||||||
|  | @ -60,61 +71,76 @@ public class PicOfDayAppWidget extends AppWidgetProvider { | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Loads the picture of the day using media wiki API |      * Loads the picture of the day using media wiki API | ||||||
|      * @param context |      * @param context The application context. | ||||||
|      * @param views |      * @param views The RemoteViews object used to update the App Widget UI. | ||||||
|      * @param appWidgetManager |      * @param appWidgetManager The AppWidgetManager instance for managing the widget. | ||||||
|      * @param appWidgetId |      * @param appWidgetId he ID of the App Widget to update. | ||||||
|      */ |      */ | ||||||
|     private void loadPictureOfTheDay(Context context, |     private void loadPictureOfTheDay( | ||||||
|                                      RemoteViews views, |         final Context context, | ||||||
|                                      AppWidgetManager appWidgetManager, |         final RemoteViews views, | ||||||
|                                      int appWidgetId) { |         final AppWidgetManager appWidgetManager, | ||||||
|  |         final int appWidgetId | ||||||
|  |     ) { | ||||||
|         compositeDisposable.add(mediaClient.getPictureOfTheDay() |         compositeDisposable.add(mediaClient.getPictureOfTheDay() | ||||||
|                 .subscribeOn(Schedulers.io()) |                 .subscribeOn(Schedulers.io()) | ||||||
|                 .observeOn(AndroidSchedulers.mainThread()) |                 .observeOn(AndroidSchedulers.mainThread()) | ||||||
|                 .subscribe( |                 .subscribe( | ||||||
|                         response -> { |                     response -> { | ||||||
|                             if (response != null) { |                         if (response != null) { | ||||||
|                                 views.setTextViewText(R.id.appwidget_title, response.getDisplayTitle()); |                             views.setTextViewText(R.id.appwidget_title, response.getDisplayTitle()); | ||||||
| 
 | 
 | ||||||
|                                 // View in browser |                             // View in browser | ||||||
|                                 Intent viewIntent = new Intent(); |                             final Intent viewIntent = new Intent(); | ||||||
|                                 viewIntent.setAction(ACTION_VIEW); |                             viewIntent.setAction(ACTION_VIEW); | ||||||
|                                 viewIntent.setData(Uri.parse(response.getPageTitle().getMobileUri())); |                             viewIntent.setData(Uri.parse(response.getPageTitle().getMobileUri())); | ||||||
|                                 PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, viewIntent, PendingIntent.FLAG_IMMUTABLE); |  | ||||||
|                                 views.setOnClickPendingIntent(R.id.appwidget_image, pendingIntent); |  | ||||||
| 
 | 
 | ||||||
|                                 loadImageFromUrl(response.getThumbUrl(), context, views, appWidgetManager, appWidgetId); |                             int flags = PendingIntent.FLAG_UPDATE_CURRENT; | ||||||
|  |                             if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) { | ||||||
|  |                                 flags |= PendingIntent.FLAG_IMMUTABLE; | ||||||
|                             } |                             } | ||||||
|                         }, |                             final PendingIntent pendingIntent = PendingIntent.getActivity( | ||||||
|                         t -> Timber.e(t, "Fetching picture of the day failed") |                                 context, 0, viewIntent, flags); | ||||||
|  | 
 | ||||||
|  |                             views.setOnClickPendingIntent(R.id.appwidget_image, pendingIntent); | ||||||
|  |                             loadImageFromUrl(response.getThumbUrl(), | ||||||
|  |                                 context, views, appWidgetManager, appWidgetId); | ||||||
|  |                         } | ||||||
|  |                     }, | ||||||
|  |                     t -> Timber.e(t, "Fetching picture of the day failed") | ||||||
|                 )); |                 )); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Uses Fresco to load an image from Url |      * Uses Fresco to load an image from Url | ||||||
|      * @param imageUrl |      * @param imageUrl The URL of the image to load. | ||||||
|      * @param context |      * @param context The application context. | ||||||
|      * @param views |      * @param views The RemoteViews object used to update the App Widget UI. | ||||||
|      * @param appWidgetManager |      * @param appWidgetManager The AppWidgetManager instance for managing the widget. | ||||||
|      * @param appWidgetId |      * @param appWidgetId he ID of the App Widget to update. | ||||||
|      */ |      */ | ||||||
|     private void loadImageFromUrl(String imageUrl, |     private void loadImageFromUrl( | ||||||
|                                   Context context, |         final String imageUrl, | ||||||
|                                   RemoteViews views, |         final Context context, | ||||||
|                                   AppWidgetManager appWidgetManager, |         final RemoteViews views, | ||||||
|                                   int appWidgetId) { |         final AppWidgetManager appWidgetManager, | ||||||
|         ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(imageUrl)).build(); |         final int appWidgetId | ||||||
|         ImagePipeline imagePipeline = Fresco.getImagePipeline(); |     ) { | ||||||
|         DataSource<CloseableReference<CloseableImage>> dataSource |         final ImageRequest request = ImageRequestBuilder | ||||||
|                 = imagePipeline.fetchDecodedImage(request, context); |             .newBuilderWithSource(Uri.parse(imageUrl)).build(); | ||||||
|  |         final ImagePipeline imagePipeline = Fresco.getImagePipeline(); | ||||||
|  |         final DataSource<CloseableReference<CloseableImage>> dataSource = imagePipeline | ||||||
|  |             .fetchDecodedImage(request, context); | ||||||
|  | 
 | ||||||
|         dataSource.subscribe(new BaseBitmapDataSubscriber() { |         dataSource.subscribe(new BaseBitmapDataSubscriber() { | ||||||
|             @Override |             @Override | ||||||
|             protected void onNewResultImpl(@Nullable Bitmap tempBitmap) { |             protected void onNewResultImpl(@Nullable final Bitmap tempBitmap) { | ||||||
|                 Bitmap bitmap = null; |                 Bitmap bitmap = null; | ||||||
|                 if (tempBitmap != null) { |                 if (tempBitmap != null) { | ||||||
|                     bitmap = Bitmap.createBitmap(tempBitmap.getWidth(), tempBitmap.getHeight(), Bitmap.Config.ARGB_8888); |                     bitmap = Bitmap.createBitmap( | ||||||
|                     Canvas canvas = new Canvas(bitmap); |                         tempBitmap.getWidth(), tempBitmap.getHeight(), Bitmap.Config.ARGB_8888 | ||||||
|  |                     ); | ||||||
|  |                     final Canvas canvas = new Canvas(bitmap); | ||||||
|                     canvas.drawBitmap(tempBitmap, 0f, 0f, new Paint()); |                     canvas.drawBitmap(tempBitmap, 0f, 0f, new Paint()); | ||||||
|                 } |                 } | ||||||
|                 views.setImageViewBitmap(R.id.appwidget_image, bitmap); |                 views.setImageViewBitmap(R.id.appwidget_image, bitmap); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Rohit Verma
						Rohit Verma