From 895e9fad2bbe6031c30b34e44caedaa1f77ca617 Mon Sep 17 00:00:00 2001 From: George Mount Date: Tue, 9 Oct 2012 17:50:33 -0700 Subject: Move panorama stitch progress outside the image. Bug 7302513 Change-Id: Ie6505c8ed2125b878e54a93c4b8c0f51d80a1385 --- src/com/android/gallery3d/app/PhotoPage.java | 63 ++++++++++++++++++++-- .../gallery3d/app/PhotoPageProgressBar.java | 50 +++++++++++++++++ 2 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 src/com/android/gallery3d/app/PhotoPageProgressBar.java (limited to 'src') diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java index 7f8414c36..6f2a1e007 100644 --- a/src/com/android/gallery3d/app/PhotoPage.java +++ b/src/com/android/gallery3d/app/PhotoPage.java @@ -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 index 000000000..141fea698 --- /dev/null +++ b/src/com/android/gallery3d/app/PhotoPageProgressBar.java @@ -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); + } +} -- cgit v1.2.3