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.pipeline;
18 
19 import android.content.Context;
20 import android.graphics.Bitmap;
21 import android.graphics.Rect;
22 import com.android.gallery3d.app.Log;
23 import com.android.gallery3d.filtershow.FilterShowActivity;
24 import com.android.gallery3d.filtershow.cache.BitmapCache;
25 import com.android.gallery3d.filtershow.filters.FiltersManager;
26 import com.android.gallery3d.filtershow.imageshow.PrimaryImage;
27 
28 public class RenderingRequest {
29     private static final String LOGTAG = "RenderingRequest";
30     private boolean mIsDirect = false;
31     private Bitmap mBitmap = null;
32     private ImagePreset mImagePreset = null;
33     private ImagePreset mOriginalImagePreset = null;
34     private RenderingRequestCaller mCaller = null;
35     private float mScaleFactor = 1.0f;
36     private Rect mBounds = null;
37     private Rect mDestination = null;
38     private Rect mIconBounds = null;
39     private int mType = FULL_RENDERING;
40     public static final int FULL_RENDERING = 0;
41     public static final int FILTERS_RENDERING = 1;
42     public static final int GEOMETRY_RENDERING = 2;
43     public static final int ICON_RENDERING = 3;
44     public static final int PARTIAL_RENDERING = 4;
45     public static final int HIGHRES_RENDERING = 5;
46     public static final int STYLE_ICON_RENDERING = 6;
47 
48     private static final Bitmap.Config mConfig = Bitmap.Config.ARGB_8888;
49 
post(Context context, Bitmap source, ImagePreset preset, int type, RenderingRequestCaller caller)50     public static void post(Context context, Bitmap source, ImagePreset preset,
51                             int type, RenderingRequestCaller caller) {
52         RenderingRequest.post(context, source, preset, type, caller, null, null);
53     }
54 
post(Context context, Bitmap source, ImagePreset preset, int type, RenderingRequestCaller caller, Rect bounds, Rect destination)55     public static void post(Context context, Bitmap source, ImagePreset preset, int type,
56                             RenderingRequestCaller caller, Rect bounds, Rect destination) {
57         if (((type != PARTIAL_RENDERING && type != HIGHRES_RENDERING
58                 && type != GEOMETRY_RENDERING && type != FILTERS_RENDERING) && source == null)
59                 || preset == null || caller == null) {
60             Log.v(LOGTAG, "something null: source: " + source
61                     + " or preset: " + preset + " or caller: " + caller);
62             return;
63         }
64         RenderingRequest request = new RenderingRequest();
65         Bitmap bitmap = null;
66         if (type == FULL_RENDERING
67                 || type == ICON_RENDERING
68                 || type == STYLE_ICON_RENDERING) {
69             CachingPipeline pipeline = new CachingPipeline(
70                     FiltersManager.getManager(), "Icon");
71             bitmap = pipeline.renderGeometryIcon(source, preset);
72         } else if (type != PARTIAL_RENDERING && type != HIGHRES_RENDERING
73                 && type != GEOMETRY_RENDERING && type != FILTERS_RENDERING) {
74             bitmap = PrimaryImage.getImage().getBitmapCache().getBitmap(
75                     source.getWidth(), source.getHeight(), BitmapCache.RENDERING_REQUEST);
76         }
77 
78         request.setBitmap(bitmap);
79         ImagePreset passedPreset = new ImagePreset(preset);
80         request.setOriginalImagePreset(preset);
81         request.setScaleFactor(PrimaryImage.getImage().getScaleFactor());
82 
83         if (type == PARTIAL_RENDERING) {
84             request.setBounds(bounds);
85             request.setDestination(destination);
86             passedPreset.setPartialRendering(true, bounds);
87         }
88 
89         request.setImagePreset(passedPreset);
90         request.setType(type);
91         request.setCaller(caller);
92         request.post(context);
93     }
94 
postIconRequest(Context context, int w, int h, ImagePreset preset, RenderingRequestCaller caller)95     public static void postIconRequest(Context context, int w, int h,
96                                        ImagePreset preset,
97                                        RenderingRequestCaller caller) {
98         if (preset == null || caller == null) {
99             Log.v(LOGTAG, "something null, preset: "
100                     + preset + " or caller: " + caller);
101             return;
102         }
103         RenderingRequest request = new RenderingRequest();
104         ImagePreset passedPreset = new ImagePreset(preset);
105         request.setOriginalImagePreset(preset);
106         request.setScaleFactor(PrimaryImage.getImage().getScaleFactor());
107         request.setImagePreset(passedPreset);
108         request.setType(RenderingRequest.ICON_RENDERING);
109         request.setCaller(caller);
110         request.setIconBounds(new Rect(0, 0, w, h));
111         request.post(context);
112     }
113 
post(Context context)114     public void post(Context context) {
115         if (context instanceof FilterShowActivity) {
116             FilterShowActivity activity = (FilterShowActivity) context;
117             ProcessingService service = activity.getProcessingService();
118             service.postRenderingRequest(this);
119         }
120     }
121 
markAvailable()122     public void markAvailable() {
123         if (mBitmap == null || mImagePreset == null
124                 || mCaller == null) {
125             return;
126         }
127         mCaller.available(this);
128     }
129 
isDirect()130     public boolean isDirect() {
131         return mIsDirect;
132     }
133 
setDirect(boolean isDirect)134     public void setDirect(boolean isDirect) {
135         mIsDirect = isDirect;
136     }
137 
getBitmap()138     public Bitmap getBitmap() {
139         return mBitmap;
140     }
141 
setBitmap(Bitmap bitmap)142     public void setBitmap(Bitmap bitmap) {
143         mBitmap = bitmap;
144     }
145 
getImagePreset()146     public ImagePreset getImagePreset() {
147         return mImagePreset;
148     }
149 
setImagePreset(ImagePreset imagePreset)150     public void setImagePreset(ImagePreset imagePreset) {
151         mImagePreset = imagePreset;
152     }
153 
getType()154     public int getType() {
155         return mType;
156     }
157 
setType(int type)158     public void setType(int type) {
159         mType = type;
160     }
161 
setCaller(RenderingRequestCaller caller)162     public void setCaller(RenderingRequestCaller caller) {
163         mCaller = caller;
164     }
165 
getBounds()166     public Rect getBounds() {
167         return mBounds;
168     }
169 
setBounds(Rect bounds)170     public void setBounds(Rect bounds) {
171         mBounds = bounds;
172     }
173 
setScaleFactor(float scaleFactor)174     public void setScaleFactor(float scaleFactor) {
175         mScaleFactor = scaleFactor;
176     }
177 
getScaleFactor()178     public float getScaleFactor() {
179         return mScaleFactor;
180     }
181 
getDestination()182     public Rect getDestination() {
183         return mDestination;
184     }
185 
setDestination(Rect destination)186     public void setDestination(Rect destination) {
187         mDestination = destination;
188     }
189 
setIconBounds(Rect bounds)190     public void setIconBounds(Rect bounds) {
191         mIconBounds = bounds;
192     }
193 
getIconBounds()194     public Rect getIconBounds() {
195         return mIconBounds;
196     }
197 
getOriginalImagePreset()198     public ImagePreset getOriginalImagePreset() {
199         return mOriginalImagePreset;
200     }
201 
setOriginalImagePreset(ImagePreset originalImagePreset)202     public void setOriginalImagePreset(ImagePreset originalImagePreset) {
203         mOriginalImagePreset = originalImagePreset;
204     }
205 }
206