Loading src/com/android/launcher3/BaseDropTargetBar.java 0 → 100644 +131 −0 Original line number Diff line number Diff line /* * 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); } src/com/android/launcher3/ButtonDropTarget.java +6 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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); } }; Loading src/com/android/launcher3/SearchDropTargetBar.java +25 −93 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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; Loading @@ -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(); // 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); public void showDropTarget() { animateToState(State.DROP_TARGET, DEFAULT_DRAG_FADE_DURATION); } @Override public void onAnimationEnd(Animator animation) { if (mDropTargetBar != null) { AlphaUpdateListener.updateVisibility(mDropTargetBar, mAccessibilityEnabled); } } }); 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() { Loading Loading @@ -182,51 +159,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. */ Loading @@ -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); } Loading Loading
src/com/android/launcher3/BaseDropTargetBar.java 0 → 100644 +131 −0 Original line number Diff line number Diff line /* * 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); }
src/com/android/launcher3/ButtonDropTarget.java +6 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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); } }; Loading
src/com/android/launcher3/SearchDropTargetBar.java +25 −93 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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; Loading @@ -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(); // 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); public void showDropTarget() { animateToState(State.DROP_TARGET, DEFAULT_DRAG_FADE_DURATION); } @Override public void onAnimationEnd(Animator animation) { if (mDropTargetBar != null) { AlphaUpdateListener.updateVisibility(mDropTargetBar, mAccessibilityEnabled); } } }); 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() { Loading Loading @@ -182,51 +159,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. */ Loading @@ -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); } Loading