diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 692a87f..e2d4246 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -74,6 +74,8 @@
     <dimen name="effect_setting_type_text_left_padding_xlarge">26dp</dimen>
     <dimen name="onscreen_indicators_height_xlarge">36dp</dimen>
     <dimen name="onscreen_exposure_indicator_text_size_xlarge">18dp</dimen>
+    <dimen name="pie_progress_radius">25dp</dimen>
+    <dimen name="pie_progress_width">3dp</dimen>
     <dimen name="pie_radius_start">80dp</dimen>
     <dimen name="pie_radius_increment">48dp</dimen>
     <dimen name="pie_touch_slop">12dp</dimen>
diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java
index 524cd46..744802f 100644
--- a/src/com/android/camera/PhotoUI.java
+++ b/src/com/android/camera/PhotoUI.java
@@ -286,7 +286,6 @@
     public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
         synchronized (mSurfaceTextureLock) {
             Log.v(TAG, "SurfaceTexture ready.");
-            mPreviewCover.setVisibility(View.GONE);
             mSurfaceTexture = surface;
             mController.onPreviewUIReady();
             // Workaround for b/11168275, see b/10981460 for more details
@@ -314,7 +313,10 @@
 
     @Override
     public void onSurfaceTextureUpdated(SurfaceTexture surface) {
-        // Do nothing.
+        // Make sure preview cover is hidden if preview data is available.
+        if (mPreviewCover.getVisibility() != View.GONE) {
+            mPreviewCover.setVisibility(View.GONE);
+        }
     }
 
     public View getRootView() {
diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java
index 02b2567..8b01ba4 100644
--- a/src/com/android/camera/VideoUI.java
+++ b/src/com/android/camera/VideoUI.java
@@ -718,7 +718,6 @@
     @Override
     public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
         mSurfaceTexture = surface;
-        mPreviewCover.setVisibility(View.GONE);
         mController.onPreviewUIReady();
     }
 
@@ -736,6 +735,10 @@
 
     @Override
     public void onSurfaceTextureUpdated(SurfaceTexture surface) {
+        // Make sure preview cover is hidden if preview data is available.
+        if (mPreviewCover.getVisibility() != View.GONE) {
+            mPreviewCover.setVisibility(View.GONE);
+        }
     }
 
     // SurfaceHolder callbacks
diff --git a/src/com/android/camera/WideAnglePanoramaUI.java b/src/com/android/camera/WideAnglePanoramaUI.java
index 1546958..268c82b 100644
--- a/src/com/android/camera/WideAnglePanoramaUI.java
+++ b/src/com/android/camera/WideAnglePanoramaUI.java
@@ -226,7 +226,6 @@
     @Override
     public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i2) {
         mSurfaceTexture = surfaceTexture;
-        mPreviewCover.setVisibility(View.GONE);
         mController.onPreviewUIReady();
     }
 
@@ -245,6 +244,10 @@
 
     @Override
     public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
