summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/drawable-xlarge-hdpi/home_press.9.pngbin0 -> 2868 bytes
-rw-r--r--res/drawable-xlarge-hdpi/ic_voice_search.pngbin0 -> 2070 bytes
-rw-r--r--res/drawable-xlarge-hdpi/textfield_end.9.pngbin0 -> 2950 bytes
-rw-r--r--res/drawable-xlarge-hdpi/textfield_start.9.pngbin0 -> 3049 bytes
-rw-r--r--res/drawable-xlarge-mdpi/home_press.9.pngbin0 -> 2846 bytes
-rw-r--r--res/drawable-xlarge-mdpi/ic_voice_search.pngbin0 -> 1980 bytes
-rw-r--r--res/drawable-xlarge-mdpi/textfield_end.9.pngbin0 -> 2926 bytes
-rw-r--r--res/drawable-xlarge-mdpi/textfield_start.9.pngbin0 -> 2958 bytes
-rw-r--r--res/drawable-xlarge/button_bg.xml20
-rw-r--r--res/layout-xlarge-land/launcher.xml56
-rw-r--r--res/layout-xlarge-port/launcher.xml56
-rw-r--r--src/com/android/launcher2/Launcher.java55
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
new file mode 100644
index 000000000..4beec621d
--- /dev/null
+++ b/res/drawable-xlarge-hdpi/home_press.9.png
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/ic_voice_search.png b/res/drawable-xlarge-hdpi/ic_voice_search.png
new file mode 100644
index 000000000..66d14aec0
--- /dev/null
+++ b/res/drawable-xlarge-hdpi/ic_voice_search.png
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/textfield_end.9.png b/res/drawable-xlarge-hdpi/textfield_end.9.png
new file mode 100644
index 000000000..be1b2b684
--- /dev/null
+++ b/res/drawable-xlarge-hdpi/textfield_end.9.png
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/textfield_start.9.png b/res/drawable-xlarge-hdpi/textfield_start.9.png
new file mode 100644
index 000000000..6b5ebe2d6
--- /dev/null
+++ b/res/drawable-xlarge-hdpi/textfield_start.9.png
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/home_press.9.png b/res/drawable-xlarge-mdpi/home_press.9.png
new file mode 100644
index 000000000..ff841c397
--- /dev/null
+++ b/res/drawable-xlarge-mdpi/home_press.9.png
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/ic_voice_search.png b/res/drawable-xlarge-mdpi/ic_voice_search.png
new file mode 100644
index 000000000..a2fe87452
--- /dev/null
+++ b/res/drawable-xlarge-mdpi/ic_voice_search.png
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/textfield_end.9.png b/res/drawable-xlarge-mdpi/textfield_end.9.png
new file mode 100644
index 000000000..94706b4ef
--- /dev/null
+++ b/res/drawable-xlarge-mdpi/textfield_end.9.png
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/textfield_start.9.png b/res/drawable-xlarge-mdpi/textfield_start.9.png
new file mode 100644
index 000000000..8cddc3499
--- /dev/null
+++ b/res/drawable-xlarge-mdpi/textfield_start.9.png
Binary files differ
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();
}
/**