OSDN Git Service

Move panorama stitch progress outside the image.
authorGeorge Mount <mount@google.com>
Wed, 10 Oct 2012 00:50:33 +0000 (17:50 -0700)
committerGeorge Mount <mount@google.com>
Wed, 10 Oct 2012 17:31:23 +0000 (10:31 -0700)
 Bug 7302513

Change-Id: Ie6505c8ed2125b878e54a93c4b8c0f51d80a1385

src/com/android/gallery3d/app/PhotoPage.java
src/com/android/gallery3d/app/PhotoPageProgressBar.java [new file with mode: 0644]

index 7f8414c..6f2a1e0 100644 (file)
@@ -91,6 +91,7 @@ public class PhotoPage extends ActivityState implements
     private static final int MSG_REFRESH_BOTTOM_CONTROLS = 8;
     private static final int MSG_ON_CAMERA_CENTER = 9;
     private static final int MSG_ON_PICTURE_CENTER = 10;
+    private static final int MSG_REFRESH_IMAGE = 11;
 
     private static final int HIDE_BARS_TIMEOUT = 3500;
     private static final int UNFREEZE_GLROOT_TIMEOUT = 250;
@@ -144,6 +145,7 @@ public class PhotoPage extends ActivityState implements
     private boolean mIsMenuVisible;
     private boolean mHaveImageEditor;
     private PhotoPageBottomControls mBottomControls;
+    private PhotoPageProgressBar mProgressBar;
     private MediaItem mCurrentPhoto = null;
     private MenuExecutor mMenuExecutor;
     private boolean mIsActive;
@@ -178,6 +180,7 @@ public class PhotoPage extends ActivityState implements
 
     private final MyMenuVisibilityListener mMenuVisibilityListener =
             new MyMenuVisibilityListener();
+    private UpdateProgressListener mProgressListener;
 
     public static interface Model extends PhotoView.Model {
         public void resume();
@@ -201,6 +204,33 @@ public class PhotoPage extends ActivityState implements
         }
     }
 
+    private class UpdateProgressListener implements StitchingChangeListener {
+
+        @Override
+        public void onStitchingResult(Path path, Uri uri) {
+            sendUpdate(path);
+        }
+
+        @Override
+        public void onStitchingQueued(Path path) {
+            sendUpdate(path);
+        }
+
+        @Override
+        public void onStitchingProgress(Path path, final int progress) {
+            sendUpdate(path);
+        }
+
+        private void sendUpdate(Path path) {
+            boolean isCurrentPhoto = mCurrentPhoto != null
+                    && mCurrentPhoto.getPath().toString().equals(path.toString());
+            if (isCurrentPhoto) {
+                mHandler.sendEmptyMessage(MSG_REFRESH_IMAGE);
+
+            }
+        }
+    };
+
     private final FloatAnimation mBackgroundFade = new BackgroundFadeOut();
 
     @Override
@@ -310,6 +340,12 @@ public class PhotoPage extends ActivityState implements
                         }
                         break;
                     }
+                    case MSG_REFRESH_IMAGE: {
+                        MediaItem currentPhoto = mCurrentPhoto;
+                        mCurrentPhoto = null;
+                        updateCurrentPhoto(currentPhoto);
+                        break;
+                    }
                     default: throw new AssertionError(message.what);
                 }
             }
@@ -481,12 +517,18 @@ public class PhotoPage extends ActivityState implements
         }
 
         mPhotoView.setFilmMode(mStartInFilmstrip && mMediaSet.getMediaItemCount() > 1);
-        if (mSecureAlbum == null) {
-            RelativeLayout galleryRoot = (RelativeLayout) ((Activity) mActivity)
-                        .findViewById(mAppBridge != null ? R.id.content : R.id.gallery_root);
-            if (galleryRoot != null) {
+        RelativeLayout galleryRoot = (RelativeLayout) ((Activity) mActivity)
+                .findViewById(mAppBridge != null ? R.id.content : R.id.gallery_root);
+        if (galleryRoot != null) {
+            if (mSecureAlbum == null) {
                 mBottomControls = new PhotoPageBottomControls(this, mActivity, galleryRoot);
             }
+            StitchingProgressManager progressManager = mApplication.getStitchingProgressManager();
+            if (progressManager != null) {
+                mProgressBar = new PhotoPageProgressBar(mActivity, galleryRoot);
+                mProgressListener = new UpdateProgressListener();
+                progressManager.addChangeListener(mProgressListener);
+            }
         }
     }
 
@@ -626,6 +668,18 @@ public class PhotoPage extends ActivityState implements
                 && (photo.getSupportedOperations() & MediaItem.SUPPORT_SHARE) != 0) {
             updateShareURI(photo.getPath());
         }
+        StitchingProgressManager progressManager = mApplication.getStitchingProgressManager();
+        if (progressManager != null) {
+            int itemCount = progressManager.getItemCount();
+            mProgressBar.hideProgress();
+            for (int i = 0; i < itemCount; i++) {
+                MediaItem item = progressManager.getItem(i);
+                if (item.getPath().equals(photo.getPath())) {
+                    mProgressBar.setProgress(progressManager.getProgress(item.getFilePath()));
+                    break;
+                }
+            }
+        }
     }
 
     private void updateMenuOperations() {
@@ -1209,6 +1263,7 @@ public class PhotoPage extends ActivityState implements
         mActivity.getGLRoot().unfreeze();
     }
 
+    @Override
     public void onFilmModeChanged(boolean enabled) {
         mHandler.sendEmptyMessage(MSG_REFRESH_BOTTOM_CONTROLS);
         if (enabled) {
diff --git a/src/com/android/gallery3d/app/PhotoPageProgressBar.java b/src/com/android/gallery3d/app/PhotoPageProgressBar.java
new file mode 100644 (file)
index 0000000..141fea6
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2012 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.app;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.RelativeLayout;
+
+import com.android.gallery3d.R;
+
+public class PhotoPageProgressBar {
+    private ViewGroup mContainer;
+    private View mProgress;
+
+    public PhotoPageProgressBar(Context context, RelativeLayout parentLayout) {
+        LayoutInflater inflater = (LayoutInflater) context
+                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        mContainer = (ViewGroup) inflater.inflate(R.layout.photopage_progress_bar, parentLayout,
+                false);
+        parentLayout.addView(mContainer);
+        mProgress = mContainer.findViewById(R.id.photopage_progress_foreground);
+    }
+
+    public void setProgress(int progressPercent) {
+        mContainer.setVisibility(View.VISIBLE);
+        LayoutParams layoutParams = mProgress.getLayoutParams();
+        layoutParams.width = mContainer.getWidth() * progressPercent / 100;
+        mProgress.setLayoutParams(layoutParams);
+    }
+
+    public void hideProgress() {
+        mContainer.setVisibility(View.INVISIBLE);
+    }
+}