Java Code Examples for android.util.LruCache#get()

The following examples show how to use android.util.LruCache#get() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: FileBackend.java    From Pix-Art-Messenger with GNU General Public License v3.0 5 votes vote down vote up
public Bitmap getPreviewForUri(Attachment attachment, int size, boolean cacheOnly) {
    final String key = "attachment_" + attachment.getUuid().toString() + "_" + String.valueOf(size);
    final LruCache<String, Bitmap> cache = mXmppConnectionService.getBitmapCache();
    Bitmap bitmap = cache.get(key);
    if (bitmap != null || cacheOnly) {
        return bitmap;
    }
    DownloadableFile file = new DownloadableFile(attachment.getUri().getPath());
    if ("application/pdf".equals(attachment.getMime()) && Compatibility.runsTwentyOne()) {
        bitmap = cropCenterSquare(getPDFPreview(file, size), size);
    } else if (attachment.getMime() != null && attachment.getMime().startsWith("video/")) {
        bitmap = cropCenterSquareVideo(attachment.getUri(), size);
        drawOverlay(bitmap, R.drawable.play_video, 0.75f);
    } else {
        bitmap = cropCenterSquare(attachment.getUri(), size);
        if (bitmap != null && "image/gif".equals(attachment.getMime())) {
            Bitmap withGifOverlay = bitmap.copy(Bitmap.Config.ARGB_8888, true);
            drawOverlay(withGifOverlay, R.drawable.play_gif, 1.0f);
            bitmap.recycle();
            bitmap = withGifOverlay;
        }
    }
    if (bitmap != null) {
        cache.put(key, bitmap);
    }
    return bitmap;
}
 
Example 2
Source File: FileBackend.java    From Conversations with GNU General Public License v3.0 5 votes vote down vote up
public Bitmap getPreviewForUri(Attachment attachment, int size, boolean cacheOnly) {
    final String key = "attachment_" + attachment.getUuid().toString() + "_" + size;
    final LruCache<String, Bitmap> cache = mXmppConnectionService.getBitmapCache();
    Bitmap bitmap = cache.get(key);
    if (bitmap != null || cacheOnly) {
        return bitmap;
    }
    final String mime = attachment.getMime();
    if ("application/pdf".equals(mime) && Compatibility.runsTwentyOne()) {
        bitmap = cropCenterSquarePdf(attachment.getUri(), size);
        drawOverlay(bitmap, paintOverlayBlackPdf(bitmap) ? R.drawable.open_pdf_black : R.drawable.open_pdf_white, 0.75f);
    } else if (mime != null && mime.startsWith("video/")) {
        bitmap = cropCenterSquareVideo(attachment.getUri(), size);
        drawOverlay(bitmap, paintOverlayBlack(bitmap) ? R.drawable.play_video_black : R.drawable.play_video_white, 0.75f);
    } else {
        bitmap = cropCenterSquare(attachment.getUri(), size);
        if (bitmap != null && "image/gif".equals(mime)) {
            Bitmap withGifOverlay = bitmap.copy(Bitmap.Config.ARGB_8888, true);
            drawOverlay(withGifOverlay, paintOverlayBlack(withGifOverlay) ? R.drawable.play_gif_black : R.drawable.play_gif_white, 1.0f);
            bitmap.recycle();
            bitmap = withGifOverlay;
        }
    }
    if (bitmap != null) {
        cache.put(key, bitmap);
    }
    return bitmap;
}
 
Example 3
Source File: FileBackend.java    From Conversations with GNU General Public License v3.0 5 votes vote down vote up
public Bitmap getThumbnail(Message message, int size, boolean cacheOnly) throws IOException {
    final String uuid = message.getUuid();
    final LruCache<String, Bitmap> cache = mXmppConnectionService.getBitmapCache();
    Bitmap thumbnail = cache.get(uuid);
    if ((thumbnail == null) && (!cacheOnly)) {
        synchronized (THUMBNAIL_LOCK) {
            thumbnail = cache.get(uuid);
            if (thumbnail != null) {
                return thumbnail;
            }
            DownloadableFile file = getFile(message);
            final String mime = file.getMimeType();
            if ("application/pdf".equals(mime) && Compatibility.runsTwentyOne()) {
                thumbnail = getPdfDocumentPreview(file, size);
            } else if (mime.startsWith("video/")) {
                thumbnail = getVideoPreview(file, size);
            } else {
                Bitmap fullsize = getFullSizeImagePreview(file, size);
                if (fullsize == null) {
                    throw new FileNotFoundException();
                }
                thumbnail = resize(fullsize, size);
                thumbnail = rotate(thumbnail, getRotation(file));
                if (mime.equals("image/gif")) {
                    Bitmap withGifOverlay = thumbnail.copy(Bitmap.Config.ARGB_8888, true);
                    drawOverlay(withGifOverlay, paintOverlayBlack(withGifOverlay) ? R.drawable.play_gif_black : R.drawable.play_gif_white, 1.0f);
                    thumbnail.recycle();
                    thumbnail = withGifOverlay;
                }
            }
            cache.put(uuid, thumbnail);
        }
    }
    return thumbnail;
}
 
