diff options
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 Binary files differindex e7677d5d2..4fe3bf0e6 100644 --- a/res/drawable-hdpi/ic_allapps.png +++ b/res/drawable-hdpi/ic_allapps.png diff --git a/res/drawable-hdpi/ic_allapps_l.png b/res/drawable-hdpi/ic_allapps_l.png Binary files differdeleted file mode 100644 index 4fe3bf0e6..000000000 --- a/res/drawable-hdpi/ic_allapps_l.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_allapps_pressed.png b/res/drawable-hdpi/ic_allapps_pressed.png Binary files differindex 863eebaa5..af49dbb41 100644 --- a/res/drawable-hdpi/ic_allapps_pressed.png +++ b/res/drawable-hdpi/ic_allapps_pressed.png diff --git a/res/drawable-hdpi/ic_allapps_pressed_l.png b/res/drawable-hdpi/ic_allapps_pressed_l.png Binary files differdeleted file mode 100644 index af49dbb41..000000000 --- a/res/drawable-hdpi/ic_allapps_pressed_l.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_setting.png b/res/drawable-hdpi/ic_setting.png Binary files differindex 3f5bc43fd..1c12a5b80 100644 --- a/res/drawable-hdpi/ic_setting.png +++ b/res/drawable-hdpi/ic_setting.png diff --git a/res/drawable-hdpi/ic_setting_l.png b/res/drawable-hdpi/ic_setting_l.png Binary files differdeleted file mode 100644 index 1c12a5b80..000000000 --- a/res/drawable-hdpi/ic_setting_l.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_setting_pressed.png b/res/drawable-hdpi/ic_setting_pressed.png Binary files differindex 9201064cf..d5b5ca204 100644 --- a/res/drawable-hdpi/ic_setting_pressed.png +++ b/res/drawable-hdpi/ic_setting_pressed.png diff --git a/res/drawable-hdpi/ic_setting_pressed_l.png b/res/drawable-hdpi/ic_setting_pressed_l.png Binary files differdeleted file mode 100644 index d5b5ca204..000000000 --- a/res/drawable-hdpi/ic_setting_pressed_l.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_wallpaper.png b/res/drawable-hdpi/ic_wallpaper.png Binary files differindex 5e5d1186b..34d594336 100644 --- a/res/drawable-hdpi/ic_wallpaper.png +++ b/res/drawable-hdpi/ic_wallpaper.png diff --git a/res/drawable-hdpi/ic_wallpaper_l.png b/res/drawable-hdpi/ic_wallpaper_l.png Binary files differdeleted file mode 100644 index 34d594336..000000000 --- a/res/drawable-hdpi/ic_wallpaper_l.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_wallpaper_pressed.png b/res/drawable-hdpi/ic_wallpaper_pressed.png Binary files differindex d104e5770..1588ce717 100644 --- a/res/drawable-hdpi/ic_wallpaper_pressed.png +++ b/res/drawable-hdpi/ic_wallpaper_pressed.png diff --git a/res/drawable-hdpi/ic_wallpaper_pressed_l.png b/res/drawable-hdpi/ic_wallpaper_pressed_l.png Binary files differdeleted file mode 100644 index 1588ce717..000000000 --- a/res/drawable-hdpi/ic_wallpaper_pressed_l.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_widget.png b/res/drawable-hdpi/ic_widget.png Binary files differindex 8c57af0de..ed7e1ca0d 100644 --- a/res/drawable-hdpi/ic_widget.png +++ b/res/drawable-hdpi/ic_widget.png diff --git a/res/drawable-hdpi/ic_widget_l.png b/res/drawable-hdpi/ic_widget_l.png Binary files differdeleted file mode 100644 index ed7e1ca0d..000000000 --- a/res/drawable-hdpi/ic_widget_l.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_widget_pressed.png b/res/drawable-hdpi/ic_widget_pressed.png Binary files differindex 081f9f9ce..19d6feded 100644 --- a/res/drawable-hdpi/ic_widget_pressed.png +++ b/res/drawable-hdpi/ic_widget_pressed.png diff --git a/res/drawable-hdpi/ic_widget_pressed_l.png b/res/drawable-hdpi/ic_widget_pressed_l.png Binary files differdeleted file mode 100644 index 19d6feded..000000000 --- a/res/drawable-hdpi/ic_widget_pressed_l.png +++ /dev/null diff --git a/res/drawable-hdpi/quantum_panel.9.png b/res/drawable-hdpi/quantum_panel.9.png Binary files differnew file mode 100644 index 000000000..ae625bead --- /dev/null +++ b/res/drawable-hdpi/quantum_panel.9.png diff --git a/res/drawable-hdpi/screenpanel.9.png b/res/drawable-hdpi/screenpanel.9.png Binary files differindex 36e7dfd9c..eed0f2cbb 100644 --- a/res/drawable-hdpi/screenpanel.9.png +++ b/res/drawable-hdpi/screenpanel.9.png diff --git a/res/drawable-hdpi/screenpanel_hover.9.png b/res/drawable-hdpi/screenpanel_hover.9.png Binary files differindex 0fed7c9d8..2cea8a471 100644 --- a/res/drawable-hdpi/screenpanel_hover.9.png +++ b/res/drawable-hdpi/screenpanel_hover.9.png diff --git a/res/drawable-hdpi/screenpanel_hover_l.9.png b/res/drawable-hdpi/screenpanel_hover_l.9.png Binary files differdeleted file mode 100644 index 2cea8a471..000000000 --- a/res/drawable-hdpi/screenpanel_hover_l.9.png +++ /dev/null diff --git a/res/drawable-hdpi/screenpanel_l.9.png b/res/drawable-hdpi/screenpanel_l.9.png Binary files differdeleted file mode 100644 index eed0f2cbb..000000000 --- a/res/drawable-hdpi/screenpanel_l.9.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_allapps.png b/res/drawable-mdpi/ic_allapps.png Binary files differindex e0fd9c07a..09cd82af9 100644 --- a/res/drawable-mdpi/ic_allapps.png +++ b/res/drawable-mdpi/ic_allapps.png diff --git a/res/drawable-mdpi/ic_allapps_l.png b/res/drawable-mdpi/ic_allapps_l.png Binary files differdeleted file mode 100644 index 09cd82af9..000000000 --- a/res/drawable-mdpi/ic_allapps_l.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_allapps_pressed.png b/res/drawable-mdpi/ic_allapps_pressed.png Binary files differindex 3bd87b187..d7ea96f61 100644 --- a/res/drawable-mdpi/ic_allapps_pressed.png +++ b/res/drawable-mdpi/ic_allapps_pressed.png diff --git a/res/drawable-mdpi/ic_allapps_pressed_l.png b/res/drawable-mdpi/ic_allapps_pressed_l.png Binary files differdeleted file mode 100644 index d7ea96f61..000000000 --- a/res/drawable-mdpi/ic_allapps_pressed_l.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_setting.png b/res/drawable-mdpi/ic_setting.png Binary files differindex 1e7645953..c614e9183 100644 --- a/res/drawable-mdpi/ic_setting.png +++ b/res/drawable-mdpi/ic_setting.png diff --git a/res/drawable-mdpi/ic_setting_l.png b/res/drawable-mdpi/ic_setting_l.png Binary files differdeleted file mode 100644 index c614e9183..000000000 --- a/res/drawable-mdpi/ic_setting_l.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_setting_pressed.png b/res/drawable-mdpi/ic_setting_pressed.png Binary files differindex d7aca18e1..61e574ad1 100644 --- a/res/drawable-mdpi/ic_setting_pressed.png +++ b/res/drawable-mdpi/ic_setting_pressed.png diff --git a/res/drawable-mdpi/ic_setting_pressed_l.png b/res/drawable-mdpi/ic_setting_pressed_l.png Binary files differdeleted file mode 100644 index 61e574ad1..000000000 --- a/res/drawable-mdpi/ic_setting_pressed_l.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_wallpaper.png b/res/drawable-mdpi/ic_wallpaper.png Binary files differindex 333a206e2..8f2a00a3f 100644 --- a/res/drawable-mdpi/ic_wallpaper.png +++ b/res/drawable-mdpi/ic_wallpaper.png diff --git a/res/drawable-mdpi/ic_wallpaper_l.png b/res/drawable-mdpi/ic_wallpaper_l.png Binary files differdeleted file mode 100644 index 8f2a00a3f..000000000 --- a/res/drawable-mdpi/ic_wallpaper_l.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_wallpaper_pressed.png b/res/drawable-mdpi/ic_wallpaper_pressed.png Binary files differindex 273c48b3a..aa598c3e2 100644 --- a/res/drawable-mdpi/ic_wallpaper_pressed.png +++ b/res/drawable-mdpi/ic_wallpaper_pressed.png diff --git a/res/drawable-mdpi/ic_wallpaper_pressed_l.png b/res/drawable-mdpi/ic_wallpaper_pressed_l.png Binary files differdeleted file mode 100644 index aa598c3e2..000000000 --- a/res/drawable-mdpi/ic_wallpaper_pressed_l.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_widget.png b/res/drawable-mdpi/ic_widget.png Binary files differindex 5f974c28c..1bd393503 100644 --- a/res/drawable-mdpi/ic_widget.png +++ b/res/drawable-mdpi/ic_widget.png diff --git a/res/drawable-mdpi/ic_widget_l.png b/res/drawable-mdpi/ic_widget_l.png Binary files differdeleted file mode 100644 index 1bd393503..000000000 --- a/res/drawable-mdpi/ic_widget_l.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_widget_pressed.png b/res/drawable-mdpi/ic_widget_pressed.png Binary files differindex 0a3e8838f..9b690d99b 100644 --- a/res/drawable-mdpi/ic_widget_pressed.png +++ b/res/drawable-mdpi/ic_widget_pressed.png diff --git a/res/drawable-mdpi/ic_widget_pressed_l.png b/res/drawable-mdpi/ic_widget_pressed_l.png Binary files differdeleted file mode 100644 index 9b690d99b..000000000 --- a/res/drawable-mdpi/ic_widget_pressed_l.png +++ /dev/null diff --git a/res/drawable-mdpi/quantum_panel.9.png b/res/drawable-mdpi/quantum_panel.9.png Binary files differnew file mode 100644 index 000000000..1f9cd1a18 --- /dev/null +++ b/res/drawable-mdpi/quantum_panel.9.png diff --git a/res/drawable-mdpi/screenpanel.9.png b/res/drawable-mdpi/screenpanel.9.png Binary files differindex 4de3017f5..6f8b7e6a1 100644 --- a/res/drawable-mdpi/screenpanel.9.png +++ b/res/drawable-mdpi/screenpanel.9.png diff --git a/res/drawable-mdpi/screenpanel_hover.9.png b/res/drawable-mdpi/screenpanel_hover.9.png Binary files differindex 7dd885860..8a94984f5 100644 --- a/res/drawable-mdpi/screenpanel_hover.9.png +++ b/res/drawable-mdpi/screenpanel_hover.9.png diff --git a/res/drawable-mdpi/screenpanel_hover_l.9.png b/res/drawable-mdpi/screenpanel_hover_l.9.png Binary files differdeleted file mode 100644 index 8a94984f5..000000000 --- a/res/drawable-mdpi/screenpanel_hover_l.9.png +++ /dev/null diff --git a/res/drawable-mdpi/screenpanel_l.9.png b/res/drawable-mdpi/screenpanel_l.9.png Binary files differdeleted file mode 100644 index 6f8b7e6a1..000000000 --- a/res/drawable-mdpi/screenpanel_l.9.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_allapps.png b/res/drawable-xhdpi/ic_allapps.png Binary files differindex f71964c2d..eff3bea5d 100644 --- a/res/drawable-xhdpi/ic_allapps.png +++ b/res/drawable-xhdpi/ic_allapps.png diff --git a/res/drawable-xhdpi/ic_allapps_l.png b/res/drawable-xhdpi/ic_allapps_l.png Binary files differdeleted file mode 100644 index eff3bea5d..000000000 --- a/res/drawable-xhdpi/ic_allapps_l.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_allapps_pressed.png b/res/drawable-xhdpi/ic_allapps_pressed.png Binary files differindex d678f027e..15a8aa964 100644 --- a/res/drawable-xhdpi/ic_allapps_pressed.png +++ b/res/drawable-xhdpi/ic_allapps_pressed.png diff --git a/res/drawable-xhdpi/ic_allapps_pressed_l.png b/res/drawable-xhdpi/ic_allapps_pressed_l.png Binary files differdeleted file mode 100644 index 15a8aa964..000000000 --- a/res/drawable-xhdpi/ic_allapps_pressed_l.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_setting.png b/res/drawable-xhdpi/ic_setting.png Binary files differindex 6f06bcfd9..3a7310b7c 100644 --- a/res/drawable-xhdpi/ic_setting.png +++ b/res/drawable-xhdpi/ic_setting.png diff --git a/res/drawable-xhdpi/ic_setting_l.png b/res/drawable-xhdpi/ic_setting_l.png Binary files differdeleted file mode 100644 index 3a7310b7c..000000000 --- a/res/drawable-xhdpi/ic_setting_l.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_setting_pressed.png b/res/drawable-xhdpi/ic_setting_pressed.png Binary files differindex bca8ccdd0..005d49c8c 100644 --- a/res/drawable-xhdpi/ic_setting_pressed.png +++ b/res/drawable-xhdpi/ic_setting_pressed.png diff --git a/res/drawable-xhdpi/ic_setting_pressed_l.png b/res/drawable-xhdpi/ic_setting_pressed_l.png Binary files differdeleted file mode 100644 index 005d49c8c..000000000 --- a/res/drawable-xhdpi/ic_setting_pressed_l.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_wallpaper.png b/res/drawable-xhdpi/ic_wallpaper.png Binary files differindex 41dc000fd..d2bf246ee 100644 --- a/res/drawable-xhdpi/ic_wallpaper.png +++ b/res/drawable-xhdpi/ic_wallpaper.png diff --git a/res/drawable-xhdpi/ic_wallpaper_l.png b/res/drawable-xhdpi/ic_wallpaper_l.png Binary files differdeleted file mode 100644 index d2bf246ee..000000000 --- a/res/drawable-xhdpi/ic_wallpaper_l.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_wallpaper_pressed.png b/res/drawable-xhdpi/ic_wallpaper_pressed.png Binary files differindex ffff0531d..5a9b84d7d 100644 --- a/res/drawable-xhdpi/ic_wallpaper_pressed.png +++ b/res/drawable-xhdpi/ic_wallpaper_pressed.png diff --git a/res/drawable-xhdpi/ic_wallpaper_pressed_l.png b/res/drawable-xhdpi/ic_wallpaper_pressed_l.png Binary files differdeleted file mode 100644 index 5a9b84d7d..000000000 --- a/res/drawable-xhdpi/ic_wallpaper_pressed_l.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_widget.png b/res/drawable-xhdpi/ic_widget.png Binary files differindex 47dcdd14f..cf6be8173 100644 --- a/res/drawable-xhdpi/ic_widget.png +++ b/res/drawable-xhdpi/ic_widget.png diff --git a/res/drawable-xhdpi/ic_widget_l.png b/res/drawable-xhdpi/ic_widget_l.png Binary files differdeleted file mode 100644 index cf6be8173..000000000 --- a/res/drawable-xhdpi/ic_widget_l.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_widget_pressed.png b/res/drawable-xhdpi/ic_widget_pressed.png Binary files differindex 8bb387b88..633c9c648 100644 --- a/res/drawable-xhdpi/ic_widget_pressed.png +++ b/res/drawable-xhdpi/ic_widget_pressed.png diff --git a/res/drawable-xhdpi/ic_widget_pressed_l.png b/res/drawable-xhdpi/ic_widget_pressed_l.png Binary files differdeleted file mode 100644 index 633c9c648..000000000 --- a/res/drawable-xhdpi/ic_widget_pressed_l.png +++ /dev/null diff --git a/res/drawable-xhdpi/quantum_panel.9.png b/res/drawable-xhdpi/quantum_panel.9.png Binary files differnew file mode 100644 index 000000000..562d75802 --- /dev/null +++ b/res/drawable-xhdpi/quantum_panel.9.png diff --git a/res/drawable-xhdpi/screenpanel.9.png b/res/drawable-xhdpi/screenpanel.9.png Binary files differindex b4b828d3e..2d70d7af5 100644 --- a/res/drawable-xhdpi/screenpanel.9.png +++ b/res/drawable-xhdpi/screenpanel.9.png diff --git a/res/drawable-xhdpi/screenpanel_hover.9.png b/res/drawable-xhdpi/screenpanel_hover.9.png Binary files differindex 251bf2085..0032fff4d 100644 --- a/res/drawable-xhdpi/screenpanel_hover.9.png +++ b/res/drawable-xhdpi/screenpanel_hover.9.png diff --git a/res/drawable-xhdpi/screenpanel_hover_l.9.png b/res/drawable-xhdpi/screenpanel_hover_l.9.png Binary files differdeleted file mode 100644 index 0032fff4d..000000000 --- a/res/drawable-xhdpi/screenpanel_hover_l.9.png +++ /dev/null diff --git a/res/drawable-xhdpi/screenpanel_l.9.png b/res/drawable-xhdpi/screenpanel_l.9.png Binary files differdeleted file mode 100644 index 2d70d7af5..000000000 --- a/res/drawable-xhdpi/screenpanel_l.9.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_allapps.png b/res/drawable-xxhdpi/ic_allapps.png Binary files differindex 624e0ef44..2461984ff 100644 --- a/res/drawable-xxhdpi/ic_allapps.png +++ b/res/drawable-xxhdpi/ic_allapps.png diff --git a/res/drawable-xxhdpi/ic_allapps_l.png b/res/drawable-xxhdpi/ic_allapps_l.png Binary files differdeleted file mode 100644 index 2461984ff..000000000 --- a/res/drawable-xxhdpi/ic_allapps_l.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_allapps_pressed.png b/res/drawable-xxhdpi/ic_allapps_pressed.png Binary files differindex 77b45aefb..929a0e6ab 100644 --- a/res/drawable-xxhdpi/ic_allapps_pressed.png +++ b/res/drawable-xxhdpi/ic_allapps_pressed.png diff --git a/res/drawable-xxhdpi/ic_allapps_pressed_l.png b/res/drawable-xxhdpi/ic_allapps_pressed_l.png Binary files differdeleted file mode 100644 index 929a0e6ab..000000000 --- a/res/drawable-xxhdpi/ic_allapps_pressed_l.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_pageindicator_add.png b/res/drawable-xxhdpi/ic_pageindicator_add.png Binary files differindex fd8a662e1..d78c95a74 100644 --- a/res/drawable-xxhdpi/ic_pageindicator_add.png +++ b/res/drawable-xxhdpi/ic_pageindicator_add.png diff --git a/res/drawable-xxhdpi/ic_pageindicator_current.png b/res/drawable-xxhdpi/ic_pageindicator_current.png Binary files differindex 08615f371..2a5eff699 100644 --- a/res/drawable-xxhdpi/ic_pageindicator_current.png +++ b/res/drawable-xxhdpi/ic_pageindicator_current.png diff --git a/res/drawable-xxhdpi/ic_pageindicator_default.png b/res/drawable-xxhdpi/ic_pageindicator_default.png Binary files differindex 9d4fbf820..969ae8c8e 100644 --- a/res/drawable-xxhdpi/ic_pageindicator_default.png +++ b/res/drawable-xxhdpi/ic_pageindicator_default.png diff --git a/res/drawable-xxhdpi/ic_setting.png b/res/drawable-xxhdpi/ic_setting.png Binary files differindex b3729d315..01bdcd544 100644 --- a/res/drawable-xxhdpi/ic_setting.png +++ b/res/drawable-xxhdpi/ic_setting.png diff --git a/res/drawable-xxhdpi/ic_setting_l.png b/res/drawable-xxhdpi/ic_setting_l.png Binary files differdeleted file mode 100644 index 01bdcd544..000000000 --- a/res/drawable-xxhdpi/ic_setting_l.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_setting_pressed.png b/res/drawable-xxhdpi/ic_setting_pressed.png Binary files differindex 5c9c1be44..d0cad5e0e 100644 --- a/res/drawable-xxhdpi/ic_setting_pressed.png +++ b/res/drawable-xxhdpi/ic_setting_pressed.png diff --git a/res/drawable-xxhdpi/ic_setting_pressed_l.png b/res/drawable-xxhdpi/ic_setting_pressed_l.png Binary files differdeleted file mode 100644 index d0cad5e0e..000000000 --- a/res/drawable-xxhdpi/ic_setting_pressed_l.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_wallpaper.png b/res/drawable-xxhdpi/ic_wallpaper.png Binary files differindex c71844410..490c45a87 100644 --- a/res/drawable-xxhdpi/ic_wallpaper.png +++ b/res/drawable-xxhdpi/ic_wallpaper.png diff --git a/res/drawable-xxhdpi/ic_wallpaper_l.png b/res/drawable-xxhdpi/ic_wallpaper_l.png Binary files differdeleted file mode 100644 index 490c45a87..000000000 --- a/res/drawable-xxhdpi/ic_wallpaper_l.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_wallpaper_pressed.png b/res/drawable-xxhdpi/ic_wallpaper_pressed.png Binary files differindex 03324aa6c..e5d200be1 100644 --- a/res/drawable-xxhdpi/ic_wallpaper_pressed.png +++ b/res/drawable-xxhdpi/ic_wallpaper_pressed.png diff --git a/res/drawable-xxhdpi/ic_wallpaper_pressed_l.png b/res/drawable-xxhdpi/ic_wallpaper_pressed_l.png Binary files differdeleted file mode 100644 index e5d200be1..000000000 --- a/res/drawable-xxhdpi/ic_wallpaper_pressed_l.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_widget.png b/res/drawable-xxhdpi/ic_widget.png Binary files differindex fddfecaa3..d4b8324b1 100644 --- a/res/drawable-xxhdpi/ic_widget.png +++ b/res/drawable-xxhdpi/ic_widget.png diff --git a/res/drawable-xxhdpi/ic_widget_l.png b/res/drawable-xxhdpi/ic_widget_l.png Binary files differdeleted file mode 100644 index d4b8324b1..000000000 --- a/res/drawable-xxhdpi/ic_widget_l.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_widget_pressed.png b/res/drawable-xxhdpi/ic_widget_pressed.png Binary files differindex 3d3670ed4..b8dd35dc6 100644 --- a/res/drawable-xxhdpi/ic_widget_pressed.png +++ b/res/drawable-xxhdpi/ic_widget_pressed.png diff --git a/res/drawable-xxhdpi/ic_widget_pressed_l.png b/res/drawable-xxhdpi/ic_widget_pressed_l.png Binary files differdeleted file mode 100644 index b8dd35dc6..000000000 --- a/res/drawable-xxhdpi/ic_widget_pressed_l.png +++ /dev/null diff --git a/res/drawable-xxhdpi/quantum_panel.9.png b/res/drawable-xxhdpi/quantum_panel.9.png Binary files differnew file mode 100644 index 000000000..bc818b1c6 --- /dev/null +++ b/res/drawable-xxhdpi/quantum_panel.9.png diff --git a/res/drawable-xxhdpi/screenpanel.9.png b/res/drawable-xxhdpi/screenpanel.9.png Binary files differindex c44f3b898..7ed058efa 100644 --- a/res/drawable-xxhdpi/screenpanel.9.png +++ b/res/drawable-xxhdpi/screenpanel.9.png diff --git a/res/drawable-xxhdpi/screenpanel_hover.9.png b/res/drawable-xxhdpi/screenpanel_hover.9.png Binary files differindex e8b36d8f1..24d2266a0 100644 --- a/res/drawable-xxhdpi/screenpanel_hover.9.png +++ b/res/drawable-xxhdpi/screenpanel_hover.9.png diff --git a/res/drawable-xxhdpi/screenpanel_hover_l.9.png b/res/drawable-xxhdpi/screenpanel_hover_l.9.png Binary files differdeleted file mode 100644 index 24d2266a0..000000000 --- a/res/drawable-xxhdpi/screenpanel_hover_l.9.png +++ /dev/null diff --git a/res/drawable-xxhdpi/screenpanel_l.9.png b/res/drawable-xxhdpi/screenpanel_l.9.png Binary files differdeleted file mode 100644 index 7ed058efa..000000000 --- a/res/drawable-xxhdpi/screenpanel_l.9.png +++ /dev/null diff --git a/res/drawable-xxxhdpi/quantum_panel.9.png b/res/drawable-xxxhdpi/quantum_panel.9.png Binary files differnew file mode 100644 index 000000000..a15aab45d --- /dev/null +++ b/res/drawable-xxxhdpi/quantum_panel.9.png 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()); } } |