| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.photo_picker; | 5 package org.chromium.chrome.browser.photo_picker; |
| 6 | 6 |
| 7 import android.content.res.Resources; |
| 7 import android.graphics.Bitmap; | 8 import android.graphics.Bitmap; |
| 9 import android.os.AsyncTask; |
| 8 import android.support.v7.widget.RecyclerView.ViewHolder; | 10 import android.support.v7.widget.RecyclerView.ViewHolder; |
| 9 import android.text.TextUtils; | 11 import android.text.TextUtils; |
| 10 | 12 |
| 13 import org.chromium.chrome.R; |
| 14 |
| 11 import java.util.List; | 15 import java.util.List; |
| 12 | 16 |
| 13 /** | 17 /** |
| 14 * Holds on to a {@link PickerBitmapView} that displays information about a pick
er bitmap. | 18 * Holds on to a {@link PickerBitmapView} that displays information about a pick
er bitmap. |
| 15 */ | 19 */ |
| 16 public class PickerBitmapViewHolder | 20 public class PickerBitmapViewHolder |
| 17 extends ViewHolder implements DecoderServiceHost.ImageDecodedCallback { | 21 extends ViewHolder implements DecoderServiceHost.ImageDecodedCallback { |
| 18 // Our parent category. | 22 // Our parent category. |
| 19 private PickerCategoryView mCategoryView; | 23 private PickerCategoryView mCategoryView; |
| 20 | 24 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 34 } | 38 } |
| 35 | 39 |
| 36 // DecoderServiceHost.ImageDecodedCallback | 40 // DecoderServiceHost.ImageDecodedCallback |
| 37 | 41 |
| 38 @Override | 42 @Override |
| 39 public void imageDecodedCallback(String filePath, Bitmap bitmap) { | 43 public void imageDecodedCallback(String filePath, Bitmap bitmap) { |
| 40 if (bitmap == null || bitmap.getWidth() == 0 || bitmap.getHeight() == 0)
{ | 44 if (bitmap == null || bitmap.getWidth() == 0 || bitmap.getHeight() == 0)
{ |
| 41 return; | 45 return; |
| 42 } | 46 } |
| 43 | 47 |
| 48 if (mCategoryView.getHighResBitmaps().get(filePath) == null) { |
| 49 mCategoryView.getHighResBitmaps().put(filePath, bitmap); |
| 50 } |
| 51 |
| 52 if (mCategoryView.getLowResBitmaps().get(filePath) == null) { |
| 53 Resources resources = mItemView.getContext().getResources(); |
| 54 new BitmapScalerTask(mCategoryView.getLowResBitmaps(), filePath, |
| 55 resources.getDimensionPixelSize(R.dimen.photo_picker_grainy_
thumbnail_size)) |
| 56 .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, bitmap); |
| 57 } |
| 58 |
| 44 if (!TextUtils.equals(mBitmapDetails.getFilePath(), filePath)) { | 59 if (!TextUtils.equals(mBitmapDetails.getFilePath(), filePath)) { |
| 45 return; | 60 return; |
| 46 } | 61 } |
| 47 | 62 |
| 48 if (mItemView.setThumbnailBitmap(bitmap)) { | 63 if (mItemView.setThumbnailBitmap(bitmap)) { |
| 49 mItemView.fadeInThumbnail(); | 64 mItemView.fadeInThumbnail(); |
| 50 } | 65 } |
| 51 } | 66 } |
| 52 | 67 |
| 53 /** | 68 /** |
| 54 * Display a single item from |position| in the PickerCategoryView. | 69 * Display a single item from |position| in the PickerCategoryView. |
| 55 * @param categoryView The PickerCategoryView to use to fetch the image. | 70 * @param categoryView The PickerCategoryView to use to fetch the image. |
| 56 * @param position The position of the item to fetch. | 71 * @param position The position of the item to fetch. |
| 57 */ | 72 */ |
| 58 public void displayItem(PickerCategoryView categoryView, int position) { | 73 public void displayItem(PickerCategoryView categoryView, int position) { |
| 59 mCategoryView = categoryView; | 74 mCategoryView = categoryView; |
| 60 | 75 |
| 61 List<PickerBitmap> pickerBitmaps = mCategoryView.getPickerBitmaps(); | 76 List<PickerBitmap> pickerBitmaps = mCategoryView.getPickerBitmaps(); |
| 62 mBitmapDetails = pickerBitmaps.get(position); | 77 mBitmapDetails = pickerBitmaps.get(position); |
| 63 | 78 |
| 64 if (mBitmapDetails.type() == PickerBitmap.CAMERA | 79 if (mBitmapDetails.type() == PickerBitmap.CAMERA |
| 65 || mBitmapDetails.type() == PickerBitmap.GALLERY) { | 80 || mBitmapDetails.type() == PickerBitmap.GALLERY) { |
| 66 mItemView.initialize(mBitmapDetails, null, false); | 81 mItemView.initialize(mBitmapDetails, null, false); |
| 67 return; | 82 return; |
| 68 } | 83 } |
| 69 | 84 |
| 70 // TODO(finnur): Use cached image, if available. | 85 String filePath = mBitmapDetails.getFilePath(); |
| 71 | 86 Bitmap original = mCategoryView.getHighResBitmaps().get(filePath); |
| 72 mItemView.initialize(mBitmapDetails, null, true); | 87 if (original != null) { |
| 88 mItemView.initialize(mBitmapDetails, original, false); |
| 89 return; |
| 90 } |
| 73 | 91 |
| 74 int size = mCategoryView.getImageSize(); | 92 int size = mCategoryView.getImageSize(); |
| 75 mCategoryView.getDecoderServiceHost().decodeImage(mBitmapDetails.getFile
Path(), size, this); | 93 Bitmap placeholder = mCategoryView.getLowResBitmaps().get(filePath); |
| 94 if (placeholder != null) { |
| 95 // For performance stats see http://crbug.com/719919. |
| 96 placeholder = BitmapUtils.scale(placeholder, size, false); |
| 97 mItemView.initialize(mBitmapDetails, placeholder, true); |
| 98 } else { |
| 99 mItemView.initialize(mBitmapDetails, null, true); |
| 100 } |
| 101 |
| 102 mCategoryView.getDecoderServiceHost().decodeImage(filePath, size, this); |
| 76 } | 103 } |
| 77 | 104 |
| 78 /** | 105 /** |
| 79 * Returns the file path of the current request. | 106 * Returns the file path of the current request. |
| 80 */ | 107 */ |
| 81 public String getFilePath() { | 108 public String getFilePath() { |
| 82 return mBitmapDetails == null ? null : mBitmapDetails.getFilePath(); | 109 return mBitmapDetails == null ? null : mBitmapDetails.getFilePath(); |
| 83 } | 110 } |
| 84 } | 111 } |
| OLD | NEW |