Example 4
Source File: SaveBitmapUtil.java    From OneText_For_Android with GNU Lesser General Public License v3.0 4 votes vote down vote up
/**
 * 对RecyclerView进行截图
 * https://gist.github.com/PrashamTrivedi/809d2541776c8c141d9a
 */
public static Bitmap shotRecyclerView(RecyclerView view) {
    RecyclerView.Adapter adapter = view.getAdapter();
    Bitmap bigBitmap = null;
    if (adapter != null) {
        int size = adapter.getItemCount();
        int height = 0;
        Paint paint = new Paint();
        int iHeight = 0;
        final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);

        // Use 1/8th of the available memory for this memory cache.
        final int cacheSize = maxMemory / 8;
        LruCache<String, Bitmap> bitmaCache = new LruCache<>(cacheSize);
        for (int i = 0; i < size; i++) {
            RecyclerView.ViewHolder holder = adapter.createViewHolder(view, adapter.getItemViewType(i));
            adapter.onBindViewHolder(holder, i);
            holder.itemView.measure(
                    View.MeasureSpec.makeMeasureSpec(view.getWidth(), View.MeasureSpec.EXACTLY),
                    View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
            holder.itemView.layout(0, 0, holder.itemView.getMeasuredWidth(),
                    holder.itemView.getMeasuredHeight());
            holder.itemView.setDrawingCacheEnabled(true);
            holder.itemView.buildDrawingCache();
            Bitmap drawingCache = holder.itemView.getDrawingCache();
            if (drawingCache != null) {

                bitmaCache.put(String.valueOf(i), drawingCache);
            }
            height += holder.itemView.getMeasuredHeight();
        }

        bigBitmap = Bitmap.createBitmap(view.getMeasuredWidth(), height, Bitmap.Config.ARGB_8888);
        Canvas bigCanvas = new Canvas(bigBitmap);
        Drawable lBackground = view.getBackground();
        if (lBackground instanceof ColorDrawable) {
            ColorDrawable lColorDrawable = (ColorDrawable) lBackground;
            int lColor = lColorDrawable.getColor();
            bigCanvas.drawColor(lColor);
        }

        for (int i = 0; i < size; i++) {
            Bitmap bitmap = bitmaCache.get(String.valueOf(i));
            bigCanvas.drawBitmap(bitmap, 0f, iHeight, paint);
            iHeight += bitmap.getHeight();
            bitmap.recycle();
        }
    }
    return bigBitmap;
}
 
Example 5
Source File: ScreenShotHelper.java    From OmniList with GNU Affero General Public License v3.0 4 votes vote down vote up
public static Bitmap shotRecyclerView(RecyclerView view) {
    RecyclerView.Adapter adapter = view.getAdapter();
    Bitmap bigBitmap = null;
    if (adapter != null) {
        int size = adapter.getItemCount();
        int height = 0;
        Paint paint = new Paint();
        int iHeight = 0;
        final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);

        // Use 1/8th of the available memory for this memory cache.
        final int cacheSize = maxMemory / 8;
        LruCache<String, Bitmap> bitmaCache = new LruCache<>(cacheSize);
        for (int i = 0; i < size; i++) {
            RecyclerView.ViewHolder holder = adapter.createViewHolder(view, adapter.getItemViewType(i));
            adapter.onBindViewHolder(holder, i);
            holder.itemView.measure(
                    View.MeasureSpec.makeMeasureSpec(view.getWidth(), View.MeasureSpec.EXACTLY),
                    View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
            holder.itemView.layout(0, 0, holder.itemView.getMeasuredWidth(),
                    holder.itemView.getMeasuredHeight());
            holder.itemView.setDrawingCacheEnabled(true);
            holder.itemView.buildDrawingCache();
            Bitmap drawingCache = holder.itemView.getDrawingCache();
            if (drawingCache != null) {
                bitmaCache.put(String.valueOf(i), drawingCache);
            }
            height += holder.itemView.getMeasuredHeight();
        }

        bigBitmap = Bitmap.createBitmap(view.getMeasuredWidth(), height, Config.ARGB_8888);
        Canvas bigCanvas = new Canvas(bigBitmap);
        Drawable lBackground = view.getBackground();
        if (lBackground instanceof ColorDrawable) {
            ColorDrawable lColorDrawable = (ColorDrawable) lBackground;
            int lColor = lColorDrawable.getColor();
            bigCanvas.drawColor(lColor);
        }

        for (int i = 0; i < size; i++) {
            Bitmap bitmap = bitmaCache.get(String.valueOf(i));
            bigCanvas.drawBitmap(bitmap, 0f, iHeight, paint);
            iHeight += bitmap.getHeight();
            bitmap.recycle();
        }
    }

    return bigBitmap;
}
 
