SearchDropTargetBar.java revision 325dc23624160689e59fbac708cf6f222b20d025
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; 224c98d9235d164680186180974719f551cf935d08Winson Chungimport android.content.Context; 23cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwoodimport android.graphics.Rect; 24c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chungimport android.graphics.drawable.Drawable; 254c98d9235d164680186180974719f551cf935d08Winson Chungimport android.util.AttributeSet; 264c98d9235d164680186180974719f551cf935d08Winson Chungimport android.view.View; 27a62e9fd95ae10cff4676f2cc1f4d68334ca27a0bWinson Chungimport android.view.animation.AccelerateInterpolator; 284c98d9235d164680186180974719f551cf935d08Winson Chungimport android.widget.FrameLayout; 294c98d9235d164680186180974719f551cf935d08Winson Chung 30325dc23624160689e59fbac708cf6f222b20d025Daniel Sandlerimport com.android.launcher3.R; 314c98d9235d164680186180974719f551cf935d08Winson Chung 324c98d9235d164680186180974719f551cf935d08Winson Chung/* 334c98d9235d164680186180974719f551cf935d08Winson Chung * Ths bar will manage the transition between the QSB search bar and the delete drop 344c98d9235d164680186180974719f551cf935d08Winson Chung * targets so that each of the individual IconDropTargets don't have to. 354c98d9235d164680186180974719f551cf935d08Winson Chung */ 364c98d9235d164680186180974719f551cf935d08Winson Chungpublic class SearchDropTargetBar extends FrameLayout implements DragController.DragListener { 374c98d9235d164680186180974719f551cf935d08Winson Chung 38a62e9fd95ae10cff4676f2cc1f4d68334ca27a0bWinson Chung private static final int sTransitionInDuration = 200; 39a62e9fd95ae10cff4676f2cc1f4d68334ca27a0bWinson Chung private static final int sTransitionOutDuration = 175; 404c98d9235d164680186180974719f551cf935d08Winson Chung 4117f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung private ObjectAnimator mDropTargetBarAnim; 4217f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung private ObjectAnimator mQSBSearchBarAnim; 4317f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung private static final AccelerateInterpolator sAccelerateInterpolator = 4417f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung new AccelerateInterpolator(); 45201bc828d5a0078f505e8e37152156a0cb43c10aWinson Chung 46f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung private boolean mIsSearchBarHidden; 474c98d9235d164680186180974719f551cf935d08Winson Chung private View mQSBSearchBar; 484c98d9235d164680186180974719f551cf935d08Winson Chung private View mDropTargetBar; 4961fa4197c4316bb0f9b05fcefb676f86197a2273Winson Chung private ButtonDropTarget mInfoDropTarget; 5061fa4197c4316bb0f9b05fcefb676f86197a2273Winson Chung private ButtonDropTarget mDeleteDropTarget; 51a62e9fd95ae10cff4676f2cc1f4d68334ca27a0bWinson Chung private int mBarHeight; 52d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen private boolean mDeferOnDragEnd = false; 534c98d9235d164680186180974719f551cf935d08Winson Chung 54c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung private Drawable mPreviousBackground; 5519e3347e47f51367dc7ba1919eda6e87503b898eMichael Jurka private boolean mEnableDropDownDropTargets; 56c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung 574c98d9235d164680186180974719f551cf935d08Winson Chung public SearchDropTargetBar(Context context, AttributeSet attrs) { 584c98d9235d164680186180974719f551cf935d08Winson Chung this(context, attrs, 0); 594c98d9235d164680186180974719f551cf935d08Winson Chung } 604c98d9235d164680186180974719f551cf935d08Winson Chung 614c98d9235d164680186180974719f551cf935d08Winson Chung public SearchDropTargetBar(Context context, AttributeSet attrs, int defStyle) { 624c98d9235d164680186180974719f551cf935d08Winson Chung super(context, attrs, defStyle); 634c98d9235d164680186180974719f551cf935d08Winson Chung } 644c98d9235d164680186180974719f551cf935d08Winson Chung 654c98d9235d164680186180974719f551cf935d08Winson Chung public void setup(Launcher launcher, DragController dragController) { 664c98d9235d164680186180974719f551cf935d08Winson Chung dragController.addDragListener(this); 674c98d9235d164680186180974719f551cf935d08Winson Chung dragController.addDragListener(mInfoDropTarget); 684c98d9235d164680186180974719f551cf935d08Winson Chung dragController.addDragListener(mDeleteDropTarget); 694c98d9235d164680186180974719f551cf935d08Winson Chung dragController.addDropTarget(mInfoDropTarget); 704c98d9235d164680186180974719f551cf935d08Winson Chung dragController.addDropTarget(mDeleteDropTarget); 71043f2af567178b82b0b41f12d379e7dd12da2936Winson Chung dragController.setFlingToDeleteDropTarget(mDeleteDropTarget); 724c98d9235d164680186180974719f551cf935d08Winson Chung mInfoDropTarget.setLauncher(launcher); 734c98d9235d164680186180974719f551cf935d08Winson Chung mDeleteDropTarget.setLauncher(launcher); 744c98d9235d164680186180974719f551cf935d08Winson Chung } 754c98d9235d164680186180974719f551cf935d08Winson Chung 76c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung private void prepareStartAnimation(View v) { 7717f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung // Enable the hw layers before the animation starts (will be disabled in the onAnimationEnd 7817f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung // callback below) 79c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung v.setLayerType(View.LAYER_TYPE_HARDWARE, null); 80c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung } 81c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung 8217f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung private void setupAnimation(ObjectAnimator anim, final View v) { 8317f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung anim.setInterpolator(sAccelerateInterpolator); 8417f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung anim.setDuration(sTransitionInDuration); 8517f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung anim.addListener(new AnimatorListenerAdapter() { 86315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung @Override 87315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung public void onAnimationEnd(Animator animation) { 88315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung v.setLayerType(View.LAYER_TYPE_NONE, null); 89315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung } 90315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung }); 91315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung } 92315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung 934c98d9235d164680186180974719f551cf935d08Winson Chung @Override 944c98d9235d164680186180974719f551cf935d08Winson Chung protected void onFinishInflate() { 954c98d9235d164680186180974719f551cf935d08Winson Chung super.onFinishInflate(); 964c98d9235d164680186180974719f551cf935d08Winson Chung 974c98d9235d164680186180974719f551cf935d08Winson Chung // Get the individual components 984c98d9235d164680186180974719f551cf935d08Winson Chung mQSBSearchBar = findViewById(R.id.qsb_search_bar); 994c98d9235d164680186180974719f551cf935d08Winson Chung mDropTargetBar = findViewById(R.id.drag_target_bar); 100a6427b15c18d5b8f3078f553d78f8432de9f46e9Winson Chung mInfoDropTarget = (ButtonDropTarget) mDropTargetBar.findViewById(R.id.info_target_text); 101a6427b15c18d5b8f3078f553d78f8432de9f46e9Winson Chung mDeleteDropTarget = (ButtonDropTarget) mDropTargetBar.findViewById(R.id.delete_target_text); 102a62e9fd95ae10cff4676f2cc1f4d68334ca27a0bWinson Chung mBarHeight = getResources().getDimensionPixelSize(R.dimen.qsb_bar_height); 103a62e9fd95ae10cff4676f2cc1f4d68334ca27a0bWinson Chung 104d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen mInfoDropTarget.setSearchDropTargetBar(this); 105d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen mDeleteDropTarget.setSearchDropTargetBar(this); 106d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen 10719e3347e47f51367dc7ba1919eda6e87503b898eMichael Jurka mEnableDropDownDropTargets = 108a62e9fd95ae10cff4676f2cc1f4d68334ca27a0bWinson Chung getResources().getBoolean(R.bool.config_useDropTargetDownTransition); 109201bc828d5a0078f505e8e37152156a0cb43c10aWinson Chung 110201bc828d5a0078f505e8e37152156a0cb43c10aWinson Chung // Create the various fade animations 11119e3347e47f51367dc7ba1919eda6e87503b898eMichael Jurka if (mEnableDropDownDropTargets) { 112a62e9fd95ae10cff4676f2cc1f4d68334ca27a0bWinson Chung mDropTargetBar.setTranslationY(-mBarHeight); 1132ecf995e0d2d55eb71d03f7230ca87270872d1a3Michael Jurka mDropTargetBarAnim = LauncherAnimUtils.ofFloat(mDropTargetBar, "translationY", 11417f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung -mBarHeight, 0f); 1152ecf995e0d2d55eb71d03f7230ca87270872d1a3Michael Jurka mQSBSearchBarAnim = LauncherAnimUtils.ofFloat(mQSBSearchBar, "translationY", 0, 116315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung -mBarHeight); 117315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung } else { 118315b3ba6f1174f71b321301afa61cd826f7a1e97Winson Chung mDropTargetBar.setAlpha(0f); 1192ecf995e0d2d55eb71d03f7230ca87270872d1a3Michael Jurka mDropTargetBarAnim = LauncherAnimUtils.ofFloat(mDropTargetBar, "alpha", 0f, 1f); 1202ecf995e0d2d55eb71d03f7230ca87270872d1a3Michael Jurka mQSBSearchBarAnim = LauncherAnimUtils.ofFloat(mQSBSearchBar, "alpha", 1f, 0f); 121a62e9fd95ae10cff4676f2cc1f4d68334ca27a0bWinson Chung } 12217f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung setupAnimation(mDropTargetBarAnim, mDropTargetBar); 12317f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung setupAnimation(mQSBSearchBarAnim, mQSBSearchBar); 124201bc828d5a0078f505e8e37152156a0cb43c10aWinson Chung } 125201bc828d5a0078f505e8e37152156a0cb43c10aWinson Chung 126043f2af567178b82b0b41f12d379e7dd12da2936Winson Chung public void finishAnimations() { 12717f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung prepareStartAnimation(mDropTargetBar); 12817f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung mDropTargetBarAnim.reverse(); 12917f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung prepareStartAnimation(mQSBSearchBar); 13017f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung mQSBSearchBarAnim.reverse(); 1314c98d9235d164680186180974719f551cf935d08Winson Chung } 1324c98d9235d164680186180974719f551cf935d08Winson Chung 1334c98d9235d164680186180974719f551cf935d08Winson Chung /* 134f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung * Shows and hides the search bar. 135f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung */ 136f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung public void showSearchBar(boolean animated) { 13717f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung if (!mIsSearchBarHidden) return; 138f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung if (animated) { 139c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung prepareStartAnimation(mQSBSearchBar); 14017f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung mQSBSearchBarAnim.reverse(); 141f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung } else { 14217f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung mQSBSearchBarAnim.cancel(); 14319e3347e47f51367dc7ba1919eda6e87503b898eMichael Jurka if (mEnableDropDownDropTargets) { 14419e3347e47f51367dc7ba1919eda6e87503b898eMichael Jurka mQSBSearchBar.setTranslationY(0); 14519e3347e47f51367dc7ba1919eda6e87503b898eMichael Jurka } else { 146324dbdd7a3d32b8c73d496111633cb3b843f4b16Michael Jurka mQSBSearchBar.setAlpha(1f); 14719e3347e47f51367dc7ba1919eda6e87503b898eMichael Jurka } 148f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung } 149f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung mIsSearchBarHidden = false; 150f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung } 151f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung public void hideSearchBar(boolean animated) { 15217f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung if (mIsSearchBarHidden) return; 153f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung if (animated) { 154c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung prepareStartAnimation(mQSBSearchBar); 15517f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung mQSBSearchBarAnim.start(); 156f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung } else { 15717f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung mQSBSearchBarAnim.cancel(); 15819e3347e47f51367dc7ba1919eda6e87503b898eMichael Jurka if (mEnableDropDownDropTargets) { 15917f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung mQSBSearchBar.setTranslationY(-mBarHeight); 16019e3347e47f51367dc7ba1919eda6e87503b898eMichael Jurka } else { 161324dbdd7a3d32b8c73d496111633cb3b843f4b16Michael Jurka mQSBSearchBar.setAlpha(0f); 16219e3347e47f51367dc7ba1919eda6e87503b898eMichael Jurka } 163f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung } 164f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung mIsSearchBarHidden = true; 165f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung } 166f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung 167f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung /* 168f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung * Gets various transition durations. 169f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung */ 170f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung public int getTransitionInDuration() { 171f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung return sTransitionInDuration; 172f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung } 173f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung public int getTransitionOutDuration() { 174f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung return sTransitionOutDuration; 175f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung } 176f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung 177f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung /* 1784c98d9235d164680186180974719f551cf935d08Winson Chung * DragController.DragListener implementation 1794c98d9235d164680186180974719f551cf935d08Winson Chung */ 1804c98d9235d164680186180974719f551cf935d08Winson Chung @Override 1814c98d9235d164680186180974719f551cf935d08Winson Chung public void onDragStart(DragSource source, Object info, int dragAction) { 1824c98d9235d164680186180974719f551cf935d08Winson Chung // Animate out the QSB search bar, and animate in the drop target bar 183c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung prepareStartAnimation(mDropTargetBar); 18417f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung mDropTargetBarAnim.start(); 185f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung if (!mIsSearchBarHidden) { 186c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung prepareStartAnimation(mQSBSearchBar); 18717f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung mQSBSearchBarAnim.start(); 188f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung } 1894c98d9235d164680186180974719f551cf935d08Winson Chung } 1904c98d9235d164680186180974719f551cf935d08Winson Chung 191d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen public void deferOnDragEnd() { 192d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen mDeferOnDragEnd = true; 193d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen } 194d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen 1954c98d9235d164680186180974719f551cf935d08Winson Chung @Override 1964c98d9235d164680186180974719f551cf935d08Winson Chung public void onDragEnd() { 197d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen if (!mDeferOnDragEnd) { 198d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen // Restore the QSB search bar, and animate out the drop target bar 199c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung prepareStartAnimation(mDropTargetBar); 20017f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung mDropTargetBarAnim.reverse(); 201d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen if (!mIsSearchBarHidden) { 202c7d2b60ab1db9a478f173d045b9f501d994eb8b1Winson Chung prepareStartAnimation(mQSBSearchBar); 20317f1bb8ec9180cc3ee3f8b343b3b0d247c8d7bb7Winson Chung mQSBSearchBarAnim.reverse(); 204d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen } 205d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen } else { 206d4d7aa551ffdc80d810ff970fa72a6509960401eAdam Cohen mDeferOnDragEnd = false; 207f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung } 2084c98d9235d164680186180974719f551cf935d08Winson Chung } 209c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung 210c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung public void onSearchPackagesChanged(boolean searchVisible, boolean voiceVisible) { 211c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung if (mQSBSearchBar != null) { 212c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung Drawable bg = mQSBSearchBar.getBackground(); 213c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung if (bg != null && (!searchVisible && !voiceVisible)) { 214c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung // Save the background and disable it 215c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung mPreviousBackground = bg; 216c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung mQSBSearchBar.setBackgroundResource(0); 217c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung } else if (mPreviousBackground != null && (searchVisible || voiceVisible)) { 218c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung // Restore the background 2193a9fcedbcd235372cd2ab64f825a0b5b3937f59eMichael Jurka mQSBSearchBar.setBackground(mPreviousBackground); 220c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung } 221c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung } 222c51db6accf2fdcb15d6361a38b176534e3d2cca5Winson Chung } 223cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood 224cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood public Rect getSearchBarBounds() { 225cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood if (mQSBSearchBar != null) { 226cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood final int[] pos = new int[2]; 227cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood mQSBSearchBar.getLocationOnScreen(pos); 228cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood 229cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood final Rect rect = new Rect(); 230629758ff081a354e43aa409159211210ee4ee85aMichael Jurka rect.left = pos[0]; 231629758ff081a354e43aa409159211210ee4ee85aMichael Jurka rect.top = pos[1]; 232629758ff081a354e43aa409159211210ee4ee85aMichael Jurka rect.right = pos[0] + mQSBSearchBar.getWidth(); 233629758ff081a354e43aa409159211210ee4ee85aMichael Jurka rect.bottom = pos[1] + mQSBSearchBar.getHeight(); 234cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood return rect; 235cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood } else { 236cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood return null; 237cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood } 238cf7f63bb4dcc152ba7977fc7499081d651a4313aMathew Inwood } 2394c98d9235d164680186180974719f551cf935d08Winson Chung} 240