+        // Make sure preview cover is hidden if preview data is available.
+        if (mPreviewCover.getVisibility() != View.GONE) {
+            mPreviewCover.setVisibility(View.GONE);
+        }
     }
 
     private void hideDirectionIndicators() {
diff --git a/src/com/android/camera/ui/PieRenderer.java b/src/com/android/camera/ui/PieRenderer.java
index 3967f79..58bee94 100644
--- a/src/com/android/camera/ui/PieRenderer.java
+++ b/src/com/android/camera/ui/PieRenderer.java
@@ -42,10 +42,13 @@
 import com.android.camera.drawable.TextDrawable;
 import com.android.camera2.R;
 
+/**
+ * An overlay renderer that is used to display focus state and progress state.
+ */
 public class PieRenderer extends OverlayRenderer
         implements FocusIndicator {
 
-    private static final String TAG = "CAM Pie";
+    private static final String TAG = "PieRenderer";
 
     // Sometimes continuous autofocus starts and stops several times quickly.
     // These states are used to make sure the animation is run for at least some
@@ -143,7 +146,7 @@
     private int mAngleZone;
     private float mCenterAngle;
 
-
+    private ProgressRenderer mProgressRenderer;
 
     private Handler mHandler = new Handler() {
         public void handleMessage(Message msg) {
@@ -226,6 +229,7 @@
         mLabel.setDropShadow(true);
         mDeadZone = res.getDimensionPixelSize(R.dimen.pie_deadzone_width);
         mAngleZone = res.getDimensionPixelSize(R.dimen.pie_anglezone_width);
+        mProgressRenderer = new ProgressRenderer(ctx);
     }
 
     private PieItem getRoot() {
@@ -308,6 +312,10 @@
         return mState == STATE_PIE && isVisible();
     }
 
+    public void setProgress(int percent) {
+        mProgressRenderer.setProgress(percent);
+    }
+
     private void fadeIn() {
         mFadeIn = new ValueAnimator();
         mFadeIn.setFloatValues(0f, 1f);
@@ -517,6 +525,8 @@
 
     @Override
     public void onDraw(Canvas canvas) {
+        mProgressRenderer.onDraw(canvas, mFocusX, mFocusY);
+
         float alpha = 1;
         if (mXFade != null) {
             alpha = (Float) mXFade.getAnimatedValue();
@@ -911,17 +921,6 @@
         setCircle(mFocusX, mFocusY);
     }
 
-    public void alignFocus(int x, int y) {
-        mOverlay.removeCallbacks(mDisappear);
-        mAnimation.cancel();
-        mAnimation.reset();
-        mFocusX = x;
-        mFocusY = y;
-        mDialAngle = DIAL_HORIZONTAL;
-        setCircle(x, y);
-        mFocused = false;
-    }
-
     public int getSize() {
         return 2 * mCircleSize;
     }
diff --git a/src/com/android/camera/ui/ProgressRenderer.java b/src/com/android/camera/ui/ProgressRenderer.java
new file mode 100644
index 0000000..1783c70
--- /dev/null
+++ b/src/com/android/camera/ui/ProgressRenderer.java
@@ -0,0 +1,86 @@
+/*
+ * 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.camera.ui;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.RectF;
+
+import com.android.camera2.R;
+
+/**
+ * Renders a circular progress bar on the screen.
+ */
+public class ProgressRenderer {
+    private final int mProgressRadius;
+    private final Paint mProgressBasePaint;
+    private final Paint mProgressPaint;
+
+    private RectF mArcBounds = new RectF(0, 0, 1, 1);
+    private int mProgressAngleDegrees = 270;
+    private boolean mVisible = false;
+
+    public ProgressRenderer(Context context) {
+        mProgressRadius = context.getResources().getDimensionPixelSize(R.dimen.pie_progress_radius);
+        int pieProgressWidth = context.getResources().getDimensionPixelSize(
+                R.dimen.pie_progress_width);
+        mProgressBasePaint = createProgressPaint(pieProgressWidth, 0.2f);
+        mProgressPaint = createProgressPaint(pieProgressWidth, 1.0f);
+    }
+
+    private static Paint createProgressPaint(int width, float alpha) {
+        Paint paint = new Paint();
+        paint.setAntiAlias(true);
+        // 20% alpha.
+        paint.setColor(Color.argb((int) (alpha * 255), 255, 255, 255));
+        paint.setStrokeWidth(width);
+        paint.setStyle(Paint.Style.STROKE);
+        return paint;
+    }
+
+    /**
+     * Shows a progress indicator. If the progress is '100', the progress
+     * indicator will be hidden.
+     *
+     * @param percent the progress in percent (0-100).
+     */
+    public void setProgress(int percent) {
+        // Clamp the value.
+        percent = Math.min(100, Math.max(percent, 0));
+        mProgressAngleDegrees = (int) ((360f / 100) * percent);
+
+        // Hide when processing reached 100 percent.
+        mVisible = percent < 100;
+    }
+
+    /**
+     * Draw the current progress (if < 100%) centered at the given location.
+     */
+    public void onDraw(Canvas canvas, int centerX, int centerY) {
+        if (!mVisible) {
+            return;
+        }
+        mArcBounds = new RectF(centerX - mProgressRadius, centerY - mProgressRadius, centerX
+                + mProgressRadius,
+                centerY + mProgressRadius);
+
+        canvas.drawCircle(centerX, centerY, mProgressRadius, mProgressBasePaint);
+        canvas.drawArc(mArcBounds, -90, mProgressAngleDegrees, false, mProgressPaint);
+    }
+}
