public static Single<Bitmap> combineBitmaps (final Context context, final List<String> urls) { return Single.create(e -> { final ArrayList<Bitmap> bitmaps = new ArrayList<>(); ArrayList<Single<Bitmap>> singles = new ArrayList<>(); for(String url : urls) { if(singles.size() >= 4) { break; } singles.add(bitmapForURL(context, url).onErrorResumeNext(throwable -> null)); } Single.merge(singles).observeOn(AndroidSchedulers.mainThread()) .doOnComplete(() -> { int size = context.getResources().getDimensionPixelSize(R.dimen.chat_sdk_chat_action_barcircle_image_view_size); Bitmap bitmap = ImageUtils.getMixImagesBitmap(size, size, bitmaps); if(bitmap == null) { e.onError(new Throwable(context.getString(R.string.thread_image_could_not_be_created))); } else { e.onSuccess(bitmap); } }) .subscribe(bitmaps::add, throwable -> { e.onError(throwable); ChatSDK.logError(throwable); }); }); }
public void createMessageNotification(final Context context, Intent resultIntent, String userEntityID, String title, String message) { int pushIcon = ChatSDK.config().pushNotificationImageDefaultResourceId; if(pushIcon <= 0) { pushIcon = R.drawable.icn_72_push_mask; } final int smallPushIcon = pushIcon; final Bitmap largePushIcon = BitmapFactory.decodeResource(context.getResources(), smallPushIcon); Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); if (userEntityID != null && !userEntityID.isEmpty()) { User user = StorageManager.shared().fetchUserWithEntityID(userEntityID); if (user != null) { ImageBuilder.bitmapForURL(context, user.getAvatarURL()).subscribe((bitmap, throwable) -> { if (throwable != null) { ChatSDK.logError(throwable); } if (bitmap == null) { bitmap = largePushIcon; } createAlertNotification(context, resultIntent, title, message, bitmap, smallPushIcon, alarmSound, -1); }); } else { createAlertNotification(context, resultIntent, title, message, largePushIcon, smallPushIcon, alarmSound, -1); } } }
Disposable d = ImageBuilder.bitmapForURL(activity, url) .observeOn(AndroidSchedulers.mainThread()) .doFinally(() -> progressBar.setVisibility(View.INVISIBLE))