summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk3
-rw-r--r--res/drawable-hdpi/ic_allapps.pngbin10781 -> 8345 bytes
-rw-r--r--res/drawable-hdpi/ic_allapps_l.pngbin8345 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_allapps_pressed.pngbin9985 -> 8184 bytes
-rw-r--r--res/drawable-hdpi/ic_allapps_pressed_l.pngbin8184 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_setting.pngbin3282 -> 2286 bytes
-rw-r--r--res/drawable-hdpi/ic_setting_l.pngbin2286 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_setting_pressed.pngbin3642 -> 2293 bytes
-rw-r--r--res/drawable-hdpi/ic_setting_pressed_l.pngbin2293 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_wallpaper.pngbin2189 -> 1997 bytes
-rw-r--r--res/drawable-hdpi/ic_wallpaper_l.pngbin1997 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_wallpaper_pressed.pngbin2474 -> 1882 bytes
-rw-r--r--res/drawable-hdpi/ic_wallpaper_pressed_l.pngbin1882 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_widget.pngbin1560 -> 1580 bytes
-rw-r--r--res/drawable-hdpi/ic_widget_l.pngbin1580 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_widget_pressed.pngbin2332 -> 1524 bytes
-rw-r--r--res/drawable-hdpi/ic_widget_pressed_l.pngbin1524 -> 0 bytes
-rw-r--r--res/drawable-hdpi/quantum_panel.9.pngbin0 -> 448 bytes
-rw-r--r--res/drawable-hdpi/screenpanel.9.pngbin881 -> 1097 bytes
-rw-r--r--res/drawable-hdpi/screenpanel_hover.9.pngbin1096 -> 1125 bytes
-rw-r--r--res/drawable-hdpi/screenpanel_hover_l.9.pngbin1125 -> 0 bytes
-rw-r--r--res/drawable-hdpi/screenpanel_l.9.pngbin1097 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_allapps.pngbin6613 -> 4962 bytes
-rw-r--r--res/drawable-mdpi/ic_allapps_l.pngbin4962 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_allapps_pressed.pngbin6048 -> 5186 bytes
-rw-r--r--res/drawable-mdpi/ic_allapps_pressed_l.pngbin5186 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_setting.pngbin2065 -> 1577 bytes
-rw-r--r--res/drawable-mdpi/ic_setting_l.pngbin1577 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_setting_pressed.pngbin2182 -> 1617 bytes
-rw-r--r--res/drawable-mdpi/ic_setting_pressed_l.pngbin1617 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_wallpaper.pngbin1494 -> 1496 bytes
-rw-r--r--res/drawable-mdpi/ic_wallpaper_l.pngbin1496 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_wallpaper_pressed.pngbin1574 -> 1391 bytes
-rw-r--r--res/drawable-mdpi/ic_wallpaper_pressed_l.pngbin1391 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_widget.pngbin1174 -> 1182 bytes
-rw-r--r--res/drawable-mdpi/ic_widget_l.pngbin1182 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_widget_pressed.pngbin1487 -> 1177 bytes
-rw-r--r--res/drawable-mdpi/ic_widget_pressed_l.pngbin1177 -> 0 bytes
-rw-r--r--res/drawable-mdpi/quantum_panel.9.pngbin0 -> 353 bytes
-rw-r--r--res/drawable-mdpi/screenpanel.9.pngbin900 -> 774 bytes
-rw-r--r--res/drawable-mdpi/screenpanel_hover.9.pngbin975 -> 777 bytes
-rw-r--r--res/drawable-mdpi/screenpanel_hover_l.9.pngbin777 -> 0 bytes
-rw-r--r--res/drawable-mdpi/screenpanel_l.9.pngbin774 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_allapps.pngbin15138 -> 11053 bytes
-rw-r--r--res/drawable-xhdpi/ic_allapps_l.pngbin11053 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_allapps_pressed.pngbin13782 -> 10926 bytes
-rw-r--r--res/drawable-xhdpi/ic_allapps_pressed_l.pngbin10926 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_setting.pngbin4499 -> 2976 bytes
-rw-r--r--res/drawable-xhdpi/ic_setting_l.pngbin2976 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_setting_pressed.pngbin5300 -> 3013 bytes
-rw-r--r--res/drawable-xhdpi/ic_setting_pressed_l.pngbin3013 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_wallpaper.pngbin2875 -> 2401 bytes
-rw-r--r--res/drawable-xhdpi/ic_wallpaper_l.pngbin2401 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_wallpaper_pressed.pngbin3504 -> 2209 bytes
-rw-r--r--res/drawable-xhdpi/ic_wallpaper_pressed_l.pngbin2209 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_widget.pngbin1978 -> 1982 bytes
-rw-r--r--res/drawable-xhdpi/ic_widget_l.pngbin1982 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_widget_pressed.pngbin3360 -> 1883 bytes
-rw-r--r--res/drawable-xhdpi/ic_widget_pressed_l.pngbin1883 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/quantum_panel.9.pngbin0 -> 578 bytes
-rw-r--r--res/drawable-xhdpi/screenpanel.9.pngbin1403 -> 1493 bytes
-rw-r--r--res/drawable-xhdpi/screenpanel_hover.9.pngbin1704 -> 1507 bytes
-rw-r--r--res/drawable-xhdpi/screenpanel_hover_l.9.pngbin1507 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/screenpanel_l.9.pngbin1493 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_allapps.pngbin18589 -> 16980 bytes
-rw-r--r--res/drawable-xxhdpi/ic_allapps_l.pngbin16980 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_allapps_pressed.pngbin17006 -> 15912 bytes
-rw-r--r--res/drawable-xxhdpi/ic_allapps_pressed_l.pngbin15912 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_pageindicator_add.pngbin1578 -> 1142 bytes
-rw-r--r--res/drawable-xxhdpi/ic_pageindicator_current.pngbin2227 -> 2002 bytes
-rw-r--r--res/drawable-xxhdpi/ic_pageindicator_default.pngbin1532 -> 1080 bytes
-rw-r--r--res/drawable-xxhdpi/ic_setting.pngbin4512 -> 4568 bytes
-rw-r--r--res/drawable-xxhdpi/ic_setting_l.pngbin4568 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_setting_pressed.pngbin7627 -> 4476 bytes
-rw-r--r--res/drawable-xxhdpi/ic_setting_pressed_l.pngbin4476 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_wallpaper.pngbin3422 -> 3563 bytes
-rw-r--r--res/drawable-xxhdpi/ic_wallpaper_l.pngbin3563 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_wallpaper_pressed.pngbin5546 -> 3312 bytes
-rw-r--r--res/drawable-xxhdpi/ic_wallpaper_pressed_l.pngbin3312 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_widget.pngbin2413 -> 2857 bytes
-rw-r--r--res/drawable-xxhdpi/ic_widget_l.pngbin2857 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_widget_pressed.pngbin5518 -> 2772 bytes
-rw-r--r--res/drawable-xxhdpi/ic_widget_pressed_l.pngbin2772 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/quantum_panel.9.pngbin0 -> 819 bytes
-rw-r--r--res/drawable-xxhdpi/screenpanel.9.pngbin5196 -> 2224 bytes
-rw-r--r--res/drawable-xxhdpi/screenpanel_hover.9.pngbin2605 -> 2230 bytes
-rw-r--r--res/drawable-xxhdpi/screenpanel_hover_l.9.pngbin2230 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/screenpanel_l.9.pngbin2224 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/quantum_panel.9.pngbin0 -> 1861 bytes
-rw-r--r--res/drawable/all_apps_button_icon_l.xml21
-rw-r--r--res/drawable/setting_button_l.xml21
-rw-r--r--res/drawable/wallpaper_button_l.xml21
-rw-r--r--res/layout/apps_customize_application.xml4
-rw-r--r--res/layout/apps_customize_pane.xml38
-rw-r--r--res/layout/folder_application.xml (renamed from res/drawable/widget_button_l.xml)11
-rw-r--r--res/layout/user_folder.xml2
-rw-r--r--res/values-af/strings.xml7
-rw-r--r--res/values-am/strings.xml7
-rw-r--r--res/values-ar/strings.xml7
-rw-r--r--res/values-bg/strings.xml7
-rw-r--r--res/values-ca/strings.xml7
-rw-r--r--res/values-cs/strings.xml7
-rw-r--r--res/values-da/strings.xml7
-rw-r--r--res/values-de/strings.xml7
-rw-r--r--res/values-el/strings.xml7
-rw-r--r--res/values-en-rGB/strings.xml5
-rw-r--r--res/values-en-rIN/strings.xml5
-rw-r--r--res/values-es-rUS/strings.xml7
-rw-r--r--res/values-es/strings.xml7
-rw-r--r--res/values-et-rEE/strings.xml7
-rw-r--r--res/values-fa/strings.xml7
-rw-r--r--res/values-fi/strings.xml5
-rw-r--r--res/values-fr-rCA/strings.xml7
-rw-r--r--res/values-fr/strings.xml7
-rw-r--r--res/values-hi/strings.xml7
-rw-r--r--res/values-hr/strings.xml7
-rw-r--r--res/values-hu/strings.xml7
-rw-r--r--res/values-hy-rAM/strings.xml5
-rw-r--r--res/values-in/strings.xml7
-rw-r--r--res/values-it/strings.xml7
-rw-r--r--res/values-iw/strings.xml7
-rw-r--r--res/values-ja/strings.xml7
-rw-r--r--res/values-ka-rGE/strings.xml5
-rw-r--r--res/values-km-rKH/strings.xml5
-rw-r--r--res/values-ko/strings.xml7
-rw-r--r--res/values-lo-rLA/strings.xml5
-rw-r--r--res/values-lt/strings.xml7
-rw-r--r--res/values-lv/strings.xml7
-rw-r--r--res/values-mn-rMN/strings.xml5
-rw-r--r--res/values-ms-rMY/strings.xml5
-rw-r--r--res/values-nb/strings.xml7
-rw-r--r--res/values-nl/strings.xml7
-rw-r--r--res/values-pl/strings.xml7
-rw-r--r--res/values-pt-rPT/strings.xml7
-rw-r--r--res/values-pt/strings.xml5
-rw-r--r--res/values-ro/strings.xml5
-rw-r--r--res/values-ru/strings.xml7
-rw-r--r--res/values-sk/strings.xml7
-rw-r--r--res/values-sl/strings.xml7
-rw-r--r--res/values-sr/strings.xml7
-rw-r--r--res/values-sv/strings.xml7
-rw-r--r--res/values-sw/strings.xml7
-rw-r--r--res/values-th/strings.xml7
-rw-r--r--res/values-tl/strings.xml7
-rw-r--r--res/values-tr/strings.xml7
-rw-r--r--res/values-uk/strings.xml7
-rw-r--r--res/values-vi/strings.xml7
-rw-r--r--res/values-zh-rCN/strings.xml7
-rw-r--r--res/values-zh-rHK/strings.xml7
-rw-r--r--res/values-zh-rTW/strings.xml7
-rw-r--r--res/values-zu/strings.xml7
-rw-r--r--res/values/attrs.xml6
-rw-r--r--res/values/colors.xml4
-rw-r--r--res/values/dimens.xml5
-rw-r--r--res/values/strings.xml14
-rw-r--r--res/values/styles.xml21
-rw-r--r--src/com/android/launcher3/AppInfo.java2
-rw-r--r--src/com/android/launcher3/AppsCustomizePagedView.java8
-rw-r--r--src/com/android/launcher3/BubbleTextView.java77
-rw-r--r--src/com/android/launcher3/CellLayout.java5
-rw-r--r--src/com/android/launcher3/DeviceProfile.java14
-rw-r--r--src/com/android/launcher3/Folder.java11
-rw-r--r--src/com/android/launcher3/FolderIcon.java17
-rw-r--r--src/com/android/launcher3/Hotseat.java4
-rw-r--r--src/com/android/launcher3/IconCache.java4
-rw-r--r--src/com/android/launcher3/ItemInfo.java7
-rw-r--r--src/com/android/launcher3/Launcher.java60
-rw-r--r--src/com/android/launcher3/LauncherAppState.java4
-rw-r--r--src/com/android/launcher3/LauncherBackupAgentHelper.java2
-rw-r--r--src/com/android/launcher3/LauncherClings.java8
-rw-r--r--src/com/android/launcher3/LauncherModel.java47
-rw-r--r--src/com/android/launcher3/PagedViewIcon.java26
-rw-r--r--src/com/android/launcher3/ShortcutInfo.java36
-rw-r--r--src/com/android/launcher3/Workspace.java20
-rw-r--r--src/com/android/launcher3/compat/LauncherActivityInfoCompat.java3
-rw-r--r--src/com/android/launcher3/compat/LauncherActivityInfoCompatV16.java5
-rw-r--r--src/com/android/launcher3/compat/LauncherActivityInfoCompatVL.java46
-rw-r--r--src/com/android/launcher3/compat/LauncherAppsCompat.java40
-rw-r--r--src/com/android/launcher3/compat/LauncherAppsCompatV16.java59
-rw-r--r--src/com/android/launcher3/compat/LauncherAppsCompatVL.java162
-rw-r--r--src/com/android/launcher3/compat/ReflectUtils.java159
-rw-r--r--src/com/android/launcher3/compat/UserManagerCompat.java1
-rw-r--r--src/com/android/launcher3/compat/UserManagerCompatV16.java4
-rw-r--r--src/com/android/launcher3/compat/UserManagerCompatVL.java43
184 files changed, 796 insertions, 612 deletions
diff --git a/Android.mk b/Android.mk
index dbce33f8b..6e8365fc3 100644
--- a/Android.mk
+++ b/Android.mk
@@ -36,7 +36,8 @@ LOCAL_AAPT_FLAGS := --auto-add-overlay
LOCAL_PROTOC_OPTIMIZE_TYPE := nano
LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/protos/
-LOCAL_SDK_VERSION := 19
+# STOPSHIP(kennyguy): change to 21 once the L SDK is baked.
+LOCAL_SDK_VERSION := current
LOCAL_PACKAGE_NAME := Launcher3
#LOCAL_CERTIFICATE := shared
diff --git a/res/drawable-hdpi/ic_allapps.png b/res/drawable-hdpi/ic_allapps.png
index e7677d5d2..4fe3bf0e6 100644
--- a/res/drawable-hdpi/ic_allapps.png
+++ b/res/drawable-hdpi/ic_allapps.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_allapps_l.png b/res/drawable-hdpi/ic_allapps_l.png
deleted file mode 100644
index 4fe3bf0e6..000000000
--- a/res/drawable-hdpi/ic_allapps_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_allapps_pressed.png b/res/drawable-hdpi/ic_allapps_pressed.png
index 863eebaa5..af49dbb41 100644
--- a/res/drawable-hdpi/ic_allapps_pressed.png
+++ b/res/drawable-hdpi/ic_allapps_pressed.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_allapps_pressed_l.png b/res/drawable-hdpi/ic_allapps_pressed_l.png
deleted file mode 100644
index af49dbb41..000000000
--- a/res/drawable-hdpi/ic_allapps_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_setting.png b/res/drawable-hdpi/ic_setting.png
index 3f5bc43fd..1c12a5b80 100644
--- a/res/drawable-hdpi/ic_setting.png
+++ b/res/drawable-hdpi/ic_setting.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_setting_l.png b/res/drawable-hdpi/ic_setting_l.png
deleted file mode 100644
index 1c12a5b80..000000000
--- a/res/drawable-hdpi/ic_setting_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_setting_pressed.png b/res/drawable-hdpi/ic_setting_pressed.png
index 9201064cf..d5b5ca204 100644
--- a/res/drawable-hdpi/ic_setting_pressed.png
+++ b/res/drawable-hdpi/ic_setting_pressed.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_setting_pressed_l.png b/res/drawable-hdpi/ic_setting_pressed_l.png
deleted file mode 100644
index d5b5ca204..000000000
--- a/res/drawable-hdpi/ic_setting_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wallpaper.png b/res/drawable-hdpi/ic_wallpaper.png
index 5e5d1186b..34d594336 100644
--- a/res/drawable-hdpi/ic_wallpaper.png
+++ b/res/drawable-hdpi/ic_wallpaper.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_wallpaper_l.png b/res/drawable-hdpi/ic_wallpaper_l.png
deleted file mode 100644
index 34d594336..000000000
--- a/res/drawable-hdpi/ic_wallpaper_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wallpaper_pressed.png b/res/drawable-hdpi/ic_wallpaper_pressed.png
index d104e5770..1588ce717 100644
--- a/res/drawable-hdpi/ic_wallpaper_pressed.png
+++ b/res/drawable-hdpi/ic_wallpaper_pressed.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_wallpaper_pressed_l.png b/res/drawable-hdpi/ic_wallpaper_pressed_l.png
deleted file mode 100644
index 1588ce717..000000000
--- a/res/drawable-hdpi/ic_wallpaper_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_widget.png b/res/drawable-hdpi/ic_widget.png
index 8c57af0de..ed7e1ca0d 100644
--- a/res/drawable-hdpi/ic_widget.png
+++ b/res/drawable-hdpi/ic_widget.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_widget_l.png b/res/drawable-hdpi/ic_widget_l.png
deleted file mode 100644
index ed7e1ca0d..000000000
--- a/res/drawable-hdpi/ic_widget_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_widget_pressed.png b/res/drawable-hdpi/ic_widget_pressed.png
index 081f9f9ce..19d6feded 100644
--- a/res/drawable-hdpi/ic_widget_pressed.png
+++ b/res/drawable-hdpi/ic_widget_pressed.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_widget_pressed_l.png b/res/drawable-hdpi/ic_widget_pressed_l.png
deleted file mode 100644
index 19d6feded..000000000
--- a/res/drawable-hdpi/ic_widget_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/quantum_panel.9.png b/res/drawable-hdpi/quantum_panel.9.png
new file mode 100644
index 000000000..ae625bead
--- /dev/null
+++ b/res/drawable-hdpi/quantum_panel.9.png
Binary files differ
diff --git a/res/drawable-hdpi/screenpanel.9.png b/res/drawable-hdpi/screenpanel.9.png
index 36e7dfd9c..eed0f2cbb 100644
--- a/res/drawable-hdpi/screenpanel.9.png
+++ b/res/drawable-hdpi/screenpanel.9.png
Binary files differ
diff --git a/res/drawable-hdpi/screenpanel_hover.9.png b/res/drawable-hdpi/screenpanel_hover.9.png
index 0fed7c9d8..2cea8a471 100644
--- a/res/drawable-hdpi/screenpanel_hover.9.png
+++ b/res/drawable-hdpi/screenpanel_hover.9.png
Binary files differ
diff --git a/res/drawable-hdpi/screenpanel_hover_l.9.png b/res/drawable-hdpi/screenpanel_hover_l.9.png
deleted file mode 100644
index 2cea8a471..000000000
--- a/res/drawable-hdpi/screenpanel_hover_l.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/screenpanel_l.9.png b/res/drawable-hdpi/screenpanel_l.9.png
deleted file mode 100644
index eed0f2cbb..000000000
--- a/res/drawable-hdpi/screenpanel_l.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_allapps.png b/res/drawable-mdpi/ic_allapps.png
index e0fd9c07a..09cd82af9 100644
--- a/res/drawable-mdpi/ic_allapps.png
+++ b/res/drawable-mdpi/ic_allapps.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_allapps_l.png b/res/drawable-mdpi/ic_allapps_l.png
deleted file mode 100644
index 09cd82af9..000000000
--- a/res/drawable-mdpi/ic_allapps_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_allapps_pressed.png b/res/drawable-mdpi/ic_allapps_pressed.png
index 3bd87b187..d7ea96f61 100644
--- a/res/drawable-mdpi/ic_allapps_pressed.png
+++ b/res/drawable-mdpi/ic_allapps_pressed.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_allapps_pressed_l.png b/res/drawable-mdpi/ic_allapps_pressed_l.png
deleted file mode 100644
index d7ea96f61..000000000
--- a/res/drawable-mdpi/ic_allapps_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_setting.png b/res/drawable-mdpi/ic_setting.png
index 1e7645953..c614e9183 100644
--- a/res/drawable-mdpi/ic_setting.png
+++ b/res/drawable-mdpi/ic_setting.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_setting_l.png b/res/drawable-mdpi/ic_setting_l.png
deleted file mode 100644
index c614e9183..000000000
--- a/res/drawable-mdpi/ic_setting_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_setting_pressed.png b/res/drawable-mdpi/ic_setting_pressed.png
index d7aca18e1..61e574ad1 100644
--- a/res/drawable-mdpi/ic_setting_pressed.png
+++ b/res/drawable-mdpi/ic_setting_pressed.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_setting_pressed_l.png b/res/drawable-mdpi/ic_setting_pressed_l.png
deleted file mode 100644
index 61e574ad1..000000000
--- a/res/drawable-mdpi/ic_setting_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wallpaper.png b/res/drawable-mdpi/ic_wallpaper.png
index 333a206e2..8f2a00a3f 100644
--- a/res/drawable-mdpi/ic_wallpaper.png
+++ b/res/drawable-mdpi/ic_wallpaper.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_wallpaper_l.png b/res/drawable-mdpi/ic_wallpaper_l.png
deleted file mode 100644
index 8f2a00a3f..000000000
--- a/res/drawable-mdpi/ic_wallpaper_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wallpaper_pressed.png b/res/drawable-mdpi/ic_wallpaper_pressed.png
index 273c48b3a..aa598c3e2 100644
--- a/res/drawable-mdpi/ic_wallpaper_pressed.png
+++ b/res/drawable-mdpi/ic_wallpaper_pressed.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_wallpaper_pressed_l.png b/res/drawable-mdpi/ic_wallpaper_pressed_l.png
deleted file mode 100644
index aa598c3e2..000000000
--- a/res/drawable-mdpi/ic_wallpaper_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_widget.png b/res/drawable-mdpi/ic_widget.png
index 5f974c28c..1bd393503 100644
--- a/res/drawable-mdpi/ic_widget.png
+++ b/res/drawable-mdpi/ic_widget.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_widget_l.png b/res/drawable-mdpi/ic_widget_l.png
deleted file mode 100644
index 1bd393503..000000000
--- a/res/drawable-mdpi/ic_widget_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_widget_pressed.png b/res/drawable-mdpi/ic_widget_pressed.png
index 0a3e8838f..9b690d99b 100644
--- a/res/drawable-mdpi/ic_widget_pressed.png
+++ b/res/drawable-mdpi/ic_widget_pressed.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_widget_pressed_l.png b/res/drawable-mdpi/ic_widget_pressed_l.png
deleted file mode 100644
index 9b690d99b..000000000
--- a/res/drawable-mdpi/ic_widget_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/quantum_panel.9.png b/res/drawable-mdpi/quantum_panel.9.png
new file mode 100644
index 000000000..1f9cd1a18
--- /dev/null
+++ b/res/drawable-mdpi/quantum_panel.9.png
Binary files differ
diff --git a/res/drawable-mdpi/screenpanel.9.png b/res/drawable-mdpi/screenpanel.9.png
index 4de3017f5..6f8b7e6a1 100644
--- a/res/drawable-mdpi/screenpanel.9.png
+++ b/res/drawable-mdpi/screenpanel.9.png
Binary files differ
diff --git a/res/drawable-mdpi/screenpanel_hover.9.png b/res/drawable-mdpi/screenpanel_hover.9.png
index 7dd885860..8a94984f5 100644
--- a/res/drawable-mdpi/screenpanel_hover.9.png
+++ b/res/drawable-mdpi/screenpanel_hover.9.png
Binary files differ
diff --git a/res/drawable-mdpi/screenpanel_hover_l.9.png b/res/drawable-mdpi/screenpanel_hover_l.9.png
deleted file mode 100644
index 8a94984f5..000000000
--- a/res/drawable-mdpi/screenpanel_hover_l.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/screenpanel_l.9.png b/res/drawable-mdpi/screenpanel_l.9.png
deleted file mode 100644
index 6f8b7e6a1..000000000
--- a/res/drawable-mdpi/screenpanel_l.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_allapps.png b/res/drawable-xhdpi/ic_allapps.png
index f71964c2d..eff3bea5d 100644
--- a/res/drawable-xhdpi/ic_allapps.png
+++ b/res/drawable-xhdpi/ic_allapps.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_allapps_l.png b/res/drawable-xhdpi/ic_allapps_l.png
deleted file mode 100644
index eff3bea5d..000000000
--- a/res/drawable-xhdpi/ic_allapps_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_allapps_pressed.png b/res/drawable-xhdpi/ic_allapps_pressed.png
index d678f027e..15a8aa964 100644
--- a/res/drawable-xhdpi/ic_allapps_pressed.png
+++ b/res/drawable-xhdpi/ic_allapps_pressed.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_allapps_pressed_l.png b/res/drawable-xhdpi/ic_allapps_pressed_l.png
deleted file mode 100644
index 15a8aa964..000000000
--- a/res/drawable-xhdpi/ic_allapps_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_setting.png b/res/drawable-xhdpi/ic_setting.png
index 6f06bcfd9..3a7310b7c 100644
--- a/res/drawable-xhdpi/ic_setting.png
+++ b/res/drawable-xhdpi/ic_setting.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_setting_l.png b/res/drawable-xhdpi/ic_setting_l.png
deleted file mode 100644
index 3a7310b7c..000000000
--- a/res/drawable-xhdpi/ic_setting_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_setting_pressed.png b/res/drawable-xhdpi/ic_setting_pressed.png
index bca8ccdd0..005d49c8c 100644
--- a/res/drawable-xhdpi/ic_setting_pressed.png
+++ b/res/drawable-xhdpi/ic_setting_pressed.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_setting_pressed_l.png b/res/drawable-xhdpi/ic_setting_pressed_l.png
deleted file mode 100644
index 005d49c8c..000000000
--- a/res/drawable-xhdpi/ic_setting_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wallpaper.png b/res/drawable-xhdpi/ic_wallpaper.png
index 41dc000fd..d2bf246ee 100644
--- a/res/drawable-xhdpi/ic_wallpaper.png
+++ b/res/drawable-xhdpi/ic_wallpaper.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wallpaper_l.png b/res/drawable-xhdpi/ic_wallpaper_l.png
deleted file mode 100644
index d2bf246ee..000000000
--- a/res/drawable-xhdpi/ic_wallpaper_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wallpaper_pressed.png b/res/drawable-xhdpi/ic_wallpaper_pressed.png
index ffff0531d..5a9b84d7d 100644
--- a/res/drawable-xhdpi/ic_wallpaper_pressed.png
+++ b/res/drawable-xhdpi/ic_wallpaper_pressed.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wallpaper_pressed_l.png b/res/drawable-xhdpi/ic_wallpaper_pressed_l.png
deleted file mode 100644
index 5a9b84d7d..000000000
--- a/res/drawable-xhdpi/ic_wallpaper_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_widget.png b/res/drawable-xhdpi/ic_widget.png
index 47dcdd14f..cf6be8173 100644
--- a/res/drawable-xhdpi/ic_widget.png
+++ b/res/drawable-xhdpi/ic_widget.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_widget_l.png b/res/drawable-xhdpi/ic_widget_l.png
deleted file mode 100644
index cf6be8173..000000000
--- a/res/drawable-xhdpi/ic_widget_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_widget_pressed.png b/res/drawable-xhdpi/ic_widget_pressed.png
index 8bb387b88..633c9c648 100644
--- a/res/drawable-xhdpi/ic_widget_pressed.png
+++ b/res/drawable-xhdpi/ic_widget_pressed.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_widget_pressed_l.png b/res/drawable-xhdpi/ic_widget_pressed_l.png
deleted file mode 100644
index 633c9c648..000000000
--- a/res/drawable-xhdpi/ic_widget_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/quantum_panel.9.png b/res/drawable-xhdpi/quantum_panel.9.png
new file mode 100644
index 000000000..562d75802
--- /dev/null
+++ b/res/drawable-xhdpi/quantum_panel.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/screenpanel.9.png b/res/drawable-xhdpi/screenpanel.9.png
index b4b828d3e..2d70d7af5 100644
--- a/res/drawable-xhdpi/screenpanel.9.png
+++ b/res/drawable-xhdpi/screenpanel.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/screenpanel_hover.9.png b/res/drawable-xhdpi/screenpanel_hover.9.png
index 251bf2085..0032fff4d 100644
--- a/res/drawable-xhdpi/screenpanel_hover.9.png
+++ b/res/drawable-xhdpi/screenpanel_hover.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/screenpanel_hover_l.9.png b/res/drawable-xhdpi/screenpanel_hover_l.9.png
deleted file mode 100644
index 0032fff4d..000000000
--- a/res/drawable-xhdpi/screenpanel_hover_l.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/screenpanel_l.9.png b/res/drawable-xhdpi/screenpanel_l.9.png
deleted file mode 100644
index 2d70d7af5..000000000
--- a/res/drawable-xhdpi/screenpanel_l.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_allapps.png b/res/drawable-xxhdpi/ic_allapps.png
index 624e0ef44..2461984ff 100644
--- a/res/drawable-xxhdpi/ic_allapps.png
+++ b/res/drawable-xxhdpi/ic_allapps.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_allapps_l.png b/res/drawable-xxhdpi/ic_allapps_l.png
deleted file mode 100644
index 2461984ff..000000000
--- a/res/drawable-xxhdpi/ic_allapps_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_allapps_pressed.png b/res/drawable-xxhdpi/ic_allapps_pressed.png
index 77b45aefb..929a0e6ab 100644
--- a/res/drawable-xxhdpi/ic_allapps_pressed.png
+++ b/res/drawable-xxhdpi/ic_allapps_pressed.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_allapps_pressed_l.png b/res/drawable-xxhdpi/ic_allapps_pressed_l.png
deleted file mode 100644
index 929a0e6ab..000000000
--- a/res/drawable-xxhdpi/ic_allapps_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_pageindicator_add.png b/res/drawable-xxhdpi/ic_pageindicator_add.png
index fd8a662e1..d78c95a74 100644
--- a/res/drawable-xxhdpi/ic_pageindicator_add.png
+++ b/res/drawable-xxhdpi/ic_pageindicator_add.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_pageindicator_current.png b/res/drawable-xxhdpi/ic_pageindicator_current.png
index 08615f371..2a5eff699 100644
--- a/res/drawable-xxhdpi/ic_pageindicator_current.png
+++ b/res/drawable-xxhdpi/ic_pageindicator_current.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_pageindicator_default.png b/res/drawable-xxhdpi/ic_pageindicator_default.png
index 9d4fbf820..969ae8c8e 100644
--- a/res/drawable-xxhdpi/ic_pageindicator_default.png
+++ b/res/drawable-xxhdpi/ic_pageindicator_default.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_setting.png b/res/drawable-xxhdpi/ic_setting.png
index b3729d315..01bdcd544 100644
--- a/res/drawable-xxhdpi/ic_setting.png
+++ b/res/drawable-xxhdpi/ic_setting.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_setting_l.png b/res/drawable-xxhdpi/ic_setting_l.png
deleted file mode 100644
index 01bdcd544..000000000
--- a/res/drawable-xxhdpi/ic_setting_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_setting_pressed.png b/res/drawable-xxhdpi/ic_setting_pressed.png
index 5c9c1be44..d0cad5e0e 100644
--- a/res/drawable-xxhdpi/ic_setting_pressed.png
+++ b/res/drawable-xxhdpi/ic_setting_pressed.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_setting_pressed_l.png b/res/drawable-xxhdpi/ic_setting_pressed_l.png
deleted file mode 100644
index d0cad5e0e..000000000
--- a/res/drawable-xxhdpi/ic_setting_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wallpaper.png b/res/drawable-xxhdpi/ic_wallpaper.png
index c71844410..490c45a87 100644
--- a/res/drawable-xxhdpi/ic_wallpaper.png
+++ b/res/drawable-xxhdpi/ic_wallpaper.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wallpaper_l.png b/res/drawable-xxhdpi/ic_wallpaper_l.png
deleted file mode 100644
index 490c45a87..000000000
--- a/res/drawable-xxhdpi/ic_wallpaper_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wallpaper_pressed.png b/res/drawable-xxhdpi/ic_wallpaper_pressed.png
index 03324aa6c..e5d200be1 100644
--- a/res/drawable-xxhdpi/ic_wallpaper_pressed.png
+++ b/res/drawable-xxhdpi/ic_wallpaper_pressed.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wallpaper_pressed_l.png b/res/drawable-xxhdpi/ic_wallpaper_pressed_l.png
deleted file mode 100644
index e5d200be1..000000000
--- a/res/drawable-xxhdpi/ic_wallpaper_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_widget.png b/res/drawable-xxhdpi/ic_widget.png
index fddfecaa3..d4b8324b1 100644
--- a/res/drawable-xxhdpi/ic_widget.png
+++ b/res/drawable-xxhdpi/ic_widget.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_widget_l.png b/res/drawable-xxhdpi/ic_widget_l.png
deleted file mode 100644
index d4b8324b1..000000000
--- a/res/drawable-xxhdpi/ic_widget_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_widget_pressed.png b/res/drawable-xxhdpi/ic_widget_pressed.png
index 3d3670ed4..b8dd35dc6 100644
--- a/res/drawable-xxhdpi/ic_widget_pressed.png
+++ b/res/drawable-xxhdpi/ic_widget_pressed.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_widget_pressed_l.png b/res/drawable-xxhdpi/ic_widget_pressed_l.png
deleted file mode 100644
index b8dd35dc6..000000000
--- a/res/drawable-xxhdpi/ic_widget_pressed_l.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/quantum_panel.9.png b/res/drawable-xxhdpi/quantum_panel.9.png
new file mode 100644
index 000000000..bc818b1c6
--- /dev/null
+++ b/res/drawable-xxhdpi/quantum_panel.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/screenpanel.9.png b/res/drawable-xxhdpi/screenpanel.9.png
index c44f3b898..7ed058efa 100644
--- a/res/drawable-xxhdpi/screenpanel.9.png
+++ b/res/drawable-xxhdpi/screenpanel.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/screenpanel_hover.9.png b/res/drawable-xxhdpi/screenpanel_hover.9.png
index e8b36d8f1..24d2266a0 100644
--- a/res/drawable-xxhdpi/screenpanel_hover.9.png
+++ b/res/drawable-xxhdpi/screenpanel_hover.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/screenpanel_hover_l.9.png b/res/drawable-xxhdpi/screenpanel_hover_l.9.png
deleted file mode 100644
index 24d2266a0..000000000
--- a/res/drawable-xxhdpi/screenpanel_hover_l.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/screenpanel_l.9.png b/res/drawable-xxhdpi/screenpanel_l.9.png
deleted file mode 100644
index 7ed058efa..000000000
--- a/res/drawable-xxhdpi/screenpanel_l.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/quantum_panel.9.png b/res/drawable-xxxhdpi/quantum_panel.9.png
new file mode 100644
index 000000000..a15aab45d
--- /dev/null
+++ b/res/drawable-xxxhdpi/quantum_panel.9.png
Binary files differ
diff --git a/res/drawable/all_apps_button_icon_l.xml b/res/drawable/all_apps_button_icon_l.xml
deleted file mode 100644
index 91de1b5cd..000000000
--- a/res/drawable/all_apps_button_icon_l.xml
+++ /dev/null
@@ -1,21 +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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true" android:drawable="@drawable/ic_allapps_pressed_l" />
- <item android:state_pressed="true" android:drawable="@drawable/ic_allapps_pressed_l" />
- <item android:drawable="@drawable/ic_allapps_l" />
-</selector>
diff --git a/res/drawable/setting_button_l.xml b/res/drawable/setting_button_l.xml
deleted file mode 100644
index 01661db40..000000000
--- a/res/drawable/setting_button_l.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true" android:drawable="@drawable/ic_setting_pressed_l" />
- <item android:state_pressed="true" android:drawable="@drawable/ic_setting_pressed_l" />
- <item android:drawable="@drawable/ic_setting_l" />
-</selector>
diff --git a/res/drawable/wallpaper_button_l.xml b/res/drawable/wallpaper_button_l.xml
deleted file mode 100644
index c539b6124..000000000
--- a/res/drawable/wallpaper_button_l.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true" android:drawable="@drawable/ic_wallpaper_pressed_l" />
- <item android:state_pressed="true" android:drawable="@drawable/ic_wallpaper_pressed_l" />
- <item android:drawable="@drawable/ic_wallpaper_l" />
-</selector>
diff --git a/res/layout/apps_customize_application.xml b/res/layout/apps_customize_application.xml
index 3b0fa6f4e..b48b9b7ac 100644
--- a/res/layout/apps_customize_application.xml
+++ b/res/layout/apps_customize_application.xml
@@ -19,10 +19,6 @@
xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3"
style="@style/WorkspaceIcon.AppsCustomize"
-
android:id="@+id/application_icon"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
-
android:focusable="true"
android:background="@drawable/focusable_view_bg" />
diff --git a/res/layout/apps_customize_pane.xml b/res/layout/apps_customize_pane.xml
index eae216e93..19db373bc 100644
--- a/res/layout/apps_customize_pane.xml
+++ b/res/layout/apps_customize_pane.xml
@@ -52,28 +52,38 @@
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent">
- <com.android.launcher3.AppsCustomizePagedView
- android:id="@+id/apps_customize_pane_content"
+
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
- launcher:widgetCountX="@integer/apps_customize_widget_cell_count_x"
- launcher:widgetCountY="@integer/apps_customize_widget_cell_count_y"
- launcher:clingFocusedX="@integer/apps_customize_cling_focused_x"
- launcher:clingFocusedY="@integer/apps_customize_cling_focused_y"
- launcher:maxGap="@dimen/workspace_max_gap"
- launcher:pageIndicator="@+id/apps_customize_page_indicator" />
+ android:orientation="vertical">
+
+ <com.android.launcher3.AppsCustomizePagedView
+ android:id="@+id/apps_customize_pane_content"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ launcher:widgetCountX="@integer/apps_customize_widget_cell_count_x"
+ launcher:widgetCountY="@integer/apps_customize_widget_cell_count_y"
+ launcher:clingFocusedX="@integer/apps_customize_cling_focused_x"
+ launcher:clingFocusedY="@integer/apps_customize_cling_focused_y"
+ launcher:maxGap="@dimen/workspace_max_gap"
+ launcher:pageIndicator="@+id/apps_customize_page_indicator" />
+
+ <include
+ android:id="@+id/apps_customize_page_indicator"
+ layout="@layout/page_indicator"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center" />
+ </LinearLayout>
+
<FrameLayout
android:id="@+id/animation_buffer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF000000"
android:visibility="gone" />
- <include
- android:id="@+id/apps_customize_page_indicator"
- layout="@layout/page_indicator"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal|bottom" />
</FrameLayout>
</LinearLayout>
</com.android.launcher3.AppsCustomizeTabHost>
diff --git a/res/drawable/widget_button_l.xml b/res/layout/folder_application.xml
index 92521b9f2..37dd79d37 100644
--- a/res/drawable/widget_button_l.xml
+++ b/res/layout/folder_application.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
+<!-- Copyright (C) 2014 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.
@@ -14,8 +14,7 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true" android:drawable="@drawable/ic_widget_pressed_l" />
- <item android:state_pressed="true" android:drawable="@drawable/ic_widget_pressed_l" />
- <item android:drawable="@drawable/ic_widget_l" />
-</selector>
+<com.android.launcher3.BubbleTextView xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/WorkspaceIcon.Folder"
+ android:focusable="true"
+ android:background="@drawable/focusable_view_bg" />
diff --git a/res/layout/user_folder.xml b/res/layout/user_folder.xml
index 5d5f33b1f..4e5303ac0 100644
--- a/res/layout/user_folder.xml
+++ b/res/layout/user_folder.xml
@@ -20,7 +20,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:background="@drawable/portal_container_holo">
+ android:background="@drawable/quantum_panel">
<ScrollView
android:id="@+id/scroll_view"
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 3d337db25..46b8457b0 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Installeer tans…"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Onbekend"</string>
<string name="package_state_error" msgid="7672093962724223588">"Nie teruggestel nie"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Verwyder almal"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Verwyder"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Soek"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 489164c50..94426023c 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"በመጫን ላይ"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"የማይታወቅ"</string>
<string name="package_state_error" msgid="7672093962724223588">"ወደነበረበት አልተመለሰም"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"ሁሉንም አስወግድ"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"አስወግድ"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"ፈልግ"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 90eae74b1..c77e47ebf 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"جارٍ التثبيت"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"غير معروفة"</string>
<string name="package_state_error" msgid="7672093962724223588">"استعادة مخفقة"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"إزالة الكل"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"إزالة"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"بحث"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 198cd18f9..025408f00 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Инсталира се"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Няма информация"</string>
<string name="package_state_error" msgid="7672093962724223588">"Не е възстановено"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Премахване на всички"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Премахване"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Търсене"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index c187094a8..f80d5b366 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Instal·lant"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Desconegut"</string>
<string name="package_state_error" msgid="7672093962724223588">"No restaurat"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Suprimeix-ho tot"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Suprimeix"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Cerca"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 6870f891b..dd8c8a875 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Instalace"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Neznámé"</string>
<string name="package_state_error" msgid="7672093962724223588">"Nebylo obnoveno"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Odstranit vše"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Odstranit"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Hledat"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 5d8b385b9..5fbc7cb63 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Installerer"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Ukendt"</string>
<string name="package_state_error" msgid="7672093962724223588">"Ikke gendannet"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Slet alle"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Fjern"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Søg"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 6b09789e9..ef629e1d4 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Installation"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Unbekannt"</string>
<string name="package_state_error" msgid="7672093962724223588">"Nicht wiederhergestellt"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Alle entfernen"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Entfernen"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Suchen"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 66cea001d..0768b88da 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Εγκατάσταση"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Άγνωστο"</string>
<string name="package_state_error" msgid="7672093962724223588">"Δεν ανακτήθηκε"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Κατάργηση όλων"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Κατάργηση"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Αναζήτηση"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index eed1f808b..c3e83467d 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -112,4 +112,9 @@
<string name="package_state_installing" msgid="7588193972189849870">"Installing"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Unknown"</string>
<string name="package_state_error" msgid="7672093962724223588">"Not restored"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Remove All"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Remove"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Search"</string>
+ <string name="abandoned_promises_title" msgid="7096178467971716750">"This app is not installed"</string>
+ <string name="abandoned_promise_explanation" msgid="3990027586878167529">"The app for this icon isn\'t installed. You can remove it, or search for the app and install it manually."</string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index eed1f808b..c3e83467d 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -112,4 +112,9 @@
<string name="package_state_installing" msgid="7588193972189849870">"Installing"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Unknown"</string>
<string name="package_state_error" msgid="7672093962724223588">"Not restored"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Remove All"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Remove"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Search"</string>
+ <string name="abandoned_promises_title" msgid="7096178467971716750">"This app is not installed"</string>
+ <string name="abandoned_promise_explanation" msgid="3990027586878167529">"The app for this icon isn\'t installed. You can remove it, or search for the app and install it manually."</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index b325c351c..51b0993ee 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Instalando"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Desconocido"</string>
<string name="package_state_error" msgid="7672093962724223588">"No restaurado"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Eliminar todo"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Eliminar"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Buscar"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 3efdf9b87..b3a35e7ec 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Instalando"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Desconocido"</string>
<string name="package_state_error" msgid="7672093962724223588">"No restaurado"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Eliminar todo"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Eliminar"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Buscar"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index 73e4779a4..c24f94b7e 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Installimine"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Teadmata"</string>
<string name="package_state_error" msgid="7672093962724223588">"Ei taastatud"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Eemalda kõik"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Eemalda"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Otsing"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index d5e271b0d..4b658429d 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"در حال نصب"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"نامشخص"</string>
<string name="package_state_error" msgid="7672093962724223588">"بازیابی نشد"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"حذف همه"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"حذف"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"جستجو"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index c6ffdf654..9f197a50b 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -112,4 +112,9 @@
<string name="package_state_installing" msgid="7588193972189849870">"Asennetaan"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Tuntematon"</string>
<string name="package_state_error" msgid="7672093962724223588">"Ei palautettu"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Poista kaikki"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Poista"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Haku"</string>
+ <string name="abandoned_promises_title" msgid="7096178467971716750">"Sovellusta ei ole asennettu"</string>
+ <string name="abandoned_promise_explanation" msgid="3990027586878167529">"Kuvakkeen sovellusta ei ole asennettu. Voit poistaa kuvakkeen tai etsiä sovelluksen ja asentaa sen manuaalisesti."</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 0c7182324..d03525cf5 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Installation…"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Inconnu"</string>
<string name="package_state_error" msgid="7672093962724223588">"Non restauré"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Tout supprimer"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Supprimer"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Rechercher"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 41ea5468a..3a32b57cf 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Installation…"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Inconnu"</string>
<string name="package_state_error" msgid="7672093962724223588">"Non restauré"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Tout supprimer"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Supprimer"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Rechercher"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 9bbb5cbac..f6c2ad80b 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"इंस्टॉल हो रहा है"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"अज्ञात"</string>
<string name="package_state_error" msgid="7672093962724223588">"पुन:स्थापित नहीं हुआ"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"सभी निकालें"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"निकालें"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"खोजें"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 8116ba422..3df11dcbe 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Instaliranje"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Nepoznato"</string>
<string name="package_state_error" msgid="7672093962724223588">"Nije vraćeno"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Ukloni sve"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Ukloni"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Traži"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 59fc6e1e1..d4d1fc63f 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Települ"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Ismeretlen"</string>
<string name="package_state_error" msgid="7672093962724223588">"Nincs visszaállítva"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Az összes eltávolítása"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Eltávolítás"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Keresés"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index d02d48e19..9fcb69270 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -112,4 +112,9 @@
<string name="package_state_installing" msgid="7588193972189849870">"Տեղադրվում է"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Անհայտ է"</string>
<string name="package_state_error" msgid="7672093962724223588">"Չի վերականգնվել"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Հեռացնել բոլորը"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Հեռացնել"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Գտնել"</string>
+ <string name="abandoned_promises_title" msgid="7096178467971716750">"Այս ծրագիրը տեղադրված չէ:"</string>
+ <string name="abandoned_promise_explanation" msgid="3990027586878167529">"Այս պատկերակի ծրագիրը տեղադրված չէ: Դուք կարող եք հեռացնել այն, կամ կարող եք գտնել ծրագիրը և տեղադրել այն ձեռքով:"</string>
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index ba8588630..799460030 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Memasang"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Tidak dikenal"</string>
<string name="package_state_error" msgid="7672093962724223588">"Tak dipulihkan"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Buang Semua"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Buang"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Telusuri"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 0d3bcc4bc..d1b5030ba 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Installazione..."</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Sconosciuto"</string>
<string name="package_state_error" msgid="7672093962724223588">"Non ripristinato"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Rimuovi tutto"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Rimuovi"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Cerca"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index cdfaf04d6..2ad8f1d23 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"מתקין"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"לא ידוע"</string>
<string name="package_state_error" msgid="7672093962724223588">"לא שוחזרה"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"הסר את הכל"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"הסר"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"חפש"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index e3ec47d83..c8b8c0c8b 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"インストール中"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"不明"</string>
<string name="package_state_error" msgid="7672093962724223588">"復元失敗"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"すべて削除"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"削除"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"検索"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index de701ca9e..a4450e1bf 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -112,4 +112,9 @@
<string name="package_state_installing" msgid="7588193972189849870">"ინსტალაცია..."</string>
<string name="package_state_unknown" msgid="7592128424511031410">"უცნობი"</string>
<string name="package_state_error" msgid="7672093962724223588">"არ აღდგა"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"ყველას ამოშლა"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"ამოშლა"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"ძიება"</string>
+ <string name="abandoned_promises_title" msgid="7096178467971716750">"ეს აპი დაყენებული არ არის"</string>
+ <string name="abandoned_promise_explanation" msgid="3990027586878167529">"ამ ხატულის აპი დაყენებული არ არის. შეგიძლიათ ამოშალოთ, ან მოიძიოთ აპი და ხელით მოახდინოთ მისი ინსტალაცია."</string>
</resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 7e6b79923..16491ef58 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -112,4 +112,9 @@
<string name="package_state_installing" msgid="7588193972189849870">"ដំឡើង"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"មិន​ស្គាល់"</string>
<string name="package_state_error" msgid="7672093962724223588">"មិនបាន​​ស្តា​រ"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"លុបចេញ​​​ទាំងអស់"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"លុបចេញ"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"ស្វែងរក"</string>
+ <string name="abandoned_promises_title" msgid="7096178467971716750">"មិន​បាន​ដំឡើង​កម្មវិធី​នេះ"</string>
+ <string name="abandoned_promise_explanation" msgid="3990027586878167529">"មិន​បាន​ដំឡើង​កម្មវិធី​សម្រាប់​រូបតំណាង​នេះ។ អ្នក​អាច​លុប​វា ឬ​ស្វែងរក​កម្មវិធី និង​ដំឡើង​វា​ដោយ​ដៃ។"</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index f8a06c799..4b99f572f 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"설치 중"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"알 수 없음"</string>
<string name="package_state_error" msgid="7672093962724223588">"복원되지 않음"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"모두 삭제"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"삭제"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"검색"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index a4fc842d2..159b0901c 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -112,4 +112,9 @@
<string name="package_state_installing" msgid="7588193972189849870">"​ກຳ​ລັງ​ຕິດ​ຕັ້ງ"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"​ບໍ່​ຮູ້​ຈັກ"</string>
<string name="package_state_error" msgid="7672093962724223588">"ບໍ່​ໄດ້​ກູ້​ຂໍ້ມູນ​ມາ​ເທື່ອ"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"ລຶບ​ທັງ​ໝົດ"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"ລຶບ​"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"ຊອກຫາ"</string>
+ <string name="abandoned_promises_title" msgid="7096178467971716750">"ແອັບຯ​ນີ້​ຍັງ​ບໍ່​ໄດ້​ຕິດ​ຕັ້ງ​ເທື່ອ"</string>
+ <string name="abandoned_promise_explanation" msgid="3990027586878167529">"​ແອັບຯ​ສຳ​ລັບ​ໄອ​ຄອນ​ນີ້​ຍັງ​ບໍ່ໄດ້​ຕິດ​ຕັ້ງ​ເທື່ອ. ທ່ານ​ສາ​ມາດ​ລຶບ​ມັນ​ອອກ ຫຼື​ຊອກ​ຫາ​ແອັບຯ ແລ້ວ​ຕິດ​ຕັ້ງ​ມັນ​ໄດ້​ດ້ວຍ​ຕົນ​ເອງ."</string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 471201d7a..d485c261a 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Diegiama"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Nežinoma"</string>
<string name="package_state_error" msgid="7672093962724223588">"Neatkurta"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Pašalinti viską"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Pašalinti"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Ieškoti"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 6fb7d601e..84e5cc931 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Instalē"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Nezināma"</string>
<string name="package_state_error" msgid="7672093962724223588">"Nav atjaunota"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Noņemt visas"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Noņemt"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Meklēt"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index a8ad5681a..6904f09b0 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -112,4 +112,9 @@
<string name="package_state_installing" msgid="7588193972189849870">"Суулгаж байна"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Тодорхойгүй"</string>
<string name="package_state_error" msgid="7672093962724223588">"Сэргээгээгүй"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Бүгдийг устгах"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Устгах"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Хайх"</string>
+ <string name="abandoned_promises_title" msgid="7096178467971716750">"Энэ апп-г суулгаагүй байна"</string>
+ <string name="abandoned_promise_explanation" msgid="3990027586878167529">"Энэ дүрсний апп-г суулгаагүй байна. Та үүнийг устгах буюу апп-г хайж суулгах боломжтой."</string>
</resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 4c4b95faa..2b5f1798f 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -112,4 +112,9 @@
<string name="package_state_installing" msgid="7588193972189849870">"Memasang"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Tidak diketahui"</string>
<string name="package_state_error" msgid="7672093962724223588">"Tak dipulihkan"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Buang Semua"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Alih keluar"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Carian"</string>
+ <string name="abandoned_promises_title" msgid="7096178467971716750">"Apl ini tidak dipasang"</string>
+ <string name="abandoned_promise_explanation" msgid="3990027586878167529">"Apl untuk ikon ini tidak dipasang. Anda boleh mengalih keluar atau mencari apl dan pasang secara manual."</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 34cc488bc..b7f67cf9b 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Installerer …"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Ukjent"</string>
<string name="package_state_error" msgid="7672093962724223588">"Ikke gjenoppr."</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Fjern alle"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Fjern"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Søk"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 7bd3025c0..e75684ae9 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Installeren"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Onbekend"</string>
<string name="package_state_error" msgid="7672093962724223588">"Niet hersteld"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Alles verwijderen"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Verwijderen"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Zoeken"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 07d746567..1ff76dede 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Instalowanie"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Brak informacji"</string>
<string name="package_state_error" msgid="7672093962724223588">"Nie przywrócono"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Usuń wszystkie"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Usuń"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Szukaj"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 0717c520a..54052ca79 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"A instalar"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Desconhecido"</string>
<string name="package_state_error" msgid="7672093962724223588">"Não restaurado"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Remover todos"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Remover"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Pesquisar"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index e3f60aeb4..db2259c0f 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -112,4 +112,9 @@
<string name="package_state_installing" msgid="7588193972189849870">"Instalando"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Desconhecido"</string>
<string name="package_state_error" msgid="7672093962724223588">"Não restaurado"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Remover tudo"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Remover"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Pesquisar"</string>
+ <string name="abandoned_promises_title" msgid="7096178467971716750">"Este aplicativo não está instalado"</string>
+ <string name="abandoned_promise_explanation" msgid="3990027586878167529">"O aplicativo deste ícone não está instalado. Você pode remover o ícone, ou procurar o aplicativo e instalá-lo manualmente."</string>
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 48fa11e97..5b65da949 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -112,4 +112,9 @@
<string name="package_state_installing" msgid="7588193972189849870">"Se instalează"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Necunoscut"</string>
<string name="package_state_error" msgid="7672093962724223588">"Nerestabilit"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Eliminați-le pe toate"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Eliminați"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Căutați"</string>
+ <string name="abandoned_promises_title" msgid="7096178467971716750">"Aplicația nu este instalată"</string>
+ <string name="abandoned_promise_explanation" msgid="3990027586878167529">"Aplicația pentru această pictogramă nu este instalată. Puteți să ștergeți pictograma sau să căutați aplicația și s-o instalați manual."</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 83033504e..5050b12e2 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Устанавливается"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Неизвестно"</string>
<string name="package_state_error" msgid="7672093962724223588">"Не восстановлен"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Удалить все"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Удалить"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Найти"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index b27492624..6df1bccae 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Inštalácia"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Neznáme"</string>
<string name="package_state_error" msgid="7672093962724223588">"Nebolo obnovené"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Odstrániť všetky"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Odstrániť"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Vyhľadať"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 62d90bba1..3a3442268 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Nameščanje"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Neznano"</string>
<string name="package_state_error" msgid="7672093962724223588">"Ni obnovljen"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Odstrani vse"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Odstrani"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Iskanje"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 9b3091314..6d1c5e1c9 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Инсталира се"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Непознато"</string>
<string name="package_state_error" msgid="7672093962724223588">"Није враћено"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Уклони све"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Уклони"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Претражи"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 0469a8ab0..db4ea7808 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Installerar"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Okänt"</string>
<string name="package_state_error" msgid="7672093962724223588">"Inte återställt"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Ta bort alla"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Ta bort"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Sök"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 81126fd28..ace8effe4 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -114,4 +114,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Inasakinisha"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Yasiyojulikana"</string>
<string name="package_state_error" msgid="7672093962724223588">"Haijarejeshwa"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Ondoa Zote"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Ondoa"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Tafuta"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 1d697509f..835c81fe6 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"กำลังติดตั้ง"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"ไม่รู้จัก"</string>
<string name="package_state_error" msgid="7672093962724223588">"ไม่ได้คืนค่า"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"นำออกทั้งหมด"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"นำออก"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"ค้นหา"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index d30fb1157..ed604783f 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Nag-i-install"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Hindi kilala"</string>
<string name="package_state_error" msgid="7672093962724223588">"Hindi naibalik"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Alisin Lahat"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Alisin"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Maghanap"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index bdc97dfcf..fe38be43e 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Yükleniyor"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Bilinmiyor"</string>
<string name="package_state_error" msgid="7672093962724223588">"Geri yüklenmedi"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Tümünü Kaldır"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Kaldır"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Ara"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 94df4f3b3..8914d583f 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Встановлення"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Невідомо"</string>
<string name="package_state_error" msgid="7672093962724223588">"Не відновлено"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Видалити всі"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Видалити"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Шукати"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 434b55650..0fc8efe7e 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Đang cài đặt"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Không xác định"</string>
<string name="package_state_error" msgid="7672093962724223588">"Không được khôi phục"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Xóa tất cả"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Xóa"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Tìm kiếm"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index a771f4766..513c555c3 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"正在安装"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"未知"</string>
<string name="package_state_error" msgid="7672093962724223588">"无法还原"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"全部移除"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"移除"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"搜索"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index ed19b44cc..ab5eba018 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"安裝中"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"不明"</string>
<string name="package_state_error" msgid="7672093962724223588">"無法還原"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"全部移除"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"移除"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"搜尋"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 2449f60bc..65147db8c 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"安裝中"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"不明"</string>
<string name="package_state_error" msgid="7672093962724223588">"無法還原"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"全部移除"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"移除"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"搜尋"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 209816ec2..dd5e2859a 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -112,4 +112,11 @@
<string name="package_state_installing" msgid="7588193972189849870">"Iyafaka"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Akwaziwa"</string>
<string name="package_state_error" msgid="7672093962724223588">"Ayibuyiselwe"</string>
+ <string name="abandoned_clean_all" msgid="5256770727689657618">"Susa konke"</string>
+ <string name="abandoned_clean_this" msgid="7610119707847920412">"Susa"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"Sesha"</string>
+ <!-- no translation found for abandoned_promises_title (7096178467971716750) -->
+ <skip />
+ <!-- no translation found for abandoned_promise_explanation (3990027586878167529) -->
+ <skip />
</resources>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 0006a7455..f3bfcec61 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -108,6 +108,12 @@
<attr name="pageIndicator" format="reference" />
</declare-styleable>
+ <declare-styleable name="BubbleTextView">
+ <!-- A spacing override for the icons within a page -->
+ <attr name="customShadows" format="boolean" />
+ <attr name="glowColor" format="color" />
+ </declare-styleable>
+
<!-- AppsCustomizePagedView specific attributes. These attributes are used to
customize an AppsCustomizePagedView in xml files. -->
<declare-styleable name="AppsCustomizePagedView">
diff --git a/res/values/colors.xml b/res/values/colors.xml
index ffee05f18..d1d33a0f6 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -31,8 +31,8 @@
<color name="workspace_all_apps_and_delete_zone_text_shadow_color">#A0000000</color>
<color name="workspace_icon_text_color">#FFF</color>
- <color name="apps_customize_icon_text_color">#FFF</color>
- <color name="folder_items_text_color">#FF333333</color>
+ <color name="quantum_panel_text_color">#FF666666</color>
+ <color name="quantum_panel_text_shadow_color">#FFC4C4C4</color>
<color name="folder_items_glow_color">#FFCCCCCC</color>
<color name="outline_color">#FFFFFFFF</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 1eca5b382..8e561cfc0 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -18,8 +18,8 @@
<!-- Dynamic Grid -->
<dimen name="dynamic_grid_edge_margin">6dp</dimen>
<dimen name="dynamic_grid_search_bar_max_width">500dp</dimen>
- <dimen name="dynamic_grid_search_bar_height">48dp</dimen>
- <dimen name="dynamic_grid_page_indicator_height">24dp</dimen>
+ <dimen name="dynamic_grid_search_bar_height">56dp</dimen>
+ <dimen name="dynamic_grid_page_indicator_height">20dp</dimen>
<dimen name="dynamic_grid_icon_drawable_padding">4dp</dimen>
<dimen name="dynamic_grid_all_apps_cell_padding">18dp</dimen>
<dimen name="dynamic_grid_workspace_page_spacing">8dp</dimen>
@@ -62,6 +62,7 @@
<dimen name="apps_customize_tab_bar_height">52dp</dimen>
<dimen name="apps_customize_tab_bar_margin_top">0dp</dimen>
<dimen name="app_icon_size">48dp</dimen>
+ <dimen name="apps_customize_horizontal_padding">4dp</dimen>
<!-- The AppsCustomize page indicator -->
<dimen name="apps_customize_page_indicator_height">12dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ad3a1c4fb..3bf6c8d6e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -277,4 +277,18 @@ s -->
<string name="package_state_unknown">Unknown</string>
<!-- Label on an icon that references an uninstalled package, for which restore from market has failed. [CHAR_LIMIT=15] -->
<string name="package_state_error">Not restored</string>
+
+ <!-- Button for abandoned promises dialog, that removes all abandoned promise icons. -->
+ <string name="abandoned_clean_all">Remove All</string>
+ <!-- Button for abandoned promises dialog, to removes this abandoned promise icon. -->
+ <string name="abandoned_clean_this">Remove</string>
+ <!-- Button for abandoned promise dialog, to search in the market for the missing package. -->
+ <string name="abandoned_search">Search</string>
+ <!-- Title for abandoned promise dialog. -->
+ <string name="abandoned_promises_title">This app is not installed</string>
+ <!-- Explanation for abandoned promise dialog. "The first 'it' refers to the shortcut icon.
+ The second "it" refers to the app. -->
+ <string name="abandoned_promise_explanation">The app for this icon isn\'t installed.
+ You can remove it, or search for the app and install it manually.
+ </string>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index c18dccbab..462c29239 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -86,11 +86,26 @@
<style name="WorkspaceIcon.AppsCustomize">
<item name="android:background">@null</item>
- <item name="android:textColor">@color/apps_customize_icon_text_color</item>
+ <item name="android:textColor">@color/quantum_panel_text_color</item>
<item name="android:drawablePadding">@dimen/dynamic_grid_icon_drawable_padding</item>
- <item name="android:shadowRadius">4.0</item>
- <item name="android:shadowColor">#FF000000</item>
+ <item name="android:shadowRadius">2.0</item>
+ <item name="android:shadowDx">0</item>
+ <item name="android:shadowDy">2</item>
+ <item name="android:shadowColor">#FFC4C4C4</item>
</style>
+
+ <style name="WorkspaceIcon.Folder">
+ <item name="android:background">@null</item>
+ <item name="android:textColor">@color/quantum_panel_text_color</item>
+ <item name="android:shadowColor">@color/quantum_panel_text_shadow_color</item>
+ <item name="android:shadowRadius">2.0</item>
+ <item name="android:shadowDx">0</item>
+ <item name="android:shadowDy">2</item>
+
+ <item name="customShadows">false</item>
+ <item name="glowColor">@color/folder_items_glow_color</item>
+ </style>
+
<style name="SearchDropTargetBar">
</style>
<style name="SearchButton">
diff --git a/src/com/android/launcher3/AppInfo.java b/src/com/android/launcher3/AppInfo.java
index c85626b10..bfcad84b3 100644
--- a/src/com/android/launcher3/AppInfo.java
+++ b/src/com/android/launcher3/AppInfo.java
@@ -94,7 +94,7 @@ public class AppInfo extends ItemInfo {
}
private static int initFlags(LauncherActivityInfoCompat info) {
- int appFlags = info.getApplicationFlags();
+ int appFlags = info.getApplicationInfo().flags;
int flags = 0;
if ((appFlags & android.content.pm.ApplicationInfo.FLAG_SYSTEM) == 0) {
flags |= DOWNLOADED_FLAG;
diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java
index 04426a8f1..2520b8a12 100644
--- a/src/com/android/launcher3/AppsCustomizePagedView.java
+++ b/src/com/android/launcher3/AppsCustomizePagedView.java
@@ -1007,6 +1007,9 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
layout.setPadding(mAllAppsPadding.left, mAllAppsPadding.top, mAllAppsPadding.right,
mAllAppsPadding.bottom);
setVisibilityOnChildren(layout, View.VISIBLE);
+
+ Resources res = getContext().getResources();
+ layout.setBackground(res.getDrawable(R.drawable.quantum_panel));
}
public void syncAppsPageItems(int page, boolean immediate) {
@@ -1437,6 +1440,11 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
}
}
+ // TODO: clean this up
+ alpha = 1;
+ translationX = 0;
+ scale = 1;
+
v.setTranslationX(translationX);
v.setScaleX(scale);
v.setScaleY(scale);
diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java
index 95300c133..54d7e506e 100644
--- a/src/com/android/launcher3/BubbleTextView.java
+++ b/src/com/android/launcher3/BubbleTextView.java
@@ -17,7 +17,9 @@
package com.android.launcher3;
import android.content.Context;
+import android.content.res.ColorStateList;
import android.content.res.Resources;
+import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;
@@ -64,7 +66,7 @@ public class BubbleTextView extends TextView {
private float mSlop;
private int mTextColor;
- private boolean mShadowsEnabled = true;
+ private boolean mCustomShadowsEnabled = true;
private boolean mIsTextVisible;
private boolean mBackgroundSizeChanged;
@@ -72,24 +74,28 @@ public class BubbleTextView extends TextView {
private boolean mStayPressed;
private CheckLongPressHelper mLongPressHelper;
- private int mInstallState;
-
- private int mState;
private CharSequence mDefaultText = "";
public BubbleTextView(Context context) {
- super(context);
- init();
+ this(context, null, 0);
}
public BubbleTextView(Context context, AttributeSet attrs) {
- super(context, attrs);
- init();
+ this(context, attrs, 0);
}
public BubbleTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
+
+ Resources res = context.getResources();
+ TypedArray a = context.obtainStyledAttributes(attrs,
+ R.styleable.BubbleTextView, defStyle, 0);
+ setGlowColor(a.getColor(R.styleable.BubbleTextView_glowColor,
+ res.getColor(R.color.outline_color)));
+ mCustomShadowsEnabled = a.getBoolean(R.styleable.BubbleTextView_customShadows, true);
+ a.recycle();
+
init();
}
@@ -100,7 +106,6 @@ public class BubbleTextView extends TextView {
LauncherAppState app = LauncherAppState.getInstance();
DeviceProfile grid = app.getDynamicGrid().getDeviceProfile();
setTextSize(TypedValue.COMPLEX_UNIT_PX, grid.iconTextSizePx);
- setTextColor(getResources().getColor(R.color.workspace_icon_text_color));
}
private void init() {
@@ -108,12 +113,9 @@ public class BubbleTextView extends TextView {
mBackground = getBackground();
mOutlineHelper = HolographicOutlineHelper.obtain(getContext());
-
- final Resources res = getContext().getResources();
- mFocusedOutlineColor = mFocusedGlowColor = mPressedOutlineColor = mPressedGlowColor =
- res.getColor(R.color.outline_color);
-
- setShadowLayer(SHADOW_LARGE_RADIUS, 0.0f, SHADOW_Y_OFFSET, SHADOW_LARGE_COLOUR);
+ if (mCustomShadowsEnabled) {
+ setShadowLayer(SHADOW_LARGE_RADIUS, 0.0f, SHADOW_Y_OFFSET, SHADOW_LARGE_COLOUR);
+ }
}
public void applyFromShortcutInfo(ShortcutInfo info, IconCache iconCache) {
@@ -124,10 +126,12 @@ public class BubbleTextView extends TextView {
Drawable iconDrawable = Utilities.createIconDrawable(b);
setCompoundDrawables(null, iconDrawable, null, null);
setCompoundDrawablePadding(grid.iconDrawablePaddingPx);
- setText(info.title);
+ if (info.contentDescription != null) {
+ setContentDescription(info.contentDescription);
+ }
setTag(info);
if (info.isPromise()) {
- setState(ShortcutInfo.PACKAGE_STATE_UNKNOWN); // TODO: persist this state somewhere
+ applyState();
}
}
@@ -150,6 +154,11 @@ public class BubbleTextView extends TextView {
LauncherModel.checkItemInfo((ItemInfo) tag);
}
super.setTag(tag);
+ if (tag instanceof ShortcutInfo) {
+ final ShortcutInfo info = (ShortcutInfo) tag;
+ mDefaultText = info.title;
+ setText(mDefaultText);
+ }
}
@Override
@@ -317,7 +326,7 @@ public class BubbleTextView extends TextView {
@Override
public void draw(Canvas canvas) {
- if (!mShadowsEnabled) {
+ if (!mCustomShadowsEnabled) {
super.draw(canvas);
return;
}
@@ -379,10 +388,10 @@ public class BubbleTextView extends TextView {
super.setTextColor(color);
}
- public void setShadowsEnabled(boolean enabled) {
- mShadowsEnabled = enabled;
- getPaint().clearShadowLayer();
- invalidate();
+ @Override
+ public void setTextColor(ColorStateList colors) {
+ mTextColor = colors.getDefaultColor();
+ super.setTextColor(colors);
}
public void setTextVisibility(boolean visible) {
@@ -415,19 +424,12 @@ public class BubbleTextView extends TextView {
mLongPressHelper.cancelLongPress();
}
- public void setState(int state) {
- if (mState == ShortcutInfo.PACKAGE_STATE_DEFAULT && mState != state) {
- mDefaultText = getText();
- }
- mState = state;
- applyState();
- }
-
- private void applyState() {
+ public void applyState() {
int alpha = getResources().getInteger(R.integer.promise_icon_alpha);
- if (DEBUG) Log.d(TAG, "applying icon state: " + mState);
+ final int state = getState();
+ if (DEBUG) Log.d(TAG, "applying icon state: " + state);
- switch(mState) {
+ switch(state) {
case ShortcutInfo.PACKAGE_STATE_DEFAULT:
super.setText(mDefaultText);
alpha = 255;
@@ -462,4 +464,13 @@ public class BubbleTextView extends TextView {
}
}
}
+
+ private int getState() {
+ if (! (getTag() instanceof ShortcutInfo)) {
+ return ShortcutInfo.PACKAGE_STATE_DEFAULT;
+ } else {
+ ShortcutInfo info = (ShortcutInfo) getTag();
+ return info.getState();
+ }
+ }
}
diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java
index a0c9c2ed9..8ca8d9105 100644
--- a/src/com/android/launcher3/CellLayout.java
+++ b/src/com/android/launcher3/CellLayout.java
@@ -217,11 +217,6 @@ public class CellLayout extends ViewGroup {
mNormalBackground = res.getDrawable(R.drawable.screenpanel);
mActiveGlowBackground = res.getDrawable(R.drawable.screenpanel_hover);
- if (Utilities.isLmp()) {
- mNormalBackground = res.getDrawable(R.drawable.screenpanel_l);
- mActiveGlowBackground = res.getDrawable(R.drawable.screenpanel_hover_l);
- }
-
mOverScrollLeft = res.getDrawable(R.drawable.overscroll_glow_left);
mOverScrollRight = res.getDrawable(R.drawable.overscroll_glow_right);
mForegroundPadding =
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index 8470b39a3..c0f505481 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -767,11 +767,10 @@ public class DeviceProfile {
(allAppsIconSizePx / DynamicGrid.DEFAULT_ICON_SIZE_PX)));
pageIndicator = host.findViewById(R.id.apps_customize_page_indicator);
if (pageIndicator != null) {
- lp = (FrameLayout.LayoutParams) pageIndicator.getLayoutParams();
- lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
- lp.width = LayoutParams.WRAP_CONTENT;
- lp.height = pageIndicatorHeight;
- pageIndicator.setLayoutParams(lp);
+ LinearLayout.LayoutParams lllp = (LinearLayout.LayoutParams) pageIndicator.getLayoutParams();
+ lllp.width = LayoutParams.WRAP_CONTENT;
+ lllp.height = pageIndicatorHeight;
+ pageIndicator.setLayoutParams(lllp);
}
AppsCustomizePagedView pagedView = (AppsCustomizePagedView)
@@ -796,6 +795,11 @@ public class DeviceProfile {
padding.bottom = Math.max(0, pageIndicatorHeight - paddingTB);
pagedView.setAllAppsPadding(padding);
pagedView.setWidgetsPageIndicatorPadding(pageIndicatorHeight);
+
+ // Horizontal padding for the whole paged view
+ int pagedViewPadding =
+ res.getDimensionPixelSize(R.dimen.apps_customize_horizontal_padding);
+ pagedView.setPadding(pagedViewPadding, 0, pagedViewPadding, 0);
}
}
diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java
index e900c2b5a..47c8a4a0f 100644
--- a/src/com/android/launcher3/Folder.java
+++ b/src/com/android/launcher3/Folder.java
@@ -566,16 +566,15 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
}
protected View createAndAddShortcut(ShortcutInfo item) {
- final BubbleTextView textView =
- (BubbleTextView) mInflater.inflate(R.layout.application, this, false);
+ final TextView textView =
+ (TextView) mInflater.inflate(R.layout.folder_application, this, false);
textView.setCompoundDrawables(null,
Utilities.createIconDrawable(item.getIcon(mIconCache)), null, null);
textView.setText(item.title);
+ if (item.contentDescription != null) {
+ textView.setContentDescription(item.contentDescription);
+ }
textView.setTag(item);
- textView.setTextColor(getResources().getColor(R.color.folder_items_text_color));
- textView.setShadowsEnabled(false);
- textView.setGlowColor(getResources().getColor(R.color.folder_items_glow_color));
-
textView.setOnClickListener(this);
textView.setOnLongClickListener(this);
diff --git a/src/com/android/launcher3/FolderIcon.java b/src/com/android/launcher3/FolderIcon.java
index be6cf4857..ab8976a59 100644
--- a/src/com/android/launcher3/FolderIcon.java
+++ b/src/com/android/launcher3/FolderIcon.java
@@ -71,9 +71,7 @@ public class FolderIcon extends FrameLayout implements FolderListener {
private static final float OUTER_RING_GROWTH_FACTOR = 0.3f;
// The amount of vertical spread between items in the stack [0...1]
- private static final float PERSPECTIVE_SHIFT_FACTOR = 0.24f;
-
- private static final float PERSPECTIVE_SHIFT_FACTOR_L = 0.18f;
+ private static final float PERSPECTIVE_SHIFT_FACTOR = 0.18f;
// Flag as to whether or not to draw an outer ring. Currently none is designed.
public static final boolean HAS_OUTER_RING = true;
@@ -503,16 +501,11 @@ public class FolderIcon extends FrameLayout implements FolderListener {
int adjustedAvailableSpace = (int) ((mAvailableSpaceInPreview / 2) * (1 + 0.8f));
int unscaledHeight = (int) (mIntrinsicIconSize * (1 + PERSPECTIVE_SHIFT_FACTOR));
- if (Utilities.isLmp()) {
- unscaledHeight = (int) (mIntrinsicIconSize * (1 + PERSPECTIVE_SHIFT_FACTOR_L));
- }
+
mBaselineIconScale = (1.0f * adjustedAvailableSpace / unscaledHeight);
mBaselineIconSize = (int) (mIntrinsicIconSize * mBaselineIconScale);
mMaxPerspectiveShift = mBaselineIconSize * PERSPECTIVE_SHIFT_FACTOR;
- if (Utilities.isLmp()) {
- mMaxPerspectiveShift = mBaselineIconSize * PERSPECTIVE_SHIFT_FACTOR_L;
- }
mPreviewOffsetX = (mTotalWidth - mAvailableSpaceInPreview) / 2;
mPreviewOffsetY = previewPadding + grid.folderBackgroundOffset;
@@ -563,14 +556,10 @@ public class FolderIcon extends FrameLayout implements FolderListener {
// We want to imagine our coordinates from the bottom left, growing up and to the
// right. This is natural for the x-axis, but for the y-axis, we have to invert things.
float transY = mAvailableSpaceInPreview - (offset + scaledSize + scaleOffsetCorrection) + getPaddingTop();
- float transX = offset + scaleOffsetCorrection;
+ float transX = (mAvailableSpaceInPreview - scaledSize) / 2;
float totalScale = mBaselineIconScale * scale;
final int overlayAlpha = (int) (80 * (1 - r));
- if (Utilities.isLmp()) {
- transX = (mAvailableSpaceInPreview - scaledSize) / 2;
- }
-
if (params == null) {
params = new PreviewItemDrawingParams(transX, transY, totalScale, overlayAlpha);
} else {
diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java
index 4b2543328..2d171238f 100644
--- a/src/com/android/launcher3/Hotseat.java
+++ b/src/com/android/launcher3/Hotseat.java
@@ -151,10 +151,6 @@ public class Hotseat extends FrameLayout {
inflater.inflate(R.layout.all_apps_button, mContent, false);
Drawable d = context.getResources().getDrawable(R.drawable.all_apps_button_icon);
- if (Utilities.isLmp()) {
- d = context.getResources().getDrawable(R.drawable.all_apps_button_icon_l);
- }
-
Utilities.resizeIconDrawable(d);
allAppsButton.setCompoundDrawables(null, d, null, null);
diff --git a/src/com/android/launcher3/IconCache.java b/src/com/android/launcher3/IconCache.java
index be02d3583..7d8628d9d 100644
--- a/src/com/android/launcher3/IconCache.java
+++ b/src/com/android/launcher3/IconCache.java
@@ -65,6 +65,7 @@ public class IconCache {
private static class CacheEntry {
public Bitmap icon;
public String title;
+ public String contentDescription;
}
private static class CacheKey {
@@ -240,6 +241,7 @@ public class IconCache {
application.title = entry.title;
application.iconBitmap = entry.icon;
+ application.contentDescription = entry.contentDescription;
}
}
@@ -262,6 +264,7 @@ public class IconCache {
CacheEntry entry = cacheLocked(component, launcherActInfo, null, user);
if (title != null) {
entry.title = title;
+ entry.contentDescription = mUserManager.getBadgedLabelForUser(title, user);
}
return entry.icon;
}
@@ -310,6 +313,7 @@ public class IconCache {
}
}
+ entry.contentDescription = mUserManager.getBadgedLabelForUser(entry.title, user);
entry.icon = Utilities.createIconBitmap(
info.getBadgedIcon(mIconDpi), mContext);
} else {
diff --git a/src/com/android/launcher3/ItemInfo.java b/src/com/android/launcher3/ItemInfo.java
index 74f16e325..fe030171b 100644
--- a/src/com/android/launcher3/ItemInfo.java
+++ b/src/com/android/launcher3/ItemInfo.java
@@ -108,6 +108,11 @@ public class ItemInfo {
CharSequence title;
/**
+ * Content description of the item.
+ */
+ String contentDescription;
+
+ /**
* The position of the item in a drag-and-drop operation.
*/
int[] dropPos = null;
@@ -115,6 +120,7 @@ public class ItemInfo {
UserHandleCompat user;
ItemInfo() {
+ user = UserHandleCompat.myUserHandle();
}
ItemInfo(ItemInfo info) {
@@ -127,6 +133,7 @@ public class ItemInfo {
itemType = info.itemType;
container = info.container;
user = info.user;
+ contentDescription = info.contentDescription;
// tempdebug:
LauncherModel.checkItemInfo(this);
}
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index f8c9f7b38..a85b5b18d 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -28,6 +28,7 @@ import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityOptions;
+import android.app.AlertDialog;
import android.app.SearchManager;
import android.appwidget.AppWidgetHostView;
import android.appwidget.AppWidgetManager;
@@ -38,6 +39,7 @@ import android.content.ComponentCallbacks2;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
@@ -1283,10 +1285,6 @@ public class Launcher extends Activity
}
});
widgetButton.setOnTouchListener(getHapticFeedbackTouchListener());
- if (Utilities.isLmp()) {
- ((TextView) widgetButton).setCompoundDrawablesWithIntrinsicBounds(0,
- R.drawable.widget_button_l, 0, 0);
- }
View wallpaperButton = findViewById(R.id.wallpaper_button);
wallpaperButton.setOnClickListener(new OnClickListener() {
@@ -1299,11 +1297,6 @@ public class Launcher extends Activity
});
wallpaperButton.setOnTouchListener(getHapticFeedbackTouchListener());
- if (Utilities.isLmp()) {
- ((TextView) wallpaperButton).setCompoundDrawablesWithIntrinsicBounds(0,
- R.drawable.wallpaper_button_l, 0, 0);
- }
-
View settingsButton = findViewById(R.id.settings_button);
if (hasSettings()) {
settingsButton.setOnClickListener(new OnClickListener() {
@@ -1315,10 +1308,6 @@ public class Launcher extends Activity
}
});
settingsButton.setOnTouchListener(getHapticFeedbackTouchListener());
- if (Utilities.isLmp()) {
- ((TextView) settingsButton).setCompoundDrawablesWithIntrinsicBounds(0,
- R.drawable.setting_button_l, 0, 0);
- }
} else {
settingsButton.setVisibility(View.GONE);
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) widgetButton.getLayoutParams();
@@ -2517,7 +2506,7 @@ public class Launcher extends Activity
*
* @param v The view that was clicked. Must be a tagged with a {@link ShortcutInfo}.
*/
- protected void onClickAppShortcut(View v) {
+ protected void onClickAppShortcut(final View v) {
if (LOGD) Log.d(TAG, "onClickAppShortcut");
Object tag = v.getTag();
if (!(tag instanceof ShortcutInfo)) {
@@ -2541,7 +2530,42 @@ public class Launcher extends Activity
}
}
+ // Check for abandoned promise
+ if (shortcut.isAbandoned() && v instanceof BubbleTextView) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(R.string.abandoned_promises_title);
+ builder.setMessage(R.string.abandoned_promise_explanation);
+ builder.setPositiveButton(R.string.abandoned_search,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ startAppShortcutActivity(v);
+ }
+ }
+ );
+ builder.setNeutralButton(R.string.abandoned_clean_this,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ final BubbleTextView bubble = (BubbleTextView) v;
+ final UserHandleCompat user = UserHandleCompat.myUserHandle();
+ mWorkspace.removeAbandonedPromise(bubble, user);
+ }
+ });
+ builder.create().show();
+ return;
+ }
+
// Start activities
+ startAppShortcutActivity(v);
+ }
+
+ private void startAppShortcutActivity(View v) {
+ Object tag = v.getTag();
+ if (!(tag instanceof ShortcutInfo)) {
+ throw new IllegalArgumentException("Input must be a Shortcut");
+ }
+ final ShortcutInfo shortcut = (ShortcutInfo) tag;
+ final Intent intent = shortcut.intent;
+
int[] pos = new int[2];
v.getLocationOnScreen(pos);
intent.setSourceBounds(new Rect(pos[0], pos[1],
@@ -2744,8 +2768,8 @@ public class Launcher extends Activity
// Could be launching some bookkeeping activity
startActivity(intent, optsBundle);
} else {
- launcherApps.startActivityForProfile(intent.getComponent(),
- intent.getSourceBounds(), optsBundle, user);
+ launcherApps.startActivityForProfile(intent.getComponent(), user,
+ intent.getSourceBounds(), optsBundle);
}
return true;
} catch (SecurityException e) {
@@ -4680,7 +4704,9 @@ public class Launcher extends Activity
public ItemInfo createShortcutDragInfo(Intent shortcutIntent, CharSequence caption,
Bitmap icon, UserHandleCompat user) {
- return new ShortcutInfo(shortcutIntent, caption, icon, user);
+ UserManagerCompat userManager = UserManagerCompat.getInstance(this);
+ String contentDescription = userManager.getBadgedLabelForUser(caption.toString(), user);
+ return new ShortcutInfo(shortcutIntent, caption, contentDescription, icon, user);
}
protected void moveWorkspaceToDefaultScreen() {
diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java
index 79bc08424..27bcd8172 100644
--- a/src/com/android/launcher3/LauncherAppState.java
+++ b/src/com/android/launcher3/LauncherAppState.java
@@ -95,7 +95,7 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks {
mBuildInfo = BuildInfo.loadByName(sContext.getString(R.string.build_info_class));
mModel = new LauncherModel(this, mIconCache, mAppFilter);
final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(sContext);
- launcherApps.addOnAppsChangedListener(mModel);
+ launcherApps.addOnAppsChangedCallback(mModel);
// Register intent receivers
IntentFilter filter = new IntentFilter();
@@ -128,7 +128,7 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks {
public void onTerminate() {
sContext.unregisterReceiver(mModel);
final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(sContext);
- launcherApps.removeOnAppsChangedListener(mModel);
+ launcherApps.removeOnAppsChangedCallback(mModel);
ContentResolver resolver = sContext.getContentResolver();
resolver.unregisterContentObserver(mFavoritesObserver);
diff --git a/src/com/android/launcher3/LauncherBackupAgentHelper.java b/src/com/android/launcher3/LauncherBackupAgentHelper.java
index de6aedddd..7dd8cdedd 100644
--- a/src/com/android/launcher3/LauncherBackupAgentHelper.java
+++ b/src/com/android/launcher3/LauncherBackupAgentHelper.java
@@ -61,7 +61,7 @@ public class LauncherBackupAgentHelper extends BackupAgentHelper {
@Override
public void onCreate() {
boolean restoreEnabled = 0 != Settings.Secure.getInt(
- getContentResolver(), SETTING_RESTORE_ENABLED, 0);
+ getContentResolver(), SETTING_RESTORE_ENABLED, 1);
if (VERBOSE) Log.v(TAG, "restore is " + (restoreEnabled ? "enabled" : "disabled"));
addHelper(LauncherBackupHelper.LAUNCHER_PREFS_PREFIX,
diff --git a/src/com/android/launcher3/LauncherClings.java b/src/com/android/launcher3/LauncherClings.java
index 1176aa572..00586bd4e 100644
--- a/src/com/android/launcher3/LauncherClings.java
+++ b/src/com/android/launcher3/LauncherClings.java
@@ -29,6 +29,7 @@ import android.content.pm.PackageManager;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.UserManager;
+import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -48,6 +49,9 @@ class LauncherClings {
private static final int SHOW_CLING_DURATION = 250;
private static final int DISMISS_CLING_DURATION = 200;
+ // New Secure Setting in L
+ private static final String SKIP_FIRST_USE_HINTS = "skip_first_use_hints";
+
private Launcher mLauncher;
private LayoutInflater mInflater;
private HideFromAccessibilityHelper mHideFromAccessibilityHelper
@@ -107,6 +111,10 @@ class LauncherClings {
return false;
}
}
+ if (Settings.Secure.getInt(mLauncher.getContentResolver(), SKIP_FIRST_USE_HINTS, 0)
+ == 1) {
+ return false;
+ }
return true;
}
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 141368c20..29cfbb285 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -73,7 +73,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
* for the Launcher.
*/
public class LauncherModel extends BroadcastReceiver
- implements LauncherAppsCompat.OnAppsChangedListenerCompat {
+ implements LauncherAppsCompat.OnAppsChangedCallbackCompat {
static final boolean DEBUG_LOADERS = false;
private static final boolean DEBUG_RECEIVER = true; // STOPSHIP(cwren) temporary for debugging
@@ -842,9 +842,26 @@ public class LauncherModel extends BroadcastReceiver
*/
static boolean shortcutExists(Context context, String title, Intent intent) {
final ContentResolver cr = context.getContentResolver();
+ final Intent intentWithPkg, intentWithoutPkg;
+
+ if (intent.getComponent() != null) {
+ // If component is not null, an intent with null package will produce
+ // the same result and should also be a match.
+ if (intent.getPackage() != null) {
+ intentWithPkg = intent;
+ intentWithoutPkg = new Intent(intent).setPackage(null);
+ } else {
+ intentWithPkg = new Intent(intent).setPackage(
+ intent.getComponent().getPackageName());
+ intentWithoutPkg = intent;
+ }
+ } else {
+ intentWithPkg = intent;
+ intentWithoutPkg = intent;
+ }
Cursor c = cr.query(LauncherSettings.Favorites.CONTENT_URI,
- new String[] { "title", "intent" }, "title=? and intent=?",
- new String[] { title, intent.toUri(0) }, null);
+ new String[] { "title", "intent" }, "title=? and (intent=? or intent=?)",
+ new String[] { title, intentWithPkg.toUri(0), intentWithoutPkg.toUri(0) }, null);
boolean result = false;
try {
result = c.moveToFirst();
@@ -1186,28 +1203,28 @@ public class LauncherModel extends BroadcastReceiver
}
@Override
- public void onPackageChanged(UserHandleCompat user, String packageName) {
+ public void onPackageChanged(String packageName, UserHandleCompat user) {
int op = PackageUpdatedTask.OP_UPDATE;
enqueuePackageUpdated(new PackageUpdatedTask(op, new String[] { packageName },
user));
}
@Override
- public void onPackageRemoved(UserHandleCompat user, String packageName) {
+ public void onPackageRemoved(String packageName, UserHandleCompat user) {
int op = PackageUpdatedTask.OP_REMOVE;
enqueuePackageUpdated(new PackageUpdatedTask(op, new String[] { packageName },
user));
}
@Override
- public void onPackageAdded(UserHandleCompat user, String packageName) {
+ public void onPackageAdded(String packageName, UserHandleCompat user) {
int op = PackageUpdatedTask.OP_ADD;
enqueuePackageUpdated(new PackageUpdatedTask(op, new String[] { packageName },
user));
}
@Override
- public void onPackagesAvailable(UserHandleCompat user, String[] packageNames,
+ public void onPackagesAvailable(String[] packageNames, UserHandleCompat user,
boolean replacing) {
if (!replacing) {
enqueuePackageUpdated(new PackageUpdatedTask(PackageUpdatedTask.OP_ADD, packageNames,
@@ -1226,7 +1243,7 @@ public class LauncherModel extends BroadcastReceiver
}
@Override
- public void onPackagesUnavailable(UserHandleCompat user, String[] packageNames,
+ public void onPackagesUnavailable(String[] packageNames, UserHandleCompat user,
boolean replacing) {
if (!replacing) {
enqueuePackageUpdated(new PackageUpdatedTask(
@@ -2820,6 +2837,7 @@ public class LauncherModel extends BroadcastReceiver
if (isShortcutInfoUpdateable(i)) {
ShortcutInfo info = (ShortcutInfo) i;
info.title = a.title.toString();
+ info.contentDescription = a.contentDescription;
updateItemInDatabase(context, info);
}
}
@@ -2955,9 +2973,12 @@ public class LauncherModel extends BroadcastReceiver
info.title = "";
}
info.user = UserHandleCompat.myUserHandle();
+ info.contentDescription = mUserManager.getBadgedLabelForUser(
+ info.title.toString(), info.user);
info.setIcon(mIconCache.getIcon(intent, info.title.toString(), info.user));
info.itemType = LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT;
info.restoredIntent = intent;
+ info.setState(ShortcutInfo.PACKAGE_STATE_UNKNOWN);
return info;
}
@@ -3061,6 +3082,8 @@ public class LauncherModel extends BroadcastReceiver
}
info.itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
info.user = user;
+ info.contentDescription = mUserManager.getBadgedLabelForUser(
+ info.title.toString(), info.user);
return info;
}
@@ -3071,6 +3094,9 @@ public class LauncherModel extends BroadcastReceiver
if (i instanceof ShortcutInfo) {
ShortcutInfo info = (ShortcutInfo) i;
ComponentName cn = info.intent.getComponent();
+ if (info.restoredIntent != null) {
+ cn = info.restoredIntent.getComponent();
+ }
if (cn != null && f.filterItem(null, info, cn)) {
filtered.add(info);
}
@@ -3078,6 +3104,9 @@ public class LauncherModel extends BroadcastReceiver
FolderInfo info = (FolderInfo) i;
for (ShortcutInfo s : info.contents) {
ComponentName cn = s.intent.getComponent();
+ if (s.restoredIntent != null) {
+ cn = s.restoredIntent.getComponent();
+ }
if (cn != null && f.filterItem(info, s, cn)) {
filtered.add(s);
}
@@ -3336,6 +3365,8 @@ public class LauncherModel extends BroadcastReceiver
info.setIcon(icon);
info.title = name;
+ info.contentDescription = mUserManager.getBadgedLabelForUser(
+ info.title.toString(), info.user);
info.intent = intent;
info.customIcon = customIcon;
info.iconResource = iconResource;
diff --git a/src/com/android/launcher3/PagedViewIcon.java b/src/com/android/launcher3/PagedViewIcon.java
index f7cb997cd..e819d5edf 100644
--- a/src/com/android/launcher3/PagedViewIcon.java
+++ b/src/com/android/launcher3/PagedViewIcon.java
@@ -77,6 +77,9 @@ public class PagedViewIcon extends TextView {
setCompoundDrawables(null, icon, null, null);
setCompoundDrawablePadding(grid.iconDrawablePaddingPx);
setText(info.title);
+ if (info.contentDescription != null) {
+ setContentDescription(info.contentDescription);
+ }
setTag(info);
}
@@ -108,27 +111,4 @@ public class PagedViewIcon extends TextView {
setAlpha(1f);
}
}
-
- @Override
- public void draw(Canvas canvas) {
- // If text is transparent, don't draw any shadow
- if (getCurrentTextColor() == getResources().getColor(android.R.color.transparent)) {
- getPaint().clearShadowLayer();
- super.draw(canvas);
- return;
- }
-
- // We enhance the shadow by drawing the shadow twice
- getPaint().setShadowLayer(BubbleTextView.SHADOW_LARGE_RADIUS, 0.0f,
- BubbleTextView.SHADOW_Y_OFFSET, BubbleTextView.SHADOW_LARGE_COLOUR);
- super.draw(canvas);
- canvas.save(Canvas.CLIP_SAVE_FLAG);
- canvas.clipRect(getScrollX(), getScrollY() + getExtendedPaddingTop(),
- getScrollX() + getWidth(),
- getScrollY() + getHeight(), Region.Op.INTERSECT);
- getPaint().setShadowLayer(BubbleTextView.SHADOW_SMALL_RADIUS, 0.0f, 0.0f,
- BubbleTextView.SHADOW_SMALL_COLOUR);
- super.draw(canvas);
- canvas.restore();
- }
}
diff --git a/src/com/android/launcher3/ShortcutInfo.java b/src/com/android/launcher3/ShortcutInfo.java
index f40cf9fa1..d2573a4a1 100644
--- a/src/com/android/launcher3/ShortcutInfo.java
+++ b/src/com/android/launcher3/ShortcutInfo.java
@@ -36,22 +36,22 @@ import java.util.Arrays;
*/
public class ShortcutInfo extends ItemInfo {
- /** This package is not installed, and there is no other information available. */
+ /** {@link #mState} meaning this package is not installed, and there is no other information. */
public static final int PACKAGE_STATE_UNKNOWN = -2;
- /** This package is not installed, because installation failed. */
+ /** {@link #mState} meaning this package is not installed, because installation failed. */
public static final int PACKAGE_STATE_ERROR = -1;
- /** This package is installed. This is the typical case */
+ /** {@link #mState} meaning this package is installed. This is the typical case. */
public static final int PACKAGE_STATE_DEFAULT = 0;
- /** This package is not installed, but some external entity has promised to install it. */
+ /** {@link #mState} meaning some external entity has promised to install this package. */
public static final int PACKAGE_STATE_ENQUEUED = 1;
- /** This package is not installed, but some external entity is downloading it. */
+ /** {@link #mState} meaning but some external entity is downloading this package. */
public static final int PACKAGE_STATE_DOWNLOADING = 2;
- /** This package is not installed, but some external entity is installing it. */
+ /** {@link #mState} meaning some external entity is installing this package. */
public static final int PACKAGE_STATE_INSTALLING = 3;
/**
@@ -82,6 +82,11 @@ public class ShortcutInfo extends ItemInfo {
*/
private Bitmap mIcon;
+ /**
+ * The installation state of the package that this shortcut represents.
+ */
+ protected int mState;
+
long firstInstallTime;
int flags = 0;
@@ -110,13 +115,16 @@ public class ShortcutInfo extends ItemInfo {
if (restoredIntent != null) {
intent = restoredIntent;
restoredIntent = null;
+ mState = PACKAGE_STATE_DEFAULT;
}
}
- ShortcutInfo(Intent intent, CharSequence title, Bitmap icon, UserHandleCompat user) {
+ ShortcutInfo(Intent intent, CharSequence title, String contentDescrition,
+ Bitmap icon, UserHandleCompat user) {
this();
this.intent = intent;
this.title = title;
+ this.contentDescription = contentDescription;
mIcon = icon;
this.user = user;
}
@@ -218,5 +226,19 @@ public class ShortcutInfo extends ItemInfo {
&& pkgName != null
&& pkgName.equals(restoredIntent.getComponent().getPackageName());
}
+
+ public boolean isAbandoned() {
+ return isPromise()
+ && (mState == ShortcutInfo.PACKAGE_STATE_ERROR
+ || mState == ShortcutInfo.PACKAGE_STATE_UNKNOWN);
+ }
+
+ public int getState() {
+ return mState;
+ }
+
+ public void setState(int state) {
+ mState = state;
+ }
}
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 6afea8268..48795af13 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -98,8 +98,8 @@ public class Workspace extends SmoothPagedView
private static final float ALPHA_CUTOFF_THRESHOLD = 0.01f;
- private static final boolean MAP_NO_RECURSE = false;
- private static final boolean MAP_RECURSE = true;
+ static final boolean MAP_NO_RECURSE = false;
+ static final boolean MAP_RECURSE = true;
// These animators are used to fade the children's outlines
private ObjectAnimator mChildrenOutlineFadeInAnimation;
@@ -4781,6 +4781,7 @@ public class Workspace extends SmoothPagedView
shortcutInfo.restore();
shortcutInfo.updateIcon(mIconCache);
shortcutInfo.title = appInfo.title.toString();
+ shortcutInfo.contentDescription = appInfo.contentDescription;
shortcut.applyFromShortcutInfo(shortcutInfo, mIconCache);
}
}
@@ -4857,6 +4858,18 @@ public class Workspace extends SmoothPagedView
});
}
+ public void removeAbandonedPromise(BubbleTextView abandonedIcon, UserHandleCompat user) {
+ if (abandonedIcon.getTag() != null && abandonedIcon.getTag() instanceof ShortcutInfo) {
+ final ShortcutInfo shortcut = (ShortcutInfo) abandonedIcon.getTag();
+ if (shortcut.isAbandoned()) {
+ HashSet<ComponentName> cns = new HashSet<ComponentName>(1);
+ cns.add(shortcut.getRestoredIntent().getComponent());
+ LauncherModel.deleteItemFromDatabase(mLauncher, shortcut);
+ removeItemsByComponentName(cns, user);
+ }
+ }
+ }
+
public void updatePackageState(final String pkgName, final int state) {
mapOverShortcuts(MAP_RECURSE, new ShortcutOperator() {
@Override
@@ -4864,7 +4877,8 @@ public class Workspace extends SmoothPagedView
if (info instanceof ShortcutInfo
&& ((ShortcutInfo) info).isPromiseFor(pkgName)
&& v instanceof BubbleTextView) {
- ((BubbleTextView)v).setState(state);
+ ((ShortcutInfo) info).setState(state);
+ ((BubbleTextView)v).applyState();
}
// process all the shortcuts
return false;
diff --git a/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java b/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java
index 3ba93ea91..90a4d1a1f 100644
--- a/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java
+++ b/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java
@@ -17,6 +17,7 @@
package com.android.launcher3.compat;
import android.content.ComponentName;
+import android.content.pm.ApplicationInfo;
import android.graphics.drawable.Drawable;
public abstract class LauncherActivityInfoCompat {
@@ -28,7 +29,7 @@ public abstract class LauncherActivityInfoCompat {
public abstract UserHandleCompat getUser();
public abstract CharSequence getLabel();
public abstract Drawable getIcon(int density);
- public abstract int getApplicationFlags();
+ public abstract ApplicationInfo getApplicationInfo();
public abstract long getFirstInstallTime();
public abstract Drawable getBadgedIcon(int density);
}
diff --git a/src/com/android/launcher3/compat/LauncherActivityInfoCompatV16.java b/src/com/android/launcher3/compat/LauncherActivityInfoCompatV16.java
index 052d4343e..1d41a6ff6 100644
--- a/src/com/android/launcher3/compat/LauncherActivityInfoCompatV16.java
+++ b/src/com/android/launcher3/compat/LauncherActivityInfoCompatV16.java
@@ -18,6 +18,7 @@ package com.android.launcher3.compat;
import android.content.ComponentName;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
@@ -75,8 +76,8 @@ public class LauncherActivityInfoCompatV16 extends LauncherActivityInfoCompat {
return d;
}
- public int getApplicationFlags() {
- return mActivityInfo.applicationInfo.flags;
+ public ApplicationInfo getApplicationInfo() {
+ return mActivityInfo.applicationInfo;
}
public long getFirstInstallTime() {
diff --git a/src/com/android/launcher3/compat/LauncherActivityInfoCompatVL.java b/src/com/android/launcher3/compat/LauncherActivityInfoCompatVL.java
index 76125bd6a..b52cf1de2 100644
--- a/src/com/android/launcher3/compat/LauncherActivityInfoCompatVL.java
+++ b/src/com/android/launcher3/compat/LauncherActivityInfoCompatVL.java
@@ -17,66 +17,44 @@
package com.android.launcher3.compat;
import android.content.ComponentName;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.LauncherActivityInfo;
import android.graphics.drawable.Drawable;
import android.os.UserHandle;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
public class LauncherActivityInfoCompatVL extends LauncherActivityInfoCompat {
- private Object mLauncherActivityInfo;
- private Class mLauncherActivityInfoClass;
- private Method mGetComponentName;
- private Method mGetUser;
- private Method mGetLabel;
- private Method mGetIcon;
- private Method mGetApplicationFlags;
- private Method mGetFirstInstallTime;
- private Method mGetBadgedIcon;
+ private LauncherActivityInfo mLauncherActivityInfo;
- LauncherActivityInfoCompatVL(Object launcherActivityInfo) {
+ LauncherActivityInfoCompatVL(LauncherActivityInfo launcherActivityInfo) {
super();
mLauncherActivityInfo = launcherActivityInfo;
- mLauncherActivityInfoClass = ReflectUtils.getClassForName(
- "android.content.pm.LauncherActivityInfo");
- mGetComponentName = ReflectUtils.getMethod(mLauncherActivityInfoClass, "getComponentName");
- mGetUser = ReflectUtils.getMethod(mLauncherActivityInfoClass, "getUser");
- mGetLabel = ReflectUtils.getMethod(mLauncherActivityInfoClass, "getLabel");
- mGetIcon = ReflectUtils.getMethod(mLauncherActivityInfoClass, "getIcon", int.class);
- mGetApplicationFlags = ReflectUtils.getMethod(mLauncherActivityInfoClass,
- "getApplicationFlags");
- mGetFirstInstallTime = ReflectUtils.getMethod(mLauncherActivityInfoClass,
- "getFirstInstallTime");
- mGetBadgedIcon = ReflectUtils.getMethod(mLauncherActivityInfoClass, "getBadgedIcon",
- int.class);
}
public ComponentName getComponentName() {
- return (ComponentName) ReflectUtils.invokeMethod(mLauncherActivityInfo, mGetComponentName);
+ return mLauncherActivityInfo.getComponentName();
}
public UserHandleCompat getUser() {
- return UserHandleCompat.fromUser((UserHandle) ReflectUtils.invokeMethod(
- mLauncherActivityInfo, mGetUser));
+ return UserHandleCompat.fromUser(mLauncherActivityInfo.getUser());
}
public CharSequence getLabel() {
- return (CharSequence) ReflectUtils.invokeMethod(mLauncherActivityInfo, mGetLabel);
+ return mLauncherActivityInfo.getLabel();
}
public Drawable getIcon(int density) {
- return (Drawable) ReflectUtils.invokeMethod(mLauncherActivityInfo, mGetIcon, density);
+ return mLauncherActivityInfo.getIcon(density);
}
- public int getApplicationFlags() {
- return (Integer) ReflectUtils.invokeMethod(mLauncherActivityInfo, mGetApplicationFlags);
+ public ApplicationInfo getApplicationInfo() {
+ return mLauncherActivityInfo.getApplicationInfo();
}
public long getFirstInstallTime() {
- return (Long) ReflectUtils.invokeMethod(mLauncherActivityInfo, mGetFirstInstallTime);
+ return mLauncherActivityInfo.getFirstInstallTime();
}
public Drawable getBadgedIcon(int density) {
- return (Drawable) ReflectUtils.invokeMethod(mLauncherActivityInfo, mGetBadgedIcon, density);
+ return mLauncherActivityInfo.getBadgedIcon(density);
}
}
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompat.java b/src/com/android/launcher3/compat/LauncherAppsCompat.java
index 069e3dea7..8d978d4a3 100644
--- a/src/com/android/launcher3/compat/LauncherAppsCompat.java
+++ b/src/com/android/launcher3/compat/LauncherAppsCompat.java
@@ -39,40 +39,42 @@ public abstract class LauncherAppsCompat {
public static final String ACTION_MANAGED_PROFILE_REMOVED =
"android.intent.action.MANAGED_PROFILE_REMOVED";
- public interface OnAppsChangedListenerCompat {
- void onPackageRemoved(UserHandleCompat user, String packageName);
- void onPackageAdded(UserHandleCompat user, String packageName);
- void onPackageChanged(UserHandleCompat user, String packageName);
- void onPackagesAvailable(UserHandleCompat user, String[] packageNames, boolean replacing);
- void onPackagesUnavailable(UserHandleCompat user, String[] packageNames, boolean replacing);
+ public interface OnAppsChangedCallbackCompat {
+ void onPackageRemoved(String packageName, UserHandleCompat user);
+ void onPackageAdded(String packageName, UserHandleCompat user);
+ void onPackageChanged(String packageName, UserHandleCompat user);
+ void onPackagesAvailable(String[] packageNames, UserHandleCompat user, boolean replacing);
+ void onPackagesUnavailable(String[] packageNames, UserHandleCompat user, boolean replacing);
}
protected LauncherAppsCompat() {
}
+ private static LauncherAppsCompat sInstance;
+ private static Object sInstanceLock = new Object();
+
public static LauncherAppsCompat getInstance(Context context) {
- // TODO change this to use api version once L gets an API number.
- if ("L".equals(Build.VERSION.CODENAME)) {
- Object launcherApps = context.getSystemService("launcherapps");
- if (launcherApps != null) {
- LauncherAppsCompatVL compat = LauncherAppsCompatVL.build(context, launcherApps);
- if (compat != null) {
- return compat;
+ synchronized (sInstanceLock) {
+ // TODO change this to use api version once L gets an API number.
+ if (sInstance == null) {
+ if ("L".equals(Build.VERSION.CODENAME)) {
+ sInstance = new LauncherAppsCompatVL(context);
+ } else {
+ sInstance = new LauncherAppsCompatV16(context);
}
}
+ return sInstance;
}
- // Pre L or lunacher apps service not running, or reflection failed to find something.
- return new LauncherAppsCompatV16(context);
}
public abstract List<LauncherActivityInfoCompat> getActivityList(String packageName,
UserHandleCompat user);
public abstract LauncherActivityInfoCompat resolveActivity(Intent intent,
UserHandleCompat user);
- public abstract void startActivityForProfile(ComponentName component, Rect sourceBounds,
- Bundle opts, UserHandleCompat user);
- public abstract void addOnAppsChangedListener(OnAppsChangedListenerCompat listener);
- public abstract void removeOnAppsChangedListener(OnAppsChangedListenerCompat listener);
+ public abstract void startActivityForProfile(ComponentName component, UserHandleCompat user,
+ Rect sourceBounds, Bundle opts);
+ public abstract void addOnAppsChangedCallback(OnAppsChangedCallbackCompat listener);
+ public abstract void removeOnAppsChangedCallback(OnAppsChangedCallbackCompat listener);
public abstract boolean isPackageEnabledForProfile(String packageName, UserHandleCompat user);
public abstract boolean isActivityEnabledForProfile(ComponentName component,
UserHandleCompat user);
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatV16.java b/src/com/android/launcher3/compat/LauncherAppsCompatV16.java
index c739eb9d2..de9f3a032 100644
--- a/src/com/android/launcher3/compat/LauncherAppsCompatV16.java
+++ b/src/com/android/launcher3/compat/LauncherAppsCompatV16.java
@@ -39,8 +39,8 @@ public class LauncherAppsCompatV16 extends LauncherAppsCompat {
private PackageManager mPm;
private Context mContext;
- private List<OnAppsChangedListenerCompat> mListeners
- = new ArrayList<OnAppsChangedListenerCompat>();
+ private List<OnAppsChangedCallbackCompat> mCallbacks
+ = new ArrayList<OnAppsChangedCallbackCompat>();
private PackageMonitor mPackageMonitor;
LauncherAppsCompatV16(Context context) {
@@ -71,8 +71,8 @@ public class LauncherAppsCompatV16 extends LauncherAppsCompat {
return null;
}
- public void startActivityForProfile(ComponentName component, Rect sourceBounds,
- Bundle opts, UserHandleCompat user) {
+ public void startActivityForProfile(ComponentName component, UserHandleCompat user,
+ Rect sourceBounds, Bundle opts) {
Intent launchIntent = new Intent(Intent.ACTION_MAIN);
launchIntent.addCategory(Intent.CATEGORY_LAUNCHER);
launchIntent.setComponent(component);
@@ -81,18 +81,18 @@ public class LauncherAppsCompatV16 extends LauncherAppsCompat {
mContext.startActivity(launchIntent, opts);
}
- public synchronized void addOnAppsChangedListener(OnAppsChangedListenerCompat listener) {
- if (listener != null && !mListeners.contains(listener)) {
- mListeners.add(listener);
- if (mListeners.size() == 1) {
+ public synchronized void addOnAppsChangedCallback(OnAppsChangedCallbackCompat callback) {
+ if (callback != null && !mCallbacks.contains(callback)) {
+ mCallbacks.add(callback);
+ if (mCallbacks.size() == 1) {
registerForPackageIntents();
}
}
}
- public synchronized void removeOnAppsChangedListener(OnAppsChangedListenerCompat listener) {
- mListeners.remove(listener);
- if (mListeners.size() == 0) {
+ public synchronized void removeOnAppsChangedCallback(OnAppsChangedCallbackCompat callback) {
+ mCallbacks.remove(callback);
+ if (mCallbacks.size() == 0) {
unregisterForPackageIntents();
}
}
@@ -131,8 +131,8 @@ public class LauncherAppsCompatV16 extends LauncherAppsCompat {
mContext.registerReceiver(mPackageMonitor, filter);
}
- private synchronized List<OnAppsChangedListenerCompat> getListeners() {
- return new ArrayList<OnAppsChangedListenerCompat>(mListeners);
+ private synchronized List<OnAppsChangedCallbackCompat> getCallbacks() {
+ return new ArrayList<OnAppsChangedCallbackCompat>(mCallbacks);
}
private class PackageMonitor extends BroadcastReceiver {
@@ -151,39 +151,44 @@ public class LauncherAppsCompatV16 extends LauncherAppsCompat {
return;
}
if (Intent.ACTION_PACKAGE_CHANGED.equals(action)) {
- for (OnAppsChangedListenerCompat listener : getListeners()) {
- listener.onPackageChanged(user, packageName);
+ for (OnAppsChangedCallbackCompat callback : getCallbacks()) {
+ callback.onPackageChanged(packageName, user);
}
} else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) {
if (!replacing) {
- for (OnAppsChangedListenerCompat listener : getListeners()) {
- listener.onPackageRemoved(user, packageName);
+ for (OnAppsChangedCallbackCompat callback : getCallbacks()) {
+ callback.onPackageRemoved(packageName, user);
}
}
// else, we are replacing the package, so a PACKAGE_ADDED will be sent
// later, we will update the package at this time
} else if (Intent.ACTION_PACKAGE_ADDED.equals(action)) {
if (!replacing) {
- for (OnAppsChangedListenerCompat listener : getListeners()) {
- listener.onPackageAdded(user, packageName);
+ for (OnAppsChangedCallbackCompat callback : getCallbacks()) {
+ callback.onPackageAdded(packageName, user);
}
} else {
- for (OnAppsChangedListenerCompat listener : getListeners()) {
- listener.onPackageChanged(user, packageName);
+ for (OnAppsChangedCallbackCompat callback : getCallbacks()) {
+ callback.onPackageChanged(packageName, user);
}
}
}
} else if (Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE.equals(action)) {
- final boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
+ // EXTRA_REPLACING is available Kitkat onwards. For lower devices, it is broadcasted
+ // when moving a package or mounting/un-mounting external storage. Assume that
+ // it is a replacing operation.
+ final boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING,
+ Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT);
String[] packages = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
- for (OnAppsChangedListenerCompat listener : getListeners()) {
- listener.onPackagesAvailable(user, packages, replacing);
+ for (OnAppsChangedCallbackCompat callback : getCallbacks()) {
+ callback.onPackagesAvailable(packages, user, replacing);
}
} else if (Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action)) {
- final boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
+ final boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING,
+ Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT);
String[] packages = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
- for (OnAppsChangedListenerCompat listener : getListeners()) {
- listener.onPackagesUnavailable(user, packages, replacing);
+ for (OnAppsChangedCallbackCompat callback : getCallbacks()) {
+ callback.onPackagesUnavailable(packages, user, replacing);
}
}
}
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java
index 21f2659ba..ca9b67146 100644
--- a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java
+++ b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java
@@ -19,99 +19,48 @@ package com.android.launcher3.compat;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.LauncherActivityInfo;
+import android.content.pm.LauncherApps;
import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
import android.os.UserHandle;
-import java.lang.reflect.InvocationHandler;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.lang.reflect.Proxy;
-import java.lang.reflect.Method;
-
public class LauncherAppsCompatVL extends LauncherAppsCompat {
- private Object mLauncherApps;
- private Class mLauncherAppsClass;
- private Class mListenerClass;
- private Method mGetActivityList;
- private Method mResolveActivity;
- private Method mStartActivityForProfile;
- private Method mAddOnAppsChangedListener;
- private Method mRemoveOnAppsChangedListener;
- private Method mIsPackageEnabledForProfile;
- private Method mIsActivityEnabledForProfile;
-
- private Map<OnAppsChangedListenerCompat, Object> mListeners
- = new HashMap<OnAppsChangedListenerCompat, Object>();
-
- static LauncherAppsCompatVL build(Context context, Object launcherApps) {
- LauncherAppsCompatVL compat = new LauncherAppsCompatVL(context, launcherApps);
-
- compat.mListenerClass = ReflectUtils.getClassForName(
- "android.content.pm.LauncherApps$OnAppsChangedListener");
- compat.mLauncherAppsClass = ReflectUtils.getClassForName("android.content.pm.LauncherApps");
-
- compat.mGetActivityList = ReflectUtils.getMethod(compat.mLauncherAppsClass,
- "getActivityList",
- String.class, UserHandle.class);
- compat.mResolveActivity = ReflectUtils.getMethod(compat.mLauncherAppsClass,
- "resolveActivity",
- Intent.class, UserHandle.class);
- compat.mStartActivityForProfile = ReflectUtils.getMethod(compat.mLauncherAppsClass,
- "startActivityForProfile",
- ComponentName.class, Rect.class, Bundle.class, UserHandle.class);
- compat.mAddOnAppsChangedListener = ReflectUtils.getMethod(compat.mLauncherAppsClass,
- "addOnAppsChangedListener", compat.mListenerClass);
- compat.mRemoveOnAppsChangedListener = ReflectUtils.getMethod(compat.mLauncherAppsClass,
- "removeOnAppsChangedListener", compat.mListenerClass);
- compat.mIsPackageEnabledForProfile = ReflectUtils.getMethod(compat.mLauncherAppsClass,
- "isPackageEnabledForProfile", String.class, UserHandle.class);
- compat.mIsActivityEnabledForProfile = ReflectUtils.getMethod(compat.mLauncherAppsClass,
- "isActivityEnabledForProfile", ComponentName.class, UserHandle.class);
-
- if (compat.mListenerClass != null
- && compat.mLauncherAppsClass != null
- && compat.mGetActivityList != null
- && compat.mResolveActivity != null
- && compat.mStartActivityForProfile != null
- && compat.mAddOnAppsChangedListener != null
- && compat.mRemoveOnAppsChangedListener != null
- && compat.mIsPackageEnabledForProfile != null
- && compat.mIsActivityEnabledForProfile != null) {
- return compat;
- }
- return null;
- }
+ private LauncherApps mLauncherApps;
- private LauncherAppsCompatVL(Context context, Object launcherApps) {
+ private Map<OnAppsChangedCallbackCompat, WrappedCallback> mCallbacks
+ = new HashMap<OnAppsChangedCallbackCompat, WrappedCallback>();
+
+ LauncherAppsCompatVL(Context context) {
super();
- mLauncherApps = launcherApps;
+ mLauncherApps = (LauncherApps) context.getSystemService("launcherapps");
}
public List<LauncherActivityInfoCompat> getActivityList(String packageName,
UserHandleCompat user) {
- List<Object> list = (List<Object>) ReflectUtils.invokeMethod(mLauncherApps,
- mGetActivityList, packageName, user.getUser());
+ List<LauncherActivityInfo> list = mLauncherApps.getActivityList(packageName,
+ user.getUser());
if (list.size() == 0) {
return Collections.EMPTY_LIST;
}
ArrayList<LauncherActivityInfoCompat> compatList =
new ArrayList<LauncherActivityInfoCompat>(list.size());
- for (Object info : list) {
+ for (LauncherActivityInfo info : list) {
compatList.add(new LauncherActivityInfoCompatVL(info));
}
return compatList;
}
public LauncherActivityInfoCompat resolveActivity(Intent intent, UserHandleCompat user) {
- Object activity = ReflectUtils.invokeMethod(mLauncherApps, mResolveActivity,
- intent, user.getUser());
+ LauncherActivityInfo activity = mLauncherApps.resolveActivity(intent, user.getUser());
if (activity != null) {
return new LauncherActivityInfoCompatVL(activity);
} else {
@@ -119,89 +68,64 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat {
}
}
- public void startActivityForProfile(ComponentName component, Rect sourceBounds,
- Bundle opts, UserHandleCompat user) {
- ReflectUtils.invokeMethod(mLauncherApps, mStartActivityForProfile,
- component, sourceBounds, opts, user.getUser());
+ public void startActivityForProfile(ComponentName component, UserHandleCompat user,
+ Rect sourceBounds, Bundle opts) {
+ mLauncherApps.startActivityForProfile(component, user.getUser(), sourceBounds, opts);
}
- public void addOnAppsChangedListener(LauncherAppsCompat.OnAppsChangedListenerCompat listener) {
- Object wrappedListener = Proxy.newProxyInstance(mListenerClass.getClassLoader(),
- new Class[]{mListenerClass}, new WrappedListener(listener));
- synchronized (mListeners) {
- mListeners.put(listener, wrappedListener);
+ public void addOnAppsChangedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) {
+ WrappedCallback wrappedCallback = new WrappedCallback(callback);
+ synchronized (mCallbacks) {
+ mCallbacks.put(callback, wrappedCallback);
}
- ReflectUtils.invokeMethod(mLauncherApps, mAddOnAppsChangedListener, wrappedListener);
+ mLauncherApps.addOnAppsChangedCallback(wrappedCallback);
}
- public void removeOnAppsChangedListener(
- LauncherAppsCompat.OnAppsChangedListenerCompat listener) {
- Object wrappedListener = null;
- synchronized (mListeners) {
- wrappedListener = mListeners.remove(listener);
+ public void removeOnAppsChangedCallback(
+ LauncherAppsCompat.OnAppsChangedCallbackCompat callback) {
+ WrappedCallback wrappedCallback = null;
+ synchronized (mCallbacks) {
+ wrappedCallback = mCallbacks.remove(callback);
}
- if (wrappedListener != null) {
- ReflectUtils.invokeMethod(mLauncherApps, mRemoveOnAppsChangedListener, wrappedListener);
+ if (wrappedCallback != null) {
+ mLauncherApps.removeOnAppsChangedCallback(wrappedCallback);
}
}
public boolean isPackageEnabledForProfile(String packageName, UserHandleCompat user) {
- return (Boolean) ReflectUtils.invokeMethod(mLauncherApps, mIsPackageEnabledForProfile,
- packageName, user.getUser());
+ return mLauncherApps.isPackageEnabledForProfile(packageName, user.getUser());
}
public boolean isActivityEnabledForProfile(ComponentName component, UserHandleCompat user) {
- return (Boolean) ReflectUtils.invokeMethod(mLauncherApps, mIsActivityEnabledForProfile,
- component, user.getUser());
+ return mLauncherApps.isActivityEnabledForProfile(component, user.getUser());
}
- private static class WrappedListener implements InvocationHandler {
- private LauncherAppsCompat.OnAppsChangedListenerCompat mListener;
-
- public WrappedListener(LauncherAppsCompat.OnAppsChangedListenerCompat listener) {
- mListener = listener;
- }
+ private static class WrappedCallback extends LauncherApps.OnAppsChangedCallback {
+ private LauncherAppsCompat.OnAppsChangedCallbackCompat mCallback;
- public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {
- try {
- String methodName = m.getName();
- if ("onPackageRemoved".equals(methodName)) {
- onPackageRemoved((UserHandle) args[0], (String) args[1]);
- } else if ("onPackageAdded".equals(methodName)) {
- onPackageAdded((UserHandle) args[0], (String) args[1]);
- } else if ("onPackageChanged".equals(methodName)) {
- onPackageChanged((UserHandle) args[0], (String) args[1]);
- } else if ("onPackagesAvailable".equals(methodName)) {
- onPackagesAvailable((UserHandle) args[0], (String []) args[1],
- (Boolean) args[2]);
- } else if ("onPackagesUnavailable".equals(methodName)) {
- onPackagesUnavailable((UserHandle) args[0], (String []) args[1],
- (Boolean) args[2]);
- }
- } finally {
- return null;
- }
+ public WrappedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) {
+ mCallback = callback;
}
- public void onPackageRemoved(UserHandle user, String packageName) {
- mListener.onPackageRemoved(UserHandleCompat.fromUser(user), packageName);
+ public void onPackageRemoved(String packageName, UserHandle user) {
+ mCallback.onPackageRemoved(packageName, UserHandleCompat.fromUser(user));
}
- public void onPackageAdded(UserHandle user, String packageName) {
- mListener.onPackageAdded(UserHandleCompat.fromUser(user), packageName);
+ public void onPackageAdded(String packageName, UserHandle user) {
+ mCallback.onPackageAdded(packageName, UserHandleCompat.fromUser(user));
}
- public void onPackageChanged(UserHandle user, String packageName) {
- mListener.onPackageChanged(UserHandleCompat.fromUser(user), packageName);
+ public void onPackageChanged(String packageName, UserHandle user) {
+ mCallback.onPackageChanged(packageName, UserHandleCompat.fromUser(user));
}
- public void onPackagesAvailable(UserHandle user, String[] packageNames, boolean replacing) {
- mListener.onPackagesAvailable(UserHandleCompat.fromUser(user), packageNames, replacing);
+ public void onPackagesAvailable(String[] packageNames, UserHandle user, boolean replacing) {
+ mCallback.onPackagesAvailable(packageNames, UserHandleCompat.fromUser(user), replacing);
}
- public void onPackagesUnavailable(UserHandle user, String[] packageNames,
+ public void onPackagesUnavailable(String[] packageNames, UserHandle user,
boolean replacing) {
- mListener.onPackagesUnavailable(UserHandleCompat.fromUser(user), packageNames,
+ mCallback.onPackagesUnavailable(packageNames, UserHandleCompat.fromUser(user),
replacing);
}
}
diff --git a/src/com/android/launcher3/compat/ReflectUtils.java b/src/com/android/launcher3/compat/ReflectUtils.java
deleted file mode 100644
index e1b8a1f95..000000000
--- a/src/com/android/launcher3/compat/ReflectUtils.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2014 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.compat;
-
-import android.util.Log;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-public class ReflectUtils {
- private static final String TAG = "LauncherReflect";
-
- public static Class getClassForName(String className) {
- try {
- return Class.forName(className);
- } catch (ClassNotFoundException e) {
- Log.e(TAG, "Couldn't find class " + className, e);
- return null;
- }
- }
-
- public static Method getMethod(Class clazz, String method) {
- try {
- return clazz.getMethod(method);
- } catch (NoSuchMethodException e) {
- Log.e(TAG, "Couldn't find methid " + clazz.getName() + " " + method, e);
- return null;
- }
- }
-
- public static Method getMethod(Class clazz, String method, Class param1) {
- try {
- return clazz.getMethod(method, param1);
- } catch (NoSuchMethodException e) {
- Log.e(TAG, "Couldn't find methid " + clazz.getName() + " " + method, e);
- return null;
- }
- }
-
- public static Method getMethod(Class clazz, String method, Class param1, Class param2) {
- try {
- return clazz.getMethod(method, param1, param2);
- } catch (NoSuchMethodException e) {
- Log.e(TAG, "Couldn't find methid " + clazz.getName() + " " + method, e);
- return null;
- }
- }
-
- public static Method getMethod(Class clazz, String method, Class param1, Class param2,
- Class param3) {
- try {
- return clazz.getMethod(method, param1, param2, param3);
- } catch (NoSuchMethodException e) {
- Log.e(TAG, "Couldn't find methid " + clazz.getName() + " " + method, e);
- return null;
- }
- }
-
- public static Method getMethod(Class clazz, String method, Class param1, Class param2,
- Class param3, Class param4) {
- try {
- return clazz.getMethod(method, param1, param2, param3, param4);
- } catch (NoSuchMethodException e) {
- Log.e(TAG, "Couldn't find methid " + clazz.getName() + " " + method, e);
- return null;
- }
- }
-
- public static Object invokeMethod(Object object, Method method) {
- try {
- return method.invoke(object);
- } catch (SecurityException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (IllegalArgumentException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (IllegalAccessException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (InvocationTargetException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- }
- return null;
- }
-
- public static Object invokeMethod(Object object, Method method, Object param1) {
- try {
- return method.invoke(object, param1);
- } catch (SecurityException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (IllegalArgumentException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (IllegalAccessException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (InvocationTargetException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- }
- return null;
- }
-
- public static Object invokeMethod(Object object, Method method, Object param1, Object param2) {
- try {
- return method.invoke(object, param1, param2);
- } catch (SecurityException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (IllegalArgumentException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (IllegalAccessException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (InvocationTargetException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- }
- return null;
- }
-
- public static Object invokeMethod(Object object, Method method, Object param1, Object param2,
- Object param3) {
- try {
- return method.invoke(object, param1, param2, param3);
- } catch (SecurityException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (IllegalArgumentException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (IllegalAccessException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (InvocationTargetException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- }
- return null;
- }
-
- public static Object invokeMethod(Object object, Method method, Object param1, Object param2,
- Object param3, Object param4) {
- try {
- return method.invoke(object, param1, param2, param3, param4);
- } catch (SecurityException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (IllegalArgumentException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (IllegalAccessException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- } catch (InvocationTargetException e) {
- Log.e(TAG, "Couldn't invoke method " + method, e);
- }
- return null;
- }
-} \ No newline at end of file
diff --git a/src/com/android/launcher3/compat/UserManagerCompat.java b/src/com/android/launcher3/compat/UserManagerCompat.java
index 256e04a7b..c10a74307 100644
--- a/src/com/android/launcher3/compat/UserManagerCompat.java
+++ b/src/com/android/launcher3/compat/UserManagerCompat.java
@@ -41,4 +41,5 @@ public abstract class UserManagerCompat {
public abstract long getSerialNumberForUser(UserHandleCompat user);
public abstract UserHandleCompat getUserForSerialNumber(long serialNumber);
public abstract Drawable getBadgedDrawableForUser(Drawable unbadged, UserHandleCompat user);
+ public abstract String getBadgedLabelForUser(String label, UserHandleCompat user);
}
diff --git a/src/com/android/launcher3/compat/UserManagerCompatV16.java b/src/com/android/launcher3/compat/UserManagerCompatV16.java
index 2009e4e27..03dd0972c 100644
--- a/src/com/android/launcher3/compat/UserManagerCompatV16.java
+++ b/src/com/android/launcher3/compat/UserManagerCompatV16.java
@@ -44,4 +44,8 @@ public class UserManagerCompatV16 extends UserManagerCompat {
public long getSerialNumberForUser(UserHandleCompat user) {
return 0;
}
+
+ public String getBadgedLabelForUser(String label, UserHandleCompat user) {
+ return label;
+ }
}
diff --git a/src/com/android/launcher3/compat/UserManagerCompatVL.java b/src/com/android/launcher3/compat/UserManagerCompatVL.java
index 8d3ca8577..e071a8f71 100644
--- a/src/com/android/launcher3/compat/UserManagerCompatVL.java
+++ b/src/com/android/launcher3/compat/UserManagerCompatVL.java
@@ -22,9 +22,8 @@ import android.graphics.drawable.Drawable;
import android.os.UserHandle;
import android.os.UserManager;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
public class UserManagerCompatVL extends UserManagerCompatV17 {
@@ -34,35 +33,27 @@ public class UserManagerCompatVL extends UserManagerCompatV17 {
}
public List<UserHandleCompat> getUserProfiles() {
- Method method = ReflectUtils.getMethod(mUserManager.getClass(), "getUserProfiles");
- if (method != null) {
- List<UserHandle> users = (List<UserHandle>) ReflectUtils.invokeMethod(
- mUserManager, method);
- if (users != null) {
- ArrayList<UserHandleCompat> compatUsers = new ArrayList<UserHandleCompat>(
- users.size());
- for (UserHandle user : users) {
- compatUsers.add(UserHandleCompat.fromUser(user));
- }
- return compatUsers;
- }
+ List<UserHandle> users = mUserManager.getUserProfiles();
+ if (users == null) {
+ return Collections.EMPTY_LIST;
}
- // Fall back to non L version.
- return super.getUserProfiles();
+ ArrayList<UserHandleCompat> compatUsers = new ArrayList<UserHandleCompat>(
+ users.size());
+ for (UserHandle user : users) {
+ compatUsers.add(UserHandleCompat.fromUser(user));
+ }
+ return compatUsers;
}
public Drawable getBadgedDrawableForUser(Drawable unbadged, UserHandleCompat user) {
- Method method = ReflectUtils.getMethod(mUserManager.getClass(), "getBadgedDrawableForUser",
- Drawable.class, UserHandle.class);
- if (method != null) {
- Drawable d = (Drawable) ReflectUtils.invokeMethod(mUserManager, method, unbadged,
- user.getUser());
- if (d != null) {
- return d;
- }
+ return mUserManager.getBadgedDrawableForUser(unbadged, user.getUser());
+ }
+
+ public String getBadgedLabelForUser(String label, UserHandleCompat user) {
+ if (user == null) {
+ return label;
}
- // Fall back to non L version.
- return super.getBadgedDrawableForUser(unbadged, user);
+ return mUserManager.getBadgedLabelForUser(label, user.getUser());
}
}