summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/photoeditor/Toolbar.java
diff options
context:
space:
mode:
authorYuli Huang <yuli@google.com>2011-10-01 02:05:06 +0800
committerYuli Huang <yuli@google.com>2011-10-04 00:26:14 +0800
commit305740f973407ec783fac92490a6df1b675632e2 (patch)
tree2a7da0aea8fdced2d639bbe04c2f101f8d41aa9b /src/com/android/gallery3d/photoeditor/Toolbar.java
parente0856697e69a7802040c004232e4cdec4113a88e (diff)
downloadandroid_packages_apps_Snap-305740f973407ec783fac92490a6df1b675632e2.tar.gz
android_packages_apps_Snap-305740f973407ec783fac92490a6df1b675632e2.tar.bz2
android_packages_apps_Snap-305740f973407ec783fac92490a6df1b675632e2.zip
Fix b/5317371 to make action-bar consistent with framework CAB.
1. Refactor to decouple ActionBar from FilterStackListener and ActionBarListener to avoid FilterStack/Toolbar depending on ActionBar. 2. Recreate the action-bar on configuration changes and restore button status and behaviors from the old action-bar. 3. Use framework CAB styles/dimensions to have consistent look and feel. Change-Id: Ib7be0e0b8135f5f86af65b320f09b3d691464f54
Diffstat (limited to 'src/com/android/gallery3d/photoeditor/Toolbar.java')
-rw-r--r--src/com/android/gallery3d/photoeditor/Toolbar.java169
1 files changed, 61 insertions, 108 deletions
diff --git a/src/com/android/gallery3d/photoeditor/Toolbar.java b/src/com/android/gallery3d/photoeditor/Toolbar.java
index 72f243bab..45ec016bb 100644
--- a/src/com/android/gallery3d/photoeditor/Toolbar.java
+++ b/src/com/android/gallery3d/photoeditor/Toolbar.java
@@ -17,30 +17,33 @@
package com.android.gallery3d.photoeditor;
import android.content.Context;
-import android.graphics.Bitmap;
-import android.net.Uri;
+import android.os.Handler;
+import android.os.Message;
import android.util.AttributeSet;
import android.view.MotionEvent;
+import android.view.View;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
import android.widget.RelativeLayout;
import com.android.gallery3d.R;
+import java.util.ArrayList;
+import java.util.List;
+
/**
- * Toolbar that contains all tools and handles all operations for editing photo.
+ * Toolbar that contains all tools and controls their idle/awake behaviors from UI thread.
*/
public class Toolbar extends RelativeLayout {
private final ToolbarIdleHandler idleHandler;
- private FilterStack filterStack;
- private EffectsBar effectsBar;
- private ActionBar actionBar;
- private Uri sourceUri;
public Toolbar(Context context, AttributeSet attrs) {
super(context, attrs);
idleHandler = new ToolbarIdleHandler(context);
setOnHierarchyChangeListener(idleHandler);
+ idleHandler.killIdle();
}
@Override
@@ -49,111 +52,61 @@ public class Toolbar extends RelativeLayout {
return super.dispatchTouchEvent(ev);
}
- public void initialize(FilterStack filterStack) {
- this.filterStack = filterStack;
- effectsBar = (EffectsBar) findViewById(R.id.effects_bar);
- effectsBar.initialize(filterStack);
- actionBar = (ActionBar) findViewById(R.id.action_bar);
- actionBar.initialize(createActionBarListener());
- idleHandler.killIdle();
- }
-
- private ActionBar.ActionBarListener createActionBarListener() {
- actionBar = (ActionBar) findViewById(R.id.action_bar);
- return new ActionBar.ActionBarListener() {
-
- @Override
- public void onUndo() {
- effectsBar.exit(new Runnable() {
-
- @Override
- public void run() {
- final SpinnerProgressDialog progressDialog = SpinnerProgressDialog.show(
- Toolbar.this);
- filterStack.undo(new OnDoneCallback() {
-
- @Override
- public void onDone() {
- progressDialog.dismiss();
+ private static class ToolbarIdleHandler implements OnHierarchyChangeListener {
+
+ private static final int MAKE_IDLE = 1;
+ private static final int TIMEOUT_IDLE = 8000;
+
+ private final List<View> childViews = new ArrayList<View>();
+ private final Handler mainHandler;
+ private final Animation fadeIn;
+ private final Animation fadeOut;
+ private boolean idle;
+
+ public ToolbarIdleHandler(Context context) {
+ mainHandler = new Handler() {
+
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MAKE_IDLE:
+ if (!idle) {
+ idle = true;
+ for (View view : childViews) {
+ view.startAnimation(fadeOut);
+ }
}
- });
+ break;
}
- });
+ }
+ };
+
+ fadeIn = AnimationUtils.loadAnimation(context, R.anim.photoeditor_fade_in);
+ fadeOut = AnimationUtils.loadAnimation(context, R.anim.photoeditor_fade_out);
+ }
+
+ public void killIdle() {
+ mainHandler.removeMessages(MAKE_IDLE);
+ if (idle) {
+ idle = false;
+ for (View view : childViews) {
+ view.startAnimation(fadeIn);
+ }
}
-
- @Override
- public void onRedo() {
- effectsBar.exit(new Runnable() {
-
- @Override
- public void run() {
- final SpinnerProgressDialog progressDialog = SpinnerProgressDialog.show(
- Toolbar.this);
- filterStack.redo(new OnDoneCallback() {
-
- @Override
- public void onDone() {
- progressDialog.dismiss();
- }
- });
- }
- });
+ 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 onSave() {
- effectsBar.exit(new Runnable() {
-
- @Override
- public void run() {
- savePhoto(null);
- }
- });
- }
- };
- }
-
- public void openPhoto(Uri uri) {
- sourceUri = uri;
-
- final SpinnerProgressDialog progressDialog = SpinnerProgressDialog.show(this);
- new LoadScreennailTask(getContext(), new LoadScreennailTask.Callback() {
-
- @Override
- public void onComplete(final Bitmap bitmap) {
- filterStack.setPhotoSource(bitmap, new OnDoneCallback() {
-
- @Override
- public void onDone() {
- progressDialog.dismiss();
- }
- });
- }
- }).execute(sourceUri);
- }
-
- /**
- * Saves photo and executes runnable (if provided) after saving done.
- */
- public void savePhoto(final Runnable runnable) {
- final SpinnerProgressDialog progressDialog = SpinnerProgressDialog.show(this);
- filterStack.saveBitmap(new OnDoneBitmapCallback() {
-
- @Override
- public void onDone(Bitmap bitmap) {
- new SaveCopyTask(getContext(), sourceUri, new SaveCopyTask.Callback() {
-
- @Override
- public void onComplete(Uri uri) {
- // TODO: Handle saving failure.
- progressDialog.dismiss();
- actionBar.disableSave();
- if (runnable != null) {
- runnable.run();
- }
- }
- }).execute(bitmap);
- }
- });
+ @Override
+ public void onChildViewRemoved(View parent, View child) {
+ childViews.remove(child);
+ }
}
}