From bb185bdd57fcdb2c8ff9eee00347b116bab7db23 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Mon, 21 Nov 2011 12:31:42 -0800 Subject: Fixing an issue where qsb press states could be out of sync. (Bug 5627327) - Adding haptic feedback to qsb button clicks (Bug 5652304) Change-Id: I93d7c7a737f167d7ddf2b426d87e3a062feccac3 --- .../android/launcher2/HolographicImageView.java | 4 ++++ .../android/launcher2/HolographicLinearLayout.java | 4 ++++ .../android/launcher2/HolographicViewHelper.java | 16 ++++++++++++--- src/com/android/launcher2/Launcher.java | 24 +++++++++++++++++++--- 4 files changed, 42 insertions(+), 6 deletions(-) (limited to 'src/com/android/launcher2') diff --git a/src/com/android/launcher2/HolographicImageView.java b/src/com/android/launcher2/HolographicImageView.java index 1d34cd6ba..9e551e047 100644 --- a/src/com/android/launcher2/HolographicImageView.java +++ b/src/com/android/launcher2/HolographicImageView.java @@ -39,6 +39,10 @@ public class HolographicImageView extends ImageView { mHolographicHelper = new HolographicViewHelper(context); } + void invalidatePressedFocusedStates() { + mHolographicHelper.invalidatePressedFocusedStates(this); + } + @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); diff --git a/src/com/android/launcher2/HolographicLinearLayout.java b/src/com/android/launcher2/HolographicLinearLayout.java index c6a8d6aff..a40c727b5 100644 --- a/src/com/android/launcher2/HolographicLinearLayout.java +++ b/src/com/android/launcher2/HolographicLinearLayout.java @@ -66,6 +66,10 @@ public class HolographicLinearLayout extends LinearLayout { } } + void invalidatePressedFocusedStates() { + mHolographicHelper.invalidatePressedFocusedStates(mImageView); + } + @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); diff --git a/src/com/android/launcher2/HolographicViewHelper.java b/src/com/android/launcher2/HolographicViewHelper.java index 11e81b4d3..fd499082f 100644 --- a/src/com/android/launcher2/HolographicViewHelper.java +++ b/src/com/android/launcher2/HolographicViewHelper.java @@ -42,7 +42,7 @@ public class HolographicViewHelper { void generatePressedFocusedStates(ImageView v) { if (!mStatesUpdated && v != null) { mStatesUpdated = true; - Bitmap outline = createGlowingOutline(v, mTempCanvas); + Bitmap outline = createPressImage(v, mTempCanvas); FastBitmapDrawable d = new FastBitmapDrawable(outline); StateListDrawable states = new StateListDrawable(); @@ -54,10 +54,20 @@ public class HolographicViewHelper { } /** - * Returns a new bitmap to be used as the object outline, e.g. to visualize the drop location. + * Invalidates the pressed/focused states. + */ + void invalidatePressedFocusedStates(ImageView v) { + mStatesUpdated = false; + if (v != null) { + v.invalidate(); + } + } + + /** + * Creates a new press state image which is the old image with a blue overlay. * Responsibility for the bitmap is transferred to the caller. */ - private Bitmap createGlowingOutline(ImageView v, Canvas canvas) { + private Bitmap createPressImage(ImageView v, Canvas canvas) { final int padding = HolographicOutlineHelper.MAX_OUTER_BLUR_RADIUS; final Bitmap b = Bitmap.createBitmap( v.getWidth() + padding, v.getHeight() + padding, Bitmap.Config.ARGB_8888); diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index 43510c226..02a55a814 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -1709,6 +1709,8 @@ public final class Launcher extends Activity * @param v The view that was clicked. */ public void onClickSearchButton(View v) { + v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY); + onSearchRequested(); } @@ -1718,10 +1720,8 @@ public final class Launcher extends Activity * @param v The view that was clicked. */ public void onClickVoiceButton(View v) { - startVoiceSearch(); - } + v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY); - private void startVoiceSearch() { Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); startActivity(intent); @@ -2661,6 +2661,16 @@ public final class Launcher extends Activity button.setImageDrawable(d.newDrawable(getResources())); } + private void invalidatePressedFocusedStates(View container, View button) { + if (container instanceof HolographicLinearLayout) { + HolographicLinearLayout layout = (HolographicLinearLayout) container; + layout.invalidatePressedFocusedStates(); + } else if (button instanceof HolographicImageView) { + HolographicImageView view = (HolographicImageView) button; + view.invalidatePressedFocusedStates(); + } + } + private boolean updateGlobalSearchIcon() { final View searchButtonContainer = findViewById(R.id.search_button_container); final ImageView searchButton = (ImageView) findViewById(R.id.search_button); @@ -2678,6 +2688,7 @@ public final class Launcher extends Activity if (searchDivider != null) searchDivider.setVisibility(View.VISIBLE); if (searchButtonContainer != null) searchButtonContainer.setVisibility(View.VISIBLE); searchButton.setVisibility(View.VISIBLE); + invalidatePressedFocusedStates(searchButtonContainer, searchButton); return true; } else { // We disable both search and voice search when there is no global search provider @@ -2691,7 +2702,10 @@ public final class Launcher extends Activity } private void updateGlobalSearchIcon(Drawable.ConstantState d) { + final View searchButtonContainer = findViewById(R.id.search_button_container); + final View searchButton = (ImageView) findViewById(R.id.search_button); updateButtonWithDrawable(R.id.search_button, d); + invalidatePressedFocusedStates(searchButtonContainer, searchButton); } private boolean updateVoiceSearchIcon(boolean searchVisible) { @@ -2709,6 +2723,7 @@ public final class Launcher extends Activity if (searchDivider != null) searchDivider.setVisibility(View.VISIBLE); if (voiceButtonContainer != null) voiceButtonContainer.setVisibility(View.VISIBLE); voiceButton.setVisibility(View.VISIBLE); + invalidatePressedFocusedStates(voiceButtonContainer, voiceButton); return true; } else { if (searchDivider != null) searchDivider.setVisibility(View.GONE); @@ -2719,7 +2734,10 @@ public final class Launcher extends Activity } private void updateVoiceSearchIcon(Drawable.ConstantState d) { + final View voiceButtonContainer = findViewById(R.id.voice_button_container); + final View voiceButton = findViewById(R.id.voice_button); updateButtonWithDrawable(R.id.voice_button, d); + invalidatePressedFocusedStates(voiceButtonContainer, voiceButton); } /** -- cgit v1.2.3