summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/values-ko/strings.xml2
-rw-r--r--res/values/strings.xml8
-rw-r--r--src/com/android/gallery3d/app/MovieActivity.java1
-rw-r--r--src/com/android/gallery3d/app/MovieControllerOverlay.java3
-rw-r--r--src/com/android/gallery3d/app/PhotoPage.java24
-rw-r--r--src/com/android/gallery3d/ui/ActionModeHandler.java7
-rw-r--r--src/com/android/gallery3d/ui/MenuExecutor.java8
-rw-r--r--src/com/android/gallery3d/ui/PhotoView.java4
-rw-r--r--src/com/android/gallery3d/ui/PositionController.java2
-rw-r--r--src/com/android/gallery3d/ui/SlotView.java76
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;
+ }
+ }
}