diff options
| -rw-r--r-- | res/values-ko/strings.xml | 2 | ||||
| -rw-r--r-- | res/values/strings.xml | 8 | ||||
| -rw-r--r-- | src/com/android/gallery3d/app/MovieActivity.java | 1 | ||||
| -rw-r--r-- | src/com/android/gallery3d/app/MovieControllerOverlay.java | 3 | ||||
| -rw-r--r-- | src/com/android/gallery3d/app/PhotoPage.java | 24 | ||||
| -rw-r--r-- | src/com/android/gallery3d/ui/ActionModeHandler.java | 7 | ||||
| -rw-r--r-- | src/com/android/gallery3d/ui/MenuExecutor.java | 8 | ||||
| -rw-r--r-- | src/com/android/gallery3d/ui/PhotoView.java | 4 | ||||
| -rw-r--r-- | src/com/android/gallery3d/ui/PositionController.java | 2 | ||||
| -rw-r--r-- | src/com/android/gallery3d/ui/SlotView.java | 76 |
10 files changed, 104 insertions, 31 deletions
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index bfff577d6..b15bb4e4f 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -155,7 +155,7 @@ <string name="widget_type" msgid="1364653978966343448">"이미지 선택"</string> <string name="slideshow_dream_name" msgid="6915963319933437083">"슬라이드쇼"</string> <string name="albums" msgid="7320787705180057947">"앨범"</string> - <string name="times" msgid="2023033894889499219">"횟수"</string> + <string name="times" msgid="2023033894889499219">"시간"</string> <string name="locations" msgid="6649297994083130305">"위치"</string> <string name="people" msgid="4114003823747292747">"사용자"</string> <string name="tags" msgid="5539648765482935955">"태그"</string> diff --git a/res/values/strings.xml b/res/values/strings.xml index 96176d5fb..bba7e33e6 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -61,7 +61,7 @@ <!-- Title of a menu item to indicate performing the image crop operation [CHAR LIMIT=20] --> - <string name="crop_save_text">OK</string> + <string name="ok">OK</string> <!-- Button indicating that the cropped image should be reverted back to the original --> <!-- Hint that appears when cropping an image with more than one face --> <string name="multiface_crop_help">Touch a face to begin.</string> @@ -94,7 +94,11 @@ <!-- Details dialog "OK" button. Dismisses dialog. --> <string name="delete">Delete</string> - <string name="confirm_action">Confirm deletion?</string> + <!-- String Delete the selected media item(s) [CHAR LIMIT=30] --> + <plurals name="delete_selection"> + <item quantity="one">Delete selected item?</item> + <item quantity="other">Delete selected items?</item> + </plurals> <string name="confirm">Confirm</string> <string name="cancel">Cancel</string> <string name="share">Share</string> diff --git a/src/com/android/gallery3d/app/MovieActivity.java b/src/com/android/gallery3d/app/MovieActivity.java index 288eeb05f..95e345121 100644 --- a/src/com/android/gallery3d/app/MovieActivity.java +++ b/src/com/android/gallery3d/app/MovieActivity.java @@ -65,6 +65,7 @@ public class MovieActivity extends Activity { setContentView(R.layout.movie_view); View rootView = findViewById(R.id.movie_view_root); + rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE); Intent intent = getIntent(); initializeActionBar(intent); mFinishOnCompletion = intent.getBooleanExtra( diff --git a/src/com/android/gallery3d/app/MovieControllerOverlay.java b/src/com/android/gallery3d/app/MovieControllerOverlay.java index 92c304935..ae9f085a1 100644 --- a/src/com/android/gallery3d/app/MovieControllerOverlay.java +++ b/src/com/android/gallery3d/app/MovieControllerOverlay.java @@ -20,7 +20,6 @@ import android.content.Context; import android.os.Handler; import android.view.Gravity; import android.view.KeyEvent; -import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; @@ -86,8 +85,6 @@ public class MovieControllerOverlay extends FrameLayout implements LayoutParams matchParent = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); - LayoutInflater inflater = LayoutInflater.from(context); - background = new View(context); background.setBackgroundColor(context.getResources().getColor(R.color.darker_transparent)); addView(background, matchParent); diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java index 3f9f05728..a46c777fa 100644 --- a/src/com/android/gallery3d/app/PhotoPage.java +++ b/src/com/android/gallery3d/app/PhotoPage.java @@ -71,8 +71,10 @@ public class PhotoPage extends ActivityState implements private static final int MSG_UNLOCK_ORIENTATION = 3; private static final int MSG_ON_FULL_SCREEN_CHANGED = 4; private static final int MSG_UPDATE_ACTION_BAR = 5; + private static final int MSG_UNFREEZE_GLROOT = 6; private static final int HIDE_BARS_TIMEOUT = 3500; + private static final int UNFREEZE_GLROOT_TIMEOUT = 250; private static final int REQUEST_SLIDESHOW = 1; private static final int REQUEST_CROP = 2; @@ -276,6 +278,10 @@ public class PhotoPage extends ActivityState implements updateBars(); break; } + case MSG_UNFREEZE_GLROOT: { + mActivity.getGLRoot().unfreeze(); + break; + } default: throw new AssertionError(message.what); } } @@ -525,7 +531,7 @@ public class PhotoPage extends ActivityState implements DataManager manager = mActivity.getDataManager(); int action = item.getItemId(); - boolean needsConfirm = false; + String confirmMsg = null; switch (action) { case android.R.id.home: { onUpPressed(); @@ -568,19 +574,20 @@ public class PhotoPage extends ActivityState implements return true; } case R.id.action_delete: - needsConfirm = true; + confirmMsg = mActivity.getResources().getQuantityString( + R.plurals.delete_selection, 1); case R.id.action_setas: case R.id.action_rotate_ccw: case R.id.action_rotate_cw: case R.id.action_show_on_map: mSelectionManager.deSelectAll(); mSelectionManager.toggle(path); - mMenuExecutor.onMenuClicked(item, needsConfirm, null); + mMenuExecutor.onMenuClicked(item, confirmMsg, null); return true; case R.id.action_import: mSelectionManager.deSelectAll(); mSelectionManager.toggle(path); - mMenuExecutor.onMenuClicked(item, needsConfirm, + mMenuExecutor.onMenuClicked(item, confirmMsg, new ImportCompleteListener(mActivity)); return true; default : @@ -719,6 +726,8 @@ public class PhotoPage extends ActivityState implements @Override public void onPause() { + mActivity.getGLRoot().unfreeze(); + mHandler.removeMessages(MSG_UNFREEZE_GLROOT); super.onPause(); mIsActive = false; if (mAppBridge != null) mAppBridge.setServer(null); @@ -732,7 +741,13 @@ public class PhotoPage extends ActivityState implements } @Override + public void onCurrentImageUpdated() { + mActivity.getGLRoot().unfreeze(); + } + + @Override protected void onResume() { + mActivity.getGLRoot().freeze(); super.onResume(); mIsActive = true; setContentPane(mRootPane); @@ -749,6 +764,7 @@ public class PhotoPage extends ActivityState implements mAppBridge.setServer(this); mPhotoView.resetToFirstPicture(); } + mHandler.sendEmptyMessageDelayed(MSG_UNFREEZE_GLROOT, UNFREEZE_GLROOT_TIMEOUT); } @Override diff --git a/src/com/android/gallery3d/ui/ActionModeHandler.java b/src/com/android/gallery3d/ui/ActionModeHandler.java index d8e60d3a2..c5773ed3e 100644 --- a/src/com/android/gallery3d/ui/ActionModeHandler.java +++ b/src/com/android/gallery3d/ui/ActionModeHandler.java @@ -125,14 +125,15 @@ public class ActionModeHandler implements ActionMode.Callback { } } ProgressListener listener = null; - boolean needsConfirm = false; + String confirmMsg = null; int action = item.getItemId(); if (action == R.id.action_import) { listener = new ImportCompleteListener(mActivity); } else if (item.getItemId() == R.id.action_delete) { - needsConfirm = true; + confirmMsg = mActivity.getResources().getQuantityString( + R.plurals.delete_selection, mSelectionManager.getSelectedCount()); } - mMenuExecutor.onMenuClicked(item, needsConfirm, listener); + mMenuExecutor.onMenuClicked(item, confirmMsg, listener); if (action == R.id.action_select_all) { updateSupportedOperation(); updateSelectionMenu(); diff --git a/src/com/android/gallery3d/ui/MenuExecutor.java b/src/com/android/gallery3d/ui/MenuExecutor.java index 636da3985..14bdc4d53 100644 --- a/src/com/android/gallery3d/ui/MenuExecutor.java +++ b/src/com/android/gallery3d/ui/MenuExecutor.java @@ -232,14 +232,14 @@ public class MenuExecutor { startAction(action, title, listener); } - public void onMenuClicked(MenuItem menuItem, boolean needsConfirm, + public void onMenuClicked(MenuItem menuItem, String confirmMsg, final ProgressListener listener) { final int action = menuItem.getItemId(); - if (needsConfirm) { + if (confirmMsg != null) { new AlertDialog.Builder(mActivity.getAndroidContext()) - .setMessage(R.string.confirm_action) - .setPositiveButton(R.string.confirm, new OnClickListener() { + .setMessage(confirmMsg) + .setPositiveButton(R.string.ok, new OnClickListener() { public void onClick(DialogInterface dialog, int which) { onMenuClicked(action, listener); } diff --git a/src/com/android/gallery3d/ui/PhotoView.java b/src/com/android/gallery3d/ui/PhotoView.java index dce37289e..1c0484979 100644 --- a/src/com/android/gallery3d/ui/PhotoView.java +++ b/src/com/android/gallery3d/ui/PhotoView.java @@ -79,6 +79,7 @@ public class PhotoView extends GLView { public void unlockOrientation(); public void onFullScreenChanged(boolean full); public void onActionBarAllowed(boolean allowed); + public void onCurrentImageUpdated(); } // Here is a graph showing the places we need to lock/unlock device @@ -318,6 +319,9 @@ public class PhotoView extends GLView { } public void notifyImageChange(int index) { + if (index == 0) { + mListener.onCurrentImageUpdated(); + } mPictures.get(index).reload(); invalidate(); } diff --git a/src/com/android/gallery3d/ui/PositionController.java b/src/com/android/gallery3d/ui/PositionController.java index f49a0b727..99d36baec 100644 --- a/src/com/android/gallery3d/ui/PositionController.java +++ b/src/com/android/gallery3d/ui/PositionController.java @@ -207,6 +207,7 @@ class PositionController { } updateScaleAndGapLimit(); + startOpeningAnimationIfNeeded(); snapAndRedraw(); } @@ -233,7 +234,6 @@ class PositionController { } updateScaleAndGapLimit(); - startOpeningAnimationIfNeeded(); snapAndRedraw(); } diff --git a/src/com/android/gallery3d/ui/SlotView.java b/src/com/android/gallery3d/ui/SlotView.java index bf3a55d45..0334c555b 100644 --- a/src/com/android/gallery3d/ui/SlotView.java +++ b/src/com/android/gallery3d/ui/SlotView.java @@ -251,6 +251,7 @@ public class SlotView extends GLView { long animTime = AnimationTime.get(); boolean more = mScroller.advanceAnimation(animTime); + more |= mLayout.advanceAnimation(animTime); int oldX = mScrollX; updateScrollPosition(mScroller.getPosition(), false); @@ -432,19 +433,25 @@ public class SlotView extends GLView { private int mContentLength; private int mScrollPosition; - private int mVerticalPadding; - private int mHorizontalPadding; + private IntegerAnimation mVerticalPadding = new IntegerAnimation(); + private IntegerAnimation mHorizontalPadding = new IntegerAnimation(); public void setSlotSpec(Spec spec) { mSpec = spec; } public boolean setSlotCount(int slotCount) { + if (slotCount == mSlotCount) return false; + if (mSlotCount != 0) { + mHorizontalPadding.setEnabled(true); + mVerticalPadding.setEnabled(true); + } mSlotCount = slotCount; - int hPadding = mHorizontalPadding; - int vPadding = mVerticalPadding; + int hPadding = mHorizontalPadding.getTarget(); + int vPadding = mVerticalPadding.getTarget(); initLayoutParameters(); - return vPadding != mVerticalPadding || hPadding != mHorizontalPadding; + return vPadding != mVerticalPadding.getTarget() + || hPadding != mHorizontalPadding.getTarget(); } public Rect getSlotRect(int index, Rect rect) { @@ -457,8 +464,8 @@ public class SlotView extends GLView { col = index - row * mUnitCount; } - int x = mHorizontalPadding + col * (mSlotWidth + mSlotGap); - int y = mVerticalPadding + row * (mSlotHeight + mSlotGap); + int x = mHorizontalPadding.get() + col * (mSlotWidth + mSlotGap); + int y = mVerticalPadding.get() + row * (mSlotHeight + mSlotGap); rect.set(x, y, x + mSlotWidth, y + mSlotHeight); return rect; } @@ -526,12 +533,12 @@ public class SlotView extends GLView { int[] padding = new int[2]; if (WIDE) { initLayoutParameters(mWidth, mHeight, mSlotWidth, mSlotHeight, padding); - mVerticalPadding = padding[0]; - mHorizontalPadding = padding[1]; + mVerticalPadding.startAnimateTo(padding[0]); + mHorizontalPadding.startAnimateTo(padding[1]); } else { initLayoutParameters(mHeight, mWidth, mSlotHeight, mSlotWidth, padding); - mVerticalPadding = padding[1]; - mHorizontalPadding = padding[0]; + mVerticalPadding.startAnimateTo(padding[1]); + mHorizontalPadding.startAnimateTo(padding[0]); } updateVisibleSlotRange(); } @@ -593,8 +600,8 @@ public class SlotView extends GLView { int absoluteX = Math.round(x) + (WIDE ? mScrollPosition : 0); int absoluteY = Math.round(y) + (WIDE ? 0 : mScrollPosition); - absoluteX -= mHorizontalPadding; - absoluteY -= mVerticalPadding; + absoluteX -= mHorizontalPadding.get(); + absoluteY -= mVerticalPadding.get(); if (absoluteX < 0 || absoluteY < 0) { return INDEX_NONE; @@ -630,6 +637,11 @@ public class SlotView extends GLView { int limit = WIDE ? mContentLength - mWidth : mContentLength - mHeight; return limit <= 0 ? 0 : limit; } + + public boolean advanceAnimation(long animTime) { + // use '|' to make sure both sides will be executed + return mVerticalPadding.calculate(animTime) | mHorizontalPadding.calculate(animTime); + } } private class MyGestureListener implements GestureDetector.OnGestureListener { @@ -747,4 +759,42 @@ public class SlotView extends GLView { public int getScrollY() { return mScrollY; } + + private static class IntegerAnimation extends Animation { + private int mTarget; + private int mCurrent = 0; + private int mFrom = 0; + private boolean mEnabled = false; + + public void setEnabled(boolean enabled) { + mEnabled = enabled; + } + + public void startAnimateTo(int target) { + if (!mEnabled) { + mTarget = mCurrent = target; + return; + } + if (target == mTarget) return; + + mFrom = mCurrent; + mTarget = target; + setDuration(180); + start(); + } + + public int get() { + return mCurrent; + } + + public int getTarget() { + return mTarget; + } + + @Override + protected void onCalculate(float progress) { + mCurrent = Math.round(mFrom + progress * (mTarget - mFrom)); + if (progress == 1f) mEnabled = false; + } + } } |
