diff options
-rw-r--r-- | res/layout-land/search_bar.xml | 6 | ||||
-rw-r--r-- | res/layout-port/search_bar.xml | 10 | ||||
-rw-r--r-- | res/layout-sw600dp/search_bar.xml | 6 | ||||
-rw-r--r-- | src/com/android/launcher2/BubbleTextView.java | 6 | ||||
-rw-r--r-- | src/com/android/launcher2/HolographicImageView.java | 50 | ||||
-rw-r--r-- | src/com/android/launcher2/HolographicLinearLayout.java | 51 | ||||
-rw-r--r-- | src/com/android/launcher2/HolographicViewHelper.java | 73 |
7 files changed, 184 insertions, 18 deletions
diff --git a/res/layout-land/search_bar.xml b/res/layout-land/search_bar.xml index a1c87e4b2..c606173fd 100644 --- a/res/layout-land/search_bar.xml +++ b/res/layout-land/search_bar.xml @@ -20,14 +20,13 @@ android:layout_width="@dimen/qsb_bar_height" android:layout_height="match_parent"> <!-- Global search icon --> - <ImageView + <com.android.launcher2.HolographicImageView style="@style/SearchButton" android:id="@+id/search_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/ic_home_search_normal_holo" android:adjustViewBounds="true" - android:background="?android:attr/selectableItemBackground" android:onClick="onClickSearchButton" android:focusable="true" android:clickable="true" @@ -42,14 +41,13 @@ android:clickable="true" /> <!-- Voice search icon --> - <ImageView + <com.android.launcher2.HolographicImageView style="@style/SearchButton" android:id="@+id/voice_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/ic_home_voice_search_holo" android:adjustViewBounds="true" - android:background="?android:attr/selectableItemBackground" android:onClick="onClickVoiceButton" android:focusable="true" android:clickable="true" diff --git a/res/layout-port/search_bar.xml b/res/layout-port/search_bar.xml index 6b2c82794..5c20ec08e 100644 --- a/res/layout-port/search_bar.xml +++ b/res/layout-port/search_bar.xml @@ -22,7 +22,7 @@ android:layout_gravity="bottom|center_horizontal" android:background="@drawable/search_frame"> <!-- Global search icon --> - <LinearLayout + <com.android.launcher2.HolographicLinearLayout style="@style/SearchButton" android:id="@+id/search_button_container" android:layout_width="match_parent" @@ -30,7 +30,6 @@ android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_toLeftOf="@+id/voice_button_container" - android:background="?android:attr/selectableItemBackground" android:onClick="onClickSearchButton" android:focusable="true" android:clickable="true" @@ -41,10 +40,10 @@ android:layout_height="match_parent" android:src="@drawable/ic_home_search_normal_holo" android:adjustViewBounds="true" /> - </LinearLayout> + </com.android.launcher2.HolographicLinearLayout> <!-- Voice search icon --> - <LinearLayout + <com.android.launcher2.HolographicLinearLayout style="@style/SearchButton.Voice" android:id="@+id/voice_button_container" android:layout_width="@dimen/search_bar_height" @@ -52,7 +51,6 @@ android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:gravity="right" - android:background="?android:attr/selectableItemBackground" android:onClick="onClickVoiceButton" android:focusable="true" android:clickable="true" @@ -63,5 +61,5 @@ android:layout_height="match_parent" android:src="@drawable/ic_home_voice_search_holo" android:adjustViewBounds="true" /> - </LinearLayout> + </com.android.launcher2.HolographicLinearLayout> </RelativeLayout> diff --git a/res/layout-sw600dp/search_bar.xml b/res/layout-sw600dp/search_bar.xml index f8b950c59..d8975b440 100644 --- a/res/layout-sw600dp/search_bar.xml +++ b/res/layout-sw600dp/search_bar.xml @@ -20,7 +20,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Global search icon --> - <ImageView + <com.android.launcher2.HolographicImageView style="@style/SearchButton" android:id="@+id/search_button" android:layout_width="wrap_content" @@ -28,7 +28,6 @@ android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:src="@drawable/ic_home_search_normal_holo" - android:background="?android:attr/selectableItemBackground" android:onClick="onClickSearchButton" android:focusable="true" android:clickable="true" @@ -44,14 +43,13 @@ android:clickable="true" /> <!-- Voice search icon --> - <ImageView + <com.android.launcher2.HolographicImageView style="@style/SearchButton" android:id="@+id/voice_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/search_divider" android:src="@drawable/ic_home_voice_search_holo" - android:background="?android:attr/selectableItemBackground" android:onClick="onClickVoiceButton" android:focusable="true" android:clickable="true" diff --git a/src/com/android/launcher2/BubbleTextView.java b/src/com/android/launcher2/BubbleTextView.java index 51fdc2eb6..49c47cef7 100644 --- a/src/com/android/launcher2/BubbleTextView.java +++ b/src/com/android/launcher2/BubbleTextView.java @@ -90,10 +90,8 @@ public class BubbleTextView extends TextView { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(bubbleColor); mBubbleColorAlpha = Color.alpha(bubbleColor) / 255.0f; - mFocusedOutlineColor = res.getColor(android.R.color.holo_blue_light); - mFocusedGlowColor = res.getColor(android.R.color.holo_blue_light); - mPressedOutlineColor = res.getColor(android.R.color.holo_blue_light); - mPressedGlowColor = res.getColor(android.R.color.holo_blue_light); + mFocusedOutlineColor = mFocusedGlowColor = mPressedOutlineColor = mPressedGlowColor = + res.getColor(android.R.color.holo_blue_light); setShadowLayer(SHADOW_LARGE_RADIUS, 0.0f, SHADOW_Y_OFFSET, SHADOW_LARGE_COLOUR); } diff --git a/src/com/android/launcher2/HolographicImageView.java b/src/com/android/launcher2/HolographicImageView.java new file mode 100644 index 000000000..1d34cd6ba --- /dev/null +++ b/src/com/android/launcher2/HolographicImageView.java @@ -0,0 +1,50 @@ +/* + * 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.android.launcher2; + +import android.content.Context; +import android.graphics.Canvas; +import android.util.AttributeSet; +import android.widget.ImageView; + +public class HolographicImageView extends ImageView { + + private final HolographicViewHelper mHolographicHelper; + + public HolographicImageView(Context context) { + this(context, null); + } + + public HolographicImageView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public HolographicImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + mHolographicHelper = new HolographicViewHelper(context); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + // One time call to generate the pressed/focused state -- must be called after + // measure/layout + mHolographicHelper.generatePressedFocusedStates(this); + } +} diff --git a/src/com/android/launcher2/HolographicLinearLayout.java b/src/com/android/launcher2/HolographicLinearLayout.java new file mode 100644 index 000000000..986a063e5 --- /dev/null +++ b/src/com/android/launcher2/HolographicLinearLayout.java @@ -0,0 +1,51 @@ +/* + * 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.android.launcher2; + +import android.content.Context; +import android.graphics.Canvas; +import android.util.AttributeSet; +import android.widget.LinearLayout; + +public class HolographicLinearLayout extends LinearLayout { + + private final HolographicViewHelper mHolographicHelper; + + public HolographicLinearLayout(Context context) { + this(context, null); + } + + public HolographicLinearLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public HolographicLinearLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + setWillNotDraw(false); + mHolographicHelper = new HolographicViewHelper(context); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + // One time call to generate the pressed/focused state -- must be called after + // measure/layout + mHolographicHelper.generatePressedFocusedStates(this); + } +} diff --git a/src/com/android/launcher2/HolographicViewHelper.java b/src/com/android/launcher2/HolographicViewHelper.java new file mode 100644 index 000000000..c68a5eaad --- /dev/null +++ b/src/com/android/launcher2/HolographicViewHelper.java @@ -0,0 +1,73 @@ +/* + * 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.android.launcher2; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.drawable.StateListDrawable; +import android.view.View; + +public class HolographicViewHelper { + + private final HolographicOutlineHelper mOutlineHelper = new HolographicOutlineHelper(); + private final Canvas mTempCanvas = new Canvas(); + + private boolean mStatesUpdated; + private int mHighlightColor; + + public HolographicViewHelper(Context context) { + Resources res = context.getResources(); + mHighlightColor = res.getColor(android.R.color.holo_blue_light); + } + + /** + * Generate the pressed/focused states if necessary. + */ + void generatePressedFocusedStates(View v) { + if (!mStatesUpdated) { + mStatesUpdated = true; + Bitmap outline = createGlowingOutline(v, mTempCanvas, mHighlightColor, mHighlightColor); + FastBitmapDrawable d = new FastBitmapDrawable(outline); + + StateListDrawable states = new StateListDrawable(); + states.addState(new int[] {android.R.attr.state_pressed}, d); + states.addState(new int[] {android.R.attr.state_focused}, d); + v.setBackgroundDrawable(states); + } + } + + /** + * Returns a new bitmap to be used as the object outline, e.g. to visualize the drop location. + * Responsibility for the bitmap is transferred to the caller. + */ + private Bitmap createGlowingOutline(View v, Canvas canvas, int outlineColor, int glowColor) { + final int padding = HolographicOutlineHelper.MAX_OUTER_BLUR_RADIUS; + final Bitmap b = Bitmap.createBitmap( + v.getWidth() + padding, v.getHeight() + padding, Bitmap.Config.ARGB_8888); + + canvas.setBitmap(b); + canvas.save(); + v.draw(canvas); + canvas.restore(); + mOutlineHelper.applyOuterBlur(b, canvas, outlineColor); + canvas.setBitmap(null); + + return b; + } +} |