summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/Switcher.java
diff options
context:
space:
mode:
authorChih-Chung Chang <chihchung@google.com>2009-07-13 13:11:52 +0800
committerChih-Chung Chang <chihchung@google.com>2009-07-14 10:35:15 +0800
commitd918cfa6846593ceb844196a6d0012f3f350252f (patch)
tree8e6c37335f86d4da0cde9754aa508a46612334a3 /src/com/android/camera/Switcher.java
parent584d9a3d7b368d68aef213bd85786257a6d686ac (diff)
downloadLegacyCamera-d918cfa6846593ceb844196a6d0012f3f350252f.zip
LegacyCamera-d918cfa6846593ceb844196a6d0012f3f350252f.tar.gz
LegacyCamera-d918cfa6846593ceb844196a6d0012f3f350252f.tar.bz2
Fix 1973541: The mode switcher does not correspond to the actual mode.
Diffstat (limited to 'src/com/android/camera/Switcher.java')
-rw-r--r--src/com/android/camera/Switcher.java25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/com/android/camera/Switcher.java b/src/com/android/camera/Switcher.java
index e02636b..06e0af5 100644
--- a/src/com/android/camera/Switcher.java
+++ b/src/com/android/camera/Switcher.java
@@ -20,13 +20,17 @@ import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.MotionEvent;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
public class Switcher extends ImageView {
+ private static final String TAG = "Switcher";
+
public interface OnSwitchListener {
- public void onSwitchChanged(Switcher source, boolean onOff);
+ // Returns true if the listener agrees that the switch can be changed.
+ public boolean onSwitchChanged(Switcher source, boolean onOff);
}
private static final int ANIMATION_SPEED = 200;
@@ -42,9 +46,19 @@ public class Switcher extends ImageView {
}
public void setSwitch(boolean onOff) {
- if (mSwitch == onOff) return;
- mSwitch = onOff;
- if (mListener != null) mListener.onSwitchChanged(this, mSwitch);
+ try {
+ if (mSwitch == onOff) return;
+
+ if (mListener != null) {
+ if (!mListener.onSwitchChanged(this, onOff)) {
+ return;
+ }
+ }
+
+ mSwitch = onOff;
+ } finally {
+ startParkingAnimation();
+ }
}
public void setOnSwitchListener(OnSwitchListener listener) {
@@ -72,13 +86,12 @@ public class Switcher extends ImageView {
case MotionEvent.ACTION_UP:
trackTouchEvent(event);
setSwitch(mPosition >= available / 2);
- startParkingAnimation();
setPressed(false);
break;
case MotionEvent.ACTION_CANCEL:
+ setSwitch(mSwitch);
setPressed(false);
- startParkingAnimation();
break;
}
return true;