diff options
author | Tony Wickham <twickham@google.com> | 2015-09-11 08:40:20 -0700 |
---|---|---|
committer | Tony Wickham <twickham@google.com> | 2015-09-15 10:42:24 -0700 |
commit | b54c4a3d864110a222e12683d88e6d46c27bf7a1 (patch) | |
tree | 823fe7dbadcebf098b02e6972d400f62c31d2483 | |
parent | e33c09f1bef2a1452e5126909f472b8f124b4682 (diff) | |
download | android_packages_apps_Trebuchet-b54c4a3d864110a222e12683d88e6d46c27bf7a1.tar.gz android_packages_apps_Trebuchet-b54c4a3d864110a222e12683d88e6d46c27bf7a1.tar.bz2 android_packages_apps_Trebuchet-b54c4a3d864110a222e12683d88e6d46c27bf7a1.zip |
Added BaseDropTargetBar, which SearchDropTargetBar extends.
This is to allow for a future AppInfoDropTargetBar.
Change-Id: I5e66129919226eaef1ba1ddb0c0c99d0a6dc48df
-rw-r--r-- | src/com/android/launcher3/BaseDropTargetBar.java | 131 | ||||
-rw-r--r-- | src/com/android/launcher3/ButtonDropTarget.java | 12 | ||||
-rw-r--r-- | src/com/android/launcher3/SearchDropTargetBar.java | 118 |
3 files changed, 162 insertions, 99 deletions
diff --git a/src/com/android/launcher3/BaseDropTargetBar.java b/src/com/android/launcher3/BaseDropTargetBar.java new file mode 100644 index 000000000..f478a3530 --- /dev/null +++ b/src/com/android/launcher3/BaseDropTargetBar.java @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.view.animation.AccelerateInterpolator; +import android.widget.FrameLayout; + +import com.android.launcher3.dragndrop.DragController; + +/** + * Base class for drop target bars (where you can drop apps to do actions such as uninstall). + */ +public abstract class BaseDropTargetBar extends FrameLayout implements DragController.DragListener { + protected static final int DEFAULT_DRAG_FADE_DURATION = 175; + + protected View mDropTargetBar; + + protected LauncherViewPropertyAnimator mDropTargetBarAnimator; + protected static final AccelerateInterpolator sAccelerateInterpolator = + new AccelerateInterpolator(); + protected boolean mAccessibilityEnabled = false; + + protected boolean mDeferOnDragEnd; + + public BaseDropTargetBar(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public BaseDropTargetBar(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + mDropTargetBar = findViewById(R.id.drag_target_bar); + + // Create the various fade animations + mDropTargetBar.setAlpha(0f); + mDropTargetBarAnimator = new LauncherViewPropertyAnimator(mDropTargetBar); + mDropTargetBarAnimator.setInterpolator(sAccelerateInterpolator); + mDropTargetBarAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + // Ensure that the view is visible for the animation + mDropTargetBar.setVisibility(View.VISIBLE); + } + + @Override + public void onAnimationEnd(Animator animation) { + if (mDropTargetBar != null) { + AlphaUpdateListener.updateVisibility(mDropTargetBar, mAccessibilityEnabled); + } + } + }); + } + + + /** + * Convenience method to animate the alpha of a view using hardware layers. + */ + protected void animateViewAlpha(LauncherViewPropertyAnimator animator, View v, float alpha, + int duration) { + if (v == null) { + return; + } + + animator.cancel(); + if (Float.compare(v.getAlpha(), alpha) != 0) { + if (duration > 0) { + animator.alpha(alpha).withLayer().setDuration(duration).start(); + } else { + v.setAlpha(alpha); + AlphaUpdateListener.updateVisibility(v, mAccessibilityEnabled); + } + } + } + + /* + * DragController.DragListener implementation + */ + @Override + public void onDragStart(DragSource source, ItemInfo info, int dragAction) { + showDropTarget(); + } + + /** + * This is called to defer hiding the delete drop target until the drop animation has completed, + * instead of hiding immediately when the drag has ended. + */ + protected void deferOnDragEnd() { + mDeferOnDragEnd = true; + } + + @Override + public void onDragEnd() { + if (!mDeferOnDragEnd) { + hideDropTarget(); + } else { + mDeferOnDragEnd = false; + } + } + + public abstract void showDropTarget(); + + public abstract void hideDropTarget(); + + public abstract void enableAccessibleDrag(boolean enable); + + public abstract void setup(Launcher launcher, DragController dragController); +} diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java index dc29f7d1e..703de5326 100644 --- a/src/com/android/launcher3/ButtonDropTarget.java +++ b/src/com/android/launcher3/ButtonDropTarget.java @@ -49,11 +49,11 @@ import com.android.launcher3.util.Thunk; public abstract class ButtonDropTarget extends TextView implements DropTarget, DragController.DragListener, OnClickListener { - private static int DRAG_VIEW_DROP_DURATION = 285; + private static final int DRAG_VIEW_DROP_DURATION = 285; protected Launcher mLauncher; private int mBottomDragPadding; - protected SearchDropTargetBar mSearchDropTargetBar; + protected BaseDropTargetBar mDropTargetBar; /** Whether this drop target is active for the current drag */ protected boolean mActive; @@ -106,8 +106,8 @@ public abstract class ButtonDropTarget extends TextView mLauncher = launcher; } - public void setSearchDropTargetBar(SearchDropTargetBar searchDropTargetBar) { - mSearchDropTargetBar = searchDropTargetBar; + public void setDropTargetBar(BaseDropTargetBar dropTargetBar) { + mDropTargetBar = dropTargetBar; } @Override @@ -230,13 +230,13 @@ public abstract class ButtonDropTarget extends TextView final Rect to = getIconRect(d.dragView.getMeasuredWidth(), d.dragView.getMeasuredHeight(), width, height); final float scale = (float) to.width() / from.width(); - mSearchDropTargetBar.deferOnDragEnd(); + mDropTargetBar.deferOnDragEnd(); Runnable onAnimationEndRunnable = new Runnable() { @Override public void run() { completeDrop(d); - mSearchDropTargetBar.onDragEnd(); + mDropTargetBar.onDragEnd(); mLauncher.exitSpringLoadedDragModeDelayed(true, 0, null); } }; diff --git a/src/com/android/launcher3/SearchDropTargetBar.java b/src/com/android/launcher3/SearchDropTargetBar.java index fdcad8217..878a474e6 100644 --- a/src/com/android/launcher3/SearchDropTargetBar.java +++ b/src/com/android/launcher3/SearchDropTargetBar.java @@ -23,17 +23,15 @@ import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; import android.view.accessibility.AccessibilityManager; -import android.view.animation.AccelerateInterpolator; -import android.widget.FrameLayout; import com.android.launcher3.dragndrop.DragController; import com.android.launcher3.util.Thunk; /* - * Ths bar will manage the transition between the QSB search bar and the delete drop - * targets so that each of the individual IconDropTargets don't have to. + * This bar will manage the transition between the QSB search bar and the delete/uninstall drop + * targets so that each of the individual ButtonDropTargets don't have to. */ -public class SearchDropTargetBar extends FrameLayout implements DragController.DragListener { +public class SearchDropTargetBar extends BaseDropTargetBar { /** The different states that the search bar space can be in. */ public enum State { @@ -58,21 +56,13 @@ public class SearchDropTargetBar extends FrameLayout implements DragController.D } } - private static int DEFAULT_DRAG_FADE_DURATION = 175; - private LauncherViewPropertyAnimator mDropTargetBarAnimator; private LauncherViewPropertyAnimator mQSBSearchBarAnimator; - private static final AccelerateInterpolator sAccelerateInterpolator = - new AccelerateInterpolator(); private State mState = State.SEARCH_BAR; @Thunk View mQSB; - @Thunk View mDropTargetBar; - private boolean mDeferOnDragEnd = false; - @Thunk boolean mAccessibilityEnabled = false; // Drop targets - private ButtonDropTarget mInfoDropTarget; private ButtonDropTarget mDeleteDropTarget; private ButtonDropTarget mUninstallDropTarget; @@ -84,61 +74,48 @@ public class SearchDropTargetBar extends FrameLayout implements DragController.D super(context, attrs, defStyle); } + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + // Get the individual components + mDeleteDropTarget = (ButtonDropTarget) mDropTargetBar.findViewById(R.id.delete_target_text); + mUninstallDropTarget = (ButtonDropTarget) mDropTargetBar + .findViewById(R.id.uninstall_target_text); + + mDeleteDropTarget.setDropTargetBar(this); + mUninstallDropTarget.setDropTargetBar(this); + } + + @Override public void setup(Launcher launcher, DragController dragController) { dragController.addDragListener(this); dragController.setFlingToDeleteDropTarget(mDeleteDropTarget); - dragController.addDragListener(mInfoDropTarget); dragController.addDragListener(mDeleteDropTarget); dragController.addDragListener(mUninstallDropTarget); - dragController.addDropTarget(mInfoDropTarget); dragController.addDropTarget(mDeleteDropTarget); dragController.addDropTarget(mUninstallDropTarget); - mInfoDropTarget.setLauncher(launcher); mDeleteDropTarget.setLauncher(launcher); mUninstallDropTarget.setLauncher(launcher); } @Override - protected void onFinishInflate() { - super.onFinishInflate(); + public void showDropTarget() { + animateToState(State.DROP_TARGET, DEFAULT_DRAG_FADE_DURATION); + } - // Get the individual components - mDropTargetBar = findViewById(R.id.drag_target_bar); - mInfoDropTarget = (ButtonDropTarget) mDropTargetBar.findViewById(R.id.info_target_text); - mDeleteDropTarget = (ButtonDropTarget) mDropTargetBar.findViewById(R.id.delete_target_text); - mUninstallDropTarget = (ButtonDropTarget) mDropTargetBar.findViewById(R.id.uninstall_target_text); - - mInfoDropTarget.setSearchDropTargetBar(this); - mDeleteDropTarget.setSearchDropTargetBar(this); - mUninstallDropTarget.setSearchDropTargetBar(this); - - // Create the various fade animations - mDropTargetBar.setAlpha(0f); - mDropTargetBarAnimator = new LauncherViewPropertyAnimator(mDropTargetBar); - mDropTargetBarAnimator.setInterpolator(sAccelerateInterpolator); - mDropTargetBarAnimator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animation) { - // Ensure that the view is visible for the animation - mDropTargetBar.setVisibility(View.VISIBLE); - } - - @Override - public void onAnimationEnd(Animator animation) { - if (mDropTargetBar != null) { - AlphaUpdateListener.updateVisibility(mDropTargetBar, mAccessibilityEnabled); - } - } - }); + @Override + public void hideDropTarget() { + animateToState(State.SEARCH_BAR, DEFAULT_DRAG_FADE_DURATION); } public void setQsbSearchBar(View qsb) { mQSB = qsb; if (mQSB != null) { - // Update the search ber animation + // Update the search bar animation mQSBSearchBarAnimator = new LauncherViewPropertyAnimator(mQSB); mQSBSearchBarAnimator.setInterpolator(sAccelerateInterpolator); mQSBSearchBarAnimator.addListener(new AnimatorListenerAdapter() { @@ -183,51 +160,6 @@ public class SearchDropTargetBar extends FrameLayout implements DragController.D } /** - * Convenience method to animate the alpha of a view using hardware layers. - */ - private void animateViewAlpha(LauncherViewPropertyAnimator animator, View v, float alpha, - int duration) { - if (v == null) { - return; - } - - animator.cancel(); - if (Float.compare(v.getAlpha(), alpha) != 0) { - if (duration > 0) { - animator.alpha(alpha).withLayer().setDuration(duration).start(); - } else { - v.setAlpha(alpha); - AlphaUpdateListener.updateVisibility(v, mAccessibilityEnabled); - } - } - } - - /* - * DragController.DragListener implementation - */ - @Override - public void onDragStart(DragSource source, ItemInfo info, int dragAction) { - animateToState(State.DROP_TARGET, DEFAULT_DRAG_FADE_DURATION); - } - - /** - * This is called to defer hiding the delete drop target until the drop animation has completed, - * instead of hiding immediately when the drag has ended. - */ - public void deferOnDragEnd() { - mDeferOnDragEnd = true; - } - - @Override - public void onDragEnd() { - if (!mDeferOnDragEnd) { - animateToState(State.SEARCH_BAR, DEFAULT_DRAG_FADE_DURATION); - } else { - mDeferOnDragEnd = false; - } - } - - /** * @return the bounds of the QSB search bar. */ public Rect getSearchBarBounds() { @@ -246,11 +178,11 @@ public class SearchDropTargetBar extends FrameLayout implements DragController.D } } + @Override public void enableAccessibleDrag(boolean enable) { if (mQSB != null) { mQSB.setVisibility(enable ? View.GONE : View.VISIBLE); } - mInfoDropTarget.enableAccessibleDrag(enable); mDeleteDropTarget.enableAccessibleDrag(enable); mUninstallDropTarget.enableAccessibleDrag(enable); } |