merge in ub-now-queens-release history after reset to 0e974b4d4480242c768cbd886d02ea66c0c8643d
diff --git a/res/drawable-hdpi/ic_home_search_normal_holo.png b/res/drawable-hdpi/ic_home_search_normal_holo.png
deleted file mode 100644
index 3f64d68..0000000
--- a/res/drawable-hdpi/ic_home_search_normal_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_home_voice_search_holo.png b/res/drawable-hdpi/ic_home_voice_search_holo.png
deleted file mode 100644
index dae5446..0000000
--- a/res/drawable-hdpi/ic_home_voice_search_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/search_frame.9.png b/res/drawable-hdpi/search_frame.9.png
deleted file mode 100644
index 15ca1f4..0000000
--- a/res/drawable-hdpi/search_frame.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-land-hdpi/ic_home_voice_search_holo.png b/res/drawable-land-hdpi/ic_home_voice_search_holo.png
deleted file mode 100644
index 5a7fc99..0000000
--- a/res/drawable-land-hdpi/ic_home_voice_search_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-land-mdpi/ic_home_voice_search_holo.png b/res/drawable-land-mdpi/ic_home_voice_search_holo.png
deleted file mode 100644
index ee7dde5..0000000
--- a/res/drawable-land-mdpi/ic_home_voice_search_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-land-xhdpi/ic_home_voice_search_holo.png b/res/drawable-land-xhdpi/ic_home_voice_search_holo.png
deleted file mode 100644
index 56bbbbb..0000000
--- a/res/drawable-land-xhdpi/ic_home_voice_search_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-land-xxhdpi/ic_home_voice_search_holo.png b/res/drawable-land-xxhdpi/ic_home_voice_search_holo.png
deleted file mode 100644
index 6ea7368..0000000
--- a/res/drawable-land-xxhdpi/ic_home_voice_search_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_home_search_normal_holo.png b/res/drawable-mdpi/ic_home_search_normal_holo.png
deleted file mode 100644
index 7367c38..0000000
--- a/res/drawable-mdpi/ic_home_search_normal_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_home_voice_search_holo.png b/res/drawable-mdpi/ic_home_voice_search_holo.png
deleted file mode 100644
index f211a7b..0000000
--- a/res/drawable-mdpi/ic_home_voice_search_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/search_frame.9.png b/res/drawable-mdpi/search_frame.9.png
deleted file mode 100644
index 058905b..0000000
--- a/res/drawable-mdpi/search_frame.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_home_search_normal_holo.png b/res/drawable-xhdpi/ic_home_search_normal_holo.png
deleted file mode 100644
index 0fe1cd1..0000000
--- a/res/drawable-xhdpi/ic_home_search_normal_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_home_voice_search_holo.png b/res/drawable-xhdpi/ic_home_voice_search_holo.png
deleted file mode 100644
index 1fc5cc8..0000000
--- a/res/drawable-xhdpi/ic_home_voice_search_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/search_frame.9.png b/res/drawable-xhdpi/search_frame.9.png
deleted file mode 100644
index 32a0714..0000000
--- a/res/drawable-xhdpi/search_frame.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_home_search_normal_holo.png b/res/drawable-xxhdpi/ic_home_search_normal_holo.png
deleted file mode 100644
index a9523d3..0000000
--- a/res/drawable-xxhdpi/ic_home_search_normal_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_home_voice_search_holo.png b/res/drawable-xxhdpi/ic_home_voice_search_holo.png
deleted file mode 100644
index c9c0b50..0000000
--- a/res/drawable-xxhdpi/ic_home_voice_search_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/search_bg_panel.9.png b/res/drawable-xxhdpi/search_bg_panel.9.png
deleted file mode 100644
index 85cae17..0000000
--- a/res/drawable-xxhdpi/search_bg_panel.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/search_frame.9.png b/res/drawable-xxhdpi/search_frame.9.png
deleted file mode 100644
index f297bf1..0000000
--- a/res/drawable-xxhdpi/search_frame.9.png
+++ /dev/null
Binary files differ
diff --git a/res/layout-land/qsb.xml b/res/layout-land/qsb.xml
deleted file mode 100644
index d56e380..0000000
--- a/res/layout-land/qsb.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <!-- Global search icon -->
- <com.android.launcher3.HolographicImageView
- style="@style/SearchButton"
- android:id="@+id/search_button"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:scaleType="center"
- android:src="@drawable/ic_home_search_normal_holo"
- android:adjustViewBounds="true"
- android:onClick="onClickSearchButton"
- android:focusable="true"
- android:clickable="true"
- android:contentDescription="@string/accessibility_search_button" />
-
- <!-- Voice search icon -->
- <com.android.launcher3.HolographicImageView
- style="@style/SearchButton"
- android:id="@+id/voice_button"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:scaleType="center"
- android:src="@drawable/ic_home_voice_search_holo"
- android:adjustViewBounds="true"
- android:onClick="onClickVoiceButton"
- android:focusable="true"
- android:clickable="true"
- android:contentDescription="@string/accessibility_voice_search_button" />
-</LinearLayout>
diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml
index 9e4c245..af30a32 100644
--- a/res/layout-port/launcher.xml
+++ b/res/layout-port/launcher.xml
@@ -66,18 +66,6 @@
android:id="@+id/search_drop_target_bar"
layout="@layout/search_drop_target_bar" />
- <!-- This is the search bar voice button proxy view. It allows us to have a larger
- touch target than the microphone constrained by the search bar bounds. -->
- <com.android.launcher3.DrawableStateProxyView
- android:id="@+id/voice_button_proxy"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_gravity="top|end"
- android:clickable="true"
- android:onClick="onClickVoiceButton"
- android:importantForAccessibility="no"
- launcher:sourceViewId="@+id/voice_button" />
-
<include layout="@layout/apps_customize_pane"
android:id="@+id/apps_customize_pane"
android:layout_width="match_parent"
diff --git a/res/layout-port/qsb.xml b/res/layout-port/qsb.xml
deleted file mode 100644
index 0afc2d2..0000000
--- a/res/layout-port/qsb.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:launcher="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@drawable/search_frame">
- <!-- Global search icon -->
- <com.android.launcher3.HolographicLinearLayout
- style="@style/SearchButton.WithPaddingStart"
- launcher:sourceImageViewId="@+id/search_button"
- android:id="@+id/search_button_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="center_vertical"
- android:layout_centerVertical="true"
- android:layout_alignParentStart="true"
- android:layout_toStartOf="@+id/voice_button_container"
- android:onClick="onClickSearchButton"
- android:focusable="true"
- android:clickable="true"
- android:contentDescription="@string/accessibility_search_button">
- <ImageView
- android:id="@+id/search_button"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_gravity="start"
- android:scaleType="fitCenter"
- android:src="@drawable/ic_home_search_normal_holo"
- android:adjustViewBounds="true" />
- </com.android.launcher3.HolographicLinearLayout>
-
- <!-- Voice search icon -->
- <com.android.launcher3.HolographicLinearLayout
- style="@style/SearchButton"
- launcher:sourceImageViewId="@+id/voice_button"
- android:id="@+id/voice_button_container"
- android:layout_width="@dimen/app_icon_size"
- android:layout_height="match_parent"
- android:layout_gravity="center_vertical"
- android:layout_centerVertical="true"
- android:layout_alignParentEnd="true"
- android:paddingEnd="8dp"
- android:paddingRight="8dp"
- android:onClick="onClickVoiceButton"
- android:focusable="true"
- android:clickable="true"
- android:contentDescription="@string/accessibility_voice_search_button">
- <ImageView
- android:id="@+id/voice_button"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="end"
- android:scaleType="fitCenter"
- android:src="@drawable/ic_home_voice_search_holo"
- android:adjustViewBounds="true" />
- </com.android.launcher3.HolographicLinearLayout>
-</RelativeLayout>
diff --git a/res/layout-sw720dp/launcher.xml b/res/layout-sw720dp/launcher.xml
index 1ef7df5..960ccf3 100644
--- a/res/layout-sw720dp/launcher.xml
+++ b/res/layout-sw720dp/launcher.xml
@@ -66,16 +66,6 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
- <com.android.launcher3.DrawableStateProxyView
- android:id="@+id/voice_button_proxy"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_gravity="top|end"
- android:clickable="true"
- android:onClick="onClickVoiceButton"
- android:importantForAccessibility="no"
- launcher:sourceViewId="@+id/voice_button" />
-
<include layout="@layout/apps_customize_pane"
android:id="@+id/apps_customize_pane"
android:layout_width="match_parent"
diff --git a/res/layout-sw720dp/qsb.xml b/res/layout-sw720dp/qsb.xml
deleted file mode 100644
index 0afc2d2..0000000
--- a/res/layout-sw720dp/qsb.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:launcher="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@drawable/search_frame">
- <!-- Global search icon -->
- <com.android.launcher3.HolographicLinearLayout
- style="@style/SearchButton.WithPaddingStart"
- launcher:sourceImageViewId="@+id/search_button"
- android:id="@+id/search_button_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="center_vertical"
- android:layout_centerVertical="true"
- android:layout_alignParentStart="true"
- android:layout_toStartOf="@+id/voice_button_container"
- android:onClick="onClickSearchButton"
- android:focusable="true"
- android:clickable="true"
- android:contentDescription="@string/accessibility_search_button">
- <ImageView
- android:id="@+id/search_button"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_gravity="start"
- android:scaleType="fitCenter"
- android:src="@drawable/ic_home_search_normal_holo"
- android:adjustViewBounds="true" />
- </com.android.launcher3.HolographicLinearLayout>
-
- <!-- Voice search icon -->
- <com.android.launcher3.HolographicLinearLayout
- style="@style/SearchButton"
- launcher:sourceImageViewId="@+id/voice_button"
- android:id="@+id/voice_button_container"
- android:layout_width="@dimen/app_icon_size"
- android:layout_height="match_parent"
- android:layout_gravity="center_vertical"
- android:layout_centerVertical="true"
- android:layout_alignParentEnd="true"
- android:paddingEnd="8dp"
- android:paddingRight="8dp"
- android:onClick="onClickVoiceButton"
- android:focusable="true"
- android:clickable="true"
- android:contentDescription="@string/accessibility_voice_search_button">
- <ImageView
- android:id="@+id/voice_button"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="end"
- android:scaleType="fitCenter"
- android:src="@drawable/ic_home_voice_search_holo"
- android:adjustViewBounds="true" />
- </com.android.launcher3.HolographicLinearLayout>
-</RelativeLayout>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 5d01f36..f37f08f 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Verwyder"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Deïnstalleer"</string>
<string name="info_target_label" msgid="8053346143994679532">"Programinligting"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Soek"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Stemsoektog"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Programme"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Verwyder"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Deïnstalleer opdatering"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 0326109..1a25f66 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"አስወግድ"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"አራግፍ"</string>
<string name="info_target_label" msgid="8053346143994679532">"የመተግበሪያ መረጃ"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"ፍለጋ"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"የድምፅ ፍለጋ"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"መተግበሪያዎች"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"አስወግድ"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"ዝማኔ አራግፍ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 919f0d0..592be58 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"إزالة"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"إزالة"</string>
<string name="info_target_label" msgid="8053346143994679532">"معلومات عن التطبيق"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"بحث"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"البحث الصوتي"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"التطبيقات"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"إزالة"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"إزالة التحديث"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 6654f1d..3f710db 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Премахване"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Деинсталиране"</string>
<string name="info_target_label" msgid="8053346143994679532">"Информация за приложението"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Търсене"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Гласово търсене"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Приложения"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Премахване"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Деинст. на актуализацията"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 019e82f..89e582a 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Suprimeix"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Desinstal·la"</string>
<string name="info_target_label" msgid="8053346143994679532">"Informació de l\'aplicació"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Cerca"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Cerca per veu"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Aplicacions"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Suprimeix"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Desinstal·la l\'actualització"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 95125bc..69ec22c 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Odstranit"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Odinstalovat"</string>
<string name="info_target_label" msgid="8053346143994679532">"Informace o aplikaci"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Hledat"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Hlasové vyhledávání"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Aplikace"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Odstranit"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Odinstalovat aktualizaci"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index c3bb088..5fa6aa6 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Fjern"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Afinstaller"</string>
<string name="info_target_label" msgid="8053346143994679532">"Oplysninger om appen"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Søg"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Talesøgning"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Apps"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Fjern"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Afinstaller opdatering"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 7e4ae47..059983e 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Entfernen"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Deinstallieren"</string>
<string name="info_target_label" msgid="8053346143994679532">"App-Info"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Suchen"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Sprachsuche"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Apps"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Entfernen"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Update deinstallieren"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 5a36332..12f0dfe 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Κατάργηση"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Κατάργηση εγκατάστασης"</string>
<string name="info_target_label" msgid="8053346143994679532">"Πληροφορίες εφαρμογής"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Αναζήτηση"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Φωνητική αναζήτηση"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Εφαρμογές"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Κατάργηση"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Κατάργηση εγκατάστασης ενημέρωσης"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 7e21222..0d004fe 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Remove"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Uninstall"</string>
<string name="info_target_label" msgid="8053346143994679532">"App info"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Search"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Voice Search"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Apps"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Remove"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Uninstall update"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 7e21222..0d004fe 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Remove"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Uninstall"</string>
<string name="info_target_label" msgid="8053346143994679532">"App info"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Search"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Voice Search"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Apps"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Remove"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Uninstall update"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 847faac..4408080 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Eliminar"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Desinstalar"</string>
<string name="info_target_label" msgid="8053346143994679532">"Información de la aplicación"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Buscar"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Búsqueda por voz"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Aplicaciones"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Eliminar"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Desinstalar actualización"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 67c283a..898d0ea 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Eliminar"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Desinstalar"</string>
<string name="info_target_label" msgid="8053346143994679532">"Información de la aplicación"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Buscar"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Búsqueda por voz"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Aplicaciones"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Eliminar"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Desinstalar actualización"</string>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index 1b9f1b7..76b20ab 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Eemalda"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Desinstalli"</string>
<string name="info_target_label" msgid="8053346143994679532">"Rakenduse teave"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Otsing"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Häälotsing"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Rakendused"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Eemalda"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Desinstalli värskendus"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index ce10c2d..924cccf 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"حذف"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"حذف نصب"</string>
<string name="info_target_label" msgid="8053346143994679532">"اطلاعات برنامه"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"جستجو"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"جستجوی شفاهی"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"برنامهها"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"حذف"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"حذف نصب بهروزرسانی"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 0004501..a5da03f 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Poista"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Poista"</string>
<string name="info_target_label" msgid="8053346143994679532">"Sovelluksen tiedot"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Haku"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Puhehaku"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Sovellukset"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Poista"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Poista päivitys"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index a94f571..62a2b89 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Supprimer"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Désinstaller"</string>
<string name="info_target_label" msgid="8053346143994679532">"Détails de l\'application"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Rechercher"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Recherche vocale"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Applications"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Supprimer"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Désinstaller la mise à jour"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 0f1aac4..d23b6a4 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Supprimer"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Désinstaller"</string>
<string name="info_target_label" msgid="8053346143994679532">"Informations sur l\'application"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Rechercher"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Recherche vocale"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Applications"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Supprimer"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Désinstaller la mise à jour"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index f14eff7..9372489 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"निकालें"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"अनइंस्टॉल करें"</string>
<string name="info_target_label" msgid="8053346143994679532">"ऐप्लिकेशन की जानकारी"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"खोजें"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"बोलकर खोजें"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"ऐप्लिकेशन"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"निकालें"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"अपडेट अनइंस्टॉल करें"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index aa01648..702b474 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Ukloni"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Deinstaliraj"</string>
<string name="info_target_label" msgid="8053346143994679532">"Informacije o aplikaciji"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Pretraži"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Glasovno pretraživanje"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Aplikacije"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Ukloni"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Deinstalacija ažuriranja"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 4416ab0..513548a 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Eltávolítás"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Eltávolítás"</string>
<string name="info_target_label" msgid="8053346143994679532">"Alkalmazásinformáció"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Keresés"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Hangalapú keresés"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Alkalmazások"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Eltávolítás"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Eltávolítja a frissítést"</string>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index dcff15c..940c14b 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Հեռացնել"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Ապատեղադրել"</string>
<string name="info_target_label" msgid="8053346143994679532">"Ծրագրի տեղեկություններ"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Որոնել"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Ձայնային որոնում"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Ծրագրեր"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Հեռացնել"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Ապատեղադրել թարմացումը"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 2eb88c7..b0c5d13 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Hapus"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Copot pemasangan"</string>
<string name="info_target_label" msgid="8053346143994679532">"Info aplikasi"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Telusuri"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Penelusuran Suara"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Aplikasi"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Hapus"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Copot pemasangan pembaruan"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index aaddcfc..d78d032 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Rimuovi"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Disinstalla"</string>
<string name="info_target_label" msgid="8053346143994679532">"Informazioni app"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Cerca"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Ricerca vocale"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"App"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Rimuovi"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Disinstalla aggiornamento"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index fc059e0..61fb53e 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"הסר"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"הסר התקנה"</string>
<string name="info_target_label" msgid="8053346143994679532">"פרטי אפליקציה"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"חפש"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"חיפוש קולי"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"אפליקציות"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"הסר"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"הסר את התקנת העדכון"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index d8ee943..ec872b8 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"削除"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"アンインストール"</string>
<string name="info_target_label" msgid="8053346143994679532">"アプリ情報"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"検索"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"音声検索"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"アプリ"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"削除"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"更新をアンインストール"</string>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 823d36a..b96d3d2 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"წაშლა"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"დეინსტალაცია"</string>
<string name="info_target_label" msgid="8053346143994679532">"აპის შესახებ"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"ძიება"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"ხმოვანი ძიება"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"აპები"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"წაშლა"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"განახლების დეინსტალაცია"</string>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 390f0ee..670ac70 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"លុបចេញ"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"លុប"</string>
<string name="info_target_label" msgid="8053346143994679532">"ព័ត៌មានកម្មវិធី"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"ស្វែងរក"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"ស្វែងរកតាមសំឡេង"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"កម្មវិធី"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"លុបចេញ"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"លុបបច្ចុប្បន្នភាព"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index d470283..c73b431 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"삭제"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"제거"</string>
<string name="info_target_label" msgid="8053346143994679532">"앱 정보"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"검색"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"음성 검색"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"앱"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"삭제"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"업데이트 제거"</string>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index ac47503..1beb049 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"ລຶບ"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"ຖອນການຕິດຕັ້ງ"</string>
<string name="info_target_label" msgid="8053346143994679532">"ຂໍ້ມູນແອັບຯ"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"ຊອກຫາ"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"ຊອກຫາດ້ວຍສຽງ"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"ແອັບຯ"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"ລຶບ"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"ຖອນອັບເດດ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 6e47f67..897c2fd 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Pašalinti"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Pašalinti"</string>
<string name="info_target_label" msgid="8053346143994679532">"Programos informacija"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Ieškoti"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Paieška balsu"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Programos"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Pašalinti"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Pašalinti naujinį"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 4079331..13a4760 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Noņemt"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Atinstalēt"</string>
<string name="info_target_label" msgid="8053346143994679532">"Lietotnes informācija"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Meklēt"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Meklēšana ar balsi"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Lietotnes"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Noņemt"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Atinstalēt atjauninājumu"</string>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index a22b8fc..f258b4c 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Устгах"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Устгах"</string>
<string name="info_target_label" msgid="8053346143994679532">"Апп мэдээлэл"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Хайх"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Дуун хайлт"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Апп"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Устгах"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Шинэчлэлийг устгах"</string>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 5f96ead..532b6ad 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Alih keluar"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Nyahpasang"</string>
<string name="info_target_label" msgid="8053346143994679532">"Maklumat apl"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Cari"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Carian Suara"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Apl"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Alih keluar"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Nyahpasang kemas kini"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index a7faeaf..a9bbe08 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Fjern"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Avinstaller"</string>
<string name="info_target_label" msgid="8053346143994679532">"App-info"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Søk"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Talesøk"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Apper"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Fjern"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Avinstaller oppdateringen"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 3e0f640..8a32fd1 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Verwijderen"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Verwijderen"</string>
<string name="info_target_label" msgid="8053346143994679532">"App-info"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Zoeken"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Gesproken zoekopdracht"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Apps"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Verwijderen"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Update verwijderen"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index ee48b24..4eabae9 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Usuń"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Odinstaluj"</string>
<string name="info_target_label" msgid="8053346143994679532">"Informacje o aplikacji"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Szukaj"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Wyszukiwanie głosowe"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Aplikacje"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Usuń"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Odinstaluj aktualizację"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index e19fcea..4397ebf 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Remover"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Desinstalar"</string>
<string name="info_target_label" msgid="8053346143994679532">"Informações da aplicação"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Pesquisar"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Pesquisa por Voz"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Aplicações"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Remover"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Desinstalar atualização"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 6c9a0d9..07c8214 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Remover"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Desinstalar"</string>
<string name="info_target_label" msgid="8053346143994679532">"Informações do app"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Pesquisar"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Pesquisa por voz"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Apps"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Remover"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Desinstalar atualização"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index a509399..54cb46c 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Eliminați"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Dezinstalați"</string>
<string name="info_target_label" msgid="8053346143994679532">"Informații despre aplicație"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Căutați"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Căutare vocală"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Aplicații"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Eliminați"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Dezinstalați actualizarea"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 8b9d706..70ef0f5 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Удалить"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Удалить"</string>
<string name="info_target_label" msgid="8053346143994679532">"О приложении"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Поиск"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Голосовой поиск"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Приложения"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Удалить"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Удалить обновление"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 2ffa4b4..9cd0fbe 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Odstrániť"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Odinštalovať"</string>
<string name="info_target_label" msgid="8053346143994679532">"Informácie o aplikácii"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Vyhľadať"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Hlasové vyhľadávanie"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Aplikácie"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Odstrániť"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Odinštalovať aktualizáciu"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index f02ea27..d5a34d5 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Odstrani"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Odstrani"</string>
<string name="info_target_label" msgid="8053346143994679532">"Podatki o aplikaciji"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Iskanje"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Glasovno iskanje"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Aplikacije"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Odstrani"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Odstrani posodobitev"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 3509252..9f40890 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Уклони"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Деинсталирај"</string>
<string name="info_target_label" msgid="8053346143994679532">"Информације о апликацији"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Претражи"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Гласовна претрага"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Апликације"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Уклони"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Деинсталирај ажурирање"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 572309d..25f4d26 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Ta bort"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Avinstallera"</string>
<string name="info_target_label" msgid="8053346143994679532">"Info om appen"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Sök"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Röstsökning"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Appar"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Ta bort"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Avinstallera uppdatering"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 05df3c4..fa81061 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Ondoa"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Ondoa"</string>
<string name="info_target_label" msgid="8053346143994679532">"Maelezo ya programu"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Tafuta"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Kutafuta kwa Kutamka"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Programu"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Ondoa"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Ondoa sasisho"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index bc9ddfb..0fc20d2 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"ลบ"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"ถอนการติดตั้ง"</string>
<string name="info_target_label" msgid="8053346143994679532">"ข้อมูลแอป"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"ค้นหา"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"ค้นหาด้วยเสียง"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"แอป"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"ลบ"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"ถอนการติดตั้งการอัปเดต"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 9078d15..4d2f1d4 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Alisin"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"I-uninstall"</string>
<string name="info_target_label" msgid="8053346143994679532">"Impormasyon ng app"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Hanapin"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Paghahanap Gamit ang Boses"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Apps"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Alisin"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"I-uninstall ang update"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 341def7..6c78f6f 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Kaldır"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Yüklemeyi kaldır"</string>
<string name="info_target_label" msgid="8053346143994679532">"Uygulama bilgileri"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Ara"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Sesli Arama"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Uygulamalar"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Kaldır"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Güncellemeyi kaldır"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 78cda53..71e1816 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Вилучити"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Видалити"</string>
<string name="info_target_label" msgid="8053346143994679532">"Про програму"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Пошук"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Голосовий пошук"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Додатки"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Вилучити"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Видалити оновлення"</string>
diff --git a/res/values-v17/styles.xml b/res/values-v17/styles.xml
index 71c4bfa..11d2a1f 100644
--- a/res/values-v17/styles.xml
+++ b/res/values-v17/styles.xml
@@ -3,7 +3,4 @@
<style name="PagedViewWidgetImageView">
<item name="android:paddingStart">@dimen/app_widget_preview_padding_left</item>
</style>
- <style name="SearchButton.WithPaddingStart">
- <item name="android:paddingStart">8dp</item>
- </style>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 61715c8..5bc1627 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Xóa"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Gỡ cài đặt"</string>
<string name="info_target_label" msgid="8053346143994679532">"Thông tin ứng dụng"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Tìm kiếm"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Tìm kiếm bằng giọng nói"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Ứng dụng"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Xóa"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Gỡ cài đặt cập nhật"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index e716fde..b7c42fe 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"删除"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"卸载"</string>
<string name="info_target_label" msgid="8053346143994679532">"应用信息"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"搜索"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"语音搜索"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"应用"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"删除"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"卸载更新内容"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 02c90f2..2eb7008 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"移除"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"解除安裝"</string>
<string name="info_target_label" msgid="8053346143994679532">"應用程式資料"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"搜尋"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"語音搜尋"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"應用程式"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"移除"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"解除安裝更新"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index f9fdaa4..52e7583 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"移除"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"解除安裝"</string>
<string name="info_target_label" msgid="8053346143994679532">"應用程式資訊"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"搜尋"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"語音搜尋"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"應用程式"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"移除"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"解除安裝更新"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 79f8b54..aea09e8 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -58,8 +58,6 @@
<string name="delete_target_label" msgid="1822697352535677073">"Susa"</string>
<string name="delete_target_uninstall_label" msgid="5100785476250872595">"Khipha"</string>
<string name="info_target_label" msgid="8053346143994679532">"Ulwazi lohlelo lokusebenza"</string>
- <string name="accessibility_search_button" msgid="1628520399424565142">"Sesha"</string>
- <string name="accessibility_voice_search_button" msgid="4637324840434406584">"Ukusesha ngezwi"</string>
<string name="accessibility_all_apps_button" msgid="2603132375383800483">"Izinhlelo zokusebenza"</string>
<string name="accessibility_delete_button" msgid="6466114477993744621">"Susa"</string>
<string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Khipha isibuyekezo"</string>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index a52bbe2..3331cde 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -18,13 +18,6 @@
<resources>
- <!-- DrawableStateProxyView specific attributes. These attributes are used to customize
- a DrawableStateProxyView view in XML files. -->
- <declare-styleable name="DrawableStateProxyView">
- <!-- The source view to delegate touch presses events to. -->
- <attr name="sourceViewId" format="integer" />
- </declare-styleable>
-
<!-- Page Indicator specific attributes. -->
<declare-styleable name="PageIndicator">
<attr name="windowSize" format="integer" />
@@ -76,13 +69,6 @@
<attr name="strokeWidth" format="float" />
</declare-styleable>
- <!-- HolographicLinearLayout specific attributes. -->
- <declare-styleable name="HolographicLinearLayout">
- <!-- The source view to generate and apply the drawable states to/from -->
- <attr name="sourceImageViewId" format="integer" />
- <attr name="stateHotwordOn" format="boolean" />
- </declare-styleable>
-
<!-- PagedView specific attributes. These attributes are used to customize
a PagedView view in XML files. -->
<declare-styleable name="PagedView">
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 493f29c..f12cb57 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -43,9 +43,6 @@
<!-- QSB -->
<dimen name="toolbar_button_vertical_padding">4dip</dimen>
<dimen name="toolbar_button_horizontal_padding">12dip</dimen>
- <!-- External toolbar icon size (for bounds) -->
- <dimen name="toolbar_external_icon_width">36dp</dimen>
- <dimen name="toolbar_external_icon_height">36dp</dimen>
<!-- AllApps/Customize/AppsCustomize -->
<!-- The height of the tab bar - if this changes, we should update the
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b3abe8f..b6f4237 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -132,10 +132,6 @@
<!-- Label for the info icon. [CHAR_LIMIT=20] -->
<string name="info_target_label">App info</string>
- <!-- Accessibility: Search button -->
- <string name="accessibility_search_button">Search</string>
- <!-- Accessibility: Voice Search button -->
- <string name="accessibility_voice_search_button">Voice Search</string>
<!-- Accessibility: AllApps button -->
<string name="accessibility_all_apps_button">Apps</string>
<!-- Accessibility: Delete button -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 15415c7..77798f1 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -51,8 +51,6 @@
<item name="customShadows">false</item>
</style>
- <style name="SearchDropTargetBar"></style>
-
<style name="SearchButton"></style>
<style name="DropTargetButtonContainer">
@@ -97,8 +95,4 @@
<item name="android:paddingLeft">@dimen/app_widget_preview_padding_left</item>
</style>
- <style name="SearchButton.WithPaddingStart">
- <item name="android:paddingLeft">8dp</item>
- </style>
-
</resources>
diff --git a/src/com/android/launcher3/AppInfo.java b/src/com/android/launcher3/AppInfo.java
index bfcad84..a66bac0 100644
--- a/src/com/android/launcher3/AppInfo.java
+++ b/src/com/android/launcher3/AppInfo.java
@@ -84,16 +84,11 @@
flags = initFlags(info);
firstInstallTime = info.getFirstInstallTime();
iconCache.getTitleAndIcon(this, info, labelCache);
- intent = new Intent(Intent.ACTION_MAIN);
- intent.addCategory(Intent.CATEGORY_LAUNCHER);
- intent.setComponent(info.getComponentName());
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
- long serialNumber = UserManagerCompat.getInstance(context).getSerialNumberForUser(user);
- intent.putExtra(EXTRA_PROFILE, serialNumber);
+ intent = makeLaunchIntent(context, info, user);
this.user = user;
}
- private static int initFlags(LauncherActivityInfoCompat info) {
+ public static int initFlags(LauncherActivityInfoCompat info) {
int appFlags = info.getApplicationInfo().flags;
int flags = 0;
if ((appFlags & android.content.pm.ApplicationInfo.FLAG_SYSTEM) == 0) {
@@ -137,4 +132,14 @@
public ShortcutInfo makeShortcut() {
return new ShortcutInfo(this);
}
+
+ public static Intent makeLaunchIntent(Context context, LauncherActivityInfoCompat info,
+ UserHandleCompat user) {
+ long serialNumber = UserManagerCompat.getInstance(context).getSerialNumberForUser(user);
+ return new Intent(Intent.ACTION_MAIN)
+ .addCategory(Intent.CATEGORY_LAUNCHER)
+ .setComponent(info.getComponentName())
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)
+ .putExtra(EXTRA_PROFILE, serialNumber);
+ }
}
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index bd7a772..d6aadce 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -122,9 +122,7 @@
int allAppsNumRows;
int allAppsNumCols;
int searchBarSpaceWidthPx;
- int searchBarSpaceMaxWidthPx;
int searchBarSpaceHeightPx;
- int searchBarHeightPx;
int pageIndicatorHeightPx;
int allAppsButtonVisualSize;
@@ -372,10 +370,10 @@
hotseatIconSizePx = (int) (DynamicGrid.pxFromDp(hotseatIconSize, dm) * scale);
// Search Bar
- searchBarSpaceMaxWidthPx = resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_max_width);
- searchBarHeightPx = resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_height);
- searchBarSpaceWidthPx = Math.min(searchBarSpaceMaxWidthPx, widthPx);
- searchBarSpaceHeightPx = searchBarHeightPx + getSearchBarTopOffset();
+ searchBarSpaceWidthPx = Math.min(widthPx,
+ resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_max_width));
+ searchBarSpaceHeightPx = getSearchBarTopOffset()
+ + resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_height);
// Calculate the actual text height
Paint textPaint = new Paint();
@@ -398,10 +396,6 @@
folderIconSizePx = iconSizePx + 2 * -folderBackgroundOffset;
// All Apps
- Rect padding = getWorkspacePadding(isLandscape ?
- CellLayout.LANDSCAPE : CellLayout.PORTRAIT);
- int pageIndicatorOffset =
- resources.getDimensionPixelSize(R.dimen.apps_customize_page_indicator_offset);
allAppsCellWidthPx = allAppsIconSizePx;
allAppsCellHeightPx = allAppsIconSizePx + drawablePadding + iconTextSizePx;
int maxLongEdgeCellCount =
@@ -717,9 +711,6 @@
lp.gravity = Gravity.TOP | Gravity.LEFT;
lp.width = searchBarSpaceHeightPx;
lp.height = LayoutParams.WRAP_CONTENT;
- searchBar.setPadding(
- 0, 2 * edgeMarginPx, 0,
- 2 * edgeMarginPx);
LinearLayout targets = (LinearLayout) searchBar.findViewById(R.id.drag_target_bar);
targets.setOrientation(LinearLayout.VERTICAL);
@@ -728,27 +719,9 @@
lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
lp.width = searchBarSpaceWidthPx;
lp.height = searchBarSpaceHeightPx;
- searchBar.setPadding(
- 2 * edgeMarginPx,
- getSearchBarTopOffset(),
- 2 * edgeMarginPx, 0);
}
searchBar.setLayoutParams(lp);
- // Layout the voice proxy
- View voiceButtonProxy = launcher.findViewById(R.id.voice_button_proxy);
- if (voiceButtonProxy != null) {
- if (hasVerticalBarLayout) {
- // TODO: MOVE THIS INTO SEARCH BAR MEASURE
- } else {
- lp = (FrameLayout.LayoutParams) voiceButtonProxy.getLayoutParams();
- lp.gravity = Gravity.TOP | Gravity.END;
- lp.width = (widthPx - searchBarSpaceWidthPx) / 2 +
- 2 * iconSizePx;
- lp.height = searchBarSpaceHeightPx;
- }
- }
-
// Layout the workspace
PagedView workspace = (PagedView) launcher.findViewById(R.id.workspace);
lp = (FrameLayout.LayoutParams) workspace.getLayoutParams();
diff --git a/src/com/android/launcher3/DrawableStateProxyView.java b/src/com/android/launcher3/DrawableStateProxyView.java
deleted file mode 100644
index c83659a..0000000
--- a/src/com/android/launcher3/DrawableStateProxyView.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2012 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.launcher3;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.widget.LinearLayout;
-
-public class DrawableStateProxyView extends LinearLayout {
-
- private View mView;
- private int mViewId;
-
- public DrawableStateProxyView(Context context) {
- this(context, null);
- }
-
- public DrawableStateProxyView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
-
- public DrawableStateProxyView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
-
- TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DrawableStateProxyView,
- defStyle, 0);
- mViewId = a.getResourceId(R.styleable.DrawableStateProxyView_sourceViewId, -1);
- a.recycle();
-
- setFocusable(false);
- }
-
- @Override
- protected void drawableStateChanged() {
- super.drawableStateChanged();
-
- if (mView == null) {
- View parent = (View) getParent();
- mView = parent.findViewById(mViewId);
- }
- if (mView != null) {
- mView.setPressed(isPressed());
- mView.setHovered(isHovered());
- }
- }
-
- @Override
- public boolean onHoverEvent(MotionEvent event) {
- return false;
- }
-}
diff --git a/src/com/android/launcher3/HolographicImageView.java b/src/com/android/launcher3/HolographicImageView.java
deleted file mode 100644
index 18ac092..0000000
--- a/src/com/android/launcher3/HolographicImageView.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * 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.launcher3;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.StateListDrawable;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.widget.ImageView;
-
-public class HolographicImageView extends ImageView {
-
- private final HolographicViewHelper mHolographicHelper;
- private boolean mHotwordOn;
- private boolean mIsPressed;
- private boolean mIsFocused;
-
- 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);
- TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.HolographicLinearLayout,
- defStyle, 0);
- mHotwordOn = a.getBoolean(R.styleable.HolographicLinearLayout_stateHotwordOn, false);
- a.recycle();
-
- setOnTouchListener(new OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- if (isPressed() != mIsPressed) {
- mIsPressed = isPressed();
- refreshDrawableState();
- }
- return false;
- }
- });
-
- setOnFocusChangeListener(new OnFocusChangeListener() {
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- if (isFocused() != mIsFocused) {
- mIsFocused = isFocused();
- refreshDrawableState();
- }
- }
- });
- }
-
- void invalidatePressedFocusedStates() {
- mHolographicHelper.invalidatePressedFocusedStates(this);
- }
-
- @Override
- protected void drawableStateChanged() {
- super.drawableStateChanged();
-
- mHolographicHelper.generatePressedFocusedStates(this);
- Drawable d = getDrawable();
- if (d instanceof StateListDrawable) {
- StateListDrawable sld = (StateListDrawable) d;
- sld.setState(getDrawableState());
- sld.invalidateSelf();
- }
- }
-
- @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);
- }
-
- private boolean isHotwordOn() {
- return mHotwordOn;
- }
-
- public void setHotwordState(boolean on) {
- if (on == mHotwordOn) {
- return;
- }
- mHotwordOn = on;
- refreshDrawableState();
- }
-
- @Override
- public int[] onCreateDrawableState(int extraSpace) {
- final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
- if (isHotwordOn()) {
- mergeDrawableStates(drawableState, new int[] {R.attr.stateHotwordOn});
- }
- return drawableState;
- }
-}
diff --git a/src/com/android/launcher3/HolographicLinearLayout.java b/src/com/android/launcher3/HolographicLinearLayout.java
deleted file mode 100644
index 5344a7e..0000000
--- a/src/com/android/launcher3/HolographicLinearLayout.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * 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.launcher3;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.StateListDrawable;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-
-public class HolographicLinearLayout extends LinearLayout {
- private final HolographicViewHelper mHolographicHelper;
- private ImageView mImageView;
- private int mImageViewId;
-
- private boolean mHotwordOn;
- private boolean mIsPressed;
- private boolean mIsFocused;
-
- 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);
-
- TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.HolographicLinearLayout,
- defStyle, 0);
- mImageViewId = a.getResourceId(R.styleable.HolographicLinearLayout_sourceImageViewId, -1);
- mHotwordOn = a.getBoolean(R.styleable.HolographicLinearLayout_stateHotwordOn, false);
- a.recycle();
-
-
- setWillNotDraw(false);
- mHolographicHelper = new HolographicViewHelper(context);
-
- setOnTouchListener(new OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- if (isPressed() != mIsPressed) {
- mIsPressed = isPressed();
- refreshDrawableState();
- }
- return false;
- }
- });
-
- setOnFocusChangeListener(new OnFocusChangeListener() {
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- if (isFocused() != mIsFocused) {
- mIsFocused = isFocused();
- refreshDrawableState();
- }
- }
- });
- }
-
- @Override
- protected void drawableStateChanged() {
- super.drawableStateChanged();
-
- if (mImageView != null) {
- mHolographicHelper.generatePressedFocusedStates(mImageView);
- Drawable d = mImageView.getDrawable();
- if (d instanceof StateListDrawable) {
- StateListDrawable sld = (StateListDrawable) d;
- sld.setState(getDrawableState());
- sld.invalidateSelf();
- }
- }
- }
-
- void invalidatePressedFocusedStates() {
- mHolographicHelper.invalidatePressedFocusedStates(mImageView);
- invalidate();
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
-
- // One time call to generate the pressed/focused state -- must be called after
- // measure/layout
- if (mImageView == null) {
- mImageView = (ImageView) findViewById(mImageViewId);
- }
- mHolographicHelper.generatePressedFocusedStates(mImageView);
- }
-
- private boolean isHotwordOn() {
- return mHotwordOn;
- }
-
- public void setHotwordState(boolean on) {
- if (on == mHotwordOn) {
- return;
- }
- mHotwordOn = on;
- refreshDrawableState();
- }
-
- @Override
- public int[] onCreateDrawableState(int extraSpace) {
- final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
- if (isHotwordOn()) {
- mergeDrawableStates(drawableState, new int[] {R.attr.stateHotwordOn});
- }
- return drawableState;
- }
-}
diff --git a/src/com/android/launcher3/HolographicViewHelper.java b/src/com/android/launcher3/HolographicViewHelper.java
deleted file mode 100644
index 7ef0355..0000000
--- a/src/com/android/launcher3/HolographicViewHelper.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * 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.launcher3;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.PorterDuff;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.StateListDrawable;
-import android.widget.ImageView;
-
-public class HolographicViewHelper {
-
- private final Canvas mTempCanvas = new Canvas();
-
- private boolean mStatesUpdated;
- private int mHighlightColor, mHotwordColor;
-
- public HolographicViewHelper(Context context) {
- Resources res = context.getResources();
- mHighlightColor = res.getColor(android.R.color.holo_blue_light);
- mHotwordColor = res.getColor(android.R.color.holo_green_light);
- }
-
- /**
- * Generate the pressed/focused states if necessary.
- */
- void generatePressedFocusedStates(ImageView v) {
- if (!mStatesUpdated && v != null) {
- mStatesUpdated = true;
- Bitmap original = createOriginalImage(v, mTempCanvas);
- Bitmap outline = createImageWithOverlay(v, mTempCanvas, mHighlightColor);
- Bitmap hotword = createImageWithOverlay(v, mTempCanvas, mHotwordColor);
- FastBitmapDrawable originalD = new FastBitmapDrawable(original);
- FastBitmapDrawable outlineD = new FastBitmapDrawable(outline);
- FastBitmapDrawable hotwordD = new FastBitmapDrawable(hotword);
-
- StateListDrawable states = new StateListDrawable();
-
- states.addState(new int[] {android.R.attr.state_pressed}, outlineD);
- states.addState(new int[] {android.R.attr.state_focused}, outlineD);
- states.addState(new int[] {R.attr.stateHotwordOn}, hotwordD);
- states.addState(new int[] {}, originalD);
- v.setImageDrawable(states);
- }
- }
-
- /**
- * Invalidates the pressed/focused states.
- */
- void invalidatePressedFocusedStates(ImageView v) {
- mStatesUpdated = false;
- if (v != null) {
- v.invalidate();
- }
- }
-
- /**
- * Creates a copy of the original image.
- */
- private Bitmap createOriginalImage(ImageView v, Canvas canvas) {
- final Drawable d = v.getDrawable();
- final Bitmap b = Bitmap.createBitmap(
- d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
-
- canvas.setBitmap(b);
- canvas.save();
- d.draw(canvas);
- canvas.restore();
- canvas.setBitmap(null);
-
- return b;
- }
-
- /**
- * 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 createImageWithOverlay(ImageView v, Canvas canvas, int color) {
- final Drawable d = v.getDrawable();
- final Bitmap b = Bitmap.createBitmap(
- d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
-
- canvas.setBitmap(b);
- canvas.save();
- d.draw(canvas);
- canvas.restore();
- canvas.drawColor(color, PorterDuff.Mode.SRC_IN);
- canvas.setBitmap(null);
-
- return b;
- }
-}
diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java
index e9fb499..395c341 100644
--- a/src/com/android/launcher3/InstallShortcutReceiver.java
+++ b/src/com/android/launcher3/InstallShortcutReceiver.java
@@ -27,14 +27,18 @@
import android.text.TextUtils;
import android.util.Base64;
import android.util.Log;
-import android.widget.Toast;
+import com.android.launcher3.compat.LauncherActivityInfoCompat;
+import com.android.launcher3.compat.LauncherAppsCompat;
import com.android.launcher3.compat.UserHandleCompat;
+import com.android.launcher3.compat.UserManagerCompat;
+import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONStringer;
import org.json.JSONTokener;
+import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
@@ -47,73 +51,49 @@
private static final String ACTION_INSTALL_SHORTCUT =
"com.android.launcher.action.INSTALL_SHORTCUT";
- private static final String DATA_INTENT_KEY = "intent.data";
private static final String LAUNCH_INTENT_KEY = "intent.launch";
private static final String NAME_KEY = "name";
private static final String ICON_KEY = "icon";
private static final String ICON_RESOURCE_NAME_KEY = "iconResource";
private static final String ICON_RESOURCE_PACKAGE_NAME_KEY = "iconResourcePackage";
+
+ private static final String APP_SHORTCUT_TYPE_KEY = "isAppShortcut";
+ private static final String USER_HANDLE_KEY = "userHandle";
+
// The set of shortcuts that are pending install
private static final String APPS_PENDING_INSTALL = "apps_to_install";
public static final int NEW_SHORTCUT_BOUNCE_DURATION = 450;
public static final int NEW_SHORTCUT_STAGGER_DELAY = 85;
- private static final int INSTALL_SHORTCUT_SUCCESSFUL = 0;
- private static final int INSTALL_SHORTCUT_IS_DUPLICATE = -1;
-
- private static Object sLock = new Object();
-
- private static void addToStringSet(SharedPreferences sharedPrefs,
- SharedPreferences.Editor editor, String key, String value) {
- Set<String> strings = sharedPrefs.getStringSet(key, null);
- if (strings == null) {
- strings = new HashSet<String>(1);
- } else {
- strings = new HashSet<String>(strings);
- }
- strings.add(value);
- editor.putStringSet(key, strings);
- }
+ private static final Object sLock = new Object();
private static void addToInstallQueue(
SharedPreferences sharedPrefs, PendingInstallShortcutInfo info) {
synchronized(sLock) {
- try {
- JSONStringer json = new JSONStringer()
- .object()
- .key(DATA_INTENT_KEY).value(info.data.toUri(0))
- .key(LAUNCH_INTENT_KEY).value(info.launchIntent.toUri(0))
- .key(NAME_KEY).value(info.name);
- if (info.icon != null) {
- byte[] iconByteArray = ItemInfo.flattenBitmap(info.icon);
- json = json.key(ICON_KEY).value(
- Base64.encodeToString(
- iconByteArray, 0, iconByteArray.length, Base64.DEFAULT));
+ String encoded = info.encodeToString();
+ if (encoded != null) {
+ Set<String> strings = sharedPrefs.getStringSet(APPS_PENDING_INSTALL, null);
+ if (strings == null) {
+ strings = new HashSet<String>(1);
+ } else {
+ strings = new HashSet<String>(strings);
}
- if (info.iconResource != null) {
- json = json.key(ICON_RESOURCE_NAME_KEY).value(info.iconResource.resourceName);
- json = json.key(ICON_RESOURCE_PACKAGE_NAME_KEY)
- .value(info.iconResource.packageName);
- }
- json = json.endObject();
- SharedPreferences.Editor editor = sharedPrefs.edit();
- if (DBG) Log.d(TAG, "Adding to APPS_PENDING_INSTALL: " + json);
- addToStringSet(sharedPrefs, editor, APPS_PENDING_INSTALL, json.toString());
- editor.commit();
- } catch (org.json.JSONException e) {
- Log.d(TAG, "Exception when adding shortcut: " + e);
+ strings.add(encoded);
+ sharedPrefs.edit().putStringSet(APPS_PENDING_INSTALL, strings).commit();
}
}
}
- public static void removeFromInstallQueue(SharedPreferences sharedPrefs,
- ArrayList<String> packageNames) {
+ public static void removeFromInstallQueue(Context context, ArrayList<String> packageNames,
+ UserHandleCompat user) {
if (packageNames.isEmpty()) {
return;
}
+ String spKey = LauncherAppState.getSharedPreferencesKey();
+ SharedPreferences sp = context.getSharedPreferences(spKey, Context.MODE_PRIVATE);
synchronized(sLock) {
- Set<String> strings = sharedPrefs.getStringSet(APPS_PENDING_INSTALL, null);
+ Set<String> strings = sp.getStringSet(APPS_PENDING_INSTALL, null);
if (DBG) {
Log.d(TAG, "APPS_PENDING_INSTALL: " + strings
+ ", removing packages: " + packageNames);
@@ -122,34 +102,20 @@
Set<String> newStrings = new HashSet<String>(strings);
Iterator<String> newStringsIter = newStrings.iterator();
while (newStringsIter.hasNext()) {
- String json = newStringsIter.next();
- try {
- JSONObject object = (JSONObject) new JSONTokener(json).nextValue();
- Intent launchIntent = Intent.parseUri(object.getString(LAUNCH_INTENT_KEY), 0);
- String pn = launchIntent.getPackage();
- if (pn == null) {
- if (launchIntent.getComponent() == null) {
- continue;
- }
- pn = launchIntent.getComponent().getPackageName();
- }
- if (packageNames.contains(pn)) {
- newStringsIter.remove();
- }
- } catch (org.json.JSONException e) {
- Log.d(TAG, "Exception reading shortcut to remove: " + e);
- } catch (java.net.URISyntaxException e) {
- Log.d(TAG, "Exception reading shortcut to remove: " + e);
+ String encoded = newStringsIter.next();
+ PendingInstallShortcutInfo info = decode(encoded, context);
+ if (info == null || (packageNames.contains(info.getTargetPackage())
+ && user.equals(info.user))) {
+ newStringsIter.remove();
}
}
- sharedPrefs.edit().putStringSet(APPS_PENDING_INSTALL,
- new HashSet<String>(newStrings)).commit();
+ sp.edit().putStringSet(APPS_PENDING_INSTALL, newStrings).commit();
}
}
}
private static ArrayList<PendingInstallShortcutInfo> getAndClearInstallQueue(
- SharedPreferences sharedPrefs) {
+ SharedPreferences sharedPrefs, Context context) {
synchronized(sLock) {
Set<String> strings = sharedPrefs.getStringSet(APPS_PENDING_INSTALL, null);
if (DBG) Log.d(TAG, "Getting and clearing APPS_PENDING_INSTALL: " + strings);
@@ -158,36 +124,10 @@
}
ArrayList<PendingInstallShortcutInfo> infos =
new ArrayList<PendingInstallShortcutInfo>();
- for (String json : strings) {
- try {
- JSONObject object = (JSONObject) new JSONTokener(json).nextValue();
- Intent data = Intent.parseUri(object.getString(DATA_INTENT_KEY), 0);
- Intent launchIntent =
- Intent.parseUri(object.getString(LAUNCH_INTENT_KEY), 0);
- String name = object.getString(NAME_KEY);
- String iconBase64 = object.optString(ICON_KEY);
- String iconResourceName = object.optString(ICON_RESOURCE_NAME_KEY);
- String iconResourcePackageName =
- object.optString(ICON_RESOURCE_PACKAGE_NAME_KEY);
- if (iconBase64 != null && !iconBase64.isEmpty()) {
- byte[] iconArray = Base64.decode(iconBase64, Base64.DEFAULT);
- Bitmap b = BitmapFactory.decodeByteArray(iconArray, 0, iconArray.length);
- data.putExtra(Intent.EXTRA_SHORTCUT_ICON, b);
- } else if (iconResourceName != null && !iconResourceName.isEmpty()) {
- Intent.ShortcutIconResource iconResource =
- new Intent.ShortcutIconResource();
- iconResource.resourceName = iconResourceName;
- iconResource.packageName = iconResourcePackageName;
- data.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
- }
- data.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launchIntent);
- PendingInstallShortcutInfo info =
- new PendingInstallShortcutInfo(data, name, launchIntent);
+ for (String encoded : strings) {
+ PendingInstallShortcutInfo info = decode(encoded, context);
+ if (info != null) {
infos.add(info);
- } catch (org.json.JSONException e) {
- Log.d(TAG, "Exception reading shortcut to add: " + e);
- } catch (java.net.URISyntaxException e) {
- Log.d(TAG, "Exception reading shortcut to add: " + e);
}
}
sharedPrefs.edit().putStringSet(APPS_PENDING_INSTALL, new HashSet<String>()).commit();
@@ -199,49 +139,26 @@
// processAllPendingInstalls() is called.
private static boolean mUseInstallQueue = false;
- private static class PendingInstallShortcutInfo {
- Intent data;
- Intent launchIntent;
- String name;
- Bitmap icon;
- Intent.ShortcutIconResource iconResource;
-
- public PendingInstallShortcutInfo(Intent rawData, String shortcutName,
- Intent shortcutIntent) {
- data = rawData;
- name = shortcutName;
- launchIntent = shortcutIntent;
- }
- }
-
public void onReceive(Context context, Intent data) {
if (!ACTION_INSTALL_SHORTCUT.equals(data.getAction())) {
return;
}
if (DBG) Log.d(TAG, "Got INSTALL_SHORTCUT: " + data.toUri(0));
+ PendingInstallShortcutInfo info = new PendingInstallShortcutInfo(data, context);
- Intent intent = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT);
- if (intent == null) {
- return;
- }
+ queuePendingShortcutInfo(info, context);
+ }
- // This name is only used for comparisons and notifications, so fall back to activity name
- // if not supplied
- String name = ensureValidName(context, intent,
- data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME)).toString();
- Bitmap icon = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_ICON);
- Intent.ShortcutIconResource iconResource =
- data.getParcelableExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE);
+ static void queueInstallShortcut(LauncherActivityInfoCompat info, Context context) {
+ queuePendingShortcutInfo(new PendingInstallShortcutInfo(info, context), context);
+ }
+ private static void queuePendingShortcutInfo(PendingInstallShortcutInfo info, Context context) {
// Queue the item up for adding if launcher has not loaded properly yet
LauncherAppState.setApplicationContext(context.getApplicationContext());
LauncherAppState app = LauncherAppState.getInstance();
- boolean launcherNotLoaded = (app.getDynamicGrid() == null);
-
- PendingInstallShortcutInfo info = new PendingInstallShortcutInfo(data, name, intent);
- info.icon = icon;
- info.iconResource = iconResource;
+ boolean launcherNotLoaded = app.getModel().getCallback() == null;
String spKey = LauncherAppState.getSharedPreferencesKey();
SharedPreferences sp = context.getSharedPreferences(spKey, Context.MODE_PRIVATE);
@@ -261,33 +178,22 @@
static void flushInstallQueue(Context context) {
String spKey = LauncherAppState.getSharedPreferencesKey();
SharedPreferences sp = context.getSharedPreferences(spKey, Context.MODE_PRIVATE);
- ArrayList<PendingInstallShortcutInfo> installQueue = getAndClearInstallQueue(sp);
+ ArrayList<PendingInstallShortcutInfo> installQueue = getAndClearInstallQueue(sp, context);
if (!installQueue.isEmpty()) {
Iterator<PendingInstallShortcutInfo> iter = installQueue.iterator();
ArrayList<ItemInfo> addShortcuts = new ArrayList<ItemInfo>();
- int result = INSTALL_SHORTCUT_SUCCESSFUL;
- String duplicateName = "";
while (iter.hasNext()) {
final PendingInstallShortcutInfo pendingInfo = iter.next();
- //final Intent data = pendingInfo.data;
final Intent intent = pendingInfo.launchIntent;
- final String name = pendingInfo.name;
if (LauncherAppState.isDisableAllApps() && !isValidShortcutLaunchIntent(intent)) {
if (DBG) Log.d(TAG, "Ignoring shortcut with launchIntent:" + intent);
continue;
}
- final boolean exists = LauncherModel.shortcutExists(context, name, intent);
- //final boolean allowDuplicate = data.getBooleanExtra(Launcher.EXTRA_SHORTCUT_DUPLICATE, true);
-
// If the intent specifies a package, make sure the package exists
- String packageName = intent.getPackage();
- if (packageName == null) {
- packageName = intent.getComponent() == null ? null :
- intent.getComponent().getPackageName();
- }
- if (packageName != null && !packageName.isEmpty()) {
+ String packageName = pendingInfo.getTargetPackage();
+ if (TextUtils.isEmpty(packageName)) {
UserHandleCompat myUserHandle = UserHandleCompat.myUserHandle();
if (!LauncherModel.isValidPackage(context, packageName, myUserHandle)) {
if (DBG) Log.d(TAG, "Ignoring shortcut for absent package:" + intent);
@@ -295,19 +201,12 @@
}
}
+ final boolean exists = LauncherModel.shortcutExists(context, pendingInfo.label,
+ intent, pendingInfo.user);
if (!exists) {
// Generate a shortcut info to add into the model
- ShortcutInfo info = getShortcutInfo(context, pendingInfo.data,
- pendingInfo.launchIntent);
- addShortcuts.add(info);
+ addShortcuts.add(pendingInfo.getShortcutInfo());
}
-
- }
-
- // Notify the user once if we weren't able to place any duplicates
- if (result == INSTALL_SHORTCUT_IS_DUPLICATE) {
- Toast.makeText(context, context.getString(R.string.shortcut_duplicate,
- duplicateName), Toast.LENGTH_SHORT).show();
}
// Add the new apps to the model and bind them
@@ -342,22 +241,6 @@
return true;
}
- private static ShortcutInfo getShortcutInfo(Context context, Intent data,
- Intent launchIntent) {
- if (launchIntent.getAction() == null) {
- launchIntent.setAction(Intent.ACTION_VIEW);
- } else if (launchIntent.getAction().equals(Intent.ACTION_MAIN) &&
- launchIntent.getCategories() != null &&
- launchIntent.getCategories().contains(Intent.CATEGORY_LAUNCHER)) {
- launchIntent.addFlags(
- Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
- }
- LauncherAppState app = LauncherAppState.getInstance();
- ShortcutInfo info = app.getModel().infoFromShortcutIntent(context, data);
- info.title = ensureValidName(context, launchIntent, info.title);
- return info;
- }
-
/**
* Ensures that we have a valid, non-null name. If the provided name is null, we will return
* the application name instead.
@@ -374,4 +257,171 @@
}
return name;
}
+
+ private static class PendingInstallShortcutInfo {
+
+ final LauncherActivityInfoCompat activityInfo;
+
+ final Intent data;
+ final Context mContext;
+ final Intent launchIntent;
+ final String label;
+ final UserHandleCompat user;
+
+ /**
+ * Initializes a PendingInstallShortcutInfo received from a different app.
+ */
+ public PendingInstallShortcutInfo(Intent data, Context context) {
+ this.data = data;
+ mContext = context;
+
+ launchIntent = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT);
+ label = data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME);
+ user = UserHandleCompat.myUserHandle();
+ activityInfo = null;
+ }
+
+ /**
+ * Initializes a PendingInstallShortcutInfo to represent a launcher target.
+ */
+ public PendingInstallShortcutInfo(LauncherActivityInfoCompat info, Context context) {
+ this.data = null;
+ mContext = context;
+ activityInfo = info;
+ user = info.getUser();
+
+ launchIntent = AppInfo.makeLaunchIntent(context, info, user);
+ label = info.getLabel().toString();
+ }
+
+ public String encodeToString() {
+ if (activityInfo != null) {
+ try {
+ // If it a launcher target, we only need component name, and user to
+ // recreate this.
+ return new JSONStringer()
+ .object()
+ .key(LAUNCH_INTENT_KEY).value(launchIntent.toUri(0))
+ .key(APP_SHORTCUT_TYPE_KEY).value(true)
+ .key(USER_HANDLE_KEY).value(UserManagerCompat.getInstance(mContext)
+ .getSerialNumberForUser(user))
+ .endObject().toString();
+ } catch (JSONException e) {
+ Log.d(TAG, "Exception when adding shortcut: " + e);
+ return null;
+ }
+ }
+
+ if (launchIntent.getAction() == null) {
+ launchIntent.setAction(Intent.ACTION_VIEW);
+ } else if (launchIntent.getAction().equals(Intent.ACTION_MAIN) &&
+ launchIntent.getCategories() != null &&
+ launchIntent.getCategories().contains(Intent.CATEGORY_LAUNCHER)) {
+ launchIntent.addFlags(
+ Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
+ }
+
+ // This name is only used for comparisons and notifications, so fall back to activity
+ // name if not supplied
+ String name = ensureValidName(mContext, launchIntent, label).toString();
+ Bitmap icon = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_ICON);
+ Intent.ShortcutIconResource iconResource =
+ data.getParcelableExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE);
+
+ // Only encode the parameters which are supported by the API.
+ try {
+ JSONStringer json = new JSONStringer()
+ .object()
+ .key(LAUNCH_INTENT_KEY).value(launchIntent.toUri(0))
+ .key(NAME_KEY).value(name);
+ if (icon != null) {
+ byte[] iconByteArray = ItemInfo.flattenBitmap(icon);
+ json = json.key(ICON_KEY).value(
+ Base64.encodeToString(
+ iconByteArray, 0, iconByteArray.length, Base64.DEFAULT));
+ }
+ if (iconResource != null) {
+ json = json.key(ICON_RESOURCE_NAME_KEY).value(iconResource.resourceName);
+ json = json.key(ICON_RESOURCE_PACKAGE_NAME_KEY)
+ .value(iconResource.packageName);
+ }
+ return json.endObject().toString();
+ } catch (JSONException e) {
+ Log.d(TAG, "Exception when adding shortcut: " + e);
+ }
+ return null;
+ }
+
+ public ShortcutInfo getShortcutInfo() {
+ if (activityInfo != null) {
+ final ShortcutInfo info = new ShortcutInfo();
+ info.user = user;
+ info.title = label;
+ info.contentDescription = label;
+ info.customIcon = false;
+ info.intent = launchIntent;
+ info.itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
+ info.flags = AppInfo.initFlags(activityInfo);
+ info.firstInstallTime = activityInfo.getFirstInstallTime();
+ return info;
+ } else {
+ return LauncherAppState.getInstance().getModel().infoFromShortcutIntent(mContext, data);
+ }
+ }
+
+ public String getTargetPackage() {
+ String packageName = launchIntent.getPackage();
+ if (packageName == null) {
+ packageName = launchIntent.getComponent() == null ? null :
+ launchIntent.getComponent().getPackageName();
+ }
+ return packageName;
+ }
+ }
+
+ private static PendingInstallShortcutInfo decode(String encoded, Context context) {
+ try {
+ JSONObject object = (JSONObject) new JSONTokener(encoded).nextValue();
+ Intent launcherIntent = Intent.parseUri(object.getString(LAUNCH_INTENT_KEY), 0);
+
+ if (object.optBoolean(APP_SHORTCUT_TYPE_KEY)) {
+ // The is an internal launcher target shortcut.
+ UserHandleCompat user = UserManagerCompat.getInstance(context)
+ .getUserForSerialNumber(object.getLong(USER_HANDLE_KEY));
+ if (user == null) {
+ return null;
+ }
+
+ LauncherActivityInfoCompat info = LauncherAppsCompat.getInstance(context)
+ .resolveActivity(launcherIntent, user);
+ return info == null ? null : new PendingInstallShortcutInfo(info, context);
+ }
+
+ Intent data = new Intent();
+ data.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launcherIntent);
+ data.putExtra(Intent.EXTRA_SHORTCUT_NAME, object.getString(NAME_KEY));
+
+ String iconBase64 = object.optString(ICON_KEY);
+ String iconResourceName = object.optString(ICON_RESOURCE_NAME_KEY);
+ String iconResourcePackageName = object.optString(ICON_RESOURCE_PACKAGE_NAME_KEY);
+ if (iconBase64 != null && !iconBase64.isEmpty()) {
+ byte[] iconArray = Base64.decode(iconBase64, Base64.DEFAULT);
+ Bitmap b = BitmapFactory.decodeByteArray(iconArray, 0, iconArray.length);
+ data.putExtra(Intent.EXTRA_SHORTCUT_ICON, b);
+ } else if (iconResourceName != null && !iconResourceName.isEmpty()) {
+ Intent.ShortcutIconResource iconResource =
+ new Intent.ShortcutIconResource();
+ iconResource.resourceName = iconResourceName;
+ iconResource.packageName = iconResourcePackageName;
+ data.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
+ }
+
+ return new PendingInstallShortcutInfo(data, context);
+ } catch (JSONException e) {
+ Log.d(TAG, "Exception reading shortcut to add: " + e);
+ } catch (URISyntaxException e) {
+ Log.d(TAG, "Exception reading shortcut to add: " + e);
+ }
+ return null;
+ }
}
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 8b3b2a1..22db3ac 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -66,7 +66,6 @@
import android.os.Message;
import android.os.StrictMode;
import android.os.SystemClock;
-import android.speech.RecognizerIntent;
import android.text.Selection;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
@@ -96,7 +95,6 @@
import android.widget.Advanceable;
import android.widget.FrameLayout;
import android.widget.ImageView;
-import android.widget.TextView;
import android.widget.Toast;
import com.android.launcher3.DropTarget.DragObject;
@@ -168,7 +166,6 @@
// To turn on these properties, type
// adb shell setprop log.tag.PROPERTY_NAME [VERBOSE | SUPPRESS]
- static final String FORCE_ENABLE_ROTATION_PROPERTY = "launcher_force_rotate";
static final String DUMP_STATE_PROPERTY = "launcher_dump_state";
static final String DISABLE_ALL_APPS_PROPERTY = "launcher_noallapps";
@@ -210,15 +207,12 @@
static final String ACTION_FIRST_LOAD_COMPLETE =
"com.android.launcher3.action.FIRST_LOAD_COMPLETE";
- private static final String TOOLBAR_ICON_METADATA_NAME = "com.android.launcher.toolbar_icon";
- private static final String TOOLBAR_SEARCH_ICON_METADATA_NAME =
- "com.android.launcher.toolbar_search_icon";
- private static final String TOOLBAR_VOICE_SEARCH_ICON_METADATA_NAME =
- "com.android.launcher.toolbar_voice_search_icon";
-
public static final String SHOW_WEIGHT_WATCHER = "debug.show_mem";
public static final boolean SHOW_WEIGHT_WATCHER_DEFAULT = false;
+ private static final String QSB_WIDGET_ID = "qsb_widget_id";
+ private static final String QSB_WIDGET_PROVIDER = "qsb_widget_provider";
+
public static final String USER_HAS_MIGRATED = "launcher.user_migrated_from_old_data";
/** The different states that Launcher can be in. */
@@ -282,7 +276,7 @@
private AppsCustomizeTabHost mAppsCustomizeTabHost;
private AppsCustomizePagedView mAppsCustomizeContent;
private boolean mAutoAdvanceRunning = false;
- private View mQsb;
+ private AppWidgetHostView mQsb;
private Bundle mSavedState;
// We set the state in both onCreate and then onNewIntent in some cases, which causes both
@@ -330,10 +324,6 @@
// match the sensor state.
private final int mRestoreScreenOrientationDelay = 500;
- // External icons saved in case of resource changes, orientation, etc.
- private static Drawable.ConstantState[] sGlobalSearchIcon = new Drawable.ConstantState[2];
- private static Drawable.ConstantState[] sVoiceSearchIcon = new Drawable.ConstantState[2];
-
private Drawable mWorkspaceBackgroundDrawable;
private final ArrayList<Integer> mSynchronouslyBoundPages = new ArrayList<Integer>();
@@ -371,8 +361,6 @@
private static PendingAddArguments sPendingAddItem;
- public static boolean sForceEnableRotation = isPropertyEnabled(FORCE_ENABLE_ROTATION_PROPERTY);
-
private static class PendingAddArguments {
int requestCode;
Intent intent;
@@ -387,10 +375,6 @@
FocusIndicatorView mFocusHandler;
- static boolean isPropertyEnabled(String propertyName) {
- return Log.isLoggable(propertyName, Log.VERBOSE);
- }
-
@Override
protected void onCreate(Bundle savedInstanceState) {
if (DEBUG_STRICT_MODE) {
@@ -484,8 +468,6 @@
IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
registerReceiver(mCloseSystemDialogsReceiver, filter);
- updateGlobalIcons();
-
// On large interfaces, we want the screen to auto-rotate based on the current orientation
unlockScreenOrientation(true);
@@ -567,28 +549,6 @@
}
}
- private void updateGlobalIcons() {
- boolean searchVisible = false;
- boolean voiceVisible = false;
- // If we have a saved version of these external icons, we load them up immediately
- int coi = getCurrentOrientationIndexForGlobalIcons();
- if (sGlobalSearchIcon[coi] == null || sVoiceSearchIcon[coi] == null) {
- searchVisible = updateGlobalSearchIcon();
- voiceVisible = updateVoiceSearchIcon(searchVisible);
- }
- if (sGlobalSearchIcon[coi] != null) {
- updateGlobalSearchIcon(sGlobalSearchIcon[coi]);
- searchVisible = true;
- }
- if (sVoiceSearchIcon[coi] != null) {
- updateVoiceSearchIcon(sVoiceSearchIcon[coi]);
- voiceVisible = true;
- }
- if (mSearchDropTargetBar != null) {
- mSearchDropTargetBar.onSearchPackagesChanged(searchVisible, voiceVisible);
- }
- }
-
private void checkForLocaleChange() {
if (sLocaleConfiguration == null) {
new AsyncTask<Void, Void, LocaleConfiguration>() {
@@ -1078,12 +1038,6 @@
// Process any items that were added while Launcher was away.
InstallShortcutReceiver.disableAndFlushInstallQueue(this);
- // Update the voice search button proxy
- updateVoiceButtonProxyVisible(false);
-
- // Again, as with the above scenario, it's possible that one or more of the global icons
- // were updated in the wrong orientation.
- updateGlobalIcons();
if (DEBUG_RESUME_TIME) {
Log.d(TAG, "Time spent in onResume: " + (System.currentTimeMillis() - startTime));
}
@@ -1473,6 +1427,7 @@
dragController.addDropTarget(mWorkspace);
if (mSearchDropTargetBar != null) {
mSearchDropTargetBar.setup(this, dragController);
+ mSearchDropTargetBar.setQsbSearchBar(getQsbBar());
}
if (getResources().getBoolean(R.bool.debug_memory_enabled)) {
@@ -2494,7 +2449,7 @@
case KeyEvent.KEYCODE_HOME:
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
- if (isPropertyEnabled(DUMP_STATE_PROPERTY)) {
+ if (Utilities.isPropertyEnabled(DUMP_STATE_PROPERTY)) {
dumpState();
return true;
}
@@ -2645,51 +2600,6 @@
}
/**
- * Event handler for the search button
- *
- * @param v The view that was clicked.
- */
- public void onClickSearchButton(View v) {
- v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
-
- onSearchRequested();
- }
-
- /**
- * Event handler for the voice button
- *
- * @param v The view that was clicked.
- */
- public void onClickVoiceButton(View v) {
- v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
-
- startVoice();
- }
-
- public void startVoice() {
- if (mLauncherCallbacks != null && mLauncherCallbacks.providesSearch()) {
- mLauncherCallbacks.startVoice();
- return;
- }
-
- try {
- final SearchManager searchManager =
- (SearchManager) getSystemService(Context.SEARCH_SERVICE);
- ComponentName activityName = searchManager.getGlobalSearchActivity();
- Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- if (activityName != null) {
- intent.setPackage(activityName.getPackageName());
- }
- startActivity(null, intent, "onClickVoiceButton");
- } catch (ActivityNotFoundException e) {
- Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivitySafely(null, intent, "onClickVoiceButton");
- }
- }
-
- /**
* Event handler for the "grid" button that appears on the home screen, which
* enters all apps mode.
*
@@ -2967,10 +2877,8 @@
}
void startApplicationDetailsActivity(ComponentName componentName, UserHandleCompat user) {
- String packageName = componentName.getPackageName();
try {
LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(this);
- UserManagerCompat userManager = UserManagerCompat.getInstance(this);
launcherApps.showAppDetailsForProfile(componentName, user);
} catch (SecurityException e) {
Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show();
@@ -3445,8 +3353,6 @@
final View page = content.getPageAt(content.getCurrentPage());
final View revealView = toView.findViewById(R.id.fake_page);
- final float initialPanelAlpha = 1f;
-
final boolean isWidgetTray = contentType == AppsCustomizePagedView.ContentType.Widgets;
if (isWidgetTray) {
revealView.setBackground(res.getDrawable(R.drawable.quantum_panel_dark));
@@ -4032,137 +3938,8 @@
// TODO
}
- /**
- * Hides the hotseat area.
- */
- void hideHotseat(boolean animated) {
- if (!LauncherAppState.getInstance().isScreenLarge()) {
- if (animated) {
- if (mHotseat.getAlpha() != 0f) {
- int duration = 0;
- if (mSearchDropTargetBar != null) {
- duration = mSearchDropTargetBar.getTransitionOutDuration();
- }
- mHotseat.animate().alpha(0f).setDuration(duration);
- }
- } else {
- mHotseat.setAlpha(0f);
- }
- }
- }
-
- /**
- * Add an item from all apps or customize onto the given workspace screen.
- * If layout is null, add to the current screen.
- */
- void addExternalItemToScreen(ItemInfo itemInfo, final CellLayout layout) {
- if (!mWorkspace.addExternalItemToScreen(itemInfo, layout)) {
- showOutOfSpaceMessage(isHotseatLayout(layout));
- }
- }
-
- /** Maps the current orientation to an index for referencing orientation correct global icons */
- private int getCurrentOrientationIndexForGlobalIcons() {
- // default - 0, landscape - 1
- switch (getResources().getConfiguration().orientation) {
- case Configuration.ORIENTATION_LANDSCAPE:
- return 1;
- default:
- return 0;
- }
- }
-
- private Drawable getExternalPackageToolbarIcon(ComponentName activityName, String resourceName) {
- try {
- PackageManager packageManager = getPackageManager();
- // Look for the toolbar icon specified in the activity meta-data
- Bundle metaData = packageManager.getActivityInfo(
- activityName, PackageManager.GET_META_DATA).metaData;
- if (metaData != null) {
- int iconResId = metaData.getInt(resourceName);
- if (iconResId != 0) {
- Resources res = packageManager.getResourcesForActivity(activityName);
- return res.getDrawable(iconResId);
- }
- }
- } catch (NameNotFoundException e) {
- // This can happen if the activity defines an invalid drawable
- Log.w(TAG, "Failed to load toolbar icon; " + activityName.flattenToShortString() +
- " not found", e);
- } catch (Resources.NotFoundException nfe) {
- // This can happen if the activity defines an invalid drawable
- Log.w(TAG, "Failed to load toolbar icon from " + activityName.flattenToShortString(),
- nfe);
- }
- return null;
- }
-
- // if successful in getting icon, return it; otherwise, set button to use default drawable
- private Drawable.ConstantState updateTextButtonWithIconFromExternalActivity(
- int buttonId, ComponentName activityName, int fallbackDrawableId,
- String toolbarResourceName) {
- Drawable toolbarIcon = getExternalPackageToolbarIcon(activityName, toolbarResourceName);
- Resources r = getResources();
- int w = r.getDimensionPixelSize(R.dimen.toolbar_external_icon_width);
- int h = r.getDimensionPixelSize(R.dimen.toolbar_external_icon_height);
-
- TextView button = (TextView) findViewById(buttonId);
- // If we were unable to find the icon via the meta-data, use a generic one
- if (toolbarIcon == null) {
- toolbarIcon = r.getDrawable(fallbackDrawableId);
- toolbarIcon.setBounds(0, 0, w, h);
- if (button != null) {
- button.setCompoundDrawables(toolbarIcon, null, null, null);
- }
- return null;
- } else {
- toolbarIcon.setBounds(0, 0, w, h);
- if (button != null) {
- button.setCompoundDrawables(toolbarIcon, null, null, null);
- }
- return toolbarIcon.getConstantState();
- }
- }
-
- // if successful in getting icon, return it; otherwise, set button to use default drawable
- private Drawable.ConstantState updateButtonWithIconFromExternalActivity(
- int buttonId, ComponentName activityName, int fallbackDrawableId,
- String toolbarResourceName) {
- ImageView button = (ImageView) findViewById(buttonId);
- Drawable toolbarIcon = getExternalPackageToolbarIcon(activityName, toolbarResourceName);
-
- if (button != null) {
- // If we were unable to find the icon via the meta-data, use a
- // generic one
- if (toolbarIcon == null) {
- button.setImageResource(fallbackDrawableId);
- } else {
- button.setImageDrawable(toolbarIcon);
- }
- }
-
- return toolbarIcon != null ? toolbarIcon.getConstantState() : null;
-
- }
-
- private void updateTextButtonWithDrawable(int buttonId, Drawable d) {
- TextView button = (TextView) findViewById(buttonId);
- button.setCompoundDrawables(d, null, null, null);
- }
-
- private void updateButtonWithDrawable(int buttonId, Drawable.ConstantState d) {
- ImageView button = (ImageView) findViewById(buttonId);
- 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();
- }
+ protected void disableVoiceButtonProxy(boolean disable) {
+ // NO-OP
}
public View getQsbBar() {
@@ -4171,140 +3948,54 @@
}
if (mQsb == null) {
- mQsb = mInflater.inflate(R.layout.qsb, mSearchDropTargetBar, false);
- mSearchDropTargetBar.addView(mQsb);
+ AppWidgetProviderInfo searchProvider = Utilities.getSearchWidgetProvider(this);
+ if (searchProvider == null) {
+ return null;
+ }
+
+ Bundle opts = new Bundle();
+ opts.putInt(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY,
+ AppWidgetProviderInfo.WIDGET_CATEGORY_SEARCHBOX);
+
+ SharedPreferences sp = getSharedPreferences(
+ LauncherAppState.getSharedPreferencesKey(), MODE_PRIVATE);
+ int widgetId = sp.getInt(QSB_WIDGET_ID, -1);
+ AppWidgetProviderInfo widgetInfo = mAppWidgetManager.getAppWidgetInfo(widgetId);
+ if (!searchProvider.provider.flattenToString().equals(
+ sp.getString(QSB_WIDGET_PROVIDER, null))
+ || (widgetInfo == null)
+ || !widgetInfo.provider.equals(searchProvider.provider)) {
+ // A valid widget is not already bound.
+ if (widgetId > -1) {
+ mAppWidgetHost.deleteAppWidgetId(widgetId);
+ widgetId = -1;
+ }
+
+ // Try to bind a new widget
+ widgetId = mAppWidgetHost.allocateAppWidgetId();
+
+ if (!AppWidgetManagerCompat.getInstance(this)
+ .bindAppWidgetIdIfAllowed(widgetId, searchProvider, opts)) {
+ mAppWidgetHost.deleteAppWidgetId(widgetId);
+ widgetId = -1;
+ }
+
+ sp.edit()
+ .putInt(QSB_WIDGET_ID, widgetId)
+ .putString(QSB_WIDGET_PROVIDER, searchProvider.provider.flattenToString())
+ .commit();
+ }
+
+ if (widgetId != -1) {
+ mQsb = mAppWidgetHost.createView(this, widgetId, searchProvider);
+ mQsb.updateAppWidgetOptions(opts);
+ mQsb.setPadding(0, 0, 0, 0);
+ mSearchDropTargetBar.addView(mQsb);
+ }
}
return mQsb;
}
- protected boolean updateGlobalSearchIcon() {
- if (mLauncherCallbacks != null && mLauncherCallbacks.providesSearch()) {
- return true;
- }
-
- final View searchButtonContainer = findViewById(R.id.search_button_container);
- final ImageView searchButton = (ImageView) findViewById(R.id.search_button);
- final View voiceButtonContainer = findViewById(R.id.voice_button_container);
- final View voiceButton = findViewById(R.id.voice_button);
-
- final SearchManager searchManager =
- (SearchManager) getSystemService(Context.SEARCH_SERVICE);
- ComponentName activityName = searchManager.getGlobalSearchActivity();
- if (activityName != null) {
- int coi = getCurrentOrientationIndexForGlobalIcons();
- sGlobalSearchIcon[coi] = updateButtonWithIconFromExternalActivity(
- R.id.search_button, activityName, R.drawable.ic_home_search_normal_holo,
- TOOLBAR_SEARCH_ICON_METADATA_NAME);
- if (sGlobalSearchIcon[coi] == null) {
- sGlobalSearchIcon[coi] = updateButtonWithIconFromExternalActivity(
- R.id.search_button, activityName, R.drawable.ic_home_search_normal_holo,
- TOOLBAR_ICON_METADATA_NAME);
- }
-
- 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
- if (searchButtonContainer != null) searchButtonContainer.setVisibility(View.GONE);
- if (voiceButtonContainer != null) voiceButtonContainer.setVisibility(View.GONE);
- if (searchButton != null) searchButton.setVisibility(View.GONE);
- if (voiceButton != null) voiceButton.setVisibility(View.GONE);
- updateVoiceButtonProxyVisible(false);
- return false;
- }
- }
-
- protected void updateGlobalSearchIcon(Drawable.ConstantState d) {
- if (mLauncherCallbacks != null && mLauncherCallbacks.providesSearch()) return;
- 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);
- }
-
- protected boolean updateVoiceSearchIcon(boolean searchVisible) {
- if (mLauncherCallbacks != null && mLauncherCallbacks.providesSearch()) {
- return true;
- }
- final View voiceButtonContainer = findViewById(R.id.voice_button_container);
- final View voiceButton = findViewById(R.id.voice_button);
-
- // We only show/update the voice search icon if the search icon is enabled as well
- final SearchManager searchManager =
- (SearchManager) getSystemService(Context.SEARCH_SERVICE);
- ComponentName globalSearchActivity = searchManager.getGlobalSearchActivity();
-
- ComponentName activityName = null;
- if (globalSearchActivity != null) {
- // Check if the global search activity handles voice search
- Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
- intent.setPackage(globalSearchActivity.getPackageName());
- activityName = intent.resolveActivity(getPackageManager());
- }
-
- if (activityName == null) {
- // Fallback: check if an activity other than the global search activity
- // resolves this
- Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
- activityName = intent.resolveActivity(getPackageManager());
- }
- if (searchVisible && activityName != null) {
- int coi = getCurrentOrientationIndexForGlobalIcons();
- sVoiceSearchIcon[coi] = updateButtonWithIconFromExternalActivity(
- R.id.voice_button, activityName, R.drawable.ic_home_voice_search_holo,
- TOOLBAR_VOICE_SEARCH_ICON_METADATA_NAME);
- if (sVoiceSearchIcon[coi] == null) {
- sVoiceSearchIcon[coi] = updateButtonWithIconFromExternalActivity(
- R.id.voice_button, activityName, R.drawable.ic_home_voice_search_holo,
- TOOLBAR_ICON_METADATA_NAME);
- }
- if (voiceButtonContainer != null) voiceButtonContainer.setVisibility(View.VISIBLE);
- voiceButton.setVisibility(View.VISIBLE);
- updateVoiceButtonProxyVisible(false);
- invalidatePressedFocusedStates(voiceButtonContainer, voiceButton);
- return true;
- } else {
- if (voiceButtonContainer != null) voiceButtonContainer.setVisibility(View.GONE);
- if (voiceButton != null) voiceButton.setVisibility(View.GONE);
- updateVoiceButtonProxyVisible(false);
- return false;
- }
- }
-
- protected void updateVoiceSearchIcon(Drawable.ConstantState d) {
- if (mLauncherCallbacks != null && mLauncherCallbacks.providesSearch()) {
- return;
- }
-
- 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);
- }
-
- public void updateVoiceButtonProxyVisible(boolean forceDisableVoiceButtonProxy) {
- if (mLauncherCallbacks != null) {
- forceDisableVoiceButtonProxy |= mLauncherCallbacks.forceDisableVoiceButtonProxy();
- }
- final View voiceButtonProxy = findViewById(R.id.voice_button_proxy);
- if (voiceButtonProxy != null) {
- boolean visible = !forceDisableVoiceButtonProxy &&
- mWorkspace.shouldVoiceButtonProxyBeVisible();
- voiceButtonProxy.setVisibility(visible ? View.VISIBLE : View.GONE);
- voiceButtonProxy.bringToFront();
- }
- }
-
- /**
- * This is an overrid eot disable the voice button proxy. If disabled is true, then the voice button proxy
- * will be hidden regardless of what shouldVoiceButtonProxyBeVisible() returns.
- */
- public void disableVoiceButtonProxy(boolean disabled) {
- updateVoiceButtonProxyVisible(disabled);
- }
-
@Override
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
final boolean result = super.dispatchPopulateAccessibilityEvent(event);
@@ -4883,13 +4574,15 @@
getDeviceProfile().getSearchBarBounds();
}
- @Override
public void bindSearchablesChanged() {
- boolean searchVisible = updateGlobalSearchIcon();
- boolean voiceVisible = updateVoiceSearchIcon(searchVisible);
- if (mSearchDropTargetBar != null) {
- mSearchDropTargetBar.onSearchPackagesChanged(searchVisible, voiceVisible);
+ if (mSearchDropTargetBar == null) {
+ return;
}
+ if (mQsb != null) {
+ mSearchDropTargetBar.removeView(mQsb);
+ mQsb = null;
+ }
+ mSearchDropTargetBar.setQsbSearchBar(getQsbBar());
}
/**
@@ -5113,19 +4806,14 @@
return oriMap[(d.getRotation() + indexOffset) % 4];
}
- public boolean isRotationEnabled() {
- boolean enableRotation = sForceEnableRotation ||
- getResources().getBoolean(R.bool.allow_rotation);
- return enableRotation;
- }
public void lockScreenOrientation() {
- if (isRotationEnabled()) {
+ if (Utilities.isRotationEnabled(this)) {
setRequestedOrientation(mapConfigurationOriActivityInfoOri(getResources()
.getConfiguration().orientation));
}
}
public void unlockScreenOrientation(boolean immediate) {
- if (isRotationEnabled()) {
+ if (Utilities.isRotationEnabled(this)) {
if (immediate) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
} else {
diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java
index 48af216..ec914d8 100644
--- a/src/com/android/launcher3/LauncherAppState.java
+++ b/src/com/android/launcher3/LauncherAppState.java
@@ -16,6 +16,7 @@
package com.android.launcher3;
+import android.annotation.TargetApi;
import android.app.SearchManager;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -26,16 +27,15 @@
import android.content.res.Resources;
import android.database.ContentObserver;
import android.graphics.Point;
+import android.os.Build;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.WindowManager;
-
import com.android.launcher3.compat.LauncherAppsCompat;
import com.android.launcher3.compat.PackageInstallerCompat;
import com.android.launcher3.compat.PackageInstallerCompat.PackageInstallInfo;
-
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -46,12 +46,14 @@
private final AppFilter mAppFilter;
private final BuildInfo mBuildInfo;
- private LauncherModel mModel;
- private IconCache mIconCache;
+ private final LauncherModel mModel;
+ private final IconCache mIconCache;
+
+ private final boolean mIsScreenLarge;
+ private final float mScreenDensity;
+ private final int mLongPressTimeout = 300;
+
private WidgetPreviewLoader.CacheDb mWidgetPreviewCacheDb;
- private boolean mIsScreenLarge;
- private float mScreenDensity;
- private int mLongPressTimeout = 300;
private boolean mWallpaperChangedSinceLastCheck;
private static WeakReference<LauncherProvider> sLauncherProvider;
@@ -159,9 +161,6 @@
};
LauncherModel setLauncher(Launcher launcher) {
- if (mModel == null) {
- throw new IllegalStateException("setLauncher() called before init()");
- }
mModel.initialize(launcher);
return mModel;
}
@@ -194,6 +193,7 @@
return LauncherFiles.SHARED_PREFERENCES_KEY;
}
+ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
DeviceProfile initDynamicGrid(Context context) {
// Determine the dynamic grid properties
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
@@ -269,7 +269,7 @@
public static boolean isDisableAllApps() {
// Returns false on non-dogfood builds.
return getInstance().mBuildInfo.isDogfoodBuild() &&
- Launcher.isPropertyEnabled(Launcher.DISABLE_ALL_APPS_PROPERTY);
+ Utilities.isPropertyEnabled(Launcher.DISABLE_ALL_APPS_PROPERTY);
}
public static boolean isDogfoodBuild() {
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index b04fc3f..11440c0 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -30,6 +30,7 @@
import android.content.Intent.ShortcutIconResource;
import android.content.IntentFilter;
import android.content.SharedPreferences;
+import android.content.pm.LauncherApps.Callback;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
@@ -75,7 +76,6 @@
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
-import java.util.concurrent.atomic.AtomicBoolean;
/**
* Maintains in-memory state of the Launcher. It is expected that there should be only one
@@ -110,6 +110,11 @@
private boolean mIsLoaderTaskRunning;
private volatile boolean mFlushingWorkerThread;
+ /**
+ * Maintain a set of packages per user, for which we added a shortcut on the workspace.
+ */
+ private static final String INSTALLED_SHORTCUTS_SET_PREFIX = "installed_shortcuts_set_for_user_";
+
// Specific runnable types that are run on the main thread deferred handler, this allows us to
// clear all queued binding runnables when the Launcher activity is destroyed.
private static final int MAIN_THREAD_NORMAL_RUNNABLE = 0;
@@ -343,7 +348,7 @@
// Process the updated package state
Runnable r = new Runnable() {
public void run() {
- Callbacks callbacks = mCallbacks != null ? mCallbacks.get() : null;
+ Callbacks callbacks = getCallback();
if (callbacks != null) {
callbacks.updatePackageState(installInfo);
}
@@ -356,7 +361,7 @@
// Process the updated package badge
Runnable r = new Runnable() {
public void run() {
- Callbacks callbacks = mCallbacks != null ? mCallbacks.get() : null;
+ Callbacks callbacks = getCallback();
if (callbacks != null) {
callbacks.updatePackageBadge(packageName);
}
@@ -366,7 +371,7 @@
}
public void addAppsToAllApps(final Context ctx, final ArrayList<AppInfo> allAppsApps) {
- final Callbacks callbacks = mCallbacks != null ? mCallbacks.get() : null;
+ final Callbacks callbacks = getCallback();
if (allAppsApps == null) {
throw new RuntimeException("allAppsApps must not be null");
@@ -380,7 +385,7 @@
public void run() {
runOnMainThread(new Runnable() {
public void run() {
- Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
+ Callbacks cb = getCallback();
if (callbacks == cb && cb != null) {
callbacks.bindAppsAdded(null, null, null, allAppsApps);
}
@@ -393,7 +398,7 @@
public void addAndBindAddedWorkspaceApps(final Context context,
final ArrayList<ItemInfo> workspaceApps) {
- final Callbacks callbacks = mCallbacks != null ? mCallbacks.get() : null;
+ final Callbacks callbacks = getCallback();
if (workspaceApps == null) {
throw new RuntimeException("workspaceApps and allAppsApps must not be null");
@@ -425,7 +430,7 @@
final Intent launchIntent = a.getIntent();
// Short-circuit this logic if the icon exists somewhere on the workspace
- if (shortcutExists(context, name, launchIntent)) {
+ if (shortcutExists(context, name, launchIntent, a.user)) {
continue;
}
@@ -484,7 +489,7 @@
if (!addedShortcutsFinal.isEmpty()) {
runOnMainThread(new Runnable() {
public void run() {
- Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
+ Callbacks cb = getCallback();
if (callbacks == cb && cb != null) {
final ArrayList<ItemInfo> addAnimated = new ArrayList<ItemInfo>();
final ArrayList<ItemInfo> addNotAnimated = new ArrayList<ItemInfo>();
@@ -844,7 +849,8 @@
* Returns true if the shortcuts already exists in the database.
* we identify a shortcut by its title and intent.
*/
- static boolean shortcutExists(Context context, String title, Intent intent) {
+ static boolean shortcutExists(Context context, String title, Intent intent,
+ UserHandleCompat user) {
final ContentResolver cr = context.getContentResolver();
final Intent intentWithPkg, intentWithoutPkg;
@@ -863,16 +869,18 @@
intentWithPkg = intent;
intentWithoutPkg = intent;
}
+ String userSerial = Long.toString(UserManagerCompat.getInstance(context)
+ .getSerialNumberForUser(user));
Cursor c = cr.query(LauncherSettings.Favorites.CONTENT_URI,
- new String[] { "title", "intent" }, "title=? and (intent=? or intent=?)",
- new String[] { title, intentWithPkg.toUri(0), intentWithoutPkg.toUri(0) }, null);
- boolean result = false;
+ new String[] { "title", "intent", "profileId" },
+ "title=? and (intent=? or intent=?) and profileId=?",
+ new String[] { title, intentWithPkg.toUri(0), intentWithoutPkg.toUri(0), userSerial },
+ null);
try {
- result = c.moveToFirst();
+ return c.moveToFirst();
} finally {
c.close();
}
- return result;
}
/**
@@ -1285,11 +1293,9 @@
mPreviousConfigMcc = currentConfig.mcc;
} else if (SearchManager.INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED.equals(action) ||
SearchManager.INTENT_ACTION_SEARCHABLES_CHANGED.equals(action)) {
- if (mCallbacks != null) {
- Callbacks callbacks = mCallbacks.get();
- if (callbacks != null) {
- callbacks.bindSearchablesChanged();
- }
+ Callbacks callbacks = getCallback();
+ if (callbacks != null) {
+ callbacks.bindSearchablesChanged();
}
}
}
@@ -1321,13 +1327,11 @@
*/
public void startLoaderFromBackground() {
boolean runLoader = false;
- if (mCallbacks != null) {
- Callbacks callbacks = mCallbacks.get();
- if (callbacks != null) {
- // Only actually run the loader if they're not paused.
- if (!callbacks.setLoadOnResume()) {
- runLoader = true;
- }
+ Callbacks callbacks = getCallback();
+ if (callbacks != null) {
+ // Only actually run the loader if they're not paused.
+ if (!callbacks.setLoadOnResume()) {
+ runLoader = true;
}
}
if (runLoader) {
@@ -2811,6 +2815,8 @@
// Clear the list of apps
mBgAllAppsList.clear();
+ SharedPreferences prefs = mContext.getSharedPreferences(
+ LauncherAppState.getSharedPreferencesKey(), Context.MODE_PRIVATE);
for (UserHandleCompat user : profiles) {
// Query for the set of apps
final long qiaTime = DEBUG_LOADERS ? SystemClock.uptimeMillis() : 0;
@@ -2821,6 +2827,7 @@
Log.d(TAG, "getActivityList got " + apps.size() + " apps for user " + user);
}
// Fail if we don't have any apps
+ // TODO: Fix this. Only fail for the current user.
if (apps == null || apps.isEmpty()) {
return;
}
@@ -2839,6 +2846,25 @@
// This builds the icon bitmaps.
mBgAllAppsList.add(new AppInfo(mContext, app, user, mIconCache, mLabelCache));
}
+
+ if (!user.equals(UserHandleCompat.myUserHandle())) {
+ // Add shortcuts for packages which were installed while launcher was dead.
+ String shortcutsSetKey = INSTALLED_SHORTCUTS_SET_PREFIX
+ + mUserManager.getSerialNumberForUser(user);
+ Set<String> packagesAdded = prefs.getStringSet(shortcutsSetKey, Collections.EMPTY_SET);
+ HashSet<String> newPackageSet = new HashSet<String>();
+
+ for (LauncherActivityInfoCompat info : apps) {
+ String packageName = info.getComponentName().getPackageName();
+ if (!packagesAdded.contains(packageName)
+ && !newPackageSet.contains(packageName)) {
+ InstallShortcutReceiver.queueInstallShortcut(info, mContext);
+ }
+ newPackageSet.add(packageName);
+ }
+
+ prefs.edit().putStringSet(shortcutsSetKey, newPackageSet).commit();
+ }
}
// Huh? Shouldn't this be inside the Runnable below?
final ArrayList<AppInfo> added = mBgAllAppsList.added;
@@ -2953,6 +2979,30 @@
mIconCache.remove(packages[i], mUser);
mBgAllAppsList.addPackage(context, packages[i], mUser);
}
+
+ // Auto add shortcuts for added packages.
+ if (!UserHandleCompat.myUserHandle().equals(mUser)) {
+ SharedPreferences prefs = context.getSharedPreferences(
+ LauncherAppState.getSharedPreferencesKey(), Context.MODE_PRIVATE);
+ String shortcutsSetKey = INSTALLED_SHORTCUTS_SET_PREFIX
+ + mUserManager.getSerialNumberForUser(mUser);
+ Set<String> shortcutSet = new HashSet<String>(
+ prefs.getStringSet(shortcutsSetKey,Collections.EMPTY_SET));
+
+ for (int i=0; i<N; i++) {
+ if (!shortcutSet.contains(packages[i])) {
+ shortcutSet.add(packages[i]);
+ List<LauncherActivityInfoCompat> activities =
+ mLauncherApps.getActivityList(packages[i], mUser);
+ if (activities != null && !activities.isEmpty()) {
+ InstallShortcutReceiver.queueInstallShortcut(
+ activities.get(0), context);
+ }
+ }
+ }
+
+ prefs.edit().putStringSet(shortcutsSetKey, shortcutSet).commit();
+ }
break;
case OP_UPDATE:
for (int i=0; i<N; i++) {
@@ -2963,6 +3013,19 @@
}
break;
case OP_REMOVE:
+ // Remove the packageName for the set of auto-installed shortcuts. This
+ // will ensure that the shortcut when the app is installed again.
+ if (!UserHandleCompat.myUserHandle().equals(mUser)) {
+ SharedPreferences prefs = context.getSharedPreferences(
+ LauncherAppState.getSharedPreferencesKey(), Context.MODE_PRIVATE);
+ String shortcutsSetKey = INSTALLED_SHORTCUTS_SET_PREFIX
+ + mUserManager.getSerialNumberForUser(mUser);
+ HashSet<String> shortcutSet = new HashSet<String>(
+ prefs.getStringSet(shortcutsSetKey, Collections.EMPTY_SET));
+ shortcutSet.removeAll(Arrays.asList(mPackages));
+ prefs.edit().putStringSet(shortcutsSetKey, shortcutSet).commit();
+ }
+ // Fall through
case OP_UNAVAILABLE:
boolean clearCache = mOp == OP_REMOVE;
for (int i=0; i<N; i++) {
@@ -2991,7 +3054,7 @@
mBgAllAppsList.removed.clear();
}
- final Callbacks callbacks = mCallbacks != null ? mCallbacks.get() : null;
+ final Callbacks callbacks = getCallback();
if (callbacks == null) {
Log.w(TAG, "Nobody to tell about the new app. Launcher is probably loading.");
return;
@@ -3021,7 +3084,7 @@
mHandler.post(new Runnable() {
public void run() {
- Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
+ Callbacks cb = getCallback();
if (callbacks == cb && cb != null) {
callbacks.bindAppsUpdated(modifiedFinal);
}
@@ -3134,7 +3197,7 @@
mHandler.post(new Runnable() {
public void run() {
- Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
+ Callbacks cb = getCallback();
if (callbacks == cb && cb != null) {
callbacks.bindShortcutsChanged(
updatedShortcuts, removedShortcuts, mUser);
@@ -3148,7 +3211,7 @@
if (!widgets.isEmpty()) {
mHandler.post(new Runnable() {
public void run() {
- Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
+ Callbacks cb = getCallback();
if (callbacks == cb && cb != null) {
callbacks.bindWidgetsRestored(widgets);
}
@@ -3189,14 +3252,11 @@
}
// Remove any queued items from the install queue
- String spKey = LauncherAppState.getSharedPreferencesKey();
- SharedPreferences sp =
- context.getSharedPreferences(spKey, Context.MODE_PRIVATE);
- InstallShortcutReceiver.removeFromInstallQueue(sp, removedPackageNames);
+ InstallShortcutReceiver.removeFromInstallQueue(context, removedPackageNames, mUser);
// Call the components-removed callback
mHandler.post(new Runnable() {
public void run() {
- Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
+ Callbacks cb = getCallback();
if (callbacks == cb && cb != null) {
callbacks.bindComponentsRemoved(
removedPackageNames, removedApps, mUser, removeReason);
@@ -3210,7 +3270,7 @@
mHandler.post(new Runnable() {
@Override
public void run() {
- Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
+ Callbacks cb = getCallback();
if (callbacks == cb && cb != null) {
callbacks.bindPackagesUpdated(widgetsAndShortcuts);
}
@@ -3220,7 +3280,7 @@
// Write all the logs to disk
mHandler.post(new Runnable() {
public void run() {
- Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
+ Callbacks cb = getCallback();
if (callbacks == cb && cb != null) {
callbacks.dumpLogsToLocalData();
}
@@ -3754,4 +3814,8 @@
Log.d(TAG, "mLoaderTask=null");
}
}
+
+ public Callbacks getCallback() {
+ return mCallbacks != null ? mCallbacks.get() : null;
+ }
}
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index 365d989..1715b02 100644
--- a/src/com/android/launcher3/LauncherProvider.java
+++ b/src/com/android/launcher3/LauncherProvider.java
@@ -16,7 +16,6 @@
package com.android.launcher3;
-import android.app.SearchManager;
import android.appwidget.AppWidgetHost;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
@@ -57,7 +56,6 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
-import java.util.List;
public class LauncherProvider extends ContentProvider {
private static final String TAG = "Launcher.LauncherProvider";
@@ -1342,29 +1340,8 @@
}
private ComponentName getSearchWidgetProvider() {
- SearchManager searchManager =
- (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE);
- ComponentName searchComponent = searchManager.getGlobalSearchActivity();
- if (searchComponent == null) return null;
- return getProviderInPackage(searchComponent.getPackageName());
- }
-
- /**
- * Gets an appwidget provider from the given package. If the package contains more than
- * one appwidget provider, an arbitrary one is returned.
- */
- private ComponentName getProviderInPackage(String packageName) {
- AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(mContext);
- List<AppWidgetProviderInfo> providers = appWidgetManager.getInstalledProviders();
- if (providers == null) return null;
- final int providerCount = providers.size();
- for (int i = 0; i < providerCount; i++) {
- ComponentName provider = providers.get(i).provider;
- if (provider != null && provider.getPackageName().equals(packageName)) {
- return provider;
- }
- }
- return null;
+ AppWidgetProviderInfo searchProvider = Utilities.getSearchWidgetProvider(mContext);
+ return (searchProvider == null) ? null : searchProvider.provider;
}
private void migrateLauncher2Shortcuts(SQLiteDatabase db, Uri uri) {
@@ -1455,6 +1432,12 @@
userHandle = UserHandleCompat.myUserHandle();
userSerialNumber = userManager.getSerialNumberForUser(userHandle);
}
+
+ if (userHandle == null) {
+ Launcher.addDumpLog(TAG, "skipping deleted user", true);
+ continue;
+ }
+
Launcher.addDumpLog(TAG, "migrating \""
+ c.getString(titleIndex) + "\" ("
+ cellX + "," + cellY + "@"
diff --git a/src/com/android/launcher3/SearchDropTargetBar.java b/src/com/android/launcher3/SearchDropTargetBar.java
index 6205088..99c2e08 100644
--- a/src/com/android/launcher3/SearchDropTargetBar.java
+++ b/src/com/android/launcher3/SearchDropTargetBar.java
@@ -22,7 +22,6 @@
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
@@ -50,7 +49,6 @@
private int mBarHeight;
private boolean mDeferOnDragEnd = false;
- private Drawable mPreviousBackground;
private boolean mEnableDropDownDropTargets;
public SearchDropTargetBar(Context context, AttributeSet attrs) {
@@ -70,7 +68,10 @@
dragController.setFlingToDeleteDropTarget(mDeleteDropTarget);
mInfoDropTarget.setLauncher(launcher);
mDeleteDropTarget.setLauncher(launcher);
- mQSBSearchBar = launcher.getQsbBar();
+ }
+
+ public void setQsbSearchBar(View qsb) {
+ mQSBSearchBar = qsb;
if (mQSBSearchBar != null) {
if (mEnableDropDownDropTargets) {
mQSBSearchBarAnim = LauncherAnimUtils.ofFloat(mQSBSearchBar, "translationY", 0,
@@ -224,20 +225,6 @@
}
}
- public void onSearchPackagesChanged(boolean searchVisible, boolean voiceVisible) {
- if (mQSBSearchBar != null) {
- Drawable bg = mQSBSearchBar.getBackground();
- if (bg != null && (!searchVisible && !voiceVisible)) {
- // Save the background and disable it
- mPreviousBackground = bg;
- mQSBSearchBar.setBackgroundResource(0);
- } else if (mPreviousBackground != null && (searchVisible || voiceVisible)) {
- // Restore the background
- mQSBSearchBar.setBackground(mPreviousBackground);
- }
- }
- }
-
public Rect getSearchBarBounds() {
if (mQSBSearchBar != null) {
final int[] pos = new int[2];
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java
index 7a16914..c0f7591 100644
--- a/src/com/android/launcher3/Utilities.java
+++ b/src/com/android/launcher3/Utilities.java
@@ -18,6 +18,9 @@
import android.annotation.TargetApi;
import android.app.Activity;
+import android.app.SearchManager;
+import android.appwidget.AppWidgetManager;
+import android.appwidget.AppWidgetProviderInfo;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.Context;
@@ -39,8 +42,6 @@
import android.graphics.drawable.Drawable;
import android.graphics.drawable.PaintDrawable;
import android.os.Build;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
import android.util.Log;
import android.util.Pair;
import android.util.SparseArray;
@@ -93,7 +94,7 @@
icon.setBounds(0, 0, sIconWidth, sIconHeight);
}
- private static boolean isPropertyEnabled(String propertyName) {
+ public static boolean isPropertyEnabled(String propertyName) {
return Log.isLoggable(propertyName, Log.VERBOSE);
}
@@ -508,4 +509,37 @@
return v.getKeyDispatcherState() != null;
}
}
+
+ /**
+ * Returns a widget with category {@link AppWidgetProviderInfo#WIDGET_CATEGORY_SEARCHBOX}
+ * provided by the same package which is set to be global search activity.
+ * If widgetCategory is not supported, or no such widget is found, returns the first widget
+ * provided by the package.
+ */
+ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
+ public static AppWidgetProviderInfo getSearchWidgetProvider(Context context) {
+ SearchManager searchManager =
+ (SearchManager) context.getSystemService(Context.SEARCH_SERVICE);
+ ComponentName searchComponent = searchManager.getGlobalSearchActivity();
+ if (searchComponent == null) return null;
+ String providerPkg = searchComponent.getPackageName();
+
+ AppWidgetProviderInfo defaultWidgetForSearchPackage = null;
+
+ AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
+ for (AppWidgetProviderInfo info : appWidgetManager.getInstalledProviders()) {
+ if (info.provider.getPackageName().equals(providerPkg)) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ if ((info.widgetCategory & AppWidgetProviderInfo.WIDGET_CATEGORY_SEARCHBOX) != 0) {
+ return info;
+ } else if (defaultWidgetForSearchPackage == null) {
+ defaultWidgetForSearchPackage = info;
+ }
+ } else {
+ return info;
+ }
+ }
+ }
+ return defaultWidgetForSearchPackage;
+ }
}
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 66d4ac0..2b520c5 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -1329,13 +1329,11 @@
if (mCustomContentCallbacks != null) {
mCustomContentCallbacks.onShow(false);
mCustomContentShowTime = System.currentTimeMillis();
- mLauncher.updateVoiceButtonProxyVisible(false);
}
} else if (hasCustomContent() && getNextPage() != 0 && mCustomContentShowing) {
mCustomContentShowing = false;
if (mCustomContentCallbacks != null) {
mCustomContentCallbacks.onHide();
- mLauncher.updateVoiceButtonProxyVisible(false);
}
}
}
@@ -2203,16 +2201,6 @@
return -offsetFromTopEdge + mInsets.top + offsetToCenterInOverview;
}
- boolean shouldVoiceButtonProxyBeVisible() {
- if (isOnOrMovingToCustomContent()) {
- return false;
- }
- if (mState != State.NORMAL) {
- return false;
- }
- return true;
- }
-
public void updateInteractionForState() {
if (mState != State.NORMAL) {
mLauncher.onInteractionBegin();
@@ -2461,14 +2449,15 @@
pageIndicator.setAlpha(finalHotseatAndPageIndicatorAlpha);
AlphaUpdateListener.updateVisibility(pageIndicator);
}
- searchBar.setAlpha(finalSearchBarAlpha);
- AlphaUpdateListener.updateVisibility(searchBar);
+ if (searchBar != null) {
+ searchBar.setAlpha(finalSearchBarAlpha);
+ AlphaUpdateListener.updateVisibility(searchBar);
+ }
updateCustomContentVisibility();
setScaleX(mNewScale);
setScaleY(mNewScale);
setTranslationY(finalWorkspaceTranslationY);
}
- mLauncher.updateVoiceButtonProxyVisible(false);
if (stateIsNormal) {
animateBackgroundGradient(0f, animated);