14c98d9235d164680186180974719f551cf935d08Winson Chung/*
24c98d9235d164680186180974719f551cf935d08Winson Chung * Copyright (C) 2011 The Android Open Source Project
34c98d9235d164680186180974719f551cf935d08Winson Chung *
44c98d9235d164680186180974719f551cf935d08Winson Chung * Licensed under the Apache License, Version 2.0 (the "License");
54c98d9235d164680186180974719f551cf935d08Winson Chung * you may not use this file except in compliance with the License.
64c98d9235d164680186180974719f551cf935d08Winson Chung * You may obtain a copy of the License at
74c98d9235d164680186180974719f551cf935d08Winson Chung *
84c98d9235d164680186180974719f551cf935d08Winson Chung *      http://www.apache.org/licenses/LICENSE-2.0
94c98d9235d164680186180974719f551cf935d08Winson Chung *
104c98d9235d164680186180974719f551cf935d08Winson Chung * Unless required by applicable law or agreed to in writing, software
114c98d9235d164680186180974719f551cf935d08Winson Chung * distributed under the License is distributed on an "AS IS" BASIS,
124c98d9235d164680186180974719f551cf935d08Winson Chung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134c98d9235d164680186180974719f551cf935d08Winson Chung * See the License for the specific language governing permissions and
144c98d9235d164680186180974719f551cf935d08Winson Chung * limitations under the License.
154c98d9235d164680186180974719f551cf935d08Winson Chung */
164c98d9235d164680186180974719f551cf935d08Winson Chung
17325dc23624160689e59fbac708cf6f222b20d025Daniel Sandlerpackage com.android.launcher3;
184c98d9235d164680186180974719f551cf935d08Winson Chung
19201bc828d5a0078f505e8e37152156a0cb43c10aWinson Chungimport android.animation.Animator;
20201bc828d5a0078f505e8e37152156a0cb43c10aWinson Chungimport android.animation.AnimatorListenerAdapter;
21201bc828d5a0078f505e8e37152156a0cb43c10aWinson Chungimport android.animation.ObjectAnimator;
22c2d6e897dbcb96b7b629e42002966368fbda2f95Adam Cohenimport android.animation.ValueAnimator;
234c98d9235d164680186180974719f551cf935d08Winson Chungimport android.content.Context;
24cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwoodimport android.graphics.Rect;
254c98d9235d164680186180974719f551cf935d08Winson Chungimport android.util.AttributeSet;
264c98d9235d164680186180974719f551cf935d08Winson Chungimport android.view.View;
27a62e9fd95ae10cff4676f2cc1f4d68334ca27a0bWinson Chungimport android.view.animation.AccelerateInterpolator;
284c98d9235d164680186180974719f551cf935d08Winson Chungimport android.widget.FrameLayout;
294c98d9235d164680186180974719f551cf935d08Winson Chung
304c98d9235d164680186180974719f551cf935d08Winson Chung/*
314c98d9235d164680186180974719f551cf935d08Winson Chung * Ths bar will manage the transition between the QSB search bar and the delete drop
324c98d9235d164680186180974719f551cf935d08Winson Chung * targets so that each of the individual IconDropTargets don't have to.
334c98d9235d164680186180974719f551cf935d08Winson Chung */
344c98d9235d164680186180974719f551cf935d08Winson Chungpublic class SearchDropTargetBar extends FrameLayout implements DragController.DragListener {
354c98d9235d164680186180974719f551cf935d08Winson Chung
36dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung    private static final int TRANSITION_DURATION = 200;
374c98d9235d164680186180974719f551cf935d08Winson Chung
38dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung    private ObjectAnimator mShowDropTargetBarAnim;
39dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung    private ValueAnimator mHideSearchBarAnim;
4017f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung    private static final AccelerateInterpolator sAccelerateInterpolator =
4117f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung            new AccelerateInterpolator();
42201bc828d5a0078f505e8e37152156a0cb43c10aWinson Chung
43f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung    private boolean mIsSearchBarHidden;
444c98d9235d164680186180974719f551cf935d08Winson Chung    private View mQSBSearchBar;
454c98d9235d164680186180974719f551cf935d08Winson Chung    private View mDropTargetBar;
46d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen    private boolean mDeferOnDragEnd = false;
474c98d9235d164680186180974719f551cf935d08Winson Chung
48fa401a10e7e9341daf6f3c5949bf9331902c26d0Sunny Goyal    // Drop targets
49fa401a10e7e9341daf6f3c5949bf9331902c26d0Sunny Goyal    private ButtonDropTarget mInfoDropTarget;
50fa401a10e7e9341daf6f3c5949bf9331902c26d0Sunny Goyal    private ButtonDropTarget mDeleteDropTarget;
51fa401a10e7e9341daf6f3c5949bf9331902c26d0Sunny Goyal    private ButtonDropTarget mUninstallDropTarget;
52fa401a10e7e9341daf6f3c5949bf9331902c26d0Sunny Goyal
534c98d9235d164680186180974719f551cf935d08Winson Chung    public SearchDropTargetBar(Context context, AttributeSet attrs) {
544c98d9235d164680186180974719f551cf935d08Winson Chung        this(context, attrs, 0);
554c98d9235d164680186180974719f551cf935d08Winson Chung    }
564c98d9235d164680186180974719f551cf935d08Winson Chung
574c98d9235d164680186180974719f551cf935d08Winson Chung    public SearchDropTargetBar(Context context, AttributeSet attrs, int defStyle) {
584c98d9235d164680186180974719f551cf935d08Winson Chung        super(context, attrs, defStyle);
594c98d9235d164680186180974719f551cf935d08Winson Chung    }
604c98d9235d164680186180974719f551cf935d08Winson Chung
614c98d9235d164680186180974719f551cf935d08Winson Chung    public void setup(Launcher launcher, DragController dragController) {
624c98d9235d164680186180974719f551cf935d08Winson Chung        dragController.addDragListener(this);
63fa401a10e7e9341daf6f3c5949bf9331902c26d0Sunny Goyal        dragController.setFlingToDeleteDropTarget(mDeleteDropTarget);
64fa401a10e7e9341daf6f3c5949bf9331902c26d0Sunny Goyal
654c98d9235d164680186180974719f551cf935d08Winson Chung        dragController.addDragListener(mInfoDropTarget);
664c98d9235d164680186180974719f551cf935d08Winson Chung        dragController.addDragListener(mDeleteDropTarget);
67fa401a10e7e9341daf6f3c5949bf9331902c26d0Sunny Goyal        dragController.addDragListener(mUninstallDropTarget);
68fa401a10e7e9341daf6f3c5949bf9331902c26d0Sunny Goyal
694c98d9235d164680186180974719f551cf935d08Winson Chung        dragController.addDropTarget(mInfoDropTarget);
704c98d9235d164680186180974719f551cf935d08Winson Chung        dragController.addDropTarget(mDeleteDropTarget);
71fa401a10e7e9341daf6f3c5949bf9331902c26d0Sunny Goyal        dragController.addDropTarget(mUninstallDropTarget);
72fa401a10e7e9341daf6f3c5949bf9331902c26d0Sunny Goyal
734c98d9235d164680186180974719f551cf935d08Winson Chung        mInfoDropTarget.setLauncher(launcher);
744c98d9235d164680186180974719f551cf935d08Winson Chung        mDeleteDropTarget.setLauncher(launcher);
75fa401a10e7e9341daf6f3c5949bf9331902c26d0Sunny Goyal        mUninstallDropTarget.setLauncher(launcher);
76594d76dc66cb5666830b62594909fed187987d42Sunny Goyal    }
77594d76dc66cb5666830b62594909fed187987d42Sunny Goyal
78594d76dc66cb5666830b62594909fed187987d42Sunny Goyal    public void setQsbSearchBar(View qsb) {
79594d76dc66cb5666830b62594909fed187987d42Sunny Goyal        mQSBSearchBar = qsb;
80c2d6e897dbcb96b7b629e42002966368fbda2f95Adam Cohen        if (mQSBSearchBar != null) {
81dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung            mHideSearchBarAnim = LauncherAnimUtils.ofFloat(mQSBSearchBar, "alpha", 1f, 0f);
82dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung            setupAnimation(mHideSearchBarAnim, mQSBSearchBar);
83476493bcc3b2d6cf32db62bf78714aa0f2747108Cristina Stancu        } else {
84c2d6e897dbcb96b7b629e42002966368fbda2f95Adam Cohen            // Create a no-op animation of the search bar is null
85dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung            mHideSearchBarAnim = ValueAnimator.ofFloat(0, 0);
86dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung            mHideSearchBarAnim.setDuration(TRANSITION_DURATION);
87476493bcc3b2d6cf32db62bf78714aa0f2747108Cristina Stancu        }
884c98d9235d164680186180974719f551cf935d08Winson Chung    }
894c98d9235d164680186180974719f551cf935d08Winson Chung
90c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung    private void prepareStartAnimation(View v) {
9117f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung        // Enable the hw layers before the animation starts (will be disabled in the onAnimationEnd
9217f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung        // callback below)
93c2d6e897dbcb96b7b629e42002966368fbda2f95Adam Cohen        if (v != null) {
94c2d6e897dbcb96b7b629e42002966368fbda2f95Adam Cohen            v.setLayerType(View.LAYER_TYPE_HARDWARE, null);
95c2d6e897dbcb96b7b629e42002966368fbda2f95Adam Cohen        }
96c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung    }
97c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung
98c2d6e897dbcb96b7b629e42002966368fbda2f95Adam Cohen    private void setupAnimation(ValueAnimator anim, final View v) {
9917f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung        anim.setInterpolator(sAccelerateInterpolator);
100dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        anim.setDuration(TRANSITION_DURATION);
10117f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung        anim.addListener(new AnimatorListenerAdapter() {
102315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung            @Override
103315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung            public void onAnimationEnd(Animator animation) {
104c2d6e897dbcb96b7b629e42002966368fbda2f95Adam Cohen                if (v != null) {
105c2d6e897dbcb96b7b629e42002966368fbda2f95Adam Cohen                    v.setLayerType(View.LAYER_TYPE_NONE, null);
106c2d6e897dbcb96b7b629e42002966368fbda2f95Adam Cohen                }
107315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung            }
108315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung        });
109315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung    }
110315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung
1114c98d9235d164680186180974719f551cf935d08Winson Chung    @Override
1124c98d9235d164680186180974719f551cf935d08Winson Chung    protected void onFinishInflate() {
1134c98d9235d164680186180974719f551cf935d08Winson Chung        super.onFinishInflate();
1144c98d9235d164680186180974719f551cf935d08Winson Chung
1154c98d9235d164680186180974719f551cf935d08Winson Chung        // Get the individual components
1164c98d9235d164680186180974719f551cf935d08Winson Chung        mDropTargetBar = findViewById(R.id.drag_target_bar);
117a6427b15c18d5b8f3078f553d78f8432de9f46e9Winson Chung        mInfoDropTarget = (ButtonDropTarget) mDropTargetBar.findViewById(R.id.info_target_text);
118a6427b15c18d5b8f3078f553d78f8432de9f46e9Winson Chung        mDeleteDropTarget = (ButtonDropTarget) mDropTargetBar.findViewById(R.id.delete_target_text);
119fa401a10e7e9341daf6f3c5949bf9331902c26d0Sunny Goyal        mUninstallDropTarget = (ButtonDropTarget) mDropTargetBar.findViewById(R.id.uninstall_target_text);
120a62e9fd95ae10cff4676f2cc1f4d68334ca27a0bWinson Chung
121d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen        mInfoDropTarget.setSearchDropTargetBar(this);
122d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen        mDeleteDropTarget.setSearchDropTargetBar(this);
123fa401a10e7e9341daf6f3c5949bf9331902c26d0Sunny Goyal        mUninstallDropTarget.setSearchDropTargetBar(this);
124d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen
125201bc828d5a0078f505e8e37152156a0cb43c10aWinson Chung        // Create the various fade animations
126dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        mDropTargetBar.setAlpha(0f);
127dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        mShowDropTargetBarAnim = LauncherAnimUtils.ofFloat(mDropTargetBar, "alpha", 0f, 1f);
128dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        setupAnimation(mShowDropTargetBarAnim, mDropTargetBar);
129201bc828d5a0078f505e8e37152156a0cb43c10aWinson Chung    }
130201bc828d5a0078f505e8e37152156a0cb43c10aWinson Chung
131dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung    /**
132dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung     * Finishes all the animations on the search and drop target bars.
133dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung     */
134043f2af567178b82b0b41f12d379e7dd12da2936Winson Chung    public void finishAnimations() {
13517f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung        prepareStartAnimation(mDropTargetBar);
136dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        mShowDropTargetBarAnim.reverse();
13717f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung        prepareStartAnimation(mQSBSearchBar);
138dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        mHideSearchBarAnim.reverse();
1394c98d9235d164680186180974719f551cf935d08Winson Chung    }
1404c98d9235d164680186180974719f551cf935d08Winson Chung
141dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung    /**
142dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung     * Shows the search bar.
143f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung     */
144f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung    public void showSearchBar(boolean animated) {
145dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        if (!mIsSearchBarHidden) return;
146f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung        if (animated) {
147c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung            prepareStartAnimation(mQSBSearchBar);
148dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung            mHideSearchBarAnim.reverse();
149f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung        } else {
150dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung            mHideSearchBarAnim.cancel();
151dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung            if (mQSBSearchBar != null) {
152324dbdd7a3d32b8c73d496111633cb3b843f4b16Michael Jurka                mQSBSearchBar.setAlpha(1f);
15319e3347e47f51367dc7ba1919eda6e87503b898eMichael Jurka            }
154f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung        }
155f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung        mIsSearchBarHidden = false;
156f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung    }
157dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung
158dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung    /**
159dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung     * Hides the search bar.  We only use this for clings.
160dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung     */
161f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung    public void hideSearchBar(boolean animated) {
162dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        if (mIsSearchBarHidden) return;
163f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung        if (animated) {
164c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung            prepareStartAnimation(mQSBSearchBar);
165dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung            mHideSearchBarAnim.start();
166f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung        } else {
167dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung            mHideSearchBarAnim.cancel();
168dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung            if (mQSBSearchBar != null) {
169324dbdd7a3d32b8c73d496111633cb3b843f4b16Michael Jurka                mQSBSearchBar.setAlpha(0f);
17019e3347e47f51367dc7ba1919eda6e87503b898eMichael Jurka            }
171f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung        }
172f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung        mIsSearchBarHidden = true;
173f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung    }
174f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung
175dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung    /**
176dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung     * Shows the drop target bar.
177f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung     */
178dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung    public void showDeleteTarget() {
179dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        // Animate out the QSB search bar, and animate in the drop target bar
180dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        prepareStartAnimation(mDropTargetBar);
181dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        mShowDropTargetBarAnim.start();
182dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        hideSearchBar(true);
183f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung    }
184dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung
185dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung    /**
186dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung     * Hides the drop target bar.
187dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung     */
188dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung    public void hideDeleteTarget() {
189dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        // Restore the QSB search bar, and animate out the drop target bar
190dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        prepareStartAnimation(mDropTargetBar);
191dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        mShowDropTargetBarAnim.reverse();
192dc61c4d41468a8beced2863de1b863b340cf49baWinson Chung        showSearchBar(true);
193f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung    }
194f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung
195f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung    /*
1964c98d9235d164680186180974719f551cf935d08Winson Chung     * DragController.DragListener implementation
1974c98d9235d164680186180974719f551cf935d08Winson Chung     */
1984c98d9235d164680186180974719f551cf935d08Winson Chung    @Override
1994c98d9235d164680186180974719f551cf935d08Winson Chung    public void onDragStart(DragSource source, Object info, int dragAction) {
200c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen        showDeleteTarget();
201c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen    }
202c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen
203d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen    public void deferOnDragEnd() {
204d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen        mDeferOnDragEnd = true;
205d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen    }
206d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen
2074c98d9235d164680186180974719f551cf935d08Winson Chung    @Override
2084c98d9235d164680186180974719f551cf935d08Winson Chung    public void onDragEnd() {
209d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen        if (!mDeferOnDragEnd) {
210c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen            hideDeleteTarget();
211d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen        } else {
212d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen            mDeferOnDragEnd = false;
213f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung        }
2144c98d9235d164680186180974719f551cf935d08Winson Chung    }
215c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung
216cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood    public Rect getSearchBarBounds() {
217cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood        if (mQSBSearchBar != null) {
218cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood            final int[] pos = new int[2];
219cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood            mQSBSearchBar.getLocationOnScreen(pos);
220cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood
221cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood            final Rect rect = new Rect();
222629758ff081a354e43aa409159211210ee4ee85aMichael Jurka            rect.left = pos[0];
223629758ff081a354e43aa409159211210ee4ee85aMichael Jurka            rect.top = pos[1];
224629758ff081a354e43aa409159211210ee4ee85aMichael Jurka            rect.right = pos[0] + mQSBSearchBar.getWidth();
225629758ff081a354e43aa409159211210ee4ee85aMichael Jurka            rect.bottom = pos[1] + mQSBSearchBar.getHeight();
226cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood            return rect;
227cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood        } else {
228cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood            return null;
229cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood        }
230cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood    }
2311a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal
2321a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal    public void enableAccessibleDrag(boolean enable) {
2331a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal        if (mQSBSearchBar != null) {
2341a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal            mQSBSearchBar.setVisibility(enable ? View.GONE : View.VISIBLE);
2351a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal        }
2361a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal        mInfoDropTarget.enableAccessibleDrag(enable);
2371a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal        mDeleteDropTarget.enableAccessibleDrag(enable);
2381a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal        mUninstallDropTarget.enableAccessibleDrag(enable);
2391a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal    }
2404c98d9235d164680186180974719f551cf935d08Winson Chung}
241