Home | History | Annotate | Download | only in category
      1 /*
      2  * Copyright (C) 2013 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.gallery3d.filtershow.category;
     18 
     19 import android.content.Context;
     20 import android.graphics.Bitmap;
     21 import android.graphics.BitmapFactory;
     22 import android.graphics.Canvas;
     23 import android.graphics.Matrix;
     24 import android.graphics.Paint;
     25 import android.graphics.Rect;
     26 import android.graphics.RectF;
     27 import com.android.gallery3d.filtershow.cache.RenderingRequest;
     28 import com.android.gallery3d.filtershow.cache.RenderingRequestCaller;
     29 import com.android.gallery3d.filtershow.filters.FilterRepresentation;
     30 import com.android.gallery3d.filtershow.imageshow.MasterImage;
     31 import com.android.gallery3d.filtershow.presets.ImagePreset;
     32 
     33 public class Action implements RenderingRequestCaller {
     34 
     35     private static final String LOGTAG = "Action";
     36     private FilterRepresentation mRepresentation;
     37     private String mName;
     38     private Rect mImageFrame;
     39     private Bitmap mImage;
     40     private CategoryAdapter mAdapter;
     41     public static final int FULL_VIEW = 0;
     42     public static final int CROP_VIEW = 1;
     43     private int mType = CROP_VIEW;
     44     private Bitmap mPortraitImage;
     45     private Bitmap mOverlayBitmap;
     46     private Context mContext;
     47 
     48     public Action(Context context, FilterRepresentation representation, int type) {
     49         mContext = context;
     50         setRepresentation(representation);
     51         setType(type);
     52     }
     53 
     54     public Action(Context context, FilterRepresentation representation) {
     55         this(context, representation, CROP_VIEW);
     56     }
     57 
     58     public FilterRepresentation getRepresentation() {
     59         return mRepresentation;
     60     }
     61 
     62     public void setRepresentation(FilterRepresentation representation) {
     63         mRepresentation = representation;
     64         mName = representation.getName();
     65     }
     66 
     67     public String getName() {
     68         return mName;
     69     }
     70 
     71     public void setName(String name) {
     72         mName = name;
     73     }
     74 
     75     public void setImageFrame(Rect imageFrame) {
     76         if (mImageFrame != null && mImageFrame.equals(imageFrame)) {
     77             return;
     78         }
     79         Bitmap bitmap = MasterImage.getImage().getLargeThumbnailBitmap();
     80         if (bitmap != null) {
     81             mImageFrame = imageFrame;
     82             int w = mImageFrame.width();
     83             int h = mImageFrame.height();
     84             if (mType == CROP_VIEW) {
     85                 w /= 2;
     86             }
     87             Bitmap bitmapCrop = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
     88             drawCenteredImage(bitmap, bitmapCrop, true);
     89 
     90             postNewIconRenderRequest(bitmapCrop);
     91         }
     92     }
     93 
     94     public Bitmap getImage() {
     95         return mImage;
     96     }
     97 
     98     public void setImage(Bitmap image) {
     99         mImage = image;
    100     }
    101 
    102     public void setAdapter(CategoryAdapter adapter) {
    103         mAdapter = adapter;
    104     }
    105 
    106     public void setType(int type) {
    107         mType = type;
    108     }
    109 
    110     private void postNewIconRenderRequest(Bitmap bitmap) {
    111         if (bitmap != null && mRepresentation != null) {
    112             ImagePreset preset = new ImagePreset();
    113             preset.addFilter(mRepresentation);
    114             RenderingRequest.post(bitmap,
    115                     preset, RenderingRequest.ICON_RENDERING, this);
    116         }
    117     }
    118 
    119     private void drawCenteredImage(Bitmap source, Bitmap destination, boolean scale) {
    120         RectF image = new RectF(0, 0, source.getWidth(), source.getHeight());
    121         int border = 0;
    122         if (!scale) {
    123             border = destination.getWidth() - destination.getHeight();
    124             if (border < 0) {
    125                 border = 0;
    126             }
    127         }
    128         RectF frame = new RectF(border, 0,
    129                 destination.getWidth() - border,
    130                 destination.getHeight());
    131         Matrix m = new Matrix();
    132         m.setRectToRect(frame, image, Matrix.ScaleToFit.CENTER);
    133         image.set(frame);
    134         m.mapRect(image);
    135         m.setRectToRect(image, frame, Matrix.ScaleToFit.FILL);
    136         Canvas canvas = new Canvas(destination);
    137         canvas.drawBitmap(source, m, new Paint());
    138     }
    139 
    140     @Override
    141     public void available(RenderingRequest request) {
    142         mImage = request.getBitmap();
    143         if (mImage == null) {
    144             return;
    145         }
    146         if (mRepresentation.getOverlayId() != 0 && mOverlayBitmap == null) {
    147             mOverlayBitmap = BitmapFactory.decodeResource(
    148                     mContext.getResources(),
    149                     mRepresentation.getOverlayId());
    150         }
    151         if (mOverlayBitmap != null) {
    152             if (getRepresentation().getPriority() == FilterRepresentation.TYPE_BORDER) {
    153                 Canvas canvas = new Canvas(mImage);
    154                 canvas.drawBitmap(mOverlayBitmap, new Rect(0, 0, mOverlayBitmap.getWidth(), mOverlayBitmap.getHeight()),
    155                         new Rect(0, 0, mImage.getWidth(), mImage.getHeight()), new Paint());
    156             } else {
    157                 Canvas canvas = new Canvas(mImage);
    158                 canvas.drawARGB(128, 0, 0, 0);
    159                 drawCenteredImage(mOverlayBitmap, mImage, false);
    160             }
    161         }
    162         if (mAdapter != null) {
    163             mAdapter.notifyDataSetChanged();
    164         }
    165     }
    166 
    167     public void setPortraitImage(Bitmap portraitImage) {
    168         mPortraitImage = portraitImage;
    169     }
    170 
    171     public Bitmap getPortraitImage() {
    172         return mPortraitImage;
    173     }
    174 
    175     public Bitmap getOverlayBitmap() {
    176         return mOverlayBitmap;
    177     }
    178 
    179     public void setOverlayBitmap(Bitmap overlayBitmap) {
    180         mOverlayBitmap = overlayBitmap;
    181     }
    182 }
    183