diff options
author | Yuli Huang <yuli@google.com> | 2011-10-01 02:05:06 +0800 |
---|---|---|
committer | Yuli Huang <yuli@google.com> | 2011-10-04 00:26:14 +0800 |
commit | 305740f973407ec783fac92490a6df1b675632e2 (patch) | |
tree | 2a7da0aea8fdced2d639bbe04c2f101f8d41aa9b /src/com/android/gallery3d/photoeditor/Toolbar.java | |
parent | e0856697e69a7802040c004232e4cdec4113a88e (diff) | |
download | android_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.java | 169 |
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); + } } } |