Example 6
Source File: ScreenShotHelper.java    From OmniList with GNU Affero General Public License v3.0 4 votes vote down vote up
public static Bitmap shotRecyclerView(RecyclerView view, int itemHeight) {
    RecyclerView.Adapter adapter = view.getAdapter();
    Bitmap bigBitmap = null;
    if (adapter != null) {
        int size = adapter.getItemCount();
        int height = 0;
        Paint paint = new Paint();
        int iHeight = 0;
        final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);

        // Use 1/8th of the available memory for this memory cache.
        final int cacheSize = maxMemory / 8;
        LruCache<String, Bitmap> bitmaCache = new LruCache<>(cacheSize);
        for (int i = 0; i < size; i++) {
            RecyclerView.ViewHolder holder = adapter.createViewHolder(view, adapter.getItemViewType(i));
            adapter.onBindViewHolder(holder, i);
            holder.itemView.measure(
                    View.MeasureSpec.makeMeasureSpec(view.getWidth(), View.MeasureSpec.EXACTLY),
                    View.MeasureSpec.makeMeasureSpec(itemHeight, View.MeasureSpec.EXACTLY));
            holder.itemView.layout(0, 0, holder.itemView.getMeasuredWidth(),
                    holder.itemView.getMeasuredHeight());
            holder.itemView.setDrawingCacheEnabled(true);
            holder.itemView.buildDrawingCache();
            Bitmap drawingCache = holder.itemView.getDrawingCache();
            if (drawingCache != null) {
                bitmaCache.put(String.valueOf(i), drawingCache);
            }
            height += holder.itemView.getMeasuredHeight();
        }

        bigBitmap = Bitmap.createBitmap(view.getMeasuredWidth(), height, Config.ARGB_8888);
        Canvas bigCanvas = new Canvas(bigBitmap);
        Drawable lBackground = view.getBackground();
        if (lBackground instanceof ColorDrawable) {
            ColorDrawable lColorDrawable = (ColorDrawable) lBackground;
            int lColor = lColorDrawable.getColor();
            bigCanvas.drawColor(lColor);
        }

        for (int i = 0; i < size; i++) {
            Bitmap bitmap = bitmaCache.get(String.valueOf(i));
            bigCanvas.drawBitmap(bitmap, 0f, iHeight, paint);
            iHeight += bitmap.getHeight();
            bitmap.recycle();
        }
    }

    return bigBitmap;
}
 
Example 7
Source File: FileBackend.java    From Pix-Art-Messenger with GNU General Public License v3.0 4 votes vote down vote up
public Bitmap getThumbnail(Message message, int size, boolean cacheOnly) throws IOException {
    // The key for getting a cached thumbnail contains the UUID and the size
    // since this method is used for thumbnails of (bigger) normal image messages and (smaller) image message references.
    // If only the UUID were used, the first loaded thumbnail would be cached and the next loading
    // would get that thumbnail which would have the size of the first cached thumbnail
    // possibly leading to undesirable appearance of the displayed thumbnail.
    final String key = message.getUuid() + String.valueOf(size);
    final String uuid = message.getUuid();
    final LruCache<String, Bitmap> cache = mXmppConnectionService.getBitmapCache();
    Bitmap thumbnail = cache.get(key);
    if ((thumbnail == null) && (!cacheOnly)) {
        synchronized (THUMBNAIL_LOCK) {
            thumbnail = cache.get(key);
            if (thumbnail != null) {
                return thumbnail;
            }
            DownloadableFile file = getFile(message);
            final String mime = file.getMimeType();
            if ("application/pdf".equals(mime) && Compatibility.runsTwentyOne()) {
                thumbnail = getPDFPreview(file, size);
            } else if (mime.startsWith("video/")) {
                thumbnail = getVideoPreview(file, size);
            } else if (mime.startsWith("image/")) {
                Bitmap fullsize = getFullsizeImagePreview(file, size);
                if (fullsize == null) {
                    throw new FileNotFoundException();
                }
                thumbnail = resize(fullsize, size);
                thumbnail = rotate(thumbnail, getRotation(file));
                if (mime.equals("image/gif")) {
                    Bitmap withGifOverlay = thumbnail.copy(Bitmap.Config.ARGB_8888, true);
                    drawOverlay(withGifOverlay, R.drawable.play_gif, 1.0f);
                    thumbnail.recycle();
                    thumbnail = withGifOverlay;
                }
            }
            cache.put(key, thumbnail);
        }
    }
    return thumbnail;
}