/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.gallery3d.filtershow.category; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.RectF; import com.android.gallery3d.filtershow.cache.RenderingRequest; import com.android.gallery3d.filtershow.cache.RenderingRequestCaller; import com.android.gallery3d.filtershow.filters.FilterRepresentation; import com.android.gallery3d.filtershow.imageshow.MasterImage; import com.android.gallery3d.filtershow.presets.ImagePreset; public class Action implements RenderingRequestCaller { private static final String LOGTAG = "Action"; private FilterRepresentation mRepresentation; private String mName; private Rect mImageFrame; private Bitmap mImage; private CategoryAdapter mAdapter; public static final int FULL_VIEW = 0; public static final int CROP_VIEW = 1; private int mType = CROP_VIEW; private Bitmap mPortraitImage; private Bitmap mOverlayBitmap; private Context mContext; public Action(Context context, FilterRepresentation representation, int type) { mContext = context; setRepresentation(representation); setType(type); } public Action(Context context, FilterRepresentation representation) { this(context, representation, CROP_VIEW); } public FilterRepresentation getRepresentation() { return mRepresentation; } public void setRepresentation(FilterRepresentation representation) { mRepresentation = representation; mName = representation.getName(); } public String getName() { return mName; } public void setName(String name) { mName = name; } public void setImageFrame(Rect imageFrame) { if (mImageFrame != null && mImageFrame.equals(imageFrame)) { return; } Bitmap bitmap = MasterImage.getImage().getLargeThumbnailBitmap(); if (bitmap != null) { mImageFrame = imageFrame; int w = mImageFrame.width(); int h = mImageFrame.height(); if (mType == CROP_VIEW) { w /= 2; } Bitmap bitmapCrop = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); drawCenteredImage(bitmap, bitmapCrop, true); postNewIconRenderRequest(bitmapCrop); } } public Bitmap getImage() { return mImage; } public void setImage(Bitmap image) { mImage = image; } public void setAdapter(CategoryAdapter adapter) { mAdapter = adapter; } public void setType(int type) { mType = type; } private void postNewIconRenderRequest(Bitmap bitmap) { if (bitmap != null && mRepresentation != null) { ImagePreset preset = new ImagePreset(); preset.addFilter(mRepresentation); RenderingRequest.post(bitmap, preset, RenderingRequest.ICON_RENDERING, this); } } private void drawCenteredImage(Bitmap source, Bitmap destination, boolean scale) { RectF image = new RectF(0, 0, source.getWidth(), source.getHeight()); int border = 0; if (!scale) { border = destination.getWidth() - destination.getHeight(); if (border < 0) { border = 0; } } RectF frame = new RectF(border, 0, destination.getWidth() - border, destination.getHeight()); Matrix m = new Matrix(); m.setRectToRect(frame, image, Matrix.ScaleToFit.CENTER); image.set(frame); m.mapRect(image); m.setRectToRect(image, frame, Matrix.ScaleToFit.FILL); Canvas canvas = new Canvas(destination); canvas.drawBitmap(source, m, new Paint()); } @Override public void available(RenderingRequest request) { mImage = request.getBitmap(); if (mImage == null) { return; } if (mRepresentation.getOverlayId() != 0 && mOverlayBitmap == null) { mOverlayBitmap = BitmapFactory.decodeResource( mContext.getResources(), mRepresentation.getOverlayId()); } if (mOverlayBitmap != null) { if (getRepresentation().getPriority() == FilterRepresentation.TYPE_BORDER) { Canvas canvas = new Canvas(mImage); canvas.drawBitmap(mOverlayBitmap, new Rect(0, 0, mOverlayBitmap.getWidth(), mOverlayBitmap.getHeight()), new Rect(0, 0, mImage.getWidth(), mImage.getHeight()), new Paint()); } else { Canvas canvas = new Canvas(mImage); canvas.drawARGB(128, 0, 0, 0); drawCenteredImage(mOverlayBitmap, mImage, false); } } if (mAdapter != null) { mAdapter.notifyDataSetChanged(); } } public void setPortraitImage(Bitmap portraitImage) { mPortraitImage = portraitImage; } public Bitmap getPortraitImage() { return mPortraitImage; } public Bitmap getOverlayBitmap() { return mOverlayBitmap; } public void setOverlayBitmap(Bitmap overlayBitmap) { mOverlayBitmap = overlayBitmap; } }