diff options
-rw-r--r-- | res/drawable-xlarge-hdpi/home_press.9.png | bin | 0 -> 2868 bytes | |||
-rw-r--r-- | res/drawable-xlarge-hdpi/ic_voice_search.png | bin | 0 -> 2070 bytes | |||
-rw-r--r-- | res/drawable-xlarge-hdpi/textfield_end.9.png | bin | 0 -> 2950 bytes | |||
-rw-r--r-- | res/drawable-xlarge-hdpi/textfield_start.9.png | bin | 0 -> 3049 bytes | |||
-rw-r--r-- | res/drawable-xlarge-mdpi/home_press.9.png | bin | 0 -> 2846 bytes | |||
-rw-r--r-- | res/drawable-xlarge-mdpi/ic_voice_search.png | bin | 0 -> 1980 bytes | |||
-rw-r--r-- | res/drawable-xlarge-mdpi/textfield_end.9.png | bin | 0 -> 2926 bytes | |||
-rw-r--r-- | res/drawable-xlarge-mdpi/textfield_start.9.png | bin | 0 -> 2958 bytes | |||
-rw-r--r-- | res/drawable-xlarge/button_bg.xml | 20 | ||||
-rw-r--r-- | res/layout-xlarge-land/launcher.xml | 56 | ||||
-rw-r--r-- | res/layout-xlarge-port/launcher.xml | 56 | ||||
-rw-r--r-- | src/com/android/launcher2/Launcher.java | 55 |
12 files changed, 160 insertions, 27 deletions
diff --git a/res/drawable-xlarge-hdpi/home_press.9.png b/res/drawable-xlarge-hdpi/home_press.9.png Binary files differnew file mode 100644 index 000000000..4beec621d --- /dev/null +++ b/res/drawable-xlarge-hdpi/home_press.9.png diff --git a/res/drawable-xlarge-hdpi/ic_voice_search.png b/res/drawable-xlarge-hdpi/ic_voice_search.png Binary files differnew file mode 100644 index 000000000..66d14aec0 --- /dev/null +++ b/res/drawable-xlarge-hdpi/ic_voice_search.png diff --git a/res/drawable-xlarge-hdpi/textfield_end.9.png b/res/drawable-xlarge-hdpi/textfield_end.9.png Binary files differnew file mode 100644 index 000000000..be1b2b684 --- /dev/null +++ b/res/drawable-xlarge-hdpi/textfield_end.9.png diff --git a/res/drawable-xlarge-hdpi/textfield_start.9.png b/res/drawable-xlarge-hdpi/textfield_start.9.png Binary files differnew file mode 100644 index 000000000..6b5ebe2d6 --- /dev/null +++ b/res/drawable-xlarge-hdpi/textfield_start.9.png diff --git a/res/drawable-xlarge-mdpi/home_press.9.png b/res/drawable-xlarge-mdpi/home_press.9.png Binary files differnew file mode 100644 index 000000000..ff841c397 --- /dev/null +++ b/res/drawable-xlarge-mdpi/home_press.9.png diff --git a/res/drawable-xlarge-mdpi/ic_voice_search.png b/res/drawable-xlarge-mdpi/ic_voice_search.png Binary files differnew file mode 100644 index 000000000..a2fe87452 --- /dev/null +++ b/res/drawable-xlarge-mdpi/ic_voice_search.png diff --git a/res/drawable-xlarge-mdpi/textfield_end.9.png b/res/drawable-xlarge-mdpi/textfield_end.9.png Binary files differnew file mode 100644 index 000000000..94706b4ef --- /dev/null +++ b/res/drawable-xlarge-mdpi/textfield_end.9.png diff --git a/res/drawable-xlarge-mdpi/textfield_start.9.png b/res/drawable-xlarge-mdpi/textfield_start.9.png Binary files differnew file mode 100644 index 000000000..8cddc3499 --- /dev/null +++ b/res/drawable-xlarge-mdpi/textfield_start.9.png diff --git a/res/drawable-xlarge/button_bg.xml b/res/drawable-xlarge/button_bg.xml new file mode 100644 index 000000000..9e6e1ff23 --- /dev/null +++ b/res/drawable-xlarge/button_bg.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2010 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. +--> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_pressed="true" android:drawable="@drawable/home_press" /> + <item android:drawable="@android:color/transparent" /> +</selector> diff --git a/res/layout-xlarge-land/launcher.xml b/res/layout-xlarge-land/launcher.xml index 8e6f1fe4b..7516796f7 100644 --- a/res/layout-xlarge-land/launcher.xml +++ b/res/layout-xlarge-land/launcher.xml @@ -54,16 +54,54 @@ android:layout_height="?android:attr/actionBarSize" android:layout_gravity="top"> - <ImageView - android:id="@+id/search_button" + <LinearLayout android:id="@+id/search_button_cluster" android:layout_width="wrap_content" - android:layout_height="match_parent" - android:layout_gravity="left" - android:layout_marginLeft="@dimen/toolbar_button_spacing" - - android:onClick="onClickSearchButton" - android:focusable="true" - android:clickable="true"/> + android:layout_height="48dp" + android:gravity="bottom" + > + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:layout_marginLeft="16dp" + android:background="@drawable/textfield_start" + android:orientation="horizontal"> + <!-- Global search icon --> + <ImageView + android:id="@+id/search_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:paddingTop="12dp" + android:src="@drawable/search_button_generic" + android:background="@drawable/button_bg" + android:onClick="onClickSearchButton" + android:focusable="true" + android:clickable="true"/> + </LinearLayout> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:background="@drawable/textfield_end" + android:orientation="horizontal"> + <!-- Voice search icon --> + <ImageView + android:id="@+id/voice_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:paddingTop="12dp" + android:src="@drawable/ic_voice_search" + android:background="@drawable/button_bg" + android:onClick="onClickVoiceButton" + android:focusable="true" + android:clickable="true"/> + </LinearLayout> + </LinearLayout> <ImageView android:id="@+id/configure_button" diff --git a/res/layout-xlarge-port/launcher.xml b/res/layout-xlarge-port/launcher.xml index a6fff4a58..c2ca4679c 100644 --- a/res/layout-xlarge-port/launcher.xml +++ b/res/layout-xlarge-port/launcher.xml @@ -54,16 +54,54 @@ android:layout_height="?android:attr/actionBarSize" android:layout_gravity="top"> - <ImageView - android:id="@+id/search_button" + <LinearLayout android:id="@+id/search_button_cluster" android:layout_width="wrap_content" - android:layout_height="match_parent" - android:layout_gravity="left" - android:layout_marginLeft="@dimen/toolbar_button_spacing" - - android:onClick="onClickSearchButton" - android:focusable="true" - android:clickable="true"/> + android:layout_height="48dp" + android:gravity="bottom" + > + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:layout_marginLeft="16dp" + android:background="@drawable/textfield_start" + android:orientation="horizontal"> + <!-- Global search icon --> + <ImageView + android:id="@+id/search_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:paddingTop="12dp" + android:src="@drawable/search_button_generic" + android:background="@drawable/button_bg" + android:onClick="onClickSearchButton" + android:focusable="true" + android:clickable="true"/> + </LinearLayout> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:background="@drawable/textfield_end" + android:orientation="horizontal"> + <!-- Voice search icon --> + <ImageView + android:id="@+id/voice_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:paddingTop="12dp" + android:src="@drawable/ic_voice_search" + android:background="@drawable/button_bg" + android:onClick="onClickVoiceButton" + android:focusable="true" + android:clickable="true"/> + </LinearLayout> + </LinearLayout> <ImageView android:id="@+id/configure_button" diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index 9954f39d5..55a617678 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -73,6 +73,7 @@ import android.os.SystemClock; import android.os.SystemProperties; import android.provider.LiveFolders; import android.provider.Settings; +import android.speech.RecognizerIntent; import android.text.Selection; import android.text.SpannableStringBuilder; import android.text.TextUtils; @@ -1925,6 +1926,21 @@ public final class Launcher extends Activity } /** + * Event handler for the voice button + * + * @param v The view that was clicked. + */ + public void onClickVoiceButton(View v) { + startVoiceSearch(); + } + + private void startVoiceSearch() { + Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } + + /** * Event handler for the "gear" button that appears on the home screen, which * enters home screen customization mode. * @@ -2477,7 +2493,7 @@ public final class Launcher extends Activity * @param hideSeq AnimatorSet in which to put "hide" animations, or null. */ private void hideAndShowToolbarButtons(State newState, AnimatorSet showSeq, AnimatorSet hideSeq) { - final View searchButton = findViewById(R.id.search_button); + final View searchButton = findViewById(R.id.search_button_cluster); final View allAppsButton = findViewById(R.id.all_apps_button); final View configureButton = findViewById(R.id.configure_button); @@ -2898,6 +2914,21 @@ public final class Launcher extends Activity if (activityName != null) { updateButtonWithIconFromExternalActivity( R.id.search_button, activityName, R.drawable.search_button_generic); + } else { + findViewById(R.id.search_button).setVisibility(View.GONE); + } + } + } + + private void updateVoiceSearchIcon() { + if (LauncherApplication.isScreenXLarge()) { + Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH); + ComponentName activityName = intent.resolveActivity(getPackageManager()); + if (activityName != null) { + updateButtonWithIconFromExternalActivity( + R.id.voice_button, activityName, R.drawable.ic_voice_search); + } else { + findViewById(R.id.voice_button).setVisibility(View.GONE); } } } @@ -3249,6 +3280,16 @@ public final class Launcher extends Activity } /** + * Updates the icons on the launcher that are affected by changes to the package list + * on the device. + */ + private void updateIconsAffectedByPackageManagerChanges() { + updateAppMarketIcon(); + updateGlobalSearchIcon(); + updateVoiceSearchIcon(); + } + + /** * Add the icons for all apps. * * Implementation of the method from LauncherModel.Callbacks. @@ -3258,8 +3299,7 @@ public final class Launcher extends Activity if (mCustomizePagedView != null) { mCustomizePagedView.setApps(apps); } - updateAppMarketIcon(); - updateGlobalSearchIcon(); + updateIconsAffectedByPackageManagerChanges(); } /** @@ -3274,8 +3314,7 @@ public final class Launcher extends Activity if (mCustomizePagedView != null) { mCustomizePagedView.addApps(apps); } - updateAppMarketIcon(); - updateGlobalSearchIcon(); + updateIconsAffectedByPackageManagerChanges(); } /** @@ -3291,8 +3330,7 @@ public final class Launcher extends Activity if (mCustomizePagedView != null) { mCustomizePagedView.updateApps(apps); } - updateAppMarketIcon(); - updateGlobalSearchIcon(); + updateIconsAffectedByPackageManagerChanges(); } /** @@ -3309,8 +3347,7 @@ public final class Launcher extends Activity if (mCustomizePagedView != null) { mCustomizePagedView.removeApps(apps); } - updateAppMarketIcon(); - updateGlobalSearchIcon(); + updateIconsAffectedByPackageManagerChanges(); } /** |