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