Merge "Refactor CameraDataAdapter for other data types." into gb-ub-photos-bryce
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index 874a7c9..1a7d200 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -360,15 +360,7 @@
         ImageFilter.setActivityForMemoryToasts(this);
 
         Resources res = getResources();
-        // TODO: add a mechanism to set the resources in FiltersManagmer
-        ImageFilterBorder filterBorder = (ImageFilterBorder) FiltersManager.getManager().getFilter(ImageFilterBorder.class);
-        filterBorder.setResources(res);
-        filterBorder = (ImageFilterBorder) FiltersManager.getPreviewManager().getFilter(ImageFilterBorder.class);
-        filterBorder.setResources(res);
-        ImageFilterFx filterFx = (ImageFilterFx) FiltersManager.getManager().getFilter(ImageFilterFx.class);
-        filterFx.setResources(res);
-        filterFx = (ImageFilterFx) FiltersManager.getPreviewManager().getFilter(ImageFilterFx.class);
-        filterFx.setResources(res);
+        FiltersManager.setResources(res);
 
         ImageShow.setDefaultBackgroundColor(res.getColor(R.color.background_screen));
         // TODO: get those values from XML.
@@ -554,6 +546,7 @@
         ImageFilter.resetStatics();
         FiltersManager.getPreviewManager().freeRSFilterScripts();
         FiltersManager.getManager().freeRSFilterScripts();
+        FiltersManager.getHighresManager().freeRSFilterScripts();
         FiltersManager.reset();
         CachingPipeline.destroyRenderScriptContext();
         super.onDestroy();
diff --git a/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java b/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java
index a8c8d7b..e63323b 100644
--- a/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java
+++ b/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java
@@ -34,12 +34,13 @@
     private static final String LOGTAG = "FilteringPipeline";
     private boolean DEBUG = false;
 
-    private static long HIRES_DELAY = 100; // in ms
+    private static long HIRES_DELAY = 300; // in ms
 
     private volatile boolean mPipelineIsOn = false;
 
     private CachingPipeline mAccessoryPipeline = null;
     private CachingPipeline mPreviewPipeline = null;
+    private CachingPipeline mHighresPreviewPipeline = null;
 
     private HandlerThread mHandlerThread = null;
     private final static int NEW_PRESET = 0;
@@ -111,7 +112,11 @@
                 }
 
                 RenderingRequest request = (RenderingRequest) msg.obj;
-                mAccessoryPipeline.render(request);
+                if (msg.what == COMPUTE_HIGHRES_RENDERING_REQUEST) {
+                    mHighresPreviewPipeline.render(request);
+                } else {
+                    mAccessoryPipeline.render(request);
+                }
                 Message uimsg = mUIHandler.obtainMessage(NEW_RENDERING_REQUEST);
                 uimsg.obj = request;
                 mUIHandler.sendMessage(uimsg);
@@ -126,8 +131,12 @@
                 Process.THREAD_PRIORITY_FOREGROUND);
         mHandlerThread.start();
         mProcessingHandler = new Handler(mHandlerThread.getLooper(), this);
-        mAccessoryPipeline = new CachingPipeline(FiltersManager.getManager(), "Accessory");
-        mPreviewPipeline = new CachingPipeline(FiltersManager.getPreviewManager(), "Preview");
+        mAccessoryPipeline = new CachingPipeline(
+                FiltersManager.getManager(), "Accessory");
+        mPreviewPipeline = new CachingPipeline(
+                FiltersManager.getPreviewManager(), "Preview");
+        mHighresPreviewPipeline = new CachingPipeline(
+                FiltersManager.getHighresManager(), "Highres");
     }
 
     public synchronized static FilteringPipeline getPipeline() {
@@ -145,6 +154,7 @@
         Log.v(LOGTAG,"setOriginal, size " + bitmap.getWidth() + " x " + bitmap.getHeight());
         mAccessoryPipeline.setOriginal(bitmap);
         mPreviewPipeline.setOriginal(bitmap);
+        mHighresPreviewPipeline.setOriginal(bitmap);
     }
 
     public void postRenderingRequest(RenderingRequest request) {
@@ -194,16 +204,19 @@
     public void setPreviewScaleFactor(float previewScaleFactor) {
         mAccessoryPipeline.setPreviewScaleFactor(previewScaleFactor);
         mPreviewPipeline.setPreviewScaleFactor(previewScaleFactor);
+        mHighresPreviewPipeline.setPreviewScaleFactor(previewScaleFactor);
     }
 
     public void setHighResPreviewScaleFactor(float highResPreviewScaleFactor) {
         mAccessoryPipeline.setHighResPreviewScaleFactor(highResPreviewScaleFactor);
         mPreviewPipeline.setHighResPreviewScaleFactor(highResPreviewScaleFactor);
+        mHighresPreviewPipeline.setHighResPreviewScaleFactor(highResPreviewScaleFactor);
     }
 
     public static synchronized void reset() {
         sPipeline.mAccessoryPipeline.reset();
         sPipeline.mPreviewPipeline.reset();
+        sPipeline.mHighresPreviewPipeline.reset();
         sPipeline.mHandlerThread.quit();
         sPipeline = null;
     }
@@ -213,6 +226,7 @@
         if (mPipelineIsOn) {
             assert(mPreviewPipeline.isInitialized());
             assert(mAccessoryPipeline.isInitialized());
+            assert(mHighresPreviewPipeline.isInitialized());
             updatePreviewBuffer();
         }
     }
diff --git a/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java b/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
index 232de64..66ad106 100644
--- a/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
+++ b/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
@@ -15,6 +15,7 @@
  */
 package com.android.gallery3d.filtershow.filters;
 
+import android.content.res.Resources;
 import com.android.gallery3d.filtershow.presets.ImagePreset;
 
 import java.util.HashMap;
@@ -140,4 +141,10 @@
         representations.add(getRepresentation(ImageFilterDraw.class));
     }
 
+    public void setFilterResources(Resources resources) {
+        ImageFilterBorder filterBorder = (ImageFilterBorder) getFilter(ImageFilterBorder.class);
+        filterBorder.setResources(resources);
+        ImageFilterFx filterFx = (ImageFilterFx) getFilter(ImageFilterFx.class);
+        filterFx.setResources(resources);
+    }
 }
diff --git a/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java b/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java
index 4b6b1d3..9de9b7b 100644
--- a/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java
+++ b/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java
@@ -16,12 +16,15 @@
 
 package com.android.gallery3d.filtershow.filters;
 
+import android.content.res.Resources;
+
 import java.util.HashMap;
 import java.util.Vector;
 
 public class FiltersManager extends BaseFiltersManager {
     private static FiltersManager sInstance = null;
     private static FiltersManager sPreviewInstance = null;
+    private static FiltersManager sHighresInstance = null;
 
     public FiltersManager() {
         init();
@@ -41,9 +44,22 @@
         return sInstance;
     }
 
+    public static FiltersManager getHighresManager() {
+        if (sHighresInstance == null) {
+            sHighresInstance = new FiltersManager();
+        }
+        return sHighresInstance;
+    }
+
     public static void reset() {
         sInstance = null;
         sPreviewInstance = null;
+        sHighresInstance = null;
     }
 
+    public static void setResources(Resources resources) {
+        FiltersManager.getManager().setFilterResources(resources);
+        FiltersManager.getPreviewManager().setFilterResources(resources);
+        FiltersManager.getHighresManager().setFilterResources(resources);
+    }
 }