diff options
author | Yuli Huang <yuli@google.com> | 2012-03-12 16:34:41 +0800 |
---|---|---|
committer | Yuli Huang <yuli@google.com> | 2012-03-13 15:37:02 +0800 |
commit | 2012e23a44435642088d2a505f51bdd9d6c02542 (patch) | |
tree | 4ae86969e7ad0a5ad3c54e019387dba3a257f912 /src/com/android/gallery3d/photoeditor | |
parent | 2fe19c950eb46c425d36279923e1fa0b541ce2c8 (diff) | |
download | android_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')
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); } |