summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/BaseDropTargetBar.java
diff options
context:
space:
mode:
authorTony Wickham <twickham@google.com>2015-09-11 08:40:20 -0700
committerTony Wickham <twickham@google.com>2015-09-15 10:42:24 -0700
commitb54c4a3d864110a222e12683d88e6d46c27bf7a1 (patch)
tree823fe7dbadcebf098b02e6972d400f62c31d2483 /src/com/android/launcher3/BaseDropTargetBar.java
parente33c09f1bef2a1452e5126909f472b8f124b4682 (diff)
downloadandroid_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
Diffstat (limited to 'src/com/android/launcher3/BaseDropTargetBar.java')
-rw-r--r--src/com/android/launcher3/BaseDropTargetBar.java131
1 files changed, 131 insertions, 0 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);
+}