summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/photoeditor
diff options
context:
space:
mode:
authorYuli Huang <yuli@google.com>2012-03-07 01:18:08 +0800
committerYuli Huang <yuli@google.com>2012-03-07 01:18:08 +0800
commit88b29bb8922b26ec060dafcebaef199b4d82cf5c (patch)
treedbca47b02e9ad9d9efd74a19785f564df8d68bf9 /src/com/android/gallery3d/photoeditor
parent6696043a3f116eaad983822a7f077e4d6a106ee0 (diff)
downloadandroid_packages_apps_Snap-88b29bb8922b26ec060dafcebaef199b4d82cf5c.tar.gz
android_packages_apps_Snap-88b29bb8922b26ec060dafcebaef199b4d82cf5c.tar.bz2
android_packages_apps_Snap-88b29bb8922b26ec060dafcebaef199b4d82cf5c.zip
Fix b/5885342: Multiple PhotoEditor activities cause exceptions.
Avoid using a static variable to keep tracking views across activities. Change-Id: Ia53444502d476d37b64344e5aea5f58a06ee3b03
Diffstat (limited to 'src/com/android/gallery3d/photoeditor')
-rw-r--r--src/com/android/gallery3d/photoeditor/EffectsBar.java2
-rw-r--r--src/com/android/gallery3d/photoeditor/PhotoEditor.java10
-rw-r--r--src/com/android/gallery3d/photoeditor/SpinnerProgressDialog.java49
-rw-r--r--src/com/android/gallery3d/photoeditor/Toolbar.java50
4 files changed, 62 insertions, 49 deletions
diff --git a/src/com/android/gallery3d/photoeditor/EffectsBar.java b/src/com/android/gallery3d/photoeditor/EffectsBar.java
index de47159a3..ccf684a4c 100644
--- a/src/com/android/gallery3d/photoeditor/EffectsBar.java
+++ b/src/com/android/gallery3d/photoeditor/EffectsBar.java
@@ -116,7 +116,7 @@ public class EffectsBar extends LinearLayout {
private boolean exitActiveEffect(final Runnable runnableOnDone) {
if (activeEffect != null) {
- SpinnerProgressDialog.showDialog();
+ SpinnerProgressDialog.showDialog((Toolbar) getRootView().findViewById(R.id.toolbar));
activeEffect.end(new Runnable() {
@Override
diff --git a/src/com/android/gallery3d/photoeditor/PhotoEditor.java b/src/com/android/gallery3d/photoeditor/PhotoEditor.java
index 8f3990b5e..c5b16b83c 100644
--- a/src/com/android/gallery3d/photoeditor/PhotoEditor.java
+++ b/src/com/android/gallery3d/photoeditor/PhotoEditor.java
@@ -21,7 +21,6 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
-import android.view.ViewGroup;
import com.android.gallery3d.R;
@@ -37,18 +36,19 @@ public class PhotoEditor extends Activity {
private FilterStack filterStack;
private ActionBar actionBar;
private EffectsBar effectsBar;
+ private Toolbar toolbar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.photoeditor_main);
- SpinnerProgressDialog.initialize((ViewGroup) findViewById(R.id.toolbar));
Intent intent = getIntent();
if (Intent.ACTION_EDIT.equalsIgnoreCase(intent.getAction())) {
sourceUri = intent.getData();
}
+ toolbar = (Toolbar) findViewById(R.id.toolbar);
actionBar = (ActionBar) findViewById(R.id.action_bar);
filterStack = new FilterStack((PhotoView) findViewById(R.id.photo_view),
new FilterStack.StackListener() {
@@ -76,7 +76,7 @@ public class PhotoEditor extends Activity {
}
private void openPhoto() {
- SpinnerProgressDialog.showDialog();
+ SpinnerProgressDialog.showDialog(toolbar);
LoadScreennailTask.Callback callback = new LoadScreennailTask.Callback() {
@Override
@@ -103,7 +103,7 @@ public class PhotoEditor extends Activity {
@Override
public void run() {
- SpinnerProgressDialog.showDialog();
+ SpinnerProgressDialog.showDialog(toolbar);
OnDoneCallback callback = new OnDoneCallback() {
@Override
@@ -131,7 +131,7 @@ public class PhotoEditor extends Activity {
@Override
public void run() {
- SpinnerProgressDialog.showDialog();
+ SpinnerProgressDialog.showDialog(toolbar);
filterStack.getOutputBitmap(new OnDoneBitmapCallback() {
@Override
diff --git a/src/com/android/gallery3d/photoeditor/SpinnerProgressDialog.java b/src/com/android/gallery3d/photoeditor/SpinnerProgressDialog.java
index 065075e52..108c17d50 100644
--- a/src/com/android/gallery3d/photoeditor/SpinnerProgressDialog.java
+++ b/src/com/android/gallery3d/photoeditor/SpinnerProgressDialog.java
@@ -19,7 +19,6 @@ package com.android.gallery3d.photoeditor;
import android.app.Dialog;
import android.view.MotionEvent;
import android.view.View;
-import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ProgressBar;
@@ -34,46 +33,52 @@ import java.util.ArrayList;
*/
public class SpinnerProgressDialog extends Dialog {
- private static ViewGroup toolbar;
private static SpinnerProgressDialog dialog;
+ private final Toolbar toolbar;
private final ArrayList<View> enabledTools = new ArrayList<View>();
- public static void initialize(ViewGroup toolbar) {
- SpinnerProgressDialog.toolbar = toolbar;
- }
-
- public static void showDialog() {
+ public static void showDialog(Toolbar toolbar) {
// There should be only one progress dialog running at a time.
if (dialog == null) {
- dialog = new SpinnerProgressDialog();
- dialog.setCancelable(false);
+ dialog = new SpinnerProgressDialog(toolbar);
dialog.show();
- // Disable enabled tools when showing spinner progress dialog.
- for (int i = 0; i < toolbar.getChildCount(); i++) {
- View view = toolbar.getChildAt(i);
- if (view.isEnabled()) {
- dialog.enabledTools.add(view);
- view.setEnabled(false);
- }
- }
}
}
public static void dismissDialog() {
if (dialog != null) {
dialog.dismiss();
- // Enable tools that were disabled by this spinner progress dialog.
- for (View view : dialog.enabledTools) {
- view.setEnabled(true);
- }
dialog = null;
}
}
- private SpinnerProgressDialog() {
+ private SpinnerProgressDialog(Toolbar toolbar) {
super(toolbar.getContext(), R.style.SpinnerProgressDialog);
addContentView(new ProgressBar(toolbar.getContext()), new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
+ setCancelable(false);
+ this.toolbar = toolbar;
+ }
+
+ @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);
+ }
+ }
+ }
+
+ @Override
+ public void dismiss() {
+ super.dismiss();
+ // Enable tools that were disabled by this spinner progress dialog.
+ for (View view : enabledTools) {
+ view.setEnabled(true);
+ }
}
@Override
diff --git a/src/com/android/gallery3d/photoeditor/Toolbar.java b/src/com/android/gallery3d/photoeditor/Toolbar.java
index 45ec016bb..777a1aa54 100644
--- a/src/com/android/gallery3d/photoeditor/Toolbar.java
+++ b/src/com/android/gallery3d/photoeditor/Toolbar.java
@@ -22,6 +22,7 @@ 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;
@@ -34,36 +35,55 @@ import java.util.List;
/**
* Toolbar that contains all tools and controls their idle/awake behaviors from UI thread.
*/
-public class Toolbar extends RelativeLayout {
+public class Toolbar extends RelativeLayout implements OnHierarchyChangeListener {
private final ToolbarIdleHandler idleHandler;
+ private final List<View> tools = new ArrayList<View>();
public Toolbar(Context context, AttributeSet attrs) {
super(context, attrs);
- idleHandler = new ToolbarIdleHandler(context);
- setOnHierarchyChangeListener(idleHandler);
+ setOnHierarchyChangeListener(this);
+ idleHandler = new ToolbarIdleHandler(this);
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);
+ }
+ }
+
+ @Override
+ public void onChildViewRemoved(View parent, View child) {
+ tools.remove(child);
+ }
+
+ public List<View> getTools() {
+ return tools;
+ }
+
+ @Override
public boolean dispatchTouchEvent(MotionEvent ev) {
idleHandler.killIdle();
return super.dispatchTouchEvent(ev);
}
- private static class ToolbarIdleHandler implements OnHierarchyChangeListener {
+ private static class ToolbarIdleHandler {
private static final int MAKE_IDLE = 1;
private static final int TIMEOUT_IDLE = 8000;
- private final List<View> childViews = new ArrayList<View>();
+ private final List<View> tools;
private final Handler mainHandler;
private final Animation fadeIn;
private final Animation fadeOut;
private boolean idle;
- public ToolbarIdleHandler(Context context) {
+ public ToolbarIdleHandler(Toolbar toolbar) {
+ tools = toolbar.getTools();
mainHandler = new Handler() {
@Override
@@ -72,7 +92,7 @@ public class Toolbar extends RelativeLayout {
case MAKE_IDLE:
if (!idle) {
idle = true;
- for (View view : childViews) {
+ for (View view : tools) {
view.startAnimation(fadeOut);
}
}
@@ -81,6 +101,7 @@ public class Toolbar extends RelativeLayout {
}
};
+ Context context = toolbar.getContext();
fadeIn = AnimationUtils.loadAnimation(context, R.anim.photoeditor_fade_in);
fadeOut = AnimationUtils.loadAnimation(context, R.anim.photoeditor_fade_out);
}
@@ -89,24 +110,11 @@ public class Toolbar extends RelativeLayout {
mainHandler.removeMessages(MAKE_IDLE);
if (idle) {
idle = false;
- for (View view : childViews) {
+ for (View view : tools) {
view.startAnimation(fadeIn);
}
}
mainHandler.sendEmptyMessageDelayed(MAKE_IDLE, TIMEOUT_IDLE);
}
-
- @Override
- public void onChildViewAdded(View parent, View child) {
- // All child views, except photo-view, will fade out on inactivity timeout.
- if (child.getId() != R.id.photo_view) {
- childViews.add(child);
- }
- }
-
- @Override
- public void onChildViewRemoved(View parent, View child) {
- childViews.remove(child);
- }
}
}