summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/photoeditor
diff options
context:
space:
mode:
authorYuli Huang <yuli@google.com>2012-03-12 16:34:41 +0800
committerYuli Huang <yuli@google.com>2012-03-13 15:37:02 +0800
commit2012e23a44435642088d2a505f51bdd9d6c02542 (patch)
tree4ae86969e7ad0a5ad3c54e019387dba3a257f912 /src/com/android/gallery3d/photoeditor
parent2fe19c950eb46c425d36279923e1fa0b541ce2c8 (diff)
downloadandroid_packages_apps_Snap-2012e23a44435642088d2a505f51bdd9d6c02542.tar.gz
android_packages_apps_Snap-2012e23a44435642088d2a505f51bdd9d6c02542.tar.bz2
android_packages_apps_Snap-2012e23a44435642088d2a505f51bdd9d6c02542.zip
Simplify PhotoEditor code.
1. Encapsulate spinner usages inside Toolbar. 2. Remove unnecessary static variable usages. Change-Id: Iaec614c5322a50c1e2c0cfa9cec1971b85e32f8a
Diffstat (limited to 'src/com/android/gallery3d/photoeditor')
-rw-r--r--src/com/android/gallery3d/photoeditor/EffectsBar.java5
-rw-r--r--src/com/android/gallery3d/photoeditor/PhotoEditor.java14
-rw-r--r--src/com/android/gallery3d/photoeditor/SpinnerProgressDialog.java53
-rw-r--r--src/com/android/gallery3d/photoeditor/Toolbar.java60
4 files changed, 75 insertions, 57 deletions
diff --git a/src/com/android/gallery3d/photoeditor/EffectsBar.java b/src/com/android/gallery3d/photoeditor/EffectsBar.java
index ccf684a4c..fad0b90ae 100644
--- a/src/com/android/gallery3d/photoeditor/EffectsBar.java
+++ b/src/com/android/gallery3d/photoeditor/EffectsBar.java
@@ -116,12 +116,13 @@ public class EffectsBar extends LinearLayout {
private boolean exitActiveEffect(final Runnable runnableOnDone) {
if (activeEffect != null) {
- SpinnerProgressDialog.showDialog((Toolbar) getRootView().findViewById(R.id.toolbar));
+ final Toolbar toolbar = (Toolbar) getRootView().findViewById(R.id.toolbar);
+ toolbar.showSpinner();
activeEffect.end(new Runnable() {
@Override
public void run() {
- SpinnerProgressDialog.dismissDialog();
+ toolbar.dismissSpinner();
activeEffect = null;
if (runnableOnDone != null) {
runnableOnDone.run();
diff --git a/src/com/android/gallery3d/photoeditor/PhotoEditor.java b/src/com/android/gallery3d/photoeditor/PhotoEditor.java
index c5b16b83c..19e49c4a1 100644
--- a/src/com/android/gallery3d/photoeditor/PhotoEditor.java
+++ b/src/com/android/gallery3d/photoeditor/PhotoEditor.java
@@ -76,7 +76,7 @@ public class PhotoEditor extends Activity {
}
private void openPhoto() {
- SpinnerProgressDialog.showDialog(toolbar);
+ toolbar.showSpinner();
LoadScreennailTask.Callback callback = new LoadScreennailTask.Callback() {
@Override
@@ -85,7 +85,7 @@ public class PhotoEditor extends Activity {
@Override
public void onDone() {
- SpinnerProgressDialog.dismissDialog();
+ toolbar.dismissSpinner();
effectsBar.setEnabled(result != null);
}
});
@@ -103,12 +103,12 @@ public class PhotoEditor extends Activity {
@Override
public void run() {
- SpinnerProgressDialog.showDialog(toolbar);
+ toolbar.showSpinner();
OnDoneCallback callback = new OnDoneCallback() {
@Override
public void onDone() {
- SpinnerProgressDialog.dismissDialog();
+ toolbar.dismissSpinner();
}
};
if (undo) {
@@ -131,7 +131,7 @@ public class PhotoEditor extends Activity {
@Override
public void run() {
- SpinnerProgressDialog.showDialog(toolbar);
+ toolbar.showSpinner();
filterStack.getOutputBitmap(new OnDoneBitmapCallback() {
@Override
@@ -140,7 +140,7 @@ public class PhotoEditor extends Activity {
@Override
public void onComplete(Uri result) {
- SpinnerProgressDialog.dismissDialog();
+ toolbar.dismissSpinner();
saveUri = result;
actionBar.updateSave(saveUri == null);
}
@@ -223,7 +223,7 @@ public class PhotoEditor extends Activity {
super.onPause();
filterStack.onPause();
// Dismiss any running progress dialog as all operations are paused.
- SpinnerProgressDialog.dismissDialog();
+ toolbar.dismissSpinner();
}
@Override
diff --git a/src/com/android/gallery3d/photoeditor/SpinnerProgressDialog.java b/src/com/android/gallery3d/photoeditor/SpinnerProgressDialog.java
index 108c17d50..5bc544f9f 100644
--- a/src/com/android/gallery3d/photoeditor/SpinnerProgressDialog.java
+++ b/src/com/android/gallery3d/photoeditor/SpinnerProgressDialog.java
@@ -17,6 +17,8 @@
package com.android.gallery3d.photoeditor;
import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
@@ -25,50 +27,45 @@ import android.widget.ProgressBar;
import com.android.gallery3d.R;
import java.util.ArrayList;
+import java.util.List;
/**
* Spinner model progress dialog that disables all tools for user interaction after it shows up and
- * and re-enables them after it dismisses; this class along with all its methods should be accessed
- * in only UI thread and allows only one instance at a time.
+ * and re-enables them after it dismisses.
*/
public class SpinnerProgressDialog extends Dialog {
- private static SpinnerProgressDialog dialog;
- private final Toolbar toolbar;
- private final ArrayList<View> enabledTools = new ArrayList<View>();
+ /**
+ * Listener of touch events.
+ */
+ public interface OnTouchListener {
- public static void showDialog(Toolbar toolbar) {
- // There should be only one progress dialog running at a time.
- if (dialog == null) {
- dialog = new SpinnerProgressDialog(toolbar);
- dialog.show();
- }
+ public boolean onTouch(DialogInterface dialog, MotionEvent event);
}
- public static void dismissDialog() {
- if (dialog != null) {
- dialog.dismiss();
- dialog = null;
- }
- }
+ private final List<View> enabledTools = new ArrayList<View>();
+ private final OnTouchListener listener;
- private SpinnerProgressDialog(Toolbar toolbar) {
- super(toolbar.getContext(), R.style.SpinnerProgressDialog);
- addContentView(new ProgressBar(toolbar.getContext()), new LayoutParams(
+ public SpinnerProgressDialog(Context context, List<View> tools, OnTouchListener listener) {
+ super(context, R.style.SpinnerProgressDialog);
+ addContentView(new ProgressBar(context), new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
setCancelable(false);
- this.toolbar = toolbar;
+
+ for (View view : tools) {
+ if (view.isEnabled()) {
+ enabledTools.add(view);
+ }
+ }
+ this.listener = listener;
}
@Override
public void show() {
super.show();
// Disable enabled tools when showing spinner progress dialog.
- for (View view : toolbar.getTools()) {
- if (view.isEnabled()) {
- enabledTools.add(view);
- view.setEnabled(false);
- }
+ for (View view : enabledTools) {
+ view.setEnabled(false);
}
}
@@ -83,8 +80,6 @@ public class SpinnerProgressDialog extends Dialog {
@Override
public boolean onTouchEvent(MotionEvent event) {
- super.onTouchEvent(event);
- // Pass touch events to tools for killing idle even when the progress dialog is shown.
- return toolbar.dispatchTouchEvent(event);
+ return listener.onTouch(this, event);
}
}
diff --git a/src/com/android/gallery3d/photoeditor/Toolbar.java b/src/com/android/gallery3d/photoeditor/Toolbar.java
index 777a1aa54..df6802531 100644
--- a/src/com/android/gallery3d/photoeditor/Toolbar.java
+++ b/src/com/android/gallery3d/photoeditor/Toolbar.java
@@ -17,12 +17,12 @@
package com.android.gallery3d.photoeditor;
import android.content.Context;
+import android.content.DialogInterface;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
-import android.view.ViewGroup.OnHierarchyChangeListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.RelativeLayout;
@@ -35,34 +35,57 @@ import java.util.List;
/**
* Toolbar that contains all tools and controls their idle/awake behaviors from UI thread.
*/
-public class Toolbar extends RelativeLayout implements OnHierarchyChangeListener {
+public class Toolbar extends RelativeLayout {
private final ToolbarIdleHandler idleHandler;
private final List<View> tools = new ArrayList<View>();
+ private SpinnerProgressDialog spinner;
public Toolbar(Context context, AttributeSet attrs) {
super(context, attrs);
- setOnHierarchyChangeListener(this);
- idleHandler = new ToolbarIdleHandler(this);
+ setOnHierarchyChangeListener(new OnHierarchyChangeListener() {
+
+ @Override
+ public void onChildViewAdded(View parent, View child) {
+ // Photo-view isn't treated as a tool that responds to user events.
+ if (child.getId() != R.id.photo_view) {
+ tools.add(child);
+ }
+ }
+
+ @Override
+ public void onChildViewRemoved(View parent, View child) {
+ tools.remove(child);
+ }
+ });
+
+ idleHandler = new ToolbarIdleHandler(context, tools);
idleHandler.killIdle();
}
- @Override
- public void onChildViewAdded(View parent, View child) {
- // Photo-view isn't treated as a tool that responds to user events.
- if (child.getId() != R.id.photo_view) {
- tools.add(child);
- }
- }
+ public void showSpinner() {
+ // There should be only one progress spinner running at a time.
+ if (spinner == null) {
+ spinner = new SpinnerProgressDialog(getContext(), tools,
+ new SpinnerProgressDialog.OnTouchListener() {
- @Override
- public void onChildViewRemoved(View parent, View child) {
- tools.remove(child);
+ @Override
+ public boolean onTouch(DialogInterface dialog, MotionEvent event) {
+ // Kill idle even when the progress dialog is shown.
+ idleHandler.killIdle();
+ return true;
+ }
+ });
+ spinner.show();
+ }
}
- public List<View> getTools() {
- return tools;
+ public void dismissSpinner() {
+ if (spinner != null) {
+ spinner.dismiss();
+ spinner = null;
+ }
}
@Override
@@ -82,8 +105,8 @@ public class Toolbar extends RelativeLayout implements OnHierarchyChangeListener
private final Animation fadeOut;
private boolean idle;
- public ToolbarIdleHandler(Toolbar toolbar) {
- tools = toolbar.getTools();
+ public ToolbarIdleHandler(Context context, final List<View> tools) {
+ this.tools = tools;
mainHandler = new Handler() {
@Override
@@ -101,7 +124,6 @@ public class Toolbar extends RelativeLayout implements OnHierarchyChangeListener
}
};
- Context context = toolbar.getContext();
fadeIn = AnimationUtils.loadAnimation(context, R.anim.photoeditor_fade_in);
fadeOut = AnimationUtils.loadAnimation(context, R.anim.photoeditor_fade_out);
}