diff options
author | Chirayu Desai <chirayudesai1@gmail.com> | 2012-08-02 12:23:05 +0530 |
---|---|---|
committer | Ricardo Cerqueira <cyanogenmod@cerqueira.org> | 2012-11-19 01:06:35 +0000 |
commit | 7dcb25f19af1b09f958de211f3506042fb4407ff (patch) | |
tree | edf2c2a38e9bca2953159d3f0fdad4ebf675ae51 /src/com/cyanogenmod/trebuchet/SearchDropTargetBar.java | |
parent | 348075fe8c42124911854777a8f932aec7ad2cd2 (diff) | |
download | packages_apps_trebuchet-7dcb25f19af1b09f958de211f3506042fb4407ff.zip packages_apps_trebuchet-7dcb25f19af1b09f958de211f3506042fb4407ff.tar.gz packages_apps_trebuchet-7dcb25f19af1b09f958de211f3506042fb4407ff.tar.bz2 |
Rename Launcher to Trebuchet
Launcher2 is now Trebuchet
application_name removed from localized strings and made un-translatable
com.android.launcher is now com.cyanogenmod.trebuchet
Diffstat (limited to 'src/com/cyanogenmod/trebuchet/SearchDropTargetBar.java')
-rw-r--r-- | src/com/cyanogenmod/trebuchet/SearchDropTargetBar.java | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/src/com/cyanogenmod/trebuchet/SearchDropTargetBar.java b/src/com/cyanogenmod/trebuchet/SearchDropTargetBar.java new file mode 100644 index 0000000..ed3406f --- /dev/null +++ b/src/com/cyanogenmod/trebuchet/SearchDropTargetBar.java @@ -0,0 +1,240 @@ +/* + * 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.cyanogenmod.trebuchet; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ObjectAnimator; +import android.content.Context; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.View; +import android.view.animation.AccelerateInterpolator; +import android.widget.FrameLayout; + +import com.cyanogenmod.trebuchet.R; + +/* + * 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. + */ +public class SearchDropTargetBar extends FrameLayout implements DragController.DragListener { + + private static final int sTransitionInDuration = 200; + private static final int sTransitionOutDuration = 175; + + private ObjectAnimator mDropTargetBarAnim; + private ObjectAnimator mQSBSearchBarAnim; + private static final AccelerateInterpolator sAccelerateInterpolator = + new AccelerateInterpolator(); + + private boolean mIsSearchBarHidden; + private View mQSBSearchBar; + private View mDropTargetBar; + private ButtonDropTarget mInfoDropTarget; + private ButtonDropTarget mDeleteDropTarget; + private int mBarHeight; + private boolean mDeferOnDragEnd = false; + + private Drawable mPreviousBackground; + private boolean mEnableDropDownDropTargets; + + public SearchDropTargetBar(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public SearchDropTargetBar(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public void setup(Launcher launcher, DragController dragController) { + dragController.addDragListener(this); + dragController.addDragListener(mInfoDropTarget); + dragController.addDragListener(mDeleteDropTarget); + dragController.addDropTarget(mInfoDropTarget); + dragController.addDropTarget(mDeleteDropTarget); + dragController.setFlingToDeleteDropTarget(mDeleteDropTarget); + mInfoDropTarget.setLauncher(launcher); + mDeleteDropTarget.setLauncher(launcher); + } + + private void prepareStartAnimation(View v) { + // Enable the hw layers before the animation starts (will be disabled in the onAnimationEnd + // callback below) + v.setLayerType(View.LAYER_TYPE_HARDWARE, null); + v.buildLayer(); + } + + private void setupAnimation(ObjectAnimator anim, final View v) { + anim.setInterpolator(sAccelerateInterpolator); + anim.setDuration(sTransitionInDuration); + anim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + v.setLayerType(View.LAYER_TYPE_NONE, null); + } + }); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + // Get the individual components + mQSBSearchBar = findViewById(R.id.qsb_search_bar); + 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); + mBarHeight = getResources().getDimensionPixelSize(R.dimen.qsb_bar_height); + + mInfoDropTarget.setSearchDropTargetBar(this); + mDeleteDropTarget.setSearchDropTargetBar(this); + + mEnableDropDownDropTargets = + getResources().getBoolean(R.bool.config_useDropTargetDownTransition); + + // Create the various fade animations + if (mEnableDropDownDropTargets) { + mDropTargetBar.setTranslationY(-mBarHeight); + mDropTargetBarAnim = LauncherAnimUtils.ofFloat(mDropTargetBar, "translationY", + -mBarHeight, 0f); + mQSBSearchBarAnim = LauncherAnimUtils.ofFloat(mQSBSearchBar, "translationY", 0, + -mBarHeight); + } else { + mDropTargetBar.setAlpha(0f); + mDropTargetBarAnim = LauncherAnimUtils.ofFloat(mDropTargetBar, "alpha", 0f, 1f); + mQSBSearchBarAnim = LauncherAnimUtils.ofFloat(mQSBSearchBar, "alpha", 1f, 0f); + } + setupAnimation(mDropTargetBarAnim, mDropTargetBar); + setupAnimation(mQSBSearchBarAnim, mQSBSearchBar); + } + + public void finishAnimations() { + prepareStartAnimation(mDropTargetBar); + mDropTargetBarAnim.reverse(); + prepareStartAnimation(mQSBSearchBar); + mQSBSearchBarAnim.reverse(); + } + + /* + * Shows and hides the search bar. + */ + public void showSearchBar(boolean animated) { + if (!mIsSearchBarHidden) return; + if (animated) { + prepareStartAnimation(mQSBSearchBar); + mQSBSearchBarAnim.reverse(); + } else { + mQSBSearchBarAnim.cancel(); + if (mEnableDropDownDropTargets) { + mQSBSearchBar.setTranslationY(0); + } else { + mQSBSearchBar.setAlpha(1f); + } + } + mIsSearchBarHidden = false; + } + public void hideSearchBar(boolean animated) { + if (mIsSearchBarHidden) return; + if (animated) { + prepareStartAnimation(mQSBSearchBar); + mQSBSearchBarAnim.start(); + } else { + mQSBSearchBarAnim.cancel(); + if (mEnableDropDownDropTargets) { + mQSBSearchBar.setTranslationY(-mBarHeight); + } else { + mQSBSearchBar.setAlpha(0f); + } + } + mIsSearchBarHidden = true; + } + + /* + * Gets various transition durations. + */ + public int getTransitionInDuration() { + return sTransitionInDuration; + } + public int getTransitionOutDuration() { + return sTransitionOutDuration; + } + + /* + * DragController.DragListener implementation + */ + @Override + public void onDragStart(DragSource source, Object info, int dragAction) { + // Animate out the QSB search bar, and animate in the drop target bar + prepareStartAnimation(mDropTargetBar); + mDropTargetBarAnim.start(); + if (!mIsSearchBarHidden) { + prepareStartAnimation(mQSBSearchBar); + mQSBSearchBarAnim.start(); + } + } + + public void deferOnDragEnd() { + mDeferOnDragEnd = true; + } + + @Override + public void onDragEnd() { + if (!mDeferOnDragEnd) { + // Restore the QSB search bar, and animate out the drop target bar + prepareStartAnimation(mDropTargetBar); + mDropTargetBarAnim.reverse(); + if (!mIsSearchBarHidden) { + prepareStartAnimation(mQSBSearchBar); + mQSBSearchBarAnim.reverse(); + } + } else { + mDeferOnDragEnd = false; + } + } + + public void onSearchPackagesChanged(boolean searchVisible, boolean voiceVisible) { + if (mQSBSearchBar != null) { + Drawable bg = mQSBSearchBar.getBackground(); + if (bg != null && (!searchVisible && !voiceVisible)) { + // Save the background and disable it + mPreviousBackground = bg; + mQSBSearchBar.setBackgroundResource(0); + } else if (mPreviousBackground != null && (searchVisible || voiceVisible)) { + // Restore the background + mQSBSearchBar.setBackground(mPreviousBackground); + } + } + } + + public Rect getSearchBarBounds() { + if (mQSBSearchBar != null) { + final int[] pos = new int[2]; + mQSBSearchBar.getLocationOnScreen(pos); + + final Rect rect = new Rect(); + rect.left = pos[0]; + rect.top = pos[1]; + rect.right = pos[0] + mQSBSearchBar.getWidth(); + rect.bottom = pos[1] + mQSBSearchBar.getHeight(); + return rect; + } else { + return null; + } + } +} |