| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package org.chromium.ui.resources.dynamics; |
| |
| import android.graphics.Bitmap; |
| import android.graphics.Rect; |
| |
| import org.chromium.ui.resources.ResourceFactory; |
| import org.chromium.ui.resources.statics.NinePatchData; |
| |
| /** |
| * A basic implementation of {@link DynamicResource} to handle updatable bitmaps. |
| */ |
| public class BitmapDynamicResource implements DynamicResource { |
| private static final Rect EMPTY_RECT = new Rect(); |
| |
| private final int mResId; |
| private Bitmap mBitmap; |
| private final Rect mSize = new Rect(); |
| private boolean mIsDirty = true; |
| |
| public BitmapDynamicResource(int resourceId) { |
| mResId = resourceId; |
| } |
| |
| /** |
| * @return A unique id for this resource. |
| */ |
| public int getResId() { |
| return mResId; |
| } |
| |
| /** |
| * @param bitmap A bitmap to update this resource. |
| */ |
| public void setBitmap(Bitmap bitmap) { |
| // Not updating bitmap is still bad, but better than a crash. We will still crash if there |
| // is no bitmap to start with. See http://crbug.com/471234 for more. |
| if (bitmap == null) return; |
| mIsDirty = true; |
| if (mBitmap != null) mBitmap.recycle(); |
| mBitmap = bitmap; |
| mSize.set(0, 0, mBitmap.getWidth(), mBitmap.getHeight()); |
| } |
| |
| @Override |
| public Bitmap getBitmap() { |
| mIsDirty = false; |
| return mBitmap; |
| } |
| |
| @Override |
| public Rect getBitmapSize() { |
| return mSize; |
| } |
| |
| @Override |
| public long createNativeResource() { |
| return ResourceFactory.createBitmapResource(null); |
| } |
| |
| @Override |
| public NinePatchData getNinePatchData() { |
| return null; |
| } |
| |
| @Override |
| public boolean isDirty() { |
| return mIsDirty; |
| } |
| } |