From 646c236ad283c44e41747176fe1017d619b92d5a Mon Sep 17 00:00:00 2001 From: Winson Date: Thu, 3 Sep 2015 11:46:11 -0700 Subject: [PATCH 001/219] Disabling fast scroller when searching apps. - There is no meaningful order for the app search results since they are ranked. Bug: 23759082 Change-Id: I0aa4eea68136ea3ecef2a80b20ba7b0d46f0653b --- src/com/android/launcher3/BaseRecyclerView.java | 7 +++++++ .../android/launcher3/BaseRecyclerViewFastScrollBar.java | 3 ++- src/com/android/launcher3/allapps/AllAppsRecyclerView.java | 7 +++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/BaseRecyclerView.java b/src/com/android/launcher3/BaseRecyclerView.java index f0d8b3b3d2..9d713e338e 100644 --- a/src/com/android/launcher3/BaseRecyclerView.java +++ b/src/com/android/launcher3/BaseRecyclerView.java @@ -267,6 +267,13 @@ public abstract class BaseRecyclerView extends RecyclerView mScrollbar.setThumbOffset(scrollBarX, scrollBarY); } + /** + * Returns whether fast scrolling is supported in the current state. + */ + protected boolean supportsFastScrolling() { + return true; + } + /** * Maps the touch (from 0..1) to the adapter position that should be visible. *

Override in each subclass of this base class. diff --git a/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java b/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java index fcee7e8ddf..32ea576671 100644 --- a/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java +++ b/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java @@ -189,7 +189,8 @@ public class BaseRecyclerViewFastScrollBar { // Check if we should start scrolling, but ignore this fastscroll gesture if we have // exceeded some fixed movement mIgnoreDragGesture |= Math.abs(y - downY) > config.getScaledPagingTouchSlop(); - if (!mIsDragging && !mIgnoreDragGesture && isNearThumb(downX, lastY) && + if (!mIsDragging && !mIgnoreDragGesture && mRv.supportsFastScrolling() && + isNearThumb(downX, lastY) && Math.abs(y - downY) > config.getScaledTouchSlop()) { mRv.getParent().requestDisallowInterceptTouchEvent(true); mIsDragging = true; diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java index 2f66e2cad6..10d10f11b3 100644 --- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java +++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java @@ -431,6 +431,13 @@ public class AllAppsRecyclerView extends BaseRecyclerView } } + @Override + protected boolean supportsFastScrolling() { + // Only allow fast scrolling when the user is not searching, since the results are not + // grouped in a meaningful order + return !mApps.hasFilter(); + } + /** * Returns the scrollY for the given position in the adapter. */ From 5c6bdbbc27525acc8c49cea6a1de36723a13fac7 Mon Sep 17 00:00:00 2001 From: Winson Date: Thu, 3 Sep 2015 11:36:19 -0700 Subject: [PATCH 002/219] Fixing regression, reset AllApps when the screen turns off. - Now that we are debouncing the workspace state, we were no longer resetting the all apps view when the screen turns off when the user is already on the workspace. Bug: 23759455 Change-Id: I996b595945de96ae6ff2344349027d4722921984 --- src/com/android/launcher3/Launcher.java | 32 ++++++++++++++----- .../allapps/AllAppsContainerView.java | 13 ++++++-- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 2873d37332..7ad858cca4 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1614,7 +1614,10 @@ public class Launcher extends Activity // processing a multi-step drop if (mAppsView != null && mWidgetsView != null && mPendingAddInfo.container == ItemInfo.NO_ID) { - showWorkspace(false); + if (!showWorkspace(false)) { + // If we are already on the workspace, then manually reset all apps + mAppsView.reset(); + } } } else if (Intent.ACTION_USER_PRESENT.equals(action)) { mUserPresent = true; @@ -3259,20 +3262,32 @@ public class Launcher extends Activity } } - public void showWorkspace(boolean animated) { - showWorkspace(WorkspaceStateTransitionAnimation.SCROLL_TO_CURRENT_PAGE, animated, null); + /** + * @return whether or not the Launcher state changed. + */ + public boolean showWorkspace(boolean animated) { + return showWorkspace(WorkspaceStateTransitionAnimation.SCROLL_TO_CURRENT_PAGE, animated, null); } - public void showWorkspace(boolean animated, Runnable onCompleteRunnable) { - showWorkspace(WorkspaceStateTransitionAnimation.SCROLL_TO_CURRENT_PAGE, animated, + /** + * @return whether or not the Launcher state changed. + */ + public boolean showWorkspace(boolean animated, Runnable onCompleteRunnable) { + return showWorkspace(WorkspaceStateTransitionAnimation.SCROLL_TO_CURRENT_PAGE, animated, onCompleteRunnable); } - protected void showWorkspace(int snapToPage, boolean animated) { - showWorkspace(snapToPage, animated, null); + /** + * @return whether or not the Launcher state changed. + */ + protected boolean showWorkspace(int snapToPage, boolean animated) { + return showWorkspace(snapToPage, animated, null); } - void showWorkspace(int snapToPage, boolean animated, Runnable onCompleteRunnable) { + /** + * @return whether or not the Launcher state changed. + */ + boolean showWorkspace(int snapToPage, boolean animated, Runnable onCompleteRunnable) { boolean changed = mState != State.WORKSPACE || mWorkspace.getState() != Workspace.State.NORMAL; if (changed) { @@ -3298,6 +3313,7 @@ public class Launcher extends Activity getWindow().getDecorView() .sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); } + return changed; } void showOverviewMode(boolean animated) { diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index 88c6acadac..564527e28a 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -290,6 +290,15 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc } } + /** + * Resets the state of AllApps. + */ + public void reset() { + // Reset the search bar and base recycler view after transitioning home + mSearchBarController.reset(); + mAppsRecyclerView.reset(); + } + @Override protected void onFinishInflate() { super.onFinishInflate(); @@ -555,9 +564,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc @Override public void onLauncherTransitionEnd(Launcher l, boolean animated, boolean toWorkspace) { if (toWorkspace) { - // Reset the search bar and base recycler view after transitioning home - mSearchBarController.reset(); - mAppsRecyclerView.reset(); + reset(); } } From 1268855200e519985e2c845ba84d2d613fa4a36c Mon Sep 17 00:00:00 2001 From: Winson Date: Fri, 4 Sep 2015 08:52:36 -0700 Subject: [PATCH 003/219] Compressing Launcher resources. Bug: 23812987 Change-Id: I66452a321c3c48661387282ba782ba948e0aae6b --- res/drawable-hdpi/cling_bg.9.png | Bin 1352 -> 1023 bytes res/drawable-hdpi/ic_all_apps_bg_hand.png | Bin 28031 -> 11386 bytes res/drawable-hdpi/ic_all_apps_bg_icon_1.png | Bin 3712 -> 2512 bytes res/drawable-hdpi/ic_all_apps_bg_icon_2.png | Bin 3974 -> 2740 bytes res/drawable-hdpi/ic_all_apps_bg_icon_3.png | Bin 5629 -> 3397 bytes res/drawable-hdpi/ic_all_apps_bg_icon_4.png | Bin 4108 -> 2627 bytes res/drawable-hdpi/ic_allapps.png | Bin 5861 -> 2956 bytes res/drawable-hdpi/ic_allapps_pressed.png | Bin 5972 -> 3231 bytes res/drawable-hdpi/ic_arrow_back_grey.png | Bin 152 -> 149 bytes res/drawable-hdpi/ic_info_launcher.png | Bin 2727 -> 1372 bytes res/drawable-hdpi/ic_pageindicator_add.png | Bin 945 -> 390 bytes .../ic_pageindicator_current.png | Bin 1038 -> 468 bytes .../ic_pageindicator_current_folder.png | Bin 610 -> 210 bytes .../ic_pageindicator_default.png | Bin 895 -> 390 bytes .../ic_pageindicator_default_folder.png | Bin 529 -> 189 bytes res/drawable-hdpi/ic_remove_launcher.png | Bin 1610 -> 832 bytes res/drawable-hdpi/ic_search_grey.png | Bin 419 -> 414 bytes res/drawable-hdpi/ic_setting.png | Bin 2286 -> 1251 bytes res/drawable-hdpi/ic_setting_pressed.png | Bin 2293 -> 1212 bytes res/drawable-hdpi/ic_uninstall_launcher.png | Bin 1194 -> 552 bytes res/drawable-hdpi/ic_wallpaper.png | Bin 1997 -> 1024 bytes res/drawable-hdpi/ic_wallpaper_pressed.png | Bin 1882 -> 979 bytes res/drawable-hdpi/ic_widget.png | Bin 1580 -> 800 bytes res/drawable-hdpi/ic_widget_pressed.png | Bin 1524 -> 766 bytes res/drawable-hdpi/ic_widget_resize_handle.png | Bin 1492 -> 576 bytes res/drawable-hdpi/page_hover_left.9.png | Bin 184 -> 102 bytes .../page_hover_left_active.9.png | Bin 183 -> 102 bytes res/drawable-hdpi/page_hover_right.9.png | Bin 174 -> 100 bytes .../page_hover_right_active.9.png | Bin 174 -> 100 bytes res/drawable-hdpi/portal_ring_inner.png | Bin 4386 -> 2340 bytes res/drawable-hdpi/portal_ring_inner_nolip.png | Bin 4107 -> 2231 bytes res/drawable-hdpi/portal_ring_outer.png | Bin 7887 -> 5918 bytes res/drawable-hdpi/portal_ring_rest.png | Bin 2794 -> 1512 bytes res/drawable-hdpi/quantum_panel_bitmap.9.png | Bin 608 -> 397 bytes .../quantum_panel_dark_bitmap.9.png | Bin 629 -> 501 bytes res/drawable-hdpi/screenpanel.9.png | Bin 218 -> 132 bytes res/drawable-hdpi/screenpanel_hover.9.png | Bin 218 -> 133 bytes res/drawable-hdpi/virtual_preload.9.png | Bin 5153 -> 2353 bytes .../virtual_preload_folder.9.png | Bin 3214 -> 1187 bytes res/drawable-hdpi/widget_resize_frame.9.png | Bin 405 -> 187 bytes res/drawable-hdpi/widget_resize_shadow.9.png | Bin 527 -> 256 bytes res/drawable-hdpi/widget_tile.png | Bin 545 -> 135 bytes res/drawable-hdpi/workspace_bg.9.png | Bin 226 -> 159 bytes res/drawable-land-hdpi/workspace_bg.9.png | Bin 222 -> 153 bytes res/drawable-land-mdpi/workspace_bg.9.png | Bin 201 -> 140 bytes res/drawable-land-xhdpi/workspace_bg.9.png | Bin 235 -> 162 bytes res/drawable-land-xxhdpi/workspace_bg.9.png | Bin 1117 -> 166 bytes res/drawable-mdpi/cling_bg.9.png | Bin 987 -> 750 bytes res/drawable-mdpi/ic_all_apps_bg_hand.png | Bin 16483 -> 6951 bytes res/drawable-mdpi/ic_all_apps_bg_icon_1.png | Bin 2390 -> 1540 bytes res/drawable-mdpi/ic_all_apps_bg_icon_2.png | Bin 2553 -> 1924 bytes res/drawable-mdpi/ic_all_apps_bg_icon_3.png | Bin 3450 -> 2361 bytes res/drawable-mdpi/ic_all_apps_bg_icon_4.png | Bin 2619 -> 1944 bytes res/drawable-mdpi/ic_allapps.png | Bin 3846 -> 1488 bytes res/drawable-mdpi/ic_allapps_pressed.png | Bin 3979 -> 1997 bytes res/drawable-mdpi/ic_arrow_back_grey.png | Bin 117 -> 116 bytes res/drawable-mdpi/ic_info_launcher.png | Bin 1603 -> 689 bytes res/drawable-mdpi/ic_pageindicator_add.png | Bin 669 -> 236 bytes .../ic_pageindicator_current.png | Bin 704 -> 277 bytes .../ic_pageindicator_current_folder.png | Bin 484 -> 160 bytes .../ic_pageindicator_default.png | Bin 694 -> 254 bytes .../ic_pageindicator_default_folder.png | Bin 482 -> 148 bytes res/drawable-mdpi/ic_remove_launcher.png | Bin 1087 -> 473 bytes res/drawable-mdpi/ic_setting.png | Bin 1577 -> 849 bytes res/drawable-mdpi/ic_setting_pressed.png | Bin 1617 -> 838 bytes res/drawable-mdpi/ic_uninstall_launcher.png | Bin 932 -> 378 bytes res/drawable-mdpi/ic_wallpaper.png | Bin 1496 -> 782 bytes res/drawable-mdpi/ic_wallpaper_pressed.png | Bin 1391 -> 772 bytes res/drawable-mdpi/ic_widget.png | Bin 1182 -> 605 bytes res/drawable-mdpi/ic_widget_pressed.png | Bin 1177 -> 624 bytes res/drawable-mdpi/ic_widget_resize_handle.png | Bin 896 -> 358 bytes res/drawable-mdpi/page_hover_left.9.png | Bin 172 -> 99 bytes .../page_hover_left_active.9.png | Bin 169 -> 99 bytes res/drawable-mdpi/page_hover_right.9.png | Bin 162 -> 97 bytes .../page_hover_right_active.9.png | Bin 162 -> 98 bytes res/drawable-mdpi/portal_ring_inner.png | Bin 2641 -> 1431 bytes res/drawable-mdpi/portal_ring_inner_nolip.png | Bin 2545 -> 1382 bytes res/drawable-mdpi/portal_ring_outer.png | Bin 4704 -> 3217 bytes res/drawable-mdpi/portal_ring_rest.png | Bin 1675 -> 871 bytes res/drawable-mdpi/quantum_panel_bitmap.9.png | Bin 436 -> 286 bytes .../quantum_panel_dark_bitmap.9.png | Bin 445 -> 333 bytes res/drawable-mdpi/screenpanel.9.png | Bin 222 -> 131 bytes res/drawable-mdpi/screenpanel_hover.9.png | Bin 220 -> 131 bytes res/drawable-mdpi/virtual_preload.9.png | Bin 3395 -> 1599 bytes .../virtual_preload_folder.9.png | Bin 2404 -> 847 bytes res/drawable-mdpi/widget_resize_frame.9.png | Bin 304 -> 156 bytes res/drawable-mdpi/widget_resize_shadow.9.png | Bin 367 -> 206 bytes res/drawable-mdpi/widget_tile.png | Bin 405 -> 110 bytes res/drawable-mdpi/workspace_bg.9.png | Bin 213 -> 155 bytes res/drawable-nodpi/ic_migration.png | Bin 208114 -> 73676 bytes res/drawable-sw720dp-hdpi/workspace_bg.9.png | Bin 226 -> 159 bytes res/drawable-sw720dp-mdpi/workspace_bg.9.png | Bin 213 -> 155 bytes res/drawable-sw720dp-xhdpi/workspace_bg.9.png | Bin 255 -> 180 bytes .../workspace_bg.9.png | Bin 1126 -> 174 bytes res/drawable-xhdpi/cling_bg.9.png | Bin 1829 -> 1443 bytes res/drawable-xhdpi/ic_all_apps_bg_hand.png | Bin 40314 -> 16156 bytes res/drawable-xhdpi/ic_all_apps_bg_icon_1.png | Bin 5139 -> 3595 bytes res/drawable-xhdpi/ic_all_apps_bg_icon_2.png | Bin 5482 -> 3441 bytes res/drawable-xhdpi/ic_all_apps_bg_icon_3.png | Bin 8186 -> 4551 bytes res/drawable-xhdpi/ic_all_apps_bg_icon_4.png | Bin 5680 -> 3299 bytes res/drawable-xhdpi/ic_allapps.png | Bin 6809 -> 3598 bytes res/drawable-xhdpi/ic_allapps_pressed.png | Bin 7239 -> 3961 bytes res/drawable-xhdpi/ic_arrow_back_grey.png | Bin 151 -> 150 bytes res/drawable-xhdpi/ic_info_launcher.png | Bin 3777 -> 2056 bytes res/drawable-xhdpi/ic_pageindicator_add.png | Bin 1192 -> 565 bytes .../ic_pageindicator_current.png | Bin 1414 -> 677 bytes .../ic_pageindicator_current_folder.png | Bin 782 -> 293 bytes .../ic_pageindicator_default.png | Bin 1168 -> 539 bytes .../ic_pageindicator_default_folder.png | Bin 644 -> 249 bytes res/drawable-xhdpi/ic_remove_launcher.png | Bin 1724 -> 965 bytes res/drawable-xhdpi/ic_search_grey.png | Bin 497 -> 485 bytes res/drawable-xhdpi/ic_setting.png | Bin 2976 -> 1640 bytes res/drawable-xhdpi/ic_setting_pressed.png | Bin 3013 -> 1567 bytes res/drawable-xhdpi/ic_uninstall_launcher.png | Bin 1456 -> 730 bytes res/drawable-xhdpi/ic_wallpaper.png | Bin 2401 -> 1246 bytes res/drawable-xhdpi/ic_wallpaper_pressed.png | Bin 2209 -> 1129 bytes res/drawable-xhdpi/ic_widget.png | Bin 1982 -> 999 bytes res/drawable-xhdpi/ic_widget_pressed.png | Bin 1883 -> 967 bytes .../ic_widget_resize_handle.png | Bin 2144 -> 821 bytes res/drawable-xhdpi/page_hover_left.9.png | Bin 190 -> 104 bytes .../page_hover_left_active.9.png | Bin 189 -> 104 bytes res/drawable-xhdpi/page_hover_right.9.png | Bin 192 -> 108 bytes .../page_hover_right_active.9.png | Bin 192 -> 108 bytes res/drawable-xhdpi/portal_ring_inner.png | Bin 5983 -> 3275 bytes .../portal_ring_inner_nolip.png | Bin 5569 -> 3054 bytes res/drawable-xhdpi/portal_ring_outer.png | Bin 10394 -> 8338 bytes res/drawable-xhdpi/portal_ring_rest.png | Bin 3754 -> 2056 bytes res/drawable-xhdpi/quantum_panel_bitmap.9.png | Bin 843 -> 537 bytes .../quantum_panel_dark_bitmap.9.png | Bin 842 -> 664 bytes res/drawable-xhdpi/screenpanel.9.png | Bin 273 -> 172 bytes res/drawable-xhdpi/screenpanel_hover.9.png | Bin 281 -> 174 bytes res/drawable-xhdpi/virtual_preload.9.png | Bin 6682 -> 3726 bytes .../virtual_preload_folder.9.png | Bin 4189 -> 1655 bytes res/drawable-xhdpi/widget_resize_frame.9.png | Bin 494 -> 209 bytes res/drawable-xhdpi/widget_resize_shadow.9.png | Bin 669 -> 369 bytes res/drawable-xhdpi/widget_tile.png | Bin 614 -> 122 bytes res/drawable-xhdpi/workspace_bg.9.png | Bin 255 -> 180 bytes res/drawable-xxhdpi/cling_bg.9.png | Bin 2936 -> 2458 bytes res/drawable-xxhdpi/ic_all_apps_bg_hand.png | Bin 70350 -> 28211 bytes res/drawable-xxhdpi/ic_all_apps_bg_icon_1.png | Bin 8385 -> 5089 bytes res/drawable-xxhdpi/ic_all_apps_bg_icon_2.png | Bin 9194 -> 5339 bytes res/drawable-xxhdpi/ic_all_apps_bg_icon_3.png | Bin 13880 -> 7192 bytes res/drawable-xxhdpi/ic_all_apps_bg_icon_4.png | Bin 9256 -> 4967 bytes res/drawable-xxhdpi/ic_allapps.png | Bin 11608 -> 6398 bytes res/drawable-xxhdpi/ic_allapps_pressed.png | Bin 12588 -> 7039 bytes res/drawable-xxhdpi/ic_arrow_back_grey.png | Bin 190 -> 186 bytes res/drawable-xxhdpi/ic_info_launcher.png | Bin 6343 -> 3596 bytes res/drawable-xxhdpi/ic_pageindicator_add.png | Bin 1607 -> 849 bytes .../ic_pageindicator_current.png | Bin 2105 -> 1079 bytes .../ic_pageindicator_current_folder.png | Bin 1023 -> 432 bytes .../ic_pageindicator_default.png | Bin 1634 -> 822 bytes .../ic_pageindicator_default_folder.png | Bin 832 -> 327 bytes res/drawable-xxhdpi/ic_remove_launcher.png | Bin 2892 -> 1694 bytes res/drawable-xxhdpi/ic_search_grey.png | Bin 743 -> 712 bytes res/drawable-xxhdpi/ic_setting.png | Bin 4568 -> 2509 bytes res/drawable-xxhdpi/ic_setting_pressed.png | Bin 4476 -> 2423 bytes res/drawable-xxhdpi/ic_uninstall_launcher.png | Bin 2045 -> 1058 bytes res/drawable-xxhdpi/ic_wallpaper.png | Bin 3563 -> 1821 bytes res/drawable-xxhdpi/ic_wallpaper_pressed.png | Bin 3312 -> 1745 bytes res/drawable-xxhdpi/ic_widget.png | Bin 2857 -> 1452 bytes res/drawable-xxhdpi/ic_widget_pressed.png | Bin 2772 -> 1405 bytes .../ic_widget_resize_handle.png | Bin 2928 -> 1627 bytes res/drawable-xxhdpi/page_hover_left.9.png | Bin 216 -> 116 bytes .../page_hover_left_active.9.png | Bin 216 -> 116 bytes res/drawable-xxhdpi/page_hover_right.9.png | Bin 233 -> 122 bytes .../page_hover_right_active.9.png | Bin 233 -> 122 bytes res/drawable-xxhdpi/portal_ring_inner.png | Bin 9918 -> 5663 bytes .../portal_ring_inner_nolip.png | Bin 9127 -> 5418 bytes res/drawable-xxhdpi/portal_ring_outer.png | Bin 19200 -> 16598 bytes res/drawable-xxhdpi/portal_ring_rest.png | Bin 8660 -> 3622 bytes .../quantum_panel_bitmap.9.png | Bin 1323 -> 816 bytes .../quantum_panel_dark_bitmap.9.png | Bin 1332 -> 995 bytes res/drawable-xxhdpi/screenpanel.9.png | Bin 346 -> 214 bytes res/drawable-xxhdpi/screenpanel_hover.9.png | Bin 334 -> 211 bytes res/drawable-xxhdpi/virtual_preload.9.png | Bin 11343 -> 6802 bytes .../virtual_preload_folder.9.png | Bin 6064 -> 2986 bytes res/drawable-xxhdpi/widget_resize_frame.9.png | Bin 626 -> 179 bytes .../widget_resize_shadow.9.png | Bin 975 -> 605 bytes res/drawable-xxhdpi/widget_tile.png | Bin 1290 -> 132 bytes res/drawable-xxhdpi/workspace_bg.9.png | Bin 1126 -> 174 bytes res/drawable-xxxhdpi/ic_all_apps_bg_hand.png | Bin 82201 -> 30824 bytes .../ic_all_apps_bg_icon_1.png | Bin 29432 -> 5187 bytes .../ic_all_apps_bg_icon_2.png | Bin 10936 -> 5348 bytes .../ic_all_apps_bg_icon_3.png | Bin 14554 -> 6816 bytes .../ic_all_apps_bg_icon_4.png | Bin 10317 -> 5269 bytes res/drawable-xxxhdpi/ic_arrow_back_grey.png | Bin 234 -> 222 bytes res/drawable-xxxhdpi/ic_info_launcher.png | Bin 5724 -> 3276 bytes res/drawable-xxxhdpi/ic_remove_launcher.png | Bin 3210 -> 1726 bytes res/drawable-xxxhdpi/ic_search_grey.png | Bin 972 -> 915 bytes .../ic_uninstall_launcher.png | Bin 2445 -> 1042 bytes .../ic_widget_resize_handle.png | Bin 2930 -> 1345 bytes res/drawable-xxxhdpi/portal_ring_inner.png | Bin 13024 -> 7927 bytes .../portal_ring_inner_nolip.png | Bin 12202 -> 7432 bytes res/drawable-xxxhdpi/portal_ring_outer.png | Bin 23360 -> 20634 bytes res/drawable-xxxhdpi/portal_ring_rest.png | Bin 8628 -> 4993 bytes .../quantum_panel_bitmap.9.png | Bin 2546 -> 1104 bytes .../quantum_panel_dark_bitmap.9.png | Bin 2531 -> 1347 bytes .../widget_resize_frame.9.png | Bin 1569 -> 194 bytes .../widget_resize_shadow.9.png | Bin 2058 -> 826 bytes res/mipmap-hdpi/ic_launcher_home.png | Bin 464 -> 236 bytes res/mipmap-mdpi/ic_launcher_home.png | Bin 416 -> 216 bytes res/mipmap-xhdpi/ic_launcher_home.png | Bin 443 -> 235 bytes res/mipmap-xxhdpi/ic_launcher_home.png | Bin 473 -> 266 bytes 203 files changed, 0 insertions(+), 0 deletions(-) diff --git a/res/drawable-hdpi/cling_bg.9.png b/res/drawable-hdpi/cling_bg.9.png index e173ba5952a290332465abe9d009df12658e103a..fb101f4d4a1d3dbb16a30ca486a3b00494ce49e1 100644 GIT binary patch delta 1002 zcmVf{YC4r<^v~`c_noTbi(6lx^WR3H3)9F1;`GP!meClK!O>cvYgi7(%rKvJf`DLoab9aSd@jbAti6j<}Y%itrIG7Jp_!=fi?LZU@q~M`1@% zDt4Ei!mg6D*jaoIb%huF)D~O}cq(%bAaV0L+;(#`fZK`dIS{taL}?s38&bAK;6UYb zI9&4=(P&WWaj@z;WX6}n<-8w2C@0LrP1017EQEs+6i0XR2hnJF_LP2uq4&=La1Rm0 z^|PrYnYfcK?0+rWZ+t<_fvTS|d&))tLx>2jos)euswBCwr|iHWle7uIP$H5m=OWA^ zNhIl(v{@vHB#|VNM3P8qgGdrdjUq{sB$7muND@gR$q9G0k=!N3!vO8@qhZaN}?%I>16s0c9oo`t&--A zl1t3xR@4%E%HE*|{%1hE_+2Gmpgj8-ROUW`>byr$TktSy+dSv0+(Ss(vL3hV+bZem ze$tK5w3{${@_i)q@qQLnkD7wFF@EF{Xxc*nqPRl0=-E%|jZHTfN7RSaizBhO{E_~s zDGPcFqko1jAVK#72qSLfH`v|wd8;Kh=Ed&K~mE7tBxc`QeN1`-1 zv0-@#iMrIw)vHH!{u>xMWIhWD;d90{00r^1On;P#618=8IElL0OQQbuAJSuoFC;bS0$-4#dL(LPv#9g*g8$Yp$bU$`iLoOVf&~Ro#dK89 zM1P4|w={@F{iW-WuF8AWXbDn_0-RX8ghZ8{rWgO`e4o-$AgV4LRi#a zot{DdLwe`}BUMaC^+?njf1=KS&L~C2UdE^)^9)-t9o4&o&Zv`Ze&qWHH3iRO_yf~O z&|Lt6j3`J)^)v^4g}EKON=k5`>H{38{9^>w`A0B$%xDr63gA}aYQm{QkRcOg$K6pr zI;VoLdQmt+gKh$F9n0|&4jn&b7*>>-W!b>LT`_h}j|nm?s|~%D92prI85x;IgYv(o Y34NwH|7n6Q8~^|S07*qoM6N<$g1MIEnE(I) delta 1334 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 eF*!OjH!UzXIxsL!5%miI0000 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 C+>HhR literal 3974 zcmV;14|(v3P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 diff --git a/res/drawable-hdpi/ic_all_apps_bg_icon_3.png b/res/drawable-hdpi/ic_all_apps_bg_icon_3.png index ed88199901e78b04f02bc2b5566ebb7edf7d9bb2..54fe70b132ed69b48eac13b23bfdb3a3be11c6bc 100644 GIT binary patch literal 3397 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 XWnpA_ami&o00000NkvXXu0mjf#<7R) diff --git a/res/drawable-hdpi/ic_all_apps_bg_icon_4.png b/res/drawable-hdpi/ic_all_apps_bg_icon_4.png index 0ff9453a623c2bf5252805678b4e55c441e888fe..9c0f7773b65faca93a3dd9c073737deec4e2a769 100644 GIT binary patch literal 2627 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 KMNUMnLSTaPNtHMN diff --git a/res/drawable-hdpi/ic_allapps.png b/res/drawable-hdpi/ic_allapps.png index b98e65f9905ee544e001d57e94d32a481df207db..253755ffe22319920c545a85c67a7722fa1b0ccb 100644 GIT binary patch literal 2956 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 RrnmqA002ovPDHLkV1f>B659X( literal 5972 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 X-D6unk0HB%*=;~eO&?XIVjcEB6nr_5 diff --git a/res/drawable-hdpi/ic_arrow_back_grey.png b/res/drawable-hdpi/ic_arrow_back_grey.png index c7c00886fc0460c97b61834b365a5b085231d713..7d7bfb112623120794fd0ef89982fa78a150c863 100755 GIT binary patch delta 120 zcmV-;0EhpW0hIxeByn6xL_t(|0b>}RU=)-#lr~VunEyc7Km}vKaAPSmb&O%7hB2E4 zl`)%#qcK~kW6ZbGHXxe-#A^&GkfsJ)H4iA aFbV*sLGg1=7cvt700000EGXQ0hj@hBy?X%L_t(Y$75g^1;Y}QHk39{$C&>>*gzd){+DhnWu}fXY}7Dj z)1WeD^Kdj~3w4b7R@w$i(fA=@V~B*bHweXR?G$(oEwI_Cl~G5H8u~^tQ^%+p>eM6k dqm}aT1OTQ%@pGf2^=<$F002ovPDHLkV1oaPHqZb7 diff --git a/res/drawable-hdpi/ic_info_launcher.png b/res/drawable-hdpi/ic_info_launcher.png index ec0cdd18ce167380983b39661aa29b74f3f81cc6..11162e1e7897f881d6a1653b67c5aad4e0676718 100644 GIT binary patch delta 1364 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 Ugtwj$TmS$707*qoM6N<$f<0ljGynhq delta 934 zcmZo;-pD>dvYw5Bfg$W%UpSCrNq6*hWMJ6X&;2Kn7072S4sv&5Sa(k5C6J?#>=ES4 zz)+>ez|hdb!0-zw)bN6Vq11qZ;Z*_ygVhWM2JwP9y8>;15^PD{?k)`fL2$v|<&%LT zoCO|{#X#BvjNMLV+c7XOHF~-@)`wV}o*Uxpt?VdJd-ZasvGr_zVKc_&ZgpE1{YjJW zu^gQ3zPHOhAwSNh;@12}@)!Ou*dWe7DRnW2V#^ExlSm`m_;V$16@|@DEI4hK!L{n; ztLy9IOg|WEM7}@d;Vs6+%Hrt2@Z!yzGdJ$u6@6PKz4#(Wc6N3}Rn@Qd-~TrWQ;2T)Tdqm*LX3+-#$nCR2m{ zJ$?E#oZ-g(`{$QzoR#jvkddA3{p53H=B#BpV%^+latt=V_*%uypu&(`T^)U6n=gaL z?6XWKkJY5Vc=d|Q+uQri?|l-zZb#1WG)xU*VW^+$*Pfr3m!@LD#+EmM@qhrL|OPsfhN{d9l}Jfns4^fA{RzvBJQ(ufMqQ17il%YZA^e-QmL!bBP8Mixi=rq)Azn!Xd=-@%dMB3J<4Ij-9z9Z;VY%vRmdx>u^KL%6EBLZ(H;)59Tl0%| z@813X`}gnm*RNlvD+%%Q^H=RVu;;|e{oghDgOZz5lJ{^~?Y9hg4`e&&fQ#7??IyOI#yLQW8s2t&)pUffR$0fuV`6 zfrYMtS%{&Tm64&9se!J6xs`#z*F%j~C>nC}Q!>*k(KHyCSs9u^G~C>};2%(fB*=!~ s{Irtt#G+INNBNZeq*MjZ+{EFVdQ&MBb@0Pl~7OaK4? diff --git a/res/drawable-hdpi/ic_pageindicator_current.png b/res/drawable-hdpi/ic_pageindicator_current.png index 423ca2b458686327dc6a8021b5518c241551e93f..6dbc4f9640ec04996410303a6ef8ea295aa75474 100644 GIT binary patch delta 453 zcmV;$0XqJU2-E|R8Gi%-008{QM%(}Z0h>ugK~#7Fb&@s1Q!yBYPZGFqTHM{;X58H; zeC&j~+Yk6=oV64D0o-jxwoYw7_sYHX@YemDc%FEW*H8gDTV0|v`Y`*9zDTnaB)67D zjO?(s5-PNnc36;9#9WN5(zDeb`g5@RN&mb4cim6^9Na^5)qg4t$-Tf3MmA`O*Ngi< z+s4jt%%%OGUN45=9?67|8+h99OF{wLL{rfu$6RWgP~iI#aIcV9pvDns;2k50sHt$m zHUsZK<7vLa1p@vZmhJj<0x;s_d_$N_dUchjT0KO z=VLRd=OZK&mwz-6c|ro;TboBMlE+kYEki3Ha^mf(HJSlVlpOkI&#M7ja2bf vQ1}b;)Ct#?kt;^87`zh^sCM7Sic00000NkvXXu0mjf08Qj$ delta 1027 zcmcb@+{ZCNvYw5Bfg$W%UpSCrNq6*hWMJ6X&;2Kn7072S4sv&5Sa(k5C6J?#>=ES4 zz)+>ez|hdb!0-zw)bN6Vq11qZ;Z*_ygVhWM2JwP9y8>;15^PD{?k)`fL2$v|<&%LT zoCO|{#X#BvjNMLV+c7XO-Sc#DtPim`JvHRKcXGJMzjL+U-6c|lW*<4?>L75C(e)1N zDozQHrCh;(#Gln?gg?4(c>BN_k%hDMoOHL8G;Q`b`?k0B%%g>!?=ubFPx>BLwCkix z^sS`x&uZA;m0L`IZ{7YuXG+i%70$J5)?B!FabnNo8F~5nj11o1-T_`8fBvkjs;xa+ z@1^NCsb&7>hZcN2hAa*yvwiPonD7`k|9p9O`mT!^GtxG%WaLQZvFu}J5MWrab=k)X zpQ~A+@v*VKJ%%sJcIUGw%;}INT7&sdS%~XgFjpE*5|EfULfi2p~>l@lC^afn}XHcbF&{7 z{IKj&lIwMQnPK9UR@t{$;}KA3=jE4sX7VoR^tf>A)+}L`#yz`tAO8FIuYc5Q+cZB0 zjX%XIE=wL+{8OENx;9!vWWwpEL4^ec3P1<$xc>UB_R?=NDnH5lGB_B1cG28={q@&x zzyJRG@uB`hK$k@yCqviKM|Oe_mpZy=h;`p*aG0c`(xkv3IPtN?YyEehQf8MbEmGi6 zNV8K&tNUr;e@}?PgM%?pYwCeB!P#qn*Y8hT`?q=K@~1_TPT6M}9#q~te}3+trc5A% zmBB;v=gvRe=H}-1X`64Zzii^$;qlkI*~M$6oSa;p{?vM}`=VT}$B!O88nR>E>D#w& z^E}viHLEs%?boGKx@M{yYx^+x?7I@=mAdw8^xA9u407AIZM#t#J8%7ocklAp4jejp z^5nYrzvr*nnzMH9xlb~`_x*qQ<3|PifkWrcox9w{;Gi~Hks+zL`190jR{{lhO`zQo$iUoVloNm^QZJwu0N`MdU?k}I#jUKX_S3Bw+> zMe7-+FiuJTQMxqfLGpP6Y!UuES0~5Y#iEBhjN@7W>RdP`(kYX@0Fsw1vH89aN zunaLYvobNTGBDOPFt;)=__R%38AV5KeoAIqB}fO724hPrW2lB3Udv2@8YDqh1m~xf olqVLYGB~E>C#5QQ<|d}62BjvZR2H601!YeLPgg&ebxsLQ05F@&EdT%j diff --git a/res/drawable-hdpi/ic_pageindicator_current_folder.png b/res/drawable-hdpi/ic_pageindicator_current_folder.png index 43fbb0e79dfd46484db196953a2c71eaa295bdf6..c6c4228c04aaba6a9e0da3a531f03f57768cd1c6 100644 GIT binary patch delta 193 zcmV;y06zcX1kwSJ8Gi%-008{QM%(}Z0GUZdK~#7Fm6C-O0x>81N|iyqRO%Db1&$n)T|(E+4H>YMv16<3 z@+hT$#YmM)iEHIcbg#6l6DbD?8v78f3|oRi)#M{ImRoqH@;W0_dZs8Sdb#is3O-uQ v75KX7f4|I#XL)|$1tq1*VCAo`67lIyg-|ZO##%VJ00000NkvXXu0mjf^Fmka literal 610 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4a)wgnKtcz>HW605}3csDg}6ie&Qo|yOj z_cGlE_6I@xH6QT-J4iWHRdn5`g5OItihZg8~-vpT}bC$&++*vFc?)! zTq88glbfGSe#2 zG#Fc28ACPP@LFaH)F276Aviy+q&%@GmBBG3KPgqgGdD3kH7GSPrLyp3Dk!cQJYD@< J);T3K0RV!{;@$uN diff --git a/res/drawable-hdpi/ic_pageindicator_default.png b/res/drawable-hdpi/ic_pageindicator_default.png index 83fa73fc6380784dbbffec1b8488fdef7e981eea..19945a5e86459eeef4388235c2347d29bfab38a8 100644 GIT binary patch delta 374 zcmV-+0g3+q28IKW8Gi%-008{QM%(}Z0ZmCnK~#7FosugNGM(u3lF}x+vsFr5R;b8I=lnF!3^| zFmM`Cl_Psq)`;Mg^O!(Lfm|VUN*49&KhCT^tCy

*z4E+N~((4YjEwf_mBPBpYLX#u*4K=TUl zY0i2cB3Ym20J@1lD+Ik;xD35p0G4CWxCFe>(Um(2(dvy3pqmI(!sjVS`S#pS68=&B z@3Q;8Jx6MmQg0eH90F?>5#L|;`L)$&_u450pI&y?BK~{`KueaZBqV3#?HJ5k=FJ^L zMqXkvNvG6YN=uVml7b|bz!H#DlF~%+mM>>dVqp1#8mCXvC#i9H0+_@e_f>8yeoFS2 UX}1I&{{R3007*qoM6N<$g2}_JlK=n! literal 895 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4R|SwaoQm;4me*cE3OwuyGTuAEYJ zE^Tv3dAazr&p%@s{6t*sFPrS`S=8aRbW+aNs4y?i?6)})P8{1dZ&qgfaQX6O{=0eK zcVC;e<=V@RD{srr`}_IbV}5Y^_U#}J!*KU)`}UnPH#4(gSakh$?d7Oond4=%qOxCo zt$NOovM}I7lfr|?R@TYhU#sTczki=UFF$|(j&;%Mi&CciYH^veW8Lqs&z?Qo9F!%{ zra0dut42etn~&j1(N5cA|7=Bj40ZJN-}~;LX{fT4g+ayh(F4&QQzxIQug5POKJ3iJ za5n98mWjN6>(LGlAd`z>O3=$W3LH%PcI|q_e4@;1E_X7|(ZZbHfA_up{@biCIlE_} z-|}L{2X{}M>e|0^=gH?XT#6A}qoy*5@$>Vaep~jt{o1S^!NwHQCwTdOA8B z3>8&XUhCGcUmNu5W@&6hcKWn$XZKAsKb#*Ksq}tbv+gEf8dEKCjVMV;EJ?LWE=mPb z3`Pcqrn&|ux(1dZhGteK237{fx(4P}1_qzDsVk#s$jwj5OshoGU~Fk+4ApSMYndrf wgCxj?;QX|b^2DN42FH~Aq*MjZ+{EFVdQ&MBb@0QM4dx&QzG diff --git a/res/drawable-hdpi/ic_pageindicator_default_folder.png b/res/drawable-hdpi/ic_pageindicator_default_folder.png index 55cab1c657e03eee66e832ca80d8facacceec2bc..471037427cd3ca850a656142643e5d3ae03a9dbc 100644 GIT binary patch delta 172 zcmV;d08{^w1ib-}8Gi%-008{QM%(}Z0E9_IK~#7FwNb?Z#4rpC4RD<(QH7*2YU35;O_d3<$WZX6667tF1Q9(tt{xtz`S()E6Rej-wF@O^ z9!sF%nb)XhXJl0}Jmm}>l!_U7N$E0NeLLJS@o<)Sn13I&ASJ9VxZTW>YiZ_ZW4S%x aU(*1t;+c7GcG9K*0000NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4}X8s7}?`e=VFh9g|gE{*_TGsuw%aW8& z#O||LD}KOCb;AND^AI76(j4OhT35w113qMD*}mxTd{gM>pXj)-`85A7vv;?e=0w>t zvOn%T8RdP`(kYX@0Ff`RQFwr%z3^6pbGBL0+FxE9N zw=yvJv`t+ZMMG|WN@iLmng(M_D`TjJ8(zyyff^)1HU#IVm6RtIr7}3Cx|jd} diff --git a/res/drawable-hdpi/ic_remove_launcher.png b/res/drawable-hdpi/ic_remove_launcher.png index c0814579a46a157e8da580743187f637b35cbdb1..ad2b9af249b0560e804d210768c0c3d3767c6389 100644 GIT binary patch delta 820 zcmV-41Izr%48R7E8Gi%-005CWW+?yw0|!Y&K~#7Fjg5RH^_0LS}|G(r+a*_rZJ^``KxM)K1YMo$KK5K3@ zAYyeMKDyGi)7&i|bU}J_JYL6&-EyaSWwg%EM>lyOzsdcr8h^Oo2SdZ7sKG3LtNuEd zgj=Z;)okaE@9@>CuSk}n$&?QOGzmbEfZyz@g1kD?!5GS{i9W(V8bAV@-7 z>p}3$U6XxGEPoLH?>*v=DV(1$$~*DiC3F9&ipjn+cOghh*u#HC5E%y_nCy-8{_k6n z-d)lqRj+SRu*y#M9(({9B-FIJS#VPb8Al$Ri1a>hi+{uq6DE%oJm0A@6MaV>LgHxLN|mU69pe7%1Y;es@|RA-@F7Kcz@n>3Xb;b2oV=Q857^p($NwX zJeeq1tm>hg9O7sHnEhit!5V&j5;6}w7#43WSu6Z3*@7QLCNmo95YMSG+ftCX_1=lD zFm9t=+wMi)B`GkOb-)r@BrRb)V*(5dmVM;icxVahhnKP+3P8SosXaNiY#uprZ(It= zjKK;=Xn*$q;F5Ww%ZrvZ);ZRxuIB%H-|2aMs+5Q4BbJ!zd-{>5ADPlTuT7Ol=pH`s zAPP}<;6dH<9-*NQ5BJg%nQbW?`AmAgH^K8x+`Y=8J4z#RUQL)hW*mJ$U$CUqj`*M# zcuV)NT9TUQDIO%$9(IQt__TFywM8c&^aVTD`G09EKuX|619-K5QMGFeR;Wj4o~L+K zwb=V=JxF4o0rRoS!5=NggudwDT(BHE#^8^SR>ItC0HV~5U|wC%&od(j??c9o3KhBw zZVco1&5ZQ?oL7e+DYb{Sc#*Q@($lvf?aJVKn?AE?r*GMEDN;yqz|><|>8%K4`I>wi yy)ABKh)LE8+?OfmO+YP8kqDC0{hZG1HjmJFVP>0CdovC z?(}tW)(@pVnDUB0yqbEWJ?&rCSX-xstejRxBiw9M%&BfS{F5oeqOdo`7&+PT2DxqVC`6+6OeCbslb0&Ajc>LUt zi58%utSllmHPs6Qqim9R?v+p$`k{WIB=u4Cv9Yl+CxDoRfoSle5~IkDfgowl#7`S> zg;COsUr)cE9CCPBS$m}M%Bp%To|zyh7v6f7Cc!6#76jH#DH_QI%)(faNwY-a4*Flb zus6Nh!JeOa{_tVoPAlrsqev6KSCuU#-bogfOcTG&wzl6|Sz)nQsD1SNlk9MhEb?AJ zQLEKfAQ-{-eua}m)tXC+XV1i-t2U@exg#Dn$dixz)bqNPO64bybp3^6dbUPh6$PyO z63Z$pqhU9{4uDVMS1@Xajx-`7yD{(bpmtWiuq!mY!xFXn5MM*XOMU{LnjE zMI#eTV=$Opy2^EcLogeSPe=$eqSV&bu4yf)T8LQSiNs=Ifb&TDJc`KoSZ&9 zaxq;YmKdQk+n(Q{t5o?O%lA7v^g$EFBqCHm+}6$LFBJ&v-o9_TPiJT{+o<51SFc8wvTpd&sZ*!kb#?h|;$)U|EaZ)>r1X0Ca4{%dZ8A9)iVZe; z0p2}+92v#hjad`NrQY2tk6*Pv_VD4?2?h{Qjdazuw_C0zTXrUdQ_Hu! z>WqqtLU43IZradU-m-NvmMU_2z;3DY&Jsr6vW%IodaP2-DO;<#8cSsG02P4>WpZ`#_tFP*#7+WO_Nu48(4Id**R8g<0(<+T5> zu~o5#rQ&kAf`U~{Cex|fmsPW3Ffb_SJEu$iY>1f>b8tX3eY13G{U)pZb&;&)-+t|J z173fahRk3c?`r`$UU@H>*0 zkB&pz;VZRMQ;!Qs5>&%if4+&y)4$uFAwR}o6zPS7tK${fh_e&|fzT1}y1kf$C{wOB#oNPI^IY7@ZZ7SJ>f)g0Oj=GSlQz_ diff --git a/res/drawable-hdpi/ic_search_grey.png b/res/drawable-hdpi/ic_search_grey.png index bd20ba0628c98a8383a5f228520b07b79d307938..bc50a47d19a2c71edcbc95e64fe19cb5003081cb 100755 GIT binary patch delta 387 zcmV-}0et?W1D*qrB!6W|L_t(|0qv6|R0L5JhSzrsQgL_sIk>g$yFK9!Ki;s6L)u6` zxYHvp373MqbLZgOA)4SRS7L(; zPrn>HNR_9VVg>Ipi*_`@g-!P78g|K|_tx|y@co}2PVCd)bALoh92=&o|3Un*PGm-! zXhvwwuPh$7M3bdV_#=%?pa}0HQ8!=Ypu|~Go=SY4FRG%%c2Vvr3^-rZK#5JF+(i7I zFUq4tmnaVuHuvTKn@RlO-!Vaac zBmQe^nC1zkQhfJXDz2%(E&7lOPnZyj94s--ItC3QrOsd1tK=-?DZDJLa=#l zV!2>%Ay`@F2I5Z>^d5vXc7h;Q78WAnNwE_ZRNu~%fvV%rmHy5)ETZG8jeDFPDcU;t2-a&|VFjPc{v2UJ7h)FP1M~Ieh zp71t27-}Gd>zl{CV-XBh5Tfgwrx0Qh3}q2wM#LvCBg8Nmim^n9l27`B5LKIVd_3o$o;ZtAtQ$0g9 n948Fw-i{2_2!VOjZS@Pn3p;fJu&NXQ0000urZV&1OuDP;oKwk7<&H4ihFiZFMM}Ogu+kUOKN&#A z%q+>GEY>!bU_J)C2CWnZ05aeQCLEvulzwc!6kos1(%*_eiLw()p_$pc1Tj#nv^-re%9J|i+Us2C zo@2zWpDPCWH-KHczA;j-M=uEqol3nqCo*@p8m%GzqjPB#z}<{5*u|ED7HLL~Vy6xu zDA6Jkxy}=8%YV2QXk_-|hk*RO3-J$5U|fqbCL3`d|7m_*6(^bhBOu2N_>l{lj|F)R zwBsXYpMS|J%*v^JWw5HiJB*s5f>5%p37XN+Z>TFsBPTuP12t*@^3N>V5sIF`emp*J z6FQ?#rof42I@D=8#hFp1$>o2t5cg+O#OvZ32p#iEynl@TZi=~T6oLwHPa1!fq>haw zz)j#4MpT}l{F|nv_pXOV0*FTB$QJuCc~3}Fme{Y{!hUSXdhEi*d|~tXMfi!SRctT+ zMYVylTp??m$Rq-7&>4-L`7TdAdm`+hzQU_OnHz2U#M1xBlJ>YQ+bGF<3Z9EW&~}EW za*k{cR)2^_P{Kc1ug;61v=F0$trk!_{V7oRyRqrNl z2>KQ}*xdSim`uoBfwuEaDilHtdob3NZ;P8B)jG*CrPaK%&w4^f(E&+I}MoCg_I zo=GN&S=j}kuuCaT>_IjL-vXHf{DiJgM(nKj-G35jIO+ekJsj<$c*%iY2hJD&jsR@! z0q`f2CjfZX@vH-vDQZUm)^d1c`v2T{02q;vJPMqr!ls!upBp(m(Em1%FcCCnaW|rs zK+lfEtGCks=3ULV#sFv=9%w0DJ5jVsDdLwn8IM^J77i^ZYePTLw|u_OFhkChKq02! z@qf^Hpt- z!JmF6>wWW@iWjsS3T>-@Vy;R&j*ku>$CEl2k1&KP*RwX$Fe)Q63CnUCKPUB4b!*Sd zp#`{CJdD$R{lj;B!ymym&9{a=Vr)|{(0`J=0EyR+-h|Dxwp1RQiE3mMuFyeKp4mvh z8Qf>=qZ{#x0dX-A%o_74M-G5#`4z|XS~2}Osx6&d4EbX zd6oW+1E^?6EzU*!WNJRz={u6s`Id872szmcmm+KOQV4`*|K%hm>-%nr@z{Z<`Golu zH{B>PN_U^!24bNQ0P(!t-ldxdlAJOlyZn<>PylysO8y8yr~@at&8HDaX5Z%Oo1wzH zKr^7g&fcTCkj_3umj{ApJ}f<8-&2<>IA;QNZ~Fh3Rv-uP>-s&l+Uw4!0v|K_fPPyZ zKCW~D6aN8i6ghy)IG+ogaXxbjz%XEx1EU|<54Yj=KhgsZMOZXr=l}o!07*qoM6N<$ Ef^9gW91-a z^WWGYE3L)Mpgt+d_*mFl0Ptt3+zM^Iw1L!4`l>Z2(yD04z%- z)(8NXumF6g0)R^gKqWA%+TKh$kUe+O+6qX1M{XUTD^)fI+PH>D+2+4E-t2c209ZZI z%EIw-&qRiM5&G}VO)*CdCsn;VU(5`^kXz8cqz$T{&&Q?L>TXU%L~PEl-=LnCi@2(Y zhgvwkHY$3$5xrd4aKk(g#j&!}u-f^~ zjB~baKD5=8U%bXAJ7wb({3?$7%}Ypx``1p+rq*SwT;FS{{3UUT39$p>SKAUY=DYVo zY#6&m+o=$j2My0*QSxSlia33}TneZ2etZE%OF`*;!Kn9yerohDCF)0Zb>V5nUxn-(yEO7p(Sl z$02oXUeD3z&XXDAWg2614+}DPA-G~d^f|d)Uf^E3ni{>h5Bnm;f|)jwFIK#yd{#<3p%J5)dd`Vq5zpP_x*pGNG-?+q8)* zY>vO}22McI(_r)YEIcoNc1Y(!qC7_5@M{$^$7AR4Wf6y2ecF}vVFe;I7M=f24{{pZ z^$%G@6WNQ{x+BmAX144FQqOZpEm%V~T~!)UA{@x*E0N#TAM%h-)cEH0l3niFPGhE= z=J`Zi|rDc>n+BNK+P<)#nTop0n+&|N&%k+~| zJZ{e*F4q*SUw5Q6?DSN{)yeoG%@o%Ud6r=}3!>A;HMk`=skyh8ms1SxM?tFy?bU@X zDwzAP5ZfF+;ZW&{DyCxoMW-(k*+%WVjI45b+bRNaxa7U;mE!XK=~zuU&SdMhH)%1( z7>}ZZQ*M24eunde$kt(W^gH&Qzrwo=rpM-n;%Q3V%QYDLLU@3u{e$(@v2(dC?6ys< z%qX4fJTz^)gYqf0mbQlA>rEtn(gB}42_-tQ&v_mrxBY${czWxpXHmNr0*sB|GR@^S zc3@~px^Mj!N^i{)dkLZ^JIvVd`Dfa*pJBQ5-6hH&uH7?$xa4%}d-9Tg%w4T*&1hfU zAbw2zHrS49nO)rXpr+Qt)Qk^Bv6WDeg-U@=Xn9mUEXt5Fjj8V%wy})NGQ1^;Ss#B~ zbQsYSqPBE_c-Zf<7_X&P2lt#CaMr#6Tj|v2Iw#<3Bp3=ne6(wCe)$j!`LZde z*Rb(o%g+NuPYTy9*YYNtvo^#~H_@vMJF8UudaG9mG_tj_m*e6H2aG+tZE(()lJgU1 z`6d7I#2L9dTUSy!U56FNy&nZSM-GJgvw39$eyfv#wLZTzbcCPIxPSFO(G{Lq@U58f zTEGo0DySJ2eh#=1fSsm9mn<}CcWX>T)MYC7kX(*TT8V;09wIdnlPFOil=DRIe3-L7 z3$c^*3zL?Ow%DPz7s=Lx=*<5i^bb*#ZD~7ihKC$Y0pq8N1}$9;FT86lb}3WDSRRhe z(@k>vNZkVNg(EgBtt3|LPmU1F4?0pQQECbHnH6)a{-*v{I44?pTn9^FAmLp8es9>c zYL7&vk#D>g`H1I4`z$0aScvrBq`v8OxZ^gbarlu3v^1y|^QhXf)dX6>sF@PbtRWEGx$0>M^^QhFO(`{8uCSx*Cvy9o2C~dLV&9O!c6wr2 zI3{F!^quj!MubrojYYh-RNf3iQ#rODYNGhQHOdBwN}G<5d68nbh{axDX8f=?q!N`n zs+`#n9d&A2^S<{#(U}FwUQn+IlRatq(Y=MuDcg*x&PDqk!_nCqqh#Wg7O~?M@!a3g z7|c)E=O=sAM@=~7*%ZgZ@~*XgM9Fy&U%6`4uE)96_B}do_@%{H(Kq`9c1NLAUl>56 z(m6RHt%L+SwVPa3KrN5Rp%i*Hyb1`1VNBe+%lpxPZdOk&uM|8Za}|B-y(oqe^xPE9~P;OKe&`oOWosgTUf6yHv&?5K7rs|g0UmP6w6?uPH*s$YY z6J7k3?4DhVM(T4}%e-C>Ide+J(0Fw&IodpruO`>p=R;2+@4WJLUb zLw~K$qSUbC_XbJ;BQ%^AOa~U;0q5u_qCd@t?m(w`M+7y~fBzkTNFZC4T2kZw1Ceee Ao&W#< diff --git a/res/drawable-hdpi/ic_setting_pressed.png b/res/drawable-hdpi/ic_setting_pressed.png index d5b5ca2044d41b3790fa991990447077f45a91ec..b86fce19fe73c72edcbf1d289a14cff5325e35d9 100644 GIT binary patch delta 1203 zcmV;k1Wfz&5xfbI8Gi%-0001Bxm5rF1cOOLK~#7F?U)0%Bs~*=-@)3pZQHhO+vX%~ zd@uj;^KG5Iea`IUW;%DR)MW?tR3)jZ=|6tA-|b@>mCofC^1x8WGp)4{(hHZ2}PRoIWz< z%c}3mW5NQ!kYS$POgWVo-bcJ%!kUph#IJqnc(IMmVcy z0oxh*LFALC-8pCl&?KCpcY$44%@8)TRGxN4{a7M$JT9?_ULDWstm3&JT0lxh-tiqeK`1iT zSdL=Hy?sE0b~s`guQCV#@1Vzp^N#|WFz84s!r_UP( zmKPRWCpG}~mDz6sEF?v@+<@2gcL2CbVgMZMI)A`S%;H-!vJ8NlL{kG`uk<(r$WZ1Q z0E(3PrH61B3g0-q`-)=KsT>#eypm-MfRi$!t>@NQV#s!C2E1j7D%(j2It?j4V~b@h z>Fl8;o#k9*h&k6>VgQ%O(P&FXzfN72v3PE;wVF~SykVYh)N6ZlN=+X8ZaD&*fD%ALdgal~U zva}?U2p3a~Yh)KK;yhZBa>3=3!O>zHzJGv>b^#c~>y|L2QC&om8D=%H%QY6RBSSSU z6_An1BF@TVa^fZoO~_MvJH92L#vLLQGCd*V6?@r?N9u6c1owYjWED4v$OupfNXlZ< ze)~4eAR|P+ud$rI@|@9JCM~%mJ~^*g(-AAjv!54aMEs8{U42Kgi>K^i43(xxUw>f+ z*9p*8^>5ihzhb;Jdb5NpJS;taCIsCI)gM5NCB*)c>QuAxq6DW({o`I#RjHcUl2-&4 zfSm1SLF>BuvNs6Y66q((m@oade77Z1`ZO5yH2_wS@fOu0 z4FVq0T}FLrfGPZs+>n(2xb$W0H!Lsc8V<6TeTIxM0e;R#)gm8Z{qOd>{U1l;5s|ty R<~0BS002ovPDHLkV1hYPFwg)1 literal 2293 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 delta 1185 zcmZ3%vWjzpWIY=L1B11}xWCEd~2k%3`jKlh(RRv@3TILO_JVcj{Imq3m}vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>j6vnBQpL?m) zsiJm%)%&$w@-k@&?`-e?JZD>ePH{`~toypBon($r@mro*Sa@;Q-o368Z7DsBfw?Q| zU+Zg5MMt(tLEnBH^29(2ywoA`SRegV{MjpcGLFlv(pso zmYu4_Q1+LT;l|y&OMh*@S7Z18^WD359e2jmMeEg1zkgL%n&sf{pp{>$)h7RRb5T%w z)tE2ca8+kZq@k~mPeglrdscq_d+W7d!>4+wswu4w(F#3w?3mc3lTW@g?6BOh%p^#n zt^VEn_y3n{U8k|s!R1k9+@75~f8M@z>(C;Ua*2n0jFJ)8q zO?cKZQ(N9xu(SRtL-gn&IZ}z8?P>W;o!n2__9B;-G_m} zYw09smz18&leN0xN|R1Mm0&n`{(SkaUAsO39i_0S@7z2lC8f2dPm6YDGpq{GxD#G> z`szyAt)FJxeD&_#zfJr1@1H+2-euL4MFu?Yxmpj!dubj%BhMgVQ@;}7iy{j~J-+Vh`tu9v=Vy><4;F$vG5K}-&Z z3~HQRwxveeu83__cXmlq+B9S5@_B`xDndo2rLBEO7#3`0V>t4$_Nw>sFMrs}ZGnmS z_BQGIoz?caM*>AmxfcI?!&!gc`E*sXk8(%#o*hZ{qU(=9;D6>vZj*n^+3Mt?(N(9xAM&jKW5Kt z&7QD4Vr!J?^5x6-fBE)}kNLy#ulJ$(8!)y2io*xv4>#!`=LUxqcUt*rSO87G(@2ugTd3)&t;ucLK6V2Eerkt diff --git a/res/drawable-hdpi/ic_wallpaper.png b/res/drawable-hdpi/ic_wallpaper.png index 34d59433601215f9ad0679994ff9c2c56fa69dc9..593605920278a763aa04ccc4af9932a669c1a42e 100644 GIT binary patch delta 1013 zcmV{SMC+pa@ZERwD72C#K{nGWMg6_G`-2Pf&z2iCf*SS4ar)sA7+l~K+M#rl4;8i}< z)CV@R>Ktl8Hgci+Ds{KV>=tGo!kN$A?ssp6&;4$4m>HY)Wq$~vG^TPR3e_XU2~Cd? z0bpraM}7s~vr0rL0k{r{R92~pE_1c3CeRgbwM{5w2xBgnSJ+?eQjefe zAh$s9EeA-6C4cJMi1F7)u0T-^a9;%A>gIQ&eO-t~n>L$v4sg{#DzNeY07C&#*HHh9 z0MymXx16B>s0nMr;x@99N#XmU0)%vCaf?EMXDt^~4D}J*gG?^N+hz_}Ljj2XYa&&E zF&rNDiXj1nL=Hj<$Z$!FGBkiakN{GgJ;Vyc#_Ve(A%BJx8xOGp5#c}-3VED=ZMf?| zKv>iDo^+30)Fyu&xEnwFsq22AC8YW|fQ>LFkx9&7-48UnKGxLK+r2d^`hoC`-JI%} zrcSd>e13fzG5#V>cC6!qOdm7+t%in?sK$T}Wh0{0$_?sKwW?6vo(e_vIFo)KV&k05 zYiUa~wSSDcDl8|J7qP-?YD-%(YBc<`t92mE-7WSB>wMMWyJ{WiVkHbo9fz+hUuL5g z)NNCGFH#AvEDIjfZ;u48nqmAg+td~b807%ST@SD6j(1t=m$Vdza4U|Bg2cP59u9)6y$i<9DQobVylDC9 z9ewJELJ%`}8M(5N;|#AOZv#83FHLDMa}!c1M?le5ouc)X&?P`je=L5kxO_`Xe#Tp7 zkAF4n1|YugjY2mg!-GZwLNAYC3wzkfE?sFS`QA`AI<78e|AOHJh^-`00S^a~#B0$S_a~Kj( z$SX9~c3nTFkX85;Aj9M3UF(eAM53sc1a8Ov2_QjU?I)9BhmzM=2xL`XSC_K2ABq5J zhkiLujpZ*tK)Tvz1F8T&ddjxt=_5kid>5#eg-rju-)Ki33z}0SWU0969q@k*8=W2^ jt5s_O??~gb{Xc#IcB)BbUReuo00000NkvXXu0mjfF{RlZ literal 1997 zcmZ`)dpr|*8~<%H6BB72%j?z-nHILWOtW&yWnP!FOst%=mAND#at#|@Mq^5)FqBj# z(s+r(u?h!WHl2e*Vx7b&CLO&AdDr{j`^WovKHum2`F@}0`+5F+a%uiv+L{KM003=o zs(XNnUA{v@UDZWV@#88|i*WUG1>k`|Yn268X-GnVmm8>mVK}1_rbnp(egLFx2Y_=1 zfUhcxqX6I(9)MXU0OV@`=*N|{?W3p$>PLLM+`;jVDsq1}uX6@+Ghxv=Bkyg#B(2)^nw&3SM>x_7MH2NLoZT zXc*B<|M4QNj_`!GXp?B#n#&~Qp!u<18hbG0T1*B(8f=?pQcDa`Q{^V=j)IZin~ zO5WIBL(Ct|g!sXYxiOmGRI ziOe>j-O3DVW^?Q-<9E4PmE8~qw>-utjHK4|^-^fU^LQ~Z}kE2JG~^L1X9K};F^>%lDs4ESonCzEjO*8%}`GaHs@ zSC`S8bPOfrenX_Xd2NIS4TxlPOxEa)}5@rtYcu$v+B zx-j-Uqqm>5^iKkr@2wn%I36kC%TJvWyWFw$hvfY z+V*P>_PloC?TSaa5SN--;+h7fTDlWmG`n;{erQY);TI!uUxq+5e&HxNzj2<%f6RtG zG>wqzpo@PDs}&azkNqB3?SRoRQM@TSJ06%ywW9Gl*{Ik@9b&(3VcX&5gb42}?oTvu}S<1%w5Htd<5&(J{oj<@~5k2lkU}Xp;!OUSo^9 zB57t@lCR1~D)(tPt(#gCcIEi^8A;wL zh;I)Q+CFh>DZ1zUdXbkqkzgXy{81xW7#lSm3qrL)t9o&o^6i$ptx;2(B^HwE6jsAF z7c@4jX^_eMo5861j6ACW zONqbS-$aHs?LzXdrNu(ZgG@zY>DCw6d4%=$!}WU*$8R1^IL)-KDu)<31GuM>ytqv6 zjXWs)m*Xk@xi1cs{r{f)AWss_ZE)FT3sC5eZpW&Y!mot%Mnow$m{Yui9AS{8zp(S- z2UotO{2v|mlMhx|VG5`K7EBi|5u6_6P(N2%g6*pgW7u-cFpsryo8Vg#u74zm9QUo8 zm{HDeYdEGiC7#0yI`;Ex?!g|cs?u~pTr}HA0fCy5jjTAI00K?+whZ#YupSAXE1d_1jDZuKzxTjoa zm5wFS!D(@MJ(vg9U9YNa@9`ZczJXKxeU#MwWx`Q_e!-aN3x*JSj@$$lS9D-MT9@X(nx;xyF8XC1cP^shcCXU*7X6da-i; z!#X_Czm$pK9-UlHjmGE31=fV~Kd(g%`kVna?^~s^a|X=JFQ^kH1u+3UtDm<3Lh1q3 ztcTock>g_tZW~)J5aNo0$}sa2hU_2gkUb7>;-UK7aVW*R?`uzeuHaszzb&?HS!(xxHO}%4S5$pgqD=am> SkNy3v0&fq0_j)&G_J07MiE=*x diff --git a/res/drawable-hdpi/ic_wallpaper_pressed.png b/res/drawable-hdpi/ic_wallpaper_pressed.png index 1588ce71741afdeb998ed40e49acd30ab68f4dc1..4bb1958adf283ac3a0555a52c17ec1202f8a00bc 100644 GIT binary patch delta 968 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 delta 1517 zcmZ`(X;hMF7=1rM+;Y!@mH|RqX%=ddl9eDX=%^>M)zKtHGDF0bn)3T_$=njH%&g3; zV`HV(lv`#~xTz1AgMQu&pjw);<{M|!icYN0zIZkI{JUPA(c9EAAcEcHT1ZZp@a3|7y#iX&9HAA7C< zu!?KsJ`G`8|L)+p?dP=NX6b6X!YS7$a|kDyPrOo~b1{LT! z;_>ErZF9_+;w z-$D~9JB=sfiCw$Qtj+_Q z2D}FR6fu)cr1NfS&xyDNN}L^i1N7u6}56vdr~~d~jYY zw7kzqF`h*Ub!PSJbuGg8C$?5um<#o1FW4h!m1 zPjSUXe=du~HTawe?1gQ=%t$1Ah=zaR!hG)8+eg27T;E|1b1R6)({m&HL&^(P1}>Rr zU)mPDcYNk_5ZhhVjbVCG=&h+|*5wUwWa#!oMQoX(8QpX`NNjf|GqUcgsTGUl=GDZy zPEy$y?mY6^`f ziPE{yV@&FBb8(efN+iAP)dbyAPnv%Ts{oI{a8AL^G^Ox3G*Cwoxaf{_T(s^hAkBkSmpQNFuRQd=lvx(j8~9@W)(^88Cz9`&Q;G-!Mbiu+7%8x^d1m zHRN6KqaFfmCwAyKG8a&+)%Ea&Ib}6cXVIZZ{q$zLyM5~j`b56`<;K62Eg_YL-V4Th zLqFzLVS7K?H2v}D+S)BRzN6_Tv*DVTe8-{4AKon9RZ~Je)c8V2JcLNc&=Q_|OoE1- zLfA}&;#P`RUIvZ&lDq&!ijjM*agRa8k#1`b$Y9?L0gv*6`!>lM`swpQa3(3I{F@Iu z=)Iqg>Hx1gt*E`fY)BMbx%<*>y|j7yEybwv;kuM(gXj%TBUfr;4t4z;2>Y6{#ZX(h z-PN?Bk(S}xsIEBc1kb$*5$psGH9U@^2H;3`*kn(p*gKGe9380+j#MWXd-7%~nH+gq zQ+EA74jw-uD)Q+6J5+o3nyU>KOA$NykqOD{I1Zpi@DFkbOdgxdVR6_IM+Kdnr6LAQ L&j3a>JuLMfwbPU7 diff --git a/res/drawable-hdpi/ic_widget_resize_handle.png b/res/drawable-hdpi/ic_widget_resize_handle.png index 844f3cf091e411a7465110c3ab20b0e797281730..b243aec99be5bd2b0b2f9057e1bcea3080699324 100644 GIT binary patch delta 562 zcmV-20?qx@3%~@B8Gi%-008`&uY>>q0tZP%K~#7Fm6gQ;)G!o9Z<2@W2jITM`5Sx( zTYQ7F!)1fJySux)yStRB(8(ihu`<;&KD{TN21&4F^64YJH!q)-BM1im|Fd)uU}@CQ@=!gWd*z#SWbO05P`=6 z*xRZ4wZy!B-P;MFhwBQctSG*kDk~z#@IV4LdKF*8H-CCZPRJ<&K2IpNb3RW1P7?ky zRH2@=HGjWaTTyR_!oSRr5W|~W+q3Ty*7o7eAxt*TYPmzUZ18r9PPsQ}_wAIH4R*>k z61AL`>j^m8=iBPoRE5*=ZS~PUzcS>Lx-_F0=h&U!p}Nhb(k zH?cq#EGrKx)NoK0Jv;;}O?T)F-6c)tdtz-r0q(IB=RA1rp8x;=07*qoM6N<$f>gB` A-2eap delta 1485 zcmV;;1v2`;1k?+V8Gi-<0035#XAb}X00d`2O+f$vv5yP0Dy!50Qvv`0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000JJOGiWi z{{a60|De66lK=n!32;bRa{vGUNB{r;NB~C3Yd!z~1f)qsL4Q<8$F)~YXj54jJ@>ws z#-#0of|OFIju-#>zO7mh%7p*Ndd3mq-x%bQ>FWPB4)sF3f!29{WbMANF_j4n#14se@wAPSP zN&r$Rg<`STe18VZvS1iSV5W7$3=l$KS0IU%l@(~Mp|zHCb8`kskVHD2{+De!oksKB z+}xa@wU%0ItgNhjT=ZsaSgn#S0KL^gWU5af+jU)p;WV2bbySp2S zM4}O`ZQGJ09LMQbO8FaB{58-dsg&{^$LS{t+qNYD$e@-40CaVAU6oQE0HC%jr(Hq- zP*TbRU0q#QgZdXFKV3X|^5m#e>cbvIxjEVolarH2*=Qm{HZwRDi=CEIT6+}b=4h>0 zEPr;oSpm)3LR(wgi9Hh97OkzV{mpAxtJMGirfDADPf^n}djOzTt2L$u00<$X`zb1f zhyZ|63NjQ50RTw)`zflm_5mOi3PA?55Y=k6u%Du}T5TR^bU=wlBZup{x&0K~z)y)_ za?H%kOlqx5Xf$vBPwvei07GkCnwgoI41bh z01$~p2mtwfKCQK0-=k=oQLg9n`QJC{ptrXd@pv51o;@>3Vr^~h*2XFE6{wM9z=x+# zpPI2)486U*jcghk8UjgNzI@pL5O!VnLE!jR^VD_S2LQsCE?qK6VrXcnk-bVO6n_c@ z3=a?E*s)^-P)(&$=gZ~tLja*5(du8Y-3;tBfKa(yewa$7&I72%<8clT52H{hKq>X9 zvERFQ50OX&l}bgnx3}Zs#f#yWFJJz2@ZiDkg%DqSMj}~#|Ni}NCr_SC-MxFaQYw`Y z4u`ex`#5**+*U8!wz06VfT^h|nSaS-Op=(Gm^f7`mBy4(#f{@?oAFgFl}ck16BDOM zB9qCOQ&UrNVPOHbZSTBCi;IiR!?Sqw=#j}_$d8VW#vRAGu)4Z>yId|m@I3D?*LCl& zuCCs89OuI5=x98M6oH>0iN(dmFU)lk>+9=HaXCId-aPGnI^%3}KR!NgkbjgL{kOws zhjr7Dq!2<#l45pt7Hey3=;-J`EEa diff --git a/res/drawable-hdpi/page_hover_left.9.png b/res/drawable-hdpi/page_hover_left.9.png index cc029d816031e93c1712fae61ed59115ddde043d..3f11d0b33dd91dcea948106329ccb8964027ee63 100644 GIT binary patch delta 83 zcmdnNm^MMumxY0WA>Eakt!I;d@^xtEG#s_(3gB#3Wlcp9NRAvj#i{88rC7yuEEDQ(UI&NeT{=o;-$l&Sf=d#Wzp$Py-FB<#+ delta 166 zcmYe>!8k#(o{fQl;fqDB6p&&mcJd720D>Bhlnx-Dv%n*=n1O-26NDMfPo7>26pZq8 zaSXBOeS3K)Z-aq=%fSR++Y;^lhc1wdBzffcb=sJ7qhFC*bcNs zs6AU}pv(|iS@Hf#znS6QhvGG^6GSKTSU>Eakt!I;d@^xtEG#s_(3gB#3Wlcp9NRAv;q-``-N m>ZW>vGuB4XRbqh}C&Lf3xWwrdulj%*89ZJ6T-G@yGywoPi5krS delta 165 zcmYe>&NxA`o{fQl;fqDB6p&&mcJd720D>Bhlnx-Dv%n*=n1O-26NDMfPo7>26pZwA zaSXBOeS6tbs6j!%Eakt!Ikr0<|%Cy85}Sb4q9e03^m5>;M1& delta 156 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 KMNUMnLSTYfYl#Yn4@^XGMq-y_e`+5(LqsC($ht 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 diff --git a/res/drawable-hdpi/portal_ring_inner_nolip.png b/res/drawable-hdpi/portal_ring_inner_nolip.png index e2f06fe9bbe6625e95194f417dcb1648c4d863a7..5be25fc8f5b3e053d46471e788910fe8f39eb1c7 100644 GIT binary patch delta 2230 zcmV;n2ub&gAh!{a8Gi%-005KLEa?CM2!2UKK~#7F?VJU08`l0Y~{)x7*?c4hYc=Ks&R#*3}` z|J7D)6)Wh+w@VF%(Vbr;Mj(Vl7u{V7LkKMO_&-o~>Y_V6x_=FZ7N1dsLL!umA}BY& zFe-^(64==lNBp+-N8SnQczL+=16IrY@Bq;5nB8sln4v_Q*4oqX)JL~RV8epN?*vs$ z7zPjoufzRU�NM{taG;r6pGPzIyp9PsceBL1pI<%Yh>@q${eAo>sN1`cGDkLCNk* ztoXM6@z<{EgMS4xTZdQ{Al!|Bx_r05A)cLCIli~-sJ?LHbKB0}m>`b`s1PtI5E=68 zV|Tn;-4QuaV)5eBr*^=EnF7i;3y8}@9=V4&^awgU8%70_SXUvl)B5yKVUfuoZ5RBAF z$hkArCrX*8amxOS^N9k;6K5=LoKoh2!apa=sWa3mGUO90uYb@x1qG4z=EWyG7^eOK z>>N2mz9=>7^^X(^1@KP3{*fA$yTfu9GwPJ5N4C%O?u!D-yKno@obAC z$+K@4q3_Dw;N<(vHeWbv*ei6Zv! zh~d}41sZz%;mAfg}v$<=~72Y2R}HpW$-(|GZx^Xp*RB zq|<(<_~3FWzEgk4yG9hVz$BD_0+YlsV}FnH*8QJG zHMm?+?fy?Q{w^)U84K1&(Jk-UE)Ut3_dbdy*XqzS#A-FpGF=|B##yPgI!`kb=Ebw3 zVONJNeDSR0IvuAOv6>CBE$iT7ZGTzU5Q9bDI61>{jOJygi$m7D3)NX+c~{COR2k&e%wpV^57 zb3d>bWf;4f&LYme6bG?s{%Z9|bIVPwg)bk_W#R z&u?q3|JC-sYA;w`_J8_s(H6Y;$ooFFxhvpzhuy`=8HX=CQd|1NKM&hu zFtX~=vk$B1yFH;8B9wu{P}ul~*3i#Q*H&$sao3sqt$S;|5rv&2N1|A7tb6Os{bt;? zY7?~7=i;9?BVgIZ%uZkF=UQUVE&XQpm>AR0EIaewWNCtmtiOPGf$<%>bR zf?UF||3XRwei?po-mov2Y7UoF1q^J^7$(99#haEbzVq1oKkI?PQ4&-XFd+(weUE`mfX3hMpD-MGy z?McR$`dK(5`uBN-9FqAZbB82e?8jv@el~VO-RR0uWkbBRYPI5p2c~V9n%<}P#x{jF zbgvJ#zWhZ)3^puYCcjJ$V9?zXpkxh0??KBZ5DHrwCVzPmbmqsm0a|1dBn?9WBOrPy zU>EYF2AMpfI~B(ul#HWV2nU41i=3c)8g|f9Adp~CORzYGMP3n3CQ1elp^y)Rk=?N% zEbG%|Xz>I>Mc!rpV4iT&C0V#TXswd^7KL7v#07*qoM6N<$ Eg7O<$+W-In literal 4107 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 K{XNVf@_zvD3$L;O diff --git a/res/drawable-hdpi/portal_ring_outer.png b/res/drawable-hdpi/portal_ring_outer.png index e7b436b7ba3dac3611b09e288a515befca8181fe..712eeb20ca466a7cf059feb7501be0777d4e46f0 100644 GIT binary patch literal 5918 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 literal 7887 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 diff --git a/res/drawable-hdpi/portal_ring_rest.png b/res/drawable-hdpi/portal_ring_rest.png index e3b13393e8b3aa818ae59a8d0a5e3ff26f004104..33cec3218cdf3586b8307f9ef955028d5bb22bee 100644 GIT binary patch delta 1505 zcmV<71s?k973d3)8Gi%-006dP*h&BZ1+Pg&K~#7F?V5#iBRLbrpCmgBx4gk){;1%X zzvHEXW5%L`KjE06;Fy`2nU({~%)IN3vrdJLBk4SGJ2iESV~q~|y26R{oA;(WsfPl=to<+xdmbzz8XaVqAPfhPt|4sHHo_4!9uA69ml7>}^mG6rO1M{;%l z>Tg!u*gxc{D%@FS5VyFlw^Z!yx}PEa zp>ltirK0=7(N{_?p-_kvBqSewW%q@pxv{m+RtbM@c7I-2H9fTpp|^$~UP&La zU>#-Pku$3&`1f+xzE)4z_J44&ARVO%v+95KH)>{%nYXd>Usr8@G8*hX${=1F(R_pE z5>gz7YGNF!8t*MGoGqi4Aqb39-R6v(d5sEnfL z_tljDSHqSx%Kv*`4S8w=%BCC%0hlj2|J)qG#ZD*Re1xi-qs00|zq!Wq*e>z`k&B1DGLbMXiQyX;jo2&rx2g zU|R~j)O0){!5r9@g9HQ2#uMTx2bR0u1x*8n<0;nvdw}lfGmd^~BxxNqncc-CdhNbE zAB{T_HYE{vo{#2sE7Va9#C2~p1DndAFB&Jz!lT#F(RB$Z*pfm59qXV8vtUOx)Q0r~ zkbf3~AHat7P|(JXezm4cCZVl0QkVQ{O(2fW7}&hL8;+$>-;K@7XAF>|W}uME=0%aP z;HgFeQ7oGWX$GnRC>Qm$6&pKa7VcAt7&dmkwj#F+0Bz=|iljb#b#1yYU{5vrur~eS ztC18`5Y40@;d~ig*&abEKvazsB3Rk}Wq%Y7MGq5D@)YuupH~k?kqL0jN3nYF6Z+3{ zAYGsHw7ut-_vWc>0d>EFZJ4Wmd9S^P{4|c9!go<$UeWT!QglPYR1)1-iqbvJAdl(RBVW&)Iu+}YLZM1wJ*Hyjw0}pw z&aFtO*c+(F2NLWj?g29gjcJ`c})bALLJH!y0s;2XUm3&Q=O>^q>Q4(1xGzgKSyW`qtx5 zOzoh!bLIUFALz5tY|)8^5JGhBfrA}Ub?m`o52!t`VoX`63}FahDA^>EPJety?}pBe z?dw(!&}Awpid^QOpWAx6EQVe}c}#G6jW9oXOw;&^YEc5nbi98{$IKlWHJpXYqf+G3 z($i&+tDJn@`Lqb9?;-#~(FCdpk79Sr)^Q^5sT&4Gn1ZJ4E>G!DyU1Zs?f+PT*_jgV zDK_*1dim`|QS|vTJX7Kym0IwILA|J6@4feE;U}P&(J>?rMz!bY^QGwX1#f5q>un^q z%lQjW<7l(ZjA1=5-ma&Ry^w)}8mz+%j}I1AR8d70WkJ6JeS{8Sir2%M00000NkvXX Hu0mjf|4Zgl literal 2794 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 b)?-}(L-??Ur?KRI00000NkvXXu0mjf1mdnw delta 594 zcmV-Y0QI$=5i1q@r@4jb(Gt8>H9;C3URJC{D z4hU7HWy;XJye?u>PZ9?P#?VOlBr6cG-j|2vpg%@cF~)ELdVk6!$4Lcy#j#g-iB25+ zrMe_ca5S}Z&y5C0t)1I*6Pav+k-6c|r@%{=bO^V}hLYBeETO2E^0Fl${1flQP+i1m zHk-ZKZnxh=q!bZNIf|m#uGi}i^ZEQOFrsQw*dVQU%LKAFo6Y7^p6BmGzm1;LVtErSfO*4kSUp)AYfvL0*gEmc5_Wq~g zYK>j(hFh$&7RWCt3VT_I$hLLXFN0iFxsq_sgpqhkc{*G zJzbQpW$@oI$fjbDO~oLaia|CNgKR1W*;MpSwl^VJ?|(Ym8`@;Utm&FGJYtTLV|~C|NHmfJ`QnyXA8ERaJ|`j#?DOda+o1oKB~AL{h}I zZOc%lcrSt1z$^DYMMfLuumaoz8{j+elPa9s)0P|fi4SgK2D~8cp6oN(d*HXL-ADst zA%_4v;7gZ#J)$Mfc}BtpJ-FHp*;w%~r_J3lb!SVenA4A=Wy8-y$dzGVi#hOw g@mg2d5K>kC0^EEctaID_ITuv+sqoe#{ zL^R-xq_T#@ggGMWlm)|uV^hl-zF|4u*&w>_;IaK1TidsY`F~V~_w65uT>JU`+vPVe z9=|eqZtU`6tgBl)yVrDn+KW)?F!Rdd;^JAYd4h<}^wil#S$6KE_nrVy>Hr|;9Mx;u zTd!*AEIH~BJ9vqiHYjUAR&%M*EhfuBmd2OfWo`Qs1Vm6W1yBS*mW}9pHiQKrP`&^l ziQLa)UkW55gnz7^MPohgBnySRot!?s*K;)aDY8Yj$QIcmTV#uDk(~`$E}d;pk%cjy zL_A#NKq24@WscPpbLhFVQu*o*WscSCNfw5$^ZxDY^S=7`(1vnS2AZ#bfB(Ar{@v^I zR$qD@@?25Ym720^>nX-)5#}cNQ~9BMQobqwV&evlCsqEj6P>b}_?|2cvcIgh^fbs} zC;nBw+wzLSsbm`)Wc+QDjTC2NQCYHi(#{%HASxS?b{QXlh%IC0pMznNy#50TXSa%E S)rOz|0000sfO0E?F0^sT%y3^s>3=WpmNX=AxI)MK7C+UVkc6ELTbWc{zfecMXAbv?m}%m zHUdYRTr|a0B0v5QJi556P*p`rOH9FQBZG^fcC%Tt9peh#kgxLYW=H20GA`2p;+g-Y RWdYDw22WQ%mvv4FO#mpRCJz7r delta 201 zcmZo+yu~;{vYw5Bf#JxO9BUxOQtadz!T|&|94Q?@K4*bPWHAE+cP9ulnx8zq7ARQb z>Eak-(fjtQBVUsPkHf|AChhajGWT|tC%UiURy@eM;IM%C=km8E_P*+whs}0==G!=x z=S#M${RD}RZqwAyKj7MsDkLo-7-#rNZ zsCnkmENQ*U`N|SXk2ZFAOB#N#ydM?IzK7xKP5%Gvc|lS@hcI}$`njxgN@xNAg9=bo diff --git a/res/drawable-hdpi/screenpanel_hover.9.png b/res/drawable-hdpi/screenpanel_hover.9.png index ac8e83dbd774008f189371ed3306022da3d6282a..f6b8c62ff3677a5c0c8b5a32a472dabf8527aece 100644 GIT binary patch delta 115 zcmcb`*vdFTGKYnMfgx}2k_|x0$J50zq=GTof%(6of>c6ELTbWc{zfecMXAbv@6~xE zD-^m|JA-sQHa+^kxXWGiv6qKQh>pXQB*u=UFt%K_TBZQ$6|e03a=L6EGcoXPEG@V@ S<;-WGxeT7JelF{r5}E*`P$(?` delta 201 zcmZo=yu~;{vYw5Bf#JxO9BUxOQtadz!T|&|94Q?@K4*bPWHAE+cP9ulnx8zq7ARQb z>Eak-(fjtQBVUsPkHf|5oNM;9Z~wUE-m%3JNwFOhc^8}!F#mIR%h~fwd~a>=S@%S7 zT2o`*x)TgR2(ihlav{qGILXg<=reZ<1jNbGnbh$P{`Do);XDzbG*E4E{^pO<$dgv(#PfQYhu0r3R{gQ2ZSklUKl(fHpb{(mg;1d)PZ zyz9zqX@`3>RCvaFXSXczt^CXSzie!4>wPO*mUw4-#y3!3Y(K){Je<1PknN+LL}#vZ?ayEYcUc zx5@ocHjPM3APC@r1kc2dPt&vT<8pTvoUp>km6p_&U2+f8RA1sqRyf^RAD4R;Ui6fS z443@WPfek7Qh@=>x!uHFq&CBU6O;Z+Iz#<93e&qDdriY)JHYz>rG0+*0QR$~N z{qWBIkrOOZ5bPFb%L01v?h$Z=KL!ED!?AmWrsNB5A&jsg*pKbr`D9MtD~BBl7@{c* z3heKd(=zIv|6@B?xDc$uTm4`qs}W^kkYRnRpN27mR6HCA<;+Mz*fAJZNQjk4 zu)bHWS*npx!hw+X-AE7GKN5Dxh^5G|?bklQLpMMQ6@opJNlRP9)R-d>hMg>xZ|yUg zU_nEWHjqL$S5HWdsygea_=MEvYEtkD6Ik#N@<~1?ed}-O0!_8zfML9)3!PU^mO~B} zg58_yTgMf82rMulUSfb{#}GO^-J1#)9E9?z+kfl%MR_jBh^NSTuJeohefiW4B^U_y zdLG$@2fITBLp+5+eXu+A=FNPt&Oy*PRB@{`1=ctt5Qep3s=q&}_SupcInQM<1UGDH#izA`fS zKTH4%3?Uuv&+XEJxafn9UYzI0fy4bF1%^=1b4S3Y0Z<{5sGA1x4|g8aKoIPYspJA) zno7jNh_p17+-TJsZM*K@ z8X=-+TCwdqNdF%~K0erg(UH+mA)=^9M*I7Bd@$ty522i%)*gD{hU{c4J!5bUcd znvpf@K+yhmjSGUxvIN@8>O#;l5Eh6k7V6=Z4k7+@TI1@(bRxyBNd|+EQj;85u}#fO z`Q9W)Pzd%=4tK0Bg-Hj(GuMC7+g(LnC*JPL7rVK75NiEo?z-$N>WaOiFOQ#3hN`o7 zIylsSQSC@k_fEAuVsUV&-rh<6;Cj9lp9v#G6eDfLKe%3R7i+jJn+`=cSRkNendwk; zTQ&?jCp%cl$i7x6;>qsOT+P5*^-gwxkzBWjDn&eF9~r0x-;4pg9iQ~41FC>$JC!tI z(||zU4(ab1eZ2E zn zK<6N6EVzrmc_HOg#8Fsm6TrA3^)Io=rsCvT>-h?-o;LFRVAykjsK zwU-OxncMMlfp5K*G-eJqw*!#!TokYTd|6Grq7|&h@%b`}<>t8{g^=$A<);OdwAJK} zSH4q|o07JET0lJr5`w1G+x@ky@S$6`h{%G!TDuXU+b9WcFD5+Otgf-qbzvQ%wteQkx?9O?QA zx4E{Wz2fWW_?!enh$IAM(>vbk*Itg(vUq!G#MGQY-d@_WxV;?bt$uKj?nR@fNP_jd zMYI{Am7L1_!Ugy!n^tDpV0^cTr`EIRRd*R+%u4*EqIGS1iJE8f=G<_qyFM! zKTx&=-be`s(ESSyju6J;V<^8DMTV1u)s*BK)CNH z;4o%bVTThgBwo~9yiVH&Gw-|z-%+3=9d*|-ZweIpQ%9Zl7vJ0Q1;iH+u?4z(+C}m& XC#GXxG}Xl*00000NkvXXu0mjfiO8B3 literal 5153 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 literal 3214 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 Zs9-vd)ed~{LVM{C!G+{byh=DI{tuB@cYFW< diff --git a/res/drawable-hdpi/widget_resize_frame.9.png b/res/drawable-hdpi/widget_resize_frame.9.png index b0a740384ba7a6b4d23c45c21d1a08a72db25285..a71093269690f6fa5039393a6878dbb4353109bf 100644 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^p&-n`0wgE>Nw^54nmk<`Ln;{GUUz3?GGt&m@Zun& z(;{|zL80i=lliV^ZvMU7d#3-oDMu%7{+HR*^{YAr16+9%9AENX^UAbv%PE?Ux&H6Z zEnl?gnexgND^|#bt+4&-_&a)~9n;?p3l?Dk&$OfZru}(qk{)_h1LztCPgg&ebxsLQ E0MMjPPyhe` literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^p&-n`1|%)Mu80CsEX7WqAsj$Z!;#Vf4nJ zaCd?*qxs3xYZ(|A%{^TlLn`LHy?vIm*+IbJp`@pzS(4&P^}k1|CY7m8=ZLfU@ws5? z_eOC?N%_~Vch;;raV8@|cTRp)hV1HHo7HzHFJ|iDGSE7(f`NQS#T?rMOIEdYyePl- zZ1T+e%FlMTuBy6Tw|?_{Dy{`IW;w-2_xDN6dKGwl^ d=2y-6!&p}r&7I^BB?t^x22WQ%mvv4FO#pTxlcWFu diff --git a/res/drawable-hdpi/widget_resize_shadow.9.png b/res/drawable-hdpi/widget_resize_shadow.9.png index 6e2932dcd0c4aaec6f97a8f9c09828316cc9f1c0..7cb521405e3ecf126b97114d06e68cb1ba968bd5 100644 GIT binary patch delta 239 zcmeBYX<(WlSODQww9anl5b_uQm?66p{uTJP!C-d0_9~{OpXc&3fv#)>L|#xb=l(dn#J?_Uj1Lm z$}IancL{f+)#cCk(%KAGFmEV0{gnIeCI)YhD~+wcGFrvjKCIABZqr%W4m9fXqF=GG z8F3k${kJw6?YrP5&R6>DSEey&aRYoM-xIRNUCDi^`> YwwT=li{Iy*2l|P@)78&qol`;+0Pde|BLDyZ literal 527 zcmeAS@N?(olHy`uVBq!ia0vp^p&-n`1|%)Mu80CsEX7WqAsj$Z!;#Vf4nJ zaCd?*qxs3xYZ(|AH+s4_hE&XXdnexeP=HMP$M+jqMN2RLuJ66e@|UqRc21`tOY*x+ z`!_!i1h_n_xHI#%WA0;%Wm~5mIu zQ_8j1K357|r1m`dW$>iuUlMJOPk5qwGP~;!--4hklWVJ%e4lxK|M@@W5Bx)VW_|G} zcAm;Lt72Z4Mq$E!vv(^Q7Bls58E73?(Gc4e(;72*mHL0@Un-~XJfF6UVTHuk8K2Kw zmC=1(c|~ZIi)`^ej-PX;Eq#46W-9-x%PgOzUf--)zxI=&sY<0!(R91*yN=kMyuBsI z($hAqbJmx@;+H2ZQ+_)ixVFB2>K}g5CUV0C9<0mXFaI_7)YmQgl}C&^4zioo0b`WG M)78&qol`;+0D$?^w*UYD diff --git a/res/drawable-hdpi/widget_tile.png b/res/drawable-hdpi/widget_tile.png index 310ff8b3dfa654ca93f03e93f95cc300b4317384..572bf6f49f0d1796655a1dbe2afd66f893b45857 100644 GIT binary patch delta 118 zcmZ3;(#|+RBA*t2M^6{WkcwMxFE|PwQD8XW@M6xj;_lvC z3-k^($Fj~mv-f*_Kt%DmuXEPz=zVB-IJxaOPrsy`u}xaVnGZ9DjKGcjo{fI)F^_Cz z3zqV)=3vi0dhb&$(DSM#t`Q|Ei6yC4$wjF^iowXh&{)^dK-a)9#L&XZz{JV~$Tqh! zFzD2kPe;*^o1c=IR*74~kAmg5ff^)1HU#IVm6RtIr7}3CfZ diff --git a/res/drawable-hdpi/workspace_bg.9.png b/res/drawable-hdpi/workspace_bg.9.png index 5bbfa4fff6bb6a864d6b897417d5a6fd66b8b86f..ff751866bd1b1735d95bfecced92296bb84e087a 100644 GIT binary patch delta 142 zcmV;90CE4~0iOYo8Gi%-007}+U}yjU0A@)1 zu5+RWus{GK%b@|HWkLUzKgf@{-j#f_zEXeCKgd(?uw=tSsVq-sdY-2z=uH7Ln}_aA wnEfMK?ZPV^%#4A*$=>Sz3A~aIT^mR%PAz_1YXx%g00000Ne4wvM6N<$g5(lCdH?_b delta 209 zcmbQw_=s_WWIY=L1A}+&ipM~TrP#?cgaZg_I8r)*e9i)o$YKTt?oJS9G(UNIEl{w< z)5S5wqx0@`L%stFJk0C&?9pGpyQCu|Fp!DmMA}VD9YwYYEDC4lG+a_jMGd)m0zr$C*r1#T~J~d;?9nxV8WQ002ovPDHLkU;%=fPc?)9 delta 205 zcmbQqc#m;{WIY=L1A{K>BY7ajQtadz!T|&|94Q?@K4*bPWHAE+cP9ulnx8zq7AV-@ z>EamT(fM}DL#_q`j+U+J>&5f`c4!=Xc}J&f2mg`VFZpk#Xtmfl@64#p<@#jprMYO6 z{tcz)ix$dUeR1cLdy?V|Pe6uOEDcQD1>PzRmdKI;Vst E09LA4MgRZ+ diff --git a/res/drawable-land-mdpi/workspace_bg.9.png b/res/drawable-land-mdpi/workspace_bg.9.png index a12519ebdc33dd48b1a399d0980d4e14732000ac..626f4a424d8d4c190c799d4add3fc268695237ae 100644 GIT binary patch delta 122 zcmV-=0EPd_0gM5V8FK^x004N4SYH4D08>dsK~#7F?TTR%Ku{P0Hz()d0GbK>exRLi z3wTZXk(WgDH1sp9Z92E@QgIos`c$|ax*ZeMgojBQ3F|hp81@?m`T_IddCo_Mnej;#3wk=)5d>`Xi z#hn47rK*umJ9JU;#KMo_Vd*Z`|3MpX#015yANkvXXu0mjf%_lsV delta 218 zcmZ3)_?mHoWIY=L1H;bqohyJ8ORKjtES%*t$W`#$bm##kS*P!2`Gu!_G=L|Xoc7z9)o%FBC~(Z+gg*o&1`e??u#|q>(lGE{10~Pt5W&?rDxW~z_u?oi{!m;cJEof zm}g}M|5Zu*N&20(CHtS-&MdCDf3*5s$M=%lx-{LdRWt9McIHrQ>F9XDxbR97!&Rf( R-awZzc)I$ztaD0e0stZ$S%d%p diff --git a/res/drawable-land-xxhdpi/workspace_bg.9.png b/res/drawable-land-xxhdpi/workspace_bg.9.png index b0b456198c6d541f526238f15d2d2697a51856b8..fc71a0f20dc3b356bae0bdf43cd522a360d3007f 100644 GIT binary patch delta 149 zcmV;G0BZl;2&Ms$8Gi%-007}kX?Fks0BuP`K~#7F?UF$jMF0!~+oL(Tn}HR`8vvi5 z*(6E3Ycq^FpL*c^W9C#c>L{j2>}3ZmUuH(j_<=%AttaUlqb*oul>N>$XC=}dJ|T$n|2@5?>s+=LY)s zu4~`gPEpjlOs|@ysO3kAy<*KO^4_nF{~(_&Sj*!XRB z!yW=C*ttB;>wU6`9M%Y9*oxy3G)497sd$Dt0x>-Vhix~(%uPLDXxmCKhr4y4dkQSt zy)_>W*7|d1ZN!u;X3uWAry>&q2V#S+IHPVLR}xHvS0;9N%rSH$1dk+`g{1QO0IeV& z(%meGm>>q|7|-(2E>RSB(gNTC2Lz56BD^R^1sMRk`7lJyw+eDrO*gfOmtcw*dostB z%VoA4WsyJ3@scEk9D)!b5s{$kVxtmqgU%L%3Io%(J!~VF4jGLhRKf{{WV%p-S0g&WS@4s>xwO)%sSYuT2Zj%n$%5?54F0I@jF$3;FJ*HWSuj|nlUJK5q`3L7O2 zPbz{WMS;Nc8lRM6U0O_#l$4N)YM`ry&A0(JTobl*ZKB)6#{Y?x6(1TH`8k9}TN5x) zL>L7{)QEA1nPZuD2Sm(T~%IN*7)3pDGNcp#}MC8>fm zP{dS8s~2GHHq)$ diff --git a/res/drawable-mdpi/cling_bg.9.png b/res/drawable-mdpi/cling_bg.9.png index fc49c891ca0a0458eec8591cbe5f28e9d790e09a..6384f29cb2923a582e341cd10e6ea37ab2ae30b9 100644 GIT binary patch delta 727 zcmV;|0x1342kr%sBYy(5Nkl6(K>fcAA%2b7_QZ-mS}DqJ4|L01BwFe4lZZho~6bD-a<402K1gOBF#fswTvO zSP%>1vet+Nv40>I#DaLR79>3oA%Qp_dBNu+`J(xV5g9ET8#BbC^r3GignY;PMR!rX zpalS%Xokq=?2?8#6N|BF$vSLac9w3>W8>nB*ih0-*tGOEwy*l+mBDUX@dj%b+@M~g zL0|s)yVN!Fk7Go??$A^N5ku8Pb9Uy&NK8exBLwwo#($7L9(h?w$Z;mSn{7`)rw)bm z#Rsv&!n}uUj7pnX8a6H2!!du0ScAA2eZ7BadW83hXg{zMU@azIUxQ77bJcH5{Di+^xP{F z1p;al2{n#6RPYPnf&@mQg{Ghue>AEZhdTbCWNl}6riZa>*MG5__#^Em@*}Oh^1hmR zpPjFrU9{F5fCB{`5(lbVjClQd(^slrqOy6d^Y8<@d8m$aU~hr~kXV-FopaN~A}4Wb z7WH}nrCzLz5U^dY^Y=dvuG;__z%E9LKzBHnW%21JZ!s7C7%3LfTA-0Hc9=AAy#m?% zDofw~NWD=3{(r*=>AfQFzdKDNe1SmV1N_sa47LrgoLS(F*K+*+XBMafF5tEp7M{-^17STxGH&V}iyMNphkjYn3>bGW~-_SI6vutkN z2OOH)TtIYhbu~Zz>~Q|=OUy?K2)T$>60K!NhZ9H{!nP9#rpBJCQjc(I>p%@DJ%niA zP}ePRH+!AicXB`#v(;55si!eJE-5Ttec2`)3R16I)EgE`n^>&`Z@wPpz4I3cp7;>P zDC4Or`G1XXNd52~jYg4R(80EMpJevvf0xaz2A*;;t>MwFkGgx#s(-^)ZVJ3{%i&ZkO)NS)w2Y^!pR4wY33udSXN@7GL6KSEUzVbxIMH416A4^)66$+?GTR* zCgZ6p*?V8GoJ>+I6)+MGLr(jnia=Y&Ar?s!kB0V@@l=&e{xZwSHMYwmOYqFf2E)kQ zTz_|n&izU}7Q(X5_AK916*BqDTwP63s*FW~o)ryGQ|7kA+-#at^Cz1!?J3^#DrEAX zb0wLgTxm_QBTK+|MW7|~$6uW?2_S${C2|{|ab-0{xw6F=C1Cs_(3YtY3I9Sgyou8H zc~Ds5YVv!Er6T6>qI}9lg-qu|e*gdg07*qoM6N<$f&l%=E&u=k diff --git a/res/drawable-mdpi/ic_all_apps_bg_hand.png b/res/drawable-mdpi/ic_all_apps_bg_hand.png index d94bb7aa1d115534d456b0e181f279e5ec61a3db..8868d6b7c87992a1398a933bd1626542dcea1c88 100644 GIT binary patch literal 6951 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 KWNSZ~hy5Ss4Nv3% literal 16483 zcmZ8|WmH>Tuy#Vw;O=h4N^p0F;_mKFaSc}7rMMJ|L(w8df7LeDX*an0QfTi0MG~k;NfiwdI$h`K>&b1W&nU-763r#me-*!{PqK)g_4{! z;Pt;(QCE4|+YFMYg0c+KCNdcqhqJ8}Bme-2Nh(N7X!)+3<|74aY2OT+#{T>EqvOxn zpA{cAJ)Nc3IzuO_cVRAGua3F|>hmpeR5TT+VcZf32XkGfJf80Hw$ zK1kwd*q*)S3Ee82P_R=+&~c&M-U)Oo|)V=pV& zw1q4Hvl)St&;t|JqnDcup_M8ZQvIrdf(`KC26Wj@Q9KAK#m2(@@b|B1Bt=6s zebx893!o}eKtYjou%Ow%fE$5Zcy>Lt72iN@CvHUBItBfv13-Em_4J5<$VWUMzIsS? zZ1GM+U$_xI3Zr0RmTyL(z%*b$7e=Gqt!@(pLw6pyA9v5UN0tu`W0|m;YtL^o9NgS@ z4^spEo04U15&&DOiW=xe7(yF~Xe&u0MXGqmC3sT`CV1_zvl}3xpzdW1_-gn&^mBAf z5l!jN(iX4DWk5hb1l!{#2$|0c6Of-*koP1Rmn+S0Xg{ZdIFnwI z1B}!L0ouO&VF4@ve*mJr2%6CcLM!$kIMA4AU1%26Uqi;G>JK8(I!&9eA-pzyXfA!Q zDy8H^_vZoVZ|I{7@ZUO+>h=79ln)#baz~AY7$9+&&~OFp>0b&FrRWB?|AC7L9VJNs zEHPcUBj0KBb^fD`cVTL7^z6T#vobxGatw_zmC71~mtnlHa0_KS8e~~PVjmw5u6W33 z!^9OmmwiQJPwa2N|o=4IH{aoZs*NnOq$5ihtq+czPnw!6_WuT#`s>%y>BpF)#Gyye>KW7i z^O(P#(24}W;7~6`3(-a5mW`+Yn%S!Wlnr)^*dK>!3MJbaCA*r{Gcqy)FtJGaZpyvJ z)&sD*0N+TpQlxu_FAG|OFs-z#cjXN{8cRwm-YwZd^vDtt&Rbf@gO`4-HP5-UKAW}V zDAf}DRkBIDbQy8ny7}sc|3Nm~tVtiCA$59vHBLLyaCK!RQ=ct!KDM#(J%B7E3N^hw zNgtPnA;8?6coN~_hBH?kl=SEW;9o3ms2R4sWpLawW5g)1gNg&>!%~H<8$VLfT8fz6 ze6bccB}woyWK9BcJD{`)WM`MwmE{1UjRB6RuwP&|Zz6Q`_ke3;y3nK_)NIMF5-O2- zCh4YF(?#FJ(7VrVFGO@nNd81VbgX==u4bNU&5AGYL*4R(-scn)6nx%7m_cC2cnFID zC11MJbN(hw^S8g4shD>AK}xaP^GnMck~>+};y{r`=N3kVWBY>&s6$q>jr;;`%Pjh1 z@e91!F=P4V%3sOq&>5In6OX2$YbfQUg9@}m3Hxc5QARpTufR8EGh#6!Jwh{LH^P$~ zN8M@xx2y!X@PT=J04AS@J~f_Rn2!~wrn=Pg*|FDyXKNu)&xT%_4U@^AjuM?y7B~nh zGc+*fi&%c;I929~#RNAV&ca`DTNd}I#rWHR7KTa)R&`ZP(RA!q&SS6F7$CF%gktCx z3(=R9j`=QE8~=At1mT!5`RQpZ+{i88%4xt~4-fzOg5f1la>syRb1B36n2YNW7y%70 zeEv;1upvLov7`_qceR{-@A8vtky))w!%F+at3h_8TaGda_jueF&58~I!c5E`3-?yW zTy7ib#=TD>U)jQ*bftpU=c|5RDH#~#g{_`;BOr#DGTL*CT+~ftBsD1kEgE#51v=x9 zFD7x|!v!4}r+F{4prJtsdb9`#7=1H>Mj=R)tripbRA*@!gB8}(_AT(8Of9I$izt0U zMlcy3m#FcGKr{~$sPMvcQO~xT`;2}>+my2hzs{bOwfTK5E`@6$ngva$FApyvuubBt zpI>up7|SI*D%pGyBYYedG!|YlKonpU3Zi69i!sq1Up^#C%}ka3^UvRcx3KjSq@0p zJ*+!Yk`n=AV5;{NlGh5G1{pq8o+3uUX>#8iisg?I=X~)J>IypY@dg!Vi_P^ zha7^aU*Z4E#U*gpl!w|K8afLrD8lbsnMDT-r}w6&){Y^>JX4NKqcJ z;l&O=ry`IbK!Vyi8`KaedHeXZ5)*mr>gwDK`cqM;<-@K>^6#Q!Vg`DYVs%KN>`u-2 z!cY8IW>6j~R&G2NtOFRXPN-(X-FM~{#0WlZayjn`&%KSLtC9GB0#*d#LIIZV+bKO5 z*19ddc>MxgQ7S9>u*%mx*E0L8t}1Td8K#ILHjt*beJ?5LLYiL=s%TrrXACD|VdA%p z!sP^

9*4VvpOL20n9Ns(~BMP8)fr0q+^_?=?Ad2<3BxlNs+YM8WXg? z?h3PaHu2qr$76{#(ihsH{*lM6XjoIp(jy_RKt!q6X-eU*VVFg`NRnBAqyD~H1D~GN zW)yUG5|2ixBE=;n@miZw&~532)7UrM0}Ca4GKRZj%`g14yjyhXnQ089m}YVoCp?w% zuz<^MrO)_aoG)QhH^nfw_&fQ>;$HG9a9LICtnlF4EN zRIXcmackwyk#{V~uHxy7`?;t|~sFR6Fh4JU*U9Gd^Zuo>H#~zK){50V|+_*o;Rr3mx#c_z&V2 zmKxee&FayzERUM z#2OQ)N|)RBapWvQI8{eWirInm9dbq9sj|(Es1tpQKWI7D2u!sS^8>j58fYjzf8Syi zV1aP2rmbl5SeGT-Pz!zfje9-auGM~S22PAk*qXEe7a)s8f%+PlCqgM1PEVZ|f`Wp` z{R9Nw{)*H(yxtC(X+6&eSYQO!?CQ#_WL83Q=AyLr860I` zzFiBAud(lwB+%&m0J8IC7mh0OVtP4lYt-GhkbfVc;h2?PL8%c{N#4nTTK%hTSdLC= zh8env49|04Nf|Qz!*(|5!#2LA=(LpD`6|RW7SxMwraXjYHlvt4IjO>mnU=akL(_`$ z%)TG-FO^=aJJ>)qvF)H%&wPKip%1NX3#V5E_ewXJi>k2asJ%YnvoJBq%gUz; zgL-T|=D&-94e@1(anz{a8B@f*&81{JYHT@+`pEN;gU7cSHZZ%12%gnA%LpXliK=mk zoTD%?vzC($n0yI2Wn^Su;E#J7I%zm=F1H>Xwy*VnL~QnuFd6;Z3xzuFQ%H|pu$6)u zNmI=>0DcplkjB$Tz0|79dH*Bk*k%4yG*D}PF^bh6Bm>T%ub=uVm(B47Cy`${8zG#YJ8dL z>CYxoID60z)NS`;l{Mb-y?KyZ?$d)n1}a|r?TTO3#t~}YBX?s)KQ?v>9n<@q&il8U zq5!50(xlHG-`UQaYs347mxC{pCj3fq5aW2`%3XvPseC+}(`0`*i-$Dv3k{35sv0zG zbI7V|SmSZV9Y-FaT86pgeZx5mr1j^O3|Mb657M1N_cFfJiY6^$_$=lJeL6`2?S1u9 zr=vw#O7fH4Y-q-)qDh&#-1~N%Iufr<;y^hBGO_={Gs>^^jh~p4KnKpT?=WgEH7%xj zlQ{iz-M{clC>yQ7eWz!>iqZ0)<8uG2$aR-;zsF;B;DN|>I3&P+EwZQ?eMv;>H0-zz zVP?;i1!uIn@N3GyfWIR^X9NZL523A!T0~QlBZn1ssaWJHqN|_f&mO2^#-FeNCb_a_ zpht+wMXV?hqojc>gkA&(N}eeDCz54s3~3n|u^~<(sOJs(?s9-R>OT;WT$C?;0YwJ* zBs6lgca}eJ_{`Pe_OgW@4pcDipgbToi ziNohVhSL+fO^S6B3StO_36D)1C%u2=%{6+u3l&u}hYQXMEM}%jvCq&7di`rp;`c92 z`it^~zeq=w-d8Z~%nZlgc7np*Sq9+Z;RDp+X$tOkKyOi%DVm{oFZZe97|;Xz(e z1IL(w{s;lvmVqbdC7&-SVPFrLX}PG)*64cqWz2>()^98K5NB1>v3c+FtLS03dw2OC zw~0%EMnez&BmH3oXmXRAeZ9WMrt!)i1O+81%cEwo39XX)*I%O~r zIraJh_FSo6f$c(RrK*s0i<<4i0@z{F~*^btV{u^?8^@x5`b)^ zLXpr)#HUJmCo7`+>nLeXXY_aHg7Ey7Ye;T8o>wJ?sPaMKp}Y_AUi5JIMAcYC3)ONDr#T{j_6EdT>RHXPDpP7De@ zz4j;5l#RuVk4wj*-TOysf=nD_YDpTVBTQ2fDVxHSvXWZv(&Z{eT&{Ydu%q4O3goMC zTLr5>RaTsi;jZ(#g2|-2Wd$XHZmO!7N5ZpAx~5DpB^l_w_!<9>TE=DS2JPg8sSH5~ zCU4kEL<(HsX(zI7+F+ZrTCxBLBgA$i_>paut)!g;DvF~tuvu*?3BG3RnNEQgg>$d z1Z@iZ6MB%KshNcAX1Hn&c5BoT%7Sy<6~U&Bo^`OqIOSjjC6#M|mC_|#j4)(^bn zt%A9mKubiBs-|TNhOx{pV9TMrAG?wO8;}=e5xlK_fSW7(I!6J^#XH1zu7K6U`#b^1 zv_Eb(=w`w$lqdgS?3MC(zGf%k;+W&!5F~aog?*itAAvl_{@tFTxyt?lox>IL>zYG!#O(Q%1X zf5lY4BnUShvgVy{edY3~skEhg{6HoK^Iy^NgGclLKZ4@`J!3!$i8n#Y>nNT3{CZFK z+gK-tNS*0a(1zaotRMaKVp^gjKmdVAXlCO{FnjGEH4K$vnG5$|RdL|+?)-c>z{krg zm7shspdbnkHgzd@fegnQ0XaTxEBd9h6Zu(G`T4K%^6uj}vXVXETw66Ng>7>%IU);L zm7Je9GorFjfhO>&_dQ$t-*78VQY5$C`4LeqHeZ>;JMMo)k%tJcjvTq$`S1QzWb=D> znUW3M|0m(g2ahuwokdfUsF9$YtD}%W9-Q2dvRaD$`vokoX!$Yyzq#}z z;}Wz|*dFJtR-){!7Uh0f?dMo6rtH(AawIB?crswTyt%09Hk$8dJkSU zP{AJt6*IXZo_|rdGisJ@+q8**-4-fDe(r2~pNPoD{q~=aa@yL6Jg793ZEBSnZtE22 zxt9EA33(-*{`fgL0*(7ziTleaA_y}G!_RPm1d>2A(!C@x1`nS)w}rLvUfoF)Y}l}infOg&bNbEjXKkz3UN;CIyq?TN#B^c!6hg>u$Hb$G;4WE#52e0LoCh zUvY18ACGF(BqbAUmg%?hCS2#t_B_(9s~Nde_i`ZsoG1Cr-hy=;I7dj0v3C>iu9?IS z?dNgld}Yzz3c1j4!$r=Wc%OF#J1d%d=`{59%-F|nxb-OowX^I;r1J4fV><`Zp`fB7 z`TkmEC{Q3Hm3#T;&Ya!AkiQlMcpQ<8m(#>NMfh$26ZNEQVbhv#mYUJLf4`d?R#=a6>WO(C49DeRk#~&j((+ZX0ompQ~R(kK@+eDy%WU- zc4y`-;UA%6F(jwngRE8owy|BPy@2E{BjwKD zc~hQ+e|p@Oo%0}BpEe*@m88KPWi`@i=FPv6S(AID86w=dwEH9R2sNxF*gwETxR_ge zEij{k{cb5MDxg()6NbGMT)RIhE741$lBC!&NfWcaNd>Wtl`)rl|GsG){)yMuQ|Yh# z?fxCdLUSs7d0vz6L0JTu{S0N>Q!r^IL(YQIZMVPhK+VtJo7jF3m$g0)k#7Pb0CKIeN#xR`q6 z9M0~@s*r}gg7b}B_fZ^Hu0KtqY-?pym1{|U<|N)C%&#>AuHtnB1L5H1R$6jRP!Y=n z881RNLi@)@pC*a5=p6sfAncF*Bjb_V8_FuB%ryx3iHXW|A)CpHHZ>DPb7S+UNtT86 zt(9^j9dAd6ECye`Gw?g*V_=Rwo5sMBo1POY`2u$@KwN^w3%Hva+X<(NJWUxqe?5=e zw))vQjSV`<&j#U}^oZn?I^rg3Y-_1)PdsvOMW)%ySnQMN=#ZBGmbILj56`z%vE{1# zRxMO@R(fJiSKNi(L5b4^@ zeJnOtYsFNpjam)u7?2hgT3J$k9l)@m4qGwEfhQ8!bZ+_;V8b5MA2ijuDwiJ(wv^e) zSDv9ub8cmB!MQG-^yTpj)FjFN&Mc#0GDh}ymIO{X0eC``5sVC4A7H2D(Y9Y9dafrW z?64{Q`b^D5DQ%_)Fk~x_Qb2RM4fv$TO>$k$ypH`aDYJ{~60w?b1|jZ@Yo~VH2CN;O zsv{WX^7LojyKj?8Y^cFY&VcTVU1!uc;7SX$U zN@u*_j4-6>sSuVB8H&j4laPk^>?4faLYplIVXC~f|Ss?VM>|Il!_A)i&i34-!!q@ z3B_127|&VC;?-}IElN?50`a#9{z7Y42`$W~>HfjKP?$P%c89Ziie@0_G}my>l)S3p z8Iir>IXRZg=S_Qg?cP+INsQ1Zoe!5FtsRy(3|l;W(Yx)9mgdWxal2KdkM6--O6{pp zMO4lEVDnAstI)mKjya_1SK^tL@{<32I)y`0%UaYA)g6a8d?ckKo5k(yg=;-v zp1agm{jG#>Y$o#|vNjkchZ-&bc|&-X5Q$VktP?Ep-e9 z%_(~hVr^e&+~cQvybomK#gs!w)@ud}3Ec#`kll1HJ@h4d0MiDduW^VkeX4Lh_Xdw^ z*JNa_c?h}ohpk8nFbm0=Y}14@B*)*AM427K0S7nn6H!tTdcp^)Bv%z$pE^ZapW5kU zAsxCDA)T*jm6ZMrA{Tlqejk+iWHV;EChJ=XN$1^q_4(Iy8-&E{(8e+} zJl5;PGXF}eHr5bs7Zw(0rQZM^TfXx|K6zB`HQPiYZK7;|^2d)Kt-?)0vQBaLQ)|&n zuy);zP>QBeduEeuzn7(2Z`!7)YWeL2cmZejGSjYd{K2>dpVt&IZ+X?Notu3z?s!L4 zYRjX-lERk0X7)Nzx9}{`2{75e9gNk;TgRq+#?Fn8`_L!s9Gx>a0SIux>SJL@QU}8? zgS*j|h6Hj+HleEtg%NnkQDX8ZepX+HZYFQW%WA8>3@yi3(IWgtuSINXX=(X2v$DRC zw;nK%y}r7QCU=oPk?^?Hy_m)JeGr}DI1jPpUyOhFZy(vFf33W^LHP>~LAX?jwUu@6 zKQTT;SLn!1EmDtM(s8jxYGq_3Km75~FjiNrqI%0sC|Fz510kKzSjMF!Z(ZWBxR|Xk z&f+~vQ{MsNQDJ-{^k3)9><)qQ>&ft(C|3t)Mi`fNNLBT{R`{H#$MA83H^*fR!`!;M zV~Yie`(K0BqbTXSYAO2wu9m7%ABCVD-J>&iwF}^661LZAQZ`IbY3l-S7CX?6UBh+} z(Q_pr;)I~vKH>TC&(BzoZ-1C2gf85Nw^h=Ecz70q z?r1>rk3<7r$$SvEaDjmmGGuql67urQaD`S)dG;DHQrMH9a`?Ss+Xhn63wrvsJK))0 z%?POVfLA>c%)FSAjV>VLLHbRirZ2ScRp9aIKDh^;)V-I_G?1FkvBd{an$VUT;N;n? z1TW4O8OBt=t1i{p*eK5gFam<(0iS6`GVrgR$;;h-LnsO7Pi$+=WTXdc-?8`O5Fz-y zTgYGt#taS#HmM_Jg|GbfP0BZbcmQL>@IN{&=q1Nx0a&Z766&B@ogZrIjs#=Q zE=Y|@;n^Jp3_yPI;6jVW-Y@k*Z<*Qgc`XT3(;kBPS`c+&Y<%f691XIEbqQAG0-Xq3 z!rs9_nupp@qengA!a`|PRqXu2!tB86TWo)2_}~!=I)axY>r1pe>wp1&-$5k$+l)Tfb`--BiFSCCDcbpM|AA$n5?oKErb<6>D_99 zSlBKRh^{5BveS+Z4u`|Ygnb4G1rO83IH~#h%G{8)fy9QxX!&nD6qs$p06lO6z6UtU zm&^hSOSK|1=Jw5ayyGWJY#O)uOYbHGM)VOWzIhNcql?s!LY95@Q zU^pLCN;p)qYEP${hl+(ulV3~2BWLa?57=JO*?bM?M&B((GF*qIQOfnkLo5bqOd8?f zfI}ZH$Si*wlT#anr5J=;cHvHI6JGdgcy$zSWk_{~e_moR8wqMer$R(1>n4J};QH=; zHDd$6+1bCdscAo~sX72Et;qD+CS_&5G8OJ27XFGjYoB_H8w)A=5XqG8f9VfzY!WM( z$`>T@pg8>bmIT`2+si45L3MayfX={6V+t?tTc_vcD z-9Ui{h3hqTdoO)b5w+?32kv}vy|szX4c zaDv|cefJyy`)PahZJ%!u^ zCm}u_Kc|M~gc*+!1nRLpUU27K0NW}}!{$g0C56?@*{u=lX--af>859-bgZlp-H}tm zQ0XzxLgX|*{tfo+#rs-biZ^>|@e5TtkQz;gzIQVvGnLZ_Khq$ltCN|dSE|^FG4t&G zr$8JJfr`I005%FU6{P7{tTvnSk1Z1}OK@%ifPZ{E3k%v?g_Ki(1 zYJj4X@M`(!=;(t4af85H^Qgzeu#@mLxZ79ZwOfr5?c{HL2OH2wld`4b*4`;skQWbE z%NglgIZo#6Y`SCbaG0;?ZGRe-6&8{LgJv-1JkivxzDAEExd3YzB25IeQnr~l~D5ir>QQ4cI2~L zFCwdMCp)`4@O(>J#tCArHtm3&V1lygSz6?%~7Tm_TRF zF|qHXj4RdUB2pgxKkvtIhq>{f$bOWh&pIH%-wcB3xgMywpY|-57 zb@lZnP6yuhtQ{CzQ~c0KR4OM$cCl@Ct}_xveIVWq*B&7egY^v>_!-z8A<><+o@sjN zXverOxdFP@9jX2mv>ONSEF$9Z--?q4!K=at z-jvi1=_mIeNs`GrazHl=^ z2QILA(V@Y!=_3S>QLNsZoE%$1LsK(xNs-LSZhCH|{+APY;Ofh`;^jXtTmihANHQD0 z%}8HTr0@d?6Zm_vWHIx6FI%pVpr0Haf8N`Ew?GlsMh5klUNtr{>)?7bNunu|)oG-B z`66kd<#I)gwj(!)lKAvQX8!tO+!qSkL>U}J00Mld!qCs*L!EG zamNmht)U5rBuz_nkJDk`$#*46?Dq`|x+792>5#rtN3(#2anmk-bh2jiL9*(>*8 z7nfc&9k>ks>n#Zl{y>)P%!*5O6tx?11K>$uc&{54%p@w-xj_%$Bor3JD^5EzH+W>`W@_!4Ms3a)f+i^JsC#)kV)o$;eY{>LL6 z_WbuLCIJD)lFG{3SXDg!=WkdEh?FYKp#QGof}9^A!MP{{AAd9)$ZCM1ZTC(=f!JHy zf*;Hl#?~h?a(nFl4a{hT0wo7lbpf{uFbnQo)YhtDV};fbBH#{*L3j8tBW%h3D$9zx z30JS(mw+l5vu5DtPBCNWe{^(u*_bgQ=v$;_IPtfPoliz)^%am&xY_rbu9CtT1oKsjcUUdf#~InKiz&|-+!Z7)Dp?HwHylGoH_CAHZj(}$6p;$ zb2m07LfiiWv$>0bW0^$kvy7Xu`w}@jOJiWMt7C!l3D4|A9|pvXzhmbQyu08M(AN)N z{M4}S@%r*y+SWEgXyUt!75*?e)5PS=TJ4Ts5J7$31?yl21X92{)yii)8@?;G&dZw3 z3F*+f=~9UyEDvh6EjsZ&4_I(mDzHJTFX+%?z^H6&Y;SIc+qW^EucZ}sd>~&axP+4u z4W$_C^XJb=+6t%AO`jz?JL>8Ps&TFdM;ZAU?4z+l9Gz z=2!Fu+?-H%l+uN0n>P$B0+Y`D-NmD{QPiwWU)%lSy+;%s#d<&GmhJEBRx`64*gs%C zQSfJ>qS7K^QqWz9yj1n=K+mE&I!KDUyLqSWxM@bZUq1fFc0cnIu5R+c3uSV-#PRX5 z(U{MMC=I3GUC%{R^YTuT=y}>HyOB;old}tpIw;7TNeVlXE9p3b^)*V`xNyw+Uqt2GP?>E%KXtEtxc%eft(Ufl@+W=@P z#Mp-nHm-1X`5c9S&eO7LsKf6V8A>j}Pk}DpH#&%}h0Ud(;>2!GSLHlB8s(hD`3wq3 z&XG>S$389yjoZu(+Hjo`V{GBaD3CO|v@o?9QKsLeFD@>|wZz2eqgk9YDf_meVeHqd ze(9)+RRBnusyK_on6SA93gCG&Gl)>%cij=w-mr)t?Y7P{v&lJ^7a7a;XsH>-y4oN)_WL zL@WB1Jy4hf)!ogvby@;FXc<05K%i2Rl7|lhX`|-aW}X**@bFE?{0`(Kg4ppu>EG{S~v> z{a%-lkTCX!#W7m?B-Jt$e_!?&4J`*B$yH~6W$q-+-B6Eo_sRC|^(RhrL4xX$N#Z7BFSVg-vLCjviYF!~Vb018 zF99UW5k;AqIz|mA+0*rU2vPl^!^FbidtgD`{QUeLfJFk+fy^mf{JM{r_~^xo_E0>r z@`B{X6?3T8KwtouTN*lpNg=2e5Bu`4(>`)ct)0A`T)lmKyW4<-Avb629k840t3@PE zp8tmK%bJ@o;m9yR?dfB^coU%9GEE7(5FFrLo zs0C%sv%h8=i@ulHXwtlg&+s#c=hwhLO9G#0n~&Ve;M;^CnTpX1Co*1xl14f{oC{1F zlAT189>%nOH7va8d)JNAc`8~ycklh?z;L4-BHo#^HWg#mRa}g9(G3tXK5<%&BYx9E39QbCMHEFT*iA1>aplfkx6$S4?0P%dUo z%r`+ob~12R#FgNW>~AjKc_r_bSJ{aIxk~IX%5>78K3`sEMdjrOGw!>>tDlr&Eiw>! zbQmG$JBYS<-2g6?8-e0x$cGb#Y(C+QR?BauHznDvyPE zmNBK^iBxZTt)&tYZX%2N5*P&rzJPs>|2>fE@r3zQ-#bzbC@U*V>guu=WOFRpG#yDe zV<=I1KLWLO^LL20xXSt@e6@g4%TsSymSU?5h04UdNxv01z#BsoGi;F03W+-x<(InE z#5cCrk|XCO&>We42~s_sV7i>mUwSf)rs?T zh1m4#DWlhHL``jf6t4Mh*HY@ksG`!T$2f|;EmZU?f4 z#4(Z>g9Ork#apAPO)2~`FfBI2*ZGM?57}*XA0jC=X-)u-3z#h?w??LhR=UX{4&lPn( zG6(ELMOlRb>E_(${N5ZhCL!+Y4}+WuhV!dOb-4B@KaWoDh7%h#$|->6(?+FHB%?3d zoDDozt~&R!lpnIv@34%Xv{2l-P{j+hFl*BCXZw|P1X*{iVrqjZgRm8|pOO~@& zZBaqMdL){5nMynxwx;c#`x}!miVqeaGbcD6({1Qlpn#9o%+1YBYvSUXbH6NCDRCc^ zmPt7^b!9AczR!!0iyqgq2VOAmajv|%MSsXV|XO=HI^B1hXV>@7Oe zs4;>So&CDY%98vpQ_Z4K%TSCY^=`nhXHC|#gRW|TR%>?>_qw}cwiXAUP{|?H^2eW` zXWIh~9gYD2R#Fo>yzeDskmaw(M_mOzln)w=v;BBJXDbS#FW0z@KChxlB$S)oIPc4f zN;r_6Y^iSRr?e#t>JI2z(iriyh>!wxbCt_b^HmOxiS6wXk92B1^+hW#dy}ymkN!^V zjh&jNJUt0JFnvOCZwh1m9w2d!3P-`P8J%h1$Ch{ovE06}M=X(5Pft zpXM*mzmB}sUgk=U$8nINF&mw}K}0W?%PhmEKxHo;dj}Wq-D@sh!~~9-;jp`@|Hqjy z!r)M4o}T~mQgwqC`Z)!uJJNa*3G0U;+q{vj6-BUxL$|hHp3Uq&L4=I_H;4D*Yoqv$ z!Qjq~k(~WaIF^R-?IP!Fl(!o0iOSK@OuYO$Hb$1XH{+h(xAd^(_&eDfa0j7q-=c*M zW(%;^8jmA=WYm9GGx*4I%rRuVNyxi$ikhc#U~(~7*niL+<>>Ne<&gu~2t^ZZL1IoA zSN`UdPVe6NpAuddOsIzaMpqGLut(!;2xSr5uq1bi>&5NCfW0?E7tf{Mv;_5tiDy!e z6!l@O-5WclQp!D2tGSY?NdXTUN@=8OQO-peM<|EZSDt#wO@yFHLvcX~n3x4$_s zil^U+)^w6iDLkt&aqe6T8v4?E4uto-T$5?qe6Bl8N4i1{LNTm%=b# z#B68@gvb(g%>V?EfN-7>j@$`D_3Zq~Os*||jKC?!2@dNeg{QI|hzIL%WR>>sTt=P-;@OF%3>Z_&PbY+rWBkT3K#f+z|FTeBZ&YRQE#&IT7kU zcm2lXiwe^_`FLp7W0}7`w?S;Dd(r(SN8z8sX18_fmUUvRxs75YT9(hu#r=e1Zh*Ny zIn+K4n_fIopNFF*5i!E93C3i`RkGwzw%(6ICq_>|D!5b0qKFj2i9#nJMou-q&z#oM zt|VfTq{XG3zAe8*f_j$g3()+s^HuTx@~0$MLME%aegcN<%~^|MoRes^&9Q?)d&AzU z0vL{idb$`p-l4-NQRA4Zw&4O1L`&23`9qDSpI*D3>ZXRGH>_%KQ&+SXrUD_5>)bv70`07vGS+ZVXpRKu{=4;#|w&4U*(yRB)w8#vQ<^$Fb@In)ZfW|G?ByT3;4GTmkVMYV2VG25t$tosPTW#7b-<4lvT$KGTh(0GvJbnCOOMs5# z$<8H?)P$Y2Q##yqB|(ZwVM!4lpYYPx30aA52~VFbeatD&Z_@xnFe!FPIRACZ?L?Yd zrr|3x$2WOyO1}S0h~#@gw50Z~vN%YuPtl6>%cV>^=SJ-dA+r$qO4#eSvy3?Kzo<2XyZJDWvcGXyHzM}pp zFAV!U>3jDcuPh{lJ$HE|c^RqmQ$28#+lGE}-y|zaRSI!S`{v~(8e#k|MM{MmVXoxR z14ls=M7&cell;HMd#xMf8js z8e}w5V2T4gYmZkK)yY6V0+3IPl{lk|Ok@Cjq2=d%jGu3NNg+1)e$Q(Qfv@Yv;)4%d znN%g-*>wxvmGE3)YePmIV;r<>;iO9{Srv5&CFG=CL<0+#^zc(V&iMF5Es->fq&vW16 zwLb%BeebN_r7u#LDY6>GNd73dz4NH+6MlM+2N+uSrLfYG%(ED>x&0bw5gujw32tBs zVm4R>ufo3D-AA~5f6a**f{MT%zhsyliKX2Z?N#rNzrWo>t!W`V{o6R;^?uA(@?feB z{P$vvNIE8DtSoy5_q-v%JNSTkykAVJ7qf5z@2!i2MStvfQv2Igt8Y%2EB|ZiC;sma snyxmUKIR_Q00}Es3u`I`XLDO?4Qq2NKlf4V|1JV3$f!uyNt%WI4?kfNDgXcg diff --git a/res/drawable-mdpi/ic_all_apps_bg_icon_1.png b/res/drawable-mdpi/ic_all_apps_bg_icon_1.png index 76d973fa663f2f5164d302e28f668d72814faba0..4c78288b49da72efe4b6ab3ceff16779ecb6caf9 100644 GIT binary patch delta 1533 zcmVtj8qs=G5M^~bal3V`M2<+%~p;c~2E z0sX)vW9;BB{DPnGPaH@<;iPns+5A5ZI01hixc0RN?~rcI<$q`}vkrga3w(nA0g1rR zIQU8d~di50#ns>M6S^+=-gb){ti;ge=x_ptB^Lq?Y&LFs1Mfgw}z1i^N7v655 z&j`mcjM)`}geZKN=W!mHLY!7`#3sR8*QlPe`1XqibGRdn(-Anr80Cq4f<)k_3~n}j zb!+4)Jbw9_1%KuqLY$d`Fy6+KadcwRj>{#yaf!|EwP&tbzQ9U^A&*yiAq1jgDK7$y!}MnnF=QX=tr}Xk za)VR5AhMmGL?E)O*X&hzi3iEY0pX^`KH{jIEaWLSnTo%Uw47fRK zN*P)%2!Co67zsp0OZOErAxvh<7lM%R zE9Wa@E(+?ZzNA=RQxG*qxLA+~bqW^O2{14&=Y!s8HEQf3#B>pYs{=rejdYcA10-rE z!01yEFm^^3-SJ@VbfZgeN9wsv zhVdU{Ot}YQP6#5y{~;@5{F%zEQ+3+LTyVN%D&h}8C@}uYUUKxtCq)D`6NN4%0lxr+ zuzw|^{5krYhbHz`AyKoyXnH07*Ze~h91Qp#sM$Tx-fIx`=7Nm8z&AVXcJ^@0iJ!7r z*{Xf}97L^x@u+gM=tClVCZj(m3J>Q=94NN(GK0(Ney!b7Qv8sc9uxs!IPh7v(Xwi6 zb1C)aM2?_*pfF@ZTzG78kT}2x=`(AOAAcM%i28Dsw{!Vj|3~@>4}w73x!At9acvH{ zt-R8}!n)Sljffmmx8*x2Q2;=@fZc|(f%npip88i`wb`sASy5G0POsko3x5aa1*hhS3Pt5v-M^J*@GV`GJ7w_jVw>ED2gQo6 zB8KO!TqEP8L%@ZtO6$}xc3SP#?GK9v)uLr0n2CTM9pn)*8NcF5{3@A=!Ys6hnVe@hSKxg;hWl4sDSwz*7tttf z^&~OE3;8gGgcHmv_n6gP)QtALIf3%!v0wOg`ep=eg7d~$}kGSY09(A zcN;ePfx-1vqaC3V>}Naw)!+1|>Q8(BO9x=NBI6gG>CSvYfYEocA@&S3(^!nye{Hk= j7o$`hmJ>Q0I%DSpZPm8s0W51q00000NkvXXu0mjfvlie4 literal 2390 zcmV-c390spP)004R=004l4008;_004mL004C`008P>0026e000+nl3&F}00006 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 V0zr>W1^)m5002ovPDHLkV1oKSjh6rb delta 3448 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 aXJt}lVPtu6$z?nM0000m@eFwb`Jp|p{D6H%C zx=|<;uAR$cV}D}?+j6;l|HQ zmC;uME{G*72&{il{G5f3K)V5T&$)Bwu2cOf6^kqD=IrdO$+lLjejz(xFAp$0tmlV5 zTocu5_0stGcrUiU0_;oueSItE;>gHIg6)nSI}*5gI)5zxt|72ftJSVJk3NXe(b0W= z>QpM`vH?d&%LdzGv9JaCcQGvgRsq3Nc(O zm5QAk84-ni{uuj(?d7>RGc#jJ(8Iy}i$Vxbf{A=C=Ru-aC_Ki#p@b|QQV5Y?i<_T` z(m}e%@PCA31au+7p08D_YnK|Ttb6`N2>Ff3znaR22*XnWQnrLV$UdUAmQvtNInX=` zz{uc~ip63O(39;XLiIiwsz#Gjv?-N;Z%3Vfe82!9P*4uUQT3!>(uRkd1N1!4V2e8R zgUY`s0ZVW&4+k}n4Atj-7jwDA4LE9Y+tJan4u1p8khZ`_?;z#Mb^sxKn_sih_eD>z zF>7eS&AliG7z$BD2X%nK0q5|dYa?!`@=r6tjz*>6AfuN9$nA1eZJdwO)6*tfxc5!e z1B}x6*cc%QNzKnkN49@loSQRxGnquA@bnM1x3^mW?9%05RJD+~NKmAXUp5L7SV|2z zuYa-s*fzt$(~#l0m7%H0zsNx;HTa;P{v@DWDtU4$H;$6AN#>)W12iSz9^9Y__aX&W z&^G!{=%Zx7^v-Nl;6DoHUrc06*bf3M`VZ>gpTYc#iBw;AsntO308=WJHUh8^%)b~& z^>YHcQvxRDyJpHfd^(2iIkNpr3nzD4vVZ=49LM~V?GeSITR}_6gQwL~iJ^nf>GF@R zsbBB6<6t$W`8NmMEdh=BfTnC8kMZc43NHVL<=PX$Q0Df_ z8H^RS4tgU_&c`kP2nQ&tMg5-D@zK3)F@xi@%mt7b9v;pLA#PABf?K<1r?w_pNb50hhP zXvho;&z8WucP|Ejlm|%u!Y@F#kOOUK{_T&8d+4kGD;`nj0EkZhD1QYRjaJf5#3lbQ zN^(tx;b{YqtK0980j<^OUErCRIDe?tVF>C%+}G?ai0xVSKb1-~Ub0UnlPN%o z!NI{xu-&WGs)Qu$Y6BCF(yohg)1GFuH*xEcX!!vm{TJUPm+I}uu6*o4vPdG6kEDQ5s=>rNGLCx&C#I3v zV7WdaK{rBA0ro@aHvrdhOn*QMnA=`gSEr58;FEOmhuOKXuns!G^K{Pfd<7T`NxG%L zC_3n(B(PMpu4(22mrQ^ycoKkFkNr;o_7Ldj~yfcrSeMEH6M!ZsA7)J(?wMp{Oe_!@ImaA zfXn;$E{1LZ*w6sqgfQL?&^Mry_&x$)4};c!9LC^fb0F*N>~sOijuJ+>#hOOZF~TVa z3CHh*Be;kC+;-7EAb)2t#uIx1ucO)Fk*Lm zbeP~O=LnB|gyeTV5QeCOa|rzVk^zn^vy zzt0Cots@kH*b>+WM99C$d!r46=js9*(%}Wb0I=ZbRzSXtoPYfiU_Friue%h1+gzMO zXs^4wTVygB)@Fgon8Ed%<{907*qoL$I delta 2611 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 literal 3979 zcmZ8kc|4R~`+j5_`xcE7#xkkUVC+&R!;G~^vM*yvV;^BujO_c8J<_)YSwr@OYz?8W z!62X2pZD{g=kuKPxj*-P&U2mXTqo|ji9Q$mX?6erxUd*qGq6y315?X#w*0kuL;+S!zs8So|>BO7!3tj zPKi;j^=v0z+2}s1Hoeev*=}p^aHTb5tBlHZaP0^dMnzE#=|_kA3Mwir6l8VC)?EWB zeqS{a0I;z5M~2-bUkxUOMOjz~iiRD~+k8kZfomU@DaAK#-;VwM-R+i{*$0UrL%hjWzTSfZufIEb!C#|53(C0>9?l?|r1$U0NTi%iy{$mYLYc6w zrDaSHuEoSM#CxKrft#MDEimq)@ z9W0g3-JhuUGB7kuQ1f4iWw;7~`R=bZ;O^X6iuZcw%o7+G_yK7g+3D20HDPe&xndYm}zdSb8 zCbE&n8~t9q^PbYs2s?T==id}5g&lwYa6gG*e0)5XQf$fyOb5?%5d#7;v_wt)U0k~8 z2b)7zZra-)`NTgjcS;m=O%^~Ig&~Z?khBLE(lEbGjf@V~@l~yX!QJtKD}VkpdVQ&J zb^b9{!2%$amFLQ;-ZyIlagZUcP0sj)1iyuke0M!Osy*_u9?%Mc7OL8gnp>Yg|Hf>U z^~3Bo6T|GS7l|rd1U(!8OqTKZ4v1xpJH*&085 z`D>5URHQLeM8^@XH(8kt_J%++*^lNrlT-Nv!V*E9jzB@mK?l~gZb@$+?r(Q3EiHv* zWM{Wwb(v8R$_m`>#V)dAqab(p;^CPYpU^*ZG2cJ&wmFju3JPRo zWZLICW4`odUR<-Mx^S_u$ef&-8dwd~-2OSGS^OwpR7wH@dnUu~HT}+Nd1Ynz92`C^d*Q-YiAan@ zU5vdd9C?iih=}zxH#cwT>+f#}3gnyBrQ}s8AWjpx)OMiwcR@x*N7ZfRsY3W6 z^0GQCGS`~`g)8pGmW`lwnX>!qUcG-mT}|9{qxW5`;-x(ZC7~dbffHWoydTsa{P}gQ zMpo5o->y;){jo;&l@0eiGaqcKHxJ<#)eMl>V2uNA_`TT(9#MW2G;5%Cs$d|(zRJ?N z!TT&N|9IN1c2uJKeC-J-36P@3HoH$bygP?A8(;Jv9sE`An0P~0sO8UMw!{0wsi2v& zK`m3F=o^y~u6%MRD$+bImRwW5K%)hZO7fngHgS=Z(n)f~9%G z3~4M-TDrl!($`~$MxN&SInx%V4y=NCpb7baHro;5+hm*0dm?D+9`$l!wX>}@-zQFW zG9s~Sf4%Ma6cAM-OJk7H3RwE=z}bnptu-tq!E_>g`sdG||3*hge~XT0u?z~@xg*ZI zRHt%>0Bf#^yvTqM#&rix6KR)G5VZo6<%)*sJ}%$+o+L<2Cli21qsxZ>NtIKqXfyEg z@`904ouDkF&)}BgV35f@Jc&Nf$h)(DsL(be#>m?cYV)=-SHSB_2oC^qWytmycLL+V z(u))X5-Amn0a164Aj1O4WBIMEtwX6_zglY}k-u?xJf3K1*uO4?-SbHD9h?hn5nKB4 z1Aj(Lj3+52C1!7L@9U)Z4r4xnm(M1)QbdIp7+>4gkVt1?W$pg=g???w2>_v?VPKdo zp9!3dM*U+dh_+I9U~x@MbAk%Q={oD)$gpv>vj3o7n5zYlel&;nD3&n1Hfp?Mr*tki z79<^-fq_9No4AIC#$9>4=HKVKDV$ocehL!XBd1} zDNjZ3W#nq${TEZ-J||JBIR%tcFE2h}6~;-gt*xPf$f&tb( zS)CBQM8k6ybn99k@rNF6Cprg8JE;(U{~8! zL(H0@Xh9)N0O^5tAuRIqsS=yp<&1!1o?E@LWGuu?1LrI6=Dm^dIn&E5pm4|?5a;ML zRUC)_6VM(K65?FsQFKvrGqb7-FOW+(svyL7q=;amJX%ROT)=i&keR=Ki z72N}M{h^ssX*E<2ml&r|1Q^=~pI&~_vQuhNw$#BY_KEfS(&nyqT(|Rw(ttQ(j?t@b z?F+RExmU$g$u8a=c>F#UtR|2bhBGVp-MgF><~DctfRoz4+8KAtZdK%cr+bKsh>8l0 zj*bG)^k4kz^ZnPX5!~FRI_0^i5gf`{lxu{&cI_G#gy<_rL{0+PWi+#&8+hY6ntjP3 z+2{SPn{}H9AejakUY_`|bu`fYDOa#M82)1SFqDg$Oh&+%dU|`0vsgs9V+b)aI8HpZ zvW`J!yvDV^O;;lAx<+D6WQ<2tZ`|0}SO_3pQBkp_UAP`8_|>gPZJJ8mu>oEI2K#$^ zp-+fD;mvMoUd9w%DSo!gJClT<6Ecm*NBdq%Jgv2E-HZNM3k!>6CHFy$ebo+WV$FLl zpQbTzoNv_Ql86nzIxCsdOPT)s*)cgO>Ghm%@K+t;tv|-b#&N^LX58X_KPQ{6W$`tc zZ4HrKFpzKpZLpO`{D!r4UvW{9TLr}`LKwFY*pf*mV`C`GvhRK8J~*7^)-Tw4lb?Sw zo2Q$wX0!Z!)Rxl~)~tq0d|j$>)7*Ts%n<>#u5pQ5+1VG!>LuJyCCDFywtX2H>5@#t z%znyMTL09m?c3z7K2s#?6uMW(Yj*+|%vawuK|nb{nLr1f5#VYIW*?xq_~+w-==1Tq z62zIX)MV`l|pJb2Ht|%|}4ALl|>q;nOVx$6|zFNt+r=m^+ zML_3r0Gy$VTSVKSB)*5DxOdmcxs;QDSLg^5!HB*Z8WAYhhGYHJ+$pGBpT`>LlE*|e7 zBPS=AhLOrMf?ELC+n0=L$q$5+1k%!s;Pa)WJ^g)sCH3{&QFC*1L9SL=ahOl$;qR?o z;CyUWS&M%=L2h%9xp-01!eXB6qG+Pa;!nj3F#`wO81STaPdi18_%U8L%~$3I4P`iXxs5frCrMr zfl_1~^LJ0R%&b!b?5MFaPUyjRkDISc4zFHgadb~y%+AbIKM_tMt6OrP)%g7b)Ve|68!mun(ddr7hDb#r6MZ%4C8oF*O8|WxBt-R?~8&G?22J}hHuN%@WR5&KJ^ra z&uJlSnpHbOjJ~Ha5;YvKRquut62Y4z3Pq2PkN*bhraJH>U9U1UF!)*j#WVSLHm`79 zPJdr)D)CCLQE7+cugxLt{neqfXU~f5KX`xL&(BX3Co2qLLP`u*DE2+-kP~u*W7u93 z^6b*3T*>LuyK}xd%gv&+{0VCtn=pEpfGKixWCWR&kukEcxM=aQ#Mx!KR#v%o)O+W7Ay6QFEY6NRG<2!_^=tAaIk`-R_Vt}Jl9H0uw`GOu#sq+I@Pt`- z_fCu8?{8)bf6T^llRvxR5&B$B*_Y1Ym$y-Oy}qWhJJ{&xgjbZ5V6vpJW)^~TzG|)0 zq1FUlT`&+4ZdM}-5+n#tV@mqiDUoRAzBiCs6w*y?90$eq4{;psF zC?XV)atJj!Mb(=Msv1aT4FxqhgsKJt!L&~RuekqZ;N|1u;YR!)10~Q#;r|Vyc+r1A w1L40O%zfMff}H$a0UZ|~XIF8omy^4znX8iv(U0u<_fiaC(I&c;D91_fn#Y+nuQQYfS*#Q^+p{HO;Va Uo%;0WCk7z!boFyt=akR{03DDSr2qf` diff --git a/res/drawable-mdpi/ic_info_launcher.png b/res/drawable-mdpi/ic_info_launcher.png index c72d0c2a958aa6282423dfb5449ed59251c4dffc..6fbe5e39582a5f392bf647b64d3b3a998b6b3544 100644 GIT binary patch delta 676 zcmV;V0$csV46y}}8Gi%-001X|)rJ570(eP8K~#7FRnh~H>{t|l;s4xlJZsywZJVVx zUfZ^9+qP}HFm_|pPwh@Gat3esC%OE}VX}+NE$*tqj8>Ez-HQyfYq2hI;F*>CkDK>+ z`m^+B^B(VSdwONK#A&ve?oelIb758d>Owx$VwBU|=oo4tAAi5<+^QYSA}}is#EO0V*wL|L53M+^Vhf+zfmcHP`zpp2FRfh2 zrh^k#$9=#-R)49?4;A7&S0fKPxF@cj4hq?qRtBK&xRUl>1&?{F35Loa+I~2$vI?`l zJmx{~RVD2^4uIf^qQ1Q=JYxX{9}gcNGk(I`yB0Ng0t`5-Mtl=P>NF5QG9P3b zQm@E2u?TzBai{`bgq9fsY@5|(4dWnL%AgeyAmgw+Xn)viIVea6@Sh>ls9>OryucpI znNcwg7yc-$wHwTLK42nMg^!r$z*@V?r~u%GwR8Dw;>o44ZgMehZEh$RU$q{&*~NNd z>1-mGzhN!lK^J;%3N`gCa=Lw{zfsN4C;oiW)-|X3XV^&U*-(3K8ds+a&ZbKT-#10x;VWJTO9}2XhepfI60000< KMNUMnLSTZkD^y1S literal 1603 zcmZ8hc{J2}6u%;dXNe>#a~MoYm>K)%OiYt4>qJcrViu)jo#9ckjxE}#UY67oWkjhg z8D&&-CPwO=n$VQ8FBuYE%d7YE&im)R@AusA=iGZgpYuKUe82bR`g*&nsjO2005x|v z3Kc=^WkV?QDXhJ#;1F%f(S$$xzp`VFGasm~K=rfFvwHY9_!} zB$PT1z{LSfh5!(M16Uhf+TynrNhmUQx>Dfh^1gikS|Jiqj&|D{hoIX(<{~;w0$91) zo#O0o-xXA}|KP3zx}D{+E{89IB&wxxJEPWWTtSmcC7ifDabw=4rU*~*J50}g)aG~V zx}APHtuJ!L5z2|i&sEK7+8z>oy;ekElt;Vg)lF493)K3Jy?R6muZCL%w0$hu%cFC1 zN8ibke?==oXP5g1KFGES==}4>|won-WLyn8P^QN~~=;-LEKR-XejnCh=ihQ~%+=Wzr z?HI|YxJr+Vq6ReJwrzXIU6>4TWipMnamG)3QfRg3&+90|dVPJaxrGI3E!o$$#0yzc zbskx1ADuo$M{N6*-n8oK>VdupTa(Po9UUEGMn*;!aN{BL4-7cKrd23=!o}|9Rq0x} zk8dJkI?xUsI&=ecVfTdjvX8_q$*89+!q9=9(ik|6)N9`&5Qr(6JRYx3Wg4Gq6MR#$ z4y6$BZAsRIEfmSliiVfOVsYcilj`*3{t zEk)w6wJXwuSQvf#Hdqg8YHJ(Ts_+~F0>%<#Z~xK*9rbKBj5-5VV zVeRNR;7l2W!D#zs^2=5u1S7ZN1}dZSQ1DONWbhE2hTY^E_vl)4}k`MX6^q zH*Q|8G9NQgLGi>t0}_^@Xm2+Wl>p!y@@92P$gjA1d?`A>t}ju+%P+CxT;YCwPkv?k6g^2lkLnu{~isnOEyl7+{UYE~D! zcXsM-ML(0k?A(xRB8Q{>)9m*=edHI;zJH{o2S{p9KAuImc%f!L8jb#O-+yy;yx^~h zl$4(>T^B4ZWv}bE*P$q-ajVDPTs2jJ-dDBskq}(-_wnZyT!ffSt-h+Rp>Yb|nHp^$ zfyH!pcfZjj`x4903POv(W`m#>j;JO1+ag~i5($Tghx?Fs<3n0!fq!C_G$7CxOb+q1RWe=~oIxJHGC zl-W8r-Dj2J)0{UO=ZLDv@K_=!n2UxtEU+oDvZo0a*^D|o06$`f%N>NY>k~}8y3Tbmxx>s zq#<4uZuH4_GMMd{8+y_fBao76Uhb1mRW|%_d}&5nE-x>i@_BLb2X}VRIXEaNDCy7H z&~TFmzcc8JjEtNoL(M5aNrL!~#T^m0C1&2Y9mt#i**P zhRlzOAvHzLzxVbUN@bHSGAB(qJ7^qMD2GjC#`+!>jEKEF%)xz!H>HjolKwZNImB-O diff --git a/res/drawable-mdpi/ic_pageindicator_add.png b/res/drawable-mdpi/ic_pageindicator_add.png index 11659a3b26cad012281be8681e64da1ba71d8504..d9939b46a2b3d3c2c901bc4972a29c339a4afd26 100644 GIT binary patch delta 219 zcmV<103`pN1?&Nk8Gi%-008`alxzS10JBL%K~#7FZOf%W1yC4((eM8M#dpCHi3M1I z5h%E`0#b1+c*otn;O@@z{9Mq}4__8_-SQ8?U=V(4S9mCRDTH$6ONk6;fMd|L4t?p> zi6x=|1!u2k76OtX2(Yhkk?Wmuk9qHXpRO_A%zZu_DhmS3Syb19$8F9F_wz~n_0V=6 ztSW$r^;vlDcg@3_CRv22CfP^_$FO??Cek~EFWm~KMHdawqWoY`6v1NnZBDl=2|@K( VJJ(faNBRH&002ovPDHLkV1kj^W2688 literal 669 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&kmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4Jl+{)ToH7TgdbJCk;g&(_bzx{V5%Tyxyo?_)W%YKzD*X(-@ z&#P>_n>Y3S?|ZDCVsk3D-#+{N^G|Vx0Iyc3j`a)%Gku!k)=!^&#?y&QQK98Pj@jwQ z7Iusc*M3E2|K(;7>psfqQ1`NvKfm&~j@ZAYAKr_$J-o`##%wCrzt_8O(TiQb*>#p4 z^9x{3kp#woYKdz^NlIc#s#S7PDv)9@GB7mJHL%b%Fbgp>vobQYGBwaOFt;)=_-L1;Fyx1l&avFo0y&&l$w}Q US$HxPluQ^rUHx3vIVCg!0F`3|VgLXD diff --git a/res/drawable-mdpi/ic_pageindicator_current.png b/res/drawable-mdpi/ic_pageindicator_current.png index ca889c4d1e3b2bfa47409b94c211dfcb78bf91d1..832f8ef6336e26839c6454d13cd8bb3a05dd4f4a 100644 GIT binary patch delta 260 zcmV+f0sH>I1(gDj8Gi%-008`alxzS10NhDLK~#7FRg0xUg+UlZ&)sjg;rb%DMI0&) z1&4-fL^Hg?&A5BT;RPtTyZ?f7W_4yhTxz66^F_U`6+VfTVu>=_$p@VW9oxx~rbJ=| z$Q9IZ`1#bGb^m_NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4AM^O za(?Zr=XR)?xBSA(k{kxD)0^_6veg!SD$iVNd3w`&hLG*Iw;nvhak#+4<$c;eXH~&M zi8kl7HWr5Ch3{Gfeuz79So9UMKQIjloqD9c;=2b!$D$W6-`?AQl_Skf#MPgn;bX-b zhC4?JWh9bkbevkG0YqL(TD^uc#|s%Aq#4cBxS3(XaA3{#*S}Rf`+~eqZ_-JPoHi*a z%5#!T`0A^+4390&y>6-7zdmd0EQ`5*^S}N6yWwh9EnCCsr=OC|X4k&|T6Nwv@B`2i zyS8^_)|T_n=Q3Q{mYaHe8#10W0pHeer^szie0W&*)~%ZkwC+Hg4xD|-54b{(%v8S)hX4Qo00>D%PDHLkV1g*OJa7O2 literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&kmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4nOcv6+zv3+GhA*ne|81+Evt!-s36>9!-r-W<{J|;7nw_xr zv#){Qr)Lb_4>)qx&Mr!Sz+l4=?&G#yi9JE2DJgedKJ%MKjwzE~J#~MYrEs&Q>wVbG zmi=eA+T?dMi&`vT_q!y!#QN0tQ?Z|QO%J$=$8s#ac1z-9wl`k|lXY(L(m%0t)A^4t zIq~G{O2OC7#SFv>Kd5n8d!!Hnpv3` zSQ!}W8kk!d7<}5Mu8g7~H$NpatrAUxv89zURKpFgWu`z4k{}y`^V3So6N^$A98>a> fQWZRN6Vp?JQWH}u3s0tkLYu+U)z4*}Q$iB}P_m<7 diff --git a/res/drawable-mdpi/ic_pageindicator_default.png b/res/drawable-mdpi/ic_pageindicator_default.png index 34493b1551958e96f8baf0559775e7eecc88ad6e..9c44afc52d5d3b529c44e27e74d6925c23590817 100644 GIT binary patch delta 237 zcmVp7UpW_YoX89YtjZa zX1e-y_xI)Z<#lJW8Z(eyTLLfJzSw{GKkSRW?4%2q3TEnl9%j6$;f?(~OxGo=_5uF} zg+u*o@B&;|@VNakZ`d35$2>>r0*q-)SJU13_xtzz-C0``W>k~bpqqvAE?1|E@)oJr nNS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4#yB91LGNz``&kJbm=g#G%V8CWH!6^ zMG1oeV?#&6?QIghZb{p3?+p$8+TF1sZhgGXd1Kk*jZ;3=_(tf6F*OLX9L$~fynfZH zNui-9ZO+Tr-rvufaOQb2Bf|$9{z94PGd!A4-|t!%sd-gv=`A4b_4CA;j>k7X+3;J) z^|LVCe*0~m>~EU%xtLpG}RlV|OfIuesB;YaJtlm*(T3Z|X~?2r(?!%GP#RagvJR zOv%V;e{*NGZN0Yk+AbiyS?BlhGai$U$ndbqi>lU>Ra)W@TbvWnippU~Xk#@M)X6GKz-W{FKbJN;D0|mR8144L7`&nF2LPf@}!R qPb(=;EJ|f?Ovz75Rq)JBOiv9;O-!jQJedkgKMbC(elF{r5}E+cHV$pI0GYj)?F-u@ZL##m{oJtlS kaahGA*jjW00z)nN0Id2^L^g%@Jpcdz07*qoM6N<$f@O&?^8f$< literal 482 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&kmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e47Iv{_}#KlLpC(%*f@zda{Z*(TwD;`N47(e94oc2TuGk5&Jk;;+#4J^xDB?8dIG zxqTK3OaE`#x1jLIzrM8o;EUQRu8#z*ZI=IF&i`@7`~3dIyD2rzUmpb;y$heR@0Ekg zoS*-HX4fz~6k08r@p8K~(DkY%t`Q|Ei6yC4$wjF^iowXh&{WsJMAyJF#L&#j#K6kH zSl7VZ%D~{$Hg#nb4Y~O#nQ4`18jLNijG-ECcr7ypYLEok5S*V@Ql40p%HWuipOmWL cnVXoN8kCxtQdxL16%^JCp00i_>zopr01_dnD*ylh diff --git a/res/drawable-mdpi/ic_remove_launcher.png b/res/drawable-mdpi/ic_remove_launcher.png index 4a2c3197ef6313903bd182721790423124c17379..2bb281d5993576e608fe82daae7dd4bc74611e28 100644 GIT binary patch delta 458 zcmV;*0X6==2-yRW8Gi%-001X|)rJ570ia1lK~#7FUC}jq+)xyT;s1yqGn8(^>Ai=b zVFPBn3PY7D%*@QpTnDQ#?!ZkL#gb>{4BRVby`oP5TIslUMcJ=`kRND2pE<6z5`Y$h za$S4g0a~hOY4ymnj%ykeR;x77_|oYAr!L@-nWDsd_}mr!AAes0Vg+oO>U}E~qyO&( zmFzvUV$uJ$Wh#KDD$G+Ofg|YQGNr?k1=z4_skd!76dST zU@#p`Xo`)(;IkxO{Gp_=^LX~-*|8(oL&4JY^jP5WU4KMBnR#c%vP{zBChGV1hjx*N z(B40Q`s1QO7Jsg>fSbL(Q-;2Cs~6xSStz=_>x%h)-XHG|zpI_;3gq*K-nNl#BcYf1 z1%e%{GQ0Mr^{B7Kvdi?KpbPb++i4DR+&pe_0ok=GuvY_Kc18aLyH^fEycG1`%dV=z z?#aPd{!V7Ho9H^~GY!7(o($l$in?d(JpWvpNqTP7^FyDlL)|GA?F4mZ%fe37Z_or2 zl#kRe?3~#Gl@-uN*VUuSWmT{=z07B>tE~i-02%iPmM4amssI2007*qoM6N<$f+dye Ah5!Hn literal 1087 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5lweEp zc6VX;4}uH!E}sk(;VkfoEC$jZVC;4>+m3;OncvgJF~s6@?G*cLrC5<;^I!XvL`thG zwMFPgM=XiJd@J!$h_6+E9O|NP!>8)l`ZMH)WWOLyMQV>j`g%xJ)HFjb7uMD3F>?SF zwdI&;Gbc13d~l@n?(^Ndcbf<<3|iTecA>(iufoQzJydI|fZ)S_|LorGdiOcO;0HUy z>9oy89UMPv{wY8I!!9`S^{(@O>*_gQwSWEncMFi?;xhT<6L-7$|2>OgKmYky-HaEBO&{HF-@d(mL0h8C?QLg|F0qfj{x|%A!FHh_avjcK)#nT(xT5+D|hR zB_tUffew2l*wmJ|=F7@etFjpyf>x>s3s&uoyH$Eu-Tuv^M@kmm^H%)5usm-4bTy?Z zUQ6%Wwxw7c={WdM^sB(BT7;dOH!?pi&B9UgOP!usjh*kuAya!p{bRr zsg;p|u7SCgfq{1r=Oh#jx%nxXX_e?246O`|AsQSsdA0yGNP=t#&QB{TPb^Aha7@Wh fN>%X8O-xS>N=;0uEIgSC%E%0!u6{1-oD!MIu91U+c81^*x7O zY-_uE+tx0Ytk3^A_F{(oB&lrOZennr~RK*Hj! z^X_3P-M{EhSI&L?yRY@V3`zhL*tB)tU#oLn{Cr5%sM$@Q|LRt|Jy^t+IJxby4Kt;= ze+I0EOyyh2P1Z0<>#teeiAr1*9HKlniV74?^KkM2>sdu?cUSf?m&}zLj)%UE;DM3ZhuDG$hU}%x>?NKP3w6iknp^IT~V&qU5l~<{m8=gd1K|~KHmuiC~#sYS`oW-P@P%7BM}k(n$ZMZ#s3J6n(%`0YR5VcbA4_`3c3o1>j_1s7O#v# z2_pC<^VahGJ%xK{&<*6e>5g7!F{lC%og{bK$Ch?=jqi~(51YLLHv2ssMI$&ibZXS_ zjNx+-;-fqEdbnOH6yn59;WaCCyhgv)M@eTymw%GxRf#$-i5*wAvhPG$fq-AnxF4;~^$a1MMmo>}Alu~0I_>@s}h{Hr3VJC=L03dW0V9YT}*(sO#T>X9ModmN_yQpyEIv{EkQn9nyeUz<-P8U z<<0h)NS@uzW2v(EZyAr5EkT+yqAdUqZN9;8)zT~CD$nGL1p zwiZIV(hDy2E{k8-7bAzwurkHcgnSA z=q`x2u167*Mc3NT>Q_J@QCy&q?Ut>2ANQB_rtqh@C>r9&7dP9{y`)CbX?|H=y`sg{ zVsuJ$aqMyH?+9k@i*OV(O!bt%D)N3-*wWWD4mH`(JZkbm zeCzt&GH<%s1Oj6wW$!umfGZo9VTaOR4EokV^~rlpsL+Y+wa@l9tkvHwMKNjk$%+w$ z$~bU7oFA57kKKIH4DM<_n$k9f<0XFg#bZ^fnt6|@-iz z_j`cj)^8r)l2o6)=^pO;C5PS6T=FYOS0dEf$UOTbCk8_a^S5|_G*8f<)z~h4(?!0X zr4wm*hpej8YWn_gqN3=xA`7(S7Jo$?Avm#g(n^knI6)`sMdytR4tP^-5$ta9ylKWW zVIGrIj&u4pzG3=+y!|Hfwq$Ozu=eJRqyubE=4ca?!L1Uv~kMWX84tmY_PhS<7{`8CnbIgOa$8B)9yiQ7NcBlXwWEEryXN;5c z*6nD_c4rJmGCb(@9|Jo+ntABt{~HFSj5)Odx|*;r{!n64#1T3`h>nk>Taefh40-@P VBKl-PJAL(K10-)>FNp^&{U1km#8?0T diff --git a/res/drawable-mdpi/ic_setting_pressed.png b/res/drawable-mdpi/ic_setting_pressed.png index 61e574ad16a16676c7ff3afcc44b33c0ec316c1d..018bea38cca7bdadd42c304c56863c97082c040a 100644 GIT binary patch delta 826 zcmV-A1I7H&48{hK8Gi%-002u=xk~^50}V+;K~#7F-IoQo<2De5_wh0_Gcz+YGcz-l zA!bbRAAe16&rxmJNqM1~M{AEhUEk3t-a-GjK^NVn==yM#w!Wvcoy}}fY-T$Pbp4+W zp7Jv}O-0TRe8a#$0!!-L(7w=&KQ7SZq6+qt;aJ#{X6e>o0yAx}4V{3C&kdHVEK|8dfLDotN6cy6 z?_&v9aEO?0fi3J+X-mm?!v$P2yqa)H3Aw}zGBR8e?$t|G30Q)BRJB7P9lY9bv}B}A z8N*sJs)IgW5PzHUxE9h;l!{l#4f&Lz6(gi|7kL|X4uOnG2@TB7$T=dcJ|QfE^>>p?HD`q;tWj&43EFDwwWN|w=YP#5C_zIaws+cM6M1fwxJ105 zr#A08DUPw}bLN^xt_~^LMvi0J^n@@~?B+sN&Y9olcGA1AG+}2O>{1e3v-oA()6Qyh z4zk{#V;nwn2OFSXPE!B9gl$4=ki>;&G^F{3^ zoS;kjmVdQCMV_vy>&$!V)c6IY&B6pS!OM< zv>LsuwQb~-%H`U&SY`5+r@hOS`j*f|?vU^;0e?9muZaoU+LH4r-_Rry+F?Q`>@;E> z+Gm(e7i;-k&0#^M^B4n+VGl2e_?dmS0oB8CD?`ndeomIbGUquHem9TB>}B8&-@44( zin@zA#8&ZgjpY4t#zK#!fp1~A6dzf=_g4q~yumNLF*b-;AnZSUZGOa0 zBr{|v$VnKlJO2>7lAB!SisCZYIYie-^gkWB`hOa~0DCUYH3lQrYybcN07*qoM6N<$ Ef#GkaZ|}^ zea&<-ZSH)Ok*p*G6eTDe5xmROp(wBOzj?>uv!Gv_>W=J|HyG0|aY>owK@ z0CYHw$}q9#7g(B`_8;s_$V6rWaugYWtCgrvT%<|EvKe6%(5_xPZ4xetG)5Evh3)`| zO95CgS>o3K%!>Q!h_@DKPiSo4}nEoKroucu|+S1zH@|xNYs16Y^%cK*jdEhz;so#T=a`Y(CMMmBdnc)&fJUKb~POd{xzjAl0OI+?77-I1j8uE$W+aE~`j z6$!)DMoh-ahwY%qrr;^*>pnv!6FU0@$600Y?+h)xu?9-wOh?p)OQXyx1>Wg(5}`#4 z&!!eAH)&$1HjF?9%k7HyM$`q&UC}d^U8Fa!c<01BNEIq8j#b*m`wN}7TRd;+%bHiU z=U+ZgUo`kFsm@RA?;mVAzh3L}QLdoU15rJ#eY@Z&T5Pvu9Yp3-A_B{5C&U+_--A&% zQ3c>8EACaU*3N!!qL%eb3Ty}J`N~!oiQOsR9Ba*$`7KXD*=Qa0@mM!Bcv8>Qnrp+f z6)>?)#>{W9!S62@NnX8fc24ZLw8ZFY%-z?nY_fYlb^n#G!Nzdr&NIY0rsF}Fh2!(% z3S+wu>0r-X!Hd1YZD5_?iA)D7amjTWNINut{4`Wn)#KC#SKv~gER3v$5tU=)$v+ zHLDAt*s^$(m0okZ@I*jT#Z{zs8*inbD`wBkE?v>4dTgmUH$Mnb0xt>vTeyBC1vrTP z?UO}|A0vhl&dl=t=uiLUOpb~oy@&+2+0z(T51i;S#Uq2_;oC_GPtr?@lC|#P-N0+> zfyLuFdk9cyY}U2hQdMUbahtm)yd`9pf1h2sLSjK5VDGHv#Yrpb=U=Yf>h{8FDyIm} zi>bd(D|EgeI6!hnD<=(DEN?Pm_51PkuYSYR3ag@%E7D{igkdFZS%a_+7wgv8l-(SB znjU!oo`8ORqvyHWx26XrB)ENLx2s-sRFb=aA!w zlBmeyZwxCM*m0>E&r_4LRt8Db_ATAY^ar#7FUK}C+*W)YLdn*%&9-2F>{=Bt7d-@0 zj9HDAY{x#Y^bs2@L!W@Q@OxD6wK$*6JEZ&TfTy3}lyvB53Mn<;;{^la?{F?cjQ}1)d&up8v^}>3ye}AC5ox&Bq z*lr*#W$#AFU%DHbx75gW#KGV}m&{Bj`RD3)w;EcF!aQcHQ;^K|BmJu~5w&zqYWxnv z%mec0LvpNn%BpXg#7(EG^nuhy5vAdXRsQESP~5eBfq%SxHWd)P{Dz+fFR(30w&aZY z3B=vF<8t(A9yW%dp`y<<{iOg@?b-yEV!Ib&8{C&YBMb>uzM)2IfW63Mi zXb=TY=5_69+tRkRb9ePhEC33VHhpHGbbj}twq30Ue|`{=SbzQoUFTbNbRB3~huNtC z5DQJaMdYUxi$p%$!>cr4;Ykb+Z`Qtk|4D0OP^4n#T+dLoqc1rUOMQ5{sO@_5sg^T& z&#AV{Ra@}Kd6N~1Cl*>yh{TcPb0Qy088|_2QeXi*1yKaz$QLUeN629HUDAdM&>ECh zh8zXTAS$WnA7lN04FwPZ6vc$J&;pE2v*J*N2M#b?29RpC@M43AM8*G3$2IJ8n;mhZ zLoYaZX5^3wafBiv+I((1z6p0zkw;B8o~1tn3Z7u5>6>o%7wCbw3l$mDQUCw|07*qo IM6N<$g6?3W%m4rY delta 921 zcmeyxw1j=ES4 zz)+>ez|hdb!0-zw)bN6Vq11qZ;Z*_ygVhWM2JwP9y8>;15^PD{?k)`fL2$v|<&%LT zoCO|{#X#BvjNMLV+c7XOm3X>1)`wV}ejDQGEgdNE@7dnFxvP6~6xMA#HE)%~L=Gie zj&B#7`4&$2cBNT;VZC#;UWZ84MiIyLa!u_{>+S`4T$tg!;+lhKj&j6`LgvEq`+od4 z6Lbvse!0*r&-30k?OC<)=X*R0nQ!KV`T6*qh+5lr_^|V>8#fAm|Nec`#8;%-RYtyE zo|z#mEUf3`Nlz(B$%k%>1<#y4tI1$vYRdZRf$&2q17pSqd-v`=^Wwz|eR6WLJj0KtMUp2|COO?_U=U`Q;-zY7Yr9r!>M8Eio90!|D?fRLU-xv?(#$9p z2IjS=XG%VQ{yg$}>3+#J!A!H+qPMr*U%zhMrs4FN?5Em0$zX;>0E{b-)rsHtbV1M_{xrKkYsD@{;RIR$k4T&yWF(uUl{4yeVy2_d2PvGIH(u_1!5(KMS+7 zUtfIi;KAe#TmSV;Y8BXYF{9@GojWzm4o{0LwZyt(gBSk%S-JA{F17*MfdV9&=G&0KF`^NuEsL&$eQL%y}~PUtS0QnZnOb2s*o$lltL zR<>e~uWa$*$Fs0itk6@sk`=7xXYfcqcKPV`(iY9l=<7V}p@CgFrB$;Yh)T93Va(!N z@Mu1E#WK;x!hfku7VS&}W5vQzQ5hj@Ko+#K?ad#l!Lg~#(*6M7S|nm06q~BJ5o0^f z*{SwOMf((*8n`t<2F8Z=NMfn((l6RWFb*peV`J)H>|cL7rE7wH4Ib_vZ4r7da}58A z^vs!P)0b_1?M?4mybM+?>P`Lx5Bk98F6>{w7+onNi+?jJPpn#|eYH6A%Ey&_nhrK= zyTBUH6Z6)vNzY7}$(P`vKJzy64?|NEM@(E%bNkvq77pdq>|l|*3EIY^jZIVa&ii)o z#8hMBy??mB0!SNwTPnIM#m`Amw=6aZ&F*cqfcW*I4UHw@XXElaSP0#axo9*rjf?N} zi=Qo&!YF}_^l4}*wl-chb7J(zcFdfPajc^q)5ni=h9%2jSBg$3Z7Qm<9LmgujK}r4 zH-F+x_@?Nxv|3uOX3F@C6ZffX+05$Z@NFJ;KYBFqvu}Lc<6ryDgP}XlKfdy9#=q0h z#=U`!hh7gc=En~6wux=vQ$pM(w+jtvK#H#Ds+%|Wo$2{WE9)H-gE{wfvcQ1O# zqgnT$z0J}Ejfe-Zf`3bD1s;v67HHxmoR0QCynh_!#gA1300000NkvXXu0mjfRThpa literal 1496 zcmZ`(dpOez82)X;!h<2#P837A)V7*AuFaYICCp{WbsJ^Jg9wwdx%6-(Nz8S~Ee4Ru})Y3U}Z~w4-yq>P_&zkCD1hV(~?jeBigz-0YHK_0MJqaU`J@t zJ^;WK1OR*t1OVd#08ol7;kcR#4`RU%HaKAaV9GmdbA^t0q^)ELKvZEJt3Pi4)EXcsVV}Iixn~o7Ex!aKsHiqMuidbP0$qxJM)Fe zB3;^=K`*1nl`^l=u5q6^-hecVB}ymef|)*WjkFbYxtwmey%rV4-}9;`HtbGaNi@J` zCoQ;6$li=1PU=6Fj)w~B6&IT5_Jszy>!??Y_JA}flrBThNq2mSW?KLks?RaT3*Jag zcHfOP#|;x03fx|QZ%#;?$pD}R>hh@3<5UBuKCrA(=eZ}z>;Z?T)Wx&>-V;%cf%u=H zi86S!U|XZ8EjyR@u~(f|1LewmtTY_)0K!*&No1yr+f^+ulM_WSYcK z%eKWnOY(yvN_}~+#z(G|R#x6gJW=F(2yI_4(BS&4 zSP7_UV!e#kk*+dK7L0+M?YK7EmbHh4mKd!4%?a-wn^cbo+Qzbzwg~g zi1lWmD4w4E-var!Nrj)#8oAl^D;Rp)7oVb;`uzFHDi`=-iq%wuiZA#)7^=V(Ez-o6 zuY4|AlxmpS)LVnBb@+D}={&rCQRMs5Egh*g53X*c8o^Z`pC}mtQGKm-eyH3T9!?o$ z*5xaj&;(`^E`XF+mRx0xT0xwX;Szzc8uHSoroH&ypoj)@VVuFD&jf zE+k;s8X6Xy>z{~6)iYjjsscS3@Xo6}w9taU^|KdqIpsv*xv|2sV34md@HuUVLzU8zq26!6h$_N{Tnv@xL{$C=Smx3{`7o#OFh0>vgTDMZTcwVr%4o>vXOfOlp zm^$$W)>bvKinN7(aNhA7la#1~q=XNUl*#c~%34E4nqg#LtbYG3*1Eb<#iFTKpTwFt zQW4@fnk2DhsHV;N8yWog4{^N0`jM4-<}}Jjvvlq7zfDaOm?G}CEgF- zxsgpB8>;+lA+Y{ISE)1)i^(hW3+4xnB}ME}He_T~V=cC^H-#?_(2B7l#E^nw$i~FW zWFY}41oEr_!q5PTa7Uqx5k|&nqyYkBj6g{G&wu+*AUuL}DTMm}fdq)Jl`x=k(14E! oiHQrkOa`!|h+y(DyYQe;vKu*wM2+evAADHA&dM3rWEq(J4`sEFQUCw| diff --git a/res/drawable-mdpi/ic_wallpaper_pressed.png b/res/drawable-mdpi/ic_wallpaper_pressed.png index aa598c3e2564a39f89445a2a45b906f6e2d297e2..08794d902b78414797e3ddfe8903341a9cc19a5c 100644 GIT binary patch delta 759 zcmV_FLLhg?(P;ncXxLe z+#&A4;Rk=W*EO|8W{0roJZ#=HUwWzT=`d^B7aqK$%SDXG2%U<=3BSzey7#Y4Q>pl$JF%L;M~z@#RbcIG*Z<$+amof5&+t>LvNdAYxycrfUjFzd zjm6F#&lF;%9Dh%6j0IDbt(>u%X3CaoSt8Elu@d{3Zn`Y>a6_Ca%Jw5U>AgJ9rwA*t zVfsi}kX}xVg$+=Y<~3tAG`DD_g-cpHq{!>-5T>6DdDgq@GUhTzE3ifi^zg3oPB_Y6 zzVMxu?%F}WwDIzSAN=Nq_%k%e%x7+1zsfwDAhb#?Zhz+M!gD zEBh`| z_kE^Q=9sfRFW4jv)KIIbh9+LxcSkFK#nlxjL2yCE*pC#>Oh}MamQ@7?h`%KMH%70df?K>fw!z90A_TQ{M2}p;x@;riwYmM_!4m>m_IK p&&Yo|vb6Fs7SibFG6|=9{R3C_@*gFCGBE%E002ovPDHLkV1ly8YAFB! literal 1391 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 diff --git a/res/drawable-mdpi/ic_widget_pressed.png b/res/drawable-mdpi/ic_widget_pressed.png index 9b690d99b201afe7ce4389fe8871c4edfc332be8..634b415c38eb2cbfcd7f7a7a700cdfa43c0824e8 100644 GIT binary patch delta 610 zcmV-o0-gPt3Gf7v8Gi%-002u=xk~^50yjxSK~#7F?U#d->^fvwY_u@abl4W@yLV<6W6avd|+ewa~oVD zox*1dI(D%%XD8RVz(s2=aE)n(tCLRSD>+4;R=7gS!L)J*~ zbQIgeVyP`x$nzD~8izcKL}*@f@I>m1IAB*uEa)|g2DHYb$YR48l6m-K@bD!fX0IWL zHD8<5uZ3h9N+m7<`$gP5t)>=}C2f(G#U&1FCPu93+NGLVL9SkEt?^OKHCd~e#{!CW zX{g30?44lGMSn8*QBsM+cTSrcH>I{&cJRnfgvbnORy0*xWB~(sDNM9#6Kn{NQ8-p<7LVCgsc5fKz`?V|rC_uq^lLB=L>!j7%n)gv_6FZb zleH#8i6xa4#6a$a#4b6$GR+X-t>z4$dCePZUh|3hrhkyI1GqzgQz!k*6#M3wBo!Gc zBH|P`MeLI26BAo`k07QKH)3v3!lB4VCYXLFX3_??NX`=Qj8PHyUq&&BiH&9w1Eu*R zg`3PcCUTGEjAU|^o6Ml_eyi|ETjQgu6YK(ka2fsjj7PT0c?7I(=5i42c~l*z)peYU zVpUscC0l*kK5d`2!?jI+5Ebn?3XO7KDTHf#m%k`V)+qk4OtjY`xqqx{SlcD+U<+HV w*}@LSmT?xcGlJX6gf=@=wZQ?Z37lO20UiDuJ#W5tQ~&?~07*qoM6N<$f*AoEJpcdz literal 1177 zcmeAS@N?(olHy`uVBq!ia0vp^+91rq1|%QG79IdnEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvKUBvfU(=jY&!-9=1fl)$B>A_Z*QK?R&kX%@X_C2Ew3!} z!s1g+8v7g_KfZXpK&h)jATTEUzp;F`PQ}Lsa;)+iT1_up1p+^A+)*8M#YSdwN#%-F zKBeiCe9EmNTQoD41si`|{r-L6{#Efyi+Xfh3^wmywQA?F{&fr)SAX3J?$lppUM2ozL?yJIw8OC7;gou{NwIL@zrniZX|EYVB5vH{?V)}|MSEjXthj; z{jA~l_M&UDVwn{(9HZBHd#T%q6!e zoMkY7oD-zg%$D;&Qs?1hA&Zs`+!b@!4zgr>I*8wpSslIhpUua$6_#hWMxHq5cI&`p z&L4;WHh7=zi}Dx0F){7M6VCj@GrxSl#doc*Mv zc+)!Z(>->({g+CWqUr^ zbY>q74xWGd$v4Yn*FAmjt6HPFO>eI&_RhR{{^+N2@9$DMI`@ugJgHTk_IS4K6Wzzx zr|tP4Zat}9mseLmoa;Yh;4HV*8&bO719P8hiEBhjN@7W>RdP`(kYX@0Ff`FMFw-?O z2r)9UGBmO>w$L>&w=yv3V|}m$MMG|WN@iLmZVmqHK~#7FeUe35LqQCH^X%)UdLdZhH$cu% zZ`U|SfF*taoNKVb-QAu`2${P5yrju~%-Z3wkAE%~|6jFs_G26`q1c-w zITWno(;DqfP}o2k^b||Y(4L+W4$Mcqb3WY+?Rn=55g_2Uw^nKv?|NDL%F@zpDe?YS zmbIVB&f50`YahAJ+DDGHtG>?9cGbt)Y|OoA|EBK6Y^?O%zB28<+gFAiMm4ru{{?d! zR1h3U080sdk55C@e@aL6y`==l1;;e$4n1bw+iHfmw~yJb5XWls?OO(ziysZX6hCHO o3P(e8ae(h?zSU+g)KQzgf7R5<)k+IQZU6uP07*qoM6N<$g8FTyHUIzs delta 884 zcmaFH)WAMLvYw5BfuShC>=ES4 zz)+>ez|hdb!0-zw)bN6Vq11qZ;Z*_ygVhWM2JwP9y8>;15^PD{?k)`fL2$v|<&%LT zoCO|{#X#BvjNMLV+c7XO1$eqR)`wV}UK(QPt?VdKYkV_Rcaug}f_~ig3EKKjmriai zJMQ_fc}~6Ce}^4T8w4%a1$U%twq&!2H&5i{C^YL_{rKFQ-G_Yd6o{R?o4xGEv+B=# z^Y^{yeByCggdw3vkei!Z$bqeaL7|1=EW+myS~`;J9V6FR^Xh}vB+bBNUz)B zP_MU9+4(=a)>HtgsX@D~t*!MuCq8dfaS?I75Y-*F`smfGSC2-m{dV{Bp7T3ho)sOR zuv2Q`)_;X%W#69u`)7CW&K;3?&jr0!Zag#TTKzAJ^^aPYJpH|)a!%CiWCqnq9gigx zB9%IiA3uJV>7q`B;z=8R74M3QiUa@t?aS}sQ?Tj#L-_T5>N zGrB&!dzaU(qQdZFpZpVEJ+o@D6ovr3>CGSCJ9zChQ9mitBG4^tl7P5779e@b0`*>UsDJqE|_JUJNodm7_}V>4!_ZLYldvgF<~oxaEU|Bccs@4cSW znrLy4LEUrGb-wlvs2n!{oyI??-RliV}0Zc=Fh>WA4{W?H}Zt=jyH0 zxbHdX$@7N~A71xbI%&hIH@NeD!?-wryu8vx}%4@08 z>8GEj%G&kOvVLY=3V~Bc(d-1l8AxzK43~yEpd$~Nl7e8wMs5Z1yT$~ z28O1(2Bx}(mLZ0wR;H#_M!AN%2If`<25(iFfGHbEM{a&fW?Ch>4nr#gV~7R^O`a`4 w4U!-$g7ec#$`gxH85~pclTsBta}(23gHjVyDhp4hg7O1{r>mdKI;Vst006m(*8l(j diff --git a/res/drawable-mdpi/page_hover_left.9.png b/res/drawable-mdpi/page_hover_left.9.png index 2bbf428072826a6fae63526b0669f181cbbfc8e7..2b6094cf65491623d9208b874f73c9f9cc44b4d4 100644 GIT binary patch delta 80 zcmZ3(m^?w!i-m!KAEakt!I;d@^gp0O{Es^m51+%;3@1GY#RVQJEPQ&3 iKFgCn3&=HaC@`cX&DaBhlnx-Dv%n*=n1O-26NDMfPo7>26!i0S zaSYLz_;ivZmxCgQOZ>%yR_^R?rpPaIWl{T+b3eMn$V$(|P|!M4b<%Xd7wij|P93a? zbaW_A+V1+~i$ieYy_XdWPQ2WGlV!$qgA=crMT+E=96Dq2B7jCSc)I$ztaD0e0sz&~ BG$sH5 diff --git a/res/drawable-mdpi/page_hover_left_active.9.png b/res/drawable-mdpi/page_hover_left_active.9.png index bf70f36011458b35a71e01ffb379b22d36ad8159..9eb00a28205b45ae9c0794b0f78e4858be2f036d 100644 GIT binary patch delta 80 zcmZ3Eakt!I;d@^gp0O{Es^m51+%;3@1GY#RVtoIAmg+ iX80X_rf9<;=)fShYiZr)+diB?T@0SCelF{r5}E+dIvEWB delta 151 zcmYdZ$v8o>o{fQl;fP15Gmv5_cJd720D>Bhlnx-Dv%n*=n1O-26NDMfPo7>26!i9V zaSYLz_;ivZ7lQ%^%kmeAwtL%IZ!0nhpL%!Jamv-N3pzV*cxq4FQ{v3tz@@?dIhB?1 yZ0A+6iI>@ZTPv5pZd6+SZxg41e&U4d>=pG&f(}y+F3ty<%i!ti=d#Wzp$PzW>N6ey diff --git a/res/drawable-mdpi/page_hover_right.9.png b/res/drawable-mdpi/page_hover_right.9.png index 4bafd0f713bdceee2f1439aad0d925ad53179c01..c2e598351b7498188b4673763b8a2b23af4082d1 100644 GIT binary patch delta 78 zcmZ3)m^eYwgN1>CAEakt!I<38{6CBhlnx-Dv%n*=n1O-26NDMfPo7>26m;=) zaSYLzn4EHe<^RPWJrP$Pu=V{fWME@!`|lIry5@&ZLgTK3vYt9zzGscp*pv=@2xDQ+ rJJRwaKgj0@*M!Lj>t!DCFmU>tZ`oS^L7ahsi-Ez@)z4*}Q$iB}WvVc0 diff --git a/res/drawable-mdpi/page_hover_right_active.9.png b/res/drawable-mdpi/page_hover_right_active.9.png index 4aaa0148e71ea93681816b93ed6622c127e49c4c..d2771a1a54e75c6585d49322ad454a8791f82ca0 100644 GIT binary patch delta 79 zcmZ3)m^4AslZAnSAEakt!I<38{6CBhlnx-Dv%n*=n1O-26NDMfPo7>26m;=) zaSYLzn4EHe<^RPWJrP$Pu=V{fWME@!`|lIry5@&ZLgTK3vYu}kW=XNDu_+z+5XQos rcckSGU!2&KC*AS?SIsp>F!lyYUceV|5Z*) zu9;gkCf)ti8{2OC$PP(6P8K0{a2$F}=~q)$L#jw6$q?n7%FtV?NDZkeQ~Dixtb+rh z+86^Z6QplL$!66>)%5KYlK!7k=p(90by2d}w;@O{vFEFlg*d@;rdf?##V6$8&~)T8 z%_evts*wxJVt?O5RSWotx-nG?_C3UMxh#qiLVssP=W5#jbUiCWF%@0Pu_?V=$|S~6nW9YU<>GG;e@M+|x_>Z+29z^hVCD=he>!$P#2rzU z#&+jJoJrxeWwb|GplAkBh_Ya`r|$L`AsuVRX^X1uIo1pkjCE{FBAiJmnnDzkNhHGj z?KvlpBiTGO&g4iPnV8;lri&HLA@m)J-*dv0yD{RH$5|daWU}RPh`E|$g!y=XMHh%d zPV|R4SATO%PrFiOX`)Z1%AR(?l%p|A?_hc8l*!UN_{}ju+V+;7kZo^4;z5kC?C+5# z`qlm(u<)kD1lyr;dO{A3gAFDg#Bq3@o{+=y;NU?7IF8DCLXOB3B3uj+;W}KdYa*Y+ z1(6Fmpetm5PKbM#oYIYvBD-X`b3iuF*AudNet#~AYs2^o-5?cY!+3sc1UQ%UKCK(% zG+ELcP6*uf{p$UrxS{ble8T_7jOFN5Lbe>5^cgnQBpJ9UBVBokkNJJ;tC0ggt|WhF_?8A-CNq*0WO zDu0D=rv(03yM3BN_K{dS`1uo(g-CEeaoy5HQsX?9CZ4zsZb*DcwmEhLXSLsa%O@C z(|d0rDGmPOZXwfqqX91u{+#%uO-iQiA%7{A8GA^{v}hCfdGo=~#D&mzrvDN%AsJU>nJtY4_hs89q25!I;-Ct$($Y z$W}05j}xpT$H`=x+Mfpywo zoCWbjX?aO`OrEn~^2A~NyElL9ad%S`B6=3#h8<=I{7tD}E*3Z#CV&v*6n~%)4QVyX z7Q0-C0!9cSzz_~tvRSD6Utb9p*x`Z)KKKzt2w_^0Y_ZEB1mTAd9=KqK1(Fv3hR$L{ zm|=w-PPl1#Y5B6nF1u+tVTToFh^itum@G$PAWAx?tPCJ!2^t_coLZ0o@thKB0km{I e44kU>@gMDvq$sd@I{p9v00{s|MNUMnLSTXzN~`$* literal 2641 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 diff --git a/res/drawable-mdpi/portal_ring_inner_nolip.png b/res/drawable-mdpi/portal_ring_inner_nolip.png index f981778f5e9d5acb9cbe1ceee990aed0510bc416..6ccdebbee24d6acc9bc309d44bd4d3583681fbc6 100644 GIT binary patch delta 1374 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 Dc2`DB literal 4704 zcmZ`-XE+;d)Q$wPEA}Q6UXH4>W&Q8Q-kpf##i?Nw@P?Y*U?1bM}1jhIEL z?X7CHMnCWO@B8sx=eo~*-RE5Q^Za;zoa;G>4~=!{X}D+r006zd9^CAjJ^uq0<#kSV zwfg6p$lWxJGy#C7RN4zCifc{gZ>D=6P(Q)5b1eiO>zNq=0HLA)0QMOG@aMXO{RRL8 z!T^9>M*u)27XV=QE$lW`y>3uC8|uOVfB%b;zN(Dt3bn5u(*K(E{uer<9_j!91f~zy zG=EAuD025Hv|=5J+L%w_9WiVdH7Y1KvZ3;_piUGdbH4o!Axyq*^o2qiOB`~;3Z`jD zNM_b)EX>_sm{v?KYR51yHmR-f+g}{zg>B_=o_EO+=Qo;C1HLxN<#iD+S6i0+C)B_U zJ829xVde{a)By&_Y!Nlx3bWClp%X=u{bUkg0=D3<#u*Y5<#Bd&_hkggg$UdNG|Mm! zLw=DWi6A#(R#&l&M;7p->3|{Hsyq9zboa%NBy9@$nV$!4iSR}7Z9f407JLzlz#>`~5VzZ;&*HCK%IJ(9d zjrJzKIL!X6Jz2-iRW9uJCHa>CE;60yTWh9kPHRj+{|+?6Q^*ZWxc%^T82u; zV-$GjjJ)?qH@7>VP+>mHxWH{G)fsH}Ng07TmW&;0U;=ZrjaD{luCwkomZDMBiWih3 zBzGaCXOiWH;80aYu$)X!*P0^u#OZTEq{qRa+@H?$I}~Mh$rb#amMs()2KJcHS;CKKD#ju~Wk9qm$SZFZTttVhBtN|he9Xnxk#@=A)%QnMS_xheFLOa zsO!OTWD?yg8yv3zuujP5zOfrGNHkiP5ut1N6unWZP|kcPAooXcN?dO3`-F9Z?dJPt z&^e~up=wg}t}!_=9!;tUjw6PRU3yW>;u9!` zwE`Hj$t<*a}} zVPPI%TMCy9|4Xr{em51%T@kUd38JcXU_RZq&PM5j_k?lz-|F<&T3WYz73$v#I$j?j z*l4d?*bejzTBPM;^OPHxmGfmwe;qDF_}ULU)LDpuBT3(HoAkUSPCuGPx=jp0ZnZ)I5sdq#P{0n1dd;GW|!&dcqm!}J| zony-j9MtlV$aHE=)5q)eX%(XE6{{m{1Ul$kQ+_u|So;MHd3~R+HU~Q()aWfR)v{pd z81mL!+yhJ|&D_P=CHq%&8z* zZ68~-cC}fJ%e4*4yLW0#5v^#zh0ee+jK9B$yyW^%y2 zN)7;Wm^%h^L#$Au-CWxHCV0N>sufFl+)j&!o>i6Kg4l~$n@?dSc?eH{#P+7zizcp}7T3MScP@7U|APX`4oluy;|mKHg^3b>lFG*}PsX}mzE77O zCB4D(ux17m(FgOk4;!GoK?0rQcubx{ENXgaJr<7RI<7g_I%FDT+yQ@Obxw$gj{Rt- zQ#tOMUaqg8E(MYNNZB<1VsPK=?D;ck5`6tw6exK*w93w+SpA#JC$9L`@QD8As84=f z7FZ(cx71giO-dOBFFwRw>=J6Ti(tlQHndK`bcX=GowO_6!oZ$Zda&nj_5Kv0%^jQ) z;O?))0P}h3IpP#-y42%@U8a64iHV8Oo;a&sZysP$U#FY;CML`THYNF)%HnF_A2j6^ zzq{DBKTvVJnZRQSwx)+|e`)-~c}qzoLh2%VOG>w0w0~N|G{2l0(RisWA(9cClxtxw zcD@Zr8wlArB4dG`kl5K0L1L8ID$2z?A$k}gn{W4?52Ga{=UHIfLe%`;*oDhlEhZ#I zS5Wzcn9*TP8&l#|ok@{xoy)R)gL!IN!%S|sl-51~am8n0fSaBZRwYl$cfXO?b&`_r z%KXcpGp=9w1|mDGs5B`&dJGf=h$YET?;gZtwz+p-{d0#fAFPH+akb0Fyyyob;?tnP4~FKDcr)G>T-v!{V`;5nFj= zmYG{M1F@E6mVy{&?c}6a4RLZnx^@Evbq#Z9WmlDbU7t~eMRB&^6iCr9|1OF{`K4so zDb5c$Uu!wy67$2OP01a|Chzb`(z&`^EN8)+OV@Nas6Oo{v&Cd(5!~tRr^P&_>sJXz z_OZqzKez5Yljel??8uL?@J(dVtLO!ghb)>f(>Al%CDB!cDJ6%uuES`vY&{;oa(meN z2k}ApJg)Fg;eB_uN9D_7t)bR;xp^ndT5*e?pLJR5Z3%amt5MVOYHSQTCssimH_CS! ztg4SRnuOwiJ8nw2&#nsqcX`%Z%@_I_Zh1~Xhb*=k(YMwa%^~=)8YPa1yJYPz>SNd{ z$b{L5OkMi|d1oN15;?J|6LOh)i)XXZe;JeRDw&VCx1C3%4AW9GD|-AZEbb7@4t_T7 z*S)7oYGm7zHn2)`kFf-nrf{hfaw@d2eK9OfrYbSJA%(huU=v?hC&4g>7ClpG8F7C5 zZe|qvdB2kCTbu(^|ECFos)u#&{i$&MUz>fyWk#J(Ssx`Qqs&KK7Mph#$y}e`e23%L zqeWZiFZESZeso_$^B0d(E}hsnZ;K@NT*VB%X-Js)k;H``BSJo|OT6v1%zQa+EQFI1 zTv!P%mARga8^kwzAAhAunbz{^+0mxC`Yau4Mf}C1)~w1!UgbU*058k+mUT#zE5KX1j!)d5t-~nNa&tTvq)G)LXG8EYa)Bw7lHLbyDy{ zGn%!k!}$4j7;V!XgC~vOw>LxET0>8a+bVkzw(zVs{H14yoEj^s{zL0&d$@pXl;L^X ziaB81XSf5pte_b>MPyH-_05|fe*3i`DZEoj-CpM()knKQPp7`kWVEC#bK^B``f zQH66v&!%t=FkB=c*dj*gzIc(*I?Jq9eBm_bu0d;&(Po(lYz*H1lqWI%_PhdtV5l9h z79Q5Zx1>K|1*)dLrAKT$o4EZd&dh%pHLj<8MaSALVUS%e_qklDQOOh9j70e!*|E?1DWoOCh2(kNVn|rKA&HSTe*(8Eyo~|(sg*34zr>i`tQmI6w z6Tykv`H$X@VUGlFyuw(8ShN*=MB6H+h9-t*wfZ%SnpGx*2}cpQ$g0xTi^i$aHQo0UFVqHsef~r9IHQHt$F1DGs z^7MxrYDf7ASq0g9=F^d=13xOfzMGk!pqetFXaYDYz1QhQS=3O^)b(~2)4(m&R{v4fFS)Mn zLydBXG>~6wb~CbEgoQbrj|^pNG5&Nn`)|wM`zis!h^%Ocu;_@X?M`g@IrP^HOVhF` z2Z4qpGL)s`jv&mWhe?vaN+j?*j-<2x_I8%(s@_Cd=bn7q{~_D`Ao%+8 z&R5CKC!&|`A zt)#Z6xUKz!e9lT*zIKlqr>b0kvc?H!*cyf?sjda`>-P;z<#aFOlZ})JO33`2Qo7xu zJb5VCUT(yTuiWyK>*TYUny(};zK{G>)k>iSv!5>LeBsI2udhi#?OZ=%I&a@Ur))eB z`%>yi^qYY4PD4+Dm;5QGL$Q--^exv*6p;XJM1YG^07~VtAL^O_vM?D1NtlA9tcoMP5eoI>TUmYLxc>$Kd7T;_e#q{~LT9``51xod4bM$j3Dx*vStC&~))}MhWP9 cIk}gig-TrLb@qaa+{(SR6Twtq%0gKko z9(P4;p0|I#Z>a3DW!v7GzLH#n8U+`9F#3#++Pqxu*5WN>%f5Q-qMgW_%7fBv$2r3~ zT{EZqMA%dN9v$;p=ve|3u3p=HQ{QWI%{NDS9)ES@3uz`~VbEZx?Z3I7k_#lqULE>8 zS?e#X?e6NW=YNED%6M}6Uc2=iA`BD*4ffs9!#kax3#4Os=ewh^n4(~GdWUZcSCI70 z(>sXtVBnU_Y0Pt!iK8)Z$(%r{K|B6(;YyO@FURUZgIPSdInPrzp60y8gE1IwLwms@ zEL9?R&^NUGW>7I*cd!K-Mq@oy;)%up?IHRg+NUV?i8O z{T{|K=o@nUfTK!W*BwCH(Bt>*OsSHTeLL}ZZ9~6t{Yk3iBpcV`^$p!C%lEh{zf1RY z-2sPJgRdRhxcUTTbApYlUprI?B>VKk?YNTtw)5$SWH?ZN56SLdvt;#Q%H%LhR^Pvd z46kpP<9|q>dT~h-Q#3J4lBZrI#gYFT7`6Og&aOK({OGWG!->!*Wf`wM``9WH61*A= zsQqfsnA*T8L)B!$a^8CXu8)Pwgj0h?HuKrW5m9r>FzTwG&F^{p{oCIZF2$+Azp|fg z>~k=iF(B%LrFAlP@k#R5a}RthSQ5T}g+ULP?|*mgTbc}yhxVoy_Fu6*e9wn#o_^?s zwSpyKz9=zUMAT_?Z8d7QPG5NLq!|na_eZu@s9>~8=`C-BjoODx6z}lfZY(gRloD)bja0gJ0+7=C+0xJjxRQ7)X lg$Y;{P=AG|XVXqQzW}(9buc=G@KXQ)002ovPDHLkV1imPvyT7( delta 1669 zcmZ`)dsNbA82&IqP0~!4*HlbRGaZ^v23jDd=tRwliWUKhm(*Y&MO0#CIxkIU=E}Uz zOX?Ce6_vu8l^w!Xro~)SPexwCQO>ix#oVv`w?B5i^S#geKJR(n=a284_nSc!Y%aDC zApihPIXD{#;7J5B0f3GogO7}jPz~cn2KfW=FV=HVVRwWSNd`dZ1VC0c0ILv{H46YA z4ZvGE0N5)4m~kqk2YjIhg85ZY09gNYYGl_hL5x0!MCCz9`u7IPQ}+U}F+MneAc{(! z_@kW6HVHC+xQ^>g-FckkpS~02V81`aq1bUL3bRH3n_4sXi@le_hd)1?z3W11ebeP~ zgOE$a_NXA^y!`1Ecltj7nF1(J*q3z6BQWf#_AuNnsj`-9a^w6M_Lj~`cV zx3w)=*8c55Ez8wI!GcS$uq+;pS-Aa5V_&?p=@+jT1V@?7sdS5|Y^^=mkCt|K^HY+O zXK~cBdlkF^^9?iB71doaB@Uz#xWAr5Ftag5{D(#}7#I{(4Qu~hr`7DKD5p-LP|S#F zveomu6%57AunVgy;-mJ`NXSDXm123X2QS93o=WZ1u#dCdTCFzqXZm}?BSWdw=tFLS zE*nuQqWcePd=3YF_R>U}Weq&bIp6+Hrgrtzok@}6L%G#W8P(a;=EKs`6RRA?i%nF6 znsK)`=g*(d6N}wrUWs<0Chv&W(OdL}VCVzH6OP_G&nhb`Q;(erGo7(6WBvSYY4W$R zu|7oBkBD5%#!^t+(9poEjhOvTo0C?GnV}b=OgD{FUU zrhhCHW6Tu@mYuARj~s$0^j+fu-ItH({ureg5hhOw+ z2>K$xDCA2l+tY|dX;Zyg_|r;+q!u*-_acwP`60Z?BLUZb*MS4mO&5Gxuc*>J1|ytJ zCop~27D~4Gav_ zV`*jGN8QRFCyosa3}CJ2HQQlYe7Llk!C`+ zb_*ogV!V;>54Yz9`2QtZIn5@ISgSRf#=X@>*`tygsyU$i{b>m6@6O z73h3rZ9AznxmE*AK^511Los`@-_J5HU@#~!aM1l=FCHO6AUM-Q7S8!PYZp_?osjqL z4i6i9UPaRSPs?ey1szvI8m2lsJL54nNsS+luF-^po}1pVteM<{tejrNCDDFlSh&Y1t;S7ti$CmMe;2!}$lZZ@?4$ zk5N?O`*Y)eKbpFqtH+rpDEHx$;dI9)fz}02TX@MQTDGpY)bX#!{=4Y@dds%2D!SA; zGqf98y^b0CV>1#M87%A(E(-$SnThuBc0+r+d3r>7_+ZgKST7GZD5B9eehAus6zS}Q zl*E(3^Zx{FdjAw8u=r&0H9Ilm1cS>0gakH|Wfz>zNMc2@7zro8k+VL15FmJeSb*4{ Ge(oQv?CIM8 diff --git a/res/drawable-mdpi/quantum_panel_bitmap.9.png b/res/drawable-mdpi/quantum_panel_bitmap.9.png index 86be568fd06a34645f0db78c83333c48ae110c60..9325d491f856917dc6e299be221c7820df70a010 100644 GIT binary patch delta 270 zcmV+p0rCE{1D*nq8Gi%-005CWW+?yw0Od(UK~#7F?ajqO#9$Og(fd2@?%DxPG0;GY zgPM>HHn@*x;=!HouFrdOHU-4rg17f*CqyeZIzMuf4U_d1vPT^H%aM1Qem$p8D)Z-%gOJo0Qj z65yhbpJ0A3!~ggn^W}K>nfQ_6I5rHO>^=vd>@tK2V^H*Mc_)WY(c{Byk3JNHv801J z7FjE|p3z#lMds*05}T!mNoJYPX_iTPun?cX&_WySIknM(L69-=M42l-GyIhR(#KSc UK-Sb&00000Ne4wvM6N<$g1-QQ_5c6? delta 421 zcmV;W0b2f^0<;5=8Gi-<0028MuA%?{00eVFNmK|32nc)#WQYI&010qNS#tmY3yA;# z3yA?Y$;+((00CA>L_t(YiS3s`PQx$|MW2(lVSy^KVZ-6zIK5VT7l_27RKS8}aE3)} zk-AP};h-YaFL{$V|Jh?Z`7x@BF@^+bN+%%6>})zUIx})VMSsdbrDDb&Sf1#U3I(vS z0feRoD1e!3#SfugE%51D8^Zf4fJI%`_ad^h)@n`@kzHNa55OXrg!X6b%X_uo?;owT zOV!kk9G5YMvMgV#s=5O{=#@Pzr2#5c&4vP~Dyq5!DuQK=f#+@8W<$N4*L(~-bS+m$ zo&}MeHbt4oynlXUc1gN`FW?LKe}K=Dk^WSvr+ZO<`yF|PUSTmHXXLPg8Ic|RG#0}tNu8s{NM}sHC3?BTnO?{*e0IJFtg*U@ol$&ZN P00000NkvXXu0mjf;f%Hn diff --git a/res/drawable-mdpi/quantum_panel_dark_bitmap.9.png b/res/drawable-mdpi/quantum_panel_dark_bitmap.9.png index 70429b9fc5a05049b8a577fd4ac4ffcc6ff605e4..bf74fa06037fe71ac62a2d027fc19f79a22c6cfd 100644 GIT binary patch delta 307 zcmV-30nGlr1I+@EBYy!DNkl^ZaDKmicJl@{ zr#G}7w8?hq?BBojp>Ox%?tSy*%5EHA=AsR4X_IXyY*=7)?|vAM|I`$A++(>YQ9MoGq(>`vjDow{gpE<@5jm002ovPDHLk FV1j5Yn{WUC delta 420 zcmV;V0bBmf0=)x}BYyw{b3#c}2nYxWdKmpe|wKoEw%@gr_fA{vfBPs3R_2FFMn4nf69Xy`crNEAWA2$1aTPQc&cPRxZ5$znR?~?Qc<4M1%pMLnZ-(#EuqS*-6j)A%CH?tdvW*1cn`RhC%_h zt_13$0t7&0M{ppt3XlN z)+2qTo29C*M}V%s(~l(%&s9HI0dNLf0Ou4JxNBZ7(>^oc9e4viEgWc?Jp=pzYx|Lp z(<~ikYBehtbDOV@D5~{ow{q(;n?R?pb|v8xtsNpQKOJpjw^Rk7s{8_a7k+K?xHzBy O0000Tpyll4dhQp7(+VgR+FwA=Sx190& RFAbon44$rjF6*2UngE{VC}scv delta 205 zcmZo>yvH~}vYw5BfkFQB|3o0gQtadz!T|&|94Q?@K4*bPWHAE+cP9ulnx8zq7AV-@ z>Eak-(ff9iAz!lrkL!Hqlc!Dz7K!;y68@$$)5>_0qN-C`;^OM9u)mC*Ko@Jwc$Hi|2Zzu z+Lz8($2pm4OSEyjz&y+6%i6YF(>uU3|J(Xq0u7=qE2WjAE`Iw7bPR*1tDnm{r-UW| D-=9!N diff --git a/res/drawable-mdpi/screenpanel_hover.9.png b/res/drawable-mdpi/screenpanel_hover.9.png index 70b30785fba849d028d693b41d23121b5bb9faad..7f28ce0e04f9d8e9284e6e0244e2f59e063f3ada 100644 GIT binary patch delta 113 zcmcb^*vvRVGK+|||DcAr2 delta 203 zcmZo>yu&y_vYw5BfkFQB|3o0gQtadz!T|&|94Q?@K4*bPWHAE+cP9ulnx8zq7ARQf z>Eak-(ff9iA>UyI5$F5uM&*x`EIrR%>rDQlvX{f#jLoHPnv$rghf1#$1c3Lepe(NbMQg_ z{dA!@l9QQi_PKK@?kPIwJata7_Jjq!^(L(hIfi?r(o32yF9JG+!PC{xWt~$(69BLz BPjCPL diff --git a/res/drawable-mdpi/virtual_preload.9.png b/res/drawable-mdpi/virtual_preload.9.png index a3c75192d70b2e6e5a24a0188ade2bedcf61ef09..c4a01fec135a4fe99e1d48c2f587136be0ed236a 100644 GIT binary patch delta 1593 zcmV-92FCfr8ovyX8Gi%-002o{$YTHi1_nt)K~#7F?U@B^BS{v9|L!&i%;9Ll;F+Ug zW@cudFl*|VDWbbuW@ct)-ei~=J>J299K~wMsztwnUTO#3Ub^2*?N8OO-mCf_Li+qW zz7PVwWAzr|{}2L1NYI5Y`pXx3Eo33PAw%R^M2;k~6xr6(5=X z&Zzr;{@aWhsY&i6_l(rvX59btcSaqV-Bx@VrP4RH-bx^mf)I-=AB_*z(7{{RH;ye! zhYfMCzyzZb6MsgSU_l&gW$BG$Ti0I%squ{~vOw%TgaB!`M=qs3Sor_x=v>R!RTOu^}52=b@baa zQx}*a^b|t8&)&X5>AwHZ$bK$~@xydj?L{BBcJU98miV#NS!$}ak10me+ z3WWI2F3Weq&{G5j!!XEsb{S`Z()(Qyx(Gqx=wHiO)0#1^5Q2c-N`PUEt0@#+{I-ArJ1s=FT~CugtAz< zoU?|}utW+$!LT%p=1eXxi-piJgw8vGQj?wXexxPYt(3mJ6QJt|La4V=jkqlz252Gu z&3T*!YwN8L!b9l15zh}Q`GRuitJx5~4Iv#G!P)UyFhXk?kI&-l&6t>#T2{iS0udq zRIMdUu+k<8W)%op8N-5T$U^@W7Qz#YD995V7DBG!tk!`jsMf)mT%!hIqQJZ z)1|;PsX#QX;_Ri|Xv~h6aye^Sr3PU*F@Kx0?L(rGC$fy(k*BqrHf;$Me)`hmaRXrTl8Q)>ZUsHZXm9 zYVBJ@VW|e8f9)5X`PXT^vhuIv?6qG&uMQz($IDg9azh&luVm3eH#;7JIs{;_GQ-4LtWN zvK%_~ClGUF7Uj;r#7EMf_)9$H$$ulW5YxFoLDG2~w1xMt+!(11p|CN=zmhBmj{~|c zdR8#}I*nEr%}a_b5x@|NEX_-31@Y@NGN8Kb-of;j47rjP{+<~qqu6*eUERy=ny>q2dV4XA!rwDt>W+`8V3ed%Yy|604)*lK&3_a4yhx&Uwy#b^KK0RO8k0&$&0}93FILIwd5!$W?nL zEl5QyIpdM*fn5YiaXvG^w}>`L;V*KHZ}AI*b6uAKgh+P-Md)EhT%7Z|!p5;D=Qphm zlm#yW1#1FjO{-7NZybAFVVo0jFhj2ZL;^x3MyTyZO*boSa9qCFU^1oV9JS^&>Wiv( rh$#%ea*-|v>;D_}5rT>S<+8p2v5iaqe7k=d00000NkvXXu0mjfN`42U literal 3395 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 diff --git a/res/drawable-mdpi/virtual_preload_folder.9.png b/res/drawable-mdpi/virtual_preload_folder.9.png index fa2f1313d2f07152899e84a6eb9bf4b3643f1c00..2f3e420077e37ffa2805f8485b0a2524fcc191f3 100644 GIT binary patch delta 835 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 diff --git a/res/drawable-mdpi/widget_resize_frame.9.png b/res/drawable-mdpi/widget_resize_frame.9.png index 856cec619ae8999a45a29b1cb64868dbd64746ae..252482f02108992cefeb7c6ac21a115a4892bd35 100644 GIT binary patch delta 139 zcmV;60CfMb0-OPm8Gi%-002v}f};Qc0Aoo+K~#7F?bSyC#2^#}KqMg{&c6gCrQhI^ zzS+!s0)|f7nSSkS(nFz#1BF7NP$;y|eb;Ed7LC4@xEd|hJj?ZH1@!R}w1@s3n%;mu ta!*@{pMQIOZBQr_3WY+U(EjG80d#Q|_|G~szyJUM07*qoL4nJ zaCd?*qxs3xYk`87JY5_^G8*6BJjmM=AkgwKGKq0Y66dxQ)oCrN0jFLk?0Iptxu8JY z$U6Se+txSo9Q_O)iv;%b{WkV<_YXL_FiU3DF%05XOPrCv-zTnwdpm1fj?A+3mzu== zJ=)0KbMK;j?S|jSX1RY85M8LOG;hDy1eu%8TPh`dGd^W6xGI{vFf>EP)}^)UZK_)3 z?I>o2+HTL{W#)^o-2UeBewXgHfCKe=SS>?(ov&J;6TY)AoPX~3^?c(;raRl44&|P( RW$J6#)xHozMPFS~QLAt+nZfj~Cb;zN=dx$e(*@!O5nZk==*$ zQnoZ(ub#|g%g$Flf3fz$sm?zoaud&GEp=e7y_Nozv+yEYue;grj{(OUG&iqa##8Vy pV8ajV$iGKm#yfd;uM;{hC3K>OfBqD`i$E7Lc)I$ztaD0e0sz%zQ+NOX delta 351 zcmX@d_?~HkWIY=L1H;4JUK&7(rP#?cgaZg_I8r)*e9i)o$YKTt?oJS9G(UNIEdv9i zpr?ytNJit^nPKy}8^1kssP+B-8BI-#=DuFU+cDwRqdOY+YuGn=&3f|WS^t!d z1VmUL#I^f(PRxJ#AuGPhtBS^g_I*^TXv~GXndOy)|6@xmob0)e#K4K(-Z%=T$(8Ex;$l_5c6>KxXKn%XL7CsU*lRIE}&8gi#X66ZLd) q45?sDZeZdoIi`_3<)b_kP?6RO&P%1~uQY)Q7(8A5T-G@yGywp;P#Tf| literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^wjj*G1|;Q@5?=x-mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;K#~f{9znhg3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh z?!xdN1Q+aGJ{c&&S>O>_45U54*zIJt9gvag>EalYaqsPUM!^OLo&yGL5iW^kCw^GZ z(#S|JpRb*gcJFt|5zb}WKH)Rg8N?>;I#km7lIyZ42?Dd^e=~^PWvO`2ulW;bp=yb1 zL`h0wNvc(HQ7VvPFfuSS)-^QHH82b@w6HQTu`&U&&8-X!I(6mKQ8eV{r(~v8;@0q^ zVEJvJ21$?&!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$LBYe|>FVdQ&MBb@03Yyu Az5oCK diff --git a/res/drawable-mdpi/workspace_bg.9.png b/res/drawable-mdpi/workspace_bg.9.png index 2856e09851589aa4112ecb5258b089a7368c7278..c67c432fae5ded38aa3cbdbf96ec229c2db6e300 100644 GIT binary patch delta 138 zcmV;50CoS>0hqNB{r; delta 196 zcmbQuc$IO2WIY=L14F|3Ux$GdORhxWLNknEi9gJGIZtmT0Oda5|)vGI;e19N2!Kt@4QF zN=I4g7e|t{(;unl9%HjoTz^FQ#jMP-uAoLuaob}&2fo$4INx*eW5P!z-$S$JR;-zK ub9b3>nv)vuO{e?6pB)qvE`K`z7`GXF+W*;!2d@F$z~JfX=d#Wzp$Pz&15M5V diff --git a/res/drawable-nodpi/ic_migration.png b/res/drawable-nodpi/ic_migration.png index c282cd2832dd5ca91ef2a9a53eb22516b827ac1f..14f8721d840293f21193208dc36c9012a7b03651 100644 GIT binary patch literal 73676 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 =_v%&>0c8-}HH`Gejtj0J##cd^~R`5%w5VLb`i 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�T6OR(wWuo#xfa%=m1Di%nha6 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⪚|Y-08ZW?LvKn+C!v4NkecpTT`nXfReUB z(9gv7%6cS}@Ar&Eb)U9_wtf~uaLRB1GPoHx>llPIyoPlE7xk9Ykf5sK)D1xmQ1PAK z@)n{8AI#AwKlw?=NUoK9xKz=c{(2OvHjXV-$}*MGF|hW=g{VAWYJU-y>b+y zTRnY-3OpiyF(}i`mH$T1+ILqkPbBQZw2m-6ywVCcfKbAZPAEwr!W=1lC&*ak&PI%Q)Tev|KI&_lpRW6m%rlvWVYk0$zV=nC5uaC1dv=R~3g zGC)RA1`;`?EaAd#K$Cv=XX;X%+ec6Gd9L|68qwJ>`a0!2T5ENNIkcy{6g=vNISTkU z);_mR<>@Kv9-1R>Y@8lCd4e|1F3|MVhj{=jkjtZ}-{pzh44oR^TD96iZ|V-T}-O&9qfFOHmTFjs9Nu%00=Nq6H>eQ75N`LMiHut5wI=h0oVtM zS>O9!qCfkyfdF7(PLk!MYK4e;A_HdtE7EPdmZEOZaBc%z&qU6mQR)#COSUfuae@sL zU?Uyl4HxBYytp<lJF(YP9cJw@`kh95r>k;d+`pd`Q4&b76t1OH0&PTcNYRWogTQTAi)>|$L95J^f;uRYEKin>MTMkWUwZz zq1CXCERn=kmI{&r2(m+ms#Hsd0&RB%6(MN8NJDc7nL%WrW~2BF6+2)ZKn2gie6;6~ z`oN+1R0R`iZi;mPGG$Z0|NBJ0_j}vs`9kWs9+(otSp62O+bkuVpR#$=d{JD|V}V#! zZpg{X2{{?Dx;Qaqec)v=dfD=6b;{Np5S$Uz8_lu&(g04L5f|uyFMWp$AOV={iIj*H zB=6+KIVd41VGz4gtDCnptuy;}!(NMV--sBLMd5XP4!);3@b*cN&%=*Jr0B!R`qNr4 zJ|Xm0NZ={Y1Cz;Se+06qnK!hRn07i!*wfnKf0@U+gbnMp! zc${c=s*a$6$(O>>0(Rb~yL@5zMrvAyo2JM(icDoHji{PU*V}3}+YinLA^SNP3S12AFddi<3R3|%xM??4 z?I#4_QSd@&4U7jNI6Q}coH}{$-Pl|U zGO;$e;BUvaQe-C44lNBrwpm@D!r^iX%jw0_F?K$#Rm|!diymP(#=O*K9$+d30g8^i zCN?|5h8)u-+>2ZpsOPyB8v5@Tr5m;rfkPO^l5sZ-du+)l?9gu9HDNXdDCwNa+pCj9 zB!Y0LYpTBWG)cXZbKxAXV|Q&ehJA(%%mAQ9*O%iw#_YIYKpyu+9vmlmc0K_=!675s zh4`*R9&$fCQX@21Us;jo02&Aez=Fy%GxAs_1w3^xj*s#7%u@Y*^r5@|cdB*9d%tL# z4Tb64Xc&nXoD7AXof}FNtcEf8WDQ?V99zjA+H4Ov-KQ$p>}|AGNafrBl=ye%_T=1l zt&nzP)%Qs#+3U4y(AME#K&pgOkka-L0441sg!g^o6GT7p6G;$EFCY2HM?5Qs6NlPN z8U{B%W2}#DcA%h6)fOdy%>uB5+Rl=E_a&3kstC`@4GmIET-unlVHEaYsvs1p=v-N+ zEx*BBA~|(*rahxnQ_+B~S9!JOhKR!6=a@WCU}V_Q!BfkeDBskzT93Q2p{M~QSo<(L z11l?-x*`4Uo>AE8Kb36c@&J3b@AagMm1`+RKc@DN0!Ha?F{bDr@S z&gOY5H#l6L`hrj#SP{S_hmNaoRA2@)!rw|zX_OEw*o6ye;BXXZGHZ}_>QItw9ge}?w$9PT&I4&E%~sH*SrPUj zOvSTVTC#{0tP5<%E{X-?Q9#2z7?ZaBRxtz)DZuLPyNQ0}NBVu@(#!Ppbl>=HhtIO| zIois>JoQpw;?Wje77RG$Lc6EBb!uFtT6RLpit$~R*@<*qQ0s&evl}BYK%NM4?OL%+ z?R*3jP^NiC=_V}1DpJF18;Zc>tCX4OJWa!M7fMv%7!Y@#Arj^sA8&--05VNJ&ugtFt;?+? z0EE|(A3|7eJl$q;xIDFMh_7>xk0tUzZjP_*dV@mv&8@97_?)Ba;vxk+a<&@{>b9bg zIM`E{N6#mgucF`j=N}VyDBgL~{#!3*1IQ#!3(f>|j*3b~<^CyCzl zrU=BgTkg2yj=1Iafbd!zmdlEEQ)GA@SfaJK`Kf)g_N}EqUMdYF83{}0n9K{Mn%P}e zpritW^x|1cHZ34kw*-JxBVQ7ig+{SN%|hfar(rdOKJG3z_b%5t3#`*@bq%^ z4DYo)=m1Ip7-dY@FFwOFRcCPZCX)|xOenGEqTm|9>HQ!a%T7q|F9aicrYPqy6m<;S zL7R?I{sou$yo~XE-l(i5kTBFZDoZ4i6;X*iXtS3 z`!0{H_2p%Ly(`bbpdj;pboEyHz0dz}G(N?uI7$vrq1}O1Cum{fb^8(?6lUA*I=AK6 z81QY+HWdaa3(;_!Z9pQ&$bp0r;qMHUtRxTm>dP z*7gi&Z1>&Y9o_F_VGy$A*KR5#XCL$+D-vdf*<$r{R!eW{IW1_;DWHByh--Jj3)7D+ z)GG4MpnSNjTVxt3MjV>+I&Cw+yRqZ7TIr}d&M|Rk$=?_t0*Fank1;ciayxzx1jsRl zrqO%hst|?tB1w0LXNA~T&lrm$a5J?;aBdLqIxsWoOBBQarQb99e6t?|M563-!eR=h z??jUOD@W>i;x^&Ok7tvoFE7O~9{M|SNm-KTB`+>wVc#d5UtPu8~klS`Z zCr&)&fKr%|it()>HOnbBeoIDIZkw#+%&nQKIZb?STB1$1VV&iKiZ7SD zTyjE#7*N-+6;-`y*Hr}`DRhO&sL2B<1F{Eo$6`;ygvg1Rhzb;Z15_F&1DJJuUc*!6HZ-JBh4NqA=BQGV?mUWYN~_$YwyX z2OW%v{iF)c28Xm8xDF#4p6k0V{RnIzFi>^{P|?=k+HOJHhih&}3s1p%@R~X#;JpaJ zJ^0}HouYTW>s@ifx(o(mORqyKpOa66&LFo0>p1`jkm{v!Oo_-_&O$)4=#pppe*~ub zwRU+kpfF-3CMlW7&lJ4G%*QnrJ#atp3}`5LM2-wmosZ##d?31(i??Aw6dIp7)AtEd zNwEluyyD8OrsR-lK_eD1vJf9;)nr~!0}B%EG3F+rB=zwnMQk& zVoq{ZhWW&G6k#uq)Kl^emzWuwkpsZfHF=>K{^fUh0NiBuS>#`T8O6ky5Fqr*H@O!0 zeaI12MZGv&p8jkgG@&>WMg&1Zx7C!89l~!=(bX20qKP9P|B=~QQPbf{|LD%X zqd{IME61d{Cy;mHWUr5|@w+bRGh zvK&(n(z-$)0?r|8l3WqM@g96fh- zKixL9hZgw<@x`UnPdgWIcyxjejEvEJD+{8&%38kt&~@aMMnxf)6PJfbHs1B3Ff4LH z(vt}4IV%K*ZM>MB88>dZI^9GV@tN)kcRowbjS43LG6lyIMg%LLM$o1j4|a9_RXdOp zQ)Kbu@r0sGQ9&zmM*y+)c58SbpYCLUr}@)IuAz-HXKC%klaXW_ip9zXh0J`Ucy(-4 z@<#QQ)u>Z2{|=fPo0R8K`cEJFNg69P==le~5|e%>)v$g`mn&yy;A1l#9r*2ztH{Bq zbAcU-)BKQbr(lyMzgBPo5UJUz?$<6f)tVtNAiSjSU85wQ03tf;!4!TA!!OypsSJk*e4LMkBdAUB_T^jDhD< zNADK^!g97*qY4l9Q+x&F1{7!>D38&L_Z*}fCilc%WP=tkt=ZDZ)>Zh1xrhwgfJ#S1 z3Fc74vcm`#@}?`Rf-0F%owzI*Z#oKl&f>v&7MVU?t)zp%uroFT4%RfNVkx%pKHC4&5YEQL32V{j0$#ScSO}t-3LEN^oM`AYo{mOO}l??pKR%! zZuRhVy353QC;bw3PocEwoNY>X*~^Et=rS~_sH+)7N_^()JmBmbo1|Oz9FPR`r%oNE zPn}AIGVy56eBmZ~!E@E1-r* z+!px!fc>DBsIguVmxY391yQR8^r6rH44tkXNhso+xQt-{0G$U5vc28Z7}O5C*-i%< zk`o1yVTMVLd{1TCA$uqBaPR0Zf1LCq%#bo4YhQ=ylM} zlvkT|zTL_@D-=f=h6XzjuqD-T6eW$)MN0}!sw3}E&s*qV z1dQg3bRz>`(Kt8bqD5^IfW`^q^B+mTjTAgE0Ao+3w27YXBdYF-u5g6)3MQ|$)8#Ac zOR|s0s_T7MMY?nBl^l-4c~WL7ttVEZiwtx7nekg09OTsvK7Je zDi82Yb47wZy=?#0G*c??>_>3D6!zG|X^+F*A(x`&sb_68Xt*Xm3Q zCX02-ews!p2V>KKR4L~QP(f9vlM3u(vRKTVcnp`P&WdnDle;31+)%{fR-T#^mu-aN zDyQcqjE5Z3_}o4Lr_J^Rz3)^1k=7a$)U)sj`)h*2WK_fkszEGBLvaX?p=+t_Vi1PZ zrsrxpDgtP1%&9nC%5(f16`Z8_sVEj#ouA^%vX5_VMyG5T_I7O4?F*-ax-M3!=5Y$wk zJ9kpr0u;P#wlH2ONj|=2jjN}fgyr~e z5x|nLohQH()j;KYHA&R7DngDa3ah1NeEixe1|BR3OC4Yket_9t-3lSPDWlijSo}`+ zqF)CPBp@`}36cy|@)8DUx(EpcQSK2|vZBBgjz}qWPG#Q?`l^bX)BW zB)=Cclx7PVG<>G)$!0zJJ~Y}>muzgOJ%Rva_*{hMF#mn@QK;E^0Jj^<#>R%9MK097 z&Bg)h+3m#c+NstIgBViK9~kWmmg0NVUF(Aqp*T}Jl(TIaE>|zP_#hgYv-}Z!Cd&pa zz`9xz)rqE&tqW9o0bZT%z*A$JVh(5dMrf1z=PY|*aUt3RW~qX zd-S5&1GIl^N@CJ!!NOFbOt;L;G0Pf_V#y2?*G$byP6_}4lT&3hk?VF4gGkOWF4r(0 z1r{|Gjb-Fc@)xArcZ~&+z9*gAIoYVjfHTX-;eVPtOy9WoAU#l7y`bkL=wAFNE`SFi zRHNjPVG7I^;1fA%M#ioANGeDq9G9N&VoD;idkD58?l5N z?%R#EHD*84lrKl31@W4z)uh%)i(AiBuchC)_ZO+t&1Da5sa()bEP8a{Pm2>&sip;@ z3JwUf;XUg8rr|j4mI`3eyiO{*9`6s^*`Yf9Je7h2pdNXI=)1lvVoAHXy!_=aZ)xuz zbKkL!ppNxj0}@^9wZOs)*DhAI!*A(+L<7VOaql|K38}q;-Cx4Kr^}rM+4Q?>ToW+p z0D!)cfoHr}rhCplNe`^A&^-)D_br~G`3#H#M{Z^2 z)TE=8WqJ{_r&Zp5nFsV29=d^^bKsi9=bx@sM0Ew=5r)-i(bpDE3)717J-#t2jm}Zm zG{uv46xu^5Dj`caC5Xpds7xn_%|^B9p1$UrP+U&Jbw*8x9xpt_|J?F9dZM;LV+@S@ z8HCrFT`lq7h43T7bQg@3v@bpgY4NG)x*q3)z;bZDVO*Ls;Er%9>Vm+Cu#GROy3ho9 zA|L{2O)_vJhvW@`XxA2mhMSp)f`$sNR;8gehJ}KPM@Ji z=C7s?-~Bcou-yzN?em)_>%ea_9vu=)fFf~kH;%Ixs1+KHkjpXEJf1_fYNgh9HFZiXudjsoHpB$2D8G0a@(+z zDi6+!wM_}%J%oXp2leA?OVnU+S#MUU-R-7NC>>j0l6-?Ms+jAVkX*stc0~yAG z+9CCfi-<4-hXE!yD#UFn%+)MS@w`at4gWdmQDhqNkpU!fC=Scvhk48Rl!z^E8k?lO z{I}n?zD&ZgMusRSIxa=eWdH%2ag9(R3e};2RRt<}(`IZ%?1*$KxVg0NX)}2S~UfQgGtVs{xgn zCFRf{k0%4if>+UhxwlR~@xuR{7@4*U&)KI9KPMFtXzh*ylLAIxXg;6J8O7I{+iTse z4e$UiP`d$Kl<6o_!p}l;M7n5CA^^~9UPClLf3Z)Avz1SrZ?PIbMNG68QINt6${;c6 z=5~%2B*m4iRuAz$v$`ve_9N$lJP{8f*Uik)4YT`ugCoy?CvqO`EsxS@u_rb-y1GD5 zGSFaIV&?GR!pZoxhZau@0LgaCXX(lHrOZ%JE2E>7G8ll7NUbRXoxEwT=UUC>G`|%U zusVt2Rqca>eV|LM3JJt9Ld{yW-w|f_MsIo>voq8_t@3A`<3V(T-&1OU%#UrTiC*o8ah z@QzcfHoNO-N_^mFjQ>vGJg>)ox|+tZQaIbPAnZ41P^+UKXb{WILP)%JxjH6f(tXo) z6}cSE6JXgpIzf}A5&Gi%2`Of+w;LDyyX1MmZ!rkq-jQ|=C3)=nLEO?Ia`$#)a8eCW z)b-Vm+eYYip@}z%`KccP5cVy;b^I9e?FT9=5^h5n2~Gj?jjGJ{!P>xvp3i^(EYB>z zR#~NMM#gqE?}33O^!-b6?nU&jKYk~wk5cvmP?6ax@_MF+ljM-x=yk0R((R3#FKzIE z*fgGW0IFKIGenVHSl}zyT(3wEqNpjJL+xr+Lb=EbiJ~r_6KOYqsJXEr*A?8lKYjc) zG*PV58*cxn9f#ty21pr@7MUvZ(R@!l`Wi!A4asG(Dh;U>tnYwpOhL%59n!}l@oqaJ zQqX+U5C1UHefM41b(Dud9uW?h)T?R)mq z^%FDkg;3*dPB&_i!vOE6(rNE55SW4DqDOjCjk^(Yi*i1J3Bv_(-bjs2@f_h>&!`jK zSRCTSObFXU?hR)JG{eg|!#+g2wZOs$2Oa_i$0*~_cL;4BJdvM~DR5mA07CuH#K8kJ zap)lZ&C&0tPd@a@Y&LFtZil^)89+uG)!8{A0F&1I*o*cAN{938`#1#O?1kI(bpQVJoFTOV;Ns z`ZXx$10>3sH(pTyle`_c;MZB;(AQVt}Vw^TEHVBz8oXlK>?L>7#5?bS921VpZE=q?gz+n5Paa8~) z6|DY4Cfg=X3s{fihJB!h2<)gc>_fCW(ErmR3X+hk{lK&GG1tK1DcN z$QwcakAhdU7yrZ0e=m)fYV`8!?oCZd!pv}-hS$Jel!a)%C(U-!&uupa1r*yiPE~K% zw_VsOK<7roto9yK#`X5M6Mg*S7w0&msa*;vY>&8ssTV6s7Pon@a3iY$o+zx%^Op6Q zzV#lN%3-6t^}+E@&5rO|F-5%{StPOQGp z@M3UMfQko742CjE=(#Qo8PP69E*Jqu_w5zgHkc5E3sA^aPMwzU9DoQnfD(WwfcGEj z(7y4TK(^{j-;L)a~>IRkbk#Xhb zdCHb0)Z_QgL6ZkG2phUq9!I*a@}LJnf#!gE3@9YG8!6^+4fLAvX`6CNl#tn0Jvq}U zR%?*(_dQryiQU2B!VRE#h=H;?AdhhyGs680zz{dAcUm-+FD6-yF;WP$ibL0lj-hANacz?$QpOrr&uNVjenEUKsL-Tn>V(u?L4gf!3az{^jA*Er zd-{vm`^-#>Y+Dp`3^-_r2Ud;T5$t@>iwLzu04m(TkYEtp4L$nxPyQ&q`*k0t8}~lh ze@zBGqfuos+CCd0IIZik%|_$q$WD(%sk1>=o=9tpw5U}D5Zda&j!t8rpE~tD^nd^5 z0zW%`(T?%q!-usN)QKYdp>F|?3Ko3omF_5WQ5*=Y=Y1+TD?|qs7xvw2-4TObhWK z&K-q``XH?(65AjCt^fwGD&OrDzGB-4Hdg51$QXUY+*S0_JqM&M!I#$-C2VvJ1I_iL z6ZA@6|FYRR=_(qTwnp_&058-Og{dJ`-6+xkG>9P~p&VQyQ9@|Gz2)C{%(2f& zbGuM_2vyoqjgS^5YrT->kVIN*E9Bq-$osJskN_*Vb2~$qx!obLe13AK$2G1Yk!BZ* zvAaTRW0N+|o|T*teCOc408oOeE-cN^Z+z|@bY}Ca#H2*SUs?#N$~Z6<0ETugRX;eq zZnGxck9I@Fz96O6_W%bqM5hePE?m`atG4s@ryu_&y5rHeL@m!R{*tqEGiuLcSWeNf zphWJ-DsByIdmambVpj!|8>*)ONd4-%cBoDp8u{jN!MtdH(R?(S4s%yR!D|12M8beD zc%Z)!2AbzHGeR!ty4n47rm{-6^Yeqo!sqejvl6buHZMMW<9S^m0Iu25aXK=+H=czz z!$_s&B?fCp>U_{O6)p;{3C96Yx}M2Zi2BX?JB%NkFRdVg_-~7NFvUfyOZ>MkHtTd3 z{~c@12HnhnbG*JmXL;Q|23yny-O7I}fN0dqOCtVS{>}@HI^EA~5$@W{?WPD8Qi;J# zUpf38$ake38vL$*NzZ#A311^;*ZxA{ju17vlMbq3&o?m2Ax2FQv4Hu6q|OO${Jy9G zURNd=n(tGw0_uo{%WeUYL*x7BB=iPBLaSPpd{KRMRaA6XhZ{n^xk5qOgDX;WN{8qJ z|KlCBT$@g?4sBAW3`aYiB6p*pqv1B(YYmZthJuKS7yw|lT3-bY+Ok_eR~@mj54GR9 zckv~3$MK&gH-GV4hE%In?dJou=%m7EUBgn;NxMC$dxAwu(oIpFl%OpROi{0GPz+$& zPe^aE!hw1&r=InOEAm(N^+#@{*WCO9+QS3y{qx7^1haw?pL{T#$5+nMeP@qLAuE=Z z`ljTAur1hAcpgQG5IZ33S7x9<;<~_B`$MY>RAbhHM0lAQ335X@BflqXLH3EBBU?6Cdt<~lu_zyD2RQ*^9Wq0ck$jxf`~pbFu^ z-TZxUJ6f#>Fy(n)kY_KqlL|qI8p0g}nDBjy2=S#h^>W@N2cf{&_6P_$6c?yM4cIZv zQu8@#SgP`MX?_QZIscPT9B&NA1>Dc_EPXs*OsJxeZ$^Fyw;>QMggpNJ`22f8 zLF?2tSBp9h3)GkB&t9Fz_0gZB+{m~QDqP&Eq>dk`roM*BhRrRrq@D7W(j4e~lWQa-wB}3IcGN6rdm+PzI!`Hc`*zBMCLYNc#%e zAcMznML;-D^FZo+V21l3>rqve>$%_Pefwjga&!Tr$pom2EqswRG&*?A=(H0Cn z33gNyqznj&f2?nt%&E$+V@6~KJ=6^aZltU$83zY^%6)5*We{qDz=+T}^w|?LxVq>t zdgJ6GKfT*gpv&LuK4yex7_<BL=9u|2lIbL2sKbvG-z8g0s~6c6UB9wWyV%oaTRAD_ON= zEBDJc9~2EfL2BRto4I;=uP`F8Bgm+qckl?!Fg-@DK>fwC2AG{52FQKaoAo%M?HksB zup8JA@+ipfsPCI9GH9(6FvH&2=`e(|cbdZk$LUk1ex(VLbzb&7O`WEpG z9(OxB?qF*?I7le-lF64N080PXqh3KKyb?x?2aWEuwoAncYT@IX91yMv7@tPDqW&g^ zws-+f-Ls|gz{2I>@)RN(%y>p-X9Qqim=VeFtSpYQez zO|`esa&4A=_p86kzv;P45`xS3K-RUcxKNGz^cuS zxm4EP)$8ki``W4giv(K!O_}iX=obxX2AWJ1L!Kws(esW>tqCk@tY3!rRRa0iLfjXx-L5haBmp+JeK08}jbv z-Fwu!yDVY3`DZTDcbuQ6e|70UmhhSwiE1DKaF~8RCd397gYcYjIsho)G6o2tR@OA4 zGc3t&;UL#STdikuP3z4X{gYS!K5eC^1xydkBz-je=2&=O1B$Jhw!P(yUce?W#)&&M z3b`EXvKyslIVazuR{74V_Kv1RN3#q9GuRWg21VP$AnouZ=_l{K>bz> zA!1N0Yl(XZaX! zFf&@R4EpX zU}4B~RZk%!IZD&@58NqABk=EZ8FP}K4$I}em-FtQ<9OMh1x2dj<%Zu7 z^<27e814xGsF0BYObBvqNVvg>LTQ?p(jT=xMfIRbKl{{gF@U96O9lD;w27(7_W)Ro z{SGdB0Fz-&VpN(_)|sE*tZN*z!z7^p>AinItMPLpFF(|Qqn&X!dLhHE^ zxFt5|SRm(WR7%D~%^hQ48tZ>;Bf8WoS`~fxQIu!{Y;G`12t37pVA+EO`5`c&lT$Oa z+3g6!*_QBGBCZK2WWB-wWP{FL_Wdj3L_K-tZ>!(XLnw0n%q_bbcZ3On{gfC0Os7;~ zN7`>Lk^Vr+O#xv$h!bw{02ea2E%32H?S=vJ?d=U2czY6Bbm&tIP*`4NmWSh9C{}2R zA6ua+nk_i)h(myxBAVO@a!c>=`Fde$=KccCFr9?G4d0~)RV$QVJS{o^D8)ugnA!WJ zIuth)GC0~{A%S6L6lV?bR18~z7tXZ_&w({1R$Fjae+O!aq>TuVTIq2)>;4cT*HMBU z2BY3~QySz!9oKKRL?MSsP=YWwCShwT4-5reKwN;@}p2=GiZ1jp_hE02GrG z0`QoIb#OT_YC1#!&3XWuB!#H0}Txg;+#k!9Y*(@yoFCfx)zB>ySB>r`lc{d15sj{868#TV=n+5I3!%0 zU6SXQ*8|$RJFKKei-(V$ewyC6dtE|r@Rj?{%58d958C&xZ$9*QmkUL4>&7-=oGSSs zDCM-fwZ}uDFe3fBv|`Z01rZ}8%Dhz11_ZPmtt-{D0{MaN_B%Ak@2xVRer@%R47N|# zXQUu^l|c!KbpRBKcE7f@#M+5HZMqNZ0tbWnYMs7y=Zf?Nx~m7>0$-$1!(n;l#=9a=cvF zc)!EXpI$siJ|81G#$o|*%rF3T2R&hRxUl~H$}K5AeQA1uet7<*v~GZU4r(}%?jmv`X7=-I=$f<=FTv0H~tFaM&h*1vw&o8UR$#=R<&w(o9WPvqE>r z%l_ntwoytFVgFGKb$!xU_s6&3eypV zoN+`j&IbS^+YJHzgN!{Qm=eGU+xs`~{~h}J%8!V|{E#vr14JXu=ydUFyz_Jq9TIX3 zDYXP_lndwO+d$YIyAAtt4Kl@6;wj&fHKCzn>XBOD3Afg1NocK6stU+pflvVjtS_Cu zNGq)^VJcYn(()~-^Ff$yGv^rapbNr&-?(#Cn&63(GY>+_KTZLPCq8loZD7hXXa)^{ zl;nw^(9-Q3)L`jIKFOGq4)`kX@-Ot|+gIov{th(Z>uBjXa$pkvfe)R&`QV`NXY2Rq zcCRgf0-!p@0NI5L0IxH{Q#ts`-R&$ zzYhw897`ED(wA7D6M(B-sEX%CL;&zHzI$dCRxKzHF)j=JNLlyTIVN%5cC7E`|4{G> zyCAqK80UuL7UBE1pvhhB#5|Q}XXTpftZxV-@`8f6D~L+2)s}9omH9a;GU}j_UK~60 z-@W{|=)Lu4NsH=)5!t4rcpV}Hyl!fNj1QbyuUbhZWM^!908n4J`>XUPD?fi|LvR)_ zWbGKnrCJO~nedubjB1D7^0I5k61c@V6<%TiPzFS94xRMaGE_lW8#!_^Z2*d?(}6gl zQB*VZbp|E~5)gXB1q-#@Cog=EoAey7+JO6q-Z*m7eV;mcN|3p;7_) zeynmz*oRpZS?*J-jN?T|9hiO;N=0b_0nb7(A1LOeLo2g#)C_sWKtKxXwC<^n$b+ar z|M-u7jqdiJ7N9{bk6}f)EC4R1?Kkp6M!0}=5rzX(!gGAa%(edT*3Z!IUi+0pP9mL2 zts1;M7#V=tMGs(m$mNSsZD!<7*hXyk60)s(Tno`?3<@5(1r7)Zu{|?)lAf7ADIf&< z9t<31Kad(Bgq$AKJ$rIE&X;hUQduQT^TVupU1m?t>wpcx@t|8MX%9B_9vBhAa?*Q9 z1F5)VBQ72F>H79MZ8Mlaf(@WMU9HoLvx~ICAoFi;y-%;+yGae+-g6982nEfGb&pR~ zIAQbp?>5(^tLh@Z{*BF5VMmQIK30%%!(qW(2w+uLm?ef222xbEn>-Kz9-)$hSYn;$ zF=nQw$BSwLk(31U2{3s;j=DdKRh(cU}MY^W6uq_!y1F5Lsoc1)`W^PTuE zn45wDVO?1MOpELG@v?6?$KWx zsNXAAKx1-2c$hp8m=7KRC4kTRx?)M++5Q;)Z1*n3-oiRFUog*g_+$3vm&V1KF*+Xo{t&d^bP|P?0GhHzniPA zExOTd(q~SbrE`2-nDN8x^eThcEh`TuEvzSi5)^iqHdiNxMgTxA->HKVI)xofPN>W0 zy5$!w=knoYoLWF+YM~s>T<|)ISB=4GQTxPsS|Nv`R3msmNUz|ySxyLS31K&E7wicv z5(7+G)Q_seD}boM05lD2pJR`?eP0m%#W~-)af3Q*>r&L(ID3|6p1L4_(_UQ_FFLda zcXSL5Z6F4--%J1GD}Rp?znX>LAX>27d_zgsA2{+FE)N4#*E`SC|MKqN=Zn8G7Jx7j z!y^vEApvl#$CF}lL`qS~PIx{brw{h^^Pk8SvgoDd%3 zDX04hW&fg;ajcvbaOH!wAnb+)bTg$g-D2Q;m028S=nx%XaQyP}P5NU7rOmKM&rQ$C zfC|xp&+h}6rwb*T<1UWat zbM;e85=Opq?*#p$Km1Rq7Zyb6hMbQv{J>=Z5ZYKzg#m#X2^;dx(?5IdH~6|K?g+KP z<1Wz!wQzQT6F9^Qhd{89=2I<32Vm9m3}|TO10&6f<(QN17}_QbdA9wVCOB~};^z2c z)Nm#zlt;=E9kEspAzuK-pGhsol%IVno8ie68cLi64 z#zh$?omO>^C|zG9LI=;KCjV9l)nU*xa&2jZ7byTzIU*$sZv+8NF_^)rqIukzb^jtD zMLw^mPca+1CD$N|S39d~QostP-rL+_plS#pp*K-)V^frLSl+n0M86sTZTioC+b&*Z^j&XWE6M_9)QbXFx3jAN`P13?RxZ8?1s=*Ge*l{MsfR!G1y}BsR~?0qzK> z0g5Lih8LL0AawWky&Kx5#oo@|$z+7}>|q;WGBnG(wy~UrD-~dr{%Mg^8-EG6IG~cUKLeo-g{(6VbzH2o4>KV#lRFC-vcnYN^c6$|*&ykZJV*W`b)HtO(4# zzr8&SBQyO0V7+$Z1^S;~``h$)zyCJ{Kfs3Y@mg&NNZn+L{+qA=m$V+v%kPHv<0jAJ z`rbjiWbd`ad*p45g`4Rm*S9WCUmF|P9aobaOLEk`G~yLEjy1Uk5vTN*ZK!)FwVM)| z26x73m44zUe&Wbngb2mKEkO>HXQ==mh!Q4=Q3_HAlG26Q$?M#A2#@g{jtSTfx~-PS zD9@BnTy9`j4i}0wp_MVu;=z=VADRJKLW3_P!FiA?F)%>YhD5BZLq*sc1Q?J}M`9_% zGx9Xm-5?9X#4s4jzp~vp+Yda9hn=f|8lg;lf7ah9&+Bz-3diJGkkcv_rG-OxYg=OS zhhagE$U_KBoWMs12q`K}^s%{655kT`2@b@MPcs(6i!@jR~>YowrSs(`4Li$+GdWoe~TP*&t>s<)qcOPebFn#G*+R8rn6CbJRW( z3u=S#I82N2gfs35rZy-Q)Q=P!(!d}yEC=%6ltCbrd=h5$u{JctzYs7$O=q@efI{AP zRUMLQoTvKaNN*zjGn@TTtV^|S6OTGawHG%vO9kl!>x>I5%L4#~edxD40-|s;cCb%i zUz=Np=G-GJ=R|xwx!R_P&yA~pmmW_RRQ!S25F9PEg3dI-Lw=_Wf3YYLkgD-E%NDy4 zX*VTVv1`LoQv=nzNGau7{Yb)gSa;eFYy2h!*%h{M`FL$&rchOgO5xXYMs1Zz(2HQI%;n+A9&|7}|=DL;6O7-eH;Hgi-AxHGW8$=!{@ z9WM{Qc+#TV$wG8S!DXt5a9QAIL;G*nO|p=e>9A@-c&W}Wr3MgGmR%*=0ayqN4HN)@ z6$M%*t_)FWWIG1D9NiK-$$^e7q`*ETt^!YhmGnI7_o*;dSAYnWU!_b5-{|eN^}{p$ z;|EyG6qJX0aL2JgMOR{mRASJn@_S&-cnudktd$D7;Ml-7ngrrE!Chu11c|OA!fD*r z&f#e3?r8})7>;r|SE@~H6YQ%y=u0j#(5~GG?E&0cJo)JHBw{M+?FfS&FAuhqn3dxJ zp}^LyTjC#AJFy_SAt@_h@PVBV3SPmUx*MC)0s=Xs|MOcvO^s@Ye&V^8`CfGBpMB|X z(2eB#s4+8hlut=&lZtVy$haPiF)7_G&SeI%P58=jTQL+RVgRrp7i27cREup1sAg=d7=>~r z0Due-8OxninVV%S$hCARs$GOT0#4cb+I`wwi#{ad@L6j$so(8W92BLPmZ$zo6?Dk# z>lNq(ROfv(#lzKjAkV>w5V}NsKR_NeRRyf3;ho6=A(a{yN+Lh+@@L98HOy3@eybD; za?D+*?3nF9=mN{1ShoxZ=Y>QYP4BQh6t4o106v=x zwd_s`HVc{%&I1D)jN87o{tl4xb+pZ~Xqu7e#a63Uq9fW}_3%wW_CAHC<+sZ4g<7T^ z$$)SCgXQ2J5Vv5de~E?-a0(D#lRBq^D46< zHx|1E>S-qg!$#6nDcyX&*D7E$P`)9Yr}I4s`@}(+x5+@p+ZX#E*!+ky$7s(XsTkwW z!ov?tsI1$sBcD{}-?SG;$2ZJ=0}%rdLJ|T_v z6HksqaZl(5fp=LlT1Pa@9gzT$t7pfN6`n(wEfsJ{R10HW;41Y;ahOdVRL)2HnwhrS zjsiU|jx$T4MDkSeeF3Jv%47zKItVD^Fc4R@$H`%J5eDmNGZ59Hp?a?pD{Cdyf&mOQ zrLGqUD3|e`;|{HRP<)778KfO)D@Yr^1-+!6q$IT$db zD$*1`5CY`c0&Nfa%DKFt)OBc{7aiw?_Gd9J_U*O^5b8^dVszSCS(Q*-^WHtN`cWgF zE1+XO2ltP|BC>h()8M2Q`7pWvT|;*oA6&cLgY_BPRcD;Bf!Rg|W+USs4Rb!WYQeF- zxM1yUaC{{{=9!73SdN&M>XzUJG>|m!@qi^Q9<+EtwR%v@C9y(Z2CQVVt(9-~bVtC* z2qe;UM5F-HoIHrc6m?B}!vcVyJc3;cW}5Ad4Qd@CVM2ZxxL#JwN}3T#2n@dglurD9 zjllC@v2|VO@RwIrJeaAG<2-`+^CQgx#7=5iUTUJ#}hHST5Rvg9+hpn4Kat z7ave};3u@?)ovc`EXBbE*{9LkqI{=?*ovANFS&6SubclaHy7)R^#_Y~SdNDByyJ!_ zk8_5iLtO$UX*yC@1Q3Fuso4L(`5=k2=gQ4G$y}}Rybwhht5N-n+)PTXLTYOLBvZ-J zu#+pPZfxlCYUitrYHkOs=no{MfrKyE5R$+_xhypq0HnjbKyBFZ3fc3>w098op_Ap; z)QhpsBQe8apg>#pYMNxdg+kq;!`D5EkRy^_Lwx?H`MlK9hyn&Qpj~ zW@n{UxMD|tF3-O`zMCN^e}iKXDr;Owt#zC+!&gAV+MmTc01XDIm?R)Hhi9GWI7hUfOL=yNy6YPh)az2T z+Fns%<<$5I^0nMJb6S|upYz4Dz#{J}m;ZZQ0qTyqw6)FH!jgPyCj%ijN0UsaJp(=! zi;f*Hk9At2Ykf$C#D>3WI{Lm2ttoeHS1f)4fDEZz5e7^EN54=MumUjkq*zw5D`^kG z?o_(BNJU4)Y;gO86~=0Hjlu$ z??5pZ_M|QcVLAXb#210&%B=VURDYgwN_Hg-mr^%X7F)>Wq}q7_?>o}sfj`F#r^)|z z9A->t`_5bHM2_ToP>Zw~t1uiwZ@%P~Vo}%0=l}qO$N`~QC(arb9xso+NbYiBUdgoE z9g%5c@`O+_SP%p@?ssQ5Tqg%g-7ySm9IF~wpD*iw+ZLILEl~38_?+!%n&i;VP$&aT z$1#B?0Y;jQ7|=mz&9$tCz71=h5Bz1cT<5AZx zDYM5a`UW|aHQbX{5|J{^N?a$)A=$Ynz2Xu8A}Hs~ zW3&N^Ha?X|X)>G`q=^K-OD>!!oXnjY_C63S_^1n#wh@SNr&QOC?xfdHP~;!CD8{&+ zc3zNLCO(HpTvS0UfCw%OnV^A`fI(!~Mlom2g8({cAeKb2>Sk$mQblM3Oz7yG zci8**a-4Zrg;X2My82F#QgRJcr~wl1d+h;dPESEzPbI_}q2Lvb^cb{P_*}JIzY9Wcjy1lU3o6jy5NQCio6*@=kgqLra)iZRlHEdi?gU`TBbGr$_xMtMLRW}Y zAgSCETx&=)IU(h$Fc9%UK>$cpaiVf7WQv|hE8Y@qgbF4E)`M*Vyhzs=fh{RF@1gWt za!A_Y!4$OG3%XTSP}GMms&EC^*kpEunEDL)K|u-w4>#DSS^bo!&$*kXR(@{OvMAAJ zroJv>l_qwH`WGQHSBKT)GurJO00(Dsyo&sq7xOt|W>WzG>YAY>Npr|$c&;QDj7NP{@OzTnc1vH;Vw$1LLi*6C*JikrLjKGx6be{u^ZP~QyzWYzkZ z{7lgr^KE;ckVf-7hSij;DA~v<%&{IX2SQ^Ln*JCN8Yw3kgL22qfdSJnTo>uwj~Pf~ zZRwMme>Hmoa7a*ALUqc%rxaS&J$mNvNY%fpD;nt98HgK1btjfT>Jo5t_%0j7kw_o( z$?dvX>tb>B#^;cOVm8!0?B^AC8|;vDYYlOg$caP5Vm4J`1h`;Jle8qx9Ip-di0Q1B zXv^nP48a> ze{kk?`qjn%msZz9*@a5kqp7+Y>q0)Ut#(ZPK|-@LJ_QAr?yZD0Gwo3^P(xX-pHRP_ z%4Z(+5dNb#f8)sG5sk{IeT&K1_Bys`tuO%#Y`M2H0o2A`u(mSJ2AVYY-0bY}^2A0) zXH;NsF_P?8&x}tMFrlzD(SiiaYxRP~9>l!Mv%+hk1vYjake_2cMgiBQoi#wVGqx>sORR0WyMd6s zb7lt;3lR@>C~mh_?U-fm$D~cF;U~1^#p|A>81s4HD8QQE*||=BU+ll}zVE5e#aih$ zZt?UW=xK?zShVWfQ zd21mLRIWFuy}o{6{e(vBiD;({k#VSoYRzt25ldJy7O{f3NaP0$%T~wq!BZhQ1`?ia zCt#AkL#HZRv{Yz8C4wK zFX|4iUGx1~AmQmy-jg`1pPl)fxQqYt$ z1Prl5d_<$p3vQRnz&1^5x#f`3RIv2&etKioD7dIi$|1ubT#jjyDQ6 z{Hq1R{#58KHa(sk6%O~t{E!&z4Jf#}hm%OB-H1Nkc#B@}zC}-!uF*`L87coJ?KV#m z$`RTv(cD}>rJ_$)wx;Qg)(7Zo?eC#G-6~}|9I~UcjX63|sWXe|(Z^3-px5{q-_Sty0Y1(uv!X;ZgIleg%;k2s zB|x=QsnNM)itcqg^zDrmdcGG^3Cw_*kEqPRDtKT-TZh)_nuO(G+jAfx4y*rBi120Z zq>9=Mp-W~Ja7ci$DA-Y;&0qmwcDsrllNN+68EBJ1pMGfWYxHBYU*>H!B~iYz4#gIO z0vgisEjT+JP{`+{)f(_;V!BXYW0v$P{pF?C=(Y8y=>OaNQCbNO9fpH|j*f>hMu&4P*~;hg!NGXgj`o`;EOq7JS)KSxJ!$%oA1 zU4Uqk?3%`~sQhR1LI?A=olkQ796ifZwt*D~+-*mm%$d_2F85*!_p@wt+tlHKyvxj? z9+YXogT%e&M)rQAT$LOB4$u5?;0yHzE%N}4a2S}#+39)3mL714r7kCt+z%8`_OZC4 zWJ`7h*R{^}4gi`iRjJH3#2;UMhc3*Vpp&&}y1uoVwV1xm``w3~4u3A?+4&0#r|B{? zAb>9(+x-sJixr*O7%ni^JTtu@tZM-4AKve$7|;sLD6TfQ=mWu&4BW*=gIv@f^?Irv z2_~LA^)JGqxK=+9+aA;L6f8*cR~Wb%Q~)j}GzYU%Gz>K1Ip6Zq^R*}6q}E?JS2O)9 z^s8t89W4g;sN3R6L`CQP_%rL9G0ij_8ia60zzjX$U$)O+#M|Zp5i@Uc%Jh8;%qZsm z1^v$QkJ6Xce@Nv6HQN%k9rj%ptcv_Zhu)-q2tX85#>`SOlJotaG5$#7t2E_q5!BBZ zv}dM$e%_=XuYHmJ-S$sDISgU|LjFfoZp?^m)f)f^A_UJ%HEZJY%!~=l2w^(kPen1e zTVD2oCOTlEJOL|Ij$Dg}Ng*{F6Ed@bC>j%Pv(qXqzCx6dMtvJwWD2 z$+PVX%ZLhGSB2FO(z?ZibdLe(o#mVK#=YxwhXDwT$1EM5;coNnAA|FJwN7iTZR+uW z{hgIt^lfGmUwZF#x@&>fZu^nH$R&i6>;#)shhuhIszHgSN)_I(vK2~n={$qQJnugk z&4PWENbX2Lh=CN~>G44L?d4liSZTs!H~2lDL1nqUO{;ufz?x1?&18THm7Lkm zt#*^HZf~d@lcOy0(FPf+IMfF=!O|8&alPo?j9}2!fzy8#3(Y$+?CltfH1Cr)d1|tl1m5R?ZaZEIr zQFn?wcs6*}UXoBzk`8}=pIPwFFMfgk&e{Ki_oOcXlUn0~h(D}uw)pL&r%{q-tlYRM zNC-~}%=hhFR+0_+sl_kT(usmFi_NV_=QADp%;MK+uCVdMepd(+a6SPxIDG&YQ6loW zS3u*)d-xq7!^Zw%5&)sXFnqpGF)isR+@>SwW@ZBrF8&e?#b*GHAO}<~?G!PXgN`g_ zW4D2Dtk+Wufby;kZoUr4nLyo)obN!-HU{oExjz=27O$pA-v3(4a`;QbaHBz z-d(*TH!ohh$)L2=YiFOo#NhPyy_>>3aI=^EfSzLp@zm@h6=CYhgUBm4-W5Pfcfn`m zngV7Cd1YNJ$C8WyQ=Ai7jGM8Q_`5IiJ^+ZY)EJZyDtwFg_nG;V^a0+-CNrBFgQst0 zVy|zm(2dPinq}5>dHpUkpgv7A+rzP(VbFQLF-sTg)AS58sTb!@(OkJEH7oC|-xKC_ zme1ETf7eZBRqyh-lCX&9h}0M|Z4|8f1z*C8a8PiNL@$@c1>mqO$`4Md-oT0+t0+|| z;hdp3LjzIb>>SX)ulgGO^`-xZW~b8Z4gwg2dZ5D$yl3`>(PoV9?;==Q*{NBc25k2Hh) z>De!m6ZIwWkK+k6`w*pBkkHS~{@#-t1Nizv*bPg&lSn8I=VQAW%fGd%Ct>bRH<8~1 z5B0iI#345X)|BOS___V}15bAN$9)u0!a)tC*0_(0uSTP?Y>!4I))DROC6taKD5edN z9m2CCY55ReYJ(8v5G=pL@nK*>4-)Fmvx;qI0^eD=Ewlaatlp-T_7;^3MScWw!0VkB zGo4VvS>~n&;9wo(g--DxjO0In?8D47KD=~6)o?z<$Y4bEmLw0AzXE_6>9LAz`@Jszj*0FMCp_PxT?UhDnF%LITo-f~~Pc6PFITbJv93%2U7`V+K|9$iC(Z$01Pvm#? zn08_xAV@H3H~8c&|GUnA!e%T0n2t5Z z+n#TR0XbvRHRE~@*+$of8TpiR&Cbsa-CQCmZ#0*W9Xf{rhzdOWs8y>YGyObskfgt6 z8Ur3=UcUUMB=jLXKnM=E=?|QHj$S(bw73Oe`RK_Dv{YAvCKAsD-aa;oP~A-)^k2Vy zRTu?W6WE3ch1}WRpl{x}GJ(C}Mja~S9yI=Jiy$z@cv2@a{O#{HH|YlN55NZE1cc-8 z@A;Vp`s9Td=yYSw$|p7H4F)I0#A5pP@(tQ#5W$T5&9%Gq-u5~zcU$x_ALpg@Wyv)a zG>E;<=d8xy@&Vo+auFx^a)ULHQ)FP~!F7PfcHJHoizOmw&pcwlzT6W263az--w2v}sXAiKcSu^5gw=JLo# z&tfYdlqWLd3RZ=E3iuoMZDn;qB6QceJ z^ZjD+K(3L3^aD~ZYl(Ilukrant8P~_puSecLAvd0J0bv)n3?L|0bu3mM8Yqf{zE!5 z7YW-@vi(#BWz4+6h)i+hbiAPA*lutqNB4A128=<=Y6ff`ABvwZu`ReFb+f-P?z zx#)O6{|K|Czj)z;3|93W@4tEXy5w5y{k6j-N{*f0cgRs4*YFQ)C193`5#Ahs?`qxT46b^v{*1XqJp&J9;)IJ z4O+wLp85e!dDrMe#W!T|!*7BC8P8!C1N9ZW$}k%T2w`9xgkTDhbYI194!<%9WA#Gn zFk|%GVNGCaI_NrOew0Wx$cyN+^IuZ$n(N!T$5TDoF!ntVGk_JD*5HOcxewX;!42E= zm#V*?bNH+=R#;kG+-D}!6G2Gzo?fB)A_X1O~tbr?CJ7awOHDDES@C z_8~C9>aR2CAiwfGJZOLH^wToazsv(|Qx|VS!0`R&o)e{+0W^fKkWU)KqvjD13Sd9p zx_4uIC@od{{jlCr0E9q$ zzaIuV{JfZ%2YegXtBNV~`mqey^_ovpb)TwbM8|5KVSG{q>?gtBl9*nYbc3){d0uOaM(uPpHu z^XaKCKK7X?LZHHW5_MleC?S9pDsMRRyMP_xfqlpAg76)}ba)>jJp5*lvY<6MCSQ(w z8_RX@kz(X{|7%#oEmuz0l7x+l(oo|glq5uiz}l}wzFa`fxa1wY|g z=DOY}^KcXZKx}Yrb46y63$=#ibMCb^Wnc!7AddpcGuQ)iCkVv}3(&PAU^|OEpc`fc z0K+yUOxIU4K7_@dn?FU*%$=lKP!?uoKx`5_+l%e(Hn9S$Tkp2$*4Fw+n9VS-kbw@0 zz4cC8gcTn@^NfHgLX7987ev~9adt`aUAx|33_h>lyUEAW6X3nX3~{ksr8D(u+U5cM z2H*7li4zpJ+mibMC+x3*60jg5o7KF~HB?Xw-#lDii5MVNqaTajN+ zwRx$qA%`*-?MM$SP|=m$E`4I=Jpl{=4!{W47X~^E!gzjf1?)VM0S_S{Fr^?+gLA=0 zE(L6{z<`u$MHXbvvDCDP1RKt&X@6u+2$kDQ#ji~mMN|jZ*m7?m-G3<2tV!G*9^#gr zqBZ*A+LvXZ#<7@r6T)uz9t`IFzRJDGq%cZ{lI^8$&||IAawGJC zZDQcxU~s?!pd06WfY&_F9h?6dvN(Ti-pGXJFuYt@yO+ty0g?dE%lsPYfd@G-upj|J zhpbwXMAUuv$Gn*J^*UM3=n`-9TdTLJ&F6K%k6YWDI2bC;%usD^mi$VU%F|O6RBPlb z{~_fJ;U8>^WaM{{`vI7M?H~svts9u-l$Zs9Aw@bYhaNu|(%W7jY)BMvy#9x)m#E(x z$e@h8ju>G2Y7jK_C}6>6hK)fHuY;`sh?2yiE`v{}qbm9n@!CtM6zn~CeWdZON`BMO zLdt~T%xeOjwqlNkwL_@}Df{)k2Kk?Ad|o{8Ahv)#4hDT;dw~L893vPV{#Mt@P`FU= z68ibM-+!#(5P%`hA-)e20_+n25yuJ_g_Dax22yw*>&I3YE-%S8`Jx8~pP!4PcRyfYHwmm7Wle#p%FNB@nOz4o9BLQHL z+#jj`K`$2VSPk$oB7@u88!~`m_Wz;9a}@A82$>-_goHib18Z4rZp&*(%r8w%GkZ8e z8=a;cFkBU|&J^4P#!wmn0D$Mp#y$BS02r1QvyyQ@lGSo##k2018Eztvae#}@;QMUH z1b}S8D~SC1Ok*w=_)VqW2_Z+gJ)rm&fQ%ec9*oW~qr1Szu-mf1po9k%i2-42>*`K60OX9`^Klv+W@5ut)}A7ME@-lf4?^oiL^(gFbq zePxB?WNi;{4ggND@4;~xXKH&=^}Vx~>G|O8$MduDB(7Lgj0aBIxGe#c*e@_nfQ^Yj zU~YN7L7zDD z3^mFsp^p&U3E10gtVjVULROGAn}5xM&%?F`uN%vJfEJ2Zu`PfP>U01A2+hqfE7|UL zC``gJN!6iE50rh5vlD~>qP+%ZFZnqRBx&u2@oM^n6wA_Gm*=}>2To7|}eMd(_| zf42q$+E`wu-sT3S(E+ugO4U#d;e;_MjrIAKb``0TX&Z5ZoO^`f@Sag5!j}z9+FwzP z?3`h15DbK!j#9rNB!|CEGJJO0m)9@|A_pN-<~SCGoM91itLZ{moT5o}WRAnL`{<_X zD5}+Pwjyp^!ZzJ8mmDIqVN>IVP5f4W?ZV5#EQCG8B#f`%t78G6LZpCPipt3-vBJ3J zmrs3xzi0o$R5;%Nd;kyrHTfyj3gKUXrR1ylZ%iCS5jRk69kBn#M-J=lheA$SSsXcu zwoX810FzodpMk|(I<(X1G#Qf@az=s=JDsz~wFJ-RN4xbC8mEps*lb!#Qged@zlrMt zgu*aX&ez`1h_E&2O8x^OxUb!KSDd2}FGmXk45}|Io)KV~DwRc9_LXbz&{wWrqSxicq2Ci28HkW<123pSUod)QtW;1Zf#7QT?xR*j4gSf zV~@1Fy5tW{K_Rv{sTtT?%h$zv2)QXJ+7L=a?h5%ZEI3YxF#uF>S114Q)uph#HgJs||IL@k8n~4f=m-?F1)eZX8%>GNZ``u9b z1Bp5@Q9x;OL=aE_qyUfxbZ{K&%$P7q04PN|JU4EV_n=F$UMG*oh$Eb%TV)J182n1BVvwGiPmU7m?GzV2ipKgsLEE zUTrr;lz;(trc{$$5Z;e;n`Rh!F7ZH%0UU*$@v8bA;Jfy%J69y>uLk=Y63zlh-Ge!( z?)idH8Q#O+d6Ur{@#Ke4$>BJ`cG`Rl2q|L0aeZj zG&RF)sFvl(vQQiEyWNupfL>t8&-qa30t}%D;aI z^UFY4^I!nRfCk2Z`XCdg61AqMX6p8JIod*Cv@8#Tgi>+RJWqqre1*Kt(%85;O$fB- zi~r2dO!|x;wnSnb$BLC9zl8za*xq1(Z?%%_SY{gj2ngYv;QCT-)oS_d!XMHrTQ5>O zF7Mm#8b`5&0}<{N>_~Dzp$c~j*pNCFTZdzEU5`HQD6?KVdLZQJd=CbZ zHVr$h8i{s1Cd}s2sQG9@J4I`@pWHasLt|1qi96=HHdC?KLNmKq=}>`>J)22HoduJ{ zK!D@z<(rZRfp`Ec2r_0Ap#p4hah{(!A+7)zz_aihgAXilRv26&9hSkr2*J&3gHr$* z00}CyMP?Z$d}n;kv_xTXT94Ry`gwO&lj=Y z*jky$4HeBZe96 zzB&x)%?BIwlZ&sw&5lO|1%$?d#3%}STydTJFGd@V;5q9E| zGC{Ta-en&V#uP^MSC&3c4s4rJ#qzdWkuVBK&uzvd!L4+6C7A&$RX?R1y?=4x_vxSC z`kVVU2pDmJYFL+uN$FJ07r{i9_hFU<5eOy=s^z!(ZJdXcV~<;Wo^+v=1MGW_U`{CC z6R2rDkFBxaPSM!OOVdQDllxpg?AE1Wtx>)%HMP+WJB7e)O+Re9Wm`8KC=kiujK*)t z_##j{@mepH>CYH^Fc?qs>>RZ}a5=cOy)H}uAviE3)C@^;Fur@fdhH#$w0cXV(?59r zc?n-ZyZ|A>>8V+9Rwx(7cM64JDBQKpQYk#VXPUSpgpm$=_?aLA$Mxdkc?Qp_gd5>k z2VupBmd;t94F)rt6?kTZB*|JmbFS)WyvDN3lA1U2M%@6}915G)D#h2_U@3Xb*^gZ==Xk#l9<5lc?qwdRKj$<{E zCgV7;*8rYcrmJRoarzp4q;_e4;z$Ek5R9A@LZb+QLQam5n~}~N>A1A@jum_JwZiXV zOoS)y3s15R%9iR;qt({Kje%-&VxB~RwJZ8Jy$@s11IYRf<|eRj}$NLz%r?4;rv0NzL~JA%Es5 zs^e^hnq#q@y8e4rUyKDB%C_xt9utO(EPM!PsD|^cu$@bz&fGi5jBjncZ|#h^P9qw% z^FCnjxFG`qTS;MKzt9xf7>ogIOS4z_)6hiDs>1<1D;fTDhqVGEs|Et5Cnu5Z^eY3c}er zatj42pxU0->2{bQ#nAzQkelU#oYawU8~_HEJzzsYq-uu%Hle2&5yEkSE?O1P(!quI z+h?igHF&n&%2)xU$_N83%oS9jWWgE9m)Hzqd{WaL9RnPrn@&~F4gsQsUfKAdFbfw2 z*;?-I=owf_cU0 z_XxQi3i}@P5)ywhOMM1F8oE{MaF}i(fN&ao-4Kqm7cd)u3*LWj;glGdB1V38dY)c9 zd0t*OYBPhYP2|ElUD~*_Or3U{(o%`K z%!d4KS6VkD=%|X{s8StMiuPm{(@O^-Hvo#C#92-V&mqAED@t@t&_EZiqE<-t5F%;y zojA$}_2sSa)8R%X(Z+MAuS}8~`3HM8ZSoR3XBCNUjjsQW)W5m(>qdWy{_L9iJw55* z=?=qidj$D1hlN~=6GsDY#p%*7KlP_HGv(9PR!s5 zsOGjFbygS=Y|EYG@;k*`3MV7gR=6#XBWVtRc3iG5jTR=Q7NU)7<8a`-)3KU+*{%up z;EkeACs8>hxeGpdQbb7j<`0$fDm~z9FD= zZu-PXkDjslA!aG=9)qtP5}26(!l0wuew$;17y>mwU^W0zFd^i%;8zE5M6V$LE<%uN z3{cqj6w0tXLeGd=^p%iseoxUdHYN9k)TO*$V%CFTZ3Dt zvh(+7lA9dr$z>YT?_7D2yvmdSIr`Sn7`8(bLUR(vNQ`%!ll3K%hynla(~U1tDQ!`w z7c*<{btuhMWdr^&`EOXB0bo-Y`Y=n`59wzYzVOK5IGkJLfDi&j;i_@dM(7a72(=vQ zw{RQ?pPC#M)-zsmreO7v_Jzlj%EH_uDPa%vwisS?t_2c3E39Tn3jS_uT<|R1NOPaJ z^GkWqvoCV{gvG8EtIH$QShKl<4aX_<+aL@_Udz`DndcA-AoSJ^`%*)L@EaB|f=^z2 zK>!C{Y7i;>$N8LA$FP=%|dVE~>~ z|BDwIgRcDBh4_Qdbv^1+DUK`~A7(}fWjY@9q9XnF%^$w+-_KspxGU`7Dvn3v{SI8Z zwmn0?_ufSbZ_b=QOXbHEs6P|`Pb=`fAf*HVHXUeE(^y=7em~fbDo~Uyyk>Y{Q<)nh~YB+!E>6ZGnOfLbk48#O}wIU>ol^dx~aI?!faw z;{a*g1jK#~xgIFnpaer61xhgtt^kd8zf0e|bw&FBfHfdoMcSph9+brn$20{iY36}E z3ljRHp|_b4<4~BT8YZ)wZI4m-O;YP*$0v=t3KE9I0)POx+_Z!Q1MS!V5e8Il-@JWQ z`XU)gIl_^UU?Zo6rhU83+`y)g&)Olt=t(AC-kXD}j&DGp&#BXxrf7OrW49fJeooZY~4fPIq5`pH>n=zL6Q-_a^?>nK8~bYRmlBa^CTpS_88cAlk+iQQR58zj&NX8o{0FEAa>J`-Vnu5R9kPO14?o_ozLVRAU0 z?>+UDfF>B3QRrb{+3dBl?yI{k0P1fsi0vp`RgxrHh#gvBHij!AWLnWGesH078bBky!N52^Jic4~+3F4Y*wkAO_gf}P1}{C0bTdIykP5eKEGQN( z=^UL2AsTtM%~Bt=pAhz?yR~%`b3!J+Zv#$2KZ-QkO;vz`hGGWO=+3-f$mM*xxr@hy z^r9Si0dJ}Xgv^fE>INH-@(HRV5bPYvxTSF&4=yXMZK>k{YeDZFsLTwF21tGV`n$q_ zknBe%R`dt*98YA~SJ#&%tap=H2H1r?6ri00q|#^;0YQTquMtj*ll{?gprh&l&9ivJ zcBfQdKu&eLglQ=R3ou^=fV|I42+ioQ4j2$**ig&KRe_oqW<2Kjkt-|a>UppZK+HD< zF#zbfX}T8o=vHT&uS}mJC=Ypn?BBXY4&RV{p0T%hW*B#Sx9Qmz$#D_XAwxpm`Qj>yds9ej7!R>#>c zs+8NAhz^M`VdUb`-fQ`g7T5!FAZCIB&$yp>_M-wAH#XPA=o7PdI16B~1t?uzzb8Iy z1xFRGV$i<6wIYR{7@+aMppMX1-74}#{-_%bBq!rpVuW$Is)so~TfiV>BpPHt0vOx5 z>3PX(Ju|-~OvhOFK!|`4BA6i99CAf>bTKNxX%29So8)v*cGRn4A%**Q1!yzw8&3 zU!p&_^*nV}*J;2LphBfWUa=tV8IE;Kbe}h(lWYI|BXeJ)dVHJ8MTD}{wOXwz=V^qp zFi?YG7}kb?{Bh+w=8D_&qxF{`Dh!YPgD}Lnl_T6H0OUFu;25!ja#c_hwMlHp2rnL- z2_>o>%h3$S+1*Xe*pEP{h7R6|_qDEsd>#-jVesZv=%H%yFd^1T$eC zox}PP{o_l&K%Y7FI{n^A55la24CuWo!q?wP1Rpw8Ml6{qS{U}kWYe80XZUw z6HLM%0Py0{xjp6B4?UYt&2dIja4EiC%ygh~0}Fza143;$Ca^RtrtP;`-dnvResN-V z)J-H;gxVqa%9-Ouk!#);4{R_~0Vd-9h$$x;wNRxS(%k%vToUnMAmHQldYPFcR6_+G zkh;u<2AdlPHA7K!UIYlbd7L$20od@clzGP?1PAsJ@gP^#Z8B6|NZof3DVR6{wkdIh zc8`AN+K1@n)=Tu0)i2VI&VP&Qh5Hj?;HQ0k^$dNk`Q!9<>m0SBYy2B00(wwf)n=y2 z*9EjO@-_PUl$uuAcXd0unLD`of4;-&@W$;Y!}_+?+BWsJ7)*GKsV&y29re|KTBuQ4 z=ZQtbq4kwjDUz-5b>9xP#2cOY0*5*=lxYzayg>W}yGfIpx3?*%#frgApQe~6E685R{!s)Wo0Zt(y3JT@M+F;fDjFvYLo%PKnDCnQxg?ja%(v8i?H_yQBXmQ;Yyq{B?hbl~FcoH103p;0iBTvI$N>XW;1y&W z2vtEYZDwaC4ERV_hNHqCNiy2kM;Mm~032~W5dXJgBrrU#-iGxpg2H zhq|H-0AX-Oj)>2qfR24P0(1aE$PF38Qw;PN_yJO`&Mz4@l4wO;4Kw=fCUrMM`oGpc zN&oipC+MT6*64%vD|Ft!PA4myQXAttG4&#!)}w~FNxyM#j{fxO9Bun2m=!SCc+9|f zBH@K?5yoIp$M;7X2qB&b`5c$yNDCA&YaGfa(_Q?9$HmZlTL7Rfc?bW3%~TiWskgaB zt$WJ?6ktd)@bUnRYqHDlfyKBoXa^$WE|gTm!$G?(`|L94h_f{R+gaZrci;=4V!+1r zP@SLW&lY4`@*TCB7~PgpV5LDDDAxuTic_J_rm5347#DOjA09x!}*%?Dwe4ga60TBD_?|efR#H z9%){t*Gwqzt`48U*#V#ekOZSaUJ8HX{a&%bvdObXh!KQYFgq&F%<>g>Ff+yBluH3d zAyFQ2sXkm|P>OIISPlwSi&}wZlxPF}x?x3lUBGDAz=sFBDMIc(?R2Tr9niPd&(dov zr==6B&kUeauThH`MUT%%m7inamD#o1qhh&2+jsdl<8y`(Rmj(6g$F*58HuY~N?qpB$v#F$~0>4aNxE*yM^4u!51@kC;u5IdwjytUAvJK@5@+O#074=>z}=y1f_!U0#3%4NuPGro z*9vl>=+yv|sC#&j4tRh{(MkjZ8d0XI3+i<$S4!fH-p8QLpY6bTf(N?_56BJ=gaHrs z1wMbib}PkpJzcXTzbn2=azaM!=Z>iV9%K>sh4OGP&jy2HU=0R*+?GoNO=!O87JMoe z>N|6=Q*|1Nm5;l3aNSfN&SOyqeVhYkPyiMDh|I&Nz}s_}T_LXpPz5kW%w_!@fhvTTh|nn|&kyADh9RnBIC8BV5-ZGR^ZTC< z@gWa2U#$x>GsU#VJQYefEF0~nur;Xv#NFG`*#f;202WBfF#`o4MLF9e03AT+9s?N$ z=7p&lX@}mewN(-7CWBLPno3hVtKZ(DsNGTFnW+W^JhScdOjJS?2;J}vdKfw(+5lu6 z6cFZ;-!P4ZS-6@V0eDKf4a9&4B=IWImNz|wV^9-iu_QUCya6*9r99|CUJW0;u+^49 zP3~;|8|^P3KC4aFMI3;cyI)WqbpS>%H78?UloiwhoC2M{8s>gnDJ*r<(Z+U9DAIZV zv&P3V8Fl2`Ic}iBg8I7xCmjpw<^6{GijjARNIOLW-P>yKq%uQd2iDd?x>{6+Qi_*)2Ix06~H`N34N};-O z)aVgU*p|unl(U92e|yF8nNNi3x8ou*O{)|oL9 zGem?SqM9qAm_n&6=Ou1;B_z{Z-=ON!BGpcvq&|NRvqTBi9kM$R{Z-MN%?#)W$)Rsh zgvNH-Iicqj1PBVcU=@qxX26Wl1=UseB$$*jNX@p7K}?GVP_&QSK@_=i?F9_n2)mYx zYWt~%6EGbB4Yn0acrDJr$kTZ$e5ZT{sy;AzWAW&id&9}W?c)LSbb>~!pI}r^pB(%VO)gP$uS_0cGf)G;k8f$kY|PH0{wcN z1Fn=tdz6^x1B=v1y^ujAXUvYpxlrA~_Y+FSCt$&lR46OeK;ujdk=X^L%A~QtY$F~k zDu60Y%{ERP$iYHI{%&Mx(q^p0`_;K8mJB~$iO#E6HszO)fmjIeL2db{Z z)%6qO`^`XV3&Th>rbDy3erq6Mjmq2{4K_EWn`+$a@}SEz&C)FOHa5l3v@|nA#p!8E znQ?ac@55F_0nl-DSJlkUM_OhmUpe1NR2`A@8q$*w9lk3>O2!Qqgo0O3=VR==jD*c} zsLm@FmCDXjF5MzW1?!QJAPMkfV5A3kFf#=<>X*PeU`UZ>UjRn1wMYvj+>vOyBMiz( z9}gIryi{rp6%M6zyc}6D@~kLW#~SPN);=a8wn?KcfTA43vK@B<3*hX&LN=}p4081> z&@mx8gLXtjhqfBa4DNPOUH|2u4okw;)q{I>jOno5gWNsH3us&BxlAk42Ne7@SPmar=*n}Ws^v!T8)9snK&rD%OalHA2wRoWkS56NwprdHEAsSWZ* zK*`aT(+InnLe@Z7NuuT2Is~f+`>ga^8=Sg&`-WYq8^^F5(@sLc16Win>Nix(n9nJ2 zQiZnaGt$IGw;TuaNdbCEnu#8Sx#S9tz4 zA)rxJoiR1F4YBRP8|$Yw3o_~lW5;b*%^I!u;UJPZHZ#g3P-q$t6Y!>)mlKceIkXo@ zm|RN|r^2}QVodT2d+MC;wSNA4(o}s1axjkXjPy-1V5)=$L*TJ(I5VZ`sn?e-y$OQhN0ZCX4S z7XpBTQo^|s4ike@G{i%m(1hf0u3aUUHV)j5mL>bS`WM$?4@HrNrz%e*p*bh(V`M-v za=Z*c@HcuLp{;~`PhuP$BF%-m9)<5XwJp}I?TSsk7AV?ybs2x&#~ zew-waq!P^(a1X+qT$$oN5EF9Uq3eP}(ata(26haBu{tipc=GwJ-I$!pmAS&6#;N#x zU6_b{fP1!7y2nb+j@*tHDCQ&eEI~o)fneE#&>JexQBg1XqzJVzynZF1?(I8NID~hh z5fKbSXM9|IiQ{j8fy559v1y?D3>DDEFI6lg)wz(=Vok28>%ntecc}`$N$!MPy}e)|jLw*|q8DfuAyq9al@R0Y=C(8Ndp3P7Xj*i9^{BDUMB3T|A2#rlGTg zX*DkUkPd|qj&4()Y9=Rzxu|Q2)tF$V!n6YKcoaTVwB*Ul-BWA4H_rh+Yc#A8%Ig4( zLqeDf3|&*44Bv+YpHh5B?}O;?vU}r74ao| z*oc_ilmRNUKlzJEDe>YVfYPXJJinc>-+`e?hv4FHxL;$7a;@#y0BIY&4uq{ZJHmX1 zQJM4AZ?&Y_JSY|^sMh%JrT}4}y}-gjPx3xxxF};#Md2W3_r(?^3_eiK;r(J`iVkDP z6{RGjEVm=FYWn}#d$S;0)~ifx<+P`or!(A1R|7%{Kx&}52sIMm2AZiGnxUZ`Vf^9; zzc?I@u*1Vs+Z~SRez5)IXuI8xZU^1%2NRw!vqS^p3V~z`2?0XG)xF%|Of^^SDM$a` zTK~%YGk5M9&N=r~)wz`?cATnRd&tb4dwu`6*0;V@%+!v`VR)9|01Vi@z+7K}t@SXA z%tfZ1+V5U!dwM$VqM(4Vz*DR;&ll#@wU5y`M|}fGnPo$zZICBYZDlcmm5;;RH1Q*G zbg&;jTNHUJRB*1T(reDUW3uB6(H`R+(?1tphRxrC(+aB?Sw z=L+FUl|zT>O{vWYmtUq2&G)7Dfqok;ytk#%vQxk$@O>+}E}S5KHVYmX+!Xj`IB%^c zRI~sM#wB++<(0H3+bZxleTQ@(v}ekFj{EeSCsX>=?etiJtsu^f(i*qI@;)`JCN`iG zu=F~!H6gF0eZJZ6pl3jGn$Y2$x47#+>JQk4CNqy8-nq-{X}Y&Zm${!@*@fq%dEEt_ zX925ZK{f@a!UF(FVVw;M3uLLL^sF?Soe(^#YDgpsJN2kjMuWe@sevtMEWkmjr>Qw+ zUA89)lVLkHHCHO-%sxa;Z1X+VOM9jEQkt&aIOl%3I; zp(y3l*%@X7w=2;KD=*K_{G8Jm8bl3gikV2K^AD~u<(UN{mA0GJdt?}n0hFV?U7i8M zSKImqC5MMJW!L2n`-;J#7?N$6Sb`xftgcFc3}RY+;d!>cpKNbm?p0`+ev}SO1ZAkw z7&vTj;3^$|)*>G0z)aQ#c=Y)MWlg4H>QJ-!_PlCu513AFK@4D^K*a(N)Z8!z!`6N> zE4@|_M7@feH2jdkN5Rvz4#NIvt%|JVJoBqQI88EUwr1qnz9a9UzB|_d_7tI>Vn9r@ zEjz9aPu2h?1)9i7$z@dcAJz8@9RTv}b4n(p4M_UnzVpVB^9FGPJufhaYIojxJ7tYN zp|gWo!Sxyy1-PoSvoepfr0xJ#EPI}jiPKDP&uPp}`-WVxfu`Z~^>|%l z`=!EAYixRL1%Y^SG0kj_fp29_QtQ$*7g0z`88~fD{x#MJj=YSH98Q=_Hop)T7h@q|=)Sr)ccWLkNm@fy6?C$isG`e?>7H{07z%VUL%}hpP z!-yioj*h4>-~-E^48zP87pO4o2~G+;3gD6o6HWpnUF8Q2>l;mm5Tq%)8L-k+@e!ar&vD6_p!-6FjX?N?{>XD<7CDaLIu%^W6_Q~Pkb%wmTAj4%BH zRbF${U{-~5Kd0lG=;b+}Goi|G?r~hRkIo~l>or(QVvFoE&8k$)O{ulXrcd&kdmQ_l z@hqVH)XA@|n?XD1rOsH2y5In|I!G&u63;6I5$8!0DhQ%cH6D*xaky|x2GgO|;PpB@ z_zVEV!ETzE+g_ROMVhX&vBBy%3q;;}4Xpi+G@v>_QK-{_46Or5iJC2_*ol2_sXNKf=>G}4+{(G7_TxJiKYGom2thzE zur;K-WI^PBC$qI;_V@Fo*gW;MyKX?bis`s~4mdU4uiFeeeFt!wxS_x`q^f7geP0*s zxHZomUKd&PYNp-vjY7I$fdY!|sCnQ^7u#W3ZD6Bmucp*m7?RKFBG+E04S?FFoIcDp zjpG@`n)@DYK6Iz00NVfrK&RjfWgu9R3sMTU?)hmuZ+LEZb(!VXsOjX^gfv=OX0|gu zIAqluhrT4{SveRihSVEC3j&7ZSZ1llM~B=qb=f_KSuEgD*<+*0G#IdAvL?(&2?Nb0 z6Q#G5gdIw4Di<>J0L`piS4?PXK$ypX#2B_VrDCwiYPyLZ@HmE^VUAfLK7;_SUY1mS zN1Bd+zh6N-O||gq6J13)XJ-|uV4?Km78M+rNulXJhqWk3l~Ja!uHs_Pac=pxO4zTr zD@OQd*I=&kXhv13COzRb^mzmOziauUmOySzscpnVrnMg2(X$}r+HB+Zv3;?KF2PVc zFp6|e4XD|-0|#i9X3 z2z6Ih`2HM0`U>>vr#h(=tifC`nvzSioc_VuKcdBjfR>j-x_3Y3pI28yx^p+C<(mPm ztwwZol+ylTN?V&9KCcG{DL*cZIi`Wnlw`xukFxI`ZOU^oH|}gk@;I_f^!$1 z2ysfQE0SWH7#6wMGe7rHvlP)lKX~{v;rjxOiJf-@&xA?>=>9n!b0zD75auhC|-OMP!hH#S0ZdU~0Pn~!S? zr=X@aqY*ijt8J*A&JxdB(D7o@agI8S6>Uy05Uae3yk_guR^UIaE~6WQNKs7YG6r?I z2HSECLeF#s%wa*w^y+|Ojw!1Hsrcc|uVFzUr>Z+7W0n_}Ss<~yzbkWvu#&ZG5+K(# ztOde})Q&#J4lX_aoMAvmoLbAmP*x=i3kHSLT!^ipAAp;|Nhb&M;MLx5bRc||}@Z3@43Q9ajsSpS6z&bHh>__v$KBsX%5dH;y z*V-S@M_#yNKFfl3c2nBii1@g1K5ncS7I?f*{oWn=?xio%-`gzc%LmWX?;m_O{psj~ zJOboWMqjhI__@trq0f!~I(;_%_&XVd-2aP4noivknirV@NZLr*9XsHoQtgO0dmu6TuRN;@kI2K7~^fg3Eps- z0a?^LFt83LrI2igy{<^qc@#!E%BTs;Iw?|i1Hw8VrOwI< zb%LUlhP$EwZE96Of=EI^MjL6>h_wVZd`s+@2;cnew)ZCe^w$4F-?aFqVb4gp`gC-h z(fV3QgTBwli1iJCmu;XTuWa!B@Yb93q0RrDUL8M6{{Un_o4@MLkJIauTbJ%L{l4|j z()(5p=-K>b`tvuxi-uYMoz8}uRy$DxloIEDpX#-uW;)MxUvSfR+5nq7K%}X;!qtjv zw8e|`8!zsTceoVkI5|467OZ{ifS|#8KEQZ$hu&51mGX*E#1Nr%#;yYyfDnu+&mSL2 z^gaKP3|CzM;$UQsBmlqG4iZE8(QHATqo*SHygneOjVJ{&UR^LR3A#;@HS zEb#Qy&eC#uSpVP;Tv%zRwR&mkv`*HK_|r|P*orL0Ha%%@ADv~7B#)kiWEC)RL+k~vj%BfYQr9;l-X`U6^A zSfphWXpyq=8e=3hpbG$c=K>EA9MqrFJSKh2nNpR3KLeC{OVaejrdW4BFt#DWXl~RB z%yT*`s|-A~U20Nn@(km%Q>A zaE@G&fVwQ;@ns6rrs%4)r1>AUqQu;C>HG2I#V9b$2P3`Xg9H9OG(ZK}wrAHdcvzaI zB@22gmW!FxegG^CDi&;Th+sI+KilO1j7=F3g0mRK7F;hXoh^LSgR0L1KO?xGbvxca zpm=AOym%thYwb94^`+D1RULSzW~?mzMm@+69One8xgGpK|F`HPy_d~3p7U``rv(d2 zu&)aPpVn3b1|y{6H2tP2Mf|VVR+84U4>-Ob*!&#*+^yfd;19B(+tEGx*v1#==2nM~ zC1&QD(@)>{?RPR0Qn&1!>a94g1y7GE)6uDuIdkXCsml&ls>8->lk=S10U;d|o;P!M zO%!x@(4$MxtP0gyGySD3pmH9dS`({+K+bb?vN9M)Q8+V&RG)`B$_SnR@INy@HwV;d zx~|F4P6HPAKDEo4$820_wt|X`t_aJtBYWQ=z@Yx%_{9Ohz)VoHDghjlT%^@JuS_Sp z#}73X7|-az1Dfvcvbm~>vaFIqZ3v^h(KmGT`Wt1Co*o`Dd+Kj(QJg{*CSZ;68n|8Q zZ>l*Eq}l*J2)?V!p<%@ViwlsZ0x%(<0f@#nB{hwUQjw`?tZMN$MN}zeqp0_HqfNAk$jQLQM#42Prt51Jtzk z_Azu(7!p!;%>H^l|BhSRG5yVrKcc^}_9qvY#y8jON3;LKd>;(>cO;d#u^#b4;6v-L z)3*-3O!UsO9rBzyPtX9NlxAlNDRAWugCd%BPS6^XI{?oGp_J&lu?;pF||22G2c z7odv!(*!Ct^E?e)noXu?)Fg+Ugbj7j zd3%l2m#*ADveIp^y(}*s7&7*OOJ`DWDLZo~WqQ)Lq?cdEab2i6Y-6R2`WJ@V88$RB z0E0hA3j^*ILZLp0q!(slR^@QYo|+YUWvkbxB}kFx}EUaNC~1>!uR=F&_x z{=%(ar_Ij(lV3=f@5{IJ{(`>e`8&K{*k>>{Fd?K856taH7JrRGKYu5IP}iyVqz#~P zC#@ogjU5tFH~{62@77*Y&8!7fpC{zjf?R^btgCIvkZ*U;wePt!tscH*1J&wY*g{s$ zUGc4iTSgN|O3JGV75L0!RB{~802Lk^Izogtz-y-ZTnnAH6yL)!zWSJLupE64DE5@K zxigJ=-7W*G?o%8m<%n<`Kb#^8>jyCVWffKgueb=W)9Z6h#P66DC$VJl zk}-X6@as~rFrN`V%RBcZt%!6g*ZPuO`q9#v5)pvla zSvT^Xnv>T^>G2=?RJkSeX?AWzNVCmN7jx$9q)#`E6`3z)Xc>*`y~b<)z$<~JmR}zp zvtrB*@&Y8eG>1C19e^0pTDa*KO97w>M4BeV>!wyk#woBcdMymsa_TLbfW zwcKem3u2%3wdL`-j31w=f0#gf=MMLG1S>0&wnTrB0i|?2<&oY&S6(|b%xK}(O_6Dn zbrLV0vW$imxnPx#AdCMYQ${Ta!C0>;{Ejpg?(24aT3HThGRaE?rY;b`gtA8fBCyc{ zo_yxooCIODnBv(&LFs!}I0*~=S?zkte7o7H8{sy+FaNyRuiTFB5H%bwVNC61@xd^s ze&1&Xp$fQeN0<-NlC1diy%Ly^j>B;Sy!@6+{ySE`LeKZ^G60Q&PPt!i=V$mmgHO|q z-XY!JPWW>Io5Owse6WG7f*F06_dB%cAH9=6D0P6w)deWnxaOn2lRneSNCgd%#g8VT z@fvBnypf(Oowa?ZSQI&LmQuT0YIF%=L+xi)r{zVh&Y~-SQLYuO5^6UMS5v*I=)o$W zIE9C^YyvL8&J`KBU^S2NxDB-JDIen63p--ZfJeyppM_1~xJN9YnATo9a0C>>P};=< zyka)b9pAst^&r%MFbfE*C+PQCkdRsLv~)NUmax9gfeDNUO~avioXk>*y#fTjZ{?4u6MD?_kUrGrTLfzy!`6lY zJOfboA0!MiJG;WD2LnlmM(ua{PHjoA@=go$ zp$1r$>NtF}poTjnQ8!GfF4I{Zx+PJgYjh+Pg= zOA~8*lkww2oAPpJ330uu@eNc^Jgpv-ai2~;69fw@q-gFxQf?h9AJ&v)^IW)nLO2I_ zj!a#pnu4%Y(3x{Ec=lQ9Z*8(Xy~{=L!hq5P9@T&vQ7Jbz?=if0pPMI3F$gAoE{pLg z7yw2-1fhRsRp4dZaLfp_SUKZ35S&r#0O$Z*u!=@-gEPWgcVlJ@cq}$BBT>=G@3vCHQs9 zK8zxt0ToFD9M5D@a0*W9Uh+TA%UN08cddPyve7Z`>)V}>`=O;z(&Tu|z_@CT0msO~ zibxnL1Qtj$qPZAg{L<2&&@=w)?-UU799HCR+9yN}786rl6{jKtV8@Uu`L;5gsr_C1 zjr;}!B9{p@DO5qTLygFxYga3foB#kKQ_dY3t+;M$Q>>=zWQ2HXdy8^AnxPJEnWNfM z^_{Brf)kd9`r2(ks=Z82p#)NpzQdf_#y|LWrc$YV3w&Ga5-@@?5P)i>3Oq3t`wyEP z%n$0C{}*oEqG)N68IIRbx7j3*IQZi7=O?I}q!4>BQGl#PAIQ0o|DYyx>unZ@$*MUl~ zmFbjHZ0ltzP6{&P=*8eIijqSUlrsaCIUgUG92i5lE43{!ARO1N8xeoL2-sjsc#hBM zx}2R8aBSyEGY-O-p7Xx(wx>&OX0On9Ed8mZDRb##!Z9A8w+rgNt}MO)OgL3I2Vk`< zCx7~ta&C-Q_A_XZjL3=onFBB`h^16{juwq{o6DlQ4iL@EBvOwcqPl5mQ=|}DWScx~ zp9ZJfSl*nKj7Hf-Q{{#Lt_G>Cfadl{gh6RM`Y`h=u^&+smMJy29tG7K(rVi8;{vVr z5D9=4<L!Ld~=-R?rAk2*6nVqb>qggqi|?2SFRMW~6%bbHU>tRT;-1W6o`2 zKDUV%N~0;sWLK46vlF%fC#2{UnAD6lcSe=taX0f|KS#P&hqKB(kS{{kQ( z4GEwDKmlwNlySq~0m$l1p30g zmU>S!m)HFHN^c4frC!RFr?nr7J0p%D53(9B}-x2o2k8BJu2k!@gEI^^`h>xT06;)3!$R(UCKV{2g< zQHO1PGP>E_XNfXc8dw2>GnfwoHTGRnzH)6rNrs?};4OeFA_Y8GnITeoSuV}FXW4Eo z9MJUW`0a_VW*8^DX{-0F0<}A;pN#17M2#q_H@+-hKkaSX5y9g?GP9k^fXr ziVdmmg5%1p3#T5WK;p)J7kEO4G5HO^a;4gdQ`T{Tki`w|j_4cbRJZDJHR4ar3`Lin z6f`SrU`OdBHWzFnsjMKJF+4p9Jeuh`sUKDHZ@k_~&*%D1nzlBzswBKh|9RHAKv++n z*L$7tUj5#Hr>|BlrIM^eRKNr2j*krpEl{+wB%{B<xa}zm|0yl5O)Ls&#fCBy0IDY{XBcf1ha*Os(CZAGVMnJ zqQUYKE#ADrEaw;l^}K+E2Bj(vR#RqC0dVS+lVD{+Yhb0?%&5%s))o_X#Fko@xHkY` zv>yr#0d+3iAK7#wQgI06*uWZsMy*eqRnHUw$GdcV|2{W9KlbSA#q^`=zr&xEusAWC zg$p=4LFAGm#WCP#Rmq8BPWFGRcSL`4_0vytS}t;cNNYX{KwSq|GODZGT+cbrN#D7G z1i$fI#gvd{J?ps66jC)G+^4z}PoJO?r#3zLmEGKw+DVf}G1td8-{#6fr>J?dorQ5J zs1%q#6H5BZ6*bJe)=wSSoY|QyUdM-$boo5V4r;XS4o|5H?raVzY01HB39* zs+4opa&3*K%|4%uW*bu#=sLE9qe?oWdY@57j*GUsng)&BpLWP5H0uTQj@SSqu)a~j z!g=Qg@&EPJVeB0d~&sYz+FUIwqP{t2noCBP+ zp^O`u6)S>HZ)ur=DCA~VDCv0VgJx7m<1Q&m-#Sm6Y)f<{*fMO1riE37<;;S#9)xC8 zHZQg5DFko?-=-fNcjqUP@==SQhgvjYh~Uu?EtuC|NMlyIsYILYddMp!&pKh1Eq%;& zky$r|#FyI8andbW0rnTigbm6u^aZ`}oUA*+hLF+%J@b}zr+nnfO9!asfEaC$MW8BcVisQ!Z_RUVY z=xNH#b%ce>A~dZvZ`+I(~ z$j^~lZJWXOvD;sz-#hpQy`H`MX-vm?jd~A0v?W^`nm8#s*W^@5N=kLtgsB5At|d?E zyq}U8qK5f_-(Wa-1IhHoRF0Rt(=Z5i85o#m=j=4px(!Rc^V8LIZK=Qtuxzk_fWR;j zWg1P1IM`696O{m@wJx{*g=;PXMPQOg=^Z%@5V7P>_U+{** z1|S8nN;X2g@$_>6D9v*;|M^?LQP$I*qAhp8M6G*LCw1mGaG+-aO36yv7X* za7v(7KmyZYmeG)8Yg4T&pwN^bfJ=ILW=&NkRp^)VfY?6{fdLH1upOl0CObQO@f`KUEc$1)BXf61`#owZ}m5@autcZJ% zl&lT=g<6*OY=On%Z`xRV()LZO59p=UFFkD`&F%Yfr=^Z85EU(tR{+Uqwx?9FBXDrT zE#c^MTqRwZn)97Ear1?l1562B^jPn!w}dXirme2SV-|Wn2CGh|TRJeDx_rrH3aZW! zQg)5sedeQbagHw6L285uXgV8CcY4-PNa(H}Z+3uyoAFB>TeF3Xx1TGY~Wwwwg zD&d;o*^%=scaA)(#*$zc29Hmjkq(dfbIHy10&t0KPtXXGY^31K0%gLZ8bVIZg%+4n z+atuo>lnN;nq~vKlRwX_4ia+>*7zTc4z(e-j)nUfROi&QG{vi_xsw)iuN|$^0d0tC za4>i*=jN|3e~Dgtai4peRNZ%DOO%cHYye8fLvgnNqr-9V-_H2){Pd0Aq9_|bRqJX8 zfLt#)kLnXp_3ucx9g`!grpnr3EttDLGX-c-H`P z$`T{X?fjwageySQYVdj+k4Gm?J#G8Kv!%c1mua}nx>c+6x^!!Z>{tft$PH(PibZ)P zh4TPBWBHPy4iq0A@?Lh9mKa#ND=RGF#{HwaGQL4na()SH*oVo%9)lVOW;Qjwx-19) zgnHMm3CLYL&RQ7(7z6u_tp=qV0s>rarQCr9qBiB&!*0oNEP!s=Ptx!j%$fOwEJ8rf zP+-LhJOIy*@UE6f1$}n>?Yw_l$I|p1QgWz~h%7 z^HX;}z-e5t=^%P^E6T1P)6c*7DXwe5;T-Re=2T6w;j??|Ud+x9xQ|DwS+s8ky(%D$7rBdTiyG#yutWpL7RO{X2#ouLMHeuE7uIu0Dr z!JDkx`>sLgA<}qS)U8|(3Ldi{GlBe?TzmG*J?qx3b(e}A)klJp6;h;0BKIyENi3Kx2oC5$B9;-~_yk!!o z>Efb8zkBBc6m&W)d}+(>gWaWPbl1i;_wnv0DT?>43%Kn6isKW9`!RMyYd&C0+K`J4 zEEnwWwC!)*_zZ1C`%g`1qIz#n;N0g?T|JjN;1N)zddnRkacf7ao&$(21H&B<8rz%i zf|K7uy;4iPVh71|w5xv&E$0U!o{Z{O4XUcD(TSi|< zUx$tsXub|B;c(>`)`K+(JmEM%fC;b=A*Jzy2Q=QMO@5YbDSeARy8OqyK!6lmnP-+2<+X=n!r$ku zhp=eShSd{6)X(Vetp4iL5|)}1wY|pgg_Bxy4GcUdE7r9Baa|XP>TV3mtO5tn7VPi2 zE4PcN(tl@E_Xj$*Z%|yr%0s5nD;r*O$8W6(C~74%%aH0h?V$0y`&z!I z6KRW?CRfkqT*MV&gBw#>*nnQ4;W3Y909!-j>eK*{Svr!By3=ILfCaT&cV)Tyvi7>v z+t@Hy*3+?G5x+5UL6C6_l9ocv1T`U5VX1%KWcv1`ApL%yif*q=^QLz3;M)s_8~Xg9 zOua!FCpJBKDNcar9B!P-Gtc?G(MRdE$ukT(oSK`8s6rhf+!ULeg2R31CAqI0tkZAZ z{SI;3fQX{sZ_N>5|NJv9UjF{OKTZ8GZI8e69yJgTq9B)6R!3=>X3k+kL>R~s(OhQsq&Qz{l+!m zQGKeOXJ2UA$O~R?=iIn1;|#q!tFfng&&_^$s^NR$Qx?uJrs_4)nUN68jBu41AVD1n zfRY>^p}0dG6Cff43-fwV$aUA(XmH~O0})hlY+7o-2+j(f)m2gEg#r7?dGMKogxIj8 ztFCNCS`y&HfyxtKHKgNk?$B?7)xC~+SXm0WZWLIR7}7kCb3-Z=4ArwLIP?akwl)N3 z?8G{2tCM!-Nj->V+tyV(u#;CYiwKMeQQ%+f{5;(|>T>D|!B~X_I9~jWv=(k{Jwj*Q zMroJ+n?L#+27s2Rx4gs)9&dB=k%rp6=zoRY=lv;v2HK+pMvC;|;c?2KiqA$p{hAB2 zwoO%#CvCs*>?g>(`fG8Q_4sq{&z-cJ+aII~IyWoqHEt?QaFupbs{G@0U>-}wU3G*O zskGSSBBOqz7Ovss2?fALEvPwV73QP${v&^8V(Lj#S$UKg#pCY+80EY4IzakvxLMc z0aiX!+rZjo*KN5Upam0CWgCaILI3oPpC-?+EcJdv%?H5aHr+NGaL>9Wc}V~5mw%G( z4i~u=6q##iVPl;_XWYa?tmx=xZ+*h1ne8N4%XW~Kb89{|FdSzm_A>#*PD`i0xV%Fj zUH$x34=+>8Y`|!4lhkg?^$t}|3W0+QIn^C>wAs}aw-HstQKwXQT8N$7k^LJJ9lrrI zg@cUEg49!GV0xK1trN`##rZ$OXti*ROJ(&wKW(DG#J~bm)qanK24sLFR~4246x1Td zyE`Ie7@ERQZvQ|;7YK5D`xGOMmuAkfT+K^H1sl?7?{VD#fezra zf0(iwOE=uN$cCj=?}@Iy0ZfnTpw0UOX?{0i>m;5RB;8%iij@6my{F)&RbK|(fk~t3 z)+*<~o-|FzuVC(bD|jFMcdz|Bbd>hR_;Xs6W~Kn6D15ljaG3S!AN~2y&=_$<9=`GHKY?aENS)Cwk~2e17#`@P^qkiqACmdo`gw?1Lc z;qg@tF|NBo(-lW?KxY7XjmHFyOqrX?Yf84=bYJs6P1)5z$aff#PQ_~uwi{kU#FJQo z+c`%KplSNWxtmT^Rp8O)*0~L{R8&RoexJuUKmi9QZDj%Yd*7^D5v(RhM=Zb2S(%rb zm2;P^SM*DpSTTfds1vc8?h21f1`uKOj8Onc@vPXMAr$ceN(j;jfH=oIX*Dipf|#o2 z9!J#Z7`D<0{Bo))ORy~*X^IF2racxc$b6xMnUhyWn1a)Eei?xPOkSr;uVydMfAaf3 zL4SGtOu2|bz~0)3YH2uei8%duzCL=M{=t`i(Ew1FuNm~A9X{A$(F*E}aS+(xQk+W> z*AJ%jcc1zF8RjW{KPS&MdR%47mCl5IZ0qGKzt**E01$bOj z(v0RywB7fB&LDQBa$W-+wJFJ!@?8rPo*)p-e2F~Ydf3gT=*myl0iJmPBy#Z(#&H~I zp>zWyV$euZI(+q2t`T+N6E~IgZ_myfT72fVVN5IBIElIs(sl^6GiId_J3xwiMFk4H z--R#%thmKjO~eQ|UN9Y%0pqxJR5pUNHbm+K*2mGb3eX=P9aEg<_8TvXxZGhsU_LoF zu3D8F*NXz~A4)x89h$<6b?_bPc}V4%`$zsd{lh={A^M-c@-ccaU2YBBr=?i8#{>E& zfASIful~QkOMi7I<%P_^ux3>ob`}Ayu-a4kL1Vg0$w7IQY>t!**Y*O^v6lt28k6 zTheX5lZLwnpG&YcnN2mkt~e3A+E(~^mM}=@*B>lsYS>OT8MERoF#)f?wP{wZkd;p< z7%XsIC^Kxxk9-c&_!(-t5I>Jbl%S)(5I{oxV)4dJwi3F^b{j0awnce>4gwv32*q%u zth7m0ZEMt#8Yv+GdwM8I^9%^_EU02`PTZX>}!HjjBnt#GiuR$Irq^&qw&I>UCevqK+W{*1YPWf-5P*6^9&tAO*5 z#X@N3H;GI5+mz4pa{8(DU!{L~?-#G)W!)x7b4iBlo}jfIts!-sY+2Bf&U0VK?LBh+ zNj1&Kf;V^2P}8O%cb;?&LYI&oohQ}hx@QA;Mh|vaD&Auj)Rn2LqcQ)#^xU&j6ERQf z8X!vFN@TifXMx7|w@m;$px*krXfh#MSX`jK0i1(3-@x*dv?X$Sc*p{Z;EJAa&)Opa zSdqCzK*L-ifWM}E#KuQh4^Ekw%NEYW-p5lD3p$X#uZw|f!)YMYSwSQUxWazM7-|RB z(YLdnCRP;(HWb-f5ttC{Pr;yI_tSaiSzc5m(}X_t+B5X)+uu(eKcg2{_UO5_5p8XC zsb7p}|1hD$QAl@=7wPK<8?I}>A(EOe_+20 zIgg>|*Tyk)J6yvIyFGK=9npAykE;z}^DuuM?e0+z3nue(VisECy?vRU3?p9i!A_5l z4clL)$=(59`zy~s$Mq|`W}b;pU(_GSLM^UF-KU#V{{CD+5OTqT8Xyu=)pVLQupn`O zMOn_2>T`zN*>f>fifdI{*UCJh^JEvP+_ao4ySo-9T!kyl34{tj0gO$Z@#WD%pT^s} zG#uYy#$%TC)G=SecyEuUd%NWK`Yc$0gd2>fFo05|28_(gIh`cjz={S}e36gM&!{WG z*RIH`DYdb+0=lvwWPr(XGG_bq_+H`jR|kM`c8uoIeVVUfPN=bPIG6>oNF>%|vncyL6i zVY_f~@CQ@!OmGG$0Q}&#fpji_Xu(`t=S|6Gw%4hto}1)dzVXiohje^zY=C3cFzziH z-QA%yE@kdF3IKvz`QxG&@jCfvuL|&>)FQ5YXFg! zVAOn6M}6l`3QkjUQ3FFVnjPca^s0;9_YA2%M_d_DKvh?)OUDL5amQ){##~#iP?gLQcxreWO zgM-@2``*Xr4*`4pV4HfI8~ps#oXg4f1Ac9c(!eSoJz7Q4ZX1JOje&LeKX*CnRS&r^UA^X9n|Wyie`t(0S8lE>Csfu>(NY zAan(`W|~e%d~@w0lu_jX9^BX4*hC`TIx`U06M}x1U6^53iZ5$_Ym57Su)@VKJFo({ zB5;2OdW$yJ`3pL_|A5m)2nY~8E1gwipU=v}fXTV{B??VuS3JgIl zGOQ9e1T>tt>FyqlF`+h$*p&hRg!44n*);&aBFqPNNji=_muv@uJkG0c(^&|PUQ3Zf z%}hO8;VWA6FNMq_qM%IK7Ih^f})onD7+iTfBGIfHD>Z>=t2uho}bWHmLCM zI~Wq)GKe}1CK*PMpsr@YM!~4RwpM;WkeUN~!ZET?$DDUGXEWn5f9ozSRz(yrUI4ZE zZlD%=1=DeP3+5}RxP3t?P*XGOz#%Gy!;CzKJ+0W+8#REaXr%r4{X?qjywyu%Y{6$> z-)!pS^{%%owz*@yrAQu_FV_;=2%+heQ$XfRim~0((U4h9w6Mr2IM0p;7h43My6fxY znN=o&D%`aZ4C3uwUM)k;J=xvofB@xO44a>;zNynVoS#u6vVee|7r!H8FOX{EKm}ht zJMb@$6FGP09Cu7$18@O!aD$iwfC9Dz*9kliHwJX`SUeBF4+%UzAAl0TUmA?VR_4Ip zY^_0gvrAlFyz7siFeC)~p1C%dEqP*unp!3V+n}go z9@l~p2%&iM0wK?MF4rdzObu`$up!uBm744yFd&gxg+gt2r7s$=Ab_v+$5XF8UPW(i zRzv&DeG9j5S5t61qEcnM9jj{w(BSb3BuKUC>n}b39Lt&6slu7FgA^Xu^330u37t@1 zN&TSm%SX?aCty(ion_i0N>G38+%la=-PG-Kxz8wJ|l5g=cpUV7gz)J>=VVRWtY1W}K=8yg%H(>S33IdTL@G^6?n7k`ny^QRN8^Z4BK zXja6-Au}B);&MN?m$uZNP!nqU-(7ESGgewfS!R2N*tC@La=NOp)x1>8Ar0phl?sgw zQ4K&roRAhir`%Lwhu0iramj`vl1Z((HA;or4zDr{JJdD5_fa2{;a05-NUK-Zm&b){ zYDVgUQgh3wa>RD=K$}rB=QUi11Xoc#k2UGzIJ@T0Sx`0o-uxDJFRhI~a z4AH{i`lLT85OV5101X-UP}IKJK96>gM%Afr(}IPV|FFdm3ls`F?tw~&1u!EpDEuAl zNB!%N#^d+0P7Ml1v1NJr+*Qam09~53OBMG+s{6|6bnU#6F;f6hW%WGOiTl{VN%2Ka zsxJ*&=+(ULSEB1ap{oxd7f}CUDFPTX-zPPu>+RBPGbu5ulx-USBPW&CBp->B zvTL^QcusoG#gdTPXBQQ&cTm%$PHEe<7~yFOQYH|w>=e^a6P+r zDp#6bEyo@^gYb~5lZI7!48#VBP1)(=044*}5AD=ec+;UCgmDophOn;#0K+(mz=Bln z7^hZndA&fns7s~szXFFVJWy}Aw$(#UvkkAVQceM_Ii;1H`^rhH?ktG>1Uhxif}Vye zkAY>%f&s{~kuFo^8$cr(EO2)|dWd*vUKo@TJHLz zb=98ZM$NASlT%N=_U_|6n{M+hSn##rRZOM?3#jjWzXUb_mMG#pn`03G1B>dxVF1n& zq4*Peg*MO1F@}ES{Ox)5(epv$nDuzw&qaRsPx$p{xkT8YX@@o*!J!l;q^AIo%Z#qKE1Rm3 zFE2A7+hB*us1O_AgYK*d1Jab80vFPB=#XbMmz8EizyNd8us@*5cv26nWLp#wSUcTv zEbnF5d~Q@!GuYykvsIjOKCN-)oY&#NW`b>&7p*Vl*|*>?8ft1@R(mZCjA^6!7~sx1 z72DLRBfn4Da{f$#E1`I+kk2OK9JGfv{#zUXz_{LIym7VpEpf?0ijmb*U+poJa>RV@?# z#Q{;X7bv6IULhUZ?UIz7W(5d&gQyf#H!Lk0={fzojtdIH#*T$8Zn1OXQ{|p{aW+vXyJTC3gEl~8NAWr11n_uw)BuO5qUHHEm;yX=9S^S! zv^G!|nMcJL_Lsll2*!n1Tjb`Jli;l~&$hyw*GGK^%ms38WiyEtJ7}-b2)$tD^#)nO zI;S9zc!Pb6vz%>$c%MDnrDzz}DCp1_bB`?OCKyhd(+udWICngFoy_av(~;rdn$=)Sjt8M`+Ci0uOCBqsiZ zQ*tiBaLX|+p!Ds}#}2sYV7m#`9d}B1Y^oYlo2k5!gC#*YXGbz>Z)Un?LRWZ0_q}ID z31}uoy@#!JY-c}zVWFHG4y9+veAzr}6*IVblP23cCFlh3n``Ob&l;OY;g4x5b+caq6wE~%FXziD55G$k(3C3O(r~_XDx13L6^`){;nCUiCoa{N1XRV)8^Rb~X;SL~`QPr%g z0570q*gWc|=A2L2z}J9lT7g>8c+Dnoc}~Ap-vBmt{&+He?APLX69NrF;jX%x={ThAZ;rT-$<>tPr4(YM$djO3}u2DZS zR}+mrc+rVH4?qPqM!r8Z49VOOOj29pNpmnMhC_Zmad4eI(D&E)Yxy~6tgBt zd|AE_fsOIaRGP9R^%PAT;Grz0m;+kwsD`#Wk&87;_UCcfK({76E3U!kDFGmS(F}{> z*(s1+<4Xtg(ykaj7Pha4$99{?u}_)(f+01BRNmylwoFsC&cbMH1u)U2k{-;$&sm56 zAxMdkKx#amrdzn~GMiTOY+;)0$~d(}YtAtwlIE;g^AyFISPKGXgjr5`R;wE|SJDiP zEsp6_)Im|ftgt6U0hUur{ zHV=YI4iJ-C5KxC~9U;N#Iu273tI|9>4Nc9y!WEK2qa4IemLsz814wxt6YrEYrzaNJ?{c zr@*95sBudwt~SWdY)85uZnvxZ;_(SPc)eZKlpKJ@rrdZK8_YHB7Z1RM)!=x4pMh#{ z>z0@aK6oIrh6V#x&#`fI+}1m>@9R;603PG{vLG#9u#*X8*`Om zHgJ7m^nQ9HzHvH}v$Yeg&9Q=uLo%{4H%dax{CP_-u zQNrg|z{R75rJeyGv;Q69-}zjd=S?T_I8`hLQ9zw;#2^$;6J|sBT#?elV>{+^P2!9~ z^Elkvwtutxk@6gI=76$Nl7B7+{N$sn`h>c`;MV<{{h>h%1iS1grTT~mwe@LpTF~c} z?;keae4byNJG|(6yMi0U2E#jd*$oH64@M@ClNFfin zn;sm{(0~=E_Rb&=z6?MF@L25hXlj5ZPLrAR+YHmlr4IHpw|h$T&z%W` z^!00OshEl7ttrN)yjVAuAe(cxxiF*`x;x~LcMU*KX%zdEuH2^G{3Z=!!>B#Dss~)R zip=Yb*@?k7pd*uHp|k^&@-1s&>mOF*$-bzk-CTxfUiZcBTlAxgzsA2$$R%Ie%u|4q6So z77+R#8GNf?uIKi=iK8b^klZwy+Vuz#t}EQKmgh8m6?!v^I_ z8!r@GgV5CmAr2^Z=odf;>?hklV7WFXf2u-`#R$mludeXl7_1Bf$|h6pA(@eLw*?H$ z-N}nf15#LZFZKE+B8^KB@~ve}TM#Jh^h~UpN8{WCHZf#{AP|QHdm;uF6R7Za1TX}- z-F*S4RTJP8d=SKN%0M2otazx}w08>o(G*;sSFY94^l26fc{&49x(`+3WWkRG;N&*l zRm3Cu&b3$RTjM{Z_lB>~du}Ea8MZK<7*=QKO_CPocaK(ALV9hqMSpzwetLQTLv%#X zQrhhsppr&t?m@!<#Vlo~ZGa7$V^KF6>eN*)DBZi~0TJ#-subriHt#>^`(=i6ILi6_ z12k@IM*JBdBL^_z>pv;@^TX$eg#`9pKMVYAV4jO(**6P^g+U;|WnpO zkjHuI1`)sR#MW3(u1oorrCxX#btkE+^L5gw^SDy&tbq}3UC6i0C#GrustY#i#4rOs zx*wr~V)+S-C!==z@9XV~q~QQ8sO1dr-sAos%);RdU~xgNEGq$K6&*wf=rCVe;(YjI zcbC&~NXsQh$Ktra={Rq$FaeASED9iYk(;jW@x|XC4^8k%>p)YSkPoq=HPreR*JZ1A)z!32wD7o0hnb%0SHG4tF z)IRFLwd+x-cGES%ZxEZ@xi4?o2WCPMojx<-dZfb@-gxRK>OXd3C)f-G2&f6^h-6su zAV1Db2|XS>>GMDavGFMC9a?(VyBNGi_wGs29mVrGAjIHv@hiSEI3SpfrqePQAhP7n z{&6lJHZyr8(Zw-hB@IT??MQ%nu$^!K#!~@22*}4H`3_A1}(q%F8OYwQf~DzO^zW_zGJX5z z8=O|W_n+@tFWTaUT{605VBC3bO;q;b(ll09d5`0A@(})mG+M&_L{ypAAs35E6HVOI2bo z8cc;6pi(q4VXhd##fVNLwHG_M(X)@Aw3Khb-a7V=$_^yqZviUt2B5 zUxNifNp~4HtXxCu3#R|%%TQhFdd?6thC@lWDFZ+-!U`Gp;kLLC@c#&AQcDo_gFuHM z$;1D$!h%kMy@vwT`m(m&!%RgA<+f5pLicQ57R z+CRvcU2JZI9GG$J2+EqK!ru_6aRZx>bD7gmt^Y3lr_cOP)bYkLoz;Ncl&yet6ggRk zZ2_NvT@^&WJwd>ByybM8jzlxHxFF00Yz*)JU?<`F8_p>{Bb;|(sb*ih9)l;+W_S)5 z4KvYH7%B@(4A|hg03d)Jer8}Yj|r?z5ALfiBCx1|kK!2@5;)gWWJn0) zW_yI1O{%VFA$J&0MAeYgtO0Hb)f-=HkMo@u37r4)MlI+Xgr1TOX||~W5_ZfsUm^ez z(rl?=LU2n!@C5_H7Yv}p!UO{>U_p>6kM4_F4zg|Z5Y?Jh=a_X~_%XMnuQJMQw%jRl5JZmgCHwo*=gv1t3;WHCzK9?)@eG7cc%R^5PK#BT|maD1=oJ2Ydu=1ZHIt z`gf$SaJD+3DxIBpw2!hT|Z0hD^)4-PY~*#S&8*CYO{_RR0LO{h9gL?SjZuZeRp zZ=nDO`51Gz=t6zq9wi+Y%&8SMg$I!Zls1PQpQ-_P>b#veDZ7BG;dp(^n8*P;&uubN zWQ-aNsc1pK>+K3{$!J9J(Q!GFfv+-lP)L~BfU#gaL!doFD8gFDY>aw<(*os^dVyF0 zB8BPxzNBJoZW~|7$?o2zV?W|#AO@8VR)uM9McCPS9T zK1Y8=|NiR#Vi-xv=i+#nl_s4VYa!jf8P(EK%t*}7xKGrAlA^;~&kG@nz%Da6?MtdfS~1SIa*Hz?Y~#;0KR`NFeZes6#y zRBvFXI?f9B;j&*^l-dz)*nfZv18Y zkLqsM)L=1g^J$YQ6^$BF(|x)QJ9>Z-I4W^tT z#RNmr!HpZtXaE}c-?Ne_2oI#DbI42pEC|mX-o48}<5}SHxkFs~gz&lmrpq|Dj1^-= zUanSiYu5r}&B|G&sIfWypZ!YADjO?)1h^!T)ixKgGhspaJMKd&2x%b+){>e-%1EWX zD$z!^a$frEj)@oK*y$_^@0AY^i!Lkp#Sy$kCZ({kZVJb z;DPl_#x%BW?t!fhb+beosM(=GdXdn3wX>UWDhv2gj0G_PZ3F{2Af95koZ!wW;s5rbmm*JIpV0fF*B$kt;Ar9q>t8 zKt?lZ?tnZOfLw4IwSZQsUU0X`2|Il)PPl>_kLT`mn5p2~hjHGh^CZW|5^OO+)%?z# z;r7dfFBk&f^gxE#L6wCxo@Z@dI?GG!w!lIL1op|46?55m!t4m@IMkn#o3!14!@1QF?ojTL#Zd8b%}Y=;bg*NAX3{$1c2&VX?ezyZt<@} z!|(ED$aNl(W@lEU5ZD@#&&(9Z0!DOnJS~|h&OOp_c>JL6l_@$rr`Pky8o={80LZ%Q z1S~GXpq`prx_ygXM|`gl7}Zqv@-EqxY;-LKBveVWo0dF^69AWS<9?#LGlE+~%32sx z?v!{+*5o^Npk^ad(L$@PYeQFT%PrG^JR9S4oPhGN1;Q#Lf%8xGzA!5cLNvaFBFgTJ{}X%8WS8HgbBT!^~tz z8=?q61*>@kIPDoikj3g60t5gM?n975nn!^O!5XO@0F}zH5y&6uv&3Adb1Dvt78@Gf zHp6}TTg#v3W5Y)Ubs6_Hb%haW9}a>q7zBbjfJs3YsXH7mKnc&mc>>F1;fB4{PkTW> zv-WFjXo`Lzo=*h7LT+RgXYPXM4*6C+C)^E8D1k@>b*yg43=<3#=N~L>b6o@z*k^zW z00sL5HWrz`Yf6p9HWn;(!(%zk+z~e0B*f)vJ*eggxm&NlK;5uYPrnt_tf|ws&=2SW z%SnY3^Fv#&aWw#X;iOb=aP2zvA=hKHpmxtuzrm1drl!90AUXrnxdx#tw&|=O07iFt z#e&h8T@QMO5e>GssK2?vpaD?AeG9j5OE@;q1#6lb28B`G05CiTV1_yo`iDjj9*Aj_ zVN2tk9j+m9I`8P%JZ^F+&xxxFLn;ews26o4b>(CvJi`t(U4vQ>*a0NJYKenDh@TPg zR1t?17WzvN5Q9L{VYt8PU&nQvbKnU;9;!s2WMb`E(|Iygbap~076?BWeG)TPnK2+3 zBS0fyW8V;{vEPtojgz zRQRqhCL}-?bB6Ni{GypL1J)z1oUcuyjO&`?cxmB_%zjj1hJ8VhRsh;N5ZfVu4HyQF z56zkY9N*T5PzTdAo-&Hlw(sly0lhVP-msfcOiaynG=O{^0i7ZPIELBysdef$`vW${ zwm#;Z@j0kIGht++R7B4c7@an#vJk{d@Rj{w-x);B=Z93I-VY|r%;uEOgWo3?E1&du zNWuDADGI5v)}p8Z|2#`19nSZJx5&o%!~%@=_#`bEU^n)=;6*Ljvy(E(t_Uu0>r3IB z)SGt#eS2ctXAXAhi^uy!i!0_db+19?-1(cF^8I~$!^m4*!E%m@?Hx&_0hk7TEP1UD z4Oh&mc;#zU42R^KRkydiRC|7Lctk~9dE0tsb?%{A&wy8Z`=&!(QzM}T8Cet-%_P35&BQ7LwsHGtX#gk%Mj9abkWER^{r9ofnmjPcs0%zxNs~1!Do9UcexV zKn%daaY4$A=35*qfE8&)9EYSOg%N=viGu{OXalU|ENjJ=wqB!u{)GeT7?zEFI}SS3 zLrg+1k>^<-Ie5?&Tm!=my*NnErQ<2@k1#Mvk>XrJP@uIs><_@D(-G-B_8S0-ZD5;O zaeiEb^T0nNv-It9#ymV3k15|HTDo=fM3$qC3q{L9=mJ%A3J4ihs^~6N?%7Qdg3Dr> z07T6?54C%d`i;MHImkZ&Y_3HJSA9cWXLS|JJ8l4E;Mv@e>^u}bFft7zDyGwNf+|^w zbq>$Cy?uTT_skrKTCThrVIKo|D(XmTC1Z_F%eP-y=J%kB1|i>@v4C-dfbUg-K@-%R zinI$KqkP!t8 z9bPw&0lBp#9S6}=%el{Epi+tyI1j#dNO)SZaj40_A$xt@fWbh<7NbFNeN|@R7?5EZ z_R zF1U_5P4IEwBWgI z^Lq|qf%$uJWSGy+j-=agLy8W*W3ccsfP+8|M&vW_^eG23!np8mr%J~)r$?LDFD@8_ za<|*wrcrcWkNzEbd9VldE8{?F7~vS_D-+yZv%N5|hY79HO;_5JiAc4dxg|mdwfT|O zD{*{A5XWQG!TIgQ-T5Q1H3F~E9s>;aQ2`YyGccXE?#6uFTDJmFO)O9;fUepen|1>3 zomyL29hhtHNUj_17vhPn9*qr~%kosZ8hLPD!Z*)OaZO<>Wh>L`Yr@X-bD2!UV=lFp zJ=qDv3^^SdK3Ygi(2l?k;NByCR!{tEkvXIzw&^$R;n9@b)IJ6PG_c?9vBRFI0V>VL z)STK)uiexf{~k8-c&#;0yHg2WH>+N~&Aq@gN#GZ7L-53al|v@lLBXxb+m1rz<|VPBn_!%|58lo z#pmNoOA33xK$`6t=8oo315|+ls6kJfWMSf=`wSL@pUWm*r1p^RU4aMvA}9o2KC0W>l4F_ZlfR{C_~RP73bt&9t0m*g~p%)VUZ_lAExBXznNn z*UBNij^0JSPJ#Bc4uFAYaisWIR*pg(3Xkgt&j zKy}w<7wv`vv(zK}(loQ#0D02pd)_I*-~K%-YE8Gb^07vtz$=3`*o`)QVnaixdg?(P zhz-X%vEFcJku>XuV{B8+F|$cCo{kzs-LkvUvm>|1CPsSJ*c40&lI^JhrHLoXH@qe? z#(Lh_)6O;(<5*-3C2Bua#Odew7{6q86#Dthq#`!Y=|s|O3M&;Do1*rEwA_&_Y>Lt7%A5TSBcv`-H%Nj`uSz=mU_nuSVs)>?|Eh5ESQu!VbdoT3JFAwl_eY0ZQ9z35AR& zSO2@zGSs}`Q-@L3dy_uB5Qzug!h$e1I1Rw>j_X_|XmeAjZNiNl8MY3U!|~$pCk6NB z_=<{MnjmZdwxVPV5>q&129YUabd6=MuG=21OluR>d{Y3oNbL$a zS3T`fRVSKIeH@Uc{oK*tZCN(YweEJiU7MEP*V~m#!+9dJUR)?gX|ieQ?k*J=!GJoE zFN(JO{_6BAYC-^2950SfYdalVKhd|u{VGc6oT4aes^)Zi&AdPO zxt~ctPzsMYUkpug3=!X-oBIQ9&_$mh`ii_HEvKVmpSeC|4NI{ozX2pdtA-Be_679A&9apsA-XA*mr8GMV+#%Lh6H92 zI)?XHfvcn&0)WQ_q$eq|*cl*|ej%4>;rJpuSL$x~A_s16?6k_V*n%b4jiwW!d<$$3 zkt>B(0DYL^eqMO=%HcZmISjJHq}6c{O5Wdm4yY3aW>DOo;!A>}2I@8_ z{{dtmx8CZCJp1TKKKOp0SrJlo3^lfZ0X zxX(AJ#?)eGI2NlKtiU1JMgWIE0YOiT^=R}&fKw$|r&Ben0=Tqc^=(i1VXz)Ac zK!NQ=4Mrl4=8yI{VCpbVaR>fyc+JMJIvz)ERf-umK+A`437oYHI=K;5AET+X!~qg= z(r#|)#&ZBhF(qqYOXxhdtQUpU?vUWh=t63--@e{1IT2b|pyJ?w3aHv3rCwTKZ~^<_ z4|Z*}EMEKTYclfr@SyCeK?Fd0E{F3rnAG0htndJUhBVzp_X3@Z@l<2HHHD@BH)|(I zUm~4@)ih7o45*yiDXa0q4n(U8;&>f3JY{ERTlklBmiGjX&#zfSxaupY<8+w!-E@my zOP-@=v)7qTtaT(6hX4;25(GtA)K{sq&O&NV80Dq4@6lPEwSMod7b*3HL4-D)3x=lbCB<(@YiuJYpmC%1NqkyfrOVe%reu*M@H#1QnWY#6PVY zf#E&s77cplz0pUOHKMs%C^@M%hm~d*4?=Mx&MVW28>B>M4vnbpG3NrAJ7Y+Jt!Dvg zY*Tgmx0ou~cbV1;sXjY`s47U+u5GFcR~J&>xZcjO%mJeTh@d8f-yt+W;5Gk4cmTG; z={X1z03r}E3`gAa0|7&!#-m_4a8~FU=5!o$Gpan+j%R>+?h-5F=3PsWW@l8KE|2x9 z5#9)9n75;>i09H6a6yqA3NkcCf;}L(MNS<=n>!IOb@1EUyTldMABz(_h!e6J(2@n( zz+3~LJp2g#+lzn2>|uEc!4v@N*-UGND6W&hJSEs!+y|##z>g6qrMDT7$VnLT4Ysr`jV{0oH(C3zq_>|)d#pP3eBuplR>GPPWz35 zMixzl4ykj0*(c;qPW7EUq1TevdtzI+oVi;#xP48=%5&kh76iq*u zfJ=`0u0h`P>^BOt>&gkxlOH#47Ccd38dr{h+MmvxBarP zpA8SOvvY2mDlG)d$PefbhA+`iEPaAj!o9K%q-wx&oOq+>M}Gz*a*aXHy8WNu_#hp| zUA}0-C}IYbu_FS>_-}mY3;B#<*iIpZjGB;bXytw{1O5j`a^BT`2m3J^i_`hWx_o9V z9*KknC0v_BT~4I-4?EMz-7pS?_q7m(8$b@KM3~n$Q*%vLT3_ot@h^{Cvr%T$MlxcD zHBke2f<`oIrt&6@l%LC(rf$>-sqT*LwS>6lIMyczLi(X4)AHhcM{Jp>vA90twu9Lo z5Y8*-oE#Su(k$n+8&YuWdN7`{yES@%@LK8DzDC8t5rrRkpNJ4x6&G@m0^vCR!#`*C z8UsGqSKSY7vDwc=l_EDDY&&o>1(f>ODu*giGmwjTz|^G{u)IueY<)8 zJ<8s?%RtDcvjDB`B~!?`{$0LhM%r-Oh_;!SO<3W9$Fk)?KPV-?B4rL3gpiT~D8cGS z?Rp+{hR~_R&Zd6c@f0$F)njJCDlPPZIRJ&n!I|D%J@hYke}ev_oBy)(Q$yfZ;Q=$8 zIqJ5+KY!rdo($+;fAzx^dsMt<)`Cs~o{P>0P+d&W#DL<2 z=egQ|gz6Jj^G2%9jb3hDsTS43MsBbPM6O8TiH~yV9gXO(!Tq@grceJC563(%dvNmx z&nyAmCp%~^nT%<=zfX(L+@^!q-=gl?D)lzj`3nI6hzt--P2gYL+>q(0hV|U}+AFmG z$}9BVZ~Gt(4M4p0@@M#YEAM>|t$p+R=#Bxdz5$cu!8Y~tHQM{jubJCd>4hKuw`4Nv zSH31~(_i~K^^XqO!ag>)qd)!}4c_%UE!@6E$M^2h`q#ff+kf(>H2$kMX!ZT?<>&JA zU;6G#%#6&69KAd^x6Tkg-w!MU%9!E6F(Bg6(K6~A0S;h<^cyCNYVc;K=}hMB0F0hQ zrW#W0Bu`7V7XT;<#o2-D5=D!Nsm(I{@#x#=Q^W71kM=)jr=k+?H;zG4Z|xELys9|7 z`#=8t$7z&`&5j?M1<=y6VK^QGP+@CX+}8vK#4g|#@XRqpwsAE#-v#U^l!#!WV5CRK zQg_1w0HZa+U^b=Lr0P1R{H$rj*0rMfZcWVhAu z-F}~o#mC3T=F8Wmz#5u`!y!v?F=J)W6SoaKE{tQE{?X@YFc?tZ+`qEDO@5rw;M4yv zn?Q9I4TH(e7v;4#Y4jIgrSRy8vTwXj%Wz6~^$mL7JZJ6ZEn0v5F2CmP?k;U?Y|zcs zb^7X;zHC;N9a=UwtO9r5c#ER_Lwf&llRl`PbrnGEK}|UUT~i~>iEE*B$MA@rh9R3AUJMndW|6fr2LN83_wNYAlCE_!&T%2S8cLB5$0 zhoku!Sde#d!yKBRfKZDs>(Hjs+{bt=;Ny;DP(L}}VLSc_1Sfa@-gM4Zwi8f&0MWHF z;BDSsfBkiO?X}lrC1`@k&;ZP6C8(ppju|JBB??3_#+()Bqvg7yFXf;KyKSB0+q?$~i932mXmnf*S|(ygnVXDD3?O zE3I%^z!12%#sp}9k2(iHo(&M%+z8oEj$NpudLwF{zdbEe>@J<9HJctaWj(7y^EeOb zAK&>!y6Zn*%E@(Zkg^FdzlZIs`K7OXJN@!2-%_Ru!)}KLo13+96LPK`rJ_x}M^fELPd;h60KxbWHD-X2{uj0wO7;Imq4<`}RZ00r9t@ICOr19mw85cYfV z;zj!%KD&JRvRx0y0I&j(1*e?ZSRKOzR(*%W1Q@G5!y=)6fY=JyP-@eZ>%;^YI|TD< zm4vWyY3b9hRT=0-{G48z>&Wx){c?l;yXXHV{q*@?q_56DZP|m21-%duP0NV>=TCnl zz5mHKQ6P-%mU&L1IBNGFtmr%%)>1w87=pT+9*zaFJPamTRN5}ENC068pIY0mv~E${ zpO@k>+%P~2K(+C)AZREBKU0w8!FP*eGDuG$Y~SN0G3!5 z%7BLqbMt&xReN&+HCfm;zunF8^jHuM@9{T41A|?7SQqQzJ&ZEI3!nrL!F%in>oU;cJ8Z*dT0!o|{L73A z+gR9MJB4Lacn?DY-~wQRaq;WE`|i6puXWI+{KRd*tB$m`bxCnd1a3EOaeWg~J$W4q znmAC(T;Cv8MgTZ*U!A6IsHlZdliQrnt%@%&fR@L|`E=qCuKjn*(Axcc_}16c?|tch z`mPHfr|-G{)5ZcFoj8F1*zP6zr6=A>pWb~FWmR1^Vu8k(lbM-V#ZYe7I(>MisdlT$ zTANCoH+V*2)1OPadM&f<)xks&+qvZ0HbBSjhG9N8&F8G=$JvRj=8cx$cWOk2>Ez}& z5_gJ^+TK-jcoOb?*($d4sRy7~HNlrLR}D~g_O5ZcNnu21{@3k4gdjz<3xC2T`(>H30Ml&hwBXA0l2U%w!!ZKGypj4W78!V zNH&Jg@b?$K@CCc=OHRxY;KcEzIF9ehYpLTKIMz;x*ma>rqdI`gm8+Qr9J~M`Fm7=5 z0DRC68;J^~Q_V)af;*^&K^>Q1(q&sH+(FqM+ZQRU!`rqwpDXO~vA^~?a`h}o-!J;h zA;xrg6w=Q>@pbfbk3T|Rv;9SSphCCzigtd~>z(*7Cx%+1U6 z$>(1~Uq0Na?|Yba;vJ)NXDKnPy7ZJ;NG-g`we`lWKt^2Q>WKKeaFp2NN4y6ai`7vb zgJTUm>w0tdapK%_NIrNmS#U#RcJVxA=C_BKkXF*hc^{?Ad)=hy_>Kl38J3|F5D^(i zN|dWk$Do>@UhJVua>p$9%?P&!qEi}?XtKt!Ag~vX+2CKqbvVYuj0b-MNB}kymqCZm z@i)K*+klG>z`@(a-vAG|;uz4dEI5Pbcw! z{A$|FEKs=12Ge#{JrgzVG<=U#ZI-XW>>R*@SWw|oo8i8~Y#i&tg%^e|T}+2NsIp{F z;8~`7?ykXI)iNm(u?)E85@TQsGf~NI-l9)DciFy%;x;@%strgTJX+>;90aWnrWY^S znjj58x=`4j;R|9@*!S1fMDx!YP0x4 z%!2CxECU082*AKuaFVrHKeht}UbmhxP8ydQXSZP+*ydADJ!QWG05O1pA%RH&{19_O z90-|q_>A3x$j}22ai-qsP4%iK_+87{gq^}pj*D1D8^Io6&%-jLAAkI3C_6l&!)Knk z%~(r4X~<7lCla~)R22TKwnY(pSrE<(Y{n{N$B}K!$Hp*hR1X5Hpur#jKrRK~hC&~% z*|wR4OwXS;ATp-q?oC^_<^v#`;bvnm3Si8HW_)IcCTGu4XbVsKJ)DjkxfB27_6~)) zAD=k<8v5h(tu)`;r=zRatcWP>-?H&LWYCQQ?i^dtc(y@_c?OXkKSGOeD2M~lP`?u= zW)hK5YOYHRnW`$I$b6Pe#xzIE5@-M#;6w{=tI}Wqr${qfd$%;tdWbrp>C(I()&8Vo z?enlp^ppT77NHiIfS?s~WDIAhld4Wq;E_>xP89jbOsp7?PDF^PpZ$Ow^2r(sPH&X1 zj)>V2r$hrx@GoLN01^DntcKI5@i#9cU3p+ZoWOu}nMolzg7*cGVOEB}u?>LFgAYDv z*OjT@*d7ufB!fGZUz;<;jR6fh`kw8t!`7ix?JtbGbe2==wmQg0#~Kw09$`^4gQ7gy z`6D@il^Y~0If)^|I(02m*Z~Ubz71=EO?IR5^V7E<)MF{w_{13TjWcIxX_$1ne@NNl z$TEP+fex!g|&F+A2+RJgY3)i9-{ws;XuyN5O~| z28@ml_9#zd8Utj~y5&4tLR`3Xfy#72w{GrJvWRKZuqCL#?`IXAIloCuGojeMzHg1$ z&h{4N2B^w|f&#P}pH67&vN=~{BM+}#qs?f`0O+<&Kv?b_HFkBpb-vDw12co+f znhUO%Yw>kj^Lkms6Olh%Th{%^whW1K<5dF>lTJjCY1x$qAsRq2{TVZ*Yv%RP8VXKn zX72ze5Pp9E0H<{WKp1p*8FtyR5n^M-bwha1V8qMe#kD~IH*AmVmyo&l`q#hSy52ZG z1-BlyhtF)0>~v~b5K_8N+vgB?06cNv$Z?U-0T9{=Kx^7o)ZfM|HE<2gm~9NjWF#oE zfwpxe<`@bGMmUDdO$b&M+G1Zp*}BqDvm)J7_4=-$6(FR1b?bq?!bOL_XWKi5 zb!^z;)zY?gchXX5QISM6uIiZN=5$6!=9xiUsgV<6{14p!imG$|GAX2Si6U-R)u0T9 z69}eZYr4QraE-29soOjl0E&@ChfKfiGqibdNYyBzMLec)4!84^u3fuHvr$Yt7cWo& z)_>!M&A06f*1yB>HshWFD?^;F z`>s%SUbkt8JgkR5F9oRhIxs|vMU`T`-V8{Ckfv3Bv+__R3|b6+K+@PbG4E3P_H zL}gWWrkTt%WbB1o5b$S}+eQ#LyVJB^aPgtQW#?HJU!4(#WP(u0@U(8^`g4A!Dgi3J z$yV921P1u}ZAlXVoMABl1PsI3>tfb2r^Gye1wVo`cq#q0B~-JlKQFC+}42<=n(bAPg$}@Hn%I4%dZfi7ixwSdnSz#A+LpPpo%T?#jyOx~#EF}lAe<{5z;P0bu#hgIittHPRf z;g}eZIfKf_pO^QM-#j;T*g!T8QMG~01)&dGV58R zHkn$$JCmno`H9`fq$+3`POUME0R|hJ)_QIf8O@`a4Fp;sD~ryg0*t5@DIL2c5OcgJ z8c+POK%1=Mn4*0C>RPC>=_eG0r>2EjsvwqhyM=;uWa{sN+MYl%Op{RCq)yhIW`Y&z zpTrf#!q41mD(JdL3dZaB_t z<8*ASkIzv%#Oc}`(?MMkgA*6FA})k=a7+wv{2trH^1(gQ3(C$wi!O6`AssGjjk3@R zRN@r}A)QnK%(}M1E{Lt3uKK@6e;V#l<6Ebq>clle#^!}0*m*p%lN0P9HOo|H85#ib zAQ%>PRcIMs zgoygm3xOx-^da*?g!;@HE?&C04?pNE)q@`?fPv#S5>OZzxWWo5w zP^K~h1GhhB7C}`%Z@7l2r3oCmSHi?`%&1OnuPDk3>vF4tpaFsmt}?eAG8~a39~y8@ z4e;a+jF#pV@pEqe-7J=N8;4QdGCa3(I{|H4#uU;b8Jo{yN>UxZaM!+E4H`J7q5EOI z3oa>vTZf!dRA@x4Mrc9(tZ3Pyf#W$N;clx2;!Et}8@X*{)E2|~|ZC-D8~PW}h7Mw~Y1hvMkxdsoN|p$_9m571sf=L6RVZ z?*MXGk7Gx%%lrWl!QIBG-@Gp3LjXSBFN>MtUruhw?y=6RAR#t=TFqvyag9#if}2H8 zZ#TFs<1K^C#2nwoctWEnUdgZmXOKgcg{GH@gRng>E0Gg4v7FFm&(&%Lt9k?l1F8(6 ztC0cAJiv43;*CMaH@Op7(B6m35=&252D%-T4QO9)-ua`45M-^r8;5v zOP|)bSIr zosDu?HF2sg5SQNTD&3w{Q?y!ACF~#0DFYLC`^wBVmS9&^-4qWlw#fY*yFNs@E9gCn z5({7(2Ds{6TDKk8((QOJh^k}Vvbl1}ozloeoJWRanDK`|u^>`$o|O6x?ur4{Wp`4#m1N~CGbFBTmDCId^E2k3UpKFJui@j)3@`{zokqba zCkwCw0kajITFtQ^&SnEpuv89SUDlX2TS`Xg@zdA}`WL z+*7*T009Ub^mFxh)Cc)e3haPl7OE zkVc)4rR<%P0UPiibDu|GYnc3CS+fXO4nXG!t~+Da5D!8uC_>RSVnqg&Pz<|au6OBx z3T`|A8I~<Q!l4C(Y)5T_aE-uQ}6 zd5?p-Wkaa4533Ux5d_%Jpi2Km7U=38GmR&W0xvU?(mnDyX%rI%X6FD)#JBjmjN`<* zFIlrsA>09AafVEL%0Z{2KvBjIz78DjD ziKATM`l>U{

OWXEY^pH*tYw;_hd$b0qGzTro52>pV++Y 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≤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 Q2LJ#707*qoM6N<$f`zCruK)l5 diff --git a/res/drawable-sw720dp-hdpi/workspace_bg.9.png b/res/drawable-sw720dp-hdpi/workspace_bg.9.png index 5bbfa4fff6bb6a864d6b897417d5a6fd66b8b86f..ff751866bd1b1735d95bfecced92296bb84e087a 100644 GIT binary patch delta 142 zcmV;90CE4~0iOYo8Gi%-007}+U}yjU0A@)1 zu5+RWus{GK%b@|HWkLUzKgf@{-j#f_zEXeCKgd(?uw=tSsVq-sdY-2z=uH7Ln}_aA wnEfMK?ZPV^%#4A*$=>Sz3A~aIT^mR%PAz_1YXx%g00000Ne4wvM6N<$g5(lCdH?_b delta 209 zcmbQw_=s_WWIY=L1A}+&ipM~TrP#?cgaZg_I8r)*e9i)o$YKTt?oJS9G(UNIEl{w< z)5S5wqx0@`L%stFJk0C&?9pGpyQCu|Fp!DmMA}VD9YwYYEDC4lG+a_0hqNB{r; delta 196 zcmbQuc$IO2WIY=L14F|3Ux$GdORhxWLNknEi9gJGIZtmT0Oda5|)vGI;e19N2!Kt@4QF zN=I4g7e|t{(;unl9%HjoTz^FQ#jMP-uAoLuaob}&2fo$4INx*eW5P!z-$S$JR;-zK ub9b3>nv)vuO{e?6pB)qvE`K`z7`GXF+W*;!2d@F$z~JfX=d#Wzp$Pz&15M5V diff --git a/res/drawable-sw720dp-xhdpi/workspace_bg.9.png b/res/drawable-sw720dp-xhdpi/workspace_bg.9.png index 72269f207a5af6e545efb099fa67ddc343be1ff5..0b80cbf34a033095b84e9a549747ba9f3f544f42 100644 GIT binary patch delta 163 zcmV;U09^n70ki>-8Gi%-004|^vt|GQ0DDP9K~#7F#gv5#z(5Q`)BEtrhfk5Y1nxnx zlBBPlUXe6OYw0x|lul(gjTTTbfX^jl6;np4GoSPCo!?I1AFv(BfKJ;?P!$J~gZnK$ zFns{=IV?`fFM(vf83s_HAe`^yvz*QXY(Vzqb2**z?}3@=n;ZZKDDaeO6*DlEfh0M$ Rk9hz9002ovPDHLkV1nR4MC^;;mtQtadz!T|&|94Q?@K4*bPWHAE+cP9ulnx8zq7AUyT z)5S3)qV?&F(|ku1c$k;h{H&|oJl$5|tKv4#tXW0fIsJ?my$y{S7Dvk;xRr0vaP9Q& z!y9!46#~D!xH0e2%pr|_~ mx4f)Y3r@=AX83#lsQ%gNjtPfNtcrlHW$<+Mb6Mw<&;$Tfm0|b* diff --git a/res/drawable-sw720dp-xxhdpi/workspace_bg.9.png b/res/drawable-sw720dp-xxhdpi/workspace_bg.9.png index efc9b0465881383de73faf2cc77fab87eaa9c00f..0d180c20b87b851b2e927fb80f512a099541c597 100644 GIT binary patch delta 157 zcmV;O0Al~<2(AH;8Gi%-002NgH6j220Ch=3K~#7F?Ue-%fIticxBQHk^R$yF?#&d5 z+|_0mr;(JTy0uDmlQiAZAlttsKOn^uOAH>k2Z-^&3vAzXR{$}r7as@2fWMj(4mhOU zljeCw=6=nL!OhRX-Y~Ks2YP_f+kyW$d4TK1f9?4Z_D^!1>lS1g;cG~=l-s~j00000 LNkvXXu0mjfJ1RyV literal 1126 zcmbVLPiPcZ7@tIFW5o92K~qbH3Fg$@d2eQSW@p%K*qzyl3vP^?#l|$0OlIC@hh*lB zGjF?-&_j$MRgw18(t~&q6hTBqPaZtwpb)4hOG-&86hu=>BT)?X}PCK&iaV2pb$3#i@ry# zuMMWXd$&*=NV8E72M&D{b4JHj!$lq`={b)6N!pIB8dA|Pw2Y?90+2EgW@Kn&iUqlt zkpxLe=i40HVMS_JWYm=hvThbX$AdhZLKv!e!pWmO; zwfdo?=d023>QBFQ&x0=Gw*2H}@BLR7&n`SL%DFpTSFHOFi+atbBXZT}s~|{XL88&Yz3>ztMgj zT$OHp+}Zf|ueyC?{g1JZ|91F&%f~)CFzmtV)5Un&mi*9sF0ZvZedaV-D< diff --git a/res/drawable-xhdpi/cling_bg.9.png b/res/drawable-xhdpi/cling_bg.9.png index 4db356f258de1fa5a61f97358c124d920f71468a..7d8b1f0d3abff8bb63daac4f7baf09534c0f02fa 100644 GIT binary patch delta 1426 zcmV;D1#SAJ4xINkl=u{LK% zYkS99+seL8Pdnda{`rIdR=MZQJZ+Mu7w>b=`L4eI!eKQF=~H^$wK6)6lIrj?iOaxk zi{c`gLPn~>cM}is5kCo%kR?ix1SBV~-kPM6P10+J?B!5YAg*-qp^2j0Cl2KeT z3y2U`yF?fr;3i(gqe0wzO9>WCy#h;T+=qozhhg5N5tuc8G-i$)gBjz-radzari{7| zH(h-RvJ$-jl#l|FB{F>N5@C!WFYYXN*Dgf&a*HB1MrUi=|P`V|0b zNIz0UV#Y{nZc9R#5*js3M-n~~3ALm@Dei~_ze-5Cgnt3DF2sp1?IfrKm2hPmOHc`l zN>B-kN>B-kN>B-kN>B-k0}0JtK!Qq8bR4M!MJ1>NMJ1>NMJ1>NMJ1>NMJ1>NMJ1?& z^hDnVsS=F+2@M*i16D2ipk4bD?04!c7{L?!MFZ_5b+aEw!hWYt+k4h#jw{EehF5jZ zTE}5-KYwBD{d3@US4kI?8hh5-BSA(|kFp3F=HA2;d;^=Ce$#N<#ox^9Yb=?u4Sjl? zBbx@xNNz{A(aK1YP2|10M=*1IHAmAVE;O64a^Y5fy$wzCcB1hJb9cd--B`QyWnQSi z&d4w~)P04eGatgDX@?o;K`fiK5B0P6pkdB#i+}6769Rv4H6{+fAN_g_2GC8`fgBPg zeq(okdp47c2w5LUh{Q;ioM-_lBt;e!!{sW$ZP%Vp5f7hfA}HWXj2~KuWc(rk)nqW~ zL%PdYDYBqYC?NSHSF(zeuqnX03+zR>Eo4N*Y|MfugqXz4jJtQK|j1HJE ztbbkvRFMG^et~hggqRIc$tNUv`6NG=DZt4=Mob|-8~n$GdA%_%P?cC;clwLiQ2#Xr zG$5I{5I`mAXUy}M1nVb03%mxN)F16dWV8dN`+3%vhmM^MCux<^kN5gY1`3P>Io(AQdk^MFrB5sxv1e@<}+d`kgMNXG3uz!1+S@B0NV#3@zu}elAraDBx!bSc!P_0$TxQsR(x%<6A^L z?^whp5fF>EdMctV0V=`|cZ-N2PJcv52dqFWa)Aoy>;pQF=V(W4uoYn=U?fLSOgq4_ z2)X;(ei1T)ri@&LgbGOYQyi5XO)r=tYy~9aRszCK1gHqVk0ORwQN)YZB1FLS(JPUa zIKS1CaoH&ppdvWut7NhMx0Qe&FndA+ar6ivuNGSCJRD=&183B|JjN|T`x?|`a195ImDT0A~<1-AB zBuWCrlll>)BHYB=>Jv@E1|j1EBiyMIpk@Eg4+95pEzwHhyFW5cdiYveT3T9KT3T9K gTFq^sbg=#h&U;-dQU~rQ01E&B07*qoM6N<$g3-%xX#fBK delta 1815 zcmV+y2k7{t3#AT_BYyw{b3#c}2nYxWd;OrL7aE^dS%&5E2|X!2u*B4u~t_hQwdMUxCC0 z(UMB^Et-~!mKG2vBm@Xr+J-je(WDNgw1qTWa6JF^_tlYd=r)=u2k_BhNZjqF&? z+B@I=W@cyiH^%ck?gFn|{*U~h_kHzYHR!#DfMug)B^7Ih9<7+y4e^AVtC~$$t%{6R zzAAR)(XbRRRAiOsi*zirF;&s3((Us9IHBiYWGJFXzAP63xaCJdAOol_q4LO2uI=Ep zmmi{U(>6Mt4S%?z10if&;ox}|o{>;d0}Jj9SN{H!Z@#B zkFM+FowuH)H}x)#{T!Cn+pry3EqLA>uDHtee-5zs@G-94C;@Z8Y`KI*;KXb~MSuf1 zy!~c|jqBgTabCi*?r+Xsv^kd5fn)d5)AKZm2e0tU$bU7Y2SGEXnk2wK;$t_nSk|w5 z9@~Bf)9%-gW2flb@FG1u4*=aj7eSx8Sf6ncD*Jxyqg)G&gyvAQRWTAYz(~*lBS8a<1Pw3} zG{8vE0DmJv1B?U>FcLJtNYDTqa|2V$F_EAF=C&0LFp;1EMuG+y2^wG|Xn>KR0Y-ub z7zr9+BxrzAbbBm=C z7O9mu=$GsNPVwaS8+3JU0V|0`XQRLSD!@g`9FzGWj(znR6O&WG?Q&5mwacc^hLgu_ z9?x{~`m0-cIQ0UKvjr*r{ADQ}e=}b7?W|d|mF}+Rpbh1@?gWLY9}r?1+m_h2z_uio z<$qyW(Uu|j+Z9txOrGcKZ+_;t(Gq?H%;O6Pr_V~LEg`y$LO6@RBlJ8r4-2qx9E&$z zP4oP-@6z4%3hgAqb^qm$%Yz&|`Zc-23_&F>5M<^@iOc9$?{!0^qH~UGj;aw}n?Y@O zfxvRO_^*530>6*tS^vl|>mGUx#~G;eGk;ry>rQYfyQ?f<8owF2RW7smGSpGMbidV5KbUaaX#Z5*p4}Ws- z=$GX3CE^7{7YeCWJZed$rV&5tfD{(aB0FMW~(IlJ0%31 zRU(oDO%owRfzk0n_8mD9YJyrK09rd@8GCKYddw&m~AYTX% zL&Hr_(*!{4PnrS|=Pne;^qnD<*n(~M(+CklPBE7Kh`mE6$QMggo&~o=0JL5LEQ*jy z#A#B=t@k`4d;vSzGxT{`K+7XQp@Reni#U6sz`&+c^d`66vxpFKnz8Iob{{%UVMPXbg##DyaLn|>m72O@-=W^8;1yN5oHM1WQT zKu-w)QmRS6Q>5zXBcz<>^7u~n96C;+7&jZLjR4SH0)!|1PM0I1kAGSsq?~4Kd?$N` zjzva6w+OC`X(IsIK?0OTTr7}D|4b@TU4)d=j9=Noo}te|QxWRuk6z!^hW3yE;0hQX z$+NltG|9DFmxz$E$kpo~uzToJZsx*sLF#hkJdx#*b)kJEfG^_Qg&gS(-?O%74%>bJ z&nq#%aE8CGz0bbGCx7{8LUqDn0ktm9x14s!=8xX_VPjb~Pe0MkQ`=K?b=}Xemr4we z%yVm2o$W@i`Dz&figu6y)ql+-e1DW8e5*4F)5FVBiA)bl+41G9=}3lN30v339e002ovPDHLk FV1nhDPvrmr diff --git a/res/drawable-xhdpi/ic_all_apps_bg_hand.png b/res/drawable-xhdpi/ic_all_apps_bg_hand.png index 5dde7f34385da9944bab97c2307a456c644c1067..8a672451ddd1501bae9a742694ba3c0cbda2fa13 100644 GIT binary patch literal 16156 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 literal 40314 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

cjQYAs%02FJT?fqS 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 diff --git a/res/drawable-xhdpi/ic_all_apps_bg_icon_1.png b/res/drawable-xhdpi/ic_all_apps_bg_icon_1.png index f5bd32a18563beccdd3b4c2acd4a9cea3bbad220..c0ebaed5a5862635dc039c4208a73e06ea5ae81a 100644 GIT binary patch literal 3595 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 B#RC8U diff --git a/res/drawable-xhdpi/ic_all_apps_bg_icon_2.png b/res/drawable-xhdpi/ic_all_apps_bg_icon_2.png index fb0795662b9632babf4ab6951cc92724b3bb4a4f..71cf250ee7904835f49d0bb4151415c577cefa61 100644 GIT binary patch literal 3441 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 literal 5482 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 T5%>QLP{2U<9<=thbNv4RcxqhY diff --git a/res/drawable-xhdpi/ic_all_apps_bg_icon_3.png b/res/drawable-xhdpi/ic_all_apps_bg_icon_3.png index c7d687eb37915b6cd07e128ab6486ab6181ae7b8..3c69fc58b5a93768dcbbf73da51fda4493d63a9b 100644 GIT binary patch literal 4551 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 literal 8186 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 diff --git a/res/drawable-xhdpi/ic_all_apps_bg_icon_4.png b/res/drawable-xhdpi/ic_all_apps_bg_icon_4.png index e22b96299a54563f7af8d082025ebd0977eb3a2f..5f6ca38dbd96bf81790aa19151ef884bdb4a6423 100644 GIT binary patch literal 3299 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 literal 5680 zcmV-07SHL4P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x00(qQO+^Ra2pkF%6my}sg#Z8*4@pEpRCwC$T?>pOcYPi| za>)_Wo=S6~tx6CV!pZ9jhYkPg?8R^rE zXU6u-|C{gk`p^8wvYIgE^Ld32@XPXV1OEoZf$h9Kody0L_#kkLV_zq@?mC(K1ZJBz zwP30tkMq|8r+_k0xdPUJUf>DfqrlsMBXtPn?*@T@lT44$CQUWuv5|iu1Qi8NB1?7F zIk!y%-vvGa+#wgkZiEJF73z`Nz~mr~^S==?w)dgHvXEI2@@ltpTMGD3;4$Fc!0}qb z9RDA5m|c(1{Y*9LW8-EV~7@k^yO>7M}XV%cHY@t>C2fjKQ?9v z#98U|{3kGPxB40}yY&d=`f=cC;4gr?fg7*nN8vhrusXhMHftr5NrS6y8Xg|9DwT>K zuof1w-+?*R(EqSWJE$M!c1>TH7X2RZ^G+3#u=)9Ux{v_KygJjDNMy$M)1RKPUVZiS zO-oC;5h1YC6xgivWd(Qz_yX|$_4V~P#$vG}r%#{eMQlY92`htuE|W_67Zw(L3s5G} z(NiQ6@z2iASd)_zci<}A>Hz=OOsGOHGrPP{LDE(tk(k4Ie`|Sp`A@O_?ZEZeW-To( z`Et3OwYa!w(2-M5&si&%TMF<%5y1RWhx)&knOzW5!MWG^(O7PA@#{Z&`Q_m2j~=y> zR3!quj+{cFey9KYhMYvF`@g1u#6fvwsIAuQmY~K86!>uvX#s&}o_vxQ_+is^`4o-L z`JR6IDeLjaKNrLa^<2gN&o!t%5Li#8#T5{U$TXWyr{4rvShO$lPV^|7UU^B9~iy`6@}^TMh&-Bu`Nk6`qX8Vis~nCj6WqHhmTjBI=u-p0q|s zhmYf+(sBY_Z9-QO)MRY+DaxY4Ev&zj0S(}%FFbUAm`o-EEG5O`@!t{u*VUi}LdsA{ z#N$o^t13hq@lrSxvSy~Hd?XTt9v*otV8f;d*Vi}T{}vvVljv&mNdlQ#BzBUg(17M+ z$#|T}ePCjI+&VOW$kG{npHKYX^Pc~+0Yd7L=QO1Wn9g6uMNb8?C*yDk#8u`)?q>}Q z^xwF=ygVx>&=m>%ZeUW6yl*!GF9kHI)HmaEb0#-r3Gz_7pi-%%AAtXh-3|YzflJp0 zFtk7{pY1`QtwbjH^Yg!Ja>G+m zeSQ6Ux*(GqwzEz;F)>yxU}v+LFMHu)WQBdk9RYQ@-Bb z|Fd3r;Xi^f8-v|cz}`!N`ykI5(5%69-cIug^8FXKwybQc%WQPIxN7|HeO4qgdn?T6 zTHf=2mF1-+qrlYOK5(ZBlga;{ot?Gf(WpNKpV$^(n8{>JQ5MPQeb;yg?!LkDSxp6I zKPX95dOtgTfnY2er5amD9y@T0#bTgPC|HY&3!jw}==%JRU=^kj0-?egn9k!23Ly#~ z$!yt#(ARh3#0j&EtM12g@LjJ!Lb{OLlBl`i6D)QE0ko@?Y6XcC6XRAi8ubkik6Qix z1IN4s{u1_?1MV8sr0m@AH(Qx!zk265K}LpIm7a z9)Y`)sA^I(=0ZlHq2>&+&|2K97Ve_aQaM$O5 zS0ZvvmU*KSlvG(nl*(jZBh@RYR0EoAsQGSoH35FPA<8{@>2!u=Ge5xYquU+I^ZcJ1 zLPeb>?SQFe)LNT6ItW!2o<85#XYPQY8WB7;ra*j=T}PZhCh&Nt%!>;T60e=wsrB7o_I0=GNh#JU0M zqG(3%$~Wr&_-waS0Pcnfoy*$}^{`K_8=wRx@|Q-7a_9f}C5}GC2NHo3@`GOevprDr z`Te|OELK+&ZyjU-yHqN%0`u*fANJ5%s8Ie|2n@O=kOR5#4k_R@@O^VN()Q3gINSJL zLSVqH@1yGctbc;QU*F}&J+ziUj&J&N`9@8s!~Z=}BWn+>g}SL9<{KULkfw8MYs-J( z!UYTF^Itpy+X`*xllg=AKaQ}su&{6g2=s2?Z7-kWd4|IzP(G{2ZnzC~rb=7&AB zp1gJ77xM@Ae_jV}o1s>&Cx2<=Uv~*S3)dV%n0H{~%l{xh==s0)K->8%dB>Y@T>C$! z5vf#)y%2*nSB8i7DDcDiMhe(epGp_YZ@_$0e$exOt%tVp1>nv3M!S&I{~?(9Lr;C} zClD!IWO8!y20nVt-XK@x(eFWdrUMuFqWrMu|5^-ol;?7}BJWPiWHR5sc<~~ig!Z|9 zIti-tjgF354?g%H2|VK|uzdtVc?I5@pH8R$(hP=|$++`>c?nrXeK+UrH)~d5 z_n7>F=l|LOq-;eJ7>!0>>gnmRPMtc%+v(k@kFqV7%RV|#5cq=pxL1K`F?dToOy#x^ z__vWrgm1$!Z&7n=KD7h)XRy2=f8d$WHV_z##Y)rD(~?qyqTGqbu1sBo13Eo-H&dMAH7bZA00y3^M5S>gBBSxR7bZcfw&4xXsA-D z1UU*8-%03Nf$Qt*ekovoSN_cNe=Q=ADFX*Z;4+9TP=O%uOA`|l*5u@5u%Tz-*QnP)y*1oH?sNHp)5NG6T{LnQhkGk$0y;rOv8(rY@7;$nqNtsBlc@-T^6vN6QZ9_dLvM@#)OhMMw@C*sY3SuagO!> z#Poq?^BmzkqeI7}a;x(06q$;rwZ{0LKL5;I#aX{C>|K*S4 z4?P7o2}+oGuhRT{MSLEEmoicYelB94JDLAsyZ=D1XYKDlpNqw!m5q&!vgZq%14f?o zc_fi$l!}w`S()`utcw9h~tx|d9nz}&6QJLC8DUA84b#Z663 zRixv#Kmy?xKgB^LcoX%(*fRtUoCPWa1O26;p+Q7S33C8cBgxcpy!5~hyJ6c&Agz*{ zbJjuZXhKOmqfK4}^m{_0=>r6b@8%#%d^vIx2n;<;0)Zk(B#}_#5dM^ZWLFSYS51^^ zNF@%taXS&JI<^;8r|RW;=7W=ylVy?!lZtp|@fhFO(op|j?F3tV6eOMlDu_spKZIYb z(5xcBA+Z(g!vm-=*wKX4NvKn$-3qFXDTCBH&9c5`9_>(m{8)K z;c#db1d^-*Oes+&nOI-3N$m%r{a79{{&Hes+&E}DXUS`>8A7R=TGOd@O({ZG_u~bv zk)}e|kwp4F84I+)^}uJP`zV-d#tR_B;XywmB9M0{=3%N0C_Cl_K}psbP_aZfY?C}X zI%*Dy#wjwj`tQa(^y!&UT=$;{`5Jr}2Lz5Zm9wEXtX73WUXi|&WRp;uR}yNQ-*8o-Tu&ds6Uk)K=H&AE zgZokEh`0J#hciBiKf4lvj4rj#$^S90-+{SQvq{xyHHHBV^FLn5`0lIpedFWf=6RH+ zD9|Qxi0UJJX#5}=-3QRDDw!tO0qz1G2A%~eo%Y-|iy=qye; zX--!CsGIaf{gN{hq^Z*Ww?+t5lURG9aGlfN@nYovP;HXu8O4!6S|9Gq^TP2IXil;G zc}Ab~f4mpB>63#jpMd@`D09p9l_9IYznAkPAnzSm_Ym+TFeb#+n%t5ov?MAufe?vg zV08X`Up3kt9UT#~%i1Bs@KrIp8zA;_GBk+b)y{q7c7>|Bc9L96h|?U}snTkdJm&?Y z`5;MBpQh^LoS(T5mr0`5KDkUal2m*yiGRFL29a-$|8qg8wHu)haQ$rneds9(h%VM6 z6zWF0V$@rPc`eh-N-k>1B(XHR+<$87^7KW`q_f(e&1R~Nuc5pK9bE4WJXB4pT=V)I zm^ckWxSp1P-_z0LRax4@&h-oOP6+;|-t)=hWWLAG5{2p$NSpZXE%FSCui;k-9F)-E z;StP-={IR^tAvUPb`lx@ZUr6yz6$gKn>LAq4nmo(3>H8b2o0Bo)QVJx453OY&F=X4 zm{BQx3mb;2;8iYnIh%EI!)(z!_k@CLpQ^i7Y6T zU}no8vaIT~723apP?}w)FxqJHtbtLCR6eS{h@>i+Yk)*JJRfUe5Y^x@c`?JBRDCq(++w>yfzMN}? zMaktp{2qUogsO?fF%;!O`8azXno_{-078SZY$Dy!(J@n6!snZT-v>Se{132L$A^+6 zL#QaUQVR`=?DWOAzq(U`M(=H!2KFL)Q2sXM@PRu?eh3l1Mc|fIVn)%!OOj0?Q z8=1-y&}?I$UzK63{qV1cO-<8C_16*#QcRx2H^$)eG2mUm31@LZb4y!=#>5r`mziAk zqZ%05>B}g5>3Fr5fTXg~+1R>FBDh`C61g3)YNENU1Z&{JbyTGKLG^zi&D_At^J_{0 zyOX9mDh)UZRY-vJTHqd#@F|e-??8&tEQ!&;M|)Pp?3U}PwASp7j0_tBn3IwqHHA(; zNg_xb_anGYd)&D%$>w*}_lh4ZNg(wBxqYH@{a*_Rt<6Qnas=m;9)0c1dVF9y1CfsY;HTOHJabQW8bKOApJtW1Sf$HTdF-FE;ir zz-wt@&?E2(4592*0oc1DCBO;Hhl3#V?I3}KehVs?6yj-6b<`q<+j>%G{15_kp3 zsh?DpYKOKcmFvC@{H&8akH8j9^$4Xx*)KXhowBB;5{Pa`t+Que1i5qEb~Erk5cqkJ zb{fPi*tuvpBgKY$C1>@wgS`I-sVr7wC(iee0000bbVXQnWMOn=I%9HWVRU5xGB7bU zEigDOGB{K*Fgi0eIx{mZFgH3dFo{zz>i_@%C3HntbYx+4WjbwdWNBu305UK!H7zhW zEiyP%F)%tYIXW^hEigAaFfd0P%Nqay02y>eSaefwW^{L9a%BKPWN%_+AW3auXJt}l WVPtu6$z?nM0000K0jI8G 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 UMX(^4xBvhE07*qoM6N<$g2Ms9L;wH) literal 6809 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 diff --git a/res/drawable-xhdpi/ic_allapps_pressed.png b/res/drawable-xhdpi/ic_allapps_pressed.png index 5f188f633f8d127ef1000a4f40c4166835427e45..f319bf1e6d77309b67183c84c8ba9bf5d0840665 100644 GIT binary patch literal 3961 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 diff --git a/res/drawable-xhdpi/ic_arrow_back_grey.png b/res/drawable-xhdpi/ic_arrow_back_grey.png index 11996efe3f710c98d035a90ab0927641f843ccc7..22854bf1c37dec6abac8ebb5570081970c0c59da 100755 GIT binary patch delta 121 zcmV-<0EYjU0hR%fBywFzL_t(|0qvH-0YESm#okn~7XTQU1pw{SQI9f%N+8Gi%-001WUaOMC22hT}FK~#8NjhAhVTxAu<|L5Fi?wz}HcXnoW zUUs|PEoIy73vXh#E{e3>*cXH@hKdCuV$=^{f`0IWLBvF(5NQlSlNvPP1AH*CB_Jiz z7u{BOK~e?j3oWoMp)I>DZnxc??wy_P?7h$Nxic1L;wJd~lYhy{J?H##PVUS(&k+9i z5CDplpgeVPmRranU{`(D=e3~+>HruUZ`rokwqbYN-5em zv)=pTmlkYsZhzq}SXVLx3&I_zXNS+d@ZjLSnH!r#9|~A&)U{qmXCfg`uRT{ejALJ3 z_*!Qfq)5u;LXu(*Sv5Y+p#w*BoGnkMj%yj)_VKT{_nasJ?Y*7=#Yq+5JFcl z2O!3_1%cKgYzZ#EwC8(Y{oo6U!3shWk@_kLObYe}4}UnaX?ko%{E8ox&F4q2zV*b; z`yc5aST(Tfk^Y_czxBjN!+ynh0>3gN)1!ws0w&951&%mZfXo)`wH|O{t6w&_*%>KS zPCdWvHgv^XDUWt6Flwi~+lsDjx1D;vRH;SzrIEXUH4(Dz^$=N5>k`1>FZwejgDT6# zk!SBlK7Ub2bo4Cf%;$5NY$lt}b>@2(BsvlWfUDScr&DW0YH%L?Er8E0` z5L@Arsx{4Iwb-3aurKa1EkwA%?!_o9E^sqkIDbZQ*oYa~#&V2YZeCnKp?mSzV7c1( z#g`CU)YM{=1qO)Jh6FHjuc>aXEEC7?U5R{G7EKg`%BZY?oqw!&ptyfx8|+vttDwk6 zlZnXRyK>@qlvR?Edw>mzYK@3eTqLLdW?Z4KU)+M!$}C)iV{oU+*|4YnRFWB)8iEV^ zDt`qFY`m_CO1-$n*QL<-UPCjvhNKwsX$$3J{jtwVz&yG0&i&oadnF1afB*ylmJml4 zfe8!Dno{!2}2Mey9I{S#DD0v;oQ+yJRLQ4eh7It?ZwFgS9uHzHj>C= zp;5tD4%8JNSzg@BAUFP(87WEe^gtV&ZkxLp!GlY!4rs!^{)*yFx}-%K=A4deH*~{z zh!Fqvh)7AV4sq%HFag@?`1Vo+ovd<CltfoDU}KqK&S8M6_%;i-T`&wqyC zv13;OAggmZh6@g-32@s8AgR1_22>2|VL8eG;rI`yUY^=D{$uDE3RDmEL(n^Cqyi#C z0a}QO0Ob(?nLBy`AQmiP4amoSGz0pY zmWV5c0?Y~*0rtlQ5OP*@AxJaO&=r9ix@?e%4wrY40}=S+;7j0%5V4UH5(0$wm8L>w zs?|7;sBw8Pr5Hi`H3UGy_eKz#2>FbLwf$spmKezNqxpa|Gx7XLNIja^<9{K*ORtIS z;Owv8hjm8txb#`W=ck7VqU~E=yMAhRu>~^vq(ekkTNf_BdV{l8G+}yZ_~A8qjR@Jb=(qikNFj4AzJg9StF|uDngQ$WaKFJ-`;U#>rhKQKfK<(Pc*6W-}{FUHzY9hWY`B3 z-~9~$&9vyrr}KlA-k32ha0LQL=}0tfN{1i{vjCC7^~MG(Pv;js$pj6&`&(S2nqJ4W|&l7E+o0F>(Zk*!qxRnb=8F&UIlu6 zL-BYm(l70}3rUl0lYdpe=oR8iO-uW}<(H$zBkaU;d;1Uv5*8dZ89BxR;(Plho~tc- z6ItH(O(d7(5N8Df)n7$oXj+y>>iN5;K8hOmg9ti#VD!;Ln_s-{CtcgFdg+Eko5voV zJWz!N(S>B{?2fHS_2jD?k|H%;mMqvy5+~;#TJrGEG8+kD0DtD%PMSppgc#XGfY#8K z5?t8(^B-+L*&TbogbIbVDPIQ!YRHbJDU{SJcdULWaVBqS!9qx(kNxDED8(Tdb06m#Gx?H7@>KgsAAbxaZV{u#aIy`kXh{q j#h|R`0%(Nu|E>5p5DR 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 delta 1183 zcmdnWvVwDhWIY=L1H*%I+aExRCEd~2k%3`jKlh(RRv@3TILO_JVcj{Imq3m}vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>f*i;J)PVa^O%x`6R1zsHj6%Nn{wY&yHzl-Ta;%WI``9J{`Yg+@69!_ zOOfI6*Y|RhdYhG>wr^(sx3Y%+5ijCzeXQD8;Otnza6;PuyKHC4CX&b8<}d@ZVGr2xal z43kS|dT!so&F?4>!_U@iFDEZQ`%KT@zklCYoSf;?QNBX>n1rLtlC9?iFPgh-$?EyZ z#n5(mp~P{4%??j^&IuP>eEpTBVaog8D_dS0@YHiMSj|0`^5CW2M-ztB&5>P;IDkg4 zJbKji=G(HPhYmIE*|n?bn$_HpoSwoCk9Tk1E;TnZ3s@QABXfN5<;%g!OIr-pcE;Mw z-7C>-Xa4`e0|z5xJw3gByiEx!raTH;{Z-cZ@rxH4wom8(=sJ1$d1-dG_q_S@U(cRB zd;Roj)2wzOl} zB7qwtMCLv3bX&YJLTjqn{CV?&UY10~#mBq1x3|lem6h3XDPAfsFTa2N_1E}WXVVNh znk=TDo~hCGXY%C9`#0TuqtTbV?V1sTpH>3H2b=Ru0_o}LTn&s5rg*8o-1W|Y=kPz5 zja&`Ym6e&%Yr}XFSQ0oG>H|ggKKRG#+V^gD=#-};#Ay;XbTcn*9@VP2;7;QF_xMK>8FQjH{MfAQfs$grV)&mJ48 z%ZG)3Ii>A&vQ1li};{+AqIr7jBia>ic{fn9z>< z&$o-s%gbZ)(!Bk$-zle4Jv7}N z1$xxj&iQoNrN6k$6FqO^|N5u--qMc_)X$mS1kBb9swJ)wB`Jv|saDBFsX&Us$iUD< z*T6#8z%0bj%*x2n%G5yDz}(8f;On7AD-;d6`6-!cm1r6a%&ZK}AR2CNUGNX6K@wy` taDG}zd16s2gJVj5QmTSyu0&#bYEWuoN@d~6R8Y~u;OXk;vd$@?2>{#R17-jK diff --git a/res/drawable-xhdpi/ic_pageindicator_current.png b/res/drawable-xhdpi/ic_pageindicator_current.png index 3054f2f4f0b43832d13bc36b69b8540dd21a49ca..866725fbb4b1f52b90d2c7841e795d00a8bc0fd8 100644 GIT binary patch delta 664 zcmV;J0%!e(3#A2+8Gi%-002sU^>Y9K0&Gb{K~#7Fg;WEulu;NxS3jSZPuaHH*EpMl zFvu9!*jA01?HW6~LAG7%-G85NcRBU2?;7V^edm5C1fn7Z11sZwwZSU()yg=SiZnCV zAt*3m;4ZP;3|P>KAOd>8T5h@oILVOygA+?W$2H!A>zWGE9eERf$v)2Hv2pl`Saf%YsFSV&YLr5QKf`2dkvZo`3UySo*j#MfdOz2-u zr;1)WCBK}4J}Z4`@HGbLjSW3L>&^9`s||2~`2@33{p(J*d#Lq)-G-mrJ^_}OM#+IW zv8d8bM~WJ8WGs4M4odRU$cS%v87eNVkH=FoBf0i$Ov^AOWATgYP%*45Bff&XwSiS| z?VJ1aVSh?Csz=O3)k?{q5BAQ5Ymf_CLEa#QDz0AdhS%Tk^5%~hg0EtcSS0xBoSQ-DP=fkL|K79lWEP`3s6Y8WF4GNP%(y00004iwPo7046)_C>@vCr{AT1Ms zHTfxR27nkO03U(?z?K5AkAAD!%TE4K4nFDX1U_$fMN8EU`9+29Mv9iB+dt#d8F5^0 z=j-l-^Kt9o`c6h@k+iqE%MHWzI4tq?-_k4a$)_{%T$Mh;a%Aznxx6}l;g&u>^~#ne zzwW}_r!;(oFr9?MU%hbm?R^4$ieVaO+9@7;tWloX(99oSxFV!1j4dUv46SyXBt@cM z?E%_(&h_w1Fd9mKIk!Q=qsxup(QduzdB8|49 ze~r~6e*cn#smgtBY^`_A30iyvWtvUs{yv)lTxxs|%{15A$A2{XyfDtss-4}6WiT2f zv&&-vb??>$t+UMwb$mWwV`yk-iA6py5{Z<6vgUgy^k{&dCe*VZ4Oo$qeWkj#wzi_% z@2sC8-yqdW*w@YM)lTeXeU*57Xn16VM5PWlCPUJS$vIXK&2W&?0+_2jc#pEmed?i7mHVdAztgWnOhdu7_T^C@Q1{R1Yiyr|N+RJ8>UP zb`*Zyv!VZG7WoAZmK6TP&l(sD`yfySqk|>6gY&UZ4!CE&OK9a(Hg$>JkIulqgB2e) zQ0IAY`&KH$qwf27*p?Fxf}%(X)1YHhUNJ(XZy9NGCmr;bk#t#PnM_uvp`0OzlwiT0 z=fPe{Yk%fsXH&z%WQKuhH#(zSLX7b&T!FM#EY62bN0kM%FiUD{YDzr&{nt2(c6pkh zw6dw8x!G@GVuFAW85fJDfg|GZ;kQ>|15yJULkQ{w)a#tT|1E`zs3wE<8Ceig$7Iar zA&MnEqow#&pxdcMMOm08@b3NcJV&1 z6mi+K$zKwr<4w`7(dTYD!xZft9D2Z1p`nA|v`6{68k=~YC$R+W0~fwg!nG+nayT5V zI}WKw`_YJ4Y~gf-AAc~jH{Iy3ABguiDrT8Mq`}_H1}5O4^jOmDAVSG# zcx-ILrXb`_HkwNK91~dTZQM6?>=OoqNrm*D_46YZNb^k+;jx%YW9ACx_NiMNRYuTs z^W1p+@b4CdTz0s&^W1vM$GMTmh7fjbU~53T#UlQ*gd*f~u)UWy*9{37#h@$6~R$ zkkWmY0dNEy{sz1jW@%&yg(o!H=&`Yb<~K!~85uh)GTjI_#i{VMtN34^Cao?qcoJ)M z4Gpu7rHu`{uIZ>GIvwU=A$_d9*`F+J#@gH0OfMyPLUEviJ!PKThg9oVX`>xKyQLt0 z%?}p6@O6<#jS0i~3?r1xpkPCyC~^QtkXF_RBpQLV@v%CJMI*6D6atCCB9V)YX8Zpm zh@^#vQxpCtK-pkX{|bgZDy`)L-E9YN8kG@8j-miuC@q*`5qYx?N(1gpKln+a diff --git a/res/drawable-xhdpi/ic_pageindicator_current_folder.png b/res/drawable-xhdpi/ic_pageindicator_current_folder.png index cd92e9f21bce7611ab1f8322ada44e9e78b4e0ec..ec19b7c345c560c6f515053730507846216c01e1 100644 GIT binary patch delta 277 zcmV+w0qXva2BiX!8Gi%-002sU^>Y9K0PIObK~#7Ft(3(EUqn(p#qzTxoL43!WiEJTKfT zk5Ux<;E*qb6_UE1J~`CiGV13{5tb|{SpD^a1xth}=L%uLPk$LBED+Q6Wz6Y6!FVeL z&nRzJ`g?=|Dedv+K0;=J9v&5idp9Jh98j5sNarVD0k1fL1-Z)|vf+wistbjK^65hFY=+~ovXKSkSg_E7}Z bFEhVbdI1OkmkwC|00000NkvXXu0mjf3Ltr` literal 782 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvKUBvfU(=jY&)Rw_dH!3Lp+YJownaA#!=*0{pNDjGO?A{ z!Y?RkWF#_mIxC1Z`5rjOzTs194SV1PKf^mZEo;S?INunj>}Cnpyg4^}5r zy!JCLPCxg3ZoTpI827U$KHK~&Ia!#<{r>M}nRQvliswxFg*VRptL3_`ZHKD%*-K^{ z)_k=!=z7B7G*v0wSuW+N`UB$)oFyf8Ec=+BAL!ka5vrLP?xG=_AZx*T?_~Fl+t&|B z6|mGW_cc1U)V^{|*&F#W@Y-6AfEQ<`h)gP0+Bciq+n6Y9k6}yvt~>o+b=0Q= z>mD^eyU;L)C0WLG-t*KL<_#=4?msiEcs8r9W7sj{h3Mt#cTxhA6RaN1x_xQq9j1ze zPfm(jDZFioZI84>Zz%s_|FZS}B$e++uQGA%UM9Bxw0O%ogYa2%zwi6Bu(a{J&X0vh z#pW>7vq+dK{MXGnIrW;-YDN17=LhQ>k|(k(`>U9duQSs+v2N0ow?V;6RG9M`Wfv@e z-*Yo5{kQD{-N|0F1Ve-7b#656Z!Fq)e2GXt!|F*tk1lx_!*E?tEq66{=FDfIwWrqv zZrQQyzr1Vl-)%NbCtgl1_{-|=1dMXk64!{5l*E!$tK_0oAjM#0U}&mqV4`ba8DeN= zWny4uV61CkZe?KbX`8w-iiX_$l+3hBG!4dn{bH@uda0yRj2YzWRzD=AMbN@Z|N h$xljE@XSq2PYp^mm44$rjF6*2UngD{iH>Usq diff --git a/res/drawable-xhdpi/ic_pageindicator_default.png b/res/drawable-xhdpi/ic_pageindicator_default.png index 38538dcf02948fa20da4adb7c92e89edd9e1cf9d..0cde8f48bbfa91452ebdee1f688ac87abcf29c14 100644 GIT binary patch delta 525 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 diff --git a/res/drawable-xhdpi/ic_remove_launcher.png b/res/drawable-xhdpi/ic_remove_launcher.png index de058893abb8ea1d9b6d5c668593ed0d1d2c16d4..ff94eb8e906e72ecc323d211cb0809244dde3d70 100644 GIT binary patch delta 954 zcmV;r14aD24aEnL8Gi%-001WUaOMC21B^*TK~#7FmDWX<<3%1ZL>uHm$s``oRHIl)S7f)Vl z**wfuYPH~S-jo+59HGJ%TwHTezM*P#mEyPqaltF`r^Q|uf`9&Tm`PPb*-wiSzu>7F zMKZ>j19`O#cye}d6ZladQjZ3p220NWi zD!}Qa;>SykDSwJITJ@Oxyta@`<36v&991-^aO%fP07)@;Ny7c`!03Zkt4UmIeg#sY zYz1y!RgFIQ@BrLP3WQT?Lva20-;YeBiTnG}jpGPNiF3guhYWM5oIAfV>1dKWDcrg9 zsE{C~IzixEzzqusiA>*1&eOS&s$Ej}!V{fJ9%@5|Nq;7hIb`A%UO*H1Sq<6!?eO5y zclI+I&Vux}bZzN^Z^v1XpVrWUj!$hl3$p+9==Er#-<~s*^cnkU>?gHk;0&Z!DWG~* zkqv_AqrT}Mac9q?N*Ufl&P)n;X0-0+Tp*qX>35BJAE$4 z2HxKUpQ0J7L)IN7e#kzJCVo{{b-_ict6Lr3q0|fm&)VY#V0M z)bI9P+jq^>FIUN(xriOuaps~uY2@g>i;AUU34hVq^R^^2w$Ccv#y))duAZ|Z&0H8i zWJ!bdXeqQH6?Z(9Q!PNXjWqJOCIK~bIPSy!GBR)sES>x^f=hy)Il$TCg5Rl*n>hnH z-gl=8PKug2T$d1cw@nRDu%61%NG0hrHE?$u1W5$47c=1ZZp=?psIelqV5~?sXg8xg{zoeNlBF>(t@%3S}>h2Ce;L)BR(7)wAR zc}$k_P7o9d-N;x^i8F=npx^|he8Mf9WizuReA?gUL9S}jF1LB7{dgBNr-SOH?>Nh` cuu9kc2QTtrmFnP(Z2$lO07*qoM6N<$g6ak4od5s; literal 1724 zcmZ8ieK^x=AHSD1Z>N$va@dp6sEFn*vxAzv%sWe(+G^N1I(dtcab|gWme}!{5vD>e z#EDvz7?CxvmCD&UQwj&UVmsw{*;$^S^ZfNZ_kDf8pX>YiUZ3m!91;epLiLqIwAYkL#~@CdvQ9)OlS&A&soLNzR&=%~^a{w?f0DPnZfGY)HPi)1b00*dn2=#Jz0UMk9MrU0S#Hhy-g5x11{1a~C zADsZ$n(N_$4J;p|EVe(Wjtgl+sU&v<-emoC5E%C zReFBOA)g2zFRmo3h;Ef|t{k`u2a?}@)7HpJ2kbvn-V7k$U#h(Ce?YCgygc3h!J2(f zY6j6Wfl`-~lk-xsvLr}ZS=@=&>N7aXViP@e6z~X*C zJ{JGiQA(_=2dAd^W6;M3T(}Um5 zjtB_}d4gzF6)nh+NTkcRuJyWcHa?BK!I@b=Fe#E>4`oM3M|%Q)3mz|la%$~+T$s0Y zzCxj})PL61u2d>Z)$8OW?{S8JY;hO{>?kl^NeLP(PE1U2mYGV;uv`Z2U))pA_i9B} z;t)N8;g*lf>%7e_kV+G_!cp*y9(B<5`t|FCrXa;f5UF{p@pV^oQ&TN$wY^r6osIU` z&ECD8v#~{MVD|IqzwsLBR97M^hDvs-N<*OfwrSfjgc`NQSAq0>?5{ge4u@X8Dm>nX z6lEn}uxs-_!JA)0AKz!-$h3iVyQ&qa8ES()!U)x*Pm}kuq`&{31Cu#jl2NtUs%#Fg zGbJTuUoUsdLD7`FTz=_q6OfF=x<3nT(N&36>E?#EV2@Pnnig@n+`0aKx4?knys173 z{(P?Gn;&ePZ1lK0{z#d6vV5HBd^6wR7@9X&R`BSctyR2a6|z!seQ<^kyCTCmRCfm# z7=h8DA#c!)bPrOXn%Yf8!^0yZ2<%AdtXm6M^q^=1$UCN9cdAv{&^aNH`9{(qw{KnT1-a9#jG7Mq zbkV~Coyuqfmgu|eswq?CbL-K{s;V^mqeqv5{q#n$q%YflRtWp5JZpo9^{=jGEKje- zN-jJAlNRg_2r(8l=E$nqTbGZabk*SL;8uw^6-_vU<#!pSYL~#CJx0deoincP%i?~a zpT4UX`9eJKSXJ`0b}aIHY*Ll6FolH9i*h?F;K#M*`_|Dx^x$o#ZUw{L4pV5bz5U_M z6&j4Kl_#12b1z;5)JQJidL+(A%7+J_3c5li=k{whHa2Pl`RXe6W#f5~%|tJIbe=@$qpAm=lY|r#mLTM%FYM#%2tClji&p@-(_FjbBl52X;gH z%F#i)NIZ>ZpNVC|k(?Yn9DdIpyeFWo=qlrT#0we`_axGp8T!ew`$6@A%&k6{|AA?E62;3G*4_y%lIgXxpme6CGgGTT>*c3$xX?G)6}+Wl zu*PcXqqCpal&lSNa?^Xa77k_~g(ci5fk@5tNliq?2@`3I$}c%KXGdsO7mW&JAm4k~ zvEg_^^%;+BmnTJH8m)Tgo%RLRcFfnkB0nwVhu|>Alv1@7rI>&7By1FVpp6q;NeQ%& z1UfG4A{_!?g|W0X$Jm-%+6P+N;%sekRv2@P9S(!>BB~euk02_B78#!W{{l-K#`?d4 zV+X&v4+*~8JmEx4ctTRhMLNLKVnXRCkEoCcI*}eiOO6xMH-8b};p*$s>`YDn4h;zIO@)QNitq-w(!7_$XfqzIvB}T9sicsuD$baBmqBZJoJFfZvoYK^C z`4+NbDzdS|nm&2J3Adi?VKe0X$T; zDpYQe(j^C|=YI{14#x?0)2d_;xU$d0SY!GBWi%b!L4+_oKL$F}F~_=0Yg^K_mO z*XWEfIRE+oq}qLufm6J4u3-#SNPEv}jAJ9@&jX58@3aC!BuL(pPSsw_B`|-%B#QaX zq1ul=9LBWY|C-v6FZLAGKpouJh9CEML;$;Rp^pE#LPQX@6deJleuN_gVbz1MhafC^ z5VjD6SwF(02VvEZu;>F&z^u=n0wyi?`ojn#-T>PI7M11$;->%r002ovPDHLkV1mhA B;>G{~ delta 471 zcmV;|0Vw|E1MvfpB!9R`L_t(o!|j#3Zo)7WhP_Zkfq~8}T-Jg*AcT-WeGU*j#V>Kc zz5)xVuYo{SAs}c`_X>#z0G@#$kq&iCP(xCiddu-d{GIdp*f=4?2`8imp3ub%d#F&c zhk_2`|5yAO@6b%f64~2}-{Zx!xIPB(+*1AlpO)n{Xjma2zJL02`4fi7Ap{rh5Jn!O z3x!x0hRyjx;@4~vYc}5(J6b*c4PH~ihbdz+{DKd*dhb=n$GTYX|L^s^Pgrs() z(4}cZTXIavHlJWd({i?CfszwG!JejtY{>{Ew|oMXrnziMHzf~Zg1bKpj$&IBwk4yK z-0=w%nwGaEi+_|<_yirAHnJsODcRx^#MuQ(T5@T|J@Ve=B~4tzca`yDL#a9cyC}=n zHZ@nk&#vPMX_5EofGO5UnQYF6&G(2%z=M_Hvob~j5xC(-6h(Hl8Z@W~60tzwLSa7i zE7=t7qHj_BgdT$IS3|Uq3>K#4=RZelcv2^#ff(ADU{H$#j@Us#>->R1%b=(c8G)vJ zMZ=(|%2Ct}ii#XX&7dgDSCr%^s`3>T$pS)9mRg<=LQs-g-U%n<#W&jm7L~9$d`$oV N002ovPDHLkV1nB^-WLD> diff --git a/res/drawable-xhdpi/ic_setting.png b/res/drawable-xhdpi/ic_setting.png index 3a7310b7c71d92b5748152367ae666591b776777..bb90789ee0589dfbc225822096ee1672994bdd9f 100644 GIT binary patch delta 1634 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 diff --git a/res/drawable-xhdpi/ic_uninstall_launcher.png b/res/drawable-xhdpi/ic_uninstall_launcher.png index dd50e88c66a914febf26e4d1c8d3ff2142f902cb..2c7ab56e953f85db0aa1ee92ee96dda1bf7f606d 100644 GIT binary patch delta 717 zcmV;;0y6!u3)%&c8Gi%-001WUaOMC20-;GnK~#7F?UgmK^F|bf&$(LJa+sN!8JjRe z8BUviQiqwLN|`3i%nVf+nxC1OrDv_~329zrKl-_PpT)AiIlFszmgt3zBfuk=S&6E? zrvd_IRm(vM5dK4G5Sp@vj-+s0vP_diii7_U{G^mx=7a=6^?&~bp*IU5wt22~nWJLK z0jA;4c=--{?Occu0SYiA@vVhBV_T=U6p(6rEcD+zRoR!7Fa)GX{ynyl9kwm9XU@te z`aoPA*9`tvdw2R{*na=*+8wmf8vMdwy$LO|f(K-G9F(^T6UkM6z+N{$)j1RnLlc3M zo_^x_!&7&P+J9NI7T>#IKh3G2WB z?&!e4{|ALYLD;emGYd%S+){)==tl(G^<@GKY=a~>5b7Ca1K6!qHDthgP#LVhYy?I@ z1I6;6umb>MJyA@zTQw70?fqqAAX03L9gv}m^+gCUtbfEB6sQL!G^*WqC|3Ek``mi9 zr@mggEKHwx?e{yED@(77ysr+==%DlLMP5pBjfqET(W}`0?Cm=(*1g|MNPvK?Oym?C z#8^0zk_aA6($Kjqs3o9EkbtoD5DIVuDFTEKR?Ft4DP+V(K>+}_Lc($3xNuxJF5Ego z1#A=|0Dowhgle4D8v+zGY(ff>V?%IwYvev$Bk-5SRgU#TK)x8oLCQ6pP{2$-iZ9Jt z_ywR!ag1NZ5WAm$44YTQ5xR*?4#}|Nji)dAam=OOrLz0=?b!X0?b~T{(PfX2vYoOO z?IU)7^s0l8lnEnYC|14q`TalcTh3jV#7gjCg+@SNO!jS+twm0gfujvZzyX?BRFRUP zhNM?%=G-GWIo&>#h$9G10p`=oUm_i@o>Kb@GS0i!f(#qn00000NkvXXu0mjfgsxaP delta 1449 zcmY*Zdo&by6#fyR@tToGtu_X8&|)U4oy7}Fq%9Z?=DBBRVA zmNXv8D|rl&$yAibB+tYwVv#L&+Wo6@&pqG$zI(p&opb-Vqtf>w*AFoF0szu?9-bG2 zRIr_^9RRhNkk5E&F_(z)IB5^62Q?SOL@UV2!xexy1ON%i0Bnn;g!ceMBLVmj2mtyf z0O}Eik51c&7kkgSoWz3Nuf=XH%N8qg5l+8EiP7o5cI*qY6~`suuy#x@pH7iaySt{h z^3I%S?67)#m$ybqU~z)RRMHdUq=;F>HBKq#{`j_1#NmVe4l}*ZhI!R+ZB7XrXQ%rc zHA5Me8|p@TqEE|Ee4F@yzA3zg>o7(KF3Yd>b-{|w1mtC53#HxCwAnPdgKawkFkCKo zzr&5AJ&&zvOEfr)`KNi^aQQ28IEA8w)rCuf$R~MhrFC#Fb|zJk)-gU_IP$9nkxus$ z&~v7L1S_JkMg}~K#O=c-=MYJ)JM`t*$}BV+DZe0WrQaJ9d1&$?25+FQpo zG%S7jXY(YF$8*7DIW-u2DuEo26&rqaRn3B2MN>*~nw{w$WpvEd6S!`)) z>T6qOp-Aj|QW(zDZP0RiQ5i#Bn|lTYLo9U@wJEDh&jt>KiQ4Knw0Il&O@0+#m!wX$ zT$t|3Man}eYP5ota(x4&&+Kn`iBGp0YQ^zm!<2BO-(JI2#;zy`#p1O<(+$q z{X3=$h!=#q#Sd+4Z1DNTCw7S>Qco}m0oR5bcF=mdkX00gBcn|Htdmuswk#BPeXDl~gC)>tn=;T2fxttX@ml9y zTyY`L!oeij1Z_$bh?6fQ>a+^1Wf1I+ibu_kQ z<$3_jMEFR*T%wTh!CPWbVSc>gb-#{2==D7UN?$DK(&==jq=rbP=CC}pwrx2ev~lbV zsB3TMUv$s!)7_9rFP(vd34FFo+IuQrEnyFkO9;Zs{m?F9- z({YuUyF**5nAN`~n!D{wl$D1n9`Zer^zT3dx!%{mASJ1@z%t#30B)nMfDlrHvq7K# z%geGPT|HSz2{2!HmDx!yt~e&2Bnbwp6zjEc(j_^cp)Wr%m}l2@oQ6j;`!2`1ZN8Rc zJlMBGiNLL7O*%|xP3m>9dh|M6lGLxc|IQ9MUe~bsLvLGoqKblNfV6v^45PV9n@xkq zkc->)ksw$?NGnNE1IXAt-&A6#+E`gBgSy(<)nRLOrTm*rfYIbpBy_X0vthgoJ7$${ zr^xkB8^b5=%+AjGw)*cLx*GY28nUiEm+Isf)*KcV)-G|Xxw+X`lsKsAjKvDq*QrvI zYcfjT$4`Wq`74yf21B7iKhYSBFLW^SM_CyQuR-eU_cRi*7gWvOK_;^@)Q(V~SHWiDq5JE|@-x$o%<|s7M^nU}! yK)z0FIPf*WlR~1>@R4vLup>~;5w&pV@xeq7BAyU?p^y0Wi2|I18@Ad$FzH|U@{Xeb diff --git a/res/drawable-xhdpi/ic_wallpaper.png b/res/drawable-xhdpi/ic_wallpaper.png index d2bf246ee6965badbf34f41242f2dba93f4ea936..0acf773435b7617990357825179c75d731d5464a 100644 GIT binary patch delta 1237 zcmV;`1SoydImuAe&%*@Qp%*-Hq zS2$*76pWdfnHj}n-rksbOC9Iit@RHqc~x9RX{z;{OYg=0{q^LWfbDSx--b3cl6bF1 zBf@Br_Af*cqmz=j4wEu@w0nav5mQ7fOd#B(1nB7ZOdQRNe1FT25&i=|@dL|uhUw^Z zhT=-#JARDv54nkrOTc!9VROC&3gWDA-z#~jHv>5kuXG)gJB_Xp-2w|3a*8OofMrDw z^(MejM7qHM4>DdDR^rUe*l;AGquLT`Z(42OC>OktG4AO1(SSi#e^k8>{w31|;wtHc z=K%|Sjw+(qE`JbLp-#rPUO`#%(r&OA{HWdlWaJTEfXo1gk7|q;MxC4=LGc00PAtqa zEEVCCc$#yuEK8Q|y9^6)FX%k9fuqZ!8kSIuYB5^65}SC`oMk%2Mk~S-Uo)n!E9+}| zMO~`)s9rrpjj$o=5LMTMq~WL}r2in%YAh;=!x)#jSbv16_3tL4>hsL3&0=4mjovF9#2ZZN#%vC%PW~%^MJAZNI@#Ma)LHojD121T za}jR}s)nDBKLV(iGz?X$Uj=c4O*D+3FHB;6KR8`5ic_qGte!&%!%E z4*bfB0a$Mmh@=m5R*F-~LjtwHTg?2QlMxH>2(#;Gy{J0*XCr9=-|xjv$}Xl405>V> zb$_A?bRPl2Kd`6!IBIzkkO2qjXnm+Er{C1lhuz~J9JSmEuv$M|Lq}^s^~=cy)&zfM zdEw|Kkk0|D@3)yzs@0=*FDKuG^Ck|*X^zKJsHJ}2st-~Fs#i_{%Yl1HNZd-)S%G|3 z##WA6qMSmor?}QTf#1^0*s4)Wlv5aXTYu)_yFg1XV=F~1RZaxT>oZ;rwDdE!dem?^ zb%&LXXW@*k9yL{wn9}<$Y?osNhSddIEh?>WIYn7GW0ML|C9|5!sVd8X+ckDos5-hR z>$5s*R_Lp)lQLMzjnUJOS5v;yI?Yx5;S-_5}WciSWXM zT~2Djr~6HX+V7o~26(K?^bv_>jWTRsQ4R3Bw7M?dJ_J}S?I_PMWUSyN!1ciIaXLzZ zjGcVYFzkdJrG2dNWwokHBq?!Qk51ddpVI4jsogu%u|0=#bhK;vMyT6y5=Tb$KZX&O za|Er(JyG>r9Dy1$UcCGD+LOk(!W>u|+R*+4s#kx!YTR6n00000NkvXXu0mjf=yqIb literal 2401 zcmZ`*dpOgJAO4E1xoqwlBe%^hG(s$wT!x9sHlf?hOowBkvmLhxDMH04m#E~jHo4a1 zPB=KxA=?kL}(89CX6X1=#&D58K(fdyZtJd%!Py?EYW4_Wx`T z01z{riz6w9zf>IXSRJc$z4LyvkAjm6_U0j}KG1_+5a?!x3u-y&po@=1O?s17#y71L z$6ip@A=9QLX{nAT+i#BpyFl{T7hkdRJ~H6(DbIXa_TW-ck&qVGf_bjL;yk>*MjHRJ z&iRFlFEJ{hTvrV#C^ba-DymV#+K+0hNO`e>eMZY5*9_ahtKl0jtU(M_{N~HBc!IWb zl6|%g`N@9cr|WOOoj|aVH^}UYF1$5CNpg2WdNQPpHZPC3tfs{P7NKXMPe3s6ypE-l z!&#|f@MXv<3yGt*E8Lq02?&8ttEtA}jm(&XF>I-NTJNfH=>p&_9?u^LT8saEHZPku zFykkeKcd_v)`bx$3r+`Sj{ONg;G5Xw3*`Pl*^J9CgVNZG5n{s``7AHtiH@Sd+G;IZ)LFPBe{XzAQ2nRkX+9SiL$-$js0``{OO8ekML+Z&luY z*vt-nkAOiTq}aGxNdpeAuQPWbgM=AgLUMfi*fVKWcdj5-)-_;92)co; zVG;xGHC1B#eg6{&YTIV-q zlN5hSev8i)eoKT#qUsJtAvf*+j7^YXEo<1SfimJMpl(KEhB;#XguJ?lq^CKK zS002{Cl2oH$VFBqSYC@Ej^e$EB`6itnxX)nIz^Q)Th;yRABQrOwvq0r#PW-i`B(t8 z79sEz_(q&NA^s+*zG6i7i-C(OCpHdm#$p$@u3kHm=d18OyZ)_s5Ms}(C{CUMdH&`(B)kD6&T0`aF+fxkN2I)TFIpBv@Z?}aRdFvlKej!Bs zQ%XvquPP^Dp~kN^gj%831G^Sy>2yF%eI zBuK_$DSZTFPmqm)TaV6HcU}|9K_`1wYU3Dok%|F}M1$W|yAog&>=L@mE}b`%@#NF2 zYr^zdM0Iu%wcwy3=W1oUa+8dAC-{r4rs{l!yC~IhtQ!C5(ZyvM4(K{=ova)XT0L9# z>Pz}zX3>I?AZnqRd({Rxash>EX~wyrcqtU4L*(|gH#xF%tg=oMN5&_Q!`}I#m&IFK zEzGnLGa2F?3@phx`2yTdT3|15>24wV_JE!}CQlA=d}WBEwu2JOs59oxkf!ET$$3W>v_d`_-gl(&Z_epK2|{0jdC(In|qFKS14atHle5+7u>^* znk8;;$P^}e6|GKKxpJR-@3`n4^{f{N$MqY8_xk+lnB!iXLm>iN0a-5ShESX@T+jdF2TY5OS4lUL)gpivy}KG3 z_76FqL-~CgIBhe6T!YJ;uY@MWaw&;bQ zxDLaCy_NS)K9&1`o+A{S=%egTbX^ip*8T44&I3ChiBpY|SWt$G8*xf|q$x2rrzeNT z!ai7?nThXm!zZL=M<;UcOK+$+g=+?^(SOr2AsCeI?u+JMaGp$8ie(AyTVOUxOz6Z| zVS#x3^G&u*=lc=L{U*(0+LJa-$~RW{e~&~-V6S_$&Z+$U@Y7@xB6&Lfm@5N%$93e| zYyJdIv2_z6NI-(;oXy+Siuv;jijWNt`5ShisC&G6&`Llt-Et;7OyiPPw?pqeRlQe` zpA;Lg#Asy|*PH_$X9i=vn+v^kg^?#;d)`{-m^^sV9clRRqvew$R*d<^9?21zBLnE3 zpsrp0y5_STQ3CV57J*`5{Taa&1`R{KMB5|49BpP{g0?a-LzB$SF=%UyrI`u(CQ@G%XyRa)CymQG#Qm`e{F^ O4uHerU22>HQ~m=QojZ>J diff --git a/res/drawable-xhdpi/ic_wallpaper_pressed.png b/res/drawable-xhdpi/ic_wallpaper_pressed.png index 5a9b84d7d04268b98830a6373f48db012f036778..e1e291d2a82fbbea912582417592388906063d76 100644 GIT binary patch delta 1119 zcmV-l1fct&5$On!8Gi%-005HwV9@{o1TaZNK~#7F?V1IX<2Vq7$602k;bYii=38cF zW@ctv4#zpZKm6UTtE+Nd6JWrZdA? zDhbnYcbF>Ky$OLbmo;4EF;AT}5IcwudkLLg?r@N|#ARI2cYkFO%csd2Yrnp{3)T>c zd3R9_B_1)mLlJO+s`}`Qj?$=yXkc8fSFjaU#~s)%n9gHLs=2E)>H%u_jt-$HAmS%G z>I|N>P%(VSGJpD6<)CTGZ;{j0{Vd}+HH@JC!kSK~PZ3m#1gwxgN+sk;+#nFt=EPAA z{V$v1O$5p)wCZNuzf{_hWNk5+# z6bTh-#P%$rF2Nsz+F-YMX9ZPUA5p^SUS(}|dQ~r&BYZ-UiQW6fJ7cJec|@H+6!HsO zGWf6(gnq75CyEuaNdU5jDiG88fGzCcXI5r>V%5K8d=W@NjM1@w#4+ll!L_# zOYQ-NnSU=`)#HKpUv-3+ntJ|4j>34JSbr z8LE8TN+7rNE@eX5Y#T{&X|0BnX|v(z%R{bJrH?6NbUmkos)o}T1ys4+!eI*MsH=KD zl79lKWjHAb&hhw$+O-UH#U_txA5J#djdAM_s1j=FicKEXKAdc-v6_WEr=(lzicKEX zKAdbalzGH;OG{m`$)nnblLfYD0o4_oJgQi2=?to2?R_u*k%~D?ECL}||(f_9amh%Q9j3%fNUT6BNzJJGxm%Q?w>kOdw{xO@3A70W&!j7|teNI}e z9&cZBn7s~H@8LG(i5&@>${pgSq8bfH4Xa7xIDa~Nl+`NX>o%yCvyq0tO=HdkR(auc zy_&Y=jIre%^c`xMI20OC^4- z^)rvD647+lh(bNV-!vQ@>J&MvsF^k34!e{sFN1;%A3SbZGzp002ovPDHLkV1ha45a|E_ literal 2209 zcmZ{mc{tPy7sr3bKGu;v$`}eYHTFn^VTO!l2w7h1h>;MJE!~lIvJCe4q2@IV5XKlmJ*73;=+D85)T_NKDufIM3a0i&&Z zV>I=Lh)oJ{l9so4JD6G#g{S&Q`n2LJ68Ez#eRi%AUg{H;Mk{SO1*A262g$EQjRjhv zn3279FuL{hD81W1)duIF_#fZ3Dw#$+gCFJCX1B{$})1_IN+CNJMWP4 zq>aWvZA26?9t~>eE_!lMRzZilUkp+Ya=p2vy9ex9SmqCF5JZ+0K45o6!}%|OCS&h3 zT5=dkUH)k9P9W`ey(y-fGW-~#EU7`Q$(E#5SR--p+s-5be)+6dL1c|04Hhb!ySaXe zr}yMe-|B8>0l|1dmqFR@;O~c|5BkLzh2z=AhynCunt${H?5aPN7IFF+o1=W1K=JJc zqKUiq<2q$Q&*UUE>K}xsadLw#r~Vxt*CrLEdiF`q8@g@Xs!<8byC|w3PGln5^ZvL^yVIa9MJxOl&}RW2(K|+hgkLEct)f zx{7JRlHbxxh*)!zA;-4_8a3TKbJ-TlFo@HexE(nM|F(B=4mRS6OAS@YsdFZu8dV+U zV>4btub<2reL?p-i;33{sD3f2B3d4t4I)D|0ckAz5xN#B6@r|P3`@8n(&~nI!^@W% z-qTt<^=QSC}CE@F5qs#gI{LS)Nj@E|Y7E#}w)L@tI@eW_Bs zG%=)(f?BI;PZ07`;v~oKIChgRgfJ@O=oVHx~lO5bg$UFG*iPo?i`GI%2ca(TZ7AbHL|B_!;P z#mLfQczeau?NHqf>~$qIoNe&9h3Xz~=7X8|&W* zG3zNewKElyCpJS|Z&jr~0Hw2^hh|5GBsHxYN3yU@G_7*Mg@>)3k%NYMu>)zl1E_Ig zRcU-bzXA`fTgju)-xyCytL(@2I@48VjW;rk#V7Q@RVWR&xks8!+t$|N@Yl~PUmi}> z2e=>0*J3WeJej}n^D}c5*--lmE&JR{#rFL{25x#+Lx(r(Mw3Kc8T@^{&8ojJ7Pa!Q zZxbh!l&gr{LYrC^p_p^Aon{Zse+~ z+fJ)Ysj^w|S1QCeYykg+S>UFM5i+IQ*C*&tIT~uAXwA5_%Q9QS&N4ZlX`K$u5odRu zaQ#hc9@UJsKj?Dhl5_fS6yMMfOlw-}&IdpI2Pu^bpJX)G6gl*}Stq}Y{o`ySsu8Z- zX<+`j{>>|P)XL1;sTAp)_fz)f_yt$k(mki^SgSK#L!&n}d=s=Qq*)e2iU$}id%pXc7Qb&&+)z46{Z~+p^v@T!@8yUCrU$E z0V_Iw>aWBMJl_NPUEy((;8icFFgjD*UL146q`ZLsCPG1SX2&U@bBpydE>&w7YqYkp zEG<|_-q!ikkshm$-F(bZCSV|6pM~Q~;Z>jASZi}o74gQ;OCYD+llaAswd=$xcvk=I zf(Xy`7>>^E5vNrSM`8UXK?Wu(OIqF*2JqPe8(S0jMEVHQ)#>xGKU8Ao5eP4hXSdi4Yq+kp9lZ*GnTaK`#>oBNzddI3Z~y=R diff --git a/res/drawable-xhdpi/ic_widget.png b/res/drawable-xhdpi/ic_widget.png index cf6be81738f64e30a523290d9de05556ee5baafa..94bb79f74fb92a8e3ff4a202b7fa5724c4202dab 100644 GIT binary patch delta 988 zcmV<210(#t59bGv8Gi%-005HwV9@{o1FlI#K~#7F?b!pg^Jox<@h|1twr$(CZQHhO z+qP}nwrwNHv$_90v*?#9y4^kR%&FVyFMct=g^R+2GTwg!T8eI7&tvhF3o%sR^WKJ* zqx&6!b130a>TT#A!0*6CR1;z;QB9RzN6>u%pHSG#scX;et$#r4kAp!_K-jApv`ehY z%*~5s?lw4;5U-T0)6Mp7SLlGpoYDTA-lkex+m}> zza_|Dqnpp%MvaA@ESO>-?A;6_YyoRE)crgIQ|(mGnFeiweSqPG?Ki5RlsM0zEwGO; zlCb?l)k(g}MSliugME@wRiSvQ_Ru<47_O7NaD8O+vfTk@x9$kpgf+Z}%APuJ zOiMp4^d^QdXtvZSI5Zoqpw}^&_R~DhtE#hqdaR&VTGuDWd|T2Oawg>&!D+d4a-&uus(3gpIfK64ofAvZQ2z!6!dt5 z7DYAe`ua5N7<#0QXctK}>{$lrCe&)q;Z?5g}uNYEC#zd`fw zT+cTU)v(L+3lOw~?$HU<`j|7a1DmpW!rX$k>+dN~-kQU>D@u25hKTTN<=SLfCou+OP&?lbAicC$O{gg|HAR*Vp^q2VR5H|Z*VXp*`fti|8a@DiVMV=8I7K@M_2k+3x76akr4GnUyr(rfc#D6mwc3xi z;(se%;f;j(CNtYw!c!yr7T)Kzm~Xz#i@eKAyv3VMYQ4t$+#-`_!tA?&WusE#Wgtl0 z|9_cUbLw8&gMtLlH&7`4g^!0!aH8MdtVJMe-`UhYk6QD028R$p{fM|D(3byP=n zR7Z7GN40QNM|D(3byP?Fl`ugDgfY|?098LxJ>N!G{s&`Ly8vJCZNmJHIsP>gSmiN( z>I}_LDY9{TZSYjp1|QIi(Tj5d$?LhuE&c$z<=$(d#_C1@0000< KMNUMnLSTYvh3;_x literal 1982 zcmbtVX;_kL8vYOj!+lA^)YR0{azil11u-{jPrK01~NiowAk2_2! zC5zIdn7Jf2ofdOxb4g8^sod9-NVs)qe$AixHP?GR?|t3R``p)kJ@23U=b(UNs&IWc z00624A3RZxDX1pxHoE8Buy(_iW{ zTq5o;PmX&YlC-_2W?^i3zwyU>e7_vXTRGwz^z`q4um67hhB|*GX3qeqeDw^!r{akJ=*l;lJ>f_ zxhKRgx|A84sQsNk888+j#F1hbF-}a^J8EURKlXfN_xg*#Rsq~!YG}FYSpHWfpLD zj%!R;OjEePlU}c2FKVIn>-A#bf6ZGzFsz}=zr)V#K=h4_HGR>|h(nTiu(g!t_NMD+ zS>-AVMDd>RVKvAYg>R@cW42L{raq{EMvR!BejvU8WyP72@>X0&PrAYn*BNmwDkj78 zC&atgKx25m?hFy-zzMbuDkggspC&gKDKz+JrRcVT77s)ca|aK16=3rV5R8wjvllaK zJ%rM4mMDiCypLrTAhfLWCOrc-J|L*2%{fQ8^(BAKd+#~Fb&jR?vC$7|F~?Cv?PDsB z1UvvwJe}>g!K}wCFyE>QTWvMQCpS2X(+&Utjf zjCeEy4ic*~ciS3(jT2-dX z*9`HcuWhF`R|~-RKp$bQ8IIMuCzlLDi+SaZy`l>+$M#g7egkw(S&Vql`&g~q;wV}c zmBdy31+8Y%J^F2SS_I8$h<22Jdn;4#kv8+^_$a|W#}&lf{#O1y+`A!mPI&@o-Dyc7 za^>GO)(tx$tM)6%vboxPb?$0Vg3VLW613VpWT4N({k3|q?T`;=J)pbv=)gER`|4Pr zO{E!O%ia&%t|#2JC;{@dn$#J4N7;Lm*&aru&3VT`87XxvFuF`JN_uPinQg`+74;!l zTS;XpJ6eEsC(WlD;sn_=+k3=a@oyLF9v%4nx9!oz&;XbWKsLm^U@Oa!SDfpQM+iFgsmv! z#&ED;ff<3QSD^~N{93l|!b-Os_B(Uy)|&F0$5OHiRwJf*q(dRmaNJS#X>n{FiGX6t5+fvjb(057k~ZDll6{Y^=4@7I8O)N zUsa25nUaM}zirw(#B*@c4$r_Qf+X8mNQjO5*0+CHz5X&Mdw_b(=dZs1j@pdfBL1rX zN*+<>46hRmN;HFtiMd3T1Aw%%M_JoBTHD)^kVuT3GsX^SZFdA?XIJ(2N_mw1mmrQ# zIYUeS--3mgW|?vU;)g>BoyJItzC;CZ6#6NuF(EEGmP({XQ<5*fr2fcJfZ!E?zwa59 F`6q*CcfbGu diff --git a/res/drawable-xhdpi/ic_widget_pressed.png b/res/drawable-xhdpi/ic_widget_pressed.png index 633c9c648f96421eb22f10ca51530c7f5aab8440..1dcaf37afc06107e00840bd4b9fad5d10f46f237 100644 GIT binary patch delta 956 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 AYybcN diff --git a/res/drawable-xhdpi/ic_widget_resize_handle.png b/res/drawable-xhdpi/ic_widget_resize_handle.png index f445a1c089691eff69eed563faff0361f741ca94..0e8dd6878740a86abc8db9de69fe3e5b8bd58378 100644 GIT binary patch delta 809 zcmV+^1J?ZD5VZ!78Gi%-0006sAte9+0{lrtK~#7FrPc$GG)Djh;Md*LbGGd(#q4= z_%jrCJ;!=D2!xX4`*R;DdZg(7+>&HKAU*s!2CD|?Fo&?e>VJ=$g6pF%Yd;ts!=wEW zeL1-PkDK;aK^Wo#6boxoHZtIYQ$ic`e@)Xg%*n(z{ol}r4^9C#vL*%dYv;h>9N(xJ zj)!$KCZ0y(Pk#Gf*f(-0TaKR7BP#Ib39g2%Z=V`x- zKukpDV~7!^_J8~5=gHIzBMR{K@!GFqsAgKBiN~*BA1{+r+(X~T9b$BF7--^`5RBQ*fbUMz!*b(WCU=$acc;mQghdJv+F*OW67v?? z06d~VdYu9X>vWIp`5K!y&%rv`BD}(k zZUulzKv`PkH8*n>d0kBd6-|2ya96(eqg;LmL`wVN_IzLu!OH~bE-^fA%JhHQi-DI2 z-XTDT>$2t&;BA5@2*|AkZWr^W0+7ea*ampr-3DNC1IUf)-{5A~@NbYU!iyaE?N&E) z_S2|I0a}@F}FLCKza-RT7PWJdwXC+{#x8!03t@u?`D2K2YK== z-)6BJ&qDv#yZOnpKyKr=a4f8i-jH++0UK@n;STSn@N3$Sx=;T%_CxqJ@1`H_7;OZ* zhTM?UN@3Ljc9RMUfM#Z1Rs2BZJr$P~XJ^X)+^p_ku&0TvrTcl4nyP>i@duWwG^zXf nS|Zv+;M@pVOdp}c7ApP&`EazNIV5cs00000NkvXXu0mjflEjey literal 2144 zcmZ8ic{tR27ypWwnBI&nl`YwZ7-I=zpF6To*|M7%W|U+f<62Wq6B(5&J8?@$&7jgS zxRi!#ZN$s%PPVSKsB{ZuyFc&y$NN0*^L@_uY|rPM=X}riJSX!s-hRLMVQ~P!en$tK zJH$112__2NHI|EPh>4uFb+rYc;ikkUX)mM;#kt#K0eetk5mHn_9Nb+2NP;`IS|PXqu{2*APUQm&f?1ywLf$=mZ*HD(d;7@AqOv4MO3Oi~qTZPnK(&tCyS$+t`zx!fG|Ct|FaxLBwJhLJ zR3tk-j<>{oeA{fi;yWSB9~~7fep&p(2zwSx;eh<-P+nR12(vG5fNT> zL2bR>?|h_tdwXqgpMSQfsjK5q6B2ZA^oE9pO$W6vZ6x{jAyqZjzZ`L7`L3uOhnWq? zlcI`ENZ_~=2vI9PTd1hs&dX!Djy#JHyj$+-I+>TDZ))0PCL`V`?M6M+V2k5^*O_d} z-{H{DX~}SDA4XX+s@RZ_dt9mc>kdv%*E!}G%p)9qdV2a5HBdQF<78{+gS=8{XVv&X zWkn^WZDt04XowV;ne1g`Z2SO6Us+i}U6pJv7Wt7Z?&ny6$EnfR<5N;LomH_O9=Y6K z80*v_J|A4`6!P-Y)hlqeNd58km6@5@j=KzRUk9jY{RI5>iUOWK^C0xl7X{66^FGPR zEp}t^h)f)x&#!k;^dIr|_3aV*%x1F(imNP*COuQqogdmtBEpJS>mNQ0Hw2Nf-Hp-2 z7%gS1ltK!Hg2bsoU%|J!_We9~sk|@}s|Dz_wdLNPo+HvZ{r&x(*R!$?6?sU3iu!s< zOG`^}1SvN5i$te>{>jN}BO`w2Z@@b<@OXThEpB0P(M?=J;-I33%wDCNVkp9IWN<4d z$Bk#kDT-tz_Ba7}`c$dFz`&pu5NWjhL<=RY>qTmHV||%0VPWBB21#V}Im;wa0uG1I zNFiE-P&da4*&oD#f@yR`VcZ?KO&Xb#-=bkQ-y?QFX;T8gj>>>39Q`0FND}<9yt*|f zY=FK)R}mt1GWKr>5tEXNGhiyJ44$7rK8u%TpnF29&jqWWkrCWbICj1<(r6&KwXW^} zm?<(myLA2Tab3R;IbE}h^t)O`d3kv>@MUhGWC~v`jidMXyX3`fSI5hIO^##Mr#f9@}dZL6ql43Zl>*+xcAbn5e~?ZwDz46=K{U^!o<+Ys2IIz);(V>8Ei}p zda&I3Ko&1}W^S&Q%eKF%Y@IgG|Me$ps1AXr*8qw6W`G;=FhBw1x{J=u&+jCDnrN%F zOkSnV&d!E?|Nh;=#Kc<%g|atQ=vr7<@PBb;Tv9_*^O!t*56}x}>PWRJ*QWEiEiH*q z-y_4q774kzxodAOJhRB+Jqz zjrMGU&sUk8@p)3OPNh+4-llJCj^sC zF~XYoQUC&4XxYBUN=UYFzUu2!eo`B2FuDg_e~OMw_L z&_^5V>Kp5#%{3_zASr6>_4kVoYAU}T#_tHxWH$6fu oa+bO;&73oXLp4Q+AuW!XA>3E}8~@S_OQ2Q;Pgg&ebxsLQ05c&TDgXcg delta 172 zcmd1U$2dWq38{)t0kSh|LD0aC@!07m-#7wT}!-BbQ>J+|CIe*c+ zf%k&YnP|pEMu&?I&d+>*=IYCnn#<>W%Gvo~tD4lSi~sNbl;C8Q`?r95t*X=k&Lj&f V>nP3>wm{1mJYD@<);T3K0RWlWK+FID diff --git a/res/drawable-xhdpi/page_hover_left_active.9.png b/res/drawable-xhdpi/page_hover_left_active.9.png index ba9478ece5c6708f15db82bac27ccd58171dd15f..3233efe281c4ae0b037eddd77a9e1ffb07f99bc9 100644 GIT binary patch delta 85 zcmdnXm@z@ppM`;e;r_vYfj~;%)5S5Qf-#w)>3_zASr6>_4kVoYAU}T#_tHxWH~+3E pxZ&0Bb=ksD(CdT>!ZbQ z;uvDl`*x}!SA&57%X5|9{7oNU{+#+WDn?m}GcHN-&Xk93s^T{!`ZAKgGp}4;(-+5- z(=aXJ9+$vW$!XmGe6|{I_xJa+d^#olH0%1Sssa7~-k&?}q4D7Zdu)d8MFzjTA6C{( Tk=HH)?PBnB^>bP0l+XkKA|^ke diff --git a/res/drawable-xhdpi/page_hover_right.9.png b/res/drawable-xhdpi/page_hover_right.9.png index 1243ea9ec91afcfce3ce61b832dc9dbd89142607..d82f809bfdc67a31e711e57b54f7fef06631013c 100644 GIT binary patch delta 89 zcmX@Wm@`2#n1z9X;r_vYfk4XG)5S5Qf-%{F@&82y(T212Zy2)nXxC+$b1nI=?CHMf sP@;ydmaoOu33Ej_)lv>Il%Hc_c)CMFX|ol}4WM=gPgg&ebxsLQ0D7h$C;$Ke delta 174 zcmc~fz&Js&o{fQlq4b2=Eg;2G?Bp530R%N1DIGvQXMsm#F#`j4CkQi|pFF)5D468w z;uvDlo1Aih_uu1*$q7K9qTtV-@Oi$=fddCV%;#J+bFz$d;;fUOY=je4cQA4@t9aen zc*0fi!tNfW+3u$OS#no>a?ct(aPyROo48qnQ}jcHY5npetSO97l*H#>-Y9mKVa5N9 V>3_2SJpx+C;OXk;vd$@?2>_@GKuiDt diff --git a/res/drawable-xhdpi/page_hover_right_active.9.png b/res/drawable-xhdpi/page_hover_right_active.9.png index 582261c9be432c66d074676f7c57496616cc3d74..819ea195ce9999129d57e97a09489ee3f94c37db 100644 GIT binary patch delta 89 zcmX@Wm@`2#n1z9X;r_vYfk4XG)5S5Qf-%{F@&82y(T212Zy2)nXxC+$b1nI=?D^ik s^>9E{$gF}aMQcqVpA#*N@8+;FcsNBXZRT0C2&kRG)78&qol`;+0F`(jsQ>@~ delta 174 zcmc~fz&Js&o{fQlq4b2=Eg;2G?Bp530R%N1DIGvQXMsm#F#`j4CkQi|pFF)5D468w z;uvDlo1Aih_uu1*$q7K9qTtV-@Oi$=fddCV%;#J+bFz$d;;fUOY=je4cQA4@t9aen zctTcT!SzO^+3u$OS#no>a?ct(aPyROo48qnQ}jcHY5npetSO97l*H#>-Y9mKVe9^k V=?0PSuL7-O@O1TaS?83{1OSHhKIZ@c diff --git a/res/drawable-xhdpi/portal_ring_inner.png b/res/drawable-xhdpi/portal_ring_inner.png index 7b6a8a04e8f0c6fb699543baa8e7872d7aacfd03..b088042e7a753e036fb42c3fb519d7bfffa82a97 100644 GIT binary patch literal 3275 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 JPDHLkV1i9cBlrLS literal 5983 zcmZ{IcQ{;a(D$)eCCWx`VX;InkszYmja@?QDiLL)wDnuq?Y)!FW4%Z0x_&mptR-HO$W;s@qr9v!e^s$^oXnM z$CB6{Zk%d-xvH!jmk)a6T;Xre?%9QcO@FGOP7DM0HHZJ-@!-9@W~j+N|JGy&nPuEc z3D57;Jv>&t^q~dnatosEa5HP$x1wB%+!%sCoRtZKsqE4vjnWk?Ii#1*KD?6d7i#>f z%1N`icnng;mFf_wGe}_Id0WF{$_t+<9t-~aEm3y-?fIH)ejfPy>3=5EH1qRX?wvyf zMuj%QhBl%eBF9Q)3jr{s0KgkV5+Wg@QCO?>z|b4~DQ7}y{ewxoN}hZgq30jkce{p` zIT+lOTd1WbA#wa%n~XsJ@nVn{xhzGUSYKOP8(F!bm_G2CA&gX>eaku@cJ@Y&Q%Mpb~3#1+^pOCt*!T&Tyj+Yt*Lb9meYWfa^`(V{kfim%%dK#u zF0&q7L$Qej+`Hfzso%6R zM#$Kj&!4!`=VshgTChP#^p3%En-VdJ6AM^WVA1H~@39)^%VR%&h^6?UC73ewD3H|% zZ3ujGYil5pQ&xTK%a`AG*-$qg-cR(=DG4&BZ!K$|z_r25GYd=02MEmg{TdG8t>K5}Y*;qRgM)+J z#lZCfPVb2Xlc*u_SZZvK7Nj_tU(L<_{!!npo!2Yu5%8yz?(&V8p;8#ta>q*YExawb zRHmCUOBf>kxWVZj-*OtUnIOXg?47I^DQTSl+w<2DYm#{WwS||BTOi>*DHTDd1>@*C z-K_pg{MkU}@RpRp-fQ+Sm>nb(IKUF}W!Cx&)q?O48)J_9UYyD#X7sYZSOO%BF@=24 zervbGm+M7XTtZRixu6F%{0%`$R#s!pPo;=LbC3{Mnlp`RNn9-@Kv?8qv>k7Qj(6}G zbflVpv`B>JmKI#M&A-&oCQeu}B(&p8?{Rkz$9tR%B*nak%;T>^oLZo<1f@ z*Tjrhc*-Z=E?eSL4XAgvwbgpZk>ROF5od8h;!-mq=HXX^Gsa%yUNTBEM6 zP9xqjEQ5h$M}}Ku+N_R`kEbvw?`OYB(Kj#{w%6C!*N7;Up%baPBWaqN7iCW*p2kgV zoI6t{zb}vJ-SE2@`t|GA<#KJDA3JMmbMdc_xe5knN83RdHWV%}J!U_B|0KQ?{d2B$ zw?e^rBDVvo|t5rGqB$sBpE34T`ZlRo-R?sSn~0*r%z28IMbcfDl02@ z9J#)q-TsJG5igSNky|Rt%X`DQv4`%478`Mi`)I5C=$f#Ih!*Z0fs#2VZ)Ge&c5b9A9l=#fqkmm6N1MuKnPSVnD&}e1!B~L6qn|T|d6kx# zbk|MP2Ld%G{I+JAoNr-m?D4f>E5`th?geVh$3j1U|4`0AvraFL)aIC*u|1#e@5I`;_|7)ilhyj0 zC}gL(q5w_4TmBzi74wfX&OR`D7=qMB!R4p@J;STi{j7IYy*V+Yfj~5)Y2|8%AQ&G( z-R)|}Q)qqbUENt|pBoH0i1C@IwQiqH)x|zm2rD;8^=h4C)U3J_uR7FBA5-Z=hob{l zmwRGe^D6TxdOA%a**p}6W0?iaMwpC9aQ3&q`($}Aq;dx3DqRvH9D&))yoYza!zV#x zApLwgzqq(4^q6$RL`?|8;sFMse(zt_wKC9GuU^&qEWIo_FYj+JeUp=+cP+86ae^Q_ zc@;ylX)w=_Zr7xXFo`G?b8hpRG78mOwKjYtcyl_^h|Sb^hxbNC5li5`&&1SbpQZta zYrqQ}maPv?ev|q%v28!cQfE>GLrOL8xGd%)e{X@LpMB=UxK`U+G#kYNeX$>X=R;KM zW$48X+y}~PbqW{ z#VO*5{7o;pa}%l402m+HgNwDtB-`PbC55a+m>{~V9Qeq5|FE)Gf4SVOh$SqF)k`1u zks1)^N#Y4JDM4b9QXH3rCy8t~(3t?7BawRT(3-(CcJA zl`XOFpKqSjlGvLuMq-G=!$WIr6+V>ochOeRMqX*c>$#F{Gb$N(>zO1A!f2(Aj*eJt6&MEQoGuY!6qur;Ir*kHT9xV&UhrDNg$y_4_CTF3677C z=DdPZ-{2k(M0{SwlMt?euQ?4lKiIYmVRS)P3WG01vNg`g*DLVzGt!UcgYVt~bOAEAa zI&p7rZxsA2DUceP)CUG`dZ~F|qNX1_3F%$gv$DkFZzEXbH&HD{rD8%X@iu{h-25r) zvwJIKUBW|K$49C38PC~-C5J(YsI_1qjJ+GE%0IAs%uBJwfnmCH@7_Im4Gr1DuF&8A+Ugn@7(4`B%u6%Lf4DE}OMH)}EN%KN7caWZIS_R5OS_!ByuA0eHaEe@98*8HEth)- zia=#qx$O}Ujx-L$)G>#4rr8Vb>t84hMbAY0Gy-m*|?GmTVOMVrgl!<+Iy}~G#(F0m4$ZMZ9dJrXK89r6sI|FZ*GEQ2zdy2AO00w{b)r&`LYimnr z^xz&34^OgrjafQh3RfzdD5xU(Xu{#9=^aDE+jk38CKVJFIY6dH5Quw2B1Q96?R05c zAl28`H_f`;|Kz8CQ1+yo2vljR6?PfM`Z(s0SHkDEKlJza=e8~q zxA=ZZ>n@@!D-tN;rW!If3S(npR39%q;?#ll^5+jj^M{=>+dZy{Z9_kaxll<&JLoW zpkPl<5%_B?#gQIvlx_Zbf&Nm9Pz8Vtk!o94W?CODDsu7iS{m@SVl|kkpK&jCoee{Z zIJ!E5T$`GjIFki5F34y^X^eKK>~r&KGx>*gzbYRa=4Pj_D1#Wu(BIEbuEE@$8HKGk zmjZd;cC^suBa3X^{P5ueVPm|)3mA zT@pwnuUsh=W6?uz}2nz>=C*%S-Eft$sX*nCUg3mrx}|vh!!%QgXLXs?Zqw-~6eJi2-(u(A&)UZyRbD7e9= ztIWqi1BF(C#?DFclNlOmrUipXHWs{$SM`b=UGG^N%9dADjA?6YdzF@!rqOxwJ^#-# zAt%yb9L1A01xs3V+=TsC{xUtaNn=Of$P} zm zv{22(-94&jIjqm_#g|joKuBA!^8El+end=+)Pt_zlLJuHWKk6^eRLh8X*-9Svfivh zaP>t*E*$&5BnG)io7ktVc0BKUyuHwVj0J(`Yu|N4Q1@jG4VMj{Da`0u?Sz@Jp$L4j zAeLYb?*&ceJXFIx>k!}WzdZz20GK&hC)ZrdD2uIcS#T(a)lecsq($IV*CGFCHBMhoO?a;0QC&VMj33H#(ISl>ziMxv zJNX*PytwPrw)1Mny>@oi;`8KW_nJ@lhTr>T!aL8_9=nFH$_)o;kFK$P{UES1kh}s* z?1RN4-!)1>!hv9QfrxInb_q;TQ88G($jiaS<;Pzr4Gra34mU;a@)++#V?|`rAp6=z zQq3ny5o(4$Zvajg0WTzOzW7c_!^BrrU46@@buJ%_Nw%$X%LHZcfbZlOKo7d$dDpD> zh5qfvAkw|hAg+plhph*K3Jp+AMk68!%Ks3Q89+Qk9}Q!Q1yM}}8sQ_%#W3=5WF$ER ztnehp=Y}|B7mxgG{uDn(Qzk_aQ>fw_Pt&fc})>ruXyRL(- zQ2W#*eY5T6FR9omxdG`UrA9|wTV37AFZVE)_Y{m<&7fgSP%^95x0jUIJ_Zqf=dhD+ z-tc#o^Z^qcY(^#m1IA&|d8+{P35zmQ|mq@UST0cRn@;{jS@`W}^yJWJWqGHW= zeMI`~PbmNF-~BtO4iKalsjV@|R$2+Z=~vEJ6s9OQ1Eh`WR*e*GJQBs+$4g4SRHTe6 zd?nVdkFCZ5*k>qawi;#RAL})+VpsCpu*JC~`=(oytZRpvbBoz|nupu-#-5TxBMB{w z+!xMRT+DsVr3hf7*r5rLYlbp%uFRswLZ1<{v`zltx869Kia<&Yv&|~Es9#vr|0s|Z z*!VMaSUh$K7f#>8qh|_M=QfO;mFYZO8lg2eRcSEmUz{RvHyDJP7t$6VNoZ#>#hIxn zBwd0w*XW8qEIpQLq^=|uJJ6de6toJNN{9WZP~xQ}c30tP9;&$-*cLFdsXe4Hq2Ow) zVobf`I!#$@?u~Bwt+ShRdS+VT21QJ$IW)4hSuo$vwL(@B6RW6nru+d1h2xAGbbGE{ z?bMzJO_asl<<#I^?8{F)Cfls6SJi-pJ`ESU>gW%8lL$f;Js$6`WiRda!=LT<>I6hh5r`q$zC$O`dye!l9Fi`V?n7GjIZz7)!`4p9+Mk5BBooi!1R z>=OU;o=;C}zvria7Hi3-63S{e_`j*LZd$YZE~*MSC&JOnu>{>B%Fw_N*OGAaKo?v&0JLcn4fP>(kaJKShP-uU~;*Y;_D1|lW% zoN!ipL&1P?K=kVqYVOI44#8-xx##N>4v4~l0R@&V-!%%Zk!099UYjxXYHLhqJS>_G z?dxv*?kVqPBtzf~o5R+zW#Fr0%P;4?=p?vr`Q=|7w`IUii2~W<5|w#6ZX2@Ijh?9> zbS7jrPMJC8!ArhFhA5XZq&Z%nRdY43fdYVgl&`n(TPME_%4Ew>?u#@zAMf1jWa@$f zfjpu4+y8p(Q&440$iZL~5*#`B%VT0D6cjig36YDX+4IP0T{l4iVl{19 zdG8&cCi2lCQl-tFJI?j4i2}u}UT?^~H-8$>wGdi-u{?5GLFy2Uq3c#$a@$WXQo?Tb zmS>Oju8RW4yY90`%H3;nvMhw`LnY^(|VQ0I`1I>X=P{af_d7#oj{42)uiYYz)4Cz~%j zsnbX2ds0opanK0w z_%kX%V33=HFw~R{NI@frr)&TPPA?(y4Kby{YeF-^Ybpf-1E6#hqOPm6`a?6U{@2w* zrJoQ^PR$%>Nc9}BJ&qG1FDrwSpdq1&^4v?#6GGsFds|h|5Ucv&-cqaS2$?#X85+Vg zb+mIKq66Hc6`Inc4ZJcXyz;Nn`CFhV{ua?ejuX=0F^57^%pnaPrwNfwceg=oLQ~k> zeJ~j8TnNAehcR@8F>n|dNGBl_u7Jjb%0Uhjk}}7ha%haFBBg_!mMWPsXpGqx1WM~p z)r@E@B=0Pc7_yu{+!3HZ z|8jQ@K(ZuH7|&jxZQEAp5W2wGw)MYzwr$(CZQESi9Bl8Xs;e%xrYC#)^zWY4OjSh> z7H?nv;`=glTE#J1%Vn1ZWCp?lR?Dsu0;u_92BHy^iDGdlGpUss2(7iclbP!q5Qoe_ zh{K51S`Og>seuF>z^#{E4jjN&Dl-s&sUD{VAUyb}7BYEj45)>nIISo|uq&4uNLdl; z!>VP@WXKHUY`P80hzZlPeMD9uJ~Ax}BeiH5mKRX7WCfyT|UhRI*cSQrj&M;!7)BQhY|WE%on>+Pva)EKNTsY_aI7y1ad3%3sh!u!=A zlK%}U$o9q7?m{Tc{@)NC2Q>^6v1J4j8bXp;H>p*bN@FQ|s1sXd)}cBmDkKsh2!#br zQ@>5i-rS{vu^8!1E7+E<)3SsAb0FrAbddou+A~b9t+pQ-Sp_Txa8$vOk$-G6k|`P{ zQp@0Am_-EZk7u4)Py;;LcNM~!1s~50sRJ_zjs{o;dseC&hkh_9b*%$HoD%yzM1002B&q_PliGMR%ou5|w7Dfz&M@bW!~wO#?O3X#*94$PL?w&EjGwV zpj{djh=Q6DuPH3t|E%}o=Tek}sAh0qx|#gber>i+wXWb;mVX2wT=eWke@x_$HB+38rDzq z4rO~lA|Iz*yVg8@S>l69N@9!c?&bQ z;87m}hFu)yq-ry{;vY7eakIw%$cMA}1sDTPzoSwdF)zF_tFFTUz0%nF`PNRsUMV56_j1>WJ z#zBI3F9ac;6|pHVU-Rm-w?28r!x!F_oR9>GkYFr5hFrt;=>2bOcVKxit{Q8aOE$kI#-5tA4Gg~cQSi=GG|7ARC3!(K-s0K+xHtjsMs)|1N|d=EjY=Ai|&YUrv(D+nq`xGyAP5^GBNu zFwn=J$ebu#TR3`tA3_d{0%P1D_*|l7k)-EfalJ^4HTQpVAovC%py$ORP_nD~gh3L9 wlQ0KJ^&VpKAo-0L0iqvG6y*KyKkARS6DxbYS^87T{r~^~07*qoM6N<$f{VVYH~;_u literal 5569 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 aZFOy}Y`jUIZU41W0X0=kLJ8h7_;Xe2M^!|u@ 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 SdH(w%!^lc0N!E&+g!~WT)GC1h literal 10394 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 a?R4y{Z2jIM?f#1qL{oXK38|BZhW{T~m#(t_ diff --git a/res/drawable-xhdpi/portal_ring_rest.png b/res/drawable-xhdpi/portal_ring_rest.png index 544a74f9f8db816aaf73d859220a540c57846465..7d1c8423675f1d10366e117131285c751922a2ea 100644 GIT binary patch delta 2053 zcmV+g2>SP`9f%N+8Gi%-003<1Jiq_|2hT}FK~#7F?VN>oBRLYrKdF;Ayo^J~S!Q@} z%*@QpeD_xzGcz;OFfQ+SoY|nmPMl8GGv3%ClcY1$(~F*$JeJ%C{nhIpmim{ks&kjw>K^s!HR zM(52evegv2On*EbDxbS2e(;7F`;g2M9tYu#U%u<5?E^|bsRpZ;hUA1<9H0Bkz^ML% zk`Mz0WLv!BN4MSdx{j+9q&DHvNiP6~!qC0HeoE3b)Q-{b965N8BuLV92j^M7}J=cx;zWM~GFHHF7(fU`Gm zdj~q3f~$i>F8Ra9+(Ur!%n@0$c_)Owe=K5U(Msl|Nqkw_=lsUUSLW=lQSi zf3akgNmisuSl8tr@A~>kp(!)GX7Jkh;_G{#E1_)S8QVl2|G}=$56dPHy)*8d9{AEr z`d_S1JAXGSBYsGJc0$|QFd|38BLCR*EoZ-6I>b}dM9+Tt^v$&$L2?PGo6CW1+ukl2 zT)IbVOSbJDhqqJ52AEqwI@n(sx%GXj6I6TdMD4TlruV)wQbBZ`q6`H1t(SN^9OD^? z-i~j*L<2HcfEsV__WtL)P0sp6?SKB>?FOQ=8h_;Ax4aG>;k6FYEAPs|9o8V>vFPQI zD}j~+B64N)^2WO9u1VGsafD@!$2Y&_r6Pk>0_kZ+-k_;G8L82f4+kjNkxlIu` zpg?Xzw>{eq=GFv)RvB;&B>RAA0f`_bD}ZSifU0t3QiZ?)3&^BuPvgKr-`_+j(Epn# zVG~Qfn-o=0vBU-nfdUq=ffETRD7%2F8u-z2W-T9Jl1k)}S^Lqlej>{$s){ld-+w?c zAP*Ia*gz^?lu%YvluEi9lS5hL0|U$>i^(D5<5Ly@4aA>~r1R@2AqbVQj&$K?BL<$` zV*)asOAf9e7eF0K*P-=3`V&vF-))er~%nh>d$9Ty6Dq>w1@3PDfcpo?M)qWH5PKRkytifDz3NMjE1 z!+-V(ko_f7i=_mxQ1m%z0D&3%S{4!S6)yhR1@RDSm_Ci3%Gb$?um0;`zE zM1IdNPUUMmL%BK!DMcy7?xpDO#?-viGf`j-^B7adfA_B?^3P$4f;`lS-y0m-JAwrD zQ#ZXcfe{St{r(`~5g_2C26Y_@N*3{z{iDb3!>s*8rR1E&eHcCVmHp5=>iSdm0Zk7@ z<*vjR{x*IrhDoeg?x;nqV1E)Zj34{L-;|&oP5&$dnx~o4B>8!`Fpc(E=pX-k_ zD|14yqM7xR(QRyf=L#3#@XEm&hRY$184O`U%pU&EuSYT(tfc*ugy$CU!GF9d@0^k& z-RGsxOCt|e#l)k+tZ=L&g=q{Uj^xClpZ+qoNzQG-ldT&oAph$9oLM^(>zn20oIWRo z3~~^9(Bq-dir7FJ3x9}X6jNB7iT?iE`)5|E%BcV#%sD34fToKI%-nP|edKuiIQO#W z``$8A$YKq-aumsm5{k%U16e!(9|^?EF@a=ZA$Ip4zkgu#v~ds#LNo__Tmu^QXKqSe zZX$d8$jI&8OSw{}f4L)xBoL&h~nEXKln)=EQnoW%G1qDKUR2B_tGugd!mF zFRW9xwNy?VzUI&^Xd0B9g8qY6!b zppgj6#4|vt>V7OtfV!IDHL8$5I04Ah3~R(0@>KxNF2b0?~`$`x(TS!!go6T jA1YL+P@zJF3Ki<#kBK0I&k<9000000NkvXXu0mjfYYzI_ literal 3754 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 GG5-T!LHKn5 diff --git a/res/drawable-xhdpi/quantum_panel_bitmap.9.png b/res/drawable-xhdpi/quantum_panel_bitmap.9.png index 13bdf09ec6e6e8120d0347eaf8b71c25d8b8682d..b89e8b41031de46fa12bde72666f6db5941720bc 100644 GIT binary patch delta 523 zcmV+m0`&dM2AKqq8Gi%-001TtOAY`40pLkQK~#7F?bt=W6fqFT@n0o9_yOJ?cjp8w zu|1rG6%L1hi{NZFJp%;rn8IUxXpOjgVq3vaUs` z+FUxN^Gwb#XtL4)3J&)X%>xxB!PZx0;(Q`At4w4hv2>9Maew&dyH}kX?GaB_EQY%; zj&8csSW}ZmQ$5w=otrMPgff|bzIWRLY9jW5toSUcsjE-g5+!2fMew-At532Y#fTq~ z_QvDa8k!A4dKbU8xgomN##70Jp_GVX$OIMc69`qCG@)1wgo@BdO4@uVoeJL|o2XH= zO5TC}ByKFELx1`-lV)etF~ckwaIhsZp%^Us1(kma&2rEM=LrWgAsO zfyPGaCJ53!2gBo$%qopYM7zl*DmW-G90g66ePsDDh5fgOv8rN#bR=)lx;{X5v N07*qoL^A@a delta 831 zcmV-F1Hk;51j`1H8Gi-<004{_gM|P900eVFNmK|32nc)#WQYI&010qNS#tmY3yA;# z3yA?Y$;+((00QkvL_t(&f$f{Ij@mF7$N!Fj7U+KW1}7l~r0&%XUHc~NUHb?;K)bWw z*rigXi#k+g$TM_ch7t(2JH#J2A#nnilHleiSqXQ<{Qvnr+kb#Rm{JOiF;s-Asv}Kh z!dhIQY&x)<^Ey#E=O=UuI${~e^xv+HGLC6;nPzQ5)5bjA>NJ`*D0Ne*|0O6BNixTg zG+AdPO_Ksiv!x+(96%31KL~<%VHiFOA@)*ARc8}I?87j84uaqjKwoP#gOIo>S!)6?_b8==5CTe7 zz2=_>V+@>gc%FydZuf0C9DV>0AvQ@y3FYPWV;mXh{6Q%NDP`>j0l?J4Ie$RGWSD1? zp6mhWFvjkw}8^;S%#-;EuxO+3iDpuyy7Ei!4nxItJomYG!84Wz5pq=)Li zvS=J-()H$PO}avB(iK{huF#rvh1R4iv?g7lHR%eiNmpo1xlBG^q4r+S#oGDm5crp*|wpQa5XT-SMI=tY z*B{r3V~q=8F$O5fBy~dP0!gC5Ty>HfmuqCrlhjD3vGMDwA%6l~y=CX#Vr={rBJLA# zo#mMMTG{I!e)Zt?)$lP2jG;9ZOtEsy&fOD}Q|AC+9MY;@r`_8B`oZm+05FiL@?2zS zT{B5OF)?`*5yzPboDVZYorQ>yXBl9YjSYJPfCFk>-F!&INyq=O_27$`1z2w}Gm!Kl zy#-H(MZ`&`K!1c8@I^$BL`g42k%O-paX1C6js!qV_+AFZQC3BwKJfrBq*<&Tc?2>5 zP2MQLKUmkCIZdVNYwnFo^?TR!2N}M_6l55h^d!T;cq9=)ibX`xNdDCir9a7VWw7MS zkcKp*Aq{CrLmJYMhBTxh4QWV28WL@i%LK`ge(`dfB!5>yvU*RDZaLj+kzn&rh0000`6pHRA_Xb`tmYd_LFrI`)aEDk4HnXn$P|S!xTcrwdf=4wAFo zB$~6GVNlYLY*?q?yKB^2r{y-v76qCX3+&RQXj;(NMN^+8sFF!17m}20GLyb!L{c_G zo}@1l0O6CP^r zjOvefFBaEVmwzw6olU<2x5QaZpQ~EbU02<7Jf570$ViPLG6vPU=ltyu5yBuqf?zlv zPfmbWth;NJ-ap7|$6Jd8!BYUE+PENqs$y&$HnzgSFi+C$8~_6m4n@EiQ**exV~jxr zL^vcKTil?Sp^_wVbM;5MH*rU!M6zsj4dZ>9@1mPo#eX#*j&&aXZtPGK z?N22M${xa|MP1`<=&lj#(0;~a$8Gi%-008`&uY>>q0CP!1K~#7F?bNjaLNNeE(Hm`WXA5MTbWA~; zVd*ji@~!%g+q?B?9|b#=R5FP|H%uXc6M(>m^002ov JPDHLkV1mCPL+Stk delta 256 zcmV+b0ssE20g(cb8Gi-<0035#XAb}X00eVFNmK|32nc)#WQYI&010qNS#tmY3yA;# z3yA?Y$;+((006T|L_t(YiS5?04#FT5h2bC65SDK64*HaRNO$*+E`(@{ONmtzZ4H-+ zlQ0x$zJv?ORjf-|xi3d;S=95~*Ps4Kn#TmB{Q^G>!*Gf*>UqK-0LGZfdw&MVs0KRc z+))Bt_Z z3pxR}zV8Vk7zxc<8-Y8#)>8u=a;@kHT!HcZ5=kGi0(b!1fFBP*Co1v)0000 diff --git a/res/drawable-xhdpi/screenpanel_hover.9.png b/res/drawable-xhdpi/screenpanel_hover.9.png index a2e200f131e7ef39c6770c6eef024eb7ab5777e9..55b4d6ed25b5b052e04d6d3d635a5792a1c57f68 100644 GIT binary patch delta 157 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 g^2$4R_LV!Z diff --git a/res/drawable-xhdpi/virtual_preload_folder.9.png b/res/drawable-xhdpi/virtual_preload_folder.9.png index 1f9202b41ff7424b81e607d80d53c0cf51efa691..cb3fdca4e57316a3b892836a06e6cd040ce57ffb 100644 GIT binary patch delta 1649 zcmV-%29EjNAomQA8Gi%-001Bg*meK_20lqdK~#7F?VVM0+&mhF?U|;`%=j~u@oM>B zn3TEc)$*2^nVCCTrn@pTGgGkKr*PdY)6wcI%2vI0u4BrMYzw{&L46<##50$uszF9>ky4x z1%cv(d7dfEiwvcbP5)wtav_T`B1{RFKp@18OaX4^SC}>rx4&Y0rgm-+ia7)du{hIr zyNwoxL!t%SGL1K33dIltpOdVH#2J2KI4pj`DYaFS`F}h{5NO3MC6wFrBA*cjk&j;7 zR@%Nrs~A9_zd97Mjw(hJMHSYm!z2Tu3IUV(N&rvjk7-0%nDkedWGuvt5(I+$UupU> zjg1(I##~ln`9HxZKp@CcrP;NVG-4=9vQ~*_89|33VDew3$-faaVl0CEO^NA$n9f32 ztTZ>?aDRyyuf(<3K?n>|Rs}r_7l|Iq3S)>v5QtZr`HSH)@fYP!6z>28K3AqjlMEM% zNy_x;3!5QONZBe08!i=LWinmJUI_AlxQ3u>Ap}_?|FLX@KuB6Crc=Uju_#Wuw89M8 z1c4ILe!+ddHe4>g=AN|QP{JMviM$l$kA?@tAAhBY6K#M%V`;Ux&hUt&73Omq=Mn-Y z`=$MYs-A&RRoZVjfSEf89eF8A55q&EhZK3oTtFZoog*X>^b~|3Nzyq*Fy{~wB$_`p zJSKiBMW2vE2$-Bf>>wK+l(aLQgqbr4zm!O}@FaxhQV)KaGYA{R59~5LDt3uJY{&rw zs((rIgOFz-grxaG^~fQN71b|bdKQ8yonelR7=m=mWSHS$F--L1e1s5aAnnmq^fZKu z(tcQj$RJD>6}KB6mvojrF)|2A*4B+4TT`Bh00Nc8Cdvycdme(?8_N*72zI9pA4odN z?_wRoB2j6kFCfei{aIuk!bwr7jV~aymVZYDOAv_TiKtZ07ZA!xmk8plLHHiAO=VfxH;(Y7N2&-wcaF%oKeZVGY7RMTMTefzVU*>F?GcY!MZH;}Zt* zl6s3Z2**W*#=e2jSoG<*B?!`0s9L^(P)qdbiZuwgM1>N*flxy9=~ko=3i$>?L4U+K znl%Vwht}}0EcZ%7(4T`I81=tMAw5~r(`LPZ(o5+`H&r(J2EzJ`n<{#HO>ea7E%%cV z9lq$pm##iNh7-f0K9JQ%^ZJs;Btu`)Xyg~S^c6l?ROh+(m(=`5 zy3AR_(ARo%f5E$XUcKOLlI)wS{(mW$5kt_AK7{tL{+%Zf{7!x*Z2yDtdwk`31YfBS#+|VaD4w^h z1B3|YT@wi*3X|+PJCPI$+ifiKg<>o-(Uk}$s>U+fVyLB4W>bSbV>UI^Nq^h1uqSNC z!cH5|{m=CVbpOY6-imOU(&Q?N#S}p?Rx0rv31?wr-rT`W^na~c*q9fNy`g=47KZja3E6IFA7W<~hW7DpNo`Of%hU$v z8A=6P0F-Aa=d(y{kVpx4CAnzGAxDy2{GP4ZB)Mqp&U7c8NXs_e$@GZRolMU*-AOu~ zFx{N^ru!!n-)vw8JqW!|d=vM!R-8zD(}Njo_(bBH?gYG&0_nK}DQb{5@=HvwCBr&z z8-Vj78CIT6i`Kv&3Gxz1FiqnifmeVvZ#TDNCGC zLb6ke8b;bUDqBgSL=-C0Z=7>FzwaOC`u_2Kuj_rE=YF31^SM9I{oK#>zHf@Fvz?r@ zy0n;>m>iiza2K_48#ho&^h}l9`d!qh@rYi$eQbYT1cgHvv!=2A=wLFF53NBSRDpjzpSa zOw5p2@ZT3y6pcgkH*+W0{vAtXSwI7Mybv=(!-$9oLtDSqrQo&{8-^sgl_L!6xcA!c#^PLwERhLMyI zLnOk;kjdOw*Pq^8o;&^jW&Eo**CQ%~Zs<r`~-_~_um6;IEvJmxp0C+ zn?eaDu&H58I*UgpSU^QH2wD)$%m_{KNBUum;Am5-KOBR`n7}DCe+ryNr($t*4AsPs zj{3>-Z+M(B(He)vqLJ3tC?t}IF~u8U@Mt4rBO(?c3*mY&diZkInI5vx9$DfomX}$L0pIL%=pRV0|YFHHfug@7&muW5BfKr_P-|2P$bH5 zqf-8(a()hp%5kIn&p8ko|C}T`OLTlVqI2Sr5VkBPCVQGpu=a?2F?(39X8(TWF%_av z0)F+X$+t%f#`$rNOcU>5u8>@BXUCp82PT-0?FNESQsO$AP9SAavebzlT7_=<7La(B zp5iLf&05vqgud>S3t8`t%#rb-!-nj)bKLRfm09jw$4WKZza4$!VbsdS_CF$q4z5~0 zef*e$%5zL|8$hAfN_AaTVQ~|;Oh2Cro_5_k5FHGbMA-viaSGPO1XlnDK$JTk?^teQ z5m(ZZQo|Uko@=@Q_$oU|Ah89td>4Fr+~?E0`0YD?EMh0YH0?<_!F&EFA1k;79tQ7u z_x}BG4)CPLy6U0+SlPG>I{~JB3qx(2qO|JN7ELEr!1s>8@L$i3Z^=dSU-3_7u9a`z z#gv((2u^^zx54ny_blaeH}lgVmzHOj!tp1int6-#CW0BR_|epM@B9maWiP z?a?y%9&+wUhasTh{V71RjP!}Y(y8~R0>Vt=^sb~Y5Zbn}A57StRr|F}{qpKGyP0Jb zE3E}%@vNGA3E@(cBM7Z=n~74ymO%`tsD4W-rJyDGrUrytT=PKrkB6Nfu}2qE@XZfU z0_7{?>-jno*#oDA-!so8z48`d^rw;gI;{>ryhktA&87IhpNbh+I+G8PP(r6JjJAzG z)CLrU-}vef>$lFV6uW}9i{4>VougMN*Qau?q<@R21*nKGgl$iNB`~fS=~FW*@I~uk z3evVpB;A0Lb(yM6U?ySIudY2FTkmlHF}!1?3-_cO69hXWcNSh={p1nx7{RLhc}IsL zCrF@UXpOKcJHvP_)zy6~PaW`?n?32E zW25E$OS3*1rRxj`jg7FkOOq2q9+1%;5`x>>LIuHPz8xuBm?^EOi+{r1rlJDwjPVG* z=%)G=f{EKY3%$gMq8UtT3QQC~Nt2@h9;p@#lY=ZxzHVTO`|Zj`|18aphI2lLHn)$u zB8$ayC{L$j`MpL;2K%#A299PWNDpUB3m=WE&!>Pb5^tfG`%4&ZDOCdlzkZH9*Arg( zOQ-Yi=%V|DV+z*y_@sJ503@|V0d0RrnNg;bX zTlr5H>V^j|*9t=FCJ$>%k4!}N?F>CdL)hG1y0^Dtk^_s)Iw|!oq~(og;dIAZvGq6M zOiSG5gYnX5J(%S&v8u##xhomgafkDsk)mLI z{_3X2Dhjup_`n@opDf3D3~sRR(>W_oR#>UD=$%qtPSid3b_W?S41UsnEWPfof4rd{ z9?+EUlDC#4JnP07kf+~Q&pI_{d#W~%oAEI!%W`$vyQ$o=O0!o>D=@W<2Z9vwJD~;^n5f(DsaC zsOLp1AApI<%t-N=8Yp<|C2s$%h)BJX5B7R-Or4}_l@aqFV+g}JjtPnebf(Diy+LN@ z5^9*X-!tE}Lz7+SGlA^}^iyu_$CHMjFRE$Km;v|Y@^_iSm@Kfw;NVGQTU)=PTSnnMS zU3)UQ;iuU@@-qk2c&GEIv5ci7hd%7uPR9*>W$Q-s_d#8gn5ruVAUJ2^}c zP79;da>LI1pa&5fr5jfBxEfTw7sZ-3^$Mkk`+{P7Ng1(DDAZw7BNSivekoI z#`GG$ci0?bxvC^(~@i6l)&ifYkMtnND@OyyX@fgRgCc;p3Dve|{Iu_h~ z^Kh`AJ1lPdPV_@gnxd!rAT6c%@v|MjJV@gvxL@UJmuapx^=Qky?bW~N+G6)%YCvOv zthMz}TCe0jsq^aF{4TBPA6;WQ+>$uTOUduYo%a&ax|}=ih@U0aa3p3p!fS56ABP6R z``g6BaJ?Kx)P;S%g$aola%K1Eu4(HXCw-AOrW+`PTqmdx&)eL2LsWNK?^5pga?IoM z@A)@q3a$}VaNVM6jn|pCy#oc1yEaV*H%6cZ2aaXcO_opCQ^zgB@}@^3iGWU7>U=0I zxYfzY2g8!-k!eV&F6<F9MYpl$6jF ziKLHmSs$?SI-MT|ybn^)${AZ-Z}SeZFs}-|`%()k!+<`Cna^Xi)E0quiW~3Yr_sL; z;NyvEv+!2ovpt1odz}0o%42HmfmRb-^QjiZy9Y5dotW`!!Gx{dnBQjWuHutiLg|A% zegA!DvV4sYYiCrIEWf{Y5iYC?TNji`?_|93SWUBum*=%o%ryEj_Pe z-Oa6GNxfTP;l^&v5(I9~fNr*jRWkNUHE*uNR$yuFI{n(nTOY4a=Yg?$Looil)wk@Apb?vVI~6X} zuApbm!SVV+Vvknfg7e#DF6X!9B&X%+f>OxZ%};$@V|uMZgIhnIDU8LApOTzp9WA&s zrU-cnNyL}q6V-lXfJ-{HV@IUD=NW!Jp#&g*!t{_{^6!BkXP18K8k1|bY1ncF=%EXe zxIDe1x$7hJ_08S9DcDHUv7BJIN9dJEs2A!B7ZQKDyR&I*bYZC8p`)|!lEZf`r`EC( zg8oI-(Xwu9`~@&sJIjLQ+_N`L>&eLbL)==I{L)q3JX#vHQ8&*}TD-w-bl5AU$Q7!; zD;Jnlsjd_vp|%7}y?Q`2k`0uG#o<$mfDnAZR3OvyN@`_Q*w*lQO9@#qs}pU;w0Ei_ P8$bMHqBEfy?;H1jt`9SB diff --git a/res/drawable-xhdpi/widget_resize_frame.9.png b/res/drawable-xhdpi/widget_resize_frame.9.png index bf7cc6b82e233deb9b6146a4b880a8ec636d206f..563c75d15c1412433d85f974de0ca89d68c08834 100644 GIT binary patch delta 193 zcmaFIe35a2L_G^L0|SFVK;UB_B^2Nj;tHhyBLN`S?oGD_kYXtb@(X6Dx8MKX?(8)n zKg-j_F{C2y?bVIE4F)`{fz4CwI#?qVtqmGx@Bgo5;-M$tsx;-$ozTpAPmcBN4OiJ& zJ70Z*hl)_Ai_*jsrQLmcJLd$>wNkrn`}&@4_MSRD+o>*5T$cN8US#>XXBKB2J4B^N d%EgE>#y8i44|9G$>jt!z!PC{xWt~$(697tSPM`n) literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^g&@qq1|%QV`CI@}EX7WqAsj$Z!;#Vf4nJ zaCd?*qxs3xYZ(|ACwRIzhE&XXd)LtKumOWZ;O<9pU(#A5cR$HFJCZ8d{c zPG6k9SEcA#RQ4H5_cK)m_TLZ4+_tiaqB>SKtWf{} diff --git a/res/drawable-xhdpi/widget_resize_shadow.9.png b/res/drawable-xhdpi/widget_resize_shadow.9.png index 96dee7f0120a3e840c780c4e4ba0c54b40f8d8ff..2b1ac05f0c804e9a0437912f7dbc456b6b5c260b 100644 GIT binary patch literal 369 zcmeAS@N?(olHy`uVBq!ia0vp^g&@qq0wg`kTcQ~l7%e!wYYitk22ql`3Lw44)6Uxb@zpPs$Nqx0vEY-3gKbo+kvEcQrN|U zRM?dCMW(Qad~i}(;@0!z3A^y;^GQ)hKJ;3r#b1~pWVra>n;BQKzvd%t@B(V6sCB=fR* z*_n_j)}d!gRtgtOor=#o5v+R6L}qiFm2T1kt6$q^cTEryEV8O{TgEK)^5qFd-ABTv z!rZSJb$zbbEOl$?Iq|vC)#(4Wi3B|c^mD~y&nZ9t#UE$?aqi#Ur;B^P0)vvl)78&q Iol`;+011(p{Qv*} literal 669 zcmeAS@N?(olHy`uVBq!ia0vp^g&@qq1|%QV`CI@}EX7WqAsj$Z!;#Vf4nJ zaCd?*qxs3xYZ(}r>^)r^Ln`LHy?Zflwu1!g!_8&4w$%PNUpwWL*Q~ckn?iQ3(s_LJ zoBb^RM@n7_Es30rE>Z7o*KR%Vg?s+-zXw*Wm6zMgwrj2+V-H7y3xhI~gy4Y=1~(Q1 zr3NYr9XP!>`~jQp=lJ(mi+@f{@?V~GWZIJ%g(8+IaVO?IDV|xkJm5@M`{l<*Z$D1j zTgquunal=S2 zDSxN%{Yf=vcT~iQDL&GC{O;(q)9tl0?{}1!$-Um~_nRaMc}j_)@P*dBEX`?K`l zE}z#Y&%Al=cis8TnTvau$K|T1J=Xi@?RMg(V6@wwe$Uf;y1SGOXa4{4{nh*B2Ucqo s-?;w&=l#8$G>ws8Zff_vLc)JDH)XlrKxXKn%XL7CsU*lRIE}&8gi#X6Q}lFk r45?sDc3@_2TYq2$3ak%l&}3kc|6Q5ve&_QApkfA3S3j3^P6NS%G}U;vjb? zhIQv;UIIA^$sR$zKn-dP3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh z?!xdN1Q+aGJ{c&&S>O>_45U54*zIJt9ng3)PZ!6Kid%0lGV(S!2prf@eME_Cb3Zr7 zn$Qg?+3#!l_HVtmD=n>WyK_a`ML{=r3E9MwmJ!Zit~tl6D9ZAo=kAFFU{I=-xJHzu zB$lLFB^RXvDF!10Lt|Y-16>2d5JL+q0~0F~Alux^z@SrCJ{?6vZhlH;S|x4`KMI!L x25OK5*$|wcR#Ki=l*-_klAn~S;F+74o*I;zm{M7IG8Gix44$rjF6*2UngCtUy*mH^ diff --git a/res/drawable-xhdpi/workspace_bg.9.png b/res/drawable-xhdpi/workspace_bg.9.png index 72269f207a5af6e545efb099fa67ddc343be1ff5..0b80cbf34a033095b84e9a549747ba9f3f544f42 100644 GIT binary patch delta 163 zcmV;U09^n70ki>-8Gi%-004|^vt|GQ0DDP9K~#7F#gv5#z(5Q`)BEtrhfk5Y1nxnx zlBBPlUXe6OYw0x|lul(gjTTTbfX^jl6;np4GoSPCo!?I1AFv(BfKJ;?P!$J~gZnK$ zFns{=IV?`fFM(vf83s_HAe`^yvz*QXY(Vzqb2**z?}3@=n;ZZKDDaeO6*DlEfh0M$ Rk9hz9002ovPDHLkV1nR4MC^;;mtQtadz!T|&|94Q?@K4*bPWHAE+cP9ulnx8zq7AUyT z)5S3)qV?&F(|ku1c$k;h{H&|oJl$5|tKv4#tXW0fIsJ?my$y{S7Dvk;xRr0vaP9Q& z!y9!46#~D!xH0e2%pr|_~ mx4f)Y3r@=AX83#lsQ%gNjtPfNtcrlHW$<+Mb6Mw<&;$Tfm0|b* diff --git a/res/drawable-xxhdpi/cling_bg.9.png b/res/drawable-xxhdpi/cling_bg.9.png index dc9f69ae986883d4bc77b351ead6fa3f537df092..d31ea70926c84971e98db66e92b305e4dc6592a1 100644 GIT binary patch delta 2449 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 C>pHIh diff --git a/res/drawable-xxhdpi/ic_all_apps_bg_hand.png b/res/drawable-xxhdpi/ic_all_apps_bg_hand.png index e107c2e88ee5a6b9e7501cbff83f1b62f2f01546..ed694f8464c355b750e668a48b5be427e5fa0bcc 100644 GIT binary patch literal 28211 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

Z{v#J(ldZ8zx;Oy@u=!-6m3K#v1 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 diff --git a/res/drawable-xxhdpi/ic_all_apps_bg_icon_1.png b/res/drawable-xxhdpi/ic_all_apps_bg_icon_1.png index 7482830428d40641a938adfea4878ee980f60b09..5cb042786abe7a87f88154393a4738994e434fb0 100644 GIT binary patch literal 5089 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 XH##sdP7(DB00000NkvXXu0mjf2-NU3 diff --git a/res/drawable-xxhdpi/ic_all_apps_bg_icon_2.png b/res/drawable-xxhdpi/ic_all_apps_bg_icon_2.png index 028c7f44dd9e782288d896e0a539f8da16cd10fe..cd0322ba5fcfe2f08cd305ee51ba90314cc14654 100644 GIT binary patch literal 5339 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

Ufs{yx2MJ4}5vMa2BqaRXhj*!eLBL> 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 diff --git a/res/drawable-xxhdpi/ic_all_apps_bg_icon_3.png b/res/drawable-xxhdpi/ic_all_apps_bg_icon_3.png index dce7b67154eff5bfbce4d33b95490bcf52fe5053..19ffc2dccabe8e7b54ad811ba82f9dcd0254ec95 100644 GIT binary patch literal 7192 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 TmO1c80-lzdzG|(qZRGy|@Sfg5 literal 9256 zcmZ8{by!qiwD!;?k^<5(l!BDR3^|fRmvncRbTc3!C^#U9q#zAL$N(Z80wN7V!+>tn)mBAU0{{r-0stao0D!B9qR1@(z)uhW*s%ftz@GsCTCeP8 z9jS*K_%>?F3V{3nw*1zT)Q1uRU#Ny6!7?EuF%|WjuZ?d301g7E0z^M>Zr_|J#qD)a z+oH&+5j)q5cvfQA7~OkzC#dc^T;-jvO%m{PQ(6(F?z3M-qw!zp5}T}@M^zHi$*_fN zD0L$XC~>K&13d#h9fE@!#IKj;)kl0BgIY3k4?>q)@0Y`xOG45wt~4)NKqWgB^KY*G zmviSW@9!@JHqH8GS5}%42{mpEQEE{PQPFaYMpzq>-5mi@0XVc+j_EA~W2}T(*ZVcL zriG8nnp)}pd0J8QV;RqW84VlkU_%?AsXDSAb;Ul*j{ZhU#OJ+VD)l?%l)e@YT>ipp z`f9v#ZzPTFkWvsJMHosEC~{OOOk*%I3!G1J<*#De5G4G%_U|*KV~RNadp74#{Pl>w zgacL}&-!60 zY$TPri)!69`dS3w7^%#^z)c73@$~P1MC8Q1SdKtw(pNL=YA*Jj%=Aj%hWD2V)Q45= zs(>UaXk#=MIxlK4iWa9NgUzjwa~CS6>dTEpkG!R;kW?7;sbl?1gI(v-r-4I;BaUT= zQ;l{0V?A0xkH%>A;FtB*j|}WnPWoDAE0ZU==geh>(`H3B*uph?WHK$Y3 z&HwlVqVy|f;f1xKB25~}YEyFOv~&k|lsL8kt|qUoIRn4(Zs4DxAy8ss;@93@&Tx?B zob|1-MprpssqY`)k;rs)Z0!z4xH09B-w=NtOT;As)MOxnaDcp8F|B4O}#<)!I}zi^=nxfucMF8Y7oM*yi&9l*7b#rp*s}U~i_gxi@9=)x?lG_1L7Y1WIYb!l`NMQNTIpE)On}*vOwz0)PmjmVSPg zz)ub&e9jd@kD0)9zt??YQdNt>?LxhgTv}BLKTS5kUdyGLo69^tbWGTG%A9L962`yvN1kJ&1Y2h!Y#7 z9OVfxeDUH%?t9lo+~g<4Pu?nuMhj@spns&mB{J1fU!EbK^7F@?(6W70*`wY4F@KVW z!ROq4XWBON@ok7K7!0N-I6lDES$^LxfDIinGd4bMBXgCufAsiqEKAs#4nZJS_`pzl ze&-;z19bH`(8I?^m_T>qpSX&uun0>?)^3KgK-QbZWeYP42dv)AsQKkLg+=R7M-LCN zY?U6!ZbadB~zs6FIZG%wE*%9+}}x4SQ0)L7D&36T?h`BLBY_uif$ zW^-$+|0nR?8R^)u7Q@#6X+Siqj>+o<$8J?O-C2oAd zEae1B;Ah+oBRg{`D=SL`I1&Txh2G9k*?M^a4C-ft_G*vMY?`o>`F z?<_UAC_!kC;AT^qYh!}7^OKSg8{dF{x4|LF67KF*w67|)=n=&mmTMLSP{!n5pM=2B z_ofQh5h6lj8-SHF3+NshDQV1C>71yjw#NP1tB^$;lnAYS8cSktT`Cn-sMMp|D?TS3 zf-euA9pK7zQkzJdu~5{vfHQOTVE|D+V3zNn{pA4 zXKozBu#~#h)<_@;Ny_6!dxocjgIcE6mm;5tIVlrN^vbTH6M~u&VpmqIn-c~hqxKA) z(?mDra9Y-WiRS7hgBI}aSyUvEojW5F zlV7~K?3XMuiSOUvSU1Pj*47%zN4zk)HI~f}S&qzBG@(YcF(K|MGkw44gh}`bpCu_3 zx+_JW{0mv{n%Qc7ESQYufsizVAg4f$p1+nmvOYaenV27oC^zpG1{-`JCjEVE`Vd^1 z{Hr%q7j2J6%lnGq18UX~CZkb7jw^GfsqQLCX=!OM%uvZHOOWo16u(2iNdD#v43-|> zxnTReGIJp7OA(RpKMSw!?v_T6j`Am_p0rwphkKwX>t*t9^PY^WG5icxxbfO&K?!fI zj_X!A``_5w*zhqXYOupu!b;r9%UF(ns&J(;6lI9j7X&WSv0t4UUn%Ib;On?*Aos}{ zP%G>&)isJrW!r5S6m|%5?-rPa1{E=lOftUx2@Q>sgt^(~v{Nin{}jUU9rh5yv*xS+9 ztPg<&+a&+u!$Sy!UP2CsWWnD5)y;QK6~4?gG;~+F7@WMbGS@9FZT{HH z0G!i6%I=4|A!|E765-(jh5V}kDL$RYN9^l2?n;iea_|syr}Fv>x4QWI`;YC6Tmg0u zd-l$Ej!f$cI>`GYUU1LVW&(-oxORogH*rB?@s(Bfv#ckNIqsc_ObAjyM^g<26>x^z zVJpw-X?6H3{gD?9%?wEkpd0-4wTlNh;eP~U5&h4*!I-@9IVh>^*J$wZxCY%G4aygZH>WK9@X ztuQ?wgR>z!%le9z<=YcHN-s>cmB&kpWbqnJOL64Y_I4S5B+->;GvXnr+;UXGrzxLF za#V}TKN3{Y39iH)$^LmSbNufwTXt%xs3<72TGwNgoK9mC$hXLRuNUqQ%t^7>-rc<41%+FMRa09$kI{b+)FLg4u!#B{{27^ zV^nN!p)wOfw~ixPFY!O{>=EvA7+E6%bCEoK zWn;2e`RR3+u%9TWLHf6xnaCQ}GvWTQTE2henk5sDDP|%`oOHk0lp4B@V96He^ z_f>!V1f`FQCQj$#=I%Co9PH+{S0s3x9GS0%Y?GkDknp2bj{I;#K?Gh$0TSdeSlWB) zAB1p37c||R0ch;@L6mJ5w?BxD=v{k-)@W_5j-$18Ed_VM-HkHn2WM%ogZ767(w6|B z6UJ|AbTq%sndf8tvJhd>x^`CUgw9)EHKPXJKQqvts*CnvIhlBOg}H@!!m1^aWLx+ zuiW6mLiVl+iA$|t%RK2gOjA=cMgrntW3zW-Cw!?!?%#u?pR{q6z|Y>q|75YMQlx9v znUurB5}BwqM-1k-*mF(~RTPquh$CRErx7O0D)K5R3xWLL0=%lH+k3Prw z^=R0{5|DTm8$2V12E7{H5sy##{J`Bw0a{0%KDs~gQ~x)}FV-IYnEHTzN?kOut(`QO z(erntXPH1PoQa0!Q~uQ{SiB#f!bm$u{=}y#p!L3ZDvyQ%a@pxnAnO@hmP3;q`TuaDoKOl5pE%docAA=+7D!OA_rUte9<==Om{WTejFQzQ=MGhU`M=)-aiQcssb ztvC_{^z~~0*H!&qej5)gHMu4^FgUomZ08^chufL__L3f<>M-D3OEJUoDDaA^$Bco6 zrQIj{VlO+pGCVqd_r)5A06OP{t@5tER7Dd}pRHLk{ZHbf%A?3^$JG29g*mJhBV`j$5zNPdn5vSd08eJhaH4DUlJZ*g%o$wK zIIyu6S|a@+Fn}O4_l`UAN~8&&B0FiGw&^bB`imuQ;uT&McYSey9-db$WV}chT^4?u z(=&-rftE(zZSwE1l<7Ycmyr1U1YT^Vp~aC*XGb6`_XnSCtLlI4x*zme`WK(goK1dEYEk^+6S!(G}Q9~zvF5#0f}|_A)AXItwlv}aB%7ibW+aw zG<67|6?ypqMY}y1lAC}*g4!p*#JaUL^Aw6!s^>r+FFi-cl8LFQDZ2Q(mo!f3_vtn# z)(;(WWEL!(dDhWaE=@%4`w920={@jJjxfXW7N27K+AU>&S0Q3%>ps^r z?N}EUx5Sh<9CenJ+pQ;^l_8D&(H=QElKk9Iu#8OZ?(VLsJg!#3Qr{URxq5W`LRdQZ zOkXNDoy>khjfT12HUYSvj!HEpPerB9oq_2kjAp!8vEa3^{^#ZlKTO>KF53PA6iI8= zP(wLXMn6+cv~hkXVTz2wE{T=SGAqOxVlDK&zTl`itR`DS7flqCx4|U!9~cQq(-jgC z3A^praJ3giOkm%BqHiq&D-UlN#igJaZ250~QQD=GBCdTxY7`}i9hGLx^6=pY;hx~D zj;clSUJ9aM2RbRfUy@3GQ47=TJGSNXKo(kTg{=M0m!6F388?bXi!xGRSuT>FNe-@e{YyK_f81=;?pRAYq_1|jJ zmO?r75>@Zsd{XHBJK_antaPTDP>&+bUb|%7rnn?Gh&T`$6^6%9QBmdgrh$Jt>Ol2P z)Hr!_PlIJ4y7*8-;cJ{bTs_Eml;yzSan!~v9eR#_e&R@(&2oCW<>cxbR#{Rq zZ~9f;x3rfzN^^PCLM!}URh2ShB(-Mz^WHuIB;$DDjS&bNrY5i*ufU#wLeU&XKO`bh zHwDIfQqUqSpsZ=C$5Lo6ikc$az~o?V1|;Arh&QZ7dB#)egs7;XV)>L*AVSzs#hiO;etE&Y_0zH`f zECxCVf$ong@4x%{`uTx!a&k&w+3m*zwC4K{IU8(didtDMqx-{#n{dhoB&McOi=WRg zNv!QlU59G)jyz8G``pcoeC?C5oC?T_LB{chE&P)+H>J_IrbRH(HU3d+?hvY3?f|Xh ztWfxoykkER(t>58ostS1O8F*Jz#Iy1*z}cMi&8eo>(EKAS9RKW9TF09nln2W+L2gL z*U^$(rj|;VC1-G8iN%i_E@XL-`j+h&Qu3#X@SZJ1`QY_(UNjX%@?J)Ij z#A<$5m4HzBr5A~fIbc8$0Inek_ZqTHgFk-g`3SVWSb0eoBo zfei&pBjbEre&jpT+WKN;-3vrt8S*trrJq0i^&&U{TKCM^+I)8V+@vLzNnMhvH48^U zzhhCkduV7VH1u&l=CPIRD7S~KVQl5|*rLU>N?>b&+=Bne3A{$#U5CK=$9vlG={k~K zJ4h9gezLZjYTdEtzP506=B!Q0K~4|n$DsYE)X*i7=QQBhL$rP%*ptRfBi2ZZ9rq=D zgyhMET4X!k0bnjtpXgGbvXaBK>=BRh9ITih*Dj4ZEUfK=25|MVp{5l`(r_xjhWYv- zZM*Yww@3}8Z3u6P+0iml7sU@H<>#tyOao8bb=F*aHm%@q$h2m)PPwHdEiNuOYU!b&>e>KT9`}pV#`HuH_Y)qFPe81~qR7Bs zGCke0ZFoS)ybS-zdU}G+cqZ0>1H#y^;79dKiSZG{<{DYdeIcdh^zq~{P=@RHjNsP; zhF3SIH#sQ|p*ZGC4C%fa9@LTv(-s|g8%_G5RiMBYJJG6&V>9Y4?BIVFK^^lC`Sc4y z>*pT@aY}(aa6AXAB0L-xchL6?xvEM^)Ci6G#^SLI*{ZqFbU~l1=J|p3u<_Yu z8%wg5Z9?h=`cddR<3Mys{Bm~Ak5Sjj$(mQ)W&l;}v`4?8Q z%+qaQlOpLjzvgjmb=g=^D9FZdFA4n48jbCE47a-)b`F_b|s3Zrtr-YTU zn%R-3GKTigXOb|0P^Q$lE?ha6J1Op(JT5XxUo=g_s~41)&mNLUczCZC;zrHx)?pYwfA*A%TPd%i9f9kl4QV{tG|$)>7xge~fC)j|P9#zgdMc`rW&9s?Z@@OzvL8GxfqQ+oY7L zYIiKBzTP}4&eoP5_&Zrwt~td5NFMXy`g*CCa4vFUEAeNZVbzbVWqQ~!Wyd>hfO@aO z${xD9jDx_slYd8`XYW&GaSWglb#<8-2dE+WlX;zHRX)BI4Y8m44Nt1Cp?7mCSHhtW zKQ>tw6D=|R1$27vCj%b%YNESYl=*Hz_Y;5Ole0=yjE zml~>S2iL-Ib^iUi94M^jRqT_4nQc#8SdjLnz0R%z>o5m*YkP>BG9eyASX%54PogtTIhoIdtJwXz)Y$fMw^ zkg-!o=!*xB`%tuGEn=NXX%64BTu~T7$%as4?G$Qrb8{OFf|GQ(smSQKi3CfkI*_L* z3a)}I{t*jri$iRenZk|r>~FIAcp##ItJmdIX;#mlC(b?wTpw9HhPo&}QF{8S99Wvh z8_4EWL``<^c0F5r(D<_k+IgZ(PU|zR;`s)*M9Iq)&eY5`k}CqaVhKr7Knpw`Voe43pH}kun~X)ue%H zYlG$*JQDXL42LjCI{u1WaIi8G-|&km-mF2?lQ(c{Yt=snb$DFHrYAp)B7AHbr+u9C zeSs-ohAv#;9rV6s&&3_B;eq9b$Qmon7(G(cSLz-jl-W!jAyUy3@1Ax}UtQ1Z6}~#o zhh88X10<`eZZ%C!wT#{oRO3L}aj|70t;)%g^Pce{bsG^^nXpnj;tzez4e3KPg8vGD zR>xL0HfC4YDk$G@X9XEguEp&xq;8S9YUm$ZwPLDGbD2YnKU?NL71Kv|SuZOFmEv*8Fv2W8)1=#Etjx zIcanU^6twX4-;^oDPUn`&4=YAeh_5J8fRGWmc;)d4G!JWHZ$;n1$FC6&iS%lqIU`()-luYCjj=}7eX`u!BZ901``7{){V5^9XnCy25u!?Rz>PvMLY#Ebb5iWA@~ z&s#GaqZlQ&Xl83C?h?kkKa=ov_c7tCM>6Q(?uWm{RZ>1ylE-f}u*p%=VGn4k6{+dTXyy##B1ud{2)M>l#g zRJnbIvr;;finQW&#j2Q~ebJn(D=giV;mq@vSU|UiCZeAji3AmGQt@{7O762yzsD}= z56 z-Eb^-N#E1fA_KHCYW6htIxC8V541ls&cj(jwqY%4{rbOM3N$)5M|rXiSz}~8rLBwE zh`^G6D_6eo%2S7PBkhb;Y6w2@fr@$c zNJYjsk5nSj*@qYkw4zePt5S=B%lo@SeFgnrwM7rBWH@~ljePB_eeJ=vKK2g+AS@^( z$}cFvFD#)iBnTD}1&fIA3yOmU1rziHcmE#+cTYQKhoJvYK?npE7W_X2WyV2<2Zg8q uwV>ze;2U7=V-JAXdD_^sLfx$$?RD*~?Si}q?EhQ71Ar=ODj;52!Ttx7vZtm1 diff --git a/res/drawable-xxhdpi/ic_allapps.png b/res/drawable-xxhdpi/ic_allapps.png index 5dbfe4c5c997c963c5c5b465746a08814a8b942c..cf6a2cbc08a8090fafe4f5d031dcb26adfb32644 100644 GIT binary patch literal 6398 zcmV6Z000=pNklKI-w_0zNHGSaB$D{enSlr5;0?a>-FNTITo@%vlqgZ6 zM2Qk5N|Y#3Vkc-qo}H8g9ltY@lA!#Ed83AcAl9a7xy-pbDk-rl-aE=O1 zr>$n4>C^%U#L5ato_8mcp!q^tPZFTmK{>Z^je5p|3j;pC@!jzmb=A$Wnc?Z&tZG%9 zYN!H?G5~29Nl8NY>3*{%yD7P0V9UmBzwP@`Hw+ljQ$h*7*$f*W+5o!{c2WqMOEU}s zg8*k03UogSLYEmUPI9)Y$;rqf%Q{NoG1y}F~zg>EfBnA^QAhD5|VRQ8NhX^-S`f?X6vd9GS!kV5&N z=gv5}_QRp$QD)UL&|v$QZwo7ufdbplNP92#FWva;X)7^|ilca?c8wO;Wlw}Zjq~Sn zPR=Orr@FAsVEC+t|5#Y{p6I`DjbH?0|0*~Fv7>=t67H`Ce{;hx(ECVv9XDZ(cFmp= zmBuxnQ!dO8a^mWRH298|vp!XRrkY0(SVxX6BaS5q^orp}AH3)4PM8zQ`t+MViR5{8 zd?cmumlGVKLqp55$o}lmV-{6@o~985@S(;nJ_H&LK_FX)e)7sgA6Sm?QQ_sDCosV! z-CKg@qy#CU8gAwP6%0Q%_oVYG&ryxGRwNL{7dr|;cMskF+>bxL66N!#()`Hvp&Yb}dmrAHzHlUJ$k zlY)|6832(IIwaJd0p9rFjGNUV1o6RO?0F0fIRgF0#;?v_3OXdx?v1!qfU&PoX&mGv zVxbu-tGbfEntRj@6`!&v&e(g{@l*FKTe5IvQ!K1EY7#M!v6hs^Jk*Jl;F$0$KJ@xe z#J}py5CZ~X?;{Xme`DXxvmS;z#(5=65DgjI(5EpDbq0eD3Ad-d(|qPlloRJLa!Ffd~o`l@I#$-Xj(6u3b(IV)5DbL^>imwf;N*>~i$XK4tL zqvxHvsQoMJ_KSv*0_C0*aNHv7Z!(AoJm1;iKTvnx!_jw&hJ%TOBRcxd^B#VnZi7GH0n>=2 z#rTwqnms`z+~~aFUsLtIyTd1mfx<*Xi3y+dzPqofdc$vYgo$$Ba8Emwz``?}n7J`> z(_PU8@WGgfF#PC(o9?N~HQTe>;2A&|x7V zV$k?GlyVoEb3?t}(z&f)5P@K_AtJ3`SUR`Yn;Y8UVwA=!RpMfb-aihaVC@{+N5ouqf~-1tQV2qrTE#4o&eZql3YSTV;id%TmVbWu-nm+r*wv1E~S*6A*k6dX6L3oyCVdK|o-jl?Sk-vF1z?n4+3sCGc^h@Sh(=X zpls@mwo~`%{RsJuiLvL%(qc5eC7)i$46+dye~JxIqN8dv|s}_Wf@xSq*{%fyR?J zJb2NS4IdW+4nAU`9_5-Nj;~psAjR6`GD}feo@uQl%IZH7prAKIUeBZFz4vjJIkCo2 zJvW8t#7N%z_+#h$J-hXc5O>@?>)It7XU5vf>Q#f&RyHHHWaF%BJMJci1Rt^R0>A#l ziSo6=MHlvB4NjE=^PTCD6C^;tr+Ba5a{dc*swA^E)jixh+%>#5h0L6)^Pc;kTg2Oq zoHV@r-Ah1qyfL*o)tl=1`*u^RjzRBQGQ6A!5`4shV4=tf-)e=av}%ALfdtL9gSDs@ zz2G#8qEHNTYWby)wN!Sd(k?QvYufEhwZtxaEVY~&W>-n&x;`{KD7<1bHk z|8^Hem?3soKeapp&LBG?W)}99GZ8$s++9Nq6MV#iFogL3+w6z)#SG+70)XlKmcG0t za&VwJPBykjIFp4B4?gtBGV-qGvUUwBiOz;s4 zCH#)d+TPUDt)#&mO19>r8EP=|uScksASJz+R5D{kL&NOwTVMk%I%86UVz3KjxHBD* z?MDKDJuV`hX&DYaVvzD)H7z=PC^JJ@F$EMn%cFrm;x!%2mC%I?O59Wv@k2s_JV-(k z@tbRi@ed#ZoY%qdlP5@6(*B_lCk7A&AF<%lsj_k2DzAZyyE(!jAV#a?$w=6$=!)(jJB zJ>%3~FU(+K*yD)7Vea+be_E&&1{{3E0%1X9|1%rg{Wu3qO1YV$l2|XS3(o>TL6TBv z-t`x(OdPFh6f0s7F{>JNw0bjf-36g}yG#)Tv|V-c^i}CuAz@Y^B38n)LaWk?+uE)I zK*2{05cCMmeor0iO3G!ILN7fn6=d}ExM~U15=Ib`#w%Z6gS!ul#kfI5kj7R?m|tvr z{nL$CkjQR?ab{ojoyt#Lzpc8mTxwy^50};_zgBnNcbwTGpx`40aHy!JmblU7PVhOD zzyNWEfchqK5cmcdSMB%hy04sFk@VK2Rt&C7CB1VhHh+1)Z*%o-zZ}6t-+lhl*G?pV zOL|3eWwJXB|Fsj(e=_0~;JwKC^m3=zZ*n0T(-Bkf5)bj&K4D z9q6ZtG_t4=JE64N^dEJX6!lm21!Q3^W7+ z3E)tow7`ipqc{kFh=JHW1{LyqHxVlbfx*R(7>sZ;oMAs4=zb{exUFQaL-7z4g27`y zVh~haB@a>FRiqSrvP3|=;u-*isSE*JQ?CFj?jaokh%2W?Fx3$_wQ&VdQQ<@Y5CzIn z0#p_SP~<~8A&??cC;=#kKvLBGP!NDHQ=~M90u&9gm4S-Npi+RCC3v?=j*t=K+P$fZ z0LINoZZD`q1<(Q?B>>--oS4A`6#(QyTtW$PU3&#qOqK_vU+V<&m?GVGc@T7>Uqb{y zae~rT6HL%a(0!MOPHZ(GL6B>C0p)Jd3~AkG-wTQWjxx|m<8xS5DCmN^@3gOzAdV?V zAO>9Qhyf6g-#4TI$t5KTK+5*_fWU;-y4fdK>|fpl~m4T5EAb>CUYn655J zNCW^(V246dAhn^->m-Jms@-=m#D3SN1gYV`g}uEa4RMXAU-xA<*!QMl_Z=WWcKvU* ziE<4jR|5rdXu`~Ke&3T>M-VeLyYKAztoc><9H-wDbLnXypkbMbm^=8EfEbvP-FF}s z47^q4&cv{QATY(;9Fc@hhS#msLr{<@*?lKaI<@i5!Ei!Df;-gC6p+ojB68pBx{Cmr zlHGSg&|P=G9*uNZL4($zHeh;9t9qz&cm*(JyYG;G^Wlyes@IGvQsn(mn5uC08+&NCENy$s*DUdH}8MlpE-&`5rRpsxx)6s(P%GR(jfWzr}z5? zSM8>V5s>@aAMezCH!$?~?z_9A?}31d9I*h5`}Nbly1LRI%Gf3x6HHJVSsBU+`C*iG z-yb_QKvSa-nW4lT*M0YaL3q$m2%S^)wTo-6;mUt@Ef3DTwEp@9uO+hZ0XWs+KOQ-2 zN#uAKaPScezj#hQ(|9)0DyzNiHHQQjl%P1&5bZb5eg5EEOt7EM5@6P*@_XUz`@6*u z8{aFS`!48+yFs)1-|J5PaW(h4#)F0g7Zk7=5^Ddl)&3nvp7#`20iY?=eJ6k!{LzQ5 zd2N4Zb$WYkD*-}2Kj>qjva(wBhwsHdtbKA21VPYVID;L#?}CpQ0P&U6w{*e9{W_ga z<^n#Tpt)0FgpMfxYw9nbJ?c)VDb(~J0Q9n}PQB}hioXuSgMo~!#k30A578U4(<*-W zo6K4!2&M|clv(@Z-%P96kcGBNSc2D~qXJ5wUy1v=w=5NaF;!qe&(H7aj-k(ol5Q^=x#eL$fhmMP@T~` zG-T}Btz~pEx>}_tDdFIGATtB zpSfr0Ilr9lxT9C^rVvTF;9g5T4?QtgwfA~md1Z~WJ-O~f8ND<^<}Azwgp((wDT zVf_Cs58mkY6HO9H4UyOX;0-_N2%|3xABE+23kQ%>prPSyOxJ`ifBDrfPMRX0K(BuB z@|SDF8`JQh^PeA$qeJa#$WOYh;RTPa`4-d2;1d~vW?J*j1&_6c2VL@Qum^CcLg5hX zL@gxL;QZ)?vs$YT5t+bF6$q=&M^5}w9R{))&-&BK893w%E}%5Lq0Er)>vM1F`#m$v z1WrcW_xp2i^7W8Elz|7GUn~U{wD2OI{6t2}3&Uq$k$7&x=6k~`@!Z*0yfCaKks-hE zV!n7mWqVDk$xFEn_;X_MrGu|9Lr=iUlLuc}eCeMP4M@4<$&NQe0-z8Sg4kE2q$c!2 zYTfS_99%X_GrK0Qtm*yA#(0ZSAJ&8 zy*Bg(`wB7|>Rax;@-yeY)DRg+r(AgA!$9YMpWqP20@~g{&TtSysI{y^K!5q@A=gD) zi~)i6kqbQ%2h;!Pd!7G3cUE%?c(2M<}w^bXgdg3tKH$!D%wlI>6qk?6fp zAdzyi9jlg{a^@MosNg#E4pU~NO!5kSqFMZD{Wd>szaN+??3DRX^vMhBUHIP zxM=)mOn`{l>)m|+H^2DFUu-pT%4Cxn*!xK%OK>p*hkWo9#o*D z?JOrwFp%+_07Nu741wRb`N2n)e(4Q34Qi`vG`u`9gUDHY$Opg5w<#)PGCirdv_`(P zV%{wmE?j;4@LPa#Fh2MB1sbFrVEC=ow_mt$-Ys8R(HeC2wt-P4{QH;#qZmD5s9F}3}m$r z4?3?z0%RP&_&AD6R@9NqPfDqHxCaG?D5%Z)w3AaAPQ1yX%X6LfNexQc8$=#e< zw{6v1Z~b7!Gh3jbfGR}Hpr7&K!$9XbQ$P@4pB6Mg_>&b?kz(a=r4w~J%t*p0J8s%3 zH3!zVG&i@!TFM$i)lRL7aRpdK0qw$=lur8n-axu1*|}wN=a#qnpGmy56={SKX=T?R z@_l2pXlN^@1PJp9AZUL0@8DMJSgLfYoeDL8?olZS4jibcs^T(^G9gSrRs^m|n?d7_ z2C@$ULp7>ur1XG4pGblRFRB0r*=c}4c8`gOK$J^N1mpr&1R^4%9<*C%h}}c* z!f2ujiu??2CEY<_yTGph@JBxR0@}U&N&r(y(46lmPgvxy|DbG={54NV$$5G52^#!N zC~q%c&>XUJWtF2OXz();2t7?sK0zJTqrbG3T6jziY3x_72rlSG;kZ?m7fPH_%EbZLlo<_l6OJPj{7q zTCgCrmQ|C5psFa+b8{lFj_0PWCWLr@SFf=G-k7VX0%?MC`jME86+6sx31NGW^jOQetUXN>UWE-h~M%X7PbCkp?+n z@k}V{BUzj|(@Vv~V@jmTR_Dhz%WgsMKUxVZ1bBy5@eLY2eX3IaxN_21@3>uBmn~_I z4^uK3zIEzv>OZOCu}~1;KPBk?0M?g%5K$>;_f4{5;?Hj+O#SI+&H|X`+nuRPl zK&pB{k=R88?^QMjf!h8-Nig`Rp|lp3t*aMacuvRx3-(wl@{3Y;(YWwHcI`e;Hxof^&6RHIC{0hj%$n$(STd*jf0~zR?{$=#b8H5xx1xJv8~~Ar@|i!^4ol zm~rrDu$-!01V+i90w*W~6YNbsO$2)cdpQfJI194}@FW9VOXUCzyA(bd%@%;n6LVd^{&kpB2gFi1zGuU31?t}eK51+QT~;1#Ro_1903i2P+|vHzHDKUo|46<4T{^-_=ybEcONW+>6+hML^PW>;6oe$JGnPfASu zUQxk6_4O++UeG&67$kPc#GgbuJvkXOHm1GhEC%mI81PaPLhz_Q+JgAk-R7cVVoLM# z^9g21B|MqYg(%zOr_JtMrpCq*#MiFbK7C5Ry}qs`vQEnJR?)*@G>|;nWG?fj*f>o5 zCNrM85}FW_fpszTy_~e`(bLnLS#^yuZt+AzOhUb!aXV*z<@GSvkiIb>y}q z*SEK}7<>cRAgbw=IgVSBZ7!WsJJBe|C{2dGJ~Ij4|+h&jbs{gKk0JW^1fh zzJGrrxK@?P>f;f2KQ$S=ip!Q4DNdmmnto;(U6AKls6K|s-A zVb>2ZQIbE~e&vQ&fM7^EkXQ;5tU$qTuis!q_|IHV=S|?K{;gr@^L#9__>i6_M36c+ z{zxg-U5tUe<6t@DPP@;D9m zu1l5e7wYlf##iuQ5K4|VHcUf9L-B&t@-Ty|)9DV;iHQj#LnEVeFNqO>Ymmxy=DIx= z^`WAbLWGwax72TeD>u>8)vX<~7rpYr zRq@EnkH`D168OqR_)x>;WVmjGy53f0-u-5}-hTGGBFsQVS=m`$o~X9Io;#OQ zTde!7cpMmAQ=eGwEa^b0HP4oTkUIg0YtZ=&CQ7fupysDS+2rXBxqkdfYZ9c19JNp{ z>$}HZ@>=9Q&#I)`|9%f2S#%qbl!Rmint!pVFu^q=86L0{X zRF!1nTe2Lh!rwIM*svr6pU_^IQsLDO4D#7r2L`$v%_W^F0(>SD>nYr!J~ud~^# z3x8sK{L!nfY%5i+WWe?!%D3Cn-6ze5AF+eoV#{z9vU)`Ut^GZ@no#TU-E&D ze+f~D9Ggw4@}0ZI><{Sa=}!o*k+VV&IirNPgPPh<6pT5d^fYdA=^Hxnp^hwG5DQk! z1Lym`rslwun%}7L2Be9>!j%-q~^bVZMB^&)eGU_=4N1zL$7ab>FVa%#nxt{ z4V3`!6+G9z1xCecuEsiw3{v*q9y^Glzu zuYm!rix@+GUEMu!Y?g_pzWy<3+(51F+8R&1v_VdA@CHXBYe`di`F4dsz+QOE+UFEZ zIEqC%FfdR&!4xSw_FC?X%ZeIKFgN}?fD0+A>!VM2+3Ok_D!I70P98Alqx96Qn?0l! zG~se6t@zF_U%vQzcz6iFf;(Fl9KX)b^O)nf3Us9puWLdpV=t7mYJU(yC@waD&@Y(a z(O@(UoSb$Q0Q~vks$_>tULkv_a8>gwd*>Am4PGk+Nha3`2nbyD^loc#O|lD!@DXc5 z8&akezH%!6LC#=Y*Z=OVe0p<(p7(0+&edLi_j2QZy^46W$#lr#F)cXu_OywggM*gV zsHut1>TTQQ53kQVJ0W?FX9R~ll+ZqE>; z|9kkj667}VkOf8*|3<+~xjrGW7E-U(~&j0Ml+sEetO(;slBTKnIouuCAmac%TAoMLY zm2TLsZfxGMMQ!H2c{jM9YD#tNN80`yaHwBmWTXkCj$t;ey|m|6vVFt+K!3lIUACKg zonyuIaTSdS@5a{F^t6Xw{IRT|?faj2G#)TSrr~S{Tg~l#MHtAX4<;)E4qMpcNE&Ku z-(Ow^(5e@E`M*a`>G|_3MLT{)duJ*}L_`$+{P`25sMr@J$v8sn@%h26+^-|LNJK;! zOF&1Uj)TK?Z-GiuDg}dBbUbTl!RLiF3yD+*mVA0I%3ef8MTIB`NO|%*Qs+adsi{|G zy-su=dC9JYrT3Q-#xh8$(%v}VD&z002uk}d1_?zs zH;X^3dh)9`f_|{Fd82fQp>MLRf~=dwR7?iyMD|X7`t*tI@bIwGe}91EX50W4;HamX z-D&?jJ=U~iwW7Hbz@ADP8jiV&#!vVrZ;n{j#1I#f5iz3_6chrapHIEpwHx72DwUeo zR@vP}h0_T9Y-w(0$?`v%HB3l1#OEV;P4WSOQ7<}p`fuADco6;Hd%}J0P38wsBcJyZ z%W725(PA2Na$X*vU5wQ`%+s}+>`HH1agtGqA}~0gw#C53dWWa4mUffq=;*wAlQXkR zMm5IY*rUI=a4)XxnI#Pp-M)R>{$zhu`kPnO6X zetS!lP>S%xx;HzeiXZ)epq~I^>>M0!AMY%j9iAMlNncxeg(9Pp>V1)=7|CGJU@;JT zl`d=@*#uClBtYO%VsGxaLr;|3BPMKg_i`tB2mwFH6Kg~Fm(HK!T!;`V_pIn@-?D2P z8GZdSHn!gfU=z!V&bC4h*maHj3#f@dgF4;ThVRwY)}jEv4E(j{%@{1vM?=>SBV)z_ zAQhdOoV=)Pa$B1-G&GFOt{4pA{fty=prXIeZqVq=OhX=0FqC%xe&fQ5O9vGVvdQ96$_o839WEk z41Gg(c6QBmm6aORPk28*tNK;bs9H8E@}C8|rLe8NJ+roD}Sk#mw$80W+#YptH8*bp8GJal@Tz-n?sfUVQO8Sxu4-g$sfFB20o% zpjo(=tXf#U+jea71Wu^L9yh*Ym8yQ5B3prHa(db=N0T!Ekl)H~L`#?Ewlxd9cgBB^ zui+ig279NczUnmFBA#l6uPwM`b&{N!DyLN}40F7tWmOEV@?OvYabB=kt;td4D0MB_g4D4 zNvU~}vdY!Vs-y#`;KDH1EzcG$mYB}LM7~>&t$V#^gt9i+ua*z2Ac&#Q9Fhsk#om?= z#e;efq*(a7`A(1KOC%LDcF*S7T?4K7o65HM%pY&biCkrycD!hwZ3mCXIwpf zUzVu-%lt zhBYgj4D<8zV`hv}3^RqolKhD*EN<=ZH>+@YY|QAB+#eDzt&DDUa%K}txx z>kPg3=aeZHZC-j?V~8UPs64c#Wx?3Qgu6jSf2d&ZsEzy8cEi%8HrU!$RK!6S)h7@9 zmCi;t2}T+}U*B9XN|6tD8dnNzM4InlBoZTki*!Md)aBn5j=A~y5FlKEr0k)^kkq}a zdL@{MprZ=|)b7`>UkGqWRMwZJydZFCOxVvn`W3CYrKQRsgvSb{4$o6#k)Qu$-FsZz z^Q=o!QqmQT9$2-T(5`<-B-oo>S-Belcs!P?pqev`1d4{3Qhr9Gv{W^fS1-anhD=bIDw)?Bg`xF-Df&RgC1EoSX#2FojTUh$a*Oz7i*uvQgm0;o40( zZnxERYuu=f2%S1BWon!u{k6jR^(6eD4+tH~P{Ig>yc{%K-qh+H7%F}kzKRa}uTKm- z8gRm?@$p;MxE?Dx`XUH`oSah6#$;IsA{0e=@7}#r7)N&F$B zSqq^IZXYmTt%OpZNH8YRfX&VfYhRYizRV>L0W+JL&35kiZC>G|asj18& z%2oFWY7`d{fETlcW{(}9YAm$0Zc54fz#wPvg`ba4ZPB^=MvqmE4_*P)w?9{{O^z6L za69j3?GNxeUu?|?0@I>oryqS6bGM|i5phStTeInC?)jh^`?$Sc+uC>2K?pM9pVk8k zw?Pso*wor;lxD(eORj5TGOVS%3RvyXifdEF*wUKFS=heBZX3|o9Y2oG*d`I3rSWw7 znf1)r0gDd-9j47cQ=jv%_$-oge3g4W)2kXpi(!I&c(C-h_x>k9Jeh#r!wKJ3PgLTF z;Mnqf_yNHKvK6;rimC_KwB@b0g1z3EroTH0C|;cXUheKX7?I9uG~y2yoPq^UG`W6v zZR$T+%hCV}gtGPO@~mU%;5?WM0f#}^rKKA?cP@S@PV({b?EyxaDfmXP7sW?mjw8X4 z0WWRu-}b=MqCmh%OPl?!`-3c?e&Pc`za^yoRzD@MAuv6T4MjT$q1hwrOwV4c8fN7Z zZDZr@$2ang__!31rT7LuJ}1XV+w;@SK;T$Ioxt962D0%cA>Q{rF*0)UYT(D2`fb`dn&u+s}45fUJ)IdA>7xe7*K*`Qyh%Mr85Y2u4O?Eh;Sl z(0^kT8M&Gcr=Dj05OX}Dx`H=3uIK`Sf`e;o85pb=#&bU|yN3x-n+)rN@(BK-SYASq z1fvF#+}l@L1YG(+^>!j?hEjyrlEB24HfZrI=VKsO0m*U{cv-LK=H_w%YiM46LvIiE zQ~d7(5g2P?3UWLMWJmpXrX2zEi*0@a3b28;wzj>0CsEvyVgTtYiXf=fYj-hxy3+KD z0|X*vA>(8`c!IaD%fWzwnMeSEoRKd)R+zuTarVlkiJ64?+4_f zYCLqqq1lz!_iRK?i(+D8+HyJHynFmSbivW7c7FSc0ArNp>rV{AR+TG(4eculd?i64 zp|LI(hAPAII`yKO(6y5?WbapZd5zVah`86ma28`@V~XJ{=_?vAwP)52&|$eYI+-Oq zRU=|ac_WbC4!82spHhxbrcR$$YePT$zFpv??oj2Xu-I93?9Po zPSf4J;~?PxXdc)RiDD^9M>qH_aK&i#+4=Ua?7?wWD*BBtYi_|H2(z{CEkS7JT4S{y z%_WNmb#8m!id->jc1e0!L$x8-{H$TV{H93WnWfy9s@NebVJPU{QU)d)83eB`PDh;C zlpcRl3brFXBw>az>%PaZ5InfHEaqrGpQGv+uZ3!3Z&zc#r2r#2-6cy;_~LE;(?@FZ zA~ET$FN8Sgp#3O<+)myXdUBD5V(H>6c-9P#(ldjgcx}NLrT6YjYSiO`7sO$?NQAMg zStlr8@DA?RS~L%0voY%WT2wCu*{wFTkYf`ZlSA<)qoc0#I%C>QKj;6jY8?ohi5|Yc=)zu|idh|%) zIQ6qptJI6|lK((KB}NIQMa35Vv)M>)@LT~{_?*hg+T0kN8Wv8^jH2i17MXJ5ZOO>x ztj^^$N2qOWFkzi>RqN{C6F}tF2Ph@3%CJ&uLA~-G1r@%Md=^wgAYTAYg3{8Z3`Ol) zkY*_$X1Dj_7IyNb@F2~m?BpRU*1?q7;S`Go3{G&vv&BF|BZ`tdqy_m6=*w9cyFb1%IimU0RRzZr#ha z6B~>IjQEw*KUX_U#@I^IQdK_KF6Rs@NGvfT44Fw~RbI6o3=g6|ym3h|SDkBcTFU!J zDK!VrJpn_jO<4k$81C41ICZ=>ly+Rqe=wgPHeNk%?9y{P4T2KlI0)oqHl*@_cLXd4F(Q44@l)TvR4)*Z!;t@?#^WJG%JK_o(OUmUmiSM(JwHL26SqwHte97bPuzKLi-5ARD2S_-)UJ)8pec!irpo|M~ai!oArY9f3*R z%ik;v5obzKM-thW}Yp@76gmT zQ~>}jN)r5@L1=IklxgNm*N-*L#!Cx19o8uEtaZF3QK(KLQq$A8$vf<`JTH zeLM#s7NS76YJR&GSP_eL&!;ni6BA{I3wNE+!cepHHntZR|B|}*b`?cbBz-{tIAc70 zz@m9>WzT4P&s%#iZTNk|i`u;dfRBUK64k(7iIUffFDor=1TJ1ga>=xM$!LmuvS%+O z1I&D*76s|$R-ocK?GD+E4p{h`#qc_=5wpx&Ty9-kFhxbjGC8;2gZ z5DK*yO|!JH_}JjO`bm#Hu0-U{%NpWpatHaYs;tXDMOWVsPHd0})!r4Ciy7e++o^TB z#;DLe878LrZO?yEeF{iU!>aRBI)Wx5D_mD+XJ??~*;dU3u&VH122tl-kCvsnXp}3= z$vwTUg@teK?k0VpZFUm2-@I@r=**qJ#7G4rdsl6o!8D{I-`{AbI`;j$eHb*rQ$)SBh^l7pJe9 zw4A%37{0Tt%6@D2(6`*d!66iIpsdGwdj5)9R6YH7#cR3{Ixyz^mX@=1V3%E*f#O5( z$XYmC9GdT~p>$7*AiBuUFTN@ph=>xUSXRIV_s^EDF2U+-C9y6-+x=(oGaMSATHw*F zbyl5WIVzU*L5gZ2=~sSElG2W(pS(YzAQ0Cz!;vTG0E1QMbN6im=`UCQr4WXvYByKvu-7y6LR)!G3Mmw7gc1r zIRj3+1v1?9s(IvMCsoc+)A8Y9TP?6O9|CwHqoCkmiBZB=f5$(h%-wHKENl}3V2BkR z`vb+2BLNJ7t4t-<7o}agNFTl%s<1bL?4hU+#~(-qBodWasnD_UO02Q>>M9iLaS1M@ zO>jA^pw+%_+vBW}q!()$UXG2RT#$t%E2PDH1D69=(!RMrC=fWjd3aqaOW+M$d1LIt zA|ij5wb+wUI2nNn9$Xc=_Da@wYo`^QI&l1XL(6PIl7WhELiDS3h)_X`*0k zV+aMvfXPNQG$%%ffEapjSU$7v9t#`~jgIqG0aI?6+-tgt=SpKA@Ouz(HX^>i`=l@T zuC}(fBY@2EmZ(s(E+l5NmhZ7n%RUu`ARsfHTNch+cH8MoD=MVE&dfB1!JoZ6x3m&< z76R4!fog^qU|Kl_{#_1{c57M42N;FDwV7Qwx%A+sYZcX_hnuhL)%cSJLE6h}^r^_5&P|qp5^~*&b}IXWC9h^Mn>8KV?33GV$Ih+*k?O9Nm;R4Wfp zxNyisiWsYpKPqZ}e1OL9bNLE<%~enl@v3P0nJQq&n`qcwJ;KG=n@sqs>v;N|!NJ1u zqMyKL7Y5RhZWcLC4)T-G=;v1}=tN05SnL2R4-d}@#ed?g#IL%%1lsjc3$cD38f|7M$VTLo5kJip zD5ERP&&@4@XDvSctZIUmb%>iv&vmEy;%NSA4=CE>79)NU5s`c^4okM-1NWFp+VnUa z6Bd3;KIS$J&4J(XPQ<_Jhf^i6Ycq$e9`GX6htcct?maT<$8O|F&&-OFP7hjDbMAqFaihUch@ zi;Jr!$AxA;ubr>7+yVk2fNra~Dm#BjChE`I6v(1@=phj%8}Z>9w7Bk``X~p^&BwR8 z=zqN6x4E&gBL~APn0PWRA`fbk_q@2=-Q6WdK~8!S7})W{S?mcX)mWTP$4y5Q-Ig~m zRPrWL*vaxyDG)_N!7Hv^KG)Sm0IN)c_0`mEY=kdFl zFu`8Hi^xN|N$!cGbvAv3!?d+HDSYg!{=@BPGc#jjfvy!v8;TuY|MB?UlfCaem94HA z5jx52Q)N6dV7&(6L&fyL|9P(_=sOx!J?kL_SPoJ^?1u7~z`Rn!bM&GnXQ{RTx{oMA zDHe4rln@NQu+w5|Q}^0ITbuo?P}zc`DNaEL#?vf0ej^>i;I!@`89+OS=)XcgJ)`fh zoDrY_uprYZ$L7m_e9kTD(Q(omR~yY}XJ?aHxZl@XU{W~^(jx-O&Uok*&{kEo7f>^6 zWUCsLiLJ6#(W3GLW%|FB;Aa17KxQVDG$$|G#nL4fRn?9Xyj=0AA_*rS3CQku ze_S^3tg4?YvAJ-pFMyOtPW8s?Q>O9P>$cY@ARspc&n^OppfArW+v+y}j9ML5IbEP^SbV1>lzJZ&PaCH!^(`=wWeonyp@a1IVz`_26%oxQyHUTtgmMcrc1(dGpt=nO5J!jWuaN z1A>OERzSKJ5)p~lEaI!%D`dZSh#3yP%OPW4`d2q!J;Dyd23%R%-sA@v>g{D^D!!mr zzZ7SAvH)b#fK|=pZwaUA3-+X@`I^wGdK>zG>0)69 zWYCg_)MX?c-b9b5N^_+pb5Zb228~4uCPWFc7ZeoyeEAZO2>KC0f1khg@^teG2r9c9 zeJ+lZ0~ENbl+w$TjjC_R-cAI8K_UV0QUt)<@t6k{ObUER|M6o5@H6rrg1IIIMU=O) zI|oRRHH_NLDIETe-uO`Z{5CZ&HR;;H2`lssz>v=6w^tOGZNOmfwHF=fM!ae^Eu_Y3 z|MJhaCCi;Ors~N9;;kd#s3yz72b9Fm@MJ(HdjSkbf|oM*%=wn*Umh-!KC`l^=KK?K z;B%me)%GZBWH%!IM5uR}sYmZSpC|2_omE7MOwm(p*7ASM|8jJ>G1kWj2HmHfQ0$z5yl zXI&FNqiv_(RK=h7-)&WR{386C8~!y{@qQT&{YIp0BZhsExUe!M#*g z%10}CsM3O7575xU2+-}+Y;&qS@B-A|CvW|$2tB6W+oYEe%ykF6)UW zZY-bOgY6s;4Y$ejlZp|Lm@K>zGz{{`D1Fo9%wKqf2U&vRUX5eRc0Cawp=tWs+CtO7 z1{MWnDTxvNTXKIWMIGd8NAy^-jI<8jJe)kDSxZ!?dUk9?=0rtACS3pg8qMoCovb9^ zo~tX<*LULN=Ej$W+i+6F-U>x+O#DDmx*2-T_TL{S3|60Dl+-#L4&ZwhW`-l_bD42$ zaI>mOIXHPirC=Iu2|6Xj0?E811?5_%pYG0 z*5g6!*knA2O8zEZkhXFjDEk2iB9YaWl`)C}+r6B*xVX5JnVGo=ss`k{b9Fq8AXUji zZwZ1(Ai~P&a3FOiiC)KRmli8TDfH@coZ<9Wiw?tob&>VttFu=9(A;i%7CmAYv00Oq0RJpmF8muLSne#CH8|L%!PTZP2{(nLU#Ui1A=9Y83>zP5zF*^$9vC>32+qGr#jS)zn9%~ z>unAb>Y7D;37t!)OU_MtKSx{e0AjEIbuVA#R-A7>CDP;Kq}Kkqq>hUyrAXa&$+Axg z_Vu_}QTx`-(mLFO*EtUk0`BUPUYuB|`4$38-`!v8?o+*`2$u zqKkrLzm#CA{jK4n|KHBr|I?KF(zg5R+WF70*@s`;IUxvQbC-YOZei|jDUNZq1Pe$A zDJa5+6yp=RuPb<8T;!g(pco(WzBm#|c;*KBmH)339Gom{t$hBU6NJGzg8y^EYq6Z000|CNkl`Ezs})(2rI-$^fWqwDyD%MN;Mso&b8-~s9AlV|e0*VMJigGoGX@Jqx4J)9chz(krWwUF(@ZnXG}BBo%{0?Y zGYxH#y_0D{H(rlqTF`gz2|0)@hTie>eeuMp4rlOz( z`y6$r(LDo=_QTQQLV!_sK&FJCV~e=qPXq>on1lc#2w7Ja0Yo4q#=t;E2|0$ilUPuK zfItwiowfvk?eCDF6elT(9IcZc43G9lf(2BDI#g3k1~4FfW^hDEvtCw$0og@CCZV9C z{E#-h6K1NpT+1uvg#aN!5IlHLDW0wBI6+Kt0+r{6CdQH1o zr3Da(l@*XtzB_pY9VH~d00>a*p^Te3rG6J62LnF7{-EkvHIGo^ zIDjmSWK5q~Ytp*AuyU}Ye|6{D$JX7l1_q4Shx|U>Wrj@%ZGbU^ofLx7`X@ucAOKvA zIV#QV1_lM_vt}-8t=lHPjsJe0qvp`N#FdfX>o?7t!Ry)OJ{1$GcN}KTrGzc_07Z?@41p);d zuB6|r4qhI7>Q9e-;jQi*bW_>3yd+p{NJOlM%BJyD+9a`@U@t{6Zc#57WKi}@%j^ZI zPx*TyZq+i-VEdQj!ir>|!1g<`!Jqr?>iENlU&b)Xcj1?H&S-(XHpTR(jr_elB4>=> zr@FD$VECxIuOFT`IQ9{)wBs`NuiO!cwFZLe%Re~q==l$#=T~Jl+<-T9&TJ}CX`{w- z8ky$vy=wKREcnWqM=mP+yxN8!upT+F2n-ZKpqFQE`_1CBR>ABQU#DLQNkm|;jkl)K z#+MW9)As%g1?2DBVYeeIj-^_H03j3z8wY`gM-WKw&<~&c^~e5(=q{1J2Z6x2OZr|3 zIwB=V38lD+mkEY%Z`tSA@`bA2=86Qu#>HA8=rx(2|Ne)ceHmrj&??hsNJIkwjFogV z7IecblZk{{{2}SeeYX1Q<10?^W(lC7uxZgygs^ky<}+@&eO+^`f?f_tL|`_|R5wdO zt#4XENeQ+3OY)HAA8)=`wGt!*gR$u`FysmJlCCSZxd+r5T@sLph5!?vq0&Z>lZb_8 zse~erc|__8 zZ3f~PuzL9LM`nOhn@c|qAp1hLV4vp}H9 z6Aa&Y&)1Gy-CD7v0D*y-$f>VN7L)9gL8QPlRD<{O(BF1nusHT{2xRk-)ArH;k=?(=sM4FY3xgF&MGUFO}_vFMH5 z05$qTY)1e>$t*E^CC+M=Oj;9T)t?N zr%3K2*X0Y3TYPqMNnu_@m}o>&cevzKi9o`$y|%(N)o1@a{!t0RAZ!T`l!Wn*p8fM{ zs@n>)Jz-c$OA(bz@=XR2fw%QLg4=2q{x)`?Xn5F?@I=QBT=?7DYC3{#eONCo#ZS4k z<2EAU8UC{H+~fg^BMZbpVM{}ai7Yr^@wv%m;S67xXk>(&+CvE}Jj+Xk=SRQtli2*8b9pJD{E*j>J3aYKlK}ymzW?|hD>J+M zLLiXKYRZn;r<$Wo_~XXiucaChFeU>mLe;xp`{PCv&QVZq87aG*vlD@|dfps0{+bh=IanM2RUs;--&1mrXKgy+SncQ=Y(t1OuP1ns+gL z0EEd10r2Ntd_)zHU_xQvoHCJofUYz*G=fr6y|10}z_!4`ly; zAytDgRUoQ9X5m0~mM=8kY*dZ+Fs|McIj?%3Z>!o8R!{)|kYhXdmIOBp!LLu<@uysb zG6n=dK&5)9eV^UdpF4E;q3Q$T*gerO^lxB97c(dc@t<}iA&j#{7f7H!aQLD33~lSf z>QLI0CjbHfRorek*?1Uv&`y3Lo?;G%g0#*MdkO-((--=1q$<4c^pacn3Ps{u;!PJ42d z=%NJ`;(X7O-#q$>{2-zr7!;y+{_=qR&yCiJfZkCS?z;PXH{93;f)7E62Tr>EOD8vd zQViJLVzEBTRXgsPTGCIfjDW0CRvxdan%PdZ2u)Q#NA@?34Yxt`^q|n zVSUuuL&Yw{DCd52T~lOlaXBgu{&>|_o~y4}7pw_vl!UM9Q(t**+pG4yWK4e-qJgCc zTnWFz>n+%gY$B?N4u$*w;P2Zfwi5xlTPy+=ME1V6>9qDT9?(`&kQ42oKzs zVkj2F+`shXd#ftf7J?84`al1IaBZQg^5pyamomeQAt;`_se79M~8%DKM-ir357cMZLGf>ir1CPZvSQ(;Zn&p~1f|D~$<_rjBgK z(_jBX?3Wol<(!mkA+aeN2x$MMCrsjqUScE}i!Pv0gTE7Z2%t zn02@4l-@TUz2k7c$+L zg4!m!Ja_Lt2R!6huqc2T`s2BW{00?Kl*2~>!^i_ej~uc0H#qSQJrJV4r%pNb?sPO3 zkvIfd1eDKxvg-QlQu~R3TrE0|L!LPF&j1BP_E_0*bA-?@@Keps9RWy$%4eVb(C7Q^?RjZvFj-x*ZR!*L9KpLz zJ~pOe*Msj_`FPJ0y&cM{-l}%r_(AL$11`a$8w8}9;r9zctQN&ic>+Tz-}Cd-c}49h zB^}HOKs1uv$~g8FEe1^XPi;#BF2SNJhPe0oSr;i6_#cJF2FFhenhUr_K@q zHA$=T0S7XeHz zzy7n!2D3mw05}wcH0_#z)?!O<#r0fX1V9dw!!(d=7JvZanuihyfb@&*!^9vEh;uvl zmJ@>R>lZuS$t@2BAONLx*bjF$v+6r{!v3@diPL+s*t-CrVF}h@w4=LM-wiud--V9V zccU%3BS5fjSZt`a`Z$y`3L*rZ>n=r5TMPI2UoZdV>9?GG+Zlhoto!kzs_$-jBkc6b2Ci!=Mnk^EU_V zd)~OJ@9z5k4L7ub-~kA6|H-#~@#LmYi2;{j(UHL}gyq}^2*@pM`ZsYPczYFGv9)lY zx}UuIn#%G-tg^hmhP+SRKhEmA3vXCGqpGGd5l_ZzD(k9lSp9*EZ1tVHMMvI#3qc$f zDc(Z`0uo^WU2BX6!QxbXSG%rYYvHILzN)VpfAw9DTlL-87F{4QtKJ3}BCdHT0T3WB zx>1%-Hzr}Le52ve~7&W5Cp z$J65F09a+jDG!Coni<}o*A90O#7x!dJ28ae_TRrf!^;{N_dL`!``Byzbar|JaWL3>5qYmA4+Z)u~+mZtwEUgU|o|lA~YB z1t@^v$NXRH^r6cVyBY&_w^;nkbN?S2k3oU+CP1)WQ1>Vg5hUSf-*|`!;#__AXvYQ5 zfAZ;rUi@sw`42ui`)n#7clF(mmjBa-qdbjz!tPg9a9PBNeS?`fDS)1})6FEXRirauT^_|nU^xm1&lfF2L8 zIFk0Fjr`!Qz|Q~j{GbH)qQfu$;auA-2Sy^RSGvQNd;}9Da3~48#)i%!0C}&VsR)M7 zI%9+=l)yUn%qsaLca_X8Tk6yOC7Qc|6b{!yqY%NgQ6+tuvyV8VK0yLhlgnMyCyzKIXZun~ zBLdaIQ-&B1jd~=P1IJo9(0@wPZ@@)>{*zY@ICeSEU8#ry0%VeW^10}iSJiKEKXQ6? zYg5OgOjzCe;nQ2(s&AT8@_owLER^G4DuJa!+)}#spGr0}P$jQfwzZ5XB`Cu_Ih%z- z>N8>8@bbe>=TldXTqKBPQ__@zMlSmF6`eUhOuD9~UNh&(W|IuqmjU~5wZW6ZQUD=B!tBt zl`=@e4M)DMyCYxsLB&C$N@hM|K((nSA+EMj6;6kp_N$i-o)-mByohl!iNW(;y{yxo z4wV^w>NzJAvI9;1GL@FSAJ#bFcl~;@S1e{vssv5;zU$Wk*Ek90^<2{gX4Z!)9Xuue zv=%6_!GGs>x81a8D^QBWwwvDh-3`7HwIBw`aloWz!-wi1Ka#x084c+LZDMuhtKZqR znrIQ$@+Hx()nEP2>PnmNf@D^4Orvx#Kchg+Ex55Dv^b*7scY9qzqv_v#S|7y2&03=?}NLe8PY&!Ay}Ebj<62ee4D|=ZdK$!8EOt6W^Hy zs>u5Pnke`5roI9w*pvRTH}6>WD8KEYxz@P0h_hdk13(nyZ67%Ecfb4Ml_hSqeOV8I zb$FzQ5iWtbrFL$CV(OYkq>@P~_8GD0-n8q;zS@lssT3b2@`Q{W&f@CNEKv{w2D|!C z`Nv;A*|mDA==#c+D%93#X6&ih6Oy^iwT0rIaFZi#haR_xHm7Ies9V=x^5k-1soiN2 z&rV3itdJ~Xm>%dq^((*n&Na7e?<^2h!gP7u$o147V$bM9vm<3K@jZQy{wD+WxL|?U zGJVXA=U@KBe#gr{$aeKE>C8?*cg-V_hg0KM-hSM>|Nh6Ge%}^(nv%XW;H7V6+C;D5R+_K8FIX95aNiFL9g-2 zHG!$m`39OmZCoRC(a;zLP-8^M^(_*hKvy`pBLp8jaG$pH`NhXAdHDSv^pGVFXt}Rl z%q|4nW!-BMn^1M1*FZmH#QUCM^_MkBdZro6R< zCQ?seE)<}qol*lDrL0xx=VDvM*k-{IdCFrI%Db~_01E_&oM<5z9YnMdA`k3wou`$r z>p}nmtfEzb8rPI3;s5QNhjN2J3`8Xn=l_2$h&l3mfYwDRzUIfJvy^2{6&F zwF!&>t1&Ccjul$XzrYEobux!W)nDUT0lS|7Qh=a7{+rRI@ig@~KpUh02cRLFbG$da z?+&ZNzCr~x;>Yo99ECDD+CZraoo*q?F|L4S#oBxXfKhrjyVTmB(%>pdg%1N1$x*}F zRjmk1{(j3tm)5A#pj=};C{W^5feNR_@T_f7=q64T)Ic|{)SDIN=s>IeRS2;LB;8Pn z#_+=AsN29qRpv4lVU7=UPped9)o&e65MI?r{Sha0Oq72PXoX6I+c=Fa(QG6AewZBs zB`_Gfjp=Uyic^JZa3{>+fPTYWsW+V|5p2`9gH7rNE82a9va1u6{Qzaa@vnO};2$W` d8!X>xIs#P;W(|=_l@I^`002ovPDHLkV1hJ$e&+xH literal 12588 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�%{RE3{{DxI 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 F`#rD;=y!$#$Y7Tlko-@3 zNPiEM~0SI)1WIKMQ2LJ#7 M07*qoM6N<$f(KkeuK)l5 delta 162 zcmV;T0A2sO0loo{B!7iTL_t(&-tE)74S+BVMNva zNVd(0h=?fi>Q#$###Aki3aQ~JkRF`VH!oV80S+8EaNxj!1E*_F;)roxfWGDQ0Fqmo z;86>{J*1vUJ0wVHq!ALN6w(0+QW~jfktX}UhBTW-H)%1Qf*Z6N5fKqZ7YKBNWHA-C Q3;+NC07*qoM6N<$f;0j_KmY&$ diff --git a/res/drawable-xxhdpi/ic_info_launcher.png b/res/drawable-xxhdpi/ic_info_launcher.png index 386d091472ebd04115758a748bb8ee31fdc24333..8e602da02c5a653b4cf3c4d9d6c88f22a4383a39 100644 GIT binary patch literal 3596 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 ZU^W)kzOMZ?|2`-HN($=oRZ#Q){s#whJ=FjJ diff --git a/res/drawable-xxhdpi/ic_pageindicator_add.png b/res/drawable-xxhdpi/ic_pageindicator_add.png index c28895229cf2586d45199be6428a1cd5857b2af2..d790e86b2591e061c7adbfcd9b998b614c172b23 100644 GIT binary patch delta 837 zcmV-L1G@aj4ABOV8Gi%-002t~P!j+E0~kp}K~#7Fwbr$BEJqN>@o)Fco+L9fGc$8y zieGBB!}rga*$&MRIx#adGc&`%?)1+f?bTj+FL*R79jLoL)vX$0eGOZK3}I-^A)9@l z5?V9JdZI0&HG|sUwjCodVjgAl87CahPdj@(83c5)FY^&M^rm07JP`plxQqapM+S4!&n(BX=9x z@0kh!-*xjVw`>+hk=e9tp}M)^_vf|5FffEV2;djzTYpEt+>npZgam*EzE9d(BFdZk z(;Z=ixjuh-^;tih=8v^=eRe`_=HQ3hu{JY11V&1S(H+}c1<7!tXJ$L#nVA+A@+3;v(s=|4h#H+ zQ;{$n!GE{6Y`RL)PnVs2`|E5(5Ck=aMG6J2P|BV8X%%%jdYf37Z~VD+`LRY6f|`a>I-75v zIUj<8C?p)O>QRc+LL1eL7d4%bL4#VRTT$EIGJjMsyh@~~OaQPL)Elz`1wus2bfGR~ z1daxPc^l4!va!>w5NeU${}BMzl1V5;p+Ph*REhR!^LwH0c`8^C3Z+df16wW`Ws}^0 zy7fcTs)iz5e?AhE2!8+JSNxAaYjTQ!VVI%h3%;<~!kZkC_j(sm;djl35uxjZ9k0ON3)291u-s=BzOUK2xFA9GV{!8+QB+doQ3pvQp)P P00000NkvXXu0mjf(~X2u delta 1601 zcmZ8hdo&Yz9RF=*l%*EsS*@9W>sOZ$6QV^8Cle-H5oNWN`E&;Hlka&{-MB)IL_5*;Zc%T)U zQ|Crf9N@?IJCec5uPJCOO;ISTLY=(A73lPP9bTQ<1Awv?g>1{EdNy}>y0A1I*PZvU z#Mh6?n{I1(!E7=7n}m;c)nRt6Mn%gP_z7!`dzW=<$s=Gfbl8Zj8m|O3O~jsoPVlt) zlbbngW>nq1usJb@G$`yHw|i)jm6tg?-7EDte0c5LJ({MbWm*}o-nom!`O?}LEAJz}Xjn8< z{Xyjk#5j=Q6^b&eapt1R+HuI_ zSbO^8w=0Dk1U^tyZP=KzroEenP0f&WuRa1!^WpB^d92~vW^*!Hq+ z#~o2gj6Voh(w4e6`wpHp$0KhwiEF!Wr(lr4_BLY-;|$kv^w;p1*3coUi=(d;`-r(d zQdUrwIp|zyfVEkAr(pDZFK%DcBrX!vMoF^BZe*|9ZpoNWIirNc%Y0`WS?sx~Zo}CK zV%X2+7`0|s`%A>!#H`Flj?B3RdkEdv8}0DQxwKd&lbPqG;(M;a9ItPqB(s8pYj50G z0~y{SxffM7*+Srt!Ke%1&0gxt`?H3Scnd>${POz62_&j` zq+i5RS(FYPWV6{Th`3=RyxxePu)q%~Ue4uXH{xkh`Cg`#@ki{Y!`yg&$ETsvgZV#W z7sfjzde*1sMq84S$P1KY2&fw{)!Osf04evuO6-ciOzpFTqR{h7CFzFf)m1~45#Ofa zq)o27wDBT)81o9z7_a9mi|u(d#>SsID^&){&p!TD3gvvCFNUgGTU)QF#tnN<=uF8TcY{9!?#_6>&%f@(oEf9{0E9fv{)7k%xXv+vVb`HWB~WW}NQDVQ_l zBJq7U%^0Lk`GW`2HCOF?+tUxEiswnz;Op}Dg{{1X6Z=8g`(Submb-onnSAwxbxm+c zNJwRE?Ib%YDopRrC^B<~?K;AF+0lxj*r z+ofEHr=~psXkzjcnC&p+8|~gpODj!$4!LB>wfI;Y0lpm#Z=woeKI)$`-UCnVE2Bjc zLOfI1BEG8XwL_s99D|mit5kTG35lzCT$ZRma)pEx-{&Rb(lGH5SLUNMSQ5SJb9qguQ1(06l_1^bcbw0GQ*< zEKG0&6Py**%!+7kMzqA4;H-%_ob34p;(rVwtbib9%>N8HE25c|3Guh%y|Cb?!lCmk r;t-1&!KQ~XfNcQlI0Hoqp$9VD8T5ddGp`uG${kSb50ESN`NjPU`$5bi diff --git a/res/drawable-xxhdpi/ic_pageindicator_current.png b/res/drawable-xxhdpi/ic_pageindicator_current.png index 5941c8e4f3fba8d906c74f7d95c3aa6a34a00531..9550c61ac6db6080805837bd2692352e10bd058c 100644 GIT binary patch delta 1069 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 LNkvXXu0mjfC^NtF delta 1012 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 aXJt}lVPtu6$z?nM0000Mod diff --git a/res/drawable-xxhdpi/ic_pageindicator_default_folder.png b/res/drawable-xxhdpi/ic_pageindicator_default_folder.png index bbcd7f91e012be9331c78ae953a8c6833f5a41bb..46ff4737a95b336630e239289d20361758e9d0df 100644 GIT binary patch delta 311 zcmV-70m%Nq2FC)B8Gi%-002t~P!j+E0S-w-K~#7F?UaR4#9$PJ&$Sl32fV?PGI026 zz$pPgWc>6`{zXso(6Q{sUuNfdBF0F>AW5q4Jw@_6GU?ZQhCBtbeP8YHzK~~)I!D~{ z#2HoA$jf4f4}p2MaP)JNDOv5_u*@Bf4qbX79X+~qa9p#bKYxrevs~e5;rgjBSIk69 zsZtc#8YS~CwM$tQG=$Yr7$d20S4`ni$I-=&rYto}jxt;*xo$LNIU^G-RNxsG!6yp; zD3txJ(2~EBY?XgyV)@(j4CPltme`)yko%}1Ek4b0Z5a`Z)GBuhql?o1KD0OQLu+0m z3ktBGTTIJphcLV|k1|%Oc%$NbBSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+eS5K)hhiu0R{01Y44~ zy9>jA5L~c#`DCC7XMsm#F_88EW4Dvpb_@(m0-i38ArXh)UO(UG<0x|cqyKjw;f)(6 z&UnD9({W=%LSg#`=Qo{4q$4`EMpSSLWgkitc-Pb#+1U{;!I|W(^!NOtRm-${)m)YDX(qltOoXq;U! z`Tdo=-B)xP{QCSJ7Pe#_=bUZrVETBwS>FRrKR5a0=hEpD)T|oXBf5pRa*18)+Lm3> z(ySV&$@uCalOAWHR^!QqyAH8h$k(1_nUZ&$w|TYg${>mL{6FV#brcAnPd&Gsv1v0` zUa97Vjg}0u^TjXBTg9@XJO5*OV3Bl?)aKT6HVsxzmNP^%isc+uX4!XJoAL(e_f^Lk zJ-1j;x23XwJDcQ=klcp~*MCgVEl^YV(fr#f*GqB-%d*z@JG$>X+bw5G3TU=_Y*u%) z(~9lk3GoZYCtlbWa>w&*RSafK4YgeQhj-zl{bEiNyRw7gV&Wez3V6AF_vy-S&M$3h zg`_r@#)xjJ@R}2SD7Q*+&d&c*TMB2nbKmZIf1_KhjOEIqS${gc+>2sDL#_5KzS3}$c1IrLYGb3VtQ&&YGO)d;mK4`N@nnM^>bP0l+XkK%kD}p diff --git a/res/drawable-xxhdpi/ic_remove_launcher.png b/res/drawable-xxhdpi/ic_remove_launcher.png index 7c28bb0bb410d7a1472921e8c0c58a6058831bd8..78ca0804c5b2ade22fe05f466e808a05525ab7bb 100644 GIT binary patch delta 1689 zcmV;K24?xp7M=}|8Gi%-005Bn5%~ZB24zV^K~#7Fy_q$f@dF&OLzgwSU(3&6kH~VUi*#E807C zRe>T=Xck-=OaCurP*mle`ihq1MV60O8mQ3LrcKCzZv;A23RW`dC96$PYM}cD0GYCC zN&d7DAd_5Ep}o`qF1+xskHK>7J`0+p<`fmfvOCJwM_FL~>th#QfJB+KT4%Q87nTft zq5j9bx%#Mxn6uvgJKLcRF8?Z9l& zpEn2{iiGcx91?b8b#JzdpMy%IwBi~R+3*6b_1o`vJjR%XuYVWKLBEUeJ(34~G}m_| z$C_@_F=t+B zCD^P*?Cwu2oX~pIMYuoalW=3ZZi2#a>@gqy!IJfeB&XG8*gRS+yiLOW-UdwGy^YW( z$$#yFlJnT|!utcyg9FF&`h#kcd6gI5i~_?q{D`nsC07>S>}mE?mt0+V8-3_oZ&#CC zSorC~l=EShJ^}ox{U>hol_iUXFQme|tW@%XKypFh76K*OD?C?gUUGy0mO!!qU55-! zBD6kYF3~HTh38gYvbm&>AdoC@D=CT13x6jxY=q{RzKF;2O*7y4Nb;gNh7fjw6-gGO z>rkP?L9aaSF5`()YpgXd`Sco|aF^wA^umFj>p}k^*n+1FHm9(7=BN9C&;AsP%_(IN z9;`gLI+np^;JN)6`t1+$*bM#KA7H4_7x*w4Too-Po3WAx!*>S)gqK$H9~b$Llz+>s z2>L?bg&}E-uKJqhF_W-%()gO2{NZ@e+bQ2P#Up@t7#VPatnqbQY114K4L-$&k%LYb zZybB$nD|&IKnsSE_O8Z9wVgVOm+|tcqx`pG=WsDrd`>=$r!?Al>g?g-=WqeG*g4r= zk>}(&dxg*8)rE_PkyP^O!^vl|Hh+#m3~J-%5;x8A!b?i##%GS82MyXi<_I^<^1@3> zP8%Q9LfcN8W_jV|B-1dGoGvWzkv?gfO@mG;)r2!vk(7eN$WFiIPd2OA;3H+%O$<%3 zDzvcJF!Jcpvn8lS2A|L&J8FuSQm~{zbFE1azCbcz^J6L>3kAacNzb(i-G2dQtPC}> z`dxVI#m>o6wu_v@*W2*=-N=F}v8(hdLJ17bfwxg|7%6@Z-}o*(%?S)BkUPMN+Hbqw z)_25`v$ItGY$g`I^&Qvix0U=o*UKj4^-otEMpCp;_@|lFanChj$j-0cb@L)W&eFq( zKsaZ;dGVL;lAQ^oQ?&vk2!9ZM^}W}(ShiSlx`e`6^!2STzZXFmAid|}OH>_=D8l&1 z-+z5GL8p>i-6VGv-eTcg_4UnHBzRRB23L`t=W7TaV-OYj~SGrwn(O zED%2I&f#t6=^TD-{q+xEnzHj~v+JHqlWc^86Bz&IM^1kSE6R*941d47WPxzs7*=Mm za{Alf{0PP=b13nQk>*O#AhZ)<1TAGu9e@WzfbA~afTs>9V`yQ7vWCcEd2uigXkH^6 z>Z=8Cpy&EYm7}o^rxpzLH9~ljl}%K8gJmetVZcmlt@`y(Ev=ig>3l&h{_d%sDz5&8 jS9;|rGWUP|itpd~n-W1OAVmTT00000NkvXXu0mjfmWW&^ literal 2892 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 KF{GeeNdE?F=TmP0 diff --git a/res/drawable-xxhdpi/ic_search_grey.png b/res/drawable-xxhdpi/ic_search_grey.png index f4c5e27d26bf76ca0a3675fe504a8c268a428d57..33b4ea93553c5eefdbdd8073dc99d38ff95cb26d 100755 GIT binary patch delta 688 zcmV;h0#E(t1;_=EB!7=dL_t(|0qvJHci2i0MrCF$jh(3vrwR6EyALzmzY%7pHrT%~ zGjw5w7iN@|CNR6lASq+sZ`!?cu2#~5=kgD6adB~>h-OxEn1_78=K~Ko%qp5F>XdVhAb(O_p{(b0YIsBtxgJo} zL$lL?&Pz7XL>1X2kxdoNY~oc1N~QWbnfA-#5mQO)U}PH8d2GKp^>4}kl-W#97o&68 zZjE1~{iBmD9;A;hcUqk4FXqX*?&k_7P4Iy7NOp3uL3EuAyGn6a%&l*Ax^uHm!zpOb1-zNAY z8bYf?!%Z>xt%6^nA=D%qzKXF@zY%<+hESogmrajI&wn!ZvV2b?>=R8NlN*7|=b2#l zdOBeefv9Z}$Xy0G-qQ+ajm8T?Qi~1hxThCJS?A*gp>!nUGu+b*YYB|nPHvaq&Ms^G zQcpLebA`aDC(IS5G5IVeCNuDVjkp@4c;a*+GH!{;;iIl>AW?JblF1tr~3&K*nXR)16~?Q5mmPASB~ zYAfCBd!<{p5+zQ_45b4>=|>OVRF delta 719 zcmV;=0xiv%P>Oc&brJCi6g!ml=uITtebIx>biRql*3%6Y}aX|JVm4B_t@<7@X*QX`4W-aBo2l53Mf?d|pX}8X-5s&nkV2iYB2xY9k6ZJ^P zxDxz;hS01iIOl_35d5@;P+k;F`{0KJzpf#4Dhm2Il}HKxSVO2F3O4)TX=JdmF)@~zPdU#!Aem(+WU+BABh z*YSRwb)_Sj60ePB_~7`8SbAzL(c+k_GLuF(#MpKG#06v3zP5-lZY||9Wp=!_3pYw# z)**5~u76lyh!k-mBuFvLqSbf)J{8b8$&Vy2rbi#xQ6DEx3{037>p9cHt>oouX002ovPDHLkV1f>r BTrvOv diff --git a/res/drawable-xxhdpi/ic_setting.png b/res/drawable-xxhdpi/ic_setting.png index 01bdcd5448e36a090d8d9580899a8535fbd45207..3effb50b083ee70117790ae629db7c06794f7d9e 100644 GIT binary patch literal 2509 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 XTGTy6T5RPl00000NkvXXu0mjf#a7&P literal 4568 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 diff --git a/res/drawable-xxhdpi/ic_setting_pressed.png b/res/drawable-xxhdpi/ic_setting_pressed.png index d0cad5e0e8c827437b422a2471bc061cf829923d..d78cad621bfb2338216dce6ba62fd2b3923d7f3b 100644 GIT binary patch literal 2423 zcmV--35fQIP)_Gc!X{W^Ti4@9-wq|M_#5w`ugF{NnL?`Z~FhUi%$8Nf{D<$xoN#f> z05BNOv{9vxvLW~3p;=!0w_|{4;yodniZN>fb_oD^4}e*GBS-~6nE{Uf?_V~KjR06l zA6_Z|6a!q5)g$i!>=gSO1Ca2L#@s_tb7D?1Ksglvnuyo@Gv5G64!A)-DkT6u-Nk~XA^hISN zUNcUha=oCf!265+T0e@1>}JyN?{4QaiLCwBEK*_==a?|uU)ab^Iv5~853&G8!a=t_ zAhvDg8PT7V(kLoa@%hFT7BG!lgal%FCtQ>9h9%741n-9=s=t8Pr<)mWA&~W4mb1SC zAt1t|hseP8c7702MiUWIL5(0o6LUiVaJi%Jz#sJ!E7JJLfVIdOnep&g=?DVJxm+ej zQ^^5qB3{rcsnCV}m!qlV002pad&LLpPk+r)(dU9SKAlVz2{f9WWEVY2vujr(uT zOnr?KMx!%Y4lmS^3YoxX{7h7@5E9c*mFnQ%MEIx-p!QHK5eU-S|1=RggB|?<6+ZBk z``q9GG$CYWo))W+l@oi9E(LpDkRam&7p$nvkuM z3e%kE?cqCRhw&KT^O%*47no@r{3F(32FK}kT2Crs9?~LVU=F}``YAhHlD@J{dQ0Mz z!%giW8!?lcgwFgxk?=$SNRt63^Ns|Cb`*&-hg3D`@$RIIk9OjB9_uVu0%q{ofjeqq zuF-4~hXMjC>9&VJT4{V{MSAtc3z|5MPk^q=`ZsA3^^HSt1!X+6eaa=Fjp>%^OLw1j zbP%D@mO1!26KJ4hu?^osU|$duaH7^ucQNGDZrSDa=w)u|j}XZht@==kh)y;*IxM3! z914EwF$dcwwIt%tsRK|`sTO`P zi^s%xDMlO)Nb<96$4%iQA=)_M_Oip?^-V(I3}s_mbTHQ%0FimgxFYp=%@TXpHw}dg zR8a=@uhK?|hPpvti^ekm+@qJ7_JEr^; z-cEov?8x-7)Ilw9+qfR|=wrY0i#CEOEBQiw)6l|e=eQ)DH<>_cbMiFf|?CE zOohU2`$kmQe1jLN0;J<2R|Ga+)G1f9cK@r#ZMVkYw?cd5|lD^vb|FU=?tcDlSa)x;Ab zRE};8J*LI+#W}+<1)X_pYm56rP9V56%5tdC_%h|2QDz^yD?Up4yFvpc*OMVr`G$`k zQTc?JZ#+j6qB3#p2*p!6h=>^(1dq-P1|=wsaD7@2)p$P7IKtq)?e%=2O2v6Go$z6> zslqgl@D!hZJT&?*;(u>;7wDfOsZgWv2#D$CJS%A#4we~Q#V4eKa&&b*q{4Yw)@b41 zoTrP35D$e$yyOMV*&U6o9J0AW5fW48IXjswm#lxJ9#-*!fEeXq;yd6e%YOKwL^qS! z!E?&Qgu_>_YB$GA*+FoP@A$+dyys%=vqbsdwKYp@=NTbkUA@GJ=WLb#_sg|hUrm}@QyyX&;f5wQ! zcpAm(f1fxlUXl_HIVAtjsJ-My#{YURNi|YpwKV`9>nZ(;Z%H+z${Gu;A7Aj8o8R}V z1%T<6Z8eWxaq4`(DEY*qmed5ik`+DgZ;Dn?HkYl$sq_7+>?sCP1E8pKJm0!Y4YAAa zO;M|kZvJ1EmZB!_&#Oxgn4S7WU$}RG`e7;|nwhw}*MCg=F&HFiUfAbnL z_4E4uT+V+65CFDQMWc*a)6Wi>Ez3R8%5_4jBvg$!;2bST{O6x2F`K!@JZtPIUy$U2 pG+f|SP(cM1R8T<$6;x2R^k0T}ZS2h5J$(QG002ovPDHLkV1hbya7_RJ literal 4476 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 b-UVlZvv+#v^A-2+6a>)47;09k+eQ5cs?Qzt diff --git a/res/drawable-xxhdpi/ic_uninstall_launcher.png b/res/drawable-xxhdpi/ic_uninstall_launcher.png index 872e829338bd00f9ac96e540275461f16a0f40d2..43aba6ec09050026b825e12bb62edf028bb88abf 100644 GIT binary patch delta 1048 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 Hu0mjfqq>FU literal 3563 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 diff --git a/res/drawable-xxhdpi/ic_wallpaper_pressed.png b/res/drawable-xxhdpi/ic_wallpaper_pressed.png index e5d200be140a619cf6915adaf50be6df24943c23..52c92cb308f74bd65cb2fc36fca67841e15b1d95 100644 GIT binary patch delta 1740 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 diff --git a/res/drawable-xxhdpi/ic_widget.png b/res/drawable-xxhdpi/ic_widget.png index d4b8324b1f328ff2754cdf04616d549765726e20..cc5002e09aaef03b6396ed25458aa05b5fee25d9 100644 GIT binary patch delta 1445 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 Xp;&x!+(_sz%L+Iz@VvZ=)Z0F>xT#FLXi zOE;m-@2u6Y+?*O1{tvw&{51B{a%zLKWzYw)XC+-8*+S@=Ut2;OG<1lDMk@#zs>maz z-m+727w@S;bsG|Z!@D;8qA@P~={o2*)4 zB{ze|bBrskEc8v--4n}U8i9Q=I~@bTbfH#rXl-m6^(`E zqf$L7$?*{nvRB2k4azB+3{S1{oI&Yc8j$u<4)b{At)UM0%LyN1bvPmq)Xc8(LQ@}_ zbN5_mr*ob5hG=E+PcT!qCSieQ+}tF1ZC#l=c_YWnksjJ@G;@uN-vWtR4yr6kWCOUk zE1)!k5n$oRlKFvVb3XJn4568z+8Ibyi5NV$8`#2WiOts7!xw_D=ao*ee?YZkff&V-agn~ z%fLE=cL0&0lxJ<0EKctB#}~u`>t0w!%{*O4>>zHaHe(b(fXYqSQzmjSYvDz(2B^S$G*2zm`~ zz|1H()*;7X=EYfrp??_jo)Y!7zOF+1oH+Gyst*5dnt>J&v^emQER(+{Fp58xDYDVk z?M@0lF17HnptdOBNpEyr6sUlCnGgknjSoXu6K_0>ltD_SRaQ`4nQGf~5?-b7+9q=> z`gCaexF?S;Ce@@JdD?qv@c8Ba_Y2L2811(*P5Iy763@@sf31g|jv1QdSIpWAI1Gp) zA034KKzCUOxCs>XCyzsEg?_`z03MTj6q4k*L>Z_45s}~;1G9m0_Q<2LKch^_SPJcU z+>5TW9a!$~Iw6|HSs3>H*ia;<$fCZf1G^KKs1(=U08`eoFIk|{h(+?aiddNa!|CFj zXZQe63pJPauJ2R+5vX|O^#dc zP2B=uX+|FVR%%vDq8hAS&y!f)wmWz!!V>}6dX*ekA#y9*%p)=saGwi8i*FH&AB-bE zg=@>_DV#(F_cQIZQc!)Q&JeN>ZGv*?4|!WUzG*OWS0A-aP?wnysbS-+{&DMx>YU0R zQxvf&JutVtX@73kp)Db$%R1^-?%)=|$#tEvkX7;W>dV4bvv_|VtHs=}>FVHdgbTgt zao>6jB>FDr>+*WW!ZG!5 zA~B(7FVD5HY^@6{^_kZTZiJ**WFvADHD=|inWM;4`rCX8FH&2Q+-b{|Fv6VqPx!67 zYF6^qJm-#aV_AqbhMKW-AmzG^@C`F;$!_%`x1-zpf`$X=s1YEm&iAr&BA5MIz8~-n zQOi{H?(6A=A8&63L{r%XK-`pNC7{U$djoJB$P|DI{=b}oc0zP7RV|<#d?FYS_Oqfd z#1{d>c{{1_=c`)NwpkCp+}K0_`Kv~uYkAH7nrm^;^of2aYrCwxn26Jm&pI*ZDh^m+ srL($7&Bb^fp8!E=cH_4bCN6$Pz9_gY*q{DGSGFZZT>6951J literal 2772 zcmcguXH?V49{mRrsv@C=4go10JvrX082ptfGh_9`PiyoyiV~2p-XNq7=ZVE)b%_lT-R;L#QT#(JFO%Jbr9c0I#5gi zj#WMgvvn)2;?Wa3t7DL$$)B*`=w!%+fjF54c{IE@f9WN$1jj zyFd)E%u*xbXyQi$s4Q@c7T+Q`4#Ek~kYTu^89>qz>*{WTuSh^13+zeLy~-2eSg=i6 zUe74IIdQ_-@N5p3YQ!0YCDpJ%&DzbAg9ZDt zFOvp{dqlLm+U{=TIcTH6vC+FCdEh#u%hKGdW4Y)`V^6ES<6K zot97^pJGh(g(;@ZciE-OP4{;0cO2XyHLK&}X|!4$N1=(=L$d_TtC}Eec62rWB+&H! z+LkmmXNnFNh?kEOfj-vn$eu)ihI8hf)KJsU6rVHa6f|<@JXi;GIHk@XS`OUzY-vf* zH{EzI{ciP+g-!?Qo%G5K$>O+xw1dQYdWNf&b3P9;25xO&HO{eNoM^U(xw3>i@YbuH za5DDnMod?KgrscmUlbAMz24X$ffLRj4n^4sgN&F2NB0Es4*XGGPU$SJOT-5MEG4}59g?w{+V2WC>(>F19K zqeSXhTzys9jfEZZ{$E1as$P9dWyB84=6 zMx~DOk^BX=k_hUh{&# zlx~E-(Y0o)-8%KqZhquX=Z_x`vhZn6zGkRXy@t0wgM(L#MHfF!xQGsL^9qx4hOecO zb>Xmt2aTGq9+WbT>6+$7H}+0!n8)K)O?*HL zpYZZTH34G{_`+MM7^PJLm>cTfHJ}Gz<*_4z#{grgLLF;hzwilM6r3bqS5Qc#QbcN8 z;xiF>4m%c&pyw`Eq- zSgO#4?FP5O54~oCO=FTyb^S%f?!2OvYDg7T9SrPY*u*lD8gSO^6f~rOpvaXzzIhM| z)+8!Vl6YtgM+Q#T7*>2JzsY(-%M1Qy*5cRpxDH%Q&8?K~&Ze+ML;l_Jrp95M8~l<> z(EPOhC3iQOEJgH|lz3XaVZhT$H+mk!_^N~TY8Yr(*lq>u5|tJC(o2rPfi!6(bOo^Y zV8-24ydqJQjK=Ct;)l*C92K6zwlPJ$dmbHoHHhqLKe`X&$}jd8-J@b5`oQsXa=v}N zmfqc?ntQ@s(~k2{rD%<-JW;*rrQ4%zzoep!5Q&36%Q?kbj~>NJmMZdOF75v|acEB7 z0Z#WzGeoWzdwrq(%#60PrFWI%oTd-Y(II+~O)3$p>S&SdZ? zddB%&@iP@k0e$!``-2{68vL{X;;{>3n z;V9_BpnXpMe%a-T)o=vpe9&p@j)Do3JXe=PJ9hvTFMZ z^<}ZMnxeCjTWpxWG^<2LStV6`1H&|$Si+2Yb z`0N|;jIg;f+NheLkjjo5tY*;yBO z*2l@yTfF#9bEMPEY<4C6a}~8`M~CK~k@M{cefGkXP4@As_z~NN)ruW-tB;@+<4aVx zOymS!}j)5 zUiRn70wEI+xKLC*)*T=P3y3I7JFv?EfdR0jwKkE3_EH{rJ4+CIlHief1rs6OHa zW~-~w_yL90!1CmWH=9ij&d$*kdz8d8)`G@nkjJv3O560*^rVP-u5X%ECWr3YT^=_R z?^a_Q#78ZA+OmHAA$1Ph zeR5;`;C4LG$uBVkpBRb^jt}JnU}}OeH#D&{M3|g6HANy!k!IG0CRRujlR^la{$GaZ zn2^h1$^YBH^Yer84GQ0PI2RL^cmp3F3ZOz_E`_SQM&rXny+iRK$#FxW-_s@F>U0Lf IbPOW@4KOs<9RL6T diff --git a/res/drawable-xxhdpi/ic_widget_resize_handle.png b/res/drawable-xxhdpi/ic_widget_resize_handle.png index 144cac9962fada388e162f6f3d358e7e844e6e21..736a157de977e295b66dc9b4473d9e5d81daa1d0 100644 GIT binary patch delta 1621 zcmV-b2CDh+7TXMv8Gi%-001TtOAY`41|msBK~#8N&Dcw9RmUC2@$Y};+;gs9JbEGJ zC1jjJC_znv1B-x2BNJDUI8AF6DUAtDRTgPMLW&gS!6Fn1TvbXc6Pjp^aR`tu zswgDkm2{D+32ohwU~KU)!C(V6_?&xY{;gExtBWi!_PtfV>wh!)=qHWNV))-DB{-qw zAtggzX0ps4iH*e(`98kZ%Wj|cYDV**lqji`X{J7SK3bE-a%*5)vd>5L!8B7T z2;H8fFaWoJ{cfp>}*yrIop~g zfSDD?9=x(S{(m4n<@&TJ*O#7(Ke)2_*n=}GfS@&-vzY8ySSy(Npg9X~!n?pFmQkn8sjtiuU|y^3TKN04NGb(J2KK5CkCk zsBh=AJ;;xPKc~GuAk|TkRveS;4}#wf{b}BJw`7~e;(rhfcgmw!bwhg(ZF=J5PqO>c zerIudN79IAfqlxh#;2NQ|Hjs#cr2sMVGwt!dt=>!m!tjeAI{+Q7J;Gy@#JjHf54vg zwQt!v9NYy67I3z%_N|`vt?>jq#d-qaw#lsExh(WtBe^XX*SEz_2lp9~kx3%)QWtC=`sb?LHhcjbGwO5OI-b}* zG$&ArWJEHSdV4rMaPQphQUh4Vmj$W*)^88o`%zkN>_*>b;KX&PE>Ee^x@GdNq@ z(E5FIznv{2#Uvui>P*|vubV5H3ScSFil%MNZGS_nGm1zNsXSxPr8}n1*g%9LlqNxm zW^C9w^<4UlRf@wG+XXLuz&OjXjs!+@dm z85lTBewy|`;l}DeMIF^*sm15)L``&*jsCL&C3M4{%y2!rT zb9#ryNXeEeqVegSuk<`*+f$*4RJFXFG*?~^y5>k>)Q9)r*!8ps((``CV@~p+{1Rw$-iy%gXp-IdejeowsFnLhfRkI z6-FQv#h=SJNA(BKZ^B^4g?bF;{H8?*o1=4id@?c#XtzIG5PH8q;QJqcbdUGBrAA$nkcThqW^^;jI9JLhp& z^#gl<-}J!#hUmkj%UQgR_H|2Y%y+`09{#m@_PXq{(Y|gC9XYdW?jBfbK1;6oKvQM( zS;5YUmQ-Ul%;sG>L$0OI39S6Bx#t2xf8kXa$vIF@$f<|77J?>(0IU z_14~B_5AYe%U`YgWaXRl2{B};e6(V5h!J7jNoXbpb$iuds{bnQ*D;YL_1j~%8)UnRQRj(`77?I4tV1|C_rh*;;*IX#wq~H|8xHa(a{b_ TBD^C700000NkvXXu0mjfCGRh` literal 2928 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 diff --git a/res/drawable-xxhdpi/page_hover_left.9.png b/res/drawable-xxhdpi/page_hover_left.9.png index 63869dd3e614e3263450de97251977cb9836e126..c81f86c023ba177be8357e4aea23b206fe5e00c7 100644 GIT binary patch delta 97 zcmcb?STaE}nuURZ;acQ|!$8W~)5S5Qf-#w)>A!_S?ZJ8_hGzX{k;C;#qRS06_zopr08H^A AfB*mh delta 198 zcmXT9!8k#(o{fQlp(dch14ywHJ9&n106`5$N(Ye7S>O>_%)r3i3Bru#Cr_^h3RZc# zIEHw1zP;|q)u15Y_R##|GUbw$d>0sZ`yTJ;yHFIx@#xf~w22?~ul=Riw7~6D=IN~F zcWdv+8!_fIH8u&hhi{C$=EnMK>hHLA_Ur3E}6Ug&uSbOwW`tDnm{r-UW|IATd$ diff --git a/res/drawable-xxhdpi/page_hover_left_active.9.png b/res/drawable-xxhdpi/page_hover_left_active.9.png index 9a418ce1e37e9061b78d7a62ba495af2a128ce2b..858a3b2ab0820fb0416301d1872f4f078c0ca273 100644 GIT binary patch delta 97 zcmcb?STaE}nuURZ;acQ|!$8W~)5S5Qf-#w)>A!_S?ZJ8_hGzX{k;C;#qRS06_*A ADF6Tf delta 198 zcmXT9!8k#(o{fQlp(dch14ywHJ9&n106`5$N(Ye7S>O>_%)r3i3Bru#Cr_^h3RZc# zIEHw1zP;|q)u15Y_R##|GUbxleivr$b~xVAccCbXhEDNuXBKT2*QhqvvKH{XH8sN$=nMu=S3j3^P6)5S5Qf-(63)4#_JCTvDL`~Gt>uW$~LxYQB8=F|kc zBO?Eg2gr2F_Gz&l3Ou^F%UzWJ*QUNthvsa_N(x|nloi6TICE>Gao}@CpkWN2u6{1- HoD!M<3AZSH delta 215 zcmb<=$v8o>o{fQlp(dch14ywHJ9&n106`5$N(Ye7S>O>_%)r3i3Bru#Cr_^h3U+(C zIEHw1zP-MYx50pi)5S5Qf-(63)4#_JCTvDL`~Gt>uW$~LxYQB8=F|kc zBO?Eg2keozmI>u)S={9=+OH+|B~|umt7YcZBMX?0TwTGiAy6Zrt$8a4&@cv1S3j3^ HP6o{fQlp(dch14ywHJ9&n106`5$N(Ye7S>O>_%)r3i3Bru#Cr_^h3U+(C zIEHw1zP-MYx50piQE z$Eo>S-s9&J#sg>0baQ&O6wI?`*vlFfl+g4s@PPB)PvRCz_WxF1ik_O6l`q0){bs{q zAo1a_%ai(T8!vfB?bsW*htK#6cMr!s#++#zo}a2+I594vRM3hcotfvx0@WKzKzA{C My85}Sb4q9e012~GaR2}S diff --git a/res/drawable-xxhdpi/portal_ring_inner.png b/res/drawable-xxhdpi/portal_ring_inner.png index d088a172d9082b70c2e90c07fa4369e0b8f02438..cd23cf7ace695e3f6485f66315f2184fbbc01e27 100644 GIT binary patch literal 5663 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 literal 9918 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 diff --git a/res/drawable-xxhdpi/portal_ring_inner_nolip.png b/res/drawable-xxhdpi/portal_ring_inner_nolip.png index 0fad65629bfb6a4594054e080b9dc936b3916c38..d82b910e9851b97d35f07dd1f0ef38dd88c36567 100644 GIT binary patch literal 5418 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

X|O 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 i=^gL?$^sKnS>FKRnAWRehg*>V00004nJ zaCd?*qxs3xYk_Lcdb&7zqQ$Cob@qT=Md=OQ6z<1y(tor)AAe6f#%A9#MaYT6M)=cCxfRDYmrh7Llo*-0QSar}DGy(28eMZu5nju>yX)fI zczdx~Z+6+t^-(|g_uKhYJ^zfp)|LZ8E&lzcm&`nO{gKeh($24L z=eav~T~W(?RS}$We&f_tlW!^?ubx%x+{kt6#73U09kCk0iIcK~G#Okn`mPB~Jn`Fo z@z#Cox49k6y;QIF{nMvUtM~5RJD;uj;PMFOm4!0#vGMWs_ENod?viUALLV*an5rgd zvUTbSxrTd3j~<==`}gnsMH;`Bl!}MVF!8+~9~)b1E!F$aK`+dd^Ro(DgvU}%`ITm~ z&;ILLl#%aQ8{v7$WUm}w`+R1PZnvYCHg50R5*u{(_{EPEf1)@(26=I6s$Md2otDb2 zC&;!pjz3Vuk%Lk3$Z4Q-ReAaM^d~}7n_DM`o-deP#<_Lt)~}`vic4LlrDiLO9N1$Y z*NSZ1nGnThX^K1pHm@B@EQ~$;GhNy~d5Xd%O7Itr5nL*G?m91AiT2H%P=XuWG6EiKup?vA9 zZ_KN|o(Ps~V_|>eA;&3dyXLOIRsaF!9z?d%m() z*6yp=#XNI=Ei*_ypcWLF(K(gduf9AgeAxxj1Ctmwsd(m1|8S&9q3^MwocNN38LZal z|CyVc@84G0q-ZqLr%t=f_iC+N;-po&C8c$B|GG~zv-H?lTUWE!mPq~HzoI3GC86QZ z>_%w@JGKu=Ml<)^y>sW!n!lf8Yu~+l_wU}#n?KnOurvH;tY9#3j&oOSU3g&8*-2i# znyc)BtBQ&~9WJr@yZqszh04n>zudok`EvWFFOt8S;-kb|S7|9+VE@2WxrJ|{`mku=HI@3d%c`I5Xj2LGVO4eTevyt|H2H(Qyy0nLmhoX z_ed&D{}s6Lu0|h!z_c~olA@i4pG5Y%YkuBm@vp%sD_S%lq&#T7PmqaL)KW+Jhu2sZ zOfGba>IvE)<(~P=JZbi(tenuGWQO;|{`rQhl6sR@9#Z`qI%U;- z8Cf{rWd#bDZ5RkEP;^#lmdKI;Vst04{xN%>V!Z diff --git a/res/drawable-xxhdpi/quantum_panel_dark_bitmap.9.png b/res/drawable-xxhdpi/quantum_panel_dark_bitmap.9.png index 7979cf747784e1b17b513b7dc6bdfdbdd5e7dc28..48d584b95b4bde0e3bda063a788ff8695adc111a 100644 GIT binary patch delta 974 zcmV;<12O!x3gZWmBYy*`Nklx-eV=@TyBgKGaa}~Grn9B$E+R~+5`L*V61rTf z1_BO$C&TcMYJv$2-GW|SGN~w32ZrI^3QRlXd1~;)&p}Y~{(q)DvJJywWMZNPhnVJ) zs^MuunNEhOHQ1eF`8PF@RB8`+dO{P~13REpf=0ot%O3>mk&|bv9XD&im7LF!aK(25 zk!@N2t}O?Z88v0rk_odH-tOJEUxP7bM2^l;funsF-)a2pg?I9fOHnM_K}BU2OQcty zKKryWgS6HvLVvvA0eQ#0upKnL1u$HxYU5_k-)4*%>i=>76E@3Knx-+}yZBCp*rC3w z@60)=+C#w^E+EyH?H!CzSO;A)6B8h}YHV34Xntbf7(rHD5UfbPT#+v%?=7S_`r z144~I91CI%>1aSK%QsXs!Kmt4H68w~zsl{XR49{Fjic|JQw6aGJEF{vnp9OmsZ=Jb zR8>u>Ee}d{B9&VzV0LDK2%4ad*eG32N=h4`lm^9uqsZ|G&zQY#jvNsUj)x@pFcKKVxRS0KYiSfUC~Rs z4=Uu{^T&6swKrln>O1Of$#kn zyMJLHDw*T*U&zH5`BUdFP)H63^3Ko;g<22W*Zw6Fi-M6fFv{N_CKPCsRE!0o2~6ql zoL_Z*`e)!^hu<)*35c~^QWd#Ur63guQZN;X{DDa=q(Yc3{~$HPy%qQk&j5gTCVMG% zWxM>B$h9T6fFwjpPJK&da!N&^7AKW`LPxuPVsTO}ishAB@&y124i*pz5SiSQT7J!< wWPxERq@!Y!${;rw7-TX?mGCeBO3{Y=1F25Jy0cup4FCWD07*qoM6N<$f4nJ zaCd?*qxs3xYk_L6dAc};RLprhcYpsK7m?%pli%Nacd@ZWWC|Or;w%=<2?D&jvj1J8 zye=*C@>-$D`rlC_bHU<8oFW1O>a4L7HSF~)7rA&9eeCy4-2e6Sog4E$zKhA*^Io~P z?ELes<#u((pRbjF_sd+naLOUhh5oNx*wn8%I(D@C@^-J}S>Nm9|N6v?t`mB0+}}i# zZ{NQoHajPHp6{~h4{rYWzG>2Oo!d!HiOfotdO^9DM6zRlA8FcVbA8R%xA{lagM2&F z9{)btqPf*uD))WY8_{(^xkkdg~qWI^dpQIVyCrJf;-@I6S`oG_=`{OUTXkVCSA+m9oKa2b= z6(hz8d&(b9K3^`@Ex+K(&5gDeXEWBmPjhz{&;MKbI6Ne2W#$+CB!&g;N>_W%i8$=q z91|BTEXu{;wX(cy+UfU

~P?msHdOFzQrsx{v_nBg%zKf@B@@F0A-FNAv*HSP-(Y5lqD#lzZFzh_vx>0WEUUNqyn zVf#DsE?0>2J~kt<$sT@BaycIISjn7n3?w@GDAX5~dL@s$qRYiFI4x#hdM-)5;w zRq@q*tzGgB=}foVex588n1BACWHoo0_>V0{RNsuG^ zU8beaQeM^`KB2ypiDBt>g`i%$s{7jCdP6?9Og?hSeZ9>k>xuV+R>qyVaHr66qVTZ; zyJ|~L2DAFRWHC@3<(!o&CH z7u?WWxs55}>im@KzZuN=I(%F9^*?6KjHeR@4GGEP<7wMdy&A$En_XlC! zt6IIiT#LON-<~|o9)4=kkK12WCN4a^>BsYvi`l~u{^F@VsITo@x^hLs0iFXw2lN_P z8_XHr>??it=6C+S+Gndv?EZ_qzM53~H{-9;`Onh*{O@YZE8d@zYk1BukI`b){QYa9 zJH3k1Sxu)W#fN-MYxH{M_jgBh{`|$7k>bW8ostbQQ#~gA+;i`rknfc~tpy(Xi?k(vNX$5KaHO?ruq! zL4NV2$1mnrtx;A;n;3h8h5L|8pz^=t_qXwK+gnCG7M0CCaHVTw#sgrn$KdJe=d#Wz Gp$P!%8*N+w diff --git a/res/drawable-xxhdpi/screenpanel.9.png b/res/drawable-xxhdpi/screenpanel.9.png index 2d1395479f967e9c1c6eafeaa7193901435675de..b221b378fcb78f2a1a2cc37dd379b87b174478cf 100644 GIT binary patch delta 197 zcmV;$06PEL0@eYL8Gi%-002u=xk~^50G&xhK~#7F?bkJ;!ax*8;WLK2yZd%hQH52I zHDuE`4=Uuj-T(C8w0F3(?ZX~Up+6vn0(f~)xzdL7le)dEj$i#JpQ%00000NkvXXu0mjfhxK1M delta 330 zcmcb{c#CO*WIY=L1H;4E!UI5xrP#?cgaZg_I8r)*e9i)o$YKTt?oJS9G(UNIEl}`} zr;B4qMC;p`-hGD*cpT<4cT7yU${Le>?kaQPnsp958Eog9`fWsZX(Uhbs0$Lc%v_{? z`je92v4zUtBcEL5HF_qX{-tittfMSGddYc-to44+f*V%nFg;uKYv%E{hDw_l%MS3* zQGGb)q^sUa#;_Tee9{spxu(yU$(xf_eEp?yUR>sj^_N!oeY2PP6TL!j^HqUOaV=}a z6<@oas1ihHUOhRjD)-9bU1!3ar*87vSsrJ;{!7Lt1wXSHvrfL>mfIhDUDr9(G`n3u zFn3lOw~PV5LRc2tnnwOl+l^WGHSpbte-y{&y=&e3z0G&Kr-p5>|5L{}d73_Z>w$H< QfFZ%)>FVdQ&MBb@09go&tpET3 diff --git a/res/drawable-xxhdpi/screenpanel_hover.9.png b/res/drawable-xxhdpi/screenpanel_hover.9.png index 369fc44e1e0157845ab4971cd49e2ae1532fac2a..418cf0a62767a2c343c7b506302d0e7b8a40e4fa 100644 GIT binary patch delta 194 zcmV;z06qWC0@DGI8Gi%-002u=xk~^50GdfeK~#7F?bpQt!T=0F(O(zb-JL-@K-r-q z^vY(qop6Wb-(Ri?CuV-Ov!kFsAO!_rw@}5v!oD*L0}W-zsyOrMV wLficgU{Iw?@6NhZaZ!NzQ~xrUKc*eG0H}3^z~jRSpa1{>07*qoM6N<$f(d?C761SM delta 318 zcmcc2c#dg;WIY=L1H;4E!UI5xrP#?cgaZg_I8r)*e9i)o$YKTt?oJS9G(UNIEl}`- zr;B4qMC;p`-ds$EJPz@z7cJ~ zIhZebZ0Gx<%=tx8hv26>->;^yR9&~*x`9FcDogzXHR;BM9XgkG>{V|uU^hD;s5hzL z6?snQo>Ry%$|R=fG~YdFAUb!sY94Y|}FDn*8@D>wodC(>aDa)`;q5x1NrA zxG4;s=~}pHr=9fPfS9!Ig&vWL_s!Su4zDqvA*e3<t3f`HW9vbU%)&l^s3a2 z#dZ!`t}x7CR5qHxT6TczMqIMyEBQB(I@@>Eez0b~Can|wa?NQ$pzj$xUHx3vIVCg! E00ps!xc~qF diff --git a/res/drawable-xxhdpi/virtual_preload.9.png b/res/drawable-xxhdpi/virtual_preload.9.png index 93e3b3362fa4c9f267f7a6c5582665ce47e345a1..03c6e7f7d935cd6e16f3b63c1a1954b741c04070 100644 GIT binary patch literal 6802 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 AMF0Q* literal 11343 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 E2RQbynE(I) diff --git a/res/drawable-xxhdpi/virtual_preload_folder.9.png b/res/drawable-xxhdpi/virtual_preload_folder.9.png index fae19b3f9b3140a217c6dc4e5ca4cbe296a6bdf1..052a72e0728560dcb9c37dd3431d8f9b13938587 100644 GIT binary patch literal 2986 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 DcJ8F$ diff --git a/res/drawable-xxhdpi/widget_resize_frame.9.png b/res/drawable-xxhdpi/widget_resize_frame.9.png index 7e189d44249d052501f315cd385336e2e5ca0d78..ea527f46afe7abf55b22bfc42511c78b6a426e80 100644 GIT binary patch delta 163 zcmeywvYBy$L_HHT0|SHZ?yq}*6lZ`>h%1o(|NlRbEI!s;2&5QGg8YIR9G=}s19Bof zT^vIy;@)0aDA?e@<9aaRqlu%a2;<)v%@-k^43$d83wG41rM>kpnPq&wB0M>AT59Ar ziPM|jl-T6jZ~0w2-CyT6+lDo?_;E(C&{!QkoY K=d#Wzp$P!g9Y5p% literal 626 zcmeAS@N?(olHy`uVBq!ia0vp^D?ylp4M+xDmDLAQEX7WqAsj$Z!;#Vf4nJ zaCd?*qxs3xYZ(}rL_A#_Ln`LHy)h!Jclh~(FI)Fp9SGse2{ps;$US4@e-|gFO~&Ibpb|YLg|lk#5O`kH zAs%zxxIsRT1m}nS0UHx3vIVCg!0Qw*S AB>(^b diff --git a/res/drawable-xxhdpi/widget_resize_shadow.9.png b/res/drawable-xxhdpi/widget_resize_shadow.9.png index 41c448bbb302f0f5552f6de7aa67939e50ab9209..54121682fba4e3d4fa24f28559e4993881684f92 100644 GIT binary patch literal 605 zcmeAS@N?(olHy`uVBq!ia0vp^D?ylp1xWt7b9D&=1CxrUi(^Oy<%XFucb3Oz$l)u~rhriKJf4hiz~4f0eqg$a1R zWuNS&wbD~-x<{2a`ro>~_7|bKlMxFUls}D_-_wyLOt+{@AMX zT$AnfUT_AU7qXl*>EZ^jj<8IP4#!LL zc%8O5`gbmQ@+C)bk#5zh>q{ohD?TR3{>J|Xqx+n~f0iqk9DlRn&8W2XvC4!yCH5(36irYBCL0D%S3j3^P64nJ zaCd?*qxs3xYZ(}r3q4&NLn`LHy?Ze4QJ6%-MfpivV$W26`76Kt^*$%@Ts7fc2J23) zP&L-#yx&r+a@wWy!qlGzW=E#qeONH#Zk~C~_QU1>_V)6~UrDTgD|jH=#cQ6&Nny=O zB~||=PdcaAOq`@1^l1$^Mh`IQCoo-*>ii+J4wX zuP~Q?(c=;R`*BfujNjr~{^fynmU`zmvsPcuv%OS$zS7*7-}v+K()Q2&{>GnwR{VbU zeTCngX#ww-eQnu0Kh;NW{zk#HZ65OLY$piwfBv-LG0^;ta@}Ebf)# z4HkT?v(WBrs`B3XZ{O;l6L?uUzyI{(!rGG_^V4tslWPvY;jrHN%Q`Tq z)cvCk4*YMAcXU`(gl`FTT0ktuB My85}Sb4q9e0EfdWm;e9( literal 1290 zcma)6&ui0A9FI)q7%R+!2OYvA_294ON3&*2SRHNCx`G*{D_9W0Gomb@%^v)S+< z^RgX0diLhQ!<=56cu@Rt@Z@DE%z`j43jWxi;CpRTJ*>`<`E0^^((509L}H|E_6JiW|*nz&@;>hh(Qh3Z8y#Sdj5h1wv}eDrgTB~aLp}s4PD+@9 zC<0mL#PO6Yix)vs5R<$>ZaE>2t0`GcPJr&kl4!m)ua>n!Hx~IyvkiyojR04UoB6P;px%-b=1)onI8&!gG)YoqYqs&?>-sq>!;xs!yLI))H0QD z_xsM{7z0KIGOxBq-adIyJGTDw;m(H(_pI1g^Rv0Tw)y7ncBTc~(TVl3!(nW%5OMp# z!KHY|EVlO_@Xq#e8klnX!Az@1=nFp`J)9Foq1AQ+_J^Yr?Tk8|ITWssExmqpe&fXc fvrKFMcKjvt@yAg8%gnWJ^zT&6&uW|58*9G-*hsm| diff --git a/res/drawable-xxhdpi/workspace_bg.9.png b/res/drawable-xxhdpi/workspace_bg.9.png index efc9b0465881383de73faf2cc77fab87eaa9c00f..0d180c20b87b851b2e927fb80f512a099541c597 100644 GIT binary patch delta 157 zcmV;O0Al~<2(AH;8Gi%-002NgH6j220Ch=3K~#7F?Ue-%fIticxBQHk^R$yF?#&d5 z+|_0mr;(JTy0uDmlQiAZAlttsKOn^uOAH>k2Z-^&3vAzXR{$}r7as@2fWMj(4mhOU zljeCw=6=nL!OhRX-Y~Ks2YP_f+kyW$d4TK1f9?4Z_D^!1>lS1g;cG~=l-s~j00000 LNkvXXu0mjfJ1RyV literal 1126 zcmbVLPiPcZ7@tIFW5o92K~qbH3Fg$@d2eQSW@p%K*qzyl3vP^?#l|$0OlIC@hh*lB zGjF?-&_j$MRgw18(t~&q6hTBqPaZtwpb)4hOG-&86hu=>BT)?X}PCK&iaV2pb$3#i@ry# zuMMWXd$&*=NV8E72M&D{b4JHj!$lq`={b)6N!pIB8dA|Pw2Y?90+2EgW@Kn&iUqlt zkpxLe=i40HVMS_JWYm=hvThbX$AdhZLKv!e!pWmO; zwfdo?=d023>QBFQ&x0=Gw*2H}@BLR7&n`SL%DFpTSFHOFi+atbBXZT}s~|{XL88&Yz3>ztMgj zT$OHp+}Zf|ueyC?{g1JZ|91F&%f~)CFzmtV)5Un&mi*9sF0ZvZedaV-D< diff --git a/res/drawable-xxxhdpi/ic_all_apps_bg_hand.png b/res/drawable-xxxhdpi/ic_all_apps_bg_hand.png index c638456b5a5aea83784ff2ed43198dfc667dde51..615374a78ad0cc3c7f5f505e7b5048c478800867 100644 GIT binary patch literal 30824 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�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

LAF+g-}NaJk~`f0=Gwm`Of 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 fU-E7fFLE^Al)J%-65TWNQj8M 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 a-Dz$d$6rd>1N`5PBrl^ZT_I)i`Tqb0%5;VR literal 14554 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 f8Lar3$O0G&ruN-Zv7`OxYeR^%QSiJs diff --git a/res/drawable-xxxhdpi/ic_all_apps_bg_icon_4.png b/res/drawable-xxxhdpi/ic_all_apps_bg_icon_4.png index 7bead8a3220f189131a6ce1ae1abca6e74e79160..d7fb29baf3446d84bedf1da8735389fe582e13ad 100644 GIT binary patch literal 5269 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 literal 10317 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 Us%Yc>`+=V>!bqz@!#?u=0cCZ`!~g&Q diff --git a/res/drawable-xxxhdpi/ic_arrow_back_grey.png b/res/drawable-xxxhdpi/ic_arrow_back_grey.png index 79b9b486c9bfee950fd4e9a9c4a8e78491cc137a..6b42051f336f384e3120f3ec70c9d1163410c033 100755 GIT binary patch delta 194 zcmaFGc#m;{O8rt#7srqa#kHKnsKXR^oD)b4U^x`zkJ|~_otxw zj0`|6=&YI~eC_H9uNxt9 l$@jk`3vUClMM2iqv`A~uFtcFMW)=W(Jzf1=);T3K0RS3qSFiv8 delta 206 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 diff --git a/res/drawable-xxxhdpi/ic_remove_launcher.png b/res/drawable-xxxhdpi/ic_remove_launcher.png index 7043be0157db1a3fa5e30f3206ab20ec449caaac..418d81ad6a651d3fc216118748bbad63c9e03b2d 100644 GIT binary patch delta 1721 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 diff --git a/res/drawable-xxxhdpi/ic_search_grey.png b/res/drawable-xxxhdpi/ic_search_grey.png index bd5fdf4446d4f0ceede6ae3ec23798e375333057..d9571866ec2f9bf970bb4dfd2f0eb949e93e3554 100755 GIT binary patch delta 892 zcmV-?1B3j`2a^YoB!5~-L_t(|0qntn00000fS~=U7pVdOVCw7|*m4_;qxhE%+?R5p z4lgrv9ZnTyhJH>H?v|PBU_TRPW-OPPdH1pJ{KFtwk8Df#zVqwHEXj7!7{iln;zM?F zg0A14U?(52i6qxl7u@G~Q=aj}q7sHBt3x5mVcw4(~Naa}{selNSfoekW@6ozrh?}jmj zyV%H%UJhYi`g=co^JKit9P1(G@(Nk_MoRiDa4El{fH%3OABX-93iyedrHTzGrn~-CJRS=tzV}HHHiVu#R=pXW);K;g6-SiIPW9Isf(cpW)*Tg+IA92ujm zM2w@39Dge80-qs$oK+0XBO##BoaYf(-+j}PG9??5?=EmgGeGYWW*G5r`gKSTlF zafzjik(@*U8Lu(Fms$69>L}m@ms{GHPa7g^Cx4r{hv|%<_PY^G=U%pWYaUm|ZI(K& zrwvu^g|t`UBr5478FDsau;gkA=Fqy9TkwVl$!k>%6ZOG#&o_$1N1r5 z?e9?XL&(Pse1ZDuGxt{#3VPO3$0U}q2lZk%EAtCxUPM99SR-O2kF%cl*ugP6$vDeS zK6PdbkM}%J^FsVXh#bGQKVMYe)F3pL_jE-v}C*vMIYrmdrpae2!YJMVu- zRbCuH>~q$IYB@>621mZv!YDdmc-CYXXyJ68Doac?oO!HCya6_4Yq!i5VYpUA%dcW* z9$S0~hObhrfiY&@FSo_#XV!&Lu?Fbv%B*e1d5UpY?0;sFe&KbtIYSJmxHTCaRH)C6 zuqG+ih&Th&RH&FEtTPnrq&NdhRH(2ctgRGlLYx8mWjj(|K#*eH7H1$ug(`D|)kCo! ziZgIdg>pH<>ZVxFR5y@Ty$cF#vQTyfhe<~xoeBBf~jys#Tp1OFZ`9G>7jvp zqIbosOvopexjGrHH{z=j&79I~&|-n?7sJ&kqcXJ4gx$~o{1JW}7U20`7NpqH;z52V zUZ~~BPg^UHS+Ov|Db1edz5t<<(|HU$C$fN2Y=3b}JP4ubd_o8Tl$K8jA?Q+CzJ`W|hK7cQhQ@z_ Y->-HFd@%6L-2eap07*qoM6N<$f@amb*#H0l diff --git a/res/drawable-xxxhdpi/ic_uninstall_launcher.png b/res/drawable-xxxhdpi/ic_uninstall_launcher.png index 77a3302f6e1c9be0b0c51bedb8c1af3d077536ec..724437a2a500d53d94048b5612307a2e9328b4c7 100644 GIT binary patch delta 1032 zcmV+j1o!)m6Oss!8Gi%-001NyIwk-B1KCMLK~#7F?b-vZEk_s!@c+#2c?fHTwT-x8 z71p*9)reKww%x{k;d@bS+iruab9QFFCiCr^-2RiZIoikhPiC+0{PKN^i!o@5X?UNZ zqlP1NOfM-i1cBa9Zxf8bDFh;DKb8ytBurD~(rg3@O>iZf(SK%u7SclnwyINj}S*9@{!+W5c7EQM-*0~s7F(LJ)A&nH*! zcn>O6)M(M6?0-a0c&Z>FEsEGgOSRMnFZkfJ!Fj+Amwtd<9zdZ@Ud~874+kJ<_4L@( zVy#h$&f{Cn7IQ^qokfZ_&Q`@C`|o@qhKbqv(szrOmUMg>iuucjPFUm@`{TbtrN~q} z0#ai2I>)_%$;Iq;@opERPmbTXt|d5@s;AKkF2IV*0)LdSNn;2|F>w|v7+BQnQfwcd z)%)8DOTo8%267C{3I-aY^#zI^<5(e~^@M7}<22@esIgALw>mAw~>Z ziV-8FUs%CG;6WiE6}&>R#Z_2{1?lvieDo>OLl-?%5Xc}viPOWP!fb4`+a! zk>}wdgnuNUz{IH)bm_GcA^q4e$%`UHpo=_hvdp75w>Xl#-fr&R>c|VlhzSN0j1?nB zp1tAhPvK(y6ii{Dz@$nlF94gZzwSY3DVseEARuUiQ{|-jKB!Y;V0#5xOD|o3yfyjWz_ASPENCl-H&^-m0K2-gSiKqJa(udGPfSV6J-JfvYni^_&3z7CcKu%;xM_?P zH~rTK%dX$!kPF_#G`i?1kJfG2H^a~Xz<*#4fP7T#`v{&yXN(Oh0@0HO-8klA{Q_jP zt@1kU@;$#gXq(SqP@%0nRXvu;fVSr2otWM>P3{)ZzbT;uc{{dVC2piPJiqHT6002ovPDHLkU;%<< C>*Hzw literal 2445 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 literal 2930 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�|F3lUF4 zWZb;X@$?ZzZ1KIHi-KMd{jfnH9}ub-R6}YU6q!1`<4ySd@WbaN5eexdk2GS4AXz^B z#ZXpI4XPis!Ch8BXb!PO)+udIrsa7BTt&PjB4PHighvA7fBrThsD}0GMnBvG0tYmB zQBCOzy|k)frwTu}8Q%j%#0#g1C38XG>bqwJFzgc$svpY=2+278(xD-RpkC3ueHtb);5AJeueA+VE6K)w`)O3z+=2|oZ26;} zfDkc!=C59ub5PMQZYs@3Iw`pooA>Pl

  • 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 P-=5c0)k9U^v5ojY_Rl3B diff --git a/res/drawable-xxxhdpi/portal_ring_outer.png b/res/drawable-xxxhdpi/portal_ring_outer.png index d2df32267004200e4d6ac08d238e2e96cc8fdab4..f2f818b3b698a223974da63647aea5f0ef1772c7 100644 GIT binary patch literal 20634 zcmeEsg;N|)v^DPT?gR}i?hxE9I6)V83+~S1?(UYr;sl4q9fAdSch`LReO0gO{SmKg zrfTH$?K@{qcUPUdAT?MMNg27c&(v<%1 z_W#=dG4Q__Kn{%C`X>wU_pd4%Q1#F-uyt?<@JNU#$Y`h-=s&P=vG55=a4^Z}@v5l^ zev(o!5S3HXvT%|UbF=YP*3vL>eEQ7FC_oLU;iqFR<|^gkWiQC95=_sEOBAYbNzEw? zmngA_aRVinTYU7u5`NG!E2| z6%LLt_tlCGO_Fw%j8;?ecmAI84e0gN!!F9wN?b`#$Hzv&$iz_I$sw7dw+0GIIb2>! zT+<8sY(6ykR2?hqI__M0v4#Bgz2Mkmdb?S~nCUMU(?@j%xAOe|9Ipuq-Ai+n`6y)) z^7pT1FIZ|Xw9+9xm?~w!(%R2|gV#O}y_PxJ?w56{t1t)9x!wD0oF7)%aA+kq$iZt` zmSKKk_!!=SZ|yC&6(eKOPfMY}O{!k74PPkJPxapZ5gjEfcxd?>@4UivMa!E>khtjn z{@&uZ`MH|L4tyY%SW!t1+J!?iWlXtlpF$~;^e1fF=9U?hKmH8e*Ne8uRL5w!_3+J< z;pO_!qluSuv~Uc7m>r-QDNsXE?*>r|{w7VIwCOfAlYZx?mjTT68}bR;{$! zrsbvgacT>tpP>6%E^M@<$Xr{oDP&lnxdA=CfGv{qq+Ct`8d+IcqZXEyFYJC0k;_;H z_4R$jisW23!nRit#EqncF9La>Aj()Wec=n&s_NpSU-=4UbC_*&RjC+E(bc~UT$J5{ z@+tRv9Z+%#KNTu-sj#`4(yGQHue*|mlc=Gz zqqs>eFqUfHWcMH&JOkf)MBnT8XBSd`R#F{~IMdoop&O;lw9Up&e9$)#yQ$+S=+_ef z0kAQC(zQV->8{Yf3p~5K1lBf;Cq9%XH-9&KthZ`F$*v)hR%mNu*0@-^?*m9MWwYYA zcwZ6Q=ss^1)8RF>HDiUs)r{(_A1Pt6WK>gn`I!xDWk$Ydpj>!)?j5yopOp*Pz9Czg z@zlzwu>7DeQRi1E7+vQNRZ_@Sl%c*)FAQG{Y0mDV4uLmYkZNwLb`pMG5|S@`*~DM- zb(lVdjYg^KvkgM1@Xj%9DsvCXTB8zMv5!cH3{Fb3z;@AFo0@7CHTK7m5pZ7JMS=_m z&;By2zNU}{%1EGCn|{~F_dwz(u`flZNu10RPfrWyL=m?G7w*G<)@9jd(5<=;B##G^ z+05TN6@0&Fl7fx>lu1nr7MJ2y$RQrLMujpbE!v#mhTtnVfqKsD%(SXGfTlAQkPpmXdoxD@>YaA)_U2a_m^ zIPX5QT9V+`eI#k~*mBX)j@jd65k2$Paq1cETqLi<|NCI`A~6!3?mAM7Pa5V&`8Wv( zfG=v6DP64=EF!oei-lZSs&VoLltN|`zfZh^vHXLnLW>uAX|_~C;wLed{rE2WvW7L%N5ct+n+#9HSJ8}U|DgkdRg z-y^c+3P<91PZV3pNt(sFYV@>2KR>fX6!q(?uS^#G!tK`tS==~Hi`1BiYiiI6#Hb0K z3EjpHa!_$ zUzQ75a+kGz6t|T3IlCo+j`LA&%pov+l#b(6)FH}+@eH4NAT{9>wqydqcBL3%m%Gg= zDyj`?w_edr?c6)3KM!}PbR;$9odvjZ%p83?PW#k&_5k>a{;R9B3rBsaosYtjwE0}I z&wK%pl^e4dD{V$LH;)h}>Bz1uurg*}_AuOU{@c85^yvXGR1Ck1Wmn<|KSaG^x0|9j zVR?gACY>^?oK7C2y+gm7xF}=OSie+7VJS(!lrowvF}X~k9V0y&a}u*ioiKo(<^^(H zY@1ro9kgdswTf2KzDxs0HCqz{T^(n@tULcgBe!O}SjVntPxsW!!Z~0P$D}iHO8Q^B zGwuTNeFO_ubm1@YCpUx6se#uOw0{IUt;xTV0Ug%94cPxgjWpmScveiKk0L%m_%~ot zl;r*(V`GKK=?p%eNOtN3S-BLhtl4RVhU4G;)%~}1Jt~cXtWLjwQP?FB5-Vd05YThDO`{ta zSF$U6f19|GgAZhkhr%aj<5a>V`6n2V_qP6l8|=ON1;#j+gB*yan9kD3C^M3q z@2btEIZrvp(xNKUPCI?M>4-PFwhs~L&P}l2$pAdayZsOJyYYR#AKCsOMOZDdCWvKZ zKlmU8Y5RL3>FWi~eCSXyF=m6kksk%nkud|sRS_jO3TJr!AVN@3kU0Q5;5gz>6xET7 zYx_R0PmC&NtaSEcIj!Xu{ef_|f0~w=qi|jtmv&h67i|Wd9 zE6dq#x3tl9E@pGNVK{2;D(m^EYj+AtPgf3eOl^ZERUb!h)XR&G05gJ!DMcnmYN}=_ zH=h7HO(F0O&iHEYaldW@|f==efn_aDj5*QmR6#Fv}u&T=8Fq z_F!r7BaY%(`5WkUO294byu%8?DR;HFC+~IJd*jf58lVAR`1|B$=#yTI?WlRS8sjhh zeOGUqA~7Qn+*@(8Vo@d_OS76lPs6)iAAPGDid436; z&^ALox4==J@H5=0#rrAW7nCp1<=X8=PTbj(B+8d<<2(k4r?5sx(*tZvUUf2Nyrgk2 zVV(Fh&}~Bq_oQmyuH8)@SVbl*e<@Nzfl2Q`>Id-Wgpg;FleXk0EY_^CQfuW2qRDI{ zlf6vL3q5Uz7G3*U6M&KyMIF}!3!YcJ80?>V9cfg&@H=ud<8>0N~-Q)L{axQ3s!G++nNylMTj(w53`6d%mQ zu56P1*gZ<{}NVsR+MygRalvPrYOj3=Ct$R zr7$KvI<|4TT)r0Ux#O$z`~CbD+zr3ga#(rFGd+SoJi%{QDxilJgG%uZ&*5=!4SV%M zTT%DgYgZW3($RD>rF^n{YC3ebiM>JAN_kOUcs)UR;q>)R zRA3b-dy)2jr{qddxJiEKEQ^Z4)$z~yrOp#<4X;Dk^TWyeB|~UvvG!uhxyj?Du}cU- zp7}Y1wo!vXaG+Z%Hhx1p;@5dWgL8ig1m%&xj;xnk*ONNudnKg0VOc&FLGWVD6;g-&X0E0gFY?&!Z&#S+i0P z8mBwZnRoneWBhiW)gm0SdKZS1M^@K_aByrTmsokuPL=Hsb&+IRziWRf!*~r-M z=IJje=={vaMWBXrd8v_YO7a@d$0u`w6}~xp!I>|XI@VOgo{6;4m=AWI8N5J7ywN+$ zqEG!7a&FR*1#mL9JDdhrC@y1VQm>j>59G3i4|pSMS*hr-wqAR`vZ)G(65OI5pop~* zVLVw_fLoP%ueBd z!g{TDygUWBHD*%$w6#tm)iT@)PahODzP-u3w{zgj4mKV%{)+Fs^vC%z;bW41wdzrr z!O0w=LyVL;V2H)F9KK}eYvSPf^XUcX>rT=IgU^*cV%t=PX@cW->OmmDaTD=ObB5R! z?v;k2oph@(*!Bq-B`;M(T}&{L`TO%ipw>TONNbY21cqYskvCBE!e~Axgv?ZbH887AxL=yG5V=%7jw_`Yr!|i3^w=d zoV&=L<6uX{tcRzH+iemJ$F8SkfIPgBFEc@mn8*R@b|Pnq=48T&?O z2-hFzEKdtc>Kt{bhL@e_R&E8oFE=PrV03QND=MTYHR$DGgF>~=4Q;$0ID_acBg9Hn zXZOVj2xjtN_Jh!u2{b1*#4HZe)-QiV+R;Z6$GEX>NdFjV&&yHv*rpdJ$#Smka(V#a zW09lUpi?N`qeDm~xHZS|e9)!PF?7^LAKuZh2rcyGEr&VBfhX6n91<;P&Gz>LQ2`R= z~V}D(g2zo}Jj*SG54u%+8rdkZsj7Gy0-&pDnu+tbM~t_F~i zUZOhDfO{2RtjJz#C}Sy_U1s9H45Fz!TYVj|*m!_UIq|KdCtPTDUb2wRyX@!X$Aqci zDVwsR*@X&$y*8wzB7Kib+al{qkB;H0)7QNjy2KGGHk_56eTPq8Uv5N_I3v(Fnt6K| zne$jb?f&BuegSn)>-f~kQ#C>XwO~zhG?9#unA1z@Np7Rl815L>&!xu|6I5H?O|(J- z4My-q&Q{;%Ot;k7yJ24q7KdiRWny@`?e{?1R@;q&7vAvVr}20GYq{a@bT>O79i#;H zqX|o4<*?3foU$j-HFLi@VrdZH9O7dtlg4VM3q0nNGU%lvpfLhuAPVKWoO9e%Yjyju zb|&S~7e>ZxiTBBE3Aj=F3&R+Hzod9Z?=$ME>O2=QrCyB$AtrFjm_%76e%k}UPsro& z75XhKjo^{Gw}`I03fmKAhy?GrZ?oP!P?`?Vk7+ad2eB*A8YAZZa!NPdmBM8wMgH+GWM6zG3;!m;%Gs{;rj+diM_( z7s=a2GF%;pwxgox@u=Tbid&pLqkB|7`JT}qE8kg%A(3Z(6(`^`;;Y2z>SNk8o$j-; zSy`y~JKb*T<9z+*7s7t9)?rLH>(TP~ihfJdu3#8mj2H-HYa!h=jebMJrhoC(G2Qzn z4?*3DkiTqT4I;;gkV*)rs%x}5B4pqB8sT^SfNpA9B_h1FR!w%U%$g*VfPXZk)}mU$ z^l^S9L-sdItgdy*xP?cBDAK_{pWN<8!`4R^867(epAso&DxtVJ->osav{jedh=I}_ z6}5*|eJXL+zU2)-S~MaG$6wwP-N|S=XesAY6lnp>WXGz0{Q%2K1{=_Oc3AplnX17} zZ$&2`ud62S^vbVwftZ0rU3X7asR$4MqnW9E1j!wm^b*zuYT~hH7r5l9MSCkBXgiO5gXh0V5mH^{6S!a(|81kKKqd! zt5bupQ^Z9<9&(eG=gzU~*;B;M9*s;{?HNIZiju{MN5Q|wH<8mZ64hLqNs}Qo$7M1Q z!LJI4udcI6vI|Me8E;G(Lsb1~Zk7K&a2cRzY}Dj%Ju#@bqIyY)CcUe&sp(v*r7bB@ zi^(vk^irOQr#pwW8aQZdd~dtOqhEEaZ$~e!<75D9)Kf7X)BU+v0%3MH*wxj;yN0up zn)ac#u_?-~KtQ83kN*noI>1!^k@Tw(s^H~XQ|TEsB(C7YtD%cioLX{rmpM$j#uGPc z^qX9iawn`tSk?}GpX%sCN(;4RKN|KqTw~Jp$@;gM^S0(WiKxhsSdHEo7W2Tj{uds3R8kI9Bd7 zE`dVD;Rr}eDWex7q0_#cc-Iy29dcc&cIOB}sgs>{YnbBbR3Rf2zZ=2Y+kgT7X(wNY z`83oTN)eg0v)~&z8#}8?W?iuVNj(2Ai;KSFb5aL-D1NR&M{dNR(9gC$cl7A!b=ShydLnXB^(p{Zho;vCv)xYO_0N18@MwM z*zAfui2T7g9ZH$6Vk8eF)B`el!^xT)KsWjtT^82RCJJ43h9*Pmdy~21Jy8NWnS*o) zC-}Y#iBYh_0CP0N8;h&r*uf&mT$jB#W>MJ@23rM@+u<4`GELra66Uf3NmhvdKM9{7@s^af&<@^)He!o34*=Y=9~wntB61UWvj zNFbiy5t9vpT&ad?$Q3)yO8gH5nAf>leUH%WrObP%>!(;|HkkqpMZw#Er}Q85a}pD% z34AI7V7%4!6lu+l8c5bfaZIxrQ^#`Oejq9tXd{Y(+0kg#)Wn2^ad?o{(jNa zy92O4Hr?(-6}9gyAWCk74@4E~a-G@&$%`4lrM**)Fr@p0SeqkzUFqEi;H#O?8f($O zKi)1}m{cCS^5T!;9fzw&aylBM(b0jHm%>lQBk8=|1OCdrC3PiVj zlNL@ML|sQ)gQ<)L9b(kmvh?v`Sj?}Yb=>^(MS|tu~lpwcfeG} zYFso)3%Z|<=m|=@ zAqJtA3fSP@KWsOo#r(Y&pV2+h;u&N@p>J#x=9(#(DXvOEqdN@a0O!Z`==&WGB>DI*#`Jd9fw~1B%KK z1FJbC+G=X`&yZk5fpBs*O^#4CK>d3MTkQt-fGz3J9c=p>OsE|5;rQ!bbv}V`Z#<5( zwGszh0t@vdOBeABp2md?-E|J|bHqb@d*&~{Xr)GOYYgyW6?mdms6bq@wu&_ljUOEs zFsG;y4efOnZZ^UBh>^W>>qRFm>iK(lfNc{p+t|b0z%bA1;JQ`Vo~=yg>FP8{&rbrp zy6#;U>e>&gq`wM+?5>rmeOomdcGfUex%bCk!*+`4^pQ3cl@3X=>Gl?wFe(Y*@8z`0 z=<}9yKp|xV9d1L`!Y{v6Jv$) zDXN6}!&~0p+rnG#_3f|RD& z>wmX}$tr#!vw0X7f5o(EqMj>g<%6SG3LP+xcdzC1A5~BB)D#-|pjw~Oaj7G0Z8Y`% zo!$4jo|JITslq(o(gMmQS1dGLuLeCyZZ>dwo7QyFA9eE&rRYFss3B1G99Z=`octt- z)>1($c>VRMz0+$71`?dESK_0taVPMd=BVM_{qM-oTnV8I^UO!Sas;{c;BV?-`Y-X_ zpWk4{6}>gm4epyJ34D%osW8q@=nvx|>4UMXQoaG8^~8F~Qu5e*xlc+80&uQ==7hRz zVNsIw_w#9G2SEd}`;a1=3x5AePMuEX8PPOj;5ZiJ*FV7_Ep374CvCEF2lYhe5~*xUH){NXyPuTqZ_tl+6kWgEmE+UNx+-}Y>nQy-%S z11>Qv8tN_&kmMA3fGqrC@xrBML{FftgSms(T)gU0D;->#S;AC1ZFQYs?D)^Imn}n?^0#QpK`J zl3+2OVi}lXKT$Z7zpuVGL`5z5xDsNdP_gXb0oqs5-4mG|S5%gL8^REvllrX_ysc^k zWEKbOEaDzx?RrQZkfBM&pK(e_@%M3Sn7nD&b904LdR88T=1zkkQ9lTunRY^{?@WAH z0L&b4gE!Mep7pqccaV`8mZiK6y&{uTTA*xGBawP`C@Ab>@X_^xH53H*@7M9lm~t!}{Vr%s;q-HcGNzW55u zC_gGhJ|*qFLMq-Xl3|%#*I}I13!bB^<*Sqo=p3UHk7Rx>h2t3@`k>9$$e`VEBNgsu zmCX|~8r_vKdMA&)z>X3_qO+NnT}QU47pxA-L$5FGA}1y&v9c6xE~6jgFjGf)h>vg6 znaGyxFQ`{`vws_qC*od}s6#xd?yZDSHAS{B>pL0xO6zqC1tcClsDoZg2{qcF-NHOB&o zc?Fy?9&)Av0ED+9-*>#~@o%bhzC5fOG+esF`of1)MfgZzn7k+Py)So0Vp%jB5$_7@!JRytc|U30JIBl%aW^C zEW23$y{_SH`Zq~$eSqb@xkvJVQQlqF+B-V-^bo`Na?=Xrl2pkI`Upt^(?LOJe}y}# zp?s)Gh#bJ8#arD_wsh^0Z~Y?-e*liiQ>dQdrt`LKUs%_w7y~mzeyM+km(P_Lo556d z)tNL&Df6c`#$v3qVnS3+w`C{&vNM8fZa zNAqg1NWF+bIJoz_i0*KUGjaqQHAYnRkw^BllXho%5L82|+P&ACEh1ab*Mep7dz)b4 zTQ)l<0}Ez;;7bdmL1O{CyA=7ORP5OjK{|)(9y#zaNf1!~$eL*%&Rv~3K!$WbZSw7( zk@%Zu8ND#RayLI}W98+>W{7S|*DEp;>8xyl2{UB2A8(H=L2rT@h!OPi^)^W(llDZL z{REWAfFLzRz1)Ziu4odZuN=Uo+p&kIIAq*L@}MSUgiE95qDRK;5W(KER=Oosd49)}_%O9@%?xudmiNMHiA)1dXtWd+;tLwpE$<&!Z zqqY&OvtZU-iJyPVOs4$fk%yY`5#7wSCd>6^!uzl-kq*w;abCqsF`A~(`hJ{#U{&M*8l9=0P>1akkPg$mBSSQ+69$ArH<(v?7MeJT&(o)wWdFp&h#U)fr? zEoZ@wkohd3R>A&ole4)_z_f4@bULKib$(aCD+4iR%2p2_?^|gD_QRwMdR9(57Ebvj z!RMm&=9tfyC(gJRD&V&6HHsfWr|VT8$g%*Wa-%PrJu|=#X7OU`%q8v3uHYb$|2(jO zJ8$s5V7=W){q8kf_TB|qlHNUrXyNh}H_;lYWk3~;gK#TEFyl0a@#DSO@nt_8JX8uM*lo14Tkt#5<|L z0;z%1bYL_shc3fD5^wWp6cgB#A&VD{ZEWgpT6(8T5p;sy7eGi01`q3D?vi@RoOQ27 z6`AA{3Jwtqf%+pX6nK?t6KVd1x#R|FC1ZE=F$TwgP!%C4)X~$`Yb?L-nUwp2q%U%=wG{K6^2Z$i=;mb%O|HhpBZ(y~Q6jVW^EJfh zXbAT)i|||F#Fm?mcZSDz=Jqqh?F-&aq8+{&hPz#qftK0fOL)!!cAUN>+IQ`ipFiEb zd`L!^sPsJ`TEpip?cEr?sortXGaxuCb4|7j26TIftEL81o4oDHeKA}*@p*A z6<4uhi!qi5+DRHCXqB*H@!ie!2Gr_HGL@Nd&*GxZs}WO}%>0f;`!zF^KQoP#=c*T{ zD(ySN;R-pP8~YmR$C;lTX1O_$+yBzKg{$ecR|q!w$(YnEeWHs+1nFpy4a`8c3yZl#BwwTy zgIRGBWO-FiYcMt|*)2%>C|7$q6$hZ4rnH%M*~1UZl{3DlEjmNc3DQl_f3|IunCw6Y zL(GKxAXA!w`lZy%2W|Ne<+>sJgCkC+9})nu3X@MQCj5qdI-ld}javBJd7%zj7>PW) zf!)l66Z8BN{RC*krcU1`bySGw@gJr66tlUpItFoA*KfZ}7}g`Vn3Rl?Q!Qg>naCKh zBlCVMQvr0kl*-kgQt6V|1ssb5B*ngoL3P}P`pU5-^lh(n~San6=|)B%*9eQ13z zTBsgll>i464{42%<3f5)_|^VM3|PUZ)R8;WzX7#;_4(TaG+M-m0qew85iTn46{J>= z*0$qfwAq|+0}GqtvfP8CI2!x2smWJ-2V$fjB-`w?KQe|`+Rr+$dPwSscJU8{YqhIP zxO-#OxO)8@&;WrHCf#As2e*jKh?(3j4{bDw6_(OeVz%?qL0}pvA@X_}z+I5H_?dW{ zo%EL#92HnMI|coI@Tm=Qq)W*qg(q@_+V*1VDS0kjxye&1soA8mtS@M{Yn*b$&avc< zAbw7I?ksQv-)c9R>+f~3>W;iINo*47{`3$^{q|J zoQJmtl=a@!Zp7T88;MQgT?tC$11}C2^CuCMA)k&)<5~2HzbPU-JU=d~n4Z)0cE?yn zc+*x!J9pQ1UQTlQ6_1^~6WX^k1{P&Ewj(P&ggoJ56_20PtJ?!QQ>Xlv?xND9Kfm>ccGf>XAPwPE3U7)iXqAt&v?4bgsho9-?_SF3&XsS1bu}MvVGza%$(Mf`_+}J5nAb}SvK#i5e&bQo% zc8#tOXhq7$lxR8f`fSF2ruD$DE;YMFRTL)iUI(7Rs=Ncv(z6Ws$1teC9SFyTtYRcp zt}7XE88?nr$?sD6kBgb*eNMMb85*w8^QI<5Qc2fpx3SkcNAe13H&7j{hE0d_>Fb-& zm>5L#`(1@zET)s0Y^vxZFG9j%3~el}ZiDaLD@)(MwVR7_QItv40rT{ahyzXiBhSCf z>EUA30aK#e`3Ih#X-x1T?Q@WTc#|Utpq{WmVaZ$d&efl>%RqQ$;`O41$-ynT@=D_v zmoF7HB3R_0=TvN?T>7Mwp;#nYaOYGn>_x>=Gw`(nvy7!Ip0HL@=?)@4i+eu_iXs#B zb@5^n1QLFiN=GH7IZ&g?%oP;P<~O-K1K}`Std+0g+~WMy1MJxD;#SeR!qucaoWQ%u zB_0I}T1V(P0`H}Eq?FFyJ*hm7T4-ND!)A!|GLZNYtlBvTpJP41m>{d$w@eW*0sr+W zjo0Dn>m$v7z#VOowgdR%l2u`u3FXvux%Di`6}j5%QBc27opyQznLydMv)=eN$xc0P z9bwKjIAcTkLyjG;)dSN^oD+UR$VzT;{xUM=&X;`au2@M92*!Fg;He*KFY2mT;p}t1 z-B29U(j&VFa)e$aw`re{>_gorBUL4Q@11^y9q(N5zhsxgc&1gC2uYHF(r zr=xPEN16-{Aq#!4$Rwm5&IXtQ^tRn0gt@e56_U06kOrW9e>6|}DUncpFPv)=L4rNE z|8_QD2wNs(mRe@D)V6+ix)3)Y)8h!-izQ$mMFu}zT9{8wbdks`)^8A*IRGkiP!A;^ z=ShUp_)|2U3hTN#ZJS7ILo>(YpiM(0z~OQ{ve-L}As57PKEtpwkoMWQ2e+OyQH-|) zK|pE6QI-g$d=IO{kk3x2jzO>-xaqTWC;y;p(tF2O!ti37t{CBrGjtYZ%p|AzJ#3cx zKsT>Hi--$)$h|c#X{TL|JXs{$5_CNO5?H(I_(c#`pk;5Iu)MN26#|;mXy7&p)(mwLEVxE5I11Viq$Og>(> zVr1NU@8(RxBgx9m8Get)11Od=a=ezQliq8pEBJ>?apqHOFgoE<#`9xGBYW=*_5fOA zMMeQ(Ol06N{cLt;@NNK^{mK&RZEXoo$wE*`KX)B(KdR%%-M^yWp4)>?D=Ar`Muu#M z1SO>gLN_JAH2aS>=E5AD5|~hns(((09(>!lOXR=N6XraETr2-=3@Tyoh>8Ht>3U{B z&~s{l!UU=+fED0&EW|y@-@ZqU$hIKcC`dyNOkIxDM~Kf_J`kYqVD*+UqaR|dZ>dNy z23atDn$K|@l!|Eh50}Ud0Ff`R{_57l=W4<)rhn!mf zJPsryB?cG7k2K$yL|V&ES%+Z%`e?+MO!6e3e+coEUpSKNmKgkgcnV6l(Wa7j;ds~C z78oL#)i6Q=@jtURv8x!O355Wv6B-)8qrv=^6$y6ui;d&Buxj_|v-j6N*hHEZR!bzz zA@+K&oc|9O?Bbfz6}?hq#ovve-oMnRg*9P2h*4I54L!gW$C~dUU(pRo4881ABInn0 zna0i%QP2LjWczq0GZ3XOpQlc!Bb|RUVe{B3{Nl?VM=OGnJ&>*A(_5%%gg&HQecaWgZUw@!Uv0piDG>i(1PhES1gk`V0`F z*$44^4tb&cAQDp#YhT`5+DJP9I8Q^!Nn~D1u4rz1{gl@$qP=2|+u>W_mHt(OfoVD6 z2Z&Miz!1%UW?J18lRe2r=A`Unt<6O*EoBmg$gPRi&FfiJ2e$kf%(x4esc>KYkfHY3 zCta|40I2UspnGTD6}|XfZwF%%CldB}{8S7>q_Qi`*NU*QSBYy8kb!JQ`D{K&wwx50 zWC)bU_N-{YJ|8yYo+Pi#po-6#1=$7NZDpCJ>>{-Gek9W(dPsGfI4)o38Uj6C`$RTb zYz;okTwr-eBH))qFh-S7CgopdT|dglll{hC_-7ZrpA$HOPmAK8EDWO$d#FV?{UuYxS`67@Y*y{iP8?MpT}$U16QOWZcqp(s8^H zSRxux=^eH3yYfRvrby;KBq8S#?ulPxc(HA;G=rXQ1haTu&7QH_;lId*JP|1{TY3Us zyRLUd=rDNaa$4|KOPKbl_SF8H)a#$p)~=b&T*`>2bwosy1jaTGN>O5O z6~SwkF405tPZ=TSSbGa{z3t8Z)$k-RaQJLYX_Rtr^cd3tr!2{=%Z7fDxCKchy0~Bq zjPB@IN=$gV$U>_~wwTbw5fxW0INJ<($R7nYFy+x>&348brPHWP!%q0bkLm-t@y1cP z8;3vh<={tKV__m_HCc(jjStSVNNo7Sq1zM79DGgxGEq;Un}~}xxqPhG(FqVnrEiHL zlHh2oR;$a|aBy6Mx%P4_s2-UbXQJZPR|o6O&vDf-QPDPvX$1Fak0sRgG6ISq5?Knd zVL+d$Xj36$k?%H1-B;)#agn>YB@&n+Pr|It<~7#_LO)U*r%^kOYe!QIP@@q>EGsuL0U_LT*BYz#IM;dMs&l*_loq1*dYSKaqG35WiX||nQNuo@=a#SB-`D%skn($VVZc0!MAiS1eZ$^_I6XD`ExzHHW1hb zUmGY4sE+nAY;I{E3IllyvT=-^s#=MGbh7>2@5;+6TwzgZQk)BIbm!+k(*y=1)5|Q9 zo7+%k_=I7_ctL?bl@;mxc01|o@B=u4Gh*NnEQxxvJ;jfzs6;82=NIr?F)Y8CbkZXz z`ns~E(-nM)QpQKrPm4HjZXEhdMQ~XOfiud_%&_Uv`{w^E#G3;d@s~zo=m94D5T?>H zV{*wMp$$__77}>ueZ;`Gn?##}Q#XJvPeV8LRKwc=GoLTr%M&nIAy8ruQc z@<8nV60XY0g#}FZ{RWJ0zQtO(8gnWj9i1}4^9g$a&!yCSU4ysmXo|$~&CDkaH2I{B z0UdpEYCF=d03WCH=B)1+a0ddjWiY&MRLh%C9ajwOW16!0y0-70gHtIb)#r+_EZl?iY zeiyk!Ap=NbAh172KQI4jNTynw&u(hz&taR_yYqdO%Q6Ac-@90+G=+N4%7?Zn(_8+{ zO#?0Ip%>9$t|Q}fLxS+70pE`IN18XSM{DIq4`0WyNW$#IRielv#Sb_5OQh=%|KTe| zQJ~wo-6T)Rdi53I-*)f6()Sx1_gAWz89|50^5l7ceII4MIc)7}wO|Ng*pi_s{6)G9 z@<${d;*aWsb68&F-6V7OpraSY#JV#wpZ*0cc)3GN@~L?(UbXp5n>5v+^9pRCo62rP z6XN364%2vz(RoQ#^lxuOdx-A%tg+ilV53`EQD8VuBP_fi3DRk*wezZfEVX*kTp1fY z#e>1_{t@CyroH>rfK2;hy$L-)gfS?HB<;~LZLO8B@|b&vf#Eq?zY*%QY(tAH(!^d- zm{`dzEx&#*p40xdb&gwYY$^thhN6!sb{Cue!G>{zmJO)P@=L*Owa?uUM59awb8^i9 zp<(0njg_=E-f-*&7v6r;xlf5~CVk0;UY6y!ec2|5qap6g{1;&3+J%vM1+=~HA0JTi z;OzP_rdbpXcONA4AVe;6hC=8sQd3}M4Rf?@S>iL?R=X1VE{w>|tq6-PQ!fig6XU5H z$zjJhCA?3Kz>w{mZLu5g6WG)NOOgdyAZJTo)nUL@Va^SK=>mQo5=?N+HZ_>~Y~6dv zH2tRMjqk25i3f8%F2;S2L5+9)42kJS*cb4UZHxR*%dr!Ack~*)KhdNFbDr`Rud+R?kn&tDP;u z5BmgJ`r$A`_4`Jn2ZN5hpKe<<(C(=4hZV_C-Ay&8&&S|Hh1OP576MJEi?HawEXWEH z(}7H~wIcvM;J>-HZC}Wqfi8+B^b@{@%3qP>( z0!RDor0K)SX?&?T!)Z2{BBaZ+^IfofZPEtg^mnJ8C!d@_!kpBa5|!ZZ2wwApYvBh`id0YmoD+#F3J5<^F7Ko%b=}?b3KDT$kjJGClmkhlSoS*8i%ZU$s z0RkY@s;?4a6D<9vFrf$sAA}{dT*B#F|7f{F$Fxb0k0AmN?iJr?ca^vO@mqQe82P;d z?_|_J5+xtZ(I7%JkSJdq8W6Kp?DoB~Rp76)4;$exLN@j&NeZJ8M%57Ck_q(Kp15|O zoid<;4z7d&_$l^#LxgB+fk3;uRO9X`FIQ5~DQ5OvBB^2COy?9sLMsC| zRpd+;|2fvj3&J+{4fd38C|Yl6-VyCkm`<#5O5yx%eB#S;9Jl$I8iEGnUHc>;+o zIovCJ7luRCc`_4WQ~cI;*d{Y{Ke3}z%~S`40AnsskAx_Y^mTllnIfq{oigl6ka$r# zIi`JPtcl^C2acF7z`8J}09QV-E-AJ+a+-3~OVGg5ebOF%qjI&W&I-NVS9xE0R2M^F z9F^X)TqeSFyAYSijjExQLtMBY|1$7jiIy8j7vS|Ts2R1cX+sQS>+q+q$MBM)ho#cN z2~vy6O#SRKu!zyd^HlI`aj@XYUyP8wM}=Z)qXsp1r}GWscDa~}YW@nf@>2lc|rV4%-ghVWzF={AO^zejCSTvDG!Q_HOR`JJ%|%S1kGk zh_}CD{e<5qX|w(=x%UE30Qow{286LEgpLKTVzy~vKUSs_(e-wZ#Boxt3{CBLW?VO%$GJD7DLq{Nbn_(5>6Kp&1zMeDF6WIR87m(?ruxdn?Bd zna=fIZ*>0-evHv1Y&)rDB{JGO!f(sSOW2rVi-Kk)gAQ_uL2PAC-Vf;QQ=?6J8u=cf z+Vc?EVfiN#VKAh@o|TG8-8zmMbA}W-TNVAet|+lav{ooX|JWr<&*mt6Cv@fE`lsn> zssHG-w1rnv)56{>i7!leI4u^3qZY(9VRzXof+WkJpLZzynf`TpzV63SY!2+S8w$#9 zLAlHT>&~`+;d;0CErBU48N(swVW_i85U|R`{q+L&yM%RFsVG|j2wS*Z#P`tl{OGxD zeY4zHuVj4itRXa0NNY})A4XT$5B8M<64oFXQKWA{Ysd1^5}>h*A-KCpJ*K3qDKYVN zj&@*xh9ct2`9;@iC9n1c!r6!S)$Hdl*j2usrua7inoraMnEKY?0-XYQOB2{KIwi*g zCyrg^Eh)@|yF_1ndnHsUs@53L^KM@pfVvl>E=rZ|oJfOui+VLxI;u@X|1TI0=kZj( ztixZHjb~bOjiBsFVf^FFxajoc$nco3h*-D*4sxIa9&(clu3?1SBTf(QLn<~REG9fM zDla8BDXX}!q(~^nU@xWO7t`bV_b&QdWFvc0mrbv_FjFT~msk#_j%jjIO3`Eb`b4>2Wc&gF<-W0G9k) zy;!inEcX!0f*8*xVJMPS<6Ktx2Kxs(Bg$;j+VS1J)o#<8#k~BYg6zVy_!n7ElTuUT z;-aJT(xYI9BqRXP7hK|vQ&V$ubK}_H0xvU@lE9SpA|6mL zvr7ufa`JinIrHX_$4IoSzf>j^*IO?cT@rZ)IVRKNV(R=}>;a5h5CQhv#Zn+vlEXWb zFjUFdVdiY^Mw#tSOfPLW_E|g5yIiC1J+^h(;MiOZpC`!ADJrWdD0z~d{j#vIu(UMI zm(tSG!a^WrKPf4wC@adz7x4Hsb7O;>>o$*Z%hfdntqoJZPO7e7YpNr?kZ?hZ8W+>; z_hJuV6uf91$NnN_t7K@Aal?#sMwHoSuTsA{eX_kV*`xS6^~JrsWo-BSm>tr}4$NZ% zVlkipoW~Oi1o{35ghC$gIlo3cH!x;CkZFf(KRoZ>&A8mHQyqIflPc4aZen*u^qDO# zwii<6Vrp5hEQ($f77tD=ffXa0hm)Ze9~oO_WSWg=95B=Mf3r7E?pPHa!{@DCZrAwM zsImRfb7r&64y|jo+Re>P8G?Vb+V%CJS)1+5)BfH#x;5@{cePFpckG?^O>Wo?{m@dP z6_UwSPPZ3w`{AWm6uc-L!03vF`Ngz#3{^620g+448b>r~?p3Y5hKR@wG#-f7;VG*{HIcPCn?`7St;uXf-=6 z@(lXLg?K4?(SAVjw_*pM8OmhbGQ(f zYTe&cC=`pA!R6k*)q2{q(>M9^BcQfThNTZJx;Cj^z2aDFVztl;=@%D?dQMQr&ac0C zQCR3{9moD6M$TjAdIq6hW|wBpH=W(JO&XD71#An_)i&L9%LmXIzL`whcDw!4Cl#Ad zpX_!RnZ6lLmipl|-?l1U*i|d*9U=|Es;Yz*X@&HQ3z;XkKPh<82m4#GREU)c<|Y_6 z^jjm$UK2D_T6gV8lSU)**4HbQYPBAA(uvj8He{X+xmsPFkV+TyyK1!(P+pPdbJIv~ zT_><4m|G3O(qgWgYT#8&_CtDJ^u@3%l6xMw6I}D{dQiyNI;$pV@>h~dXVshL&bsbi z$boK6BocYO4oAH|4u{t(60K>#)HG7t+YPBVRZdvR%QG?_RR>86`QwzIUqQ<&_+rJ` z75V(0KNy6*8S2c3_NW1D<*!~@B$bc@U2|t=9n#(1-OC0ScnPFtFu|!(Vu4ioYZTU_ zM1mC@E#%qxb39MM{X_a*^u>~i7@lZ8Z%t&7Afd5p&k|X;h72Nyl0z&Oi-ZI^BzTE8 z)Jx zom?h?^{|i9RUUPEpI6UGNew}KLEYeWUhr}UF$ywT{nInoJ>C|7y}*|y3k$FwQk{1^FHQ{W zJyj13GSe3C&+#&^O*@rfGLF+S#uu-LPUmGWi}a=evqkC7B+ugda_?-ZA!~=W_cdHV zj8_i~vI5$Ojzu)%@L%5K_0K$6%i5tezL1w&h+&Y?49#p2hv?NkUgUM?w4|n?9g-d5 z^yPxOk+XVWkdZB7Tf`x{K{sx9cn#N-$0RR2+(0|D$CrDE30n*lzz~hyBdF{@=B@Oa zKN;nP!!or)iZA==q04L$+ah)k5}EvDig$R8-GcJMw!zz>HNM$4XeDoB{K9y>WdgW3~bnBVN!G5N@9S^qySbinmqc)CGTR!zP1rNg3Y5Shi`BRkztfk`ygbPWl-|#qR>CU8I>J}dmJINU(d`t zKwem%psVAWa^pf?K122!U0_%_x}}tyF(}Ea$1VEoCr~ejQC#SSr7bWf6E0zf-VU$a zQ6`WTGh~hAjPynbYBI#cRf(6M28yuA`xKWQ8O>$TKe94QfHg)S&Wr_p8_GZFnnury z)u1gk5{joFxlml_g++hh+~r?f_AL7WPCqEjn9N#`SqzwgHx5s|S@VfH;jZ;-WKJvE z#>GYVLI0E+m%ovbGcuW(%;KRWFq04L>l^sU#~`D+pD!>JyyH~RLU9F1T!8C4YKA_> zC6LivW`-Hb4AP9Oku#&KL|5Iv*fZ+m!0PS3u;J~y)ciE3u_^XOL(Du?#d%G3kX^xG9zzn ztt$ngF=(2k7;Codp0w!K4{$-llH)6m&NdWK7Qq5(LCZiVovIYGULnw=BEJ&S~L-^kH^>r*?>*X3?IF9ab)9!-ZvYt2D`fVo;tj5vH_@cO(jfxxFI<6!gEED;W4rg{!39Lb~!qNGVixf{oCGMqel`%K@iq5%M-7dnVI4K zXHrIWHq?ljUYOf;0>GrhtZ1FQQ!T0z!g)CsVYn)I}@b9OdAzb+`GDyj)vb>>*PR&d>NX0=%wS`*D%8<}8jaueLzD0C|a2hvj; zZi@6+T#Hx}l%x_>ZPmbHT70)2pcOmgf1`$0p%rRrYhsg|;20cqvXfp*`$C$8sW{Ct zBPpoTu98)T^nVotjVx(nQMVb8zaKO;QDwttu=}>tR}9rfdcp z-!!WwHr#-doakgHy)2AS;#QTQkkYCWRcTdYF|EhbilNnNu>FG#H^E6xbh1M)4dCP}&1`lPoawArXCpHS%2K9! zMypUWo8e4H1~d?v$xxPhF{^O1ob_5Vk)d9hRLEW4t9Ob%q)rq?Q4~c{6h%=KMdyhB VpNaMiNxA?4002ovPDHLkV1f+!t8oAT literal 23360 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 diff --git a/res/drawable-xxxhdpi/portal_ring_rest.png b/res/drawable-xxxhdpi/portal_ring_rest.png index 11e92eeb604b57a155f2545d3277e566598df78b..2af67b8ee399f85b28eefed35620cc5ede31942d 100644 GIT binary patch literal 4993 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 LNkvXXu0mjf2ZnC# literal 8628 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 VD;OZ7d-*>KJ*}IXmFo7<{|88{vts}N diff --git a/res/drawable-xxxhdpi/quantum_panel_bitmap.9.png b/res/drawable-xxxhdpi/quantum_panel_bitmap.9.png index bc887fe916fe04ce9a4fddeb60f1cef32d46c291..915177d78d0c37fcd08844bec4425d3ce08314e5 100644 GIT binary patch delta 1094 zcmV-M1iAb26VM2d8Gi%-003<1Jiq_|1Q$s}K~#7F?b$__EHxAd@Fa!1Z*W-Q?yesK z+u|-;-1TdW&unpcILq1K?(R@ia_LFtKS`Z%ieyfoO8U&rzYX4dmHX>dZkrP08Z_pN zX^amj$D9m+`40yAL#9t8Fp`zSkjOZI?tx?$@hjRmu!p9GPk#?H76_ER_i%FXc=LKS zMge`CawbuUVv)*61_Le6!yz&uPx(mH8xHL9{FN(`01JO5yTnkSba}lK6~m~5+*H^H{g$0w z9;y#JMbTuGDDIms_7@qBV!!*Q^=`D)#=OvD_bs2Z^_k{5Yegl>3{r^}t9a(}Iqpsj z19smbr~|Je30^C57_BAB1FzBoTd|CLFRFyx`ULZAHGd+f(O?ZvFja=W(914wHEK_x z2W15$l)tB`vO|<%d(fm1TZx>WRo#HRAvt}RmzwqBPa6|joX73n)&dmi~#1(^Q(;N zqLV?CZhyVJg8s<9$?)%k#6N&Ckbw+jAOji5Kn609fed6I0~yFb1~QO=3}he!8OT5e zGLV4`WFP|>$Up`%a1#I}uOI`n9So$2FwkaOK?YLpr)NyfD*xRVMGOSeL^c`P$Q~rB za<;X9`K&%5*+)qEMb5yLuWY5BqIU&>6hCaq8GrcW>!>qq1;HZQmzL(J&6P*(;wNz=_e7J}XbT z{^MEE=G8twT{!QC&q`gV020^WQ&j)6M$nh#k&oPU`TH|}eMWU^S@X}IAHP3y_Z5df z_$0wP-~1=m*C>wfChvoxkI`X|v14`&@DCQ;)nano(*O_n$cfa zB}fe->Op;=#l1|B_pDW7MO6B>P87^vd4FdUS!7HXZFDMgSbgA9->xKynYlzQI;O(d zE{gTjM64c?jt3Tk6-2EOD+s1p{(2o%;;L_lP3g=IY;Cp?Xz`~gR37UVDiFlHX13B#HJPu73BVc%UVA-%r$O(|r$Rc|Var z5D^eF32=yr2HN2glS2V>c^EOk9wentI1a#=LFvQ4O+*4I^Zd{F7k%N<`UE~(2LJ#7 M07*qoM6N<$f~s^ARsaA1 literal 2546 zcmaJ@3p7;w8Xu7#GjPaNmGn*ORoJJ@qhOW@?s$v69oxHVmIu|YfV^;i0_6C z27QUXQWg{~^4czgHf{Ig@V3YD=zQ$j?=Y@P20{=I!CZ_oK29uWDBZ9#ybMIvstH)k z3NMsy|&Hw-gk%;-S zu!uJqU%&`rdw%hSyt!ecVOYu_5EKdpUO~o7WI_UoPNx%yE(8}B9D=~flf^Jsi4)6L z&N8qeIZq~%!Xk+nqh;hqNfKcP~CN(m%9kq{rRz1Iv{ z4hKR14da_=IVV{P5rQDOBvHmg>LFM;YmDUX?;UA@NHh$8nFuKgH;yggCB{Qy*qiN! zMZVzqB0hsi<_btr01-!~@dP-43{Y`gzJQD4Lp%x{0(jIY$Yqx2TlRDookC)hNuETI zN+PWTm~;;!lS=iV5J5Jb!lKREdW+>SSImQEeTxv^Uu=ngYs+BCATBJCaU_zs*)9l( zmcSBuv_y(wv1Y1{aq#8xL}IPdQCq0b_hv&fQ4+-Wlu6<-Gnr5HC{Z{bNQ#2!5SIiBAS?k1k)Um!zckaV3h7X-_;oapm#@PGiIIttA){lY(6pdX z^K`x0Opdbqd0~@}bFi8EW#gI{v!HZ1AuWULRI$Fx-ZrFQ^}2eqX|yQUgBUr%;LiVK zWc$h{(92xkBx0d5x$rRMwDZ|Ow(k44>btFX1@`nlg)r&g5054)hCXDpRX(dHpU~{k z&=pA?PJ6xBxj|V53-`9>pD0NiH7y>__s~a~9vd*rfzo%gSS)q>q zpsLLC$_25!5l}Kid&`HUDo?3UDBMOp{_DvnLqpWOpnV044GnkopXz*82r~-bc6WD6 zj5z(YD$M47XL7w*C>*-AXV0ELf`fy%;hmi?mE`%bSDiUn5%V42Y@dUDU|h3BV@zGo z3QL!K=iHwLGc{=6TL0l5{l4kx>EoVfMji2&_vgR-P}tbms4-cvVERC~*Y2wFf2L?s zDX7FwyE6$pcYca3aA}%zY|3!c$g|SYQVF(*bV+q{CF=#CJH9;VscC;}YiqDvF5kB5 zAI-1AZ>a}D?VBH(1O?{gE#f9^=jS>I0-sYTln7|!$oi%_JD{^=W|MU!TDpyCSoGb9b91t zVRJS(g@naD>KgstqdQ_;TIdP1@cS%4-0MdcON%_OY`uFRsj{C&HMcKppp}FWFKkABkq2~t?dA9=rC!!G z%|p9dKTcOmyOX|&G{)1_{Mu zi5mfuzZF5U>w1{+lFHNz_wvx`C{tZ`eU#43Zi||O$hIg%`FYoM*UJA3_`fir4QBd* z20(AzvM4pj17W&tV47U#x^TI^o=1&QP7Xs|w4vNkPq#0@S|>Vg8J0^ z%$=mUOzF#*IgkiS$$&y2TkdBF zsziQjwVH4X$g-<=5$i97;c;x~SV=0v3dMxb zjBLY7`>?_L6u;{=nRn&Swzf8LMf>}Ksi~<9WkUg>1S~Q)H*bm)i>EDq-v9Ha64i2g zsl{QBL%`}jFZ=OvOu?>l@fTVH-`$lhq9FhzTZ^}YS` z=1#wVrSJYFqFdM@eq6kND7kWK|GUsm56z?gcV0<-nRO|n$`{uL6Q_!-97p7zvdag2 zB8?v@-&neC^ErCe%2G4XpKD!VF{rxA(F^IcDjN?mz9iZuQ3>tN-?*7$3$4cC7Rk@S z4I|`VYY(cM=Oh%D23(vwyu|fP=FLM13`|nL@sm6C^*JY>m$cvbE^Vj>z*R386z1<& z#4*NlxiVoPD$7iTW~q-VM*6p+lf%4j7hF7)*SPITTO6mp zb1%W0WgfO(FPCC&)OCXB(4CS$;NBQA0d_jF-sgeoW!vl@tT5LdVr1vc%iM9AP#dVw zdt!NdM8sao-k`IktoumW(k!EBo; diff --git a/res/drawable-xxxhdpi/quantum_panel_dark_bitmap.9.png b/res/drawable-xxxhdpi/quantum_panel_dark_bitmap.9.png index 7cfd6e477a44f0188a9f637fbcc321cf32d5f9f0..27b846652720d642d7b69fc15672f887286e0b80 100644 GIT binary patch delta 1329 zcmV-11Th_Y6@UZug0_`~p!1 zuHD-q%H*|gPb;yI82Y7kh-3nrQV@sVud^DVifd1`2}X1U3+qoFRDUAdDWW9z%X94# z2Z0LGEze6g2EWtd1xAQOaTi{4<;}&Rhdr#Smx{;{LlM{`WUrZhTOQc|#2?>%`D*Za zA1e+pjS#0OEq`23JnhV5PCfg)mqqnjA)T1n7hBe^y<_95zqSSv!__dgDFU@+b-12* z`dPKSPgM0BnGck>YQw6(uidh4_0AT7KH^wtaU(Pk8Au#WJ%cbItZ#ZOiu;#9>sSAUC>gVa5%d-wZyU%V9vLwV@} zdoB;$p@$!SkEm)WudFIs3-D&*t4fNZ2wSCf?{I#{W6_I0tr-g?rI6BlSh#D z-ZZ^~%da?GkEm{WO{wZh6gZv0rgyHc9*LUm7zi~|jrko!75gtE7@?Xgfr!HPDDvk? zw}a8N_kWFxNP!O5dWnH(n?QxtatqY<9oA(M12F*{^wh`PPIHOJKqn*>*V0$Xoj@QE zXp#T}2m+C;0u|(q>XrV|`~|%%p~o=-6P`#|ltN-Q-w~>_9-+bnW=o(XjnEW{7L`DP z{fd{D;VcwBPJ>`SbwCMZ0*m}Fh%98koGfcd0e=q=nZQ(-Kth2ONGOm{AfZ4CBos&} zkWe565(*>~Nb(CL6i6tL0tp2Y3M3RrfrJ7H1riFRKth3p0tp3DAfZ4)frJ7nkWe6@ zKth2ONGOm{AO)%rCXi4dp+E|Z!6X;NR&oLf1yZ2ph&##OXUF5-(v_H7pyiiIQhVz% z?0z;)@#PsD7Xt0Ljq*-lzV1NJqzkmGZ!SVk6&;IW?C4SPY7ykMA`-keD z1^pBhiEH)|8tkm9*K+cT{`~&SCpNA5_s#?R_C90Y|05zLPc?0y_x{hiCzIaX_2+kA zK04Xn8}u&dWm6FpQS!P)md%@?+Olr-Z^~Ai_iP#&reqnl=7x zw2*jEqJ#g$*FfNK#P#>8300000NkvXXu0mjf{7`lz literal 2531 zcmaJ=3piAH8$ZaU(k8mF$Z3Sw&di*-&*YXFq6~6bgqS&VW=zb*%rKKyNo?0oN~yIW zTP`IevE9wLUl+K=|RB{%9pjNB#YBFA?5D{P|lSv?w2qY4OAt2>isfwq8q)Piq3mjC5D8zD= zSSAH^7I}PGvdRsIMfy1fiJZ&*Vpyu2C=^yQf`%t2z<44-BGKjb39VEGqyG)#t7v8D zS~*GxMwPN;1%mZMXg{fp)$Z>d>3~=?tU!erYYH!sBSVrUs8r?0al>JM@B*=bMI`ft zFrPw%$P7dXQOFcJ#1ja4kN`z!Oq7Dq`6y}9&e!yrY$grnkf}aIDjkNsDNC7N#HDn) z7mY~eFllVYq^_S-sp3fybkesN^F5(U`CDBUTY>UaGDWCNmN+>DLGdz`Oc^hegKYMv zu7iuXJVY$j37vI~`kXfhRftnifsaBa0Y6omCH_hjLIDGzBUB zSV$qFR3e|sqoBA6eZgNU_<2$>36_a`G9VU}%HYvZgb$Gf2o-{1Is;ufunE<%UseNqd|573ifxnvTOEJrquBspIO@k)8mhTHR1mn` z#@q68#TwSx1kafj@xHi>K4^YuMtERh=AZDn!Rs@3?fhld)^I|G@q*=3xF$w>ICRHv zf7&wrNvps5d`er2>~3Y{<0Bq-YRNrq2HtHRrQ6?hw?(~5dE@VgGv9l758s=^uX6}L zLblRBc{kWZ5AZ5uWZ`UIyH<(PlllFuN`23%`>zM=iP1K*GM)5jCR?WF<{7pdAFw%P zKcJr@7~8QU3CRQ63i)$}lRc|e+h0RYXz!byj}z)W&op+e(`KYO8a_-_qBSw z>$?G7+)Ef#ldK8`)V+F!6P(2{e(VSB+iN4GQV54+*vz1KH1V3jA3NaTXTvdL12yluZ z-J@eS!3X-{i>28GmE$97bzIE9dXH=x0*j2bzUjs_A;+59bLU4MewR;ksa980h*zvrrz$by6N+<*j`95B4>ak z;Ht*jbACt*KfwJp*UDg**IB<}Qi^G_`G{7}(~@{S{e=Uk*|M>>#d!7e6$5I^YtbiT zJ%$CQu7zGnmmPAzvC^Phbq1B58>=mhjZRlhPv5*`A%obSem^Yg<;uqC8?E=g#hdP< zP0un2zqm0n&^9A)c6DOb`c*T$SvkRrO^pi^&&gd9TMW|y6FqRs1T_QnG2RUD0!%(r zJy6I0FW~>c?i-tZd|BHHRCpBrv*;C=h3P`p;D}U>W0-xD89?^*dK{hVQsQo7qWO+C z|7a$`sQJUem3BbPlEMWauHRlk&6sxb#OYS%uA58lnXP@9@P0E?xs|?@h;q8 zFgwX*+jtbYFs<3E#lFAMU;L)%#lyZw`Rbg8mrrwFP_H!S{!o0>_n~e5l_hVUKInWT zx;LxTMHn{Z8WJz64O*W$So(hbo7Y{Wy?24Rflua)sl%EzrqI(TQ^3gj{F3IeY*A;^ z{SO6p9{F6y?wo+0TYGEX_WfEU+Yo(e$E6U4Cw{TBKnWd34d*F`|6Eg(Lq>bbdxW>@ z^SkTYVl?kh56^RF)Ygn;hdw@MW)NF?AU@W@t+_1s*+<)tX=&qwOZU>slE>;|>;2xJ zTMNh%trrME24jl4s%sa#t`7+MnF4VMih|IAu7y1sXb}<^(XM{Jmoq0FEVCUmuf18+hRbw^{4}G@v{;>i1`8oCY2x~Rj zsG1mD`iA4UVlcWEamdE^t(cq6KA&`TM_6nABW*d~efywkWN;~|0|#%uda>61iRB<_9b3#lHz#8wy!wy{=#~XLQ%9bo!-I@5* z#@w?P*dHZ4aG``fV%gZ~W#A|(u&l8vZ%I>t_cD>jq!yn;0YcH#0*k~eS4sW5^CAb$ zY<+#8@D^e5|<;NHLZK z`2{mLJiCzwbP0l+XkKHVQzw literal 1569 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 Ozq2wrPH}WWdj7wIv!h-B diff --git a/res/mipmap-hdpi/ic_launcher_home.png b/res/mipmap-hdpi/ic_launcher_home.png index b556d7abad0f756b75d08503fa78b1f4db3c9899..d068d92361a06550fb1bcdf36fbc4bf56242d54e 100644 GIT binary patch delta 220 zcmcb>{DyIYL_G&H0|P^nv2!Vqk_hk#aRt&quz&yl|NsA=VPHs`$-pr4jPcf|2ePs% zfD())L4Lsu4$p3+0Xa>cE{-7;x87dZ$k$-N(UO?$djEf~X^7M;Z+7v+rhhKCK9s(( zNryY=;$lR{16D?D=j#=5IvTx4Kr18E&}qdP9WD-0!Ife6GXfoc$X?u4 zwCeyDujuJ13)y0?aYs&6JRh1XKik1Az|m-%%9j|CrWK0X3twEAp5zoc?e9Hajz6N3 Tdm3`NK(6+5^>bP0l+XkKuAf!u literal 464 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xZ3?!EyURMI7SkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpoDaQ zPlzj!{tv_q4Ey)*|NsC083u;5nG6gw&lqog%6(8!87RS2666=mz)&{%tObzAnB?v5 z!qT5{GZ4sG<>}%W;&J@#<%68f4g#%-oHyEg)L2uRSYIexK2Kmz)aF>yD5G;*Qan|3 z^5wn-Kk~ZoKTI#2{NzSnnbN6i&R6nPRU9opf2|KQQ87Kk!N>;ZQ z8J_U(Yt!I4G+}C_BCpomy4|}CPP6bj`h8=PlfPR%O_cZL?-P+(e^|C|%I`n6rotnZ z@yZ+VMK5h#UA=v;b?E8+S-NJT*<1dsi#mhmdKI;Vst07T-P{Qv*} diff --git a/res/mipmap-mdpi/ic_launcher_home.png b/res/mipmap-mdpi/ic_launcher_home.png index 961bb7dbd595dc0f0390f487ccfe2a10bdf62881..16c8ec2e50d313f9772623ed0e0300b0a799b627 100644 GIT binary patch delta 188 zcmZ3$e1ma6$JY&4|>4B`Q3ZN8YNswPKgTu2M zX+Tb%r;B4q1>@Z_?1Bdjc$_Z=3A6?nfDy;vQ!npTzxq~ReyYwQLAl{JOGEJit&Ck9 zM}M0Jlui!4Py)uH2iE!AI$>hszUob5wrPqG!xBGELpSC#%$`SXdL_g$X5Hor@QmiK f(*0t_Yahk8G|hkGZt3R{ASZgd`njxgN@xNAgC|Ob literal 416 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)ISkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U?>He@+yIW!D$S;_Ip=|P53m}g%$=lt9 zr9b0lAdpk#>Eak-ar*9sgS-t2Jgtc`jiUFs)*Rqkb3rtsabvC_i)i=P2d(9Q_AgPi z*nY2}pFv|0qrjoXCLikF7&1kBnOW@W5R6)%)OgR8=fGTxiwaU#oL%l1zgLm^kbnK$ zByUZo8O*^wj@K6K&tjS$9LBKKevC63f2bd|PQ1&=smBt`Q|Ei6yC4 z$wjF^iowXh&{)^NOxM6P#L(Qzz|hLbLf62=%D|xc^wd)*8glbfGSez?Yxp!xw+yI( N!PC{xWt~$(69Cm3gkk^y diff --git a/res/mipmap-xhdpi/ic_launcher_home.png b/res/mipmap-xhdpi/ic_launcher_home.png index 46ec2b7753a0a3b4528d0d970a435a761434a4f4..8b2671bdd80f36d23f2f3d45842dfb78092feec3 100644 GIT binary patch delta 207 zcmdnZ{F-rsO1(sYPlzi680_D_|NsC0XBZgLW->6$JY&4|>4B`Q3ZN8YNswPKgTu2M zX+Tb+r;B4q1>@WEo`TGVJT8I30<6IjT+WUnPKsYHZ<}^_&G8+pznuHKcZ>N_5yp28 zGWiM@92<-~ezHw_b3jPu`NRU&vY5P6?_rJYjc1Sbj|m$km>%elF{r G5}E+%A5gRa literal 443 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeE3?v1%WpM*3mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC?Or- z6XFV_L54Cg?BBot|NsAI7#PxKGBC_MW4!fghdkpGpafG%kY6wZL)qlB7C;_jlDE4H zOMk}AKp2)G9792CoF6w3jVI=34isymh}-IMa}SnGS84#%Y` zo>d;fHyn-^G|rcLW%^TY&6Vz-ZmgT$hzPBC-kH!?7RSN$;_T<=%?vi%r@6nhRJhz& zlpy`dSp4;*mkj@_PS5EqcGqa^^5Ky9DXwD=^rB6sAacr$AEI&>(+Dl*nL6mmFB zQYmFJ6<%*pT{bZr=s?vH*NBpo#FA92Jdg>_@4Y~O#nQ4`{HGG<;TL#p?;OXk;vd$@?2>`LBkC*@e diff --git a/res/mipmap-xxhdpi/ic_launcher_home.png b/res/mipmap-xxhdpi/ic_launcher_home.png index d2975a39f063a3d9ce26feff9ccbce55ed49c7b8..43d8b7d886c9a928c666b0af551a1ab35c365aae 100644 GIT binary patch delta 238 zcmcb~+{H9OrCuVyC&ZNj4EFEe|NsC0GYkxAGZ`3Wo-y9~^gvct1yG8yB*-tA!Qt7B zG$3bzr;B4q1>@U`?1G04cpNSU3A6?nv;xT>jX!)(*92d(-TQC<(`f%qdli+Gq_j3R zNHwWkVPR3ZmeLt&$s#f}W#`tdUXBjuwJ&P%G1{iDci~=P@nw(DS}z5K@DS6dk1BH+ zMcb~)ub-y9J77x#m(!$TRWs+`bDWDEmMT1-WU9NH(Uob1&63j%x0+mzEGTs_brus4 lxbS`9b7n1mK|#T<7X&%pob^Ay=P47&Q=YDVF6*2UngH-VU2*^b literal 473 zcmeAS@N?(olHy`uVBq!ia0vp^6F``S8Ays|{O<-*Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nJu zC&U#<{|90QhW-2Z|NsC03jOa_LTXN)&j_5O!9Vj zVd>Af83^QT_H=O!$+-9S>S^A?3IYs)K~2#MShqhAyThcrq;-mHwqQoD{YK9gvD9ZR z0>AY*9?A#`UbKIzx}Z;CJ<}_uuFs3VOl1w>=MCyL@;q5}MreX*#_A026AC3uM8qb@ zzKDt3AEzK35az^D>9c-)l*8Huj~+Q|`Pqfa>nsSH;4kX6ZQ9RpFXyGKR|HPQ*qE%d zZaNodA5i?_(O2f1Ez{=Sc{(D|w* zt`Q|Ei6yC4$wjF^iowXh&{)^NOxM6P#L(Qzz|hLbLf62=%D|xc^wd)*8glbfGSez? VYxp!xw+yI(!PC{xWt~$(69E5enq2?@ From 6b7653d37fb276ff74278efcb9977423f771bbee Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 2 Sep 2015 16:11:09 -0700 Subject: [PATCH 004/219] Long-clicking workspace overlay buttons does the same thing as clicking them. Bug: 15000525 Change-Id: I4123863de888989ad6171cb43001c3ad86c19edb (cherry picked from commit c75917f12956734fbe93615f5ee27ecad1a46c63) --- src/com/android/launcher3/Launcher.java | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 8bfc841d30..c017dc05a8 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1369,38 +1369,48 @@ public class Launcher extends Activity } mOverviewPanel = (ViewGroup) findViewById(R.id.overview_panel); + // Long-clicking buttons in the overview panel does the same thing as clicking them. + OnLongClickListener performClickOnLongClick = new OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + return v.performClick(); + } + }; mWidgetsButton = findViewById(R.id.widget_button); mWidgetsButton.setOnClickListener(new OnClickListener() { @Override - public void onClick(View arg0) { + public void onClick(View view) { if (!mWorkspace.isSwitchingState()) { - onClickAddWidgetButton(arg0); + onClickAddWidgetButton(view); } } }); + mWidgetsButton.setOnLongClickListener(performClickOnLongClick); mWidgetsButton.setOnTouchListener(getHapticFeedbackTouchListener()); View wallpaperButton = findViewById(R.id.wallpaper_button); wallpaperButton.setOnClickListener(new OnClickListener() { @Override - public void onClick(View arg0) { + public void onClick(View view) { if (!mWorkspace.isSwitchingState()) { - onClickWallpaperPicker(arg0); + onClickWallpaperPicker(view); } } }); + wallpaperButton.setOnLongClickListener(performClickOnLongClick); wallpaperButton.setOnTouchListener(getHapticFeedbackTouchListener()); View settingsButton = findViewById(R.id.settings_button); if (hasSettings()) { settingsButton.setOnClickListener(new OnClickListener() { @Override - public void onClick(View arg0) { + public void onClick(View view) { if (!mWorkspace.isSwitchingState()) { - onClickSettingsButton(arg0); + onClickSettingsButton(view); } } }); + settingsButton.setOnLongClickListener(performClickOnLongClick); settingsButton.setOnTouchListener(getHapticFeedbackTouchListener()); } else { settingsButton.setVisibility(View.GONE); From 489fc56df80293f107fe706b19456edab10b9872 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 2 Sep 2015 14:45:39 -0700 Subject: [PATCH 005/219] Don't repeat ReorderPreviewAnimation for folders/widgets in power save mode. Since power save mode (introduced in Lollipop, also known as battery saver) disables animations, the ReorderPreviewAnimation looks bad - instead of displaced folders subtly and smoothly moving up and down, they violently jump between up and down positions in rapid succession. Setting the animation to not repeat in this case avoids this issue. Bug: 23675090 Change-Id: I8149610af75e7023dca28a942b3447228083cd33 (cherry picked from commit 9e0702f4af33db569c9ed79bdf311204abe40dd5) --- src/com/android/launcher3/CellLayout.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index 84e2d49c23..c018341ffd 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -37,6 +37,7 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.TransitionDrawable; import android.os.Build; import android.os.Parcelable; +import android.os.PowerManager; import android.support.v4.view.ViewCompat; import android.util.AttributeSet; import android.util.Log; @@ -47,6 +48,7 @@ import android.view.ViewDebug; import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.view.animation.DecelerateInterpolator; +import android.widget.Toast; import com.android.launcher3.BubbleTextView.BubbleTextShadowHandler; import com.android.launcher3.FolderIcon.FolderRingAnimator; @@ -2133,8 +2135,18 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { } ValueAnimator va = LauncherAnimUtils.ofFloat(child, 0f, 1f); a = va; - va.setRepeatMode(ValueAnimator.REVERSE); - va.setRepeatCount(ValueAnimator.INFINITE); + + // Animations are disabled in power save mode, causing the repeated animation to jump + // spastically between beginning and end states. Since this looks bad, we don't repeat + // the animation in power save mode. + PowerManager powerManager = (PowerManager) getContext() + .getSystemService(Context.POWER_SERVICE); + boolean powerSaverOn = Utilities.ATLEAST_LOLLIPOP && powerManager.isPowerSaveMode(); + if (!powerSaverOn) { + va.setRepeatMode(ValueAnimator.REVERSE); + va.setRepeatCount(ValueAnimator.INFINITE); + } + va.setDuration(mode == MODE_HINT ? HINT_DURATION : PREVIEW_DURATION); va.setStartDelay((int) (Math.random() * 60)); va.addUpdateListener(new AnimatorUpdateListener() { From aebd9fde89e949ef29c0a0367f4f7f34af64c6fd Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Fri, 28 Aug 2015 12:26:08 -0700 Subject: [PATCH 006/219] Reuse existing temporary wallpaper tiles when selecting same photo. Previously, if you selected a photo to set as the wallpaper multiple times, it kept adding temporary wallpaper tiles that were all identical. Now it reuses the same tile, updating the thumbnail and wallpaper if the Uri happens to point to a new image (such as if a photo is renamed). Change-Id: Ib05c9db4e1fd17226b503174f25add3368158b11 (cherry picked from commit f970ee5cdc0185fa5003ded178ef680813d8a259) --- .../launcher3/WallpaperPickerActivity.java | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index 59858501a5..b957754df7 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -842,12 +842,31 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } private void addTemporaryWallpaperTile(final Uri uri, boolean fromRestore) { - mTempWallpaperTiles.add(uri); - // Add a tile for the image picked from Gallery - final FrameLayout pickedImageThumbnail = (FrameLayout) getLayoutInflater(). - inflate(R.layout.wallpaper_picker_item, mWallpapersView, false); - pickedImageThumbnail.setVisibility(View.GONE); - mWallpapersView.addView(pickedImageThumbnail, 0); + // Add a tile for the image picked from Gallery, reusing the existing tile if there is one. + FrameLayout existingImageThumbnail = null; + int indexOfExistingTile = 0; + for (; indexOfExistingTile < mWallpapersView.getChildCount(); indexOfExistingTile++) { + FrameLayout thumbnail = (FrameLayout) mWallpapersView.getChildAt(indexOfExistingTile); + Object tag = thumbNail.getTag(); + if (tag instanceof UriWallpaperInfo && ((UriWallpaperInfo) tag).mUri.equals(uri)) { + existingImageThumbnail = thumbNail; + break; + } + } + final FrameLayout pickedImageThumbnail; + if (existingImageThumbnail != null) { + pickedImageThumbnail = existingImageThumbnail; + // Always move the existing wallpaper to the front so user can see it without scrolling. + mWallpapersView.removeViewAt(indexOfExistingTile); + mWallpapersView.addView(existingImageThumbnail, 0); + } else { + // This is the first time this temporary wallpaper has been added + pickedImageThumbnail = (FrameLayout) getLayoutInflater() + .inflate(R.layout.wallpaper_picker_item, mWallpapersView, false); + pickedImageThumbnail.setVisibility(View.GONE); + mWallpapersView.addView(pickedImageThumbnail, 0); + mTempWallpaperTiles.add(uri); + } // Load the thumbnail final ImageView image = (ImageView) pickedImageThumbnail.findViewById(R.id.wallpaper_image); @@ -857,7 +876,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { protected Bitmap doInBackground(Void...args) { try { int rotation = BitmapUtils.getRotationFromExif(context, uri); - return createThumbnail(defaultSize, context, uri, null, null, 0, rotation, false); + return createThumbnail(defaultSize, context, uri, null, null, 0, rotation, + false); } catch (SecurityException securityException) { if (isActivityDestroyed()) { // Temporarily granted permissions are revoked when the activity From b894aa1f671aee026e8555e4ed30c8dd415a40c2 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Fri, 28 Aug 2015 16:33:11 -0700 Subject: [PATCH 007/219] Fix typos caused by gerrit's inline editor. Change-Id: Ie142f5c6b418ac775cc167787f8e372d5354b91a (cherry picked from commit 1ea392f0bc30134a800be224d8fbcf1af63bb80b) --- .../src/com/android/launcher3/WallpaperPickerActivity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index b957754df7..d4047fc939 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -847,9 +847,9 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { int indexOfExistingTile = 0; for (; indexOfExistingTile < mWallpapersView.getChildCount(); indexOfExistingTile++) { FrameLayout thumbnail = (FrameLayout) mWallpapersView.getChildAt(indexOfExistingTile); - Object tag = thumbNail.getTag(); + Object tag = thumbnail.getTag(); if (tag instanceof UriWallpaperInfo && ((UriWallpaperInfo) tag).mUri.equals(uri)) { - existingImageThumbnail = thumbNail; + existingImageThumbnail = thumbnail; break; } } From 3e776a87dc5178ab7d2c31a8db06fe5657db4e4a Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 9 Sep 2015 18:21:49 -0700 Subject: [PATCH 008/219] Wallpaper preview parallax matches the actual wallpaper's. Cherry picking the following changes from ub-launcher3-master: Change-Id: I41c5bbbfdabfeb4e20d77e9b5804842a03211edf Change-Id: I69afa3f8cc59c77e9c4c25e29e8db8c4beb87462 Change-Id: I82b7ba506d51ee4b3812af5fbdf95d3303b37aef Change-Id: Id7c2b5483c5535d59be2f8a459ce7788e3c8318a Bug: 23568800 Change-Id: I343169b9fdc5ceaab3d4b39044627d78b7267868 --- WallpaperPicker/res/anim/fade_out.xml | 24 ++++++++ .../gallery3d/common/BitmapCropTask.java | 34 ++++++----- .../src/com/android/launcher3/CropView.java | 13 ++++- .../ThirdPartyWallpaperPickerListAdapter.java | 4 +- .../launcher3/WallpaperCropActivity.java | 58 +++++++++++++------ .../launcher3/WallpaperPickerActivity.java | 51 ++++++++++------ src/com/android/launcher3/Launcher.java | 5 +- src/com/android/launcher3/Workspace.java | 8 ++- 8 files changed, 141 insertions(+), 56 deletions(-) create mode 100644 WallpaperPicker/res/anim/fade_out.xml diff --git a/WallpaperPicker/res/anim/fade_out.xml b/WallpaperPicker/res/anim/fade_out.xml new file mode 100644 index 0000000000..2749d9280b --- /dev/null +++ b/WallpaperPicker/res/anim/fade_out.xml @@ -0,0 +1,24 @@ + + + + + + diff --git a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java index 45118bf45e..cb7090fade 100644 --- a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java +++ b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java @@ -45,6 +45,10 @@ public class BitmapCropTask extends AsyncTask { public void onBitmapCropped(byte[] imageBytes); } + public interface OnEndCropHandler { + public void run(boolean cropSucceeded); + } + private static final int DEFAULT_COMPRESS_QUALITY = 90; private static final String LOGTAG = "BitmapCropTask"; @@ -59,56 +63,56 @@ public class BitmapCropTask extends AsyncTask { boolean mSetWallpaper; boolean mSaveCroppedBitmap; Bitmap mCroppedBitmap; - Runnable mOnEndRunnable; + BitmapCropTask.OnEndCropHandler mOnEndCropHandler; Resources mResources; BitmapCropTask.OnBitmapCroppedHandler mOnBitmapCroppedHandler; boolean mNoCrop; public BitmapCropTask(Context c, String filePath, RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + boolean setWallpaper, boolean saveCroppedBitmap, OnEndCropHandler onEndCropHandler) { mContext = c; mInFilePath = filePath; init(cropBounds, rotation, - outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); + outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndCropHandler); } public BitmapCropTask(byte[] imageBytes, RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + boolean setWallpaper, boolean saveCroppedBitmap, OnEndCropHandler onEndCropHandler) { mInImageBytes = imageBytes; init(cropBounds, rotation, - outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); + outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndCropHandler); } public BitmapCropTask(Context c, Uri inUri, RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + boolean setWallpaper, boolean saveCroppedBitmap, OnEndCropHandler onEndCropHandler) { mContext = c; mInUri = inUri; init(cropBounds, rotation, - outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); + outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndCropHandler); } public BitmapCropTask(Context c, Resources res, int inResId, RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + boolean setWallpaper, boolean saveCroppedBitmap, OnEndCropHandler onEndCropHandler) { mContext = c; mInResId = inResId; mResources = res; init(cropBounds, rotation, - outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); + outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndCropHandler); } private void init(RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + boolean setWallpaper, boolean saveCroppedBitmap, OnEndCropHandler onEndCropHandler) { mCropBounds = cropBounds; mRotation = rotation; mOutWidth = outWidth; mOutHeight = outHeight; mSetWallpaper = setWallpaper; mSaveCroppedBitmap = saveCroppedBitmap; - mOnEndRunnable = onEndRunnable; + mOnEndCropHandler = onEndCropHandler; } public void setOnBitmapCropped(BitmapCropTask.OnBitmapCroppedHandler handler) { @@ -119,8 +123,8 @@ public class BitmapCropTask extends AsyncTask { mNoCrop = value; } - public void setOnEndRunnable(Runnable onEndRunnable) { - mOnEndRunnable = onEndRunnable; + public void setOnEndRunnable(OnEndCropHandler onEndCropHandler) { + mOnEndCropHandler = onEndCropHandler; } // Helper to setup input stream @@ -398,8 +402,8 @@ public class BitmapCropTask extends AsyncTask { @Override protected void onPostExecute(Boolean result) { - if (mOnEndRunnable != null) { - mOnEndRunnable.run(); + if (mOnEndCropHandler != null) { + mOnEndCropHandler.run(result); } } } \ No newline at end of file diff --git a/WallpaperPicker/src/com/android/launcher3/CropView.java b/WallpaperPicker/src/com/android/launcher3/CropView.java index 50f779add0..e98e23e981 100644 --- a/WallpaperPicker/src/com/android/launcher3/CropView.java +++ b/WallpaperPicker/src/com/android/launcher3/CropView.java @@ -31,7 +31,7 @@ import android.view.ViewTreeObserver.OnGlobalLayoutListener; import com.android.photos.views.TiledImageRenderer.TileSource; import com.android.photos.views.TiledImageView; -public class CropView extends TiledImageView implements OnScaleGestureListener { +public class CropView extends TiledImageView implements OnScaleGestureListener { private ScaleGestureDetector mScaleGestureDetector; private long mTouchDownTime; @@ -189,6 +189,17 @@ public class CropView extends TiledImageView implements OnScaleGestureListener { public void onScaleEnd(ScaleGestureDetector detector) { } + /** + * Offsets wallpaper preview according to the state it will be displayed in upon returning home. + * @param offset Ranges from 0 to 1, where 0 is the leftmost parallax and 1 is the rightmost. + */ + public void setParallaxOffset(float offset, RectF crop) { + offset = Math.max(0, Math.min(offset, 1)); // Make sure the offset is in the correct range. + float screenWidth = getWidth() / mRenderer.scale; + mCenterX = screenWidth / 2 + offset * (crop.width() - screenWidth) + crop.left; + updateCenter(); + } + public void moveToLeft() { if (getWidth() == 0 || getHeight() == 0) { final ViewTreeObserver observer = getViewTreeObserver(); diff --git a/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java b/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java index f46da53ec5..099bbda7bc 100644 --- a/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java +++ b/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java @@ -54,7 +54,9 @@ public class ThirdPartyWallpaperPickerListAdapter extends BaseAdapter implements final ComponentName itemComponentName = new ComponentName( mResolveInfo.activityInfo.packageName, mResolveInfo.activityInfo.name); Intent launchIntent = new Intent(Intent.ACTION_SET_WALLPAPER); - launchIntent.setComponent(itemComponentName); + launchIntent.setComponent(itemComponentName) + .putExtra(WallpaperPickerActivity.EXTRA_WALLPAPER_OFFSET, + a.getWallpaperParallaxOffset()); a.startActivityForResultSafely( launchIntent, WallpaperPickerActivity.PICK_WALLPAPER_THIRD_PARTY_ACTIVITY); } diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java index f2459dd3ec..0dbd3578a1 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java @@ -124,7 +124,11 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb @Override public void onClick(View v) { boolean finishActivityWhenDone = true; - cropImageAndSetWallpaper(imageUri, null, finishActivityWhenDone); + // Never fade on finish because we return to the app that started us (e.g. + // Photos), not the home screen. + boolean shouldFadeOutOnFinish = false; + cropImageAndSetWallpaper(imageUri, null, finishActivityWhenDone, + shouldFadeOutOnFinish); } }); mSetWallpaperButton = findViewById(R.id.set_wallpaper_button); @@ -246,8 +250,14 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb if (req.moveToLeft) { mCropView.moveToLeft(); } - if (req.scaleProvider != null) { - mCropView.setScale(req.scaleProvider.getScale(req.result)); + if (req.scaleAndOffsetProvider != null) { + TileSource src = req.result; + Point wallpaperSize = WallpaperUtils.getDefaultWallpaperSize( + getResources(), getWindowManager()); + RectF crop = Utils.getMaxCropRect(src.getImageWidth(), src.getImageHeight(), + wallpaperSize.x, wallpaperSize.y, false /* leftAligned */); + mCropView.setScale(req.scaleAndOffsetProvider.getScale(wallpaperSize, crop)); + mCropView.setParallaxOffset(req.scaleAndOffsetProvider.getParallaxOffset(), crop); } // Free last image @@ -265,13 +275,13 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb } public final void setCropViewTileSource(BitmapSource bitmapSource, boolean touchEnabled, - boolean moveToLeft, CropViewScaleProvider scaleProvider, Runnable postExecute) { + boolean moveToLeft, CropViewScaleAndOffsetProvider scaleProvider, Runnable postExecute) { final LoadRequest req = new LoadRequest(); req.moveToLeft = moveToLeft; req.src = bitmapSource; req.touchEnabled = touchEnabled; req.postExecute = postExecute; - req.scaleProvider = scaleProvider; + req.scaleAndOffsetProvider = scaleProvider; mCurrentLoadRequest = req; // Remove any pending requests @@ -295,17 +305,21 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb return getResources().getBoolean(R.bool.allow_rotation); } - protected void setWallpaper(Uri uri, final boolean finishActivityWhenDone) { + protected void setWallpaper(Uri uri, final boolean finishActivityWhenDone, + final boolean shouldFadeOutOnFinish) { int rotation = BitmapUtils.getRotationFromExif(getContext(), uri); BitmapCropTask cropTask = new BitmapCropTask( getContext(), uri, null, rotation, 0, 0, true, false, null); final Point bounds = cropTask.getImageBounds(); - Runnable onEndCrop = new Runnable() { - public void run() { + BitmapCropTask.OnEndCropHandler onEndCrop = new BitmapCropTask.OnEndCropHandler() { + public void run(boolean cropSucceeded) { updateWallpaperDimensions(bounds.x, bounds.y); if (finishActivityWhenDone) { setResult(Activity.RESULT_OK); finish(); + if (cropSucceeded && shouldFadeOutOnFinish) { + overridePendingTransition(0, R.anim.fade_out); + } } } }; @@ -314,8 +328,8 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb cropTask.execute(); } - protected void cropImageAndSetWallpaper( - Resources res, int resId, final boolean finishActivityWhenDone) { + protected void cropImageAndSetWallpaper(Resources res, int resId, + final boolean finishActivityWhenDone, final boolean shouldFadeOutOnFinish) { // crop this image and scale it down to the default wallpaper size for // this device int rotation = BitmapUtils.getRotationFromExif(res, resId); @@ -324,14 +338,17 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb getWindowManager()); RectF crop = Utils.getMaxCropRect( inSize.x, inSize.y, outSize.x, outSize.y, false); - Runnable onEndCrop = new Runnable() { - public void run() { + BitmapCropTask.OnEndCropHandler onEndCrop = new BitmapCropTask.OnEndCropHandler() { + public void run(boolean cropSucceeded) { // Passing 0, 0 will cause launcher to revert to using the // default wallpaper size updateWallpaperDimensions(0, 0); if (finishActivityWhenDone) { setResult(Activity.RESULT_OK); finish(); + if (cropSucceeded && shouldFadeOutOnFinish) { + overridePendingTransition(0, R.anim.fade_out); + } } } }; @@ -342,7 +359,8 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) protected void cropImageAndSetWallpaper(Uri uri, - BitmapCropTask.OnBitmapCroppedHandler onBitmapCroppedHandler, final boolean finishActivityWhenDone) { + BitmapCropTask.OnBitmapCroppedHandler onBitmapCroppedHandler, + final boolean finishActivityWhenDone, final boolean shouldFadeOutOnFinish) { boolean centerCrop = getResources().getBoolean(R.bool.center_crop); // Get the crop boolean ltr = mCropView.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR; @@ -418,13 +436,16 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb final int outWidth = (int) Math.round(cropRect.width() * cropScale); final int outHeight = (int) Math.round(cropRect.height() * cropScale); - Runnable onEndCrop = new Runnable() { - public void run() { + BitmapCropTask.OnEndCropHandler onEndCrop = new BitmapCropTask.OnEndCropHandler() { + public void run(boolean cropSucceeded) { updateWallpaperDimensions(outWidth, outHeight); if (finishActivityWhenDone) { setResult(Activity.RESULT_OK); finish(); } + if (cropSucceeded && shouldFadeOutOnFinish) { + overridePendingTransition(0, R.anim.fade_out); + } } }; BitmapCropTask cropTask = new BitmapCropTask(getContext(), uri, @@ -456,12 +477,13 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb boolean touchEnabled; boolean moveToLeft; Runnable postExecute; - CropViewScaleProvider scaleProvider; + CropViewScaleAndOffsetProvider scaleAndOffsetProvider; TileSource result; } - interface CropViewScaleProvider { - float getScale(TileSource src); + interface CropViewScaleAndOffsetProvider { + float getScale(Point wallpaperSize, RectF crop); + float getParallaxOffset(); } } diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index d4047fc939..b40e4bd809 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -16,7 +16,7 @@ package com.android.launcher3; -import android.Manifest.permission; +import android.Manifest; import android.animation.LayoutTransition; import android.annotation.TargetApi; import android.app.ActionBar; @@ -38,7 +38,6 @@ import android.graphics.PorterDuff; import android.graphics.RectF; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.Manifest; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; @@ -75,10 +74,8 @@ import com.android.gallery3d.common.BitmapCropTask; import com.android.gallery3d.common.BitmapUtils; import com.android.gallery3d.common.Utils; import com.android.launcher3.util.Thunk; -import com.android.launcher3.util.WallpaperUtils; import com.android.photos.BitmapRegionTileSource; import com.android.photos.BitmapRegionTileSource.BitmapSource; -import com.android.photos.views.TiledImageRenderer.TileSource; import java.io.File; import java.io.FileOutputStream; @@ -90,6 +87,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { public static final int IMAGE_PICK = 5; public static final int PICK_WALLPAPER_THIRD_PARTY_ACTIVITY = 6; + /** An Intent extra used when opening the wallpaper picker from the workspace overlay. */ + public static final String EXTRA_WALLPAPER_OFFSET = "com.android.launcher3.WALLPAPER_OFFSET"; private static final String TEMP_WALLPAPER_TILES = "TEMP_WALLPAPER_TILES"; private static final String SELECTED_INDEX = "SELECTED_INDEX"; private static final int FLAG_POST_DELAY_MILLIS = 200; @@ -110,6 +109,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { ArrayList mTempWallpaperTiles = new ArrayList(); private SavedWallpaperImages mSavedImages; @Thunk int mSelectedIndex = -1; + private float mWallpaperParallaxOffset; public static abstract class WallpaperTileInfo { protected View mView; @@ -179,7 +179,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { a.getSavedImages().writeImage(thumb, imageBytes); } }; - a.cropImageAndSetWallpaper(mUri, h, finishActivityWhenDone); + boolean shouldFadeOutOnFinish = a.getWallpaperParallaxOffset() == 0f; + a.cropImageAndSetWallpaper(mUri, h, finishActivityWhenDone, shouldFadeOutOnFinish); } @Override public boolean isSelectable() { @@ -207,7 +208,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { @Override public void run() { - if (bitmapSource.getLoadingState() == BitmapSource.State.LOADED) { + if (bitmapSource.getLoadingState() == BitmapSource.State.LOADED) { a.setWallpaperButtonEnabled(true); } } @@ -215,7 +216,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } @Override public void onSave(WallpaperPickerActivity a) { - a.setWallpaper(Uri.fromFile(mFile), true); + boolean shouldFadeOutOnFinish = a.getWallpaperParallaxOffset() == 0f; + a.setWallpaper(Uri.fromFile(mFile), true, shouldFadeOutOnFinish); } @Override public boolean isSelectable() { @@ -241,16 +243,16 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { a.setWallpaperButtonEnabled(false); final BitmapRegionTileSource.ResourceBitmapSource bitmapSource = new BitmapRegionTileSource.ResourceBitmapSource(mResources, mResId); - a.setCropViewTileSource(bitmapSource, false, false, new CropViewScaleProvider() { + a.setCropViewTileSource(bitmapSource, false, false, new CropViewScaleAndOffsetProvider() { @Override - public float getScale(TileSource src) { - Point wallpaperSize = WallpaperUtils.getDefaultWallpaperSize( - a.getResources(), a.getWindowManager()); - RectF crop = Utils.getMaxCropRect( - src.getImageWidth(), src.getImageHeight(), - wallpaperSize.x, wallpaperSize.y, false); - return wallpaperSize.x / crop.width(); + public float getScale(Point wallpaperSize, RectF crop) { + return wallpaperSize.x /crop.width(); + } + + @Override + public float getParallaxOffset() { + return a.getWallpaperParallaxOffset(); } }, new Runnable() { @@ -265,7 +267,9 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { @Override public void onSave(WallpaperPickerActivity a) { boolean finishActivityWhenDone = true; - a.cropImageAndSetWallpaper(mResources, mResId, finishActivityWhenDone); + boolean shouldFadeOutOnFinish = true; + a.cropImageAndSetWallpaper(mResources, mResId, finishActivityWhenDone, + shouldFadeOutOnFinish); } @Override public boolean isSelectable() { @@ -296,12 +300,17 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { LoadRequest req = new LoadRequest(); req.moveToLeft = false; req.touchEnabled = false; - req.scaleProvider = new CropViewScaleProvider() { + req.scaleAndOffsetProvider = new CropViewScaleAndOffsetProvider() { @Override - public float getScale(TileSource src) { + public float getScale(Point wallpaperSize, RectF crop) { return 1f; } + + @Override + public float getParallaxOffset() { + return 0; + } }; req.result = new DrawableTileSource(a.getContext(), defaultWallpaper, DrawableTileSource.MAX_PREVIEW_SIZE); @@ -461,6 +470,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } }; + mWallpaperParallaxOffset = getIntent().getFloatExtra(EXTRA_WALLPAPER_OFFSET, 0); + // Populate the built-in wallpapers ArrayList wallpapers = findBundledWallpapers(); mWallpapersView = (LinearLayout) findViewById(R.id.wallpaper_list); @@ -661,6 +672,10 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { mSetWallpaperButton.setEnabled(enabled); } + public float getWallpaperParallaxOffset() { + return mWallpaperParallaxOffset; + } + @Thunk void selectTile(View v) { if (mSelectedTile != null) { mSelectedTile.setSelected(false); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index c017dc05a8..e687ee2a9b 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2757,7 +2757,10 @@ public class Launcher extends Activity */ protected void onClickWallpaperPicker(View v) { if (LOGD) Log.d(TAG, "onClickWallpaperPicker"); - startActivityForResult(new Intent(Intent.ACTION_SET_WALLPAPER).setPackage(getPackageName()), + int pageScroll = mWorkspace.getScrollForPage(mWorkspace.getPageNearestToCenterOfScreen()); + float offset = mWorkspace.mWallpaperOffset.wallpaperOffsetForScroll(pageScroll); + startActivityForResult(new Intent(Intent.ACTION_SET_WALLPAPER).setPackage(getPackageName()) + .putExtra(WallpaperPickerActivity.EXTRA_WALLPAPER_OFFSET, offset), REQUEST_PICK_WALLPAPER); if (mLauncherCallbacks != null) { diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 856e3b88ad..b7d7c625d1 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1410,7 +1410,7 @@ public class Workspace extends PagedView return false; } - private float wallpaperOffsetForCurrentScroll() { + public float wallpaperOffsetForScroll(int scroll) { // TODO: do different behavior if it's a live wallpaper? // Don't use up all the wallpaper parallax until you have at least // MIN_PARALLAX_PAGE_SPAN pages @@ -1449,7 +1449,7 @@ public class Workspace extends PagedView // Sometimes the left parameter of the pages is animated during a layout transition; // this parameter offsets it to keep the wallpaper from animating as well int adjustedScroll = - getScrollX() - firstPageScrollX - getLayoutTransitionOffsetForPage(0); + scroll - firstPageScrollX - getLayoutTransitionOffsetForPage(0); float offset = Math.min(1, adjustedScroll / (float) scrollRange); offset = Math.max(0, offset); @@ -1463,6 +1463,10 @@ public class Workspace extends PagedView } } + private float wallpaperOffsetForCurrentScroll() { + return wallpaperOffsetForScroll(getScrollX()); + } + private int numEmptyScreensToIgnore() { int numScrollingPages = getChildCount() - numCustomPages(); if (numScrollingPages >= MIN_PARALLAX_PAGE_SPAN && hasExtraEmptyScreen()) { From c0b52fefbc11531d560359c093484099f9d1298e Mon Sep 17 00:00:00 2001 From: Winson Date: Wed, 9 Sep 2015 16:38:15 -0700 Subject: [PATCH 009/219] Refactoring to ensure item deletion always removes from the DB. - Routing the various places where we call through to delete from LauncherModel through Launcher, which will delegate the removal of the icon from the workspace, and properly handle the removal of all items and their contents from the db. Bug: 23944119 Change-Id: I022fe2b3e79da16b5af87505c4362490b8422686 --- .../android/launcher3/DeleteDropTarget.java | 37 +---------- src/com/android/launcher3/FocusHelper.java | 12 ++-- src/com/android/launcher3/Folder.java | 8 +-- src/com/android/launcher3/Launcher.java | 64 ++++++++++++++++--- src/com/android/launcher3/LauncherModel.java | 8 +-- src/com/android/launcher3/Workspace.java | 13 ++-- 6 files changed, 75 insertions(+), 67 deletions(-) diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index 9c8659c293..163ffb6e76 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -70,40 +70,9 @@ public class DeleteDropTarget extends ButtonDropTarget { * @return true if the item was removed. */ public static boolean removeWorkspaceOrFolderItem(Launcher launcher, ItemInfo item, View view) { - if (item instanceof ShortcutInfo) { - LauncherModel.deleteItemFromDatabase(launcher, item); - } else if (item instanceof FolderInfo) { - FolderInfo folder = (FolderInfo) item; - launcher.removeFolder(folder); - LauncherModel.deleteFolderContentsFromDatabase(launcher, folder); - } else if (item instanceof LauncherAppWidgetInfo) { - final LauncherAppWidgetInfo widget = (LauncherAppWidgetInfo) item; - - // Remove the widget from the workspace - launcher.removeAppWidget(widget); - LauncherModel.deleteItemFromDatabase(launcher, widget); - - final LauncherAppWidgetHost appWidgetHost = launcher.getAppWidgetHost(); - - if (appWidgetHost != null && !widget.isCustomWidget() - && widget.isWidgetIdValid()) { - // Deleting an app widget ID is a void call but writes to disk before returning - // to the caller... - new AsyncTask() { - public Void doInBackground(Void ... args) { - appWidgetHost.deleteAppWidgetId(widget.appWidgetId); - return null; - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - } - } else { - return false; - } - - if (view != null) { - launcher.getWorkspace().removeWorkspaceItem(view); - launcher.getWorkspace().stripEmptyScreens(); - } + // Remove the item from launcher and the db + launcher.removeItem(view, item, true /* deleteFromDb */); + launcher.getWorkspace().stripEmptyScreens(); return true; } diff --git a/src/com/android/launcher3/FocusHelper.java b/src/com/android/launcher3/FocusHelper.java index 57aec32801..eca5eec2a1 100644 --- a/src/com/android/launcher3/FocusHelper.java +++ b/src/com/android/launcher3/FocusHelper.java @@ -185,7 +185,8 @@ public class FocusHelper { return consume; } - DeviceProfile profile = ((Launcher) v.getContext()).getDeviceProfile(); + final Launcher launcher = (Launcher) v.getContext(); + final DeviceProfile profile = launcher.getDeviceProfile(); if (DEBUG) { Log.v(TAG, String.format( @@ -196,7 +197,6 @@ public class FocusHelper { // Initialize the variables. final ShortcutAndWidgetContainer hotseatParent = (ShortcutAndWidgetContainer) v.getParent(); final CellLayout hotseatLayout = (CellLayout) hotseatParent.getParent(); - Hotseat hotseat = (Hotseat) hotseatLayout.getParent(); Workspace workspace = (Workspace) v.getRootView().findViewById(R.id.workspace); int pageIndex = workspace.getNextPage(); @@ -240,7 +240,10 @@ public class FocusHelper { } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT && profile.isVerticalBarLayout()) { keyCode = KeyEvent.KEYCODE_PAGE_DOWN; - }else { + } else if (keyCode == KeyEvent.KEYCODE_DEL || keyCode == KeyEvent.KEYCODE_FORWARD_DEL) { + ItemInfo info = (ItemInfo) v.getTag(); + launcher.removeItem(v, info, true /* deleteFromDb */); + } else { // For other KEYCODE_DPAD_LEFT and KEYCODE_DPAD_RIGHT navigation, do not use the // matrix extended with hotseat. matrix = FocusLogic.createSparseMatrix(hotseatLayout); @@ -326,7 +329,8 @@ public class FocusHelper { !hotseat.hasIcons() /* ignore all apps icon, unless there are no other icons */); countX = countX + 1; } else if (keyCode == KeyEvent.KEYCODE_DEL || keyCode == KeyEvent.KEYCODE_FORWARD_DEL) { - workspace.removeWorkspaceItem(v); + ItemInfo info = (ItemInfo) v.getTag(); + launcher.removeItem(v, info, true /* deleteFromDb */); return consume; } else { matrix = FocusLogic.createSparseMatrix(iconLayout); diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index c1aa35669b..f59c87e346 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -1122,16 +1122,10 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList mInfo.screenId, mInfo.cellX, mInfo.cellY); } if (getItemCount() <= 1) { - // Remove the folder - LauncherModel.deleteItemFromDatabase(mLauncher, mInfo); - if (cellLayout != null) { - // b/12446428 -- sometimes the cell layout has already gone away? - cellLayout.removeView(mFolderIcon); - } + mLauncher.removeItem(mFolderIcon, mInfo, true /* deleteFromDb */); if (mFolderIcon instanceof DropTarget) { mDragController.removeDropTarget((DropTarget) mFolderIcon); } - mLauncher.removeFolder(mInfo); } // We add the child after removing the folder to prevent both from existing at // the same time in the CellLayout. We need to add the new item with addInScreenFromBind() diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index c017dc05a8..65aa68ab52 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1787,7 +1787,7 @@ public class Launcher extends Activity } }); - void addWidgetToAutoAdvanceIfNeeded(View hostView, AppWidgetProviderInfo appWidgetInfo) { + private void addWidgetToAutoAdvanceIfNeeded(View hostView, AppWidgetProviderInfo appWidgetInfo) { if (appWidgetInfo == null || appWidgetInfo.autoAdvanceViewId == -1) return; View v = hostView.findViewById(appWidgetInfo.autoAdvanceViewId); if (v instanceof Advanceable) { @@ -1797,18 +1797,13 @@ public class Launcher extends Activity } } - void removeWidgetToAutoAdvance(View hostView) { + private void removeWidgetToAutoAdvance(View hostView) { if (mWidgetsToAdvance.containsKey(hostView)) { mWidgetsToAdvance.remove(hostView); updateAutoAdvanceState(); } } - public void removeAppWidget(LauncherAppWidgetInfo launcherInfo) { - removeWidgetToAutoAdvance(launcherInfo.hostView); - launcherInfo.hostView = null; - } - public void showOutOfSpaceMessage(boolean isHotseatLayout) { int strId = (isHotseatLayout ? R.string.hotseat_out_of_space : R.string.out_of_space); Toast.makeText(this, getString(strId), Toast.LENGTH_SHORT).show(); @@ -2394,10 +2389,63 @@ public class Launcher extends Activity return newFolder; } - void removeFolder(FolderInfo folder) { + /** + * Unbinds the view for the specified item, and removes the item and all its children items + * from the database. For folders, this incl udes the folder contents. AppWidgets will also + * have their widget ids deleted. + */ + public boolean removeItem(View v, ItemInfo itemInfo, boolean deleteFromDb) { + if (itemInfo instanceof ShortcutInfo) { + mWorkspace.removeWorkspaceItem(v); + if (deleteFromDb) { + LauncherModel.deleteItemFromDatabase(this, itemInfo); + } + } else if (itemInfo instanceof FolderInfo) { + final FolderInfo folderInfo = (FolderInfo) itemInfo; + unbindFolder(folderInfo); + mWorkspace.removeWorkspaceItem(v); + if (deleteFromDb) { + LauncherModel.deleteFolderAndContentsFromDatabase(this, folderInfo); + } + } else if (itemInfo instanceof LauncherAppWidgetInfo) { + final LauncherAppWidgetInfo widgetInfo = (LauncherAppWidgetInfo) itemInfo; + unbindAppWidget(widgetInfo, deleteFromDb); + if (deleteFromDb) { + LauncherModel.deleteItemFromDatabase(this, widgetInfo); + } + } else { + return false; + } + return true; + } + + /** + * Unbinds any launcher references to the folder. + */ + private void unbindFolder(FolderInfo folder) { sFolders.remove(folder.id); } + /** + * Unbinds any launcher references to the widget and deletes the app widget id. + */ + private void unbindAppWidget(final LauncherAppWidgetInfo widgetInfo, boolean deleteAppWidgetId) { + final LauncherAppWidgetHost appWidgetHost = getAppWidgetHost(); + if (deleteAppWidgetId && appWidgetHost != null && + !widgetInfo.isCustomWidget() && widgetInfo.isWidgetIdValid()) { + // Deleting an app widget ID is a void call but writes to disk before returning + // to the caller... + new AsyncTask() { + public Void doInBackground(Void ... args) { + appWidgetHost.deleteAppWidgetId(widgetInfo.appWidgetId); + return null; + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + removeWidgetToAutoAdvance(widgetInfo.hostView); + widgetInfo.hostView = null; + } + @Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index b5922c6a38..ee5f9ca925 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -1068,8 +1068,6 @@ public class LauncherModel extends BroadcastReceiver /** * Removes the specified item from the database - * @param context - * @param item */ public static void deleteItemFromDatabase(Context context, final ItemInfo item) { ArrayList items = new ArrayList(); @@ -1079,8 +1077,6 @@ public class LauncherModel extends BroadcastReceiver /** * Removes the specified items from the database - * @param context - * @param item */ static void deleteItemsFromDatabase(Context context, final ArrayList items) { final ContentResolver cr = context.getContentResolver(); @@ -1171,9 +1167,9 @@ public class LauncherModel extends BroadcastReceiver } /** - * Remove the contents of the specified folder from the database + * Remove the specified folder and all its contents from the database. */ - public static void deleteFolderContentsFromDatabase(Context context, final FolderInfo info) { + public static void deleteFolderAndContentsFromDatabase(Context context, final FolderInfo info) { final ContentResolver cr = context.getContentResolver(); Runnable r = new Runnable() { diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 856e3b88ad..dc73635db1 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1118,9 +1118,9 @@ public class Workspace extends PagedView LauncherAppWidgetInfo info = (LauncherAppWidgetInfo) v.getTag(); LauncherAppWidgetHostView lahv = (LauncherAppWidgetHostView) info.hostView; if (lahv != null && lahv.isReinflateRequired()) { - mLauncher.removeAppWidget(info); - // Remove the current widget which is inflated with the wrong orientation - cl.removeView(lahv); + // Remove and rebind the current widget (which was inflated in the wrong + // orientation), but don't delete it from the database + mLauncher.removeItem(lahv, info, false /* deleteFromDb */); mLauncher.bindAppWidget(info); } } @@ -4519,12 +4519,9 @@ public class Workspace extends PagedView for (LauncherAppWidgetInfo info : mInfos) { if (info.hostView instanceof PendingAppWidgetHostView) { + // Remove and rebind the current widget, but don't delete it from the database PendingAppWidgetHostView view = (PendingAppWidgetHostView) info.hostView; - mLauncher.removeAppWidget(info); - - CellLayout cl = (CellLayout) view.getParent().getParent(); - // Remove the current widget - cl.removeView(view); + mLauncher.removeItem(view, info, false /* deleteFromDb */); mLauncher.bindAppWidget(info); } } From 787e3fbcaf4920b8fe1c7f78dc32deffbfc166ab Mon Sep 17 00:00:00 2001 From: Winson Date: Mon, 14 Sep 2015 11:51:41 -0700 Subject: [PATCH 010/219] Tweaking print_db script to take grid size directly. Change-Id: Id274f6086a37adbbea4f86d01c55e38d6c616c00 --- print_db.py | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/print_db.py b/print_db.py index 05237d0b99..7257a12c24 100755 --- a/print_db.py +++ b/print_db.py @@ -4,6 +4,7 @@ import cgi import codecs import os import pprint +import re import shutil import sys import sqlite3 @@ -22,9 +23,10 @@ AUTO_FILE = DIR + "/launcher.db" INDEX_FILE = DIR + "/index.html" def usage(): - print "usage: print_db.py launcher.db -- prints a launcher.db" - print "usage: print_db.py -- adb pulls a launcher.db from a device" - print " and prints it" + print "usage: print_db.py launcher.db <4x4|5x5|5x6|...> -- prints a launcher.db with" + print " the specified grid size (rows x cols)" + print "usage: print_db.py <4x4|5x5|5x6|...> -- adb pulls a launcher.db from a device" + print " and prints it with the specified grid size (rows x cols)" print print "The dump will be created in a directory called db_files in cwd." print "This script will delete any db_files directory you have now" @@ -41,7 +43,7 @@ def adb_root_remount(): def pull_file(fn): print "pull_file: " + fn rv = os.system("adb pull" - + " /data/data/com.google.android.googlequicksearchbox/databases/launcher.db" + + " /data/data/com.android.launcher3/databases/launcher.db" + " " + fn); if rv != 0: print "adb pull failed" @@ -287,16 +289,11 @@ def process_file(fn): def updateDeviceClassConstants(str): global SCREENS, COLUMNS, ROWS, HOTSEAT_SIZE - devClass = str.lower() - if devClass == "sw600": - COLUMNS = 6 - ROWS = 6 - HOTSEAT_SIZE = 6 - return True - elif devClass == "sw720": - COLUMNS = 8 - ROWS = 6 - HOTSEAT_SIZE = 8 + match = re.search(r"(\d+)x(\d+)", str) + if match: + COLUMNS = int(match.group(1)) + ROWS = int(match.group(2)) + HOTSEAT_SIZE = 2 * int(COLUMNS / 2) return True return False From fa56b3f2f1271d6045594eed294b22841c79c783 Mon Sep 17 00:00:00 2001 From: Winson Date: Mon, 14 Sep 2015 12:01:13 -0700 Subject: [PATCH 011/219] Requiring key chord to delete icons and folders on the workspace - Also fixing case where the all apps button to search for more apps was not focusable Bug: 20639227 Change-Id: Ie4d9092e654d3cafc0eb346b3bb744ec3e295e92 --- res/layout/all_apps_search_market.xml | 2 +- .../android/launcher3/DeleteDropTarget.java | 6 ++- src/com/android/launcher3/FocusHelper.java | 46 +++++++++++++++---- src/com/android/launcher3/Folder.java | 29 ++++++------ src/com/android/launcher3/Launcher.java | 19 ++++++-- src/com/android/launcher3/Workspace.java | 4 +- 6 files changed, 74 insertions(+), 32 deletions(-) diff --git a/res/layout/all_apps_search_market.xml b/res/layout/all_apps_search_market.xml index 1ed5088908..a2bb2e779c 100644 --- a/res/layout/all_apps_search_market.xml +++ b/res/layout/all_apps_search_market.xml @@ -25,5 +25,5 @@ android:textSize="14sp" android:textColor="@color/launcher_accent_color" android:textAllCaps="true" - android:focusable="false" + android:focusable="true" android:background="@drawable/all_apps_search_market_bg" /> diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index 163ffb6e76..c3eea2f08e 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -70,8 +70,10 @@ public class DeleteDropTarget extends ButtonDropTarget { * @return true if the item was removed. */ public static boolean removeWorkspaceOrFolderItem(Launcher launcher, ItemInfo item, View view) { - // Remove the item from launcher and the db - launcher.removeItem(view, item, true /* deleteFromDb */); + // Remove the item from launcher and the db, we can ignore the containerInfo in this call + // because we already remove the drag view from the folder (if the drag originated from + // a folder) in Folder.beginDrag() + launcher.removeItem(view, null, item, true /* deleteFromDb */); launcher.getWorkspace().stripEmptyScreens(); return true; } diff --git a/src/com/android/launcher3/FocusHelper.java b/src/com/android/launcher3/FocusHelper.java index eca5eec2a1..5c91cc0f04 100644 --- a/src/com/android/launcher3/FocusHelper.java +++ b/src/com/android/launcher3/FocusHelper.java @@ -72,7 +72,6 @@ public class FocusHelper { KeyEvent.keyCodeToString(keyCode))); } - if (!(v.getParent() instanceof ShortcutAndWidgetContainer)) { if (LauncherAppState.isDogfoodBuild()) { throw new IllegalStateException("Parent of the focused item is not supported."); @@ -195,10 +194,11 @@ public class FocusHelper { } // Initialize the variables. + final Workspace workspace = (Workspace) v.getRootView().findViewById(R.id.workspace); final ShortcutAndWidgetContainer hotseatParent = (ShortcutAndWidgetContainer) v.getParent(); final CellLayout hotseatLayout = (CellLayout) hotseatParent.getParent(); - Workspace workspace = (Workspace) v.getRootView().findViewById(R.id.workspace); + final ItemInfo itemInfo = (ItemInfo) v.getTag(); int pageIndex = workspace.getNextPage(); int pageCount = workspace.getChildCount(); int countX = -1; @@ -240,9 +240,14 @@ public class FocusHelper { } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT && profile.isVerticalBarLayout()) { keyCode = KeyEvent.KEYCODE_PAGE_DOWN; - } else if (keyCode == KeyEvent.KEYCODE_DEL || keyCode == KeyEvent.KEYCODE_FORWARD_DEL) { - ItemInfo info = (ItemInfo) v.getTag(); - launcher.removeItem(v, info, true /* deleteFromDb */); + } else if (isUninstallKeyChord(e)) { + matrix = FocusLogic.createSparseMatrix(iconLayout); + if (UninstallDropTarget.supportsDrop(launcher, itemInfo)) { + UninstallDropTarget.startUninstallActivity(launcher, itemInfo); + } + } else if (isDeleteKeyChord(e)) { + matrix = FocusLogic.createSparseMatrix(iconLayout); + launcher.removeItem(v, null, itemInfo, true /* deleteFromDb */); } else { // For other KEYCODE_DPAD_LEFT and KEYCODE_DPAD_RIGHT navigation, do not use the // matrix extended with hotseat. @@ -304,6 +309,7 @@ public class FocusHelper { final ViewGroup tabs = (ViewGroup) dragLayer.findViewById(R.id.search_drop_target_bar); final Hotseat hotseat = (Hotseat) dragLayer.findViewById(R.id.hotseat); + final ItemInfo itemInfo = (ItemInfo) v.getTag(); final int iconIndex = parent.indexOfChild(v); final int pageIndex = workspace.indexOfChild(iconLayout); final int pageCount = workspace.getChildCount(); @@ -328,10 +334,14 @@ public class FocusHelper { profile.inv.hotseatAllAppsRank, !hotseat.hasIcons() /* ignore all apps icon, unless there are no other icons */); countX = countX + 1; - } else if (keyCode == KeyEvent.KEYCODE_DEL || keyCode == KeyEvent.KEYCODE_FORWARD_DEL) { - ItemInfo info = (ItemInfo) v.getTag(); - launcher.removeItem(v, info, true /* deleteFromDb */); - return consume; + } else if (isUninstallKeyChord(e)) { + matrix = FocusLogic.createSparseMatrix(iconLayout); + if (UninstallDropTarget.supportsDrop(launcher, itemInfo)) { + UninstallDropTarget.startUninstallActivity(launcher, itemInfo); + } + } else if (isDeleteKeyChord(e)) { + matrix = FocusLogic.createSparseMatrix(iconLayout); + launcher.removeItem(v, null, itemInfo, true /* deleteFromDb */); } else { matrix = FocusLogic.createSparseMatrix(iconLayout); } @@ -461,4 +471,22 @@ public class FocusHelper { break; } } + + /** + * Returns whether the key event represents a valid uninstall key chord. + */ + private static boolean isUninstallKeyChord(KeyEvent event) { + int keyCode = event.getKeyCode(); + return (keyCode == KeyEvent.KEYCODE_DEL || keyCode == KeyEvent.KEYCODE_FORWARD_DEL) && + event.hasModifiers(KeyEvent.META_CTRL_ON | KeyEvent.META_SHIFT_ON); + } + + /** + * Returns whether the key event represents a valid delete key chord. + */ + private static boolean isDeleteKeyChord(KeyEvent event) { + int keyCode = event.getKeyCode(); + return (keyCode == KeyEvent.KEYCODE_DEL || keyCode == KeyEvent.KEYCODE_FORWARD_DEL) && + event.hasModifiers(KeyEvent.META_CTRL_ON); + } } diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index f59c87e346..d4e5d6d058 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -1113,26 +1113,29 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList public void run() { CellLayout cellLayout = mLauncher.getCellLayout(mInfo.container, mInfo.screenId); - View child = null; - // Move the item from the folder to the workspace, in the position of the folder - if (getItemCount() == 1) { - ShortcutInfo finalItem = mInfo.contents.get(0); - child = mLauncher.createShortcut(cellLayout, finalItem); - LauncherModel.addOrMoveItemInDatabase(mLauncher, finalItem, mInfo.container, - mInfo.screenId, mInfo.cellX, mInfo.cellY); - } + // Remove the folder if (getItemCount() <= 1) { - mLauncher.removeItem(mFolderIcon, mInfo, true /* deleteFromDb */); + mLauncher.removeItem(mFolderIcon, null, mInfo, true /* deleteFromDb */); if (mFolderIcon instanceof DropTarget) { mDragController.removeDropTarget((DropTarget) mFolderIcon); } } - // We add the child after removing the folder to prevent both from existing at - // the same time in the CellLayout. We need to add the new item with addInScreenFromBind() - // to ensure that hotseat items are placed correctly. - if (child != null) { + + // Move the item from the folder to the workspace, in the position of the folder + if (getItemCount() == 1) { + ShortcutInfo finalItem = mInfo.contents.get(0); + View child = mLauncher.createShortcut(cellLayout, finalItem); + LauncherModel.addOrMoveItemInDatabase(mLauncher, finalItem, mInfo.container, + mInfo.screenId, mInfo.cellX, mInfo.cellY); + + // We add the child after removing the folder to prevent both from existing at + // the same time in the CellLayout. We need to add the new item with addInScreenFromBind() + // to ensure that hotseat items are placed correctly. mLauncher.getWorkspace().addInScreenFromBind(child, mInfo.container, mInfo.screenId, mInfo.cellX, mInfo.cellY, mInfo.spanX, mInfo.spanY); + + // Focus the newly created child + child.requestFocus(); } } }; diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 65aa68ab52..bb739d1b28 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2390,13 +2390,22 @@ public class Launcher extends Activity } /** - * Unbinds the view for the specified item, and removes the item and all its children items - * from the database. For folders, this incl udes the folder contents. AppWidgets will also - * have their widget ids deleted. + * Unbinds the view for the specified item, and removes the item and all its children. + * + * @param v the view being removed. + * @param containerInfo the {@link FolderInfo} container of this view (can be null). + * @param itemInfo the {@link ItemInfo} for this view. + * @param deleteFromDb whether or not to delete this item from the db. */ - public boolean removeItem(View v, ItemInfo itemInfo, boolean deleteFromDb) { + public boolean removeItem(View v, FolderInfo containerInfo, ItemInfo itemInfo, + boolean deleteFromDb) { if (itemInfo instanceof ShortcutInfo) { - mWorkspace.removeWorkspaceItem(v); + // Remove the shortcut from the folder before removing it from launcher + if (containerInfo != null) { + containerInfo.remove((ShortcutInfo) itemInfo); + } else { + mWorkspace.removeWorkspaceItem(v); + } if (deleteFromDb) { LauncherModel.deleteItemFromDatabase(this, itemInfo); } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index dc73635db1..f11ca5a1b1 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1120,7 +1120,7 @@ public class Workspace extends PagedView if (lahv != null && lahv.isReinflateRequired()) { // Remove and rebind the current widget (which was inflated in the wrong // orientation), but don't delete it from the database - mLauncher.removeItem(lahv, info, false /* deleteFromDb */); + mLauncher.removeItem(lahv, null, info, false /* deleteFromDb */); mLauncher.bindAppWidget(info); } } @@ -4521,7 +4521,7 @@ public class Workspace extends PagedView if (info.hostView instanceof PendingAppWidgetHostView) { // Remove and rebind the current widget, but don't delete it from the database PendingAppWidgetHostView view = (PendingAppWidgetHostView) info.hostView; - mLauncher.removeItem(view, info, false /* deleteFromDb */); + mLauncher.removeItem(view, null, info, false /* deleteFromDb */); mLauncher.bindAppWidget(info); } } From 3dc7beea3c7f9a60070e767aa43f5877a467d3ed Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 15 Sep 2015 11:32:58 -0700 Subject: [PATCH 012/219] Catching DeadObjectException and TransactionTooLarge Bug: 23796965 Bug: 23796963 Change-Id: I4c6ed217b9925b2e6014adc374b8b21f1ba559bc --- src/com/android/launcher3/LauncherModel.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index b5922c6a38..9817f3f61b 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -34,6 +34,7 @@ import android.content.pm.ResolveInfo; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; +import android.os.DeadObjectException; import android.os.Environment; import android.os.Handler; import android.os.HandlerThread; @@ -3305,9 +3306,14 @@ public class LauncherModel extends BroadcastReceiver // Refresh widget list, if there is any newly added widget PackageManager pm = context.getPackageManager(); for (String pkg : mPackages) { - needToRefresh |= !pm.queryBroadcastReceivers( - new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE) - .setPackage(pkg), 0).isEmpty(); + try { + needToRefresh |= !pm.queryBroadcastReceivers( + new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE) + .setPackage(pkg), 0).isEmpty(); + } catch (RuntimeException e) { + // Ignore the crash. We can live with a state widget list. + Log.e(TAG, "PM call failed for " + pkg, e); + } } } @@ -3359,7 +3365,8 @@ public class LauncherModel extends BroadcastReceiver return results; } } catch (Exception e) { - if (e.getCause() instanceof TransactionTooLargeException) { + if (e.getCause() instanceof TransactionTooLargeException || + e.getCause() instanceof DeadObjectException) { // the returned value may be incomplete and will not be refreshed until the next // time Launcher starts. // TODO: after figuring out a repro step, introduce a dirty bit to check when From 1cdb6d066123cb9b2f9ea2c66246b29bf1dd9cf2 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Thu, 17 Sep 2015 11:08:27 -0700 Subject: [PATCH 013/219] onDropChild() always marks the cell as occupied. Bug: 24164487 Change-Id: I11ef638a56b638ee82c3cd748340995970fc7e32 --- src/com/android/launcher3/CellLayout.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index c018341ffd..d48873762b 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -2667,6 +2667,7 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { LayoutParams lp = (LayoutParams) child.getLayoutParams(); lp.dropped = true; child.requestLayout(); + markCellsAsOccupiedForView(child); } } From 79afe010d55af6b1753430a334bf6e24448e9375 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 17 Sep 2015 12:50:11 -0700 Subject: [PATCH 014/219] Throwing system api call exceptions in case of dogfood builds Change-Id: I28bad663712a22360ceed095ceb54ce71b1449d5 --- src/com/android/launcher3/LauncherModel.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 9817f3f61b..95a4c46034 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -3311,6 +3311,9 @@ public class LauncherModel extends BroadcastReceiver new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE) .setPackage(pkg), 0).isEmpty(); } catch (RuntimeException e) { + if (LauncherAppState.isDogfoodBuild()) { + throw e; + } // Ignore the crash. We can live with a state widget list. Log.e(TAG, "PM call failed for " + pkg, e); } @@ -3365,8 +3368,9 @@ public class LauncherModel extends BroadcastReceiver return results; } } catch (Exception e) { - if (e.getCause() instanceof TransactionTooLargeException || - e.getCause() instanceof DeadObjectException) { + if (!LauncherAppState.isDogfoodBuild() && + (e.getCause() instanceof TransactionTooLargeException || + e.getCause() instanceof DeadObjectException)) { // the returned value may be incomplete and will not be refreshed until the next // time Launcher starts. // TODO: after figuring out a repro step, introduce a dirty bit to check when From 7b221efa5366da64c0396891944ead52fb21db3a Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 17 Sep 2015 14:09:07 -0700 Subject: [PATCH 015/219] Null check when getting list of widget receivers Bug: 23897605 Change-Id: Ib23b394828b0e5ec50bf7452b2ec2c905f4a6fbc --- src/com/android/launcher3/LauncherModel.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 9817f3f61b..34edf7759f 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -3307,9 +3307,10 @@ public class LauncherModel extends BroadcastReceiver PackageManager pm = context.getPackageManager(); for (String pkg : mPackages) { try { - needToRefresh |= !pm.queryBroadcastReceivers( + List widgets = pm.queryBroadcastReceivers( new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE) - .setPackage(pkg), 0).isEmpty(); + .setPackage(pkg), 0); + needToRefresh |= widgets != null && !widgets.isEmpty(); } catch (RuntimeException e) { // Ignore the crash. We can live with a state widget list. Log.e(TAG, "PM call failed for " + pkg, e); From 31860581536b3fee0221456a2dcc5d6d6f2b7e15 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 18 Sep 2015 08:38:57 -0700 Subject: [PATCH 016/219] Catching RemoteExceptions when calling packagemanager to get list of shortcuts Bug: 23796963 Change-Id: I5486c2916e981e7135edd5df360536a362bc2795 --- src/com/android/launcher3/LauncherModel.java | 28 ++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 598b8ce20c..6e1aa2a4db 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -170,6 +170,9 @@ public class LauncherModel extends BroadcastReceiver // sBgWidgetProviders is the set of widget providers including custom internal widgets public static HashMap sBgWidgetProviders; + // sBgShortcutProviders is the set of custom shortcut providers + public static List sBgShortcutProviders; + // sPendingPackages is a set of packages which could be on sdcard and are not available yet static final HashMap> sPendingPackages = new HashMap>(); @@ -3431,8 +3434,29 @@ public class LauncherModel extends BroadcastReceiver PackageManager packageManager = mApp.getContext().getPackageManager(); final ArrayList widgetsAndShortcuts = new ArrayList(); widgetsAndShortcuts.addAll(getWidgetProviders(mApp.getContext(), refresh)); - Intent shortcutsIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT); - widgetsAndShortcuts.addAll(packageManager.queryIntentActivities(shortcutsIntent, 0)); + + // Update shortcut providers + synchronized (sBgLock) { + try { + Intent shortcutsIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT); + List providers = packageManager.queryIntentActivities(shortcutsIntent, 0); + sBgShortcutProviders = providers; + } catch (RuntimeException e) { + if (!LauncherAppState.isDogfoodBuild() && + (e.getCause() instanceof TransactionTooLargeException || + e.getCause() instanceof DeadObjectException)) { + /** + * Ignore exception and use the cached list if available. + * Refer to {@link #getWidgetProviders(Context, boolean}} for more info. + */ + } else { + throw e; + } + } + if (sBgShortcutProviders != null) { + widgetsAndShortcuts.addAll(sBgShortcutProviders); + } + } mBgWidgetsModel.setWidgetsAndShortcuts(widgetsAndShortcuts); } From 605156bd87345beef31bf9164e85fbfc8a1cfc08 Mon Sep 17 00:00:00 2001 From: Winson Date: Fri, 18 Sep 2015 09:57:21 -0700 Subject: [PATCH 017/219] Fixing crash on pre-api level 19 devices due to getAlpha() call on Drawable. Bug: 24173665 Change-Id: Ia59481dc7fb52454760c688ba49c90b8507d7900 --- .../android/launcher3/allapps/AllAppsBackgroundDrawable.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/allapps/AllAppsBackgroundDrawable.java b/src/com/android/launcher3/allapps/AllAppsBackgroundDrawable.java index 117aca921b..dafa73fecd 100644 --- a/src/com/android/launcher3/allapps/AllAppsBackgroundDrawable.java +++ b/src/com/android/launcher3/allapps/AllAppsBackgroundDrawable.java @@ -35,6 +35,7 @@ class TransformedImageDrawable { private float mXPercent; private float mYPercent; private int mGravity; + private int mAlpha; /** * @param gravity If one of the Gravity center values, the x and y offset will take the width @@ -50,10 +51,11 @@ class TransformedImageDrawable { public void setAlpha(int alpha) { mImage.setAlpha(alpha); + mAlpha = alpha; } public int getAlpha() { - return mImage.getAlpha(); + return mAlpha; } public void updateBounds(Rect bounds) { From 141b20e0b31a241b4193ae650421a396e6966cbb Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Fri, 18 Sep 2015 12:11:16 -0700 Subject: [PATCH 018/219] Add fake CustomContent screen for testing Launcher interface Change-Id: I5f2aee1768fe59ee3079d069ff0be21cdf9282ea --- .../launcher3/testing/LauncherExtension.java | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/testing/LauncherExtension.java b/src/com/android/launcher3/testing/LauncherExtension.java index 8702877bf5..dac279afa9 100644 --- a/src/com/android/launcher3/testing/LauncherExtension.java +++ b/src/com/android/launcher3/testing/LauncherExtension.java @@ -5,11 +5,13 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.content.ComponentName; import android.content.Intent; +import android.graphics.Color; import android.graphics.Rect; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.ViewGroup; +import android.widget.FrameLayout; import com.android.launcher3.AppInfo; import com.android.launcher3.InsettableFrameLayout; @@ -210,13 +212,39 @@ public class LauncherExtension extends Launcher { public void startVoice() { } + CustomContentCallbacks mCustomContentCallbacks = new CustomContentCallbacks() { + + // Custom content is completely shown. {@code fromResume} indicates whether this was caused + // by a onResume or by scrolling otherwise. + public void onShow(boolean fromResume) { + } + + // Custom content is completely hidden + public void onHide() { + } + + // Custom content scroll progress changed. From 0 (not showing) to 1 (fully showing). + public void onScrollProgressChanged(float progress) { + + } + + // Indicates whether the user is allowed to scroll away from the custom content. + public boolean isScrollingAllowed() { + return true; + } + + }; + @Override public boolean hasCustomContentToLeft() { - return false; + return true; } @Override public void populateCustomContentContainer() { + FrameLayout customContent = new FrameLayout(LauncherExtension.this); + customContent.setBackgroundColor(Color.GRAY); + addToCustomContentPage(customContent, mCustomContentCallbacks, ""); } @Override @@ -281,7 +309,7 @@ public class LauncherExtension extends Launcher { @Override public boolean hasLauncherOverlay() { - return true; + return false; } @Override From 6ed058cb6bfbb5756721e0d7f4a80a1c08ee665c Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 9 Sep 2015 18:21:49 -0700 Subject: [PATCH 019/219] Wallpaper preview parallax matches the actual wallpaper's. Cherry picking the following changes from ub-launcher3-master: Change-Id: I41c5bbbfdabfeb4e20d77e9b5804842a03211edf Change-Id: I69afa3f8cc59c77e9c4c25e29e8db8c4beb87462 Change-Id: I82b7ba506d51ee4b3812af5fbdf95d3303b37aef Change-Id: Id7c2b5483c5535d59be2f8a459ce7788e3c8318a Bug: 23568800 Change-Id: I343169b9fdc5ceaab3d4b39044627d78b7267868 (cherry picked from commit 3e776a87dc5178ab7d2c31a8db06fe5657db4e4a) --- WallpaperPicker/res/anim/fade_out.xml | 24 ++++++++ .../gallery3d/common/BitmapCropTask.java | 34 ++++++----- .../src/com/android/launcher3/CropView.java | 13 ++++- .../ThirdPartyWallpaperPickerListAdapter.java | 4 +- .../launcher3/WallpaperCropActivity.java | 58 +++++++++++++------ .../launcher3/WallpaperPickerActivity.java | 51 ++++++++++------ src/com/android/launcher3/Launcher.java | 8 ++- src/com/android/launcher3/Workspace.java | 8 ++- 8 files changed, 144 insertions(+), 56 deletions(-) create mode 100644 WallpaperPicker/res/anim/fade_out.xml diff --git a/WallpaperPicker/res/anim/fade_out.xml b/WallpaperPicker/res/anim/fade_out.xml new file mode 100644 index 0000000000..2749d9280b --- /dev/null +++ b/WallpaperPicker/res/anim/fade_out.xml @@ -0,0 +1,24 @@ + + + + + + diff --git a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java index 45118bf45e..cb7090fade 100644 --- a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java +++ b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java @@ -45,6 +45,10 @@ public class BitmapCropTask extends AsyncTask { public void onBitmapCropped(byte[] imageBytes); } + public interface OnEndCropHandler { + public void run(boolean cropSucceeded); + } + private static final int DEFAULT_COMPRESS_QUALITY = 90; private static final String LOGTAG = "BitmapCropTask"; @@ -59,56 +63,56 @@ public class BitmapCropTask extends AsyncTask { boolean mSetWallpaper; boolean mSaveCroppedBitmap; Bitmap mCroppedBitmap; - Runnable mOnEndRunnable; + BitmapCropTask.OnEndCropHandler mOnEndCropHandler; Resources mResources; BitmapCropTask.OnBitmapCroppedHandler mOnBitmapCroppedHandler; boolean mNoCrop; public BitmapCropTask(Context c, String filePath, RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + boolean setWallpaper, boolean saveCroppedBitmap, OnEndCropHandler onEndCropHandler) { mContext = c; mInFilePath = filePath; init(cropBounds, rotation, - outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); + outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndCropHandler); } public BitmapCropTask(byte[] imageBytes, RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + boolean setWallpaper, boolean saveCroppedBitmap, OnEndCropHandler onEndCropHandler) { mInImageBytes = imageBytes; init(cropBounds, rotation, - outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); + outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndCropHandler); } public BitmapCropTask(Context c, Uri inUri, RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + boolean setWallpaper, boolean saveCroppedBitmap, OnEndCropHandler onEndCropHandler) { mContext = c; mInUri = inUri; init(cropBounds, rotation, - outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); + outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndCropHandler); } public BitmapCropTask(Context c, Resources res, int inResId, RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + boolean setWallpaper, boolean saveCroppedBitmap, OnEndCropHandler onEndCropHandler) { mContext = c; mInResId = inResId; mResources = res; init(cropBounds, rotation, - outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); + outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndCropHandler); } private void init(RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + boolean setWallpaper, boolean saveCroppedBitmap, OnEndCropHandler onEndCropHandler) { mCropBounds = cropBounds; mRotation = rotation; mOutWidth = outWidth; mOutHeight = outHeight; mSetWallpaper = setWallpaper; mSaveCroppedBitmap = saveCroppedBitmap; - mOnEndRunnable = onEndRunnable; + mOnEndCropHandler = onEndCropHandler; } public void setOnBitmapCropped(BitmapCropTask.OnBitmapCroppedHandler handler) { @@ -119,8 +123,8 @@ public class BitmapCropTask extends AsyncTask { mNoCrop = value; } - public void setOnEndRunnable(Runnable onEndRunnable) { - mOnEndRunnable = onEndRunnable; + public void setOnEndRunnable(OnEndCropHandler onEndCropHandler) { + mOnEndCropHandler = onEndCropHandler; } // Helper to setup input stream @@ -398,8 +402,8 @@ public class BitmapCropTask extends AsyncTask { @Override protected void onPostExecute(Boolean result) { - if (mOnEndRunnable != null) { - mOnEndRunnable.run(); + if (mOnEndCropHandler != null) { + mOnEndCropHandler.run(result); } } } \ No newline at end of file diff --git a/WallpaperPicker/src/com/android/launcher3/CropView.java b/WallpaperPicker/src/com/android/launcher3/CropView.java index 50f779add0..e98e23e981 100644 --- a/WallpaperPicker/src/com/android/launcher3/CropView.java +++ b/WallpaperPicker/src/com/android/launcher3/CropView.java @@ -31,7 +31,7 @@ import android.view.ViewTreeObserver.OnGlobalLayoutListener; import com.android.photos.views.TiledImageRenderer.TileSource; import com.android.photos.views.TiledImageView; -public class CropView extends TiledImageView implements OnScaleGestureListener { +public class CropView extends TiledImageView implements OnScaleGestureListener { private ScaleGestureDetector mScaleGestureDetector; private long mTouchDownTime; @@ -189,6 +189,17 @@ public class CropView extends TiledImageView implements OnScaleGestureListener { public void onScaleEnd(ScaleGestureDetector detector) { } + /** + * Offsets wallpaper preview according to the state it will be displayed in upon returning home. + * @param offset Ranges from 0 to 1, where 0 is the leftmost parallax and 1 is the rightmost. + */ + public void setParallaxOffset(float offset, RectF crop) { + offset = Math.max(0, Math.min(offset, 1)); // Make sure the offset is in the correct range. + float screenWidth = getWidth() / mRenderer.scale; + mCenterX = screenWidth / 2 + offset * (crop.width() - screenWidth) + crop.left; + updateCenter(); + } + public void moveToLeft() { if (getWidth() == 0 || getHeight() == 0) { final ViewTreeObserver observer = getViewTreeObserver(); diff --git a/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java b/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java index f46da53ec5..099bbda7bc 100644 --- a/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java +++ b/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java @@ -54,7 +54,9 @@ public class ThirdPartyWallpaperPickerListAdapter extends BaseAdapter implements final ComponentName itemComponentName = new ComponentName( mResolveInfo.activityInfo.packageName, mResolveInfo.activityInfo.name); Intent launchIntent = new Intent(Intent.ACTION_SET_WALLPAPER); - launchIntent.setComponent(itemComponentName); + launchIntent.setComponent(itemComponentName) + .putExtra(WallpaperPickerActivity.EXTRA_WALLPAPER_OFFSET, + a.getWallpaperParallaxOffset()); a.startActivityForResultSafely( launchIntent, WallpaperPickerActivity.PICK_WALLPAPER_THIRD_PARTY_ACTIVITY); } diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java index f2459dd3ec..0dbd3578a1 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java @@ -124,7 +124,11 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb @Override public void onClick(View v) { boolean finishActivityWhenDone = true; - cropImageAndSetWallpaper(imageUri, null, finishActivityWhenDone); + // Never fade on finish because we return to the app that started us (e.g. + // Photos), not the home screen. + boolean shouldFadeOutOnFinish = false; + cropImageAndSetWallpaper(imageUri, null, finishActivityWhenDone, + shouldFadeOutOnFinish); } }); mSetWallpaperButton = findViewById(R.id.set_wallpaper_button); @@ -246,8 +250,14 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb if (req.moveToLeft) { mCropView.moveToLeft(); } - if (req.scaleProvider != null) { - mCropView.setScale(req.scaleProvider.getScale(req.result)); + if (req.scaleAndOffsetProvider != null) { + TileSource src = req.result; + Point wallpaperSize = WallpaperUtils.getDefaultWallpaperSize( + getResources(), getWindowManager()); + RectF crop = Utils.getMaxCropRect(src.getImageWidth(), src.getImageHeight(), + wallpaperSize.x, wallpaperSize.y, false /* leftAligned */); + mCropView.setScale(req.scaleAndOffsetProvider.getScale(wallpaperSize, crop)); + mCropView.setParallaxOffset(req.scaleAndOffsetProvider.getParallaxOffset(), crop); } // Free last image @@ -265,13 +275,13 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb } public final void setCropViewTileSource(BitmapSource bitmapSource, boolean touchEnabled, - boolean moveToLeft, CropViewScaleProvider scaleProvider, Runnable postExecute) { + boolean moveToLeft, CropViewScaleAndOffsetProvider scaleProvider, Runnable postExecute) { final LoadRequest req = new LoadRequest(); req.moveToLeft = moveToLeft; req.src = bitmapSource; req.touchEnabled = touchEnabled; req.postExecute = postExecute; - req.scaleProvider = scaleProvider; + req.scaleAndOffsetProvider = scaleProvider; mCurrentLoadRequest = req; // Remove any pending requests @@ -295,17 +305,21 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb return getResources().getBoolean(R.bool.allow_rotation); } - protected void setWallpaper(Uri uri, final boolean finishActivityWhenDone) { + protected void setWallpaper(Uri uri, final boolean finishActivityWhenDone, + final boolean shouldFadeOutOnFinish) { int rotation = BitmapUtils.getRotationFromExif(getContext(), uri); BitmapCropTask cropTask = new BitmapCropTask( getContext(), uri, null, rotation, 0, 0, true, false, null); final Point bounds = cropTask.getImageBounds(); - Runnable onEndCrop = new Runnable() { - public void run() { + BitmapCropTask.OnEndCropHandler onEndCrop = new BitmapCropTask.OnEndCropHandler() { + public void run(boolean cropSucceeded) { updateWallpaperDimensions(bounds.x, bounds.y); if (finishActivityWhenDone) { setResult(Activity.RESULT_OK); finish(); + if (cropSucceeded && shouldFadeOutOnFinish) { + overridePendingTransition(0, R.anim.fade_out); + } } } }; @@ -314,8 +328,8 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb cropTask.execute(); } - protected void cropImageAndSetWallpaper( - Resources res, int resId, final boolean finishActivityWhenDone) { + protected void cropImageAndSetWallpaper(Resources res, int resId, + final boolean finishActivityWhenDone, final boolean shouldFadeOutOnFinish) { // crop this image and scale it down to the default wallpaper size for // this device int rotation = BitmapUtils.getRotationFromExif(res, resId); @@ -324,14 +338,17 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb getWindowManager()); RectF crop = Utils.getMaxCropRect( inSize.x, inSize.y, outSize.x, outSize.y, false); - Runnable onEndCrop = new Runnable() { - public void run() { + BitmapCropTask.OnEndCropHandler onEndCrop = new BitmapCropTask.OnEndCropHandler() { + public void run(boolean cropSucceeded) { // Passing 0, 0 will cause launcher to revert to using the // default wallpaper size updateWallpaperDimensions(0, 0); if (finishActivityWhenDone) { setResult(Activity.RESULT_OK); finish(); + if (cropSucceeded && shouldFadeOutOnFinish) { + overridePendingTransition(0, R.anim.fade_out); + } } } }; @@ -342,7 +359,8 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) protected void cropImageAndSetWallpaper(Uri uri, - BitmapCropTask.OnBitmapCroppedHandler onBitmapCroppedHandler, final boolean finishActivityWhenDone) { + BitmapCropTask.OnBitmapCroppedHandler onBitmapCroppedHandler, + final boolean finishActivityWhenDone, final boolean shouldFadeOutOnFinish) { boolean centerCrop = getResources().getBoolean(R.bool.center_crop); // Get the crop boolean ltr = mCropView.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR; @@ -418,13 +436,16 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb final int outWidth = (int) Math.round(cropRect.width() * cropScale); final int outHeight = (int) Math.round(cropRect.height() * cropScale); - Runnable onEndCrop = new Runnable() { - public void run() { + BitmapCropTask.OnEndCropHandler onEndCrop = new BitmapCropTask.OnEndCropHandler() { + public void run(boolean cropSucceeded) { updateWallpaperDimensions(outWidth, outHeight); if (finishActivityWhenDone) { setResult(Activity.RESULT_OK); finish(); } + if (cropSucceeded && shouldFadeOutOnFinish) { + overridePendingTransition(0, R.anim.fade_out); + } } }; BitmapCropTask cropTask = new BitmapCropTask(getContext(), uri, @@ -456,12 +477,13 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb boolean touchEnabled; boolean moveToLeft; Runnable postExecute; - CropViewScaleProvider scaleProvider; + CropViewScaleAndOffsetProvider scaleAndOffsetProvider; TileSource result; } - interface CropViewScaleProvider { - float getScale(TileSource src); + interface CropViewScaleAndOffsetProvider { + float getScale(Point wallpaperSize, RectF crop); + float getParallaxOffset(); } } diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index 59858501a5..041e4aa019 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -16,7 +16,7 @@ package com.android.launcher3; -import android.Manifest.permission; +import android.Manifest; import android.animation.LayoutTransition; import android.annotation.TargetApi; import android.app.ActionBar; @@ -38,7 +38,6 @@ import android.graphics.PorterDuff; import android.graphics.RectF; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.Manifest; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; @@ -75,10 +74,8 @@ import com.android.gallery3d.common.BitmapCropTask; import com.android.gallery3d.common.BitmapUtils; import com.android.gallery3d.common.Utils; import com.android.launcher3.util.Thunk; -import com.android.launcher3.util.WallpaperUtils; import com.android.photos.BitmapRegionTileSource; import com.android.photos.BitmapRegionTileSource.BitmapSource; -import com.android.photos.views.TiledImageRenderer.TileSource; import java.io.File; import java.io.FileOutputStream; @@ -90,6 +87,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { public static final int IMAGE_PICK = 5; public static final int PICK_WALLPAPER_THIRD_PARTY_ACTIVITY = 6; + /** An Intent extra used when opening the wallpaper picker from the workspace overlay. */ + public static final String EXTRA_WALLPAPER_OFFSET = "com.android.launcher3.WALLPAPER_OFFSET"; private static final String TEMP_WALLPAPER_TILES = "TEMP_WALLPAPER_TILES"; private static final String SELECTED_INDEX = "SELECTED_INDEX"; private static final int FLAG_POST_DELAY_MILLIS = 200; @@ -110,6 +109,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { ArrayList mTempWallpaperTiles = new ArrayList(); private SavedWallpaperImages mSavedImages; @Thunk int mSelectedIndex = -1; + private float mWallpaperParallaxOffset; public static abstract class WallpaperTileInfo { protected View mView; @@ -179,7 +179,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { a.getSavedImages().writeImage(thumb, imageBytes); } }; - a.cropImageAndSetWallpaper(mUri, h, finishActivityWhenDone); + boolean shouldFadeOutOnFinish = a.getWallpaperParallaxOffset() == 0f; + a.cropImageAndSetWallpaper(mUri, h, finishActivityWhenDone, shouldFadeOutOnFinish); } @Override public boolean isSelectable() { @@ -207,7 +208,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { @Override public void run() { - if (bitmapSource.getLoadingState() == BitmapSource.State.LOADED) { + if (bitmapSource.getLoadingState() == BitmapSource.State.LOADED) { a.setWallpaperButtonEnabled(true); } } @@ -215,7 +216,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } @Override public void onSave(WallpaperPickerActivity a) { - a.setWallpaper(Uri.fromFile(mFile), true); + boolean shouldFadeOutOnFinish = a.getWallpaperParallaxOffset() == 0f; + a.setWallpaper(Uri.fromFile(mFile), true, shouldFadeOutOnFinish); } @Override public boolean isSelectable() { @@ -241,16 +243,16 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { a.setWallpaperButtonEnabled(false); final BitmapRegionTileSource.ResourceBitmapSource bitmapSource = new BitmapRegionTileSource.ResourceBitmapSource(mResources, mResId); - a.setCropViewTileSource(bitmapSource, false, false, new CropViewScaleProvider() { + a.setCropViewTileSource(bitmapSource, false, false, new CropViewScaleAndOffsetProvider() { @Override - public float getScale(TileSource src) { - Point wallpaperSize = WallpaperUtils.getDefaultWallpaperSize( - a.getResources(), a.getWindowManager()); - RectF crop = Utils.getMaxCropRect( - src.getImageWidth(), src.getImageHeight(), - wallpaperSize.x, wallpaperSize.y, false); - return wallpaperSize.x / crop.width(); + public float getScale(Point wallpaperSize, RectF crop) { + return wallpaperSize.x /crop.width(); + } + + @Override + public float getParallaxOffset() { + return a.getWallpaperParallaxOffset(); } }, new Runnable() { @@ -265,7 +267,9 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { @Override public void onSave(WallpaperPickerActivity a) { boolean finishActivityWhenDone = true; - a.cropImageAndSetWallpaper(mResources, mResId, finishActivityWhenDone); + boolean shouldFadeOutOnFinish = true; + a.cropImageAndSetWallpaper(mResources, mResId, finishActivityWhenDone, + shouldFadeOutOnFinish); } @Override public boolean isSelectable() { @@ -296,12 +300,17 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { LoadRequest req = new LoadRequest(); req.moveToLeft = false; req.touchEnabled = false; - req.scaleProvider = new CropViewScaleProvider() { + req.scaleAndOffsetProvider = new CropViewScaleAndOffsetProvider() { @Override - public float getScale(TileSource src) { + public float getScale(Point wallpaperSize, RectF crop) { return 1f; } + + @Override + public float getParallaxOffset() { + return 0; + } }; req.result = new DrawableTileSource(a.getContext(), defaultWallpaper, DrawableTileSource.MAX_PREVIEW_SIZE); @@ -461,6 +470,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } }; + mWallpaperParallaxOffset = getIntent().getFloatExtra(EXTRA_WALLPAPER_OFFSET, 0); + // Populate the built-in wallpapers ArrayList wallpapers = findBundledWallpapers(); mWallpapersView = (LinearLayout) findViewById(R.id.wallpaper_list); @@ -661,6 +672,10 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { mSetWallpaperButton.setEnabled(enabled); } + public float getWallpaperParallaxOffset() { + return mWallpaperParallaxOffset; + } + @Thunk void selectTile(View v) { if (mSelectedTile != null) { mSelectedTile.setSelected(false); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 1f843cb702..0a085f6a42 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -748,6 +748,9 @@ public class Launcher extends Activity return; } else if (requestCode == REQUEST_PICK_WALLPAPER) { if (resultCode == RESULT_OK && mWorkspace.isInOverviewMode()) { + // User could have free-scrolled between pages before picking a wallpaper; make sure + // we move to the closest one now to avoid visual jump. + mWorkspace.setCurrentPage(mWorkspace.getPageNearestToCenterOfScreen()); showWorkspace(false); } return; @@ -2744,7 +2747,10 @@ public class Launcher extends Activity */ protected void onClickWallpaperPicker(View v) { if (LOGD) Log.d(TAG, "onClickWallpaperPicker"); - startActivityForResult(new Intent(Intent.ACTION_SET_WALLPAPER).setPackage(getPackageName()), + int pageScroll = mWorkspace.getScrollForPage(mWorkspace.getPageNearestToCenterOfScreen()); + float offset = mWorkspace.mWallpaperOffset.wallpaperOffsetForScroll(pageScroll); + startActivityForResult(new Intent(Intent.ACTION_SET_WALLPAPER).setPackage(getPackageName()) + .putExtra(WallpaperPickerActivity.EXTRA_WALLPAPER_OFFSET, offset), REQUEST_PICK_WALLPAPER); if (mLauncherCallbacks != null) { diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 856e3b88ad..b7d7c625d1 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1410,7 +1410,7 @@ public class Workspace extends PagedView return false; } - private float wallpaperOffsetForCurrentScroll() { + public float wallpaperOffsetForScroll(int scroll) { // TODO: do different behavior if it's a live wallpaper? // Don't use up all the wallpaper parallax until you have at least // MIN_PARALLAX_PAGE_SPAN pages @@ -1449,7 +1449,7 @@ public class Workspace extends PagedView // Sometimes the left parameter of the pages is animated during a layout transition; // this parameter offsets it to keep the wallpaper from animating as well int adjustedScroll = - getScrollX() - firstPageScrollX - getLayoutTransitionOffsetForPage(0); + scroll - firstPageScrollX - getLayoutTransitionOffsetForPage(0); float offset = Math.min(1, adjustedScroll / (float) scrollRange); offset = Math.max(0, offset); @@ -1463,6 +1463,10 @@ public class Workspace extends PagedView } } + private float wallpaperOffsetForCurrentScroll() { + return wallpaperOffsetForScroll(getScrollX()); + } + private int numEmptyScreensToIgnore() { int numScrollingPages = getChildCount() - numCustomPages(); if (numScrollingPages >= MIN_PARALLAX_PAGE_SPAN && hasExtraEmptyScreen()) { From 4b66bf3cff049ba39da74c0fb0f9edbced410f7c Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Fri, 18 Sep 2015 12:15:19 -0700 Subject: [PATCH 020/219] Cleanup some incorrect / noisey calls to CustomContentCallbacks#onShow / onHide -> In some instances, onResume would incorrectly call onShow -> When pressing Home from CustomContent, we'd get a sequence of onHide, onShow, and then onHide due to some deferred actions in onNewIntent. Got rid of the onShow. issue 17629011 Change-Id: I9b4f2ef682f5a7060e68210866fa05452076e428 --- src/com/android/launcher3/Launcher.java | 17 +++++++++++++++-- src/com/android/launcher3/Workspace.java | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 1f843cb702..37e4076448 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -345,6 +345,8 @@ public class Launcher extends Activity private DeviceProfile mDeviceProfile; + private boolean mMoveToDefaultScreenFromNewIntent; + // This is set to the view that launched the activity that navigated the user away from // launcher. Since there is no callback for when the activity has finished launching, enable // the press state and keep this reference to reset the press state when we return to launcher. @@ -1048,14 +1050,21 @@ public class Launcher extends Activity Log.d(TAG, "Time spent in onResume: " + (System.currentTimeMillis() - startTime)); } - if (mWorkspace.getCustomContentCallbacks() != null) { + // We want to suppress callbacks about CustomContent being shown if we have just received + // onNewIntent while the user was present within launcher. In that case, we post a call + // to move the user to the main screen (which will occur after onResume). We don't want to + // have onHide (from onPause), then onShow, then onHide again, which we get if we don't + // suppress here. + if (mWorkspace.getCustomContentCallbacks() != null + && !mMoveToDefaultScreenFromNewIntent) { // If we are resuming and the custom content is the current page, we call onShow(). - // It is also poassible that onShow will instead be called slightly after first layout + // It is also possible that onShow will instead be called slightly after first layout // if PagedView#setRestorePage was set to the custom content page in onCreate(). if (mWorkspace.isOnOrMovingToCustomContent()) { mWorkspace.getCustomContentCallbacks().onShow(true); } } + mMoveToDefaultScreenFromNewIntent = false; updateInteraction(Workspace.State.NORMAL, mWorkspace.getState()); mWorkspace.onResume(); @@ -1922,6 +1931,10 @@ public class Launcher extends Activity mLauncherCallbacks.shouldMoveToDefaultScreenOnHomeIntent() : true; if (alreadyOnHome && mState == State.WORKSPACE && !mWorkspace.isTouchActive() && openFolder == null && moveToDefaultScreen) { + + // We use this flag to suppress noisy callbacks above custom content state + // from onResume. + mMoveToDefaultScreenFromNewIntent = true; mWorkspace.post(new Runnable() { @Override public void run() { diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 856e3b88ad..be9f3f2ad1 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1606,7 +1606,7 @@ public class Workspace extends PagedView } public boolean isOnOrMovingToCustomContent() { - return hasCustomContent() && getNextPage() == 0; + return hasCustomContent() && getNextPage() == 0 && mRestorePage == INVALID_RESTORE_PAGE; } private void updateStateForCustomContent(int screenCenter) { From 0abb36f6920733f813e22ad984bb7d48f0924698 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 23 Jun 2015 10:53:59 -0700 Subject: [PATCH 021/219] Fixing overscroll effect when the navigation bar is opaque The navigation bar is opaque on mobile devices in landscape mode. Launcher should ignore the right insets and draw the edge effect appropriately. Also draw the black bar under the navigation bar, just in case we assume it to be opaque, but it was not actually opaque. Bug: 18526657 Change-Id: I1d49dcb82b8a5ee25009bc738cd9b8c0c5c88263 --- .../launcher3/InvariantDeviceProfile.java | 9 ++++++- .../android/launcher3/LauncherRootView.java | 25 +++++++++++++++++++ src/com/android/launcher3/PagedView.java | 12 ++++++--- src/com/android/launcher3/Workspace.java | 1 + 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java index ae204c40c3..20a77b5af6 100644 --- a/src/com/android/launcher3/InvariantDeviceProfile.java +++ b/src/com/android/launcher3/InvariantDeviceProfile.java @@ -17,6 +17,7 @@ package com.android.launcher3; import android.annotation.TargetApi; +import android.app.ActivityManager; import android.content.Context; import android.graphics.Point; import android.os.Build; @@ -84,6 +85,9 @@ public class InvariantDeviceProfile { DeviceProfile landscapeProfile; DeviceProfile portraitProfile; + // On Marshmallow the status bar is no longer opaque, when drawn on the right. + public boolean isRightInsetOpaque; + InvariantDeviceProfile() { } @@ -116,7 +120,7 @@ public class InvariantDeviceProfile { defaultLayoutId = dlId; } - @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) + @TargetApi(Build.VERSION_CODES.M) InvariantDeviceProfile(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); @@ -167,6 +171,9 @@ public class InvariantDeviceProfile { largeSide, smallSide, true /* isLandscape */); portraitProfile = new DeviceProfile(context, this, smallestSize, largestSize, smallSide, largeSide, false /* isLandscape */); + + isRightInsetOpaque = !Utilities.ATLEAST_MARSHMALLOW || + context.getSystemService(ActivityManager.class).isLowRamDevice(); } ArrayList getPredefinedDeviceProfiles() { diff --git a/src/com/android/launcher3/LauncherRootView.java b/src/com/android/launcher3/LauncherRootView.java index e8c11c48bd..1c6ca87134 100644 --- a/src/com/android/launcher3/LauncherRootView.java +++ b/src/com/android/launcher3/LauncherRootView.java @@ -1,17 +1,42 @@ package com.android.launcher3; import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; public class LauncherRootView extends InsettableFrameLayout { + + private final Paint mOpaquePaint; + private boolean mDrawRightInsetBar; + public LauncherRootView(Context context, AttributeSet attrs) { super(context, attrs); + + mOpaquePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mOpaquePaint.setColor(Color.BLACK); + mOpaquePaint.setStyle(Paint.Style.FILL); } @Override protected boolean fitSystemWindows(Rect insets) { setInsets(insets); + mDrawRightInsetBar = mInsets.right > 0 && LauncherAppState + .getInstance().getInvariantDeviceProfile().isRightInsetOpaque; + return true; // I'll take it from here } + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + + // If the right inset is opaque, draw a black rectangle to ensure that is stays opaque. + if (mDrawRightInsetBar) { + int width = getWidth(); + canvas.drawRect(width - mInsets.right, 0, width, getHeight(), mOpaquePaint); + } + } } \ No newline at end of file diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 05f0a05534..2579ea363c 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -202,6 +202,9 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc protected final Rect mInsets = new Rect(); protected final boolean mIsRtl; + // When set to true, full screen content and overscroll effect is shited inside by right inset. + protected boolean mIgnoreRightInset; + // Edge effect private final LauncherEdgeEffect mEdgeGlowLeft = new LauncherEdgeEffect(); private final LauncherEdgeEffect mEdgeGlowRight = new LauncherEdgeEffect(); @@ -819,7 +822,8 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc childWidthMode = MeasureSpec.EXACTLY; childHeightMode = MeasureSpec.EXACTLY; - childWidth = getViewportWidth() - mInsets.left - mInsets.right; + childWidth = getViewportWidth() - mInsets.left + - (mIgnoreRightInset ? mInsets.right : 0); childHeight = getViewportHeight(); } if (referenceChildWidth == 0) { @@ -1177,8 +1181,10 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc canvas.rotate(90); getEdgeVerticalPostion(sTmpIntPoint); - canvas.translate(sTmpIntPoint[0] - display.top, -display.width()); - mEdgeGlowRight.setSize(sTmpIntPoint[1] - sTmpIntPoint[0], display.width()); + + int width = mIgnoreRightInset ? (display.width() - mInsets.right) : display.width(); + canvas.translate(sTmpIntPoint[0] - display.top, -width); + mEdgeGlowRight.setSize(sTmpIntPoint[1] - sTmpIntPoint[0], width); if (mEdgeGlowRight.draw(canvas)) { postInvalidateOnAnimation(); } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 0fdc742b60..362e8046dc 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -454,6 +454,7 @@ public class Workspace extends PagedView setWallpaperDimension(); setEdgeGlowColor(getResources().getColor(R.color.workspace_edge_effect_color)); + mIgnoreRightInset = app.getInvariantDeviceProfile().isRightInsetOpaque; } private void setupLayoutTransition() { From 6a706b1dd72a03fe6c6b4c2a5a6df0e782c70936 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 22 Sep 2015 16:56:55 -0700 Subject: [PATCH 022/219] Preventing nullpointer exception when cloning rawList Bug: 24299525 Change-Id: I92018a3da7d75afc2c6997302f8e0492eb78e62f --- .../android/launcher3/model/WidgetsModel.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/com/android/launcher3/model/WidgetsModel.java b/src/com/android/launcher3/model/WidgetsModel.java index eef4f9173a..99a53ff369 100644 --- a/src/com/android/launcher3/model/WidgetsModel.java +++ b/src/com/android/launcher3/model/WidgetsModel.java @@ -34,19 +34,19 @@ public class WidgetsModel { private static final boolean DEBUG = false; /* List of packages that is tracked by this model. */ - private ArrayList mPackageItemInfos = new ArrayList<>(); + private final ArrayList mPackageItemInfos; /* Map of widgets and shortcuts that are tracked per package. */ - private HashMap> mWidgetsList = new HashMap<>(); - - private ArrayList mRawList; + private final HashMap> mWidgetsList; private final AppWidgetManagerCompat mAppWidgetMgr; private final WidgetsAndShortcutNameComparator mWidgetAndShortcutNameComparator; private final Comparator mAppNameComparator; private final IconCache mIconCache; private final AppFilter mAppFilter; - private AlphabeticIndexCompat mIndexer; + private final AlphabeticIndexCompat mIndexer; + + private ArrayList mRawList; public WidgetsModel(Context context, IconCache iconCache, AppFilter appFilter) { mAppWidgetMgr = AppWidgetManagerCompat.getInstance(context); @@ -55,6 +55,10 @@ public class WidgetsModel { mIconCache = iconCache; mAppFilter = appFilter; mIndexer = new AlphabeticIndexCompat(context); + mPackageItemInfos = new ArrayList<>(); + mWidgetsList = new HashMap<>(); + + mRawList = new ArrayList<>(); } @SuppressWarnings("unchecked") @@ -62,18 +66,16 @@ public class WidgetsModel { mAppWidgetMgr = model.mAppWidgetMgr; mPackageItemInfos = (ArrayList) model.mPackageItemInfos.clone(); mWidgetsList = (HashMap>) model.mWidgetsList.clone(); - mRawList = (ArrayList) model.mRawList.clone(); mWidgetAndShortcutNameComparator = model.mWidgetAndShortcutNameComparator; mAppNameComparator = model.mAppNameComparator; mIconCache = model.mIconCache; mAppFilter = model.mAppFilter; + mIndexer = model.mIndexer; + mRawList = (ArrayList) model.mRawList.clone(); } // Access methods that may be deleted if the private fields are made package-private. public int getPackageSize() { - if (mPackageItemInfos == null) { - return 0; - } return mPackageItemInfos.size(); } From ff9133f1125865f4e14a92d4b5e661f1ac92524d Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Tue, 22 Sep 2015 13:21:20 -0700 Subject: [PATCH 023/219] Adjust cropped bitmap bounds to correctly fit in original bitmap bounds. Bug: 22631531 Change-Id: Ia0c1bccf4b8af3a8b335b865974c5d08f9836689 --- .../android/gallery3d/common/BitmapCropTask.java | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java index cb7090fade..a79fb65c93 100644 --- a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java +++ b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java @@ -293,22 +293,16 @@ public class BitmapCropTask extends AsyncTask { roundedTrueCrop.right = roundedTrueCrop.left + fullSize.getWidth(); } if (roundedTrueCrop.right > fullSize.getWidth()) { - // Adjust the left value - int adjustment = roundedTrueCrop.left - - Math.max(0, roundedTrueCrop.right - roundedTrueCrop.width()); - roundedTrueCrop.left -= adjustment; - roundedTrueCrop.right -= adjustment; + // Adjust the left and right values. + roundedTrueCrop.offset(-(roundedTrueCrop.right - fullSize.getWidth()), 0); } if (roundedTrueCrop.height() > fullSize.getHeight()) { // Adjust the height roundedTrueCrop.bottom = roundedTrueCrop.top + fullSize.getHeight(); } if (roundedTrueCrop.bottom > fullSize.getHeight()) { - // Adjust the top value - int adjustment = roundedTrueCrop.top - - Math.max(0, roundedTrueCrop.bottom - roundedTrueCrop.height()); - roundedTrueCrop.top -= adjustment; - roundedTrueCrop.bottom -= adjustment; + // Adjust the top and bottom values. + roundedTrueCrop.offset(0, -(roundedTrueCrop.bottom - fullSize.getHeight())); } crop = Bitmap.createBitmap(fullSize, roundedTrueCrop.left, From 625e4fe596ee56ba151f107d6f36ce10c905115f Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Fri, 18 Sep 2015 18:22:14 -0700 Subject: [PATCH 024/219] Show a spinner while wallpaper is being cropped. Bug: 23599411 Change-Id: I6c5f75554fd59b7caa3a61f1b11b4a2a6aa21e7c --- .../src/com/android/launcher3/WallpaperCropActivity.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java index 0dbd3578a1..b717b597c7 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java @@ -361,6 +361,9 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb protected void cropImageAndSetWallpaper(Uri uri, BitmapCropTask.OnBitmapCroppedHandler onBitmapCroppedHandler, final boolean finishActivityWhenDone, final boolean shouldFadeOutOnFinish) { + // Give some feedback so user knows something is happening. + mProgressView.setVisibility(View.VISIBLE); + boolean centerCrop = getResources().getBoolean(R.bool.center_crop); // Get the crop boolean ltr = mCropView.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR; From 4616347537efec8b039477e8a1660575a0923c90 Mon Sep 17 00:00:00 2001 From: Winson Date: Tue, 22 Sep 2015 17:31:56 -0700 Subject: [PATCH 025/219] Fixing workspace state issue with option menu. - Hitting a ctrl key combo will actually call onPrepareOptionsMenu(), which will change the state of the workspace incorrectly. Instead, listen for the menu button, and only allow the user to enter overview mode if they are currently not dragging or in an overlay state (like all apps or widgets). - Also making the overview buttons focusable so that they are focused when you go into overview mode. Bug: 22483367 Change-Id: Ie6e9febd8a5a4e7ad25d745639d42d1c7b9801b4 --- res/layout/overview_panel.xml | 9 ++++--- src/com/android/launcher3/Launcher.java | 36 ++++++++++++++++--------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/res/layout/overview_panel.xml b/res/layout/overview_panel.xml index 1f02dce3c7..4f54f1dfcd 100644 --- a/res/layout/overview_panel.xml +++ b/res/layout/overview_panel.xml @@ -33,7 +33,8 @@ android:text="@string/wallpaper_button_text" android:textAllCaps="true" android:textColor="@android:color/white" - android:textSize="12sp" /> + android:textSize="12sp" + android:focusable="true" /> + android:textSize="12sp" + android:focusable="true" /> + android:textSize="12sp" + android:focusable="true" /> \ No newline at end of file diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 812445e856..35de223076 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1282,6 +1282,29 @@ public class Launcher extends Activity return handled; } + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_MENU) { + // Ignore the menu key if we are currently dragging or are on the custom content screen + if (!isOnCustomContent() && !mDragController.isDragging()) { + // Close any open folders + closeFolder(); + + // Stop resizing any widgets + mWorkspace.exitWidgetResizeMode(); + + // Show the overview mode if we are on the workspace + if (mState == State.WORKSPACE && !mWorkspace.isInOverviewMode() && + !mWorkspace.isSwitchingState()) { + mOverviewPanel.requestFocus(); + showOverviewMode(true); + } + } + return true; + } + return super.onKeyUp(keyCode, event); + } + private String getTypedText() { return mDefaultKeySsb.toString(); } @@ -2181,22 +2204,9 @@ public class Launcher extends Activity @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - if (!isOnCustomContent()) { - // Close any open folders - closeFolder(); - // Stop resizing any widgets - mWorkspace.exitWidgetResizeMode(); - if (!mWorkspace.isInOverviewMode()) { - // Show the overview mode - showOverviewMode(true); - } else { - showWorkspace(true); - } - } if (mLauncherCallbacks != null) { return mLauncherCallbacks.onPrepareOptionsMenu(menu); } - return false; } From 7ca991104e3ac2e99fcde5599416f82b4d66aad1 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 23 Sep 2015 10:16:38 -0700 Subject: [PATCH 026/219] Using an executor with increased queue size for loading previews An async task can be in the queue even if it has been cancelled. It is removed only after it gets executed once. So the executor can get blocked if there are some tasks which are running, and we keep posting and cancelling preview load tasks. Bug: 24306650 Change-Id: I836c8d53258542cc6f31952dff84323cc057437c --- .../android/launcher3/WidgetPreviewLoader.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java index 346055566c..e13d44c9b9 100644 --- a/src/com/android/launcher3/WidgetPreviewLoader.java +++ b/src/com/android/launcher3/WidgetPreviewLoader.java @@ -43,12 +43,25 @@ import java.util.Set; import java.util.WeakHashMap; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; public class WidgetPreviewLoader { private static final String TAG = "WidgetPreviewLoader"; private static final boolean DEBUG = false; + // These values are same as that in {@link AsyncTask}. + private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); + private static final int CORE_POOL_SIZE = CPU_COUNT + 1; + private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1; + private static final int KEEP_ALIVE = 1; + private static final Executor PREVIEW_LOAD_EXECUTOR = new ThreadPoolExecutor( + CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE, + TimeUnit.SECONDS, new LinkedBlockingQueue()); + private static final float WIDGET_PREVIEW_ICON_PADDING_PERCENTAGE = 0.25f; private final HashMap mPackageVersions = new HashMap<>(); @@ -96,7 +109,7 @@ public class WidgetPreviewLoader { WidgetCacheKey key = getObjectKey(o, size); PreviewLoadTask task = new PreviewLoadTask(key, o, previewWidth, previewHeight, caller); - task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + task.executeOnExecutor(PREVIEW_LOAD_EXECUTOR); return new PreviewLoadRequest(task); } From 8ac727b2c6627028960a1efe18ab9c72442eef48 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 23 Sep 2015 15:38:09 -0700 Subject: [PATCH 027/219] Using custom threadpool executor instead of the one defined in AsyncTask Change-Id: I8fe95d932c5de14c74f0576bfc3d1f641d12b448 --- .../launcher3/AppWidgetsRestoredReceiver.java | 3 +-- src/com/android/launcher3/DeleteDropTarget.java | 2 +- src/com/android/launcher3/Launcher.java | 2 +- src/com/android/launcher3/Utilities.java | 16 ++++++++++++++++ .../android/launcher3/WidgetPreviewLoader.java | 15 +-------------- src/com/android/launcher3/Workspace.java | 2 +- 6 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/com/android/launcher3/AppWidgetsRestoredReceiver.java b/src/com/android/launcher3/AppWidgetsRestoredReceiver.java index b1d51ece04..54ce0fd3cc 100644 --- a/src/com/android/launcher3/AppWidgetsRestoredReceiver.java +++ b/src/com/android/launcher3/AppWidgetsRestoredReceiver.java @@ -13,7 +13,6 @@ import android.os.AsyncTask; import android.util.Log; import com.android.launcher3.LauncherSettings.Favorites; -import com.android.launcher3.compat.AppWidgetManagerCompat; import java.util.ArrayList; import java.util.List; @@ -90,7 +89,7 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver { } return null; } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); + }.executeOnExecutor(Utilities.THREAD_POOL_EXECUTOR); } LauncherAppState app = LauncherAppState.getInstanceNoCreate(); diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index 9c8659c293..1bff833c00 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -94,7 +94,7 @@ public class DeleteDropTarget extends ButtonDropTarget { appWidgetHost.deleteAppWidgetId(widget.appWidgetId); return null; } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + }.executeOnExecutor(Utilities.THREAD_POOL_EXECUTOR); } } else { return false; diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 49a6671d4b..547f849150 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -4735,7 +4735,7 @@ public class Launcher extends Activity } return null; } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); + }.executeOnExecutor(Utilities.THREAD_POOL_EXECUTOR); } } } diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index adedd33b2f..acc8090896 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -61,6 +61,10 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Locale; import java.util.Set; +import java.util.concurrent.Executor; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -105,6 +109,18 @@ public final class Utilities { public static final boolean ATLEAST_JB_MR2 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2; + // These values are same as that in {@link AsyncTask}. + private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); + private static final int CORE_POOL_SIZE = CPU_COUNT + 1; + private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1; + private static final int KEEP_ALIVE = 1; + /** + * An {@link Executor} to be used with async task with no limit on the queue size. + */ + public static final Executor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor( + CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE, + TimeUnit.SECONDS, new LinkedBlockingQueue()); + // To turn on these properties, type // adb shell setprop log.tag.PROPERTY_NAME [VERBOSE | SUPPRESS] private static final String FORCE_ENABLE_ROTATION_PROPERTY = "launcher_force_rotate"; diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java index e13d44c9b9..603b07278f 100644 --- a/src/com/android/launcher3/WidgetPreviewLoader.java +++ b/src/com/android/launcher3/WidgetPreviewLoader.java @@ -43,25 +43,12 @@ import java.util.Set; import java.util.WeakHashMap; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executor; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; public class WidgetPreviewLoader { private static final String TAG = "WidgetPreviewLoader"; private static final boolean DEBUG = false; - // These values are same as that in {@link AsyncTask}. - private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); - private static final int CORE_POOL_SIZE = CPU_COUNT + 1; - private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1; - private static final int KEEP_ALIVE = 1; - private static final Executor PREVIEW_LOAD_EXECUTOR = new ThreadPoolExecutor( - CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE, - TimeUnit.SECONDS, new LinkedBlockingQueue()); - private static final float WIDGET_PREVIEW_ICON_PADDING_PERCENTAGE = 0.25f; private final HashMap mPackageVersions = new HashMap<>(); @@ -109,7 +96,7 @@ public class WidgetPreviewLoader { WidgetCacheKey key = getObjectKey(o, size); PreviewLoadTask task = new PreviewLoadTask(key, o, previewWidth, previewHeight, caller); - task.executeOnExecutor(PREVIEW_LOAD_EXECUTOR); + task.executeOnExecutor(Utilities.THREAD_POOL_EXECUTOR); return new PreviewLoadRequest(task); } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index d12783bd50..c1a2aed7df 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1326,7 +1326,7 @@ public class Workspace extends PagedView mLauncher.overrideWallpaperDimensions()); return null; } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); + }.executeOnExecutor(Utilities.THREAD_POOL_EXECUTOR); } protected void snapToPage(int whichPage, Runnable r) { From 122a753dab209aca4b34210d749262a9ccf434c1 Mon Sep 17 00:00:00 2001 From: Winson Date: Wed, 23 Sep 2015 16:11:35 -0700 Subject: [PATCH 028/219] Adding small padding between icons in AllApps. Bug: 23948851 Change-Id: If7daf84be0c5b314c5afd896d2601028ee243c80 --- res/values/styles.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/res/values/styles.xml b/res/values/styles.xml index 7d60cbe0ac..4eee130991 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -44,6 +44,8 @@ @color/quantum_panel_text_color @dimen/dynamic_grid_icon_drawable_padding 0 + 4dp + 4dp false From 2949fb5b16a07259e221c5c04470e90c8afb4ea8 Mon Sep 17 00:00:00 2001 From: Winson Date: Thu, 24 Sep 2015 09:56:11 -0700 Subject: [PATCH 029/219] Fixing talk-back folder icon removal regression. Change-Id: I0b7fff645828d5198500973f1c9ea74f406a1a43 --- src/com/android/launcher3/DeleteDropTarget.java | 2 +- src/com/android/launcher3/FocusHelper.java | 4 ++-- src/com/android/launcher3/Folder.java | 2 +- src/com/android/launcher3/Launcher.java | 9 ++++----- src/com/android/launcher3/Workspace.java | 4 ++-- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index c3eea2f08e..5b1e84efb6 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -73,7 +73,7 @@ public class DeleteDropTarget extends ButtonDropTarget { // Remove the item from launcher and the db, we can ignore the containerInfo in this call // because we already remove the drag view from the folder (if the drag originated from // a folder) in Folder.beginDrag() - launcher.removeItem(view, null, item, true /* deleteFromDb */); + launcher.removeItem(view, item, true /* deleteFromDb */); launcher.getWorkspace().stripEmptyScreens(); return true; } diff --git a/src/com/android/launcher3/FocusHelper.java b/src/com/android/launcher3/FocusHelper.java index 5c91cc0f04..6872d5b0ab 100644 --- a/src/com/android/launcher3/FocusHelper.java +++ b/src/com/android/launcher3/FocusHelper.java @@ -247,7 +247,7 @@ public class FocusHelper { } } else if (isDeleteKeyChord(e)) { matrix = FocusLogic.createSparseMatrix(iconLayout); - launcher.removeItem(v, null, itemInfo, true /* deleteFromDb */); + launcher.removeItem(v, itemInfo, true /* deleteFromDb */); } else { // For other KEYCODE_DPAD_LEFT and KEYCODE_DPAD_RIGHT navigation, do not use the // matrix extended with hotseat. @@ -341,7 +341,7 @@ public class FocusHelper { } } else if (isDeleteKeyChord(e)) { matrix = FocusLogic.createSparseMatrix(iconLayout); - launcher.removeItem(v, null, itemInfo, true /* deleteFromDb */); + launcher.removeItem(v, itemInfo, true /* deleteFromDb */); } else { matrix = FocusLogic.createSparseMatrix(iconLayout); } diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index d4e5d6d058..58efaaa9d6 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -1115,7 +1115,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList // Remove the folder if (getItemCount() <= 1) { - mLauncher.removeItem(mFolderIcon, null, mInfo, true /* deleteFromDb */); + mLauncher.removeItem(mFolderIcon, mInfo, true /* deleteFromDb */); if (mFolderIcon instanceof DropTarget) { mDragController.removeDropTarget((DropTarget) mFolderIcon); } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index e320d4e980..84e6b997ac 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2419,16 +2419,15 @@ public class Launcher extends Activity * Unbinds the view for the specified item, and removes the item and all its children. * * @param v the view being removed. - * @param containerInfo the {@link FolderInfo} container of this view (can be null). * @param itemInfo the {@link ItemInfo} for this view. * @param deleteFromDb whether or not to delete this item from the db. */ - public boolean removeItem(View v, FolderInfo containerInfo, ItemInfo itemInfo, - boolean deleteFromDb) { + public boolean removeItem(View v, ItemInfo itemInfo, boolean deleteFromDb) { if (itemInfo instanceof ShortcutInfo) { // Remove the shortcut from the folder before removing it from launcher - if (containerInfo != null) { - containerInfo.remove((ShortcutInfo) itemInfo); + FolderInfo folderInfo = sFolders.get(itemInfo.container); + if (folderInfo != null) { + folderInfo.remove((ShortcutInfo) itemInfo); } else { mWorkspace.removeWorkspaceItem(v); } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 9c2d450e8a..ee23826098 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1120,7 +1120,7 @@ public class Workspace extends PagedView if (lahv != null && lahv.isReinflateRequired()) { // Remove and rebind the current widget (which was inflated in the wrong // orientation), but don't delete it from the database - mLauncher.removeItem(lahv, null, info, false /* deleteFromDb */); + mLauncher.removeItem(lahv, info, false /* deleteFromDb */); mLauncher.bindAppWidget(info); } } @@ -4525,7 +4525,7 @@ public class Workspace extends PagedView if (info.hostView instanceof PendingAppWidgetHostView) { // Remove and rebind the current widget, but don't delete it from the database PendingAppWidgetHostView view = (PendingAppWidgetHostView) info.hostView; - mLauncher.removeItem(view, null, info, false /* deleteFromDb */); + mLauncher.removeItem(view, info, false /* deleteFromDb */); mLauncher.bindAppWidget(info); } } From e78e3d734b577c1ab6dc0738a83600374908ea52 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 24 Sep 2015 11:23:31 -0700 Subject: [PATCH 030/219] Accessibility fixes 1) Use a different content description for temporary new page 2) Use different accessibility description for add widget toast 3) Announce when an item is deleted 4) Announce when hovering over a drop target 5) Announce state during drag-n-drop and widget resize (similar to seekbar) Bug: 23573321, 24057944 Change-Id: Icabb317625e70c78e11c0b4f99b9339172d93594 --- res/values/strings.xml | 4 + .../launcher3/AppWidgetResizeFrame.java | 12 +++ .../android/launcher3/ButtonDropTarget.java | 2 + src/com/android/launcher3/CellLayout.java | 17 +++- .../android/launcher3/DeleteDropTarget.java | 6 +- src/com/android/launcher3/DragController.java | 11 +-- src/com/android/launcher3/DropTarget.java | 4 + src/com/android/launcher3/Folder.java | 5 ++ src/com/android/launcher3/Utilities.java | 21 +++++ src/com/android/launcher3/Workspace.java | 77 +++++++++++-------- .../accessibility/DragViewStateAnnouncer.java | 57 ++++++++++++++ .../LauncherAccessibilityDelegate.java | 7 +- .../WorkspaceAccessibilityHelper.java | 37 +++++---- .../widget/WidgetsContainerView.java | 8 +- 14 files changed, 204 insertions(+), 64 deletions(-) create mode 100644 src/com/android/launcher3/accessibility/DragViewStateAnnouncer.java diff --git a/res/values/strings.xml b/res/values/strings.xml index fefadef282..f93b363ccb 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -50,6 +50,8 @@ Touch & hold to pick up a widget. + + Double-tap & hold to pick up a widget or use custom actions. %1$d \u00d7 %2$d @@ -125,6 +127,8 @@ Page %1$d of %2$d Home screen %1$d of %2$d + + New home screen page diff --git a/src/com/android/launcher3/AppWidgetResizeFrame.java b/src/com/android/launcher3/AppWidgetResizeFrame.java index e6bf525315..d868536080 100644 --- a/src/com/android/launcher3/AppWidgetResizeFrame.java +++ b/src/com/android/launcher3/AppWidgetResizeFrame.java @@ -14,6 +14,8 @@ import android.view.Gravity; import android.widget.FrameLayout; import android.widget.ImageView; +import com.android.launcher3.accessibility.DragViewStateAnnouncer; + public class AppWidgetResizeFrame extends FrameLayout { private static final int SNAP_DURATION = 150; private static final float DIMMED_HANDLE_ALPHA = 0f; @@ -40,6 +42,8 @@ public class AppWidgetResizeFrame extends FrameLayout { private final int[] mLastDirectionVector = new int[2]; private final int[] mTmpPt = new int[2]; + private final DragViewStateAnnouncer mStateAnnouncer; + private boolean mLeftBorderActive; private boolean mRightBorderActive; private boolean mTopBorderActive; @@ -78,6 +82,8 @@ public class AppWidgetResizeFrame extends FrameLayout { mMinHSpan = info.minSpanX; mMinVSpan = info.minSpanY; + mStateAnnouncer = DragViewStateAnnouncer.createFor(this); + setBackgroundResource(R.drawable.widget_resize_shadow); setForeground(getResources().getDrawable(R.drawable.widget_resize_frame)); setPadding(0, 0, 0, 0); @@ -320,12 +326,18 @@ public class AppWidgetResizeFrame extends FrameLayout { if (mCellLayout.createAreaForResize(cellX, cellY, spanX, spanY, mWidgetView, mDirectionVector, onDismiss)) { + if (mStateAnnouncer != null && (lp.cellHSpan != spanX || lp.cellVSpan != spanY) ) { + mStateAnnouncer.announce( + mLauncher.getString(R.string.widget_resized, spanX, spanY)); + } + lp.tmpCellX = cellX; lp.tmpCellY = cellY; lp.cellHSpan = spanX; lp.cellVSpan = spanY; mRunningVInc += vSpanDelta; mRunningHInc += hSpanDelta; + if (!onDismiss) { updateWidgetSizeRanges(mWidgetView, mLauncher, spanX, spanY); } diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java index 2baa6d8eed..9caa7ad874 100644 --- a/src/com/android/launcher3/ButtonDropTarget.java +++ b/src/com/android/launcher3/ButtonDropTarget.java @@ -34,6 +34,7 @@ import android.util.AttributeSet; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; import android.view.animation.DecelerateInterpolator; import android.view.animation.LinearInterpolator; import android.widget.TextView; @@ -123,6 +124,7 @@ public abstract class ButtonDropTarget extends TextView mDrawable.setColorFilter(new ColorMatrixColorFilter(mCurrentFilter)); setTextColor(mHoverColor); } + sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); } @Override diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index d48873762b..5ae7310ffc 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -1021,7 +1021,7 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { } void visualizeDropLocation(View v, Bitmap dragOutline, int originX, int originY, int cellX, - int cellY, int spanX, int spanY, boolean resize, Point dragOffset, Rect dragRegion) { + int cellY, int spanX, int spanY, boolean resize, DropTarget.DragObject dragObject) { final int oldDragCellX = mDragCell[0]; final int oldDragCellY = mDragCell[1]; @@ -1030,6 +1030,9 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { } if (cellX != oldDragCellX || cellY != oldDragCellY) { + Point dragOffset = dragObject.dragView.getDragVisualizeOffset(); + Rect dragRegion = dragObject.dragView.getDragRegion(); + mDragCell[0] = cellX; mDragCell[1] = cellY; // Find the top left corner of the rect the object will occupy @@ -1081,6 +1084,18 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { mDragOutlineAnims[mDragOutlineCurrent].setTag(dragOutline); mDragOutlineAnims[mDragOutlineCurrent].animateIn(); + + if (dragObject.stateAnnouncer != null) { + String msg; + if (isHotseat()) { + msg = getContext().getString(R.string.move_to_hotseat_position, + Math.max(cellX, cellY) + 1); + } else { + msg = getContext().getString(R.string.move_to_empty_cell, + cellY + 1, cellX + 1); + } + dragObject.stateAnnouncer.announce(msg); + } } } diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index 5b1e84efb6..2a0e203e68 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -19,7 +19,6 @@ package com.android.launcher3; import android.animation.TimeInterpolator; import android.content.Context; import android.graphics.PointF; -import android.os.AsyncTask; import android.util.AttributeSet; import android.view.View; import android.view.animation.AnimationUtils; @@ -67,15 +66,14 @@ public class DeleteDropTarget extends ButtonDropTarget { /** * Removes the item from the workspace. If the view is not null, it also removes the view. - * @return true if the item was removed. */ - public static boolean removeWorkspaceOrFolderItem(Launcher launcher, ItemInfo item, View view) { + public static void removeWorkspaceOrFolderItem(Launcher launcher, ItemInfo item, View view) { // Remove the item from launcher and the db, we can ignore the containerInfo in this call // because we already remove the drag view from the folder (if the drag originated from // a folder) in Folder.beginDrag() launcher.removeItem(view, item, true /* deleteFromDb */); launcher.getWorkspace().stripEmptyScreens(); - return true; + launcher.getDragLayer().announceForAccessibility(launcher.getString(R.string.item_removed)); } @Override diff --git a/src/com/android/launcher3/DragController.java b/src/com/android/launcher3/DragController.java index 2191455d53..204dddfdf1 100644 --- a/src/com/android/launcher3/DragController.java +++ b/src/com/android/launcher3/DragController.java @@ -32,8 +32,10 @@ import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; import android.view.ViewConfiguration; +import android.view.accessibility.AccessibilityManager; import android.view.inputmethod.InputMethodManager; +import com.android.launcher3.accessibility.DragViewStateAnnouncer; import com.android.launcher3.util.Thunk; import java.util.ArrayList; @@ -145,8 +147,6 @@ public class DragController { /** * Used to create a new DragLayer from XML. - * - * @param context The application's context. */ public DragController(Launcher launcher) { Resources r = launcher.getResources(); @@ -239,6 +239,9 @@ public class DragController { mDragObject = new DropTarget.DragObject(); + final DragView dragView = mDragObject.dragView = new DragView(mLauncher, b, registrationX, + registrationY, 0, 0, b.getWidth(), b.getHeight(), initialDragViewScale); + mDragObject.dragComplete = false; if (mIsAccessibleDrag) { // For an accessible drag, we assume the view is being dragged from the center. @@ -248,14 +251,12 @@ public class DragController { } else { mDragObject.xOffset = mMotionDownX - (dragLayerX + dragRegionLeft); mDragObject.yOffset = mMotionDownY - (dragLayerY + dragRegionTop); + mDragObject.stateAnnouncer = DragViewStateAnnouncer.createFor(dragView); } mDragObject.dragSource = source; mDragObject.dragInfo = dragInfo; - final DragView dragView = mDragObject.dragView = new DragView(mLauncher, b, registrationX, - registrationY, 0, 0, b.getWidth(), b.getHeight(), initialDragViewScale); - if (dragOffset != null) { dragView.setDragVisualizeOffset(new Point(dragOffset)); } diff --git a/src/com/android/launcher3/DropTarget.java b/src/com/android/launcher3/DropTarget.java index c8fac54669..434059168c 100644 --- a/src/com/android/launcher3/DropTarget.java +++ b/src/com/android/launcher3/DropTarget.java @@ -19,6 +19,8 @@ package com.android.launcher3; import android.graphics.PointF; import android.graphics.Rect; +import com.android.launcher3.accessibility.DragViewStateAnnouncer; + /** * Interface defining an object that can receive a drag. * @@ -64,6 +66,8 @@ public interface DropTarget { /** Defers removing the DragView from the DragLayer until after the drop animation. */ public boolean deferDragViewCleanupPostAnimation = true; + public DragViewStateAnnouncer stateAnnouncer; + public DragObject() { } diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index 58efaaa9d6..1499a27369 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -706,6 +706,11 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList mReorderAlarm.setOnAlarmListener(mReorderAlarmListener); mReorderAlarm.setAlarm(REORDER_DELAY); mPrevTargetRank = mTargetRank; + + if (d.stateAnnouncer != null) { + d.stateAnnouncer.announce(getContext().getString(R.string.move_to_position, + mTargetRank + 1)); + } } float x = r[0]; diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index acc8090896..d5b28985cd 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -47,7 +47,10 @@ import android.graphics.drawable.PaintDrawable; import android.os.Build; import android.os.Bundle; import android.os.Process; +import android.text.Spannable; +import android.text.SpannableString; import android.text.TextUtils; +import android.text.style.TtsSpan; import android.util.DisplayMetrics; import android.util.Log; import android.util.Pair; @@ -726,4 +729,22 @@ public final class Utilities { public static String createDbSelectionQuery(String columnName, Iterable values) { return String.format(Locale.ENGLISH, "%s IN (%s)", columnName, TextUtils.join(", ", values)); } + + /** + * Wraps a message with a TTS span, so that a different message is spoken than + * what is getting displayed. + * @param msg original message + * @param ttsMsg message to be spoken + */ + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public static CharSequence wrapForTts(CharSequence msg, String ttsMsg) { + if (Utilities.ATLEAST_LOLLIPOP) { + SpannableString spanned = new SpannableString(msg); + spanned.setSpan(new TtsSpan.TextBuilder(ttsMsg).build(), + 0, spanned.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); + return spanned; + } else { + return msg; + } + } } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index ee23826098..b63ddbaa7e 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -67,6 +67,7 @@ import com.android.launcher3.UninstallDropTarget.UninstallSource; import com.android.launcher3.accessibility.LauncherAccessibilityDelegate; import com.android.launcher3.accessibility.LauncherAccessibilityDelegate.AccessibilityDragSource; import com.android.launcher3.accessibility.OverviewScreenAccessibilityDelegate; +import com.android.launcher3.accessibility.WorkspaceAccessibilityHelper; import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.util.LongArrayMap; import com.android.launcher3.util.Thunk; @@ -2024,7 +2025,7 @@ public class Workspace extends PagedView } setImportantForAccessibility((mState == State.NORMAL || mState == State.OVERVIEW) ? IMPORTANT_FOR_ACCESSIBILITY_AUTO - : IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS); + : IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS); } else { int accessible = mState == State.NORMAL ? IMPORTANT_FOR_ACCESSIBILITY_AUTO : @@ -2473,11 +2474,14 @@ public class Workspace extends PagedView return true; } - boolean willCreateUserFolder(ItemInfo info, CellLayout target, int[] targetCell, float - distance, boolean considerTimeout) { + boolean willCreateUserFolder(ItemInfo info, CellLayout target, int[] targetCell, + float distance, boolean considerTimeout) { if (distance > mMaxDistanceForFolderCreation) return false; View dropOverView = target.getChildAt(targetCell[0], targetCell[1]); + return willCreateUserFolder(info, dropOverView, considerTimeout); + } + boolean willCreateUserFolder(ItemInfo info, View dropOverView, boolean considerTimeout) { if (dropOverView != null) { CellLayout.LayoutParams lp = (CellLayout.LayoutParams) dropOverView.getLayoutParams(); if (lp.useTmpCoords && (lp.tmpCellX != lp.cellX || lp.tmpCellY != lp.tmpCellY)) { @@ -2497,7 +2501,7 @@ public class Workspace extends PagedView boolean aboveShortcut = (dropOverView.getTag() instanceof ShortcutInfo); boolean willBecomeShortcut = (info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION || - info.itemType == LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT); + info.itemType == LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT); return (aboveShortcut && willBecomeShortcut); } @@ -2506,7 +2510,10 @@ public class Workspace extends PagedView float distance) { if (distance > mMaxDistanceForFolderCreation) return false; View dropOverView = target.getChildAt(targetCell[0], targetCell[1]); + return willAddToExistingUserFolder(dragInfo, dropOverView); + } + boolean willAddToExistingUserFolder(Object dragInfo, View dropOverView) { if (dropOverView != null) { CellLayout.LayoutParams lp = (CellLayout.LayoutParams) dropOverView.getLayoutParams(); if (lp.useTmpCoords && (lp.tmpCellX != lp.cellX || lp.tmpCellY != lp.tmpCellY)) { @@ -3209,8 +3216,6 @@ public class Workspace extends PagedView mapPointFromSelfToChild(mDragTargetLayout, mDragViewVisualCenter, null); } - ItemInfo info = (ItemInfo) d.dragInfo; - int minSpanX = item.spanX; int minSpanY = item.spanY; if (item.minSpanX > 0 && item.minSpanY > 0) { @@ -3229,11 +3234,7 @@ public class Workspace extends PagedView float targetCellDistance = mDragTargetLayout.getDistanceFromCell( mDragViewVisualCenter[0], mDragViewVisualCenter[1], mTargetCell); - final View dragOverView = mDragTargetLayout.getChildAt(mTargetCell[0], - mTargetCell[1]); - - manageFolderFeedback(info, mDragTargetLayout, mTargetCell, - targetCellDistance, dragOverView, d.accessibleDrag); + manageFolderFeedback(mDragTargetLayout, mTargetCell, targetCellDistance, d); boolean nearestDropOccupied = mDragTargetLayout.isNearestDropLocationOccupied((int) mDragViewVisualCenter[0], (int) mDragViewVisualCenter[1], item.spanX, @@ -3242,8 +3243,7 @@ public class Workspace extends PagedView if (!nearestDropOccupied) { mDragTargetLayout.visualizeDropLocation(child, mDragOutline, (int) mDragViewVisualCenter[0], (int) mDragViewVisualCenter[1], - mTargetCell[0], mTargetCell[1], item.spanX, item.spanY, false, - d.dragView.getDragVisualizeOffset(), d.dragView.getDragRegion()); + mTargetCell[0], mTargetCell[1], item.spanX, item.spanY, false, d); } else if ((mDragMode == DRAG_MODE_NONE || mDragMode == DRAG_MODE_REORDER) && !mReorderAlarm.alarmPending() && (mLastReorderX != reorderX || mLastReorderY != reorderY)) { @@ -3256,7 +3256,7 @@ public class Workspace extends PagedView // Otherwise, if we aren't adding to or creating a folder and there's no pending // reorder, then we schedule a reorder ReorderAlarmListener listener = new ReorderAlarmListener(mDragViewVisualCenter, - minSpanX, minSpanY, item.spanX, item.spanY, d.dragView, child); + minSpanX, minSpanY, item.spanX, item.spanY, d, child); mReorderAlarm.setOnAlarmListener(listener); mReorderAlarm.setAlarm(REORDER_TIMEOUT); } @@ -3270,28 +3270,34 @@ public class Workspace extends PagedView } } - private void manageFolderFeedback(ItemInfo info, CellLayout targetLayout, - int[] targetCell, float distance, View dragOverView, boolean accessibleDrag) { - boolean userFolderPending = willCreateUserFolder(info, targetLayout, targetCell, distance, - false); + private void manageFolderFeedback(CellLayout targetLayout, + int[] targetCell, float distance, DragObject dragObject) { + if (distance > mMaxDistanceForFolderCreation) return; + + final View dragOverView = mDragTargetLayout.getChildAt(mTargetCell[0], mTargetCell[1]); + ItemInfo info = (ItemInfo) dragObject.dragInfo; + boolean userFolderPending = willCreateUserFolder(info, dragOverView, false); if (mDragMode == DRAG_MODE_NONE && userFolderPending && !mFolderCreationAlarm.alarmPending()) { FolderCreationAlarmListener listener = new FolderCreationAlarmListener(targetLayout, targetCell[0], targetCell[1]); - if (!accessibleDrag) { + if (!dragObject.accessibleDrag) { mFolderCreationAlarm.setOnAlarmListener(listener); mFolderCreationAlarm.setAlarm(FOLDER_CREATION_TIMEOUT); } else { listener.onAlarm(mFolderCreationAlarm); } + + if (dragObject.stateAnnouncer != null) { + dragObject.stateAnnouncer.announce(WorkspaceAccessibilityHelper + .getDescriptionForDropOver(dragOverView, getContext())); + } return; } - boolean willAddToFolder = - willAddToExistingUserFolder(info, targetLayout, targetCell, distance); - + boolean willAddToFolder = willAddToExistingUserFolder(info, dragOverView); if (willAddToFolder && mDragMode == DRAG_MODE_NONE) { mDragOverFolderIcon = ((FolderIcon) dragOverView); mDragOverFolderIcon.onDragEnter(info); @@ -3299,6 +3305,11 @@ public class Workspace extends PagedView targetLayout.clearDragOutlines(); } setDragMode(DRAG_MODE_ADD_TO_FOLDER); + + if (dragObject.stateAnnouncer != null) { + dragObject.stateAnnouncer.announce(WorkspaceAccessibilityHelper + .getDescriptionForDropOver(dragOverView, getContext())); + } return; } @@ -3308,8 +3319,6 @@ public class Workspace extends PagedView if (mDragMode == DRAG_MODE_CREATE_FOLDER && !userFolderPending) { setDragMode(DRAG_MODE_NONE); } - - return; } class FolderCreationAlarmListener implements OnAlarmListener { @@ -3341,18 +3350,18 @@ public class Workspace extends PagedView class ReorderAlarmListener implements OnAlarmListener { float[] dragViewCenter; int minSpanX, minSpanY, spanX, spanY; - DragView dragView; + DragObject dragObject; View child; public ReorderAlarmListener(float[] dragViewCenter, int minSpanX, int minSpanY, int spanX, - int spanY, DragView dragView, View child) { + int spanY, DragObject dragObject, View child) { this.dragViewCenter = dragViewCenter; this.minSpanX = minSpanX; this.minSpanY = minSpanY; this.spanX = spanX; this.spanY = spanY; this.child = child; - this.dragView = dragView; + this.dragObject = dragObject; } public void onAlarm(Alarm alarm) { @@ -3376,8 +3385,7 @@ public class Workspace extends PagedView boolean resize = resultSpan[0] != spanX || resultSpan[1] != spanY; mDragTargetLayout.visualizeDropLocation(child, mDragOutline, (int) mDragViewVisualCenter[0], (int) mDragViewVisualCenter[1], - mTargetCell[0], mTargetCell[1], resultSpan[0], resultSpan[1], resize, - dragView.getDragVisualizeOffset(), dragView.getDragRegion()); + mTargetCell[0], mTargetCell[1], resultSpan[0], resultSpan[1], resize, dragObject); } } @@ -4472,8 +4480,17 @@ public class Workspace extends PagedView private String getPageDescription(int page) { int delta = numCustomPages(); + int nScreens = getChildCount() - delta; + int extraScreenId = mScreenOrder.indexOf(EXTRA_EMPTY_SCREEN_ID); + if (extraScreenId >= 0 && nScreens > 1) { + if (page == extraScreenId) { + return getContext().getString(R.string.workspace_new_page); + } + nScreens--; + } return String.format(getContext().getString(R.string.workspace_scroll_format), - page + 1 - delta, getChildCount() - delta); + page + 1 - delta, nScreens); + } public void getLocationInDragLayer(int[] loc) { diff --git a/src/com/android/launcher3/accessibility/DragViewStateAnnouncer.java b/src/com/android/launcher3/accessibility/DragViewStateAnnouncer.java new file mode 100644 index 0000000000..b5e6194a06 --- /dev/null +++ b/src/com/android/launcher3/accessibility/DragViewStateAnnouncer.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2015 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.accessibility; + +import android.content.Context; +import android.view.View; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; + +/** + * Periodically sends accessibility events to announce ongoing state changed. Based on the + * implementation in ProgressBar. + */ +public class DragViewStateAnnouncer implements Runnable { + + private static final int TIMEOUT_SEND_ACCESSIBILITY_EVENT = 200; + + private final View mTargetView; + + private DragViewStateAnnouncer(View view) { + mTargetView = view; + } + + public void announce(CharSequence msg) { + mTargetView.setContentDescription(msg); + mTargetView.removeCallbacks(this); + mTargetView.postDelayed(this, TIMEOUT_SEND_ACCESSIBILITY_EVENT); + } + + @Override + public void run() { + mTargetView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); + } + + public static DragViewStateAnnouncer createFor(View v) { + if (((AccessibilityManager) v.getContext().getSystemService(Context.ACCESSIBILITY_SERVICE)) + .isEnabled()) { + return new DragViewStateAnnouncer(v); + } else { + return null; + } + } +} diff --git a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java index fe7b25edd3..2233ebb7aa 100644 --- a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java +++ b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java @@ -134,11 +134,8 @@ public class LauncherAccessibilityDelegate extends AccessibilityDelegate impleme public boolean performAction(final View host, final ItemInfo item, int action) { if (action == REMOVE) { - if (DeleteDropTarget.removeWorkspaceOrFolderItem(mLauncher, item, host)) { - announceConfirmation(R.string.item_removed); - return true; - } - return false; + DeleteDropTarget.removeWorkspaceOrFolderItem(mLauncher, item, host); + return true; } else if (action == INFO) { InfoDropTarget.startDetailsActivityForInfo(item, mLauncher); return true; diff --git a/src/com/android/launcher3/accessibility/WorkspaceAccessibilityHelper.java b/src/com/android/launcher3/accessibility/WorkspaceAccessibilityHelper.java index 80ddc13b7c..73b824bb57 100644 --- a/src/com/android/launcher3/accessibility/WorkspaceAccessibilityHelper.java +++ b/src/com/android/launcher3/accessibility/WorkspaceAccessibilityHelper.java @@ -16,6 +16,7 @@ package com.android.launcher3.accessibility; +import android.content.Context; import android.text.TextUtils; import android.view.View; @@ -140,26 +141,30 @@ public class WorkspaceAccessibilityHelper extends DragAndDropAccessibilityDelega return mContext.getString(R.string.move_to_empty_cell, y + 1, x + 1); } } else { - ItemInfo info = (ItemInfo) child.getTag(); - if (info instanceof ShortcutInfo) { - return mContext.getString(R.string.create_folder_with, info.title); - } else if (info instanceof FolderInfo) { - if (TextUtils.isEmpty(info.title)) { - // Find the first item in the folder. - FolderInfo folder = (FolderInfo) info; - ShortcutInfo firstItem = null; - for (ShortcutInfo shortcut : folder.contents) { - if (firstItem == null || firstItem.rank > shortcut.rank) { - firstItem = shortcut; - } - } + return getDescriptionForDropOver(child, mContext); + } + } - if (firstItem != null) { - return mContext.getString(R.string.add_to_folder_with_app, firstItem.title); + public static String getDescriptionForDropOver(View overChild, Context context) { + ItemInfo info = (ItemInfo) overChild.getTag(); + if (info instanceof ShortcutInfo) { + return context.getString(R.string.create_folder_with, info.title); + } else if (info instanceof FolderInfo) { + if (TextUtils.isEmpty(info.title)) { + // Find the first item in the folder. + FolderInfo folder = (FolderInfo) info; + ShortcutInfo firstItem = null; + for (ShortcutInfo shortcut : folder.contents) { + if (firstItem == null || firstItem.rank > shortcut.rank) { + firstItem = shortcut; } } - return mContext.getString(R.string.add_to_folder, info.title); + + if (firstItem != null) { + return context.getString(R.string.add_to_folder_with_app, firstItem.title); + } } + return context.getString(R.string.add_to_folder, info.title); } return ""; } diff --git a/src/com/android/launcher3/widget/WidgetsContainerView.java b/src/com/android/launcher3/widget/WidgetsContainerView.java index 0c6ea31bbb..64d33aa09a 100644 --- a/src/com/android/launcher3/widget/WidgetsContainerView.java +++ b/src/com/android/launcher3/widget/WidgetsContainerView.java @@ -148,8 +148,11 @@ public class WidgetsContainerView extends BaseContainerView if (mWidgetInstructionToast != null) { mWidgetInstructionToast.cancel(); } - mWidgetInstructionToast = Toast.makeText(getContext(),R.string.long_press_widget_to_add, - Toast.LENGTH_SHORT); + + CharSequence msg = Utilities.wrapForTts( + getContext().getText(R.string.long_press_widget_to_add), + getContext().getString(R.string.long_accessible_way_to_add)); + mWidgetInstructionToast = Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT); mWidgetInstructionToast.show(); } @@ -164,7 +167,6 @@ public class WidgetsContainerView extends BaseContainerView if (!mLauncher.isWidgetsViewVisible() || mLauncher.getWorkspace().isSwitchingState()) return false; // Return if global dragging is not enabled - Log.d(TAG, String.format("onLonglick dragging enabled?.", v)); if (!mLauncher.isDraggingEnabled()) return false; boolean status = beginDragging(v); From 7aaa841c35d4a2adaa973f3c2b071608f062975b Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 25 Sep 2015 12:06:13 -0700 Subject: [PATCH 031/219] Fixing 'Item removed' announced twice when using accessible DnD Change-Id: I2d8781155619d22a41c3f363be7909d411c62fa9 --- src/com/android/launcher3/ButtonDropTarget.java | 6 +----- src/com/android/launcher3/DeleteDropTarget.java | 5 ----- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java index 9caa7ad874..69688f371d 100644 --- a/src/com/android/launcher3/ButtonDropTarget.java +++ b/src/com/android/launcher3/ButtonDropTarget.java @@ -303,14 +303,10 @@ public abstract class ButtonDropTarget extends TextView setOnClickListener(enable ? this : null); } - protected String getAccessibilityDropConfirmation() { - return null; - } - @Override public void onClick(View v) { LauncherAppState.getInstance().getAccessibilityDelegate() - .handleAccessibleDrop(this, null, getAccessibilityDropConfirmation()); + .handleAccessibleDrop(this, null, null); } public int getTextColor() { diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index 2a0e203e68..edaf525d65 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -125,9 +125,4 @@ public class DeleteDropTarget extends ButtonDropTarget { dragLayer.animateView(d.dragView, fling, duration, tInterpolator, onAnimationEndRunnable, DragLayer.ANIMATION_END_DISAPPEAR, null); } - - @Override - protected String getAccessibilityDropConfirmation() { - return getResources().getString(R.string.item_removed); - } } From d21301e674377ecd72bd14f32b52c68fabcfd3be Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 25 Sep 2015 12:17:08 -0700 Subject: [PATCH 032/219] Cancelling the stateannouncer when entering button drop target Change-Id: Ia10298e1d4862fc5f46894fa6d934207d6e9c117 --- src/com/android/launcher3/ButtonDropTarget.java | 3 +++ .../launcher3/accessibility/DragViewStateAnnouncer.java | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java index 9caa7ad874..e5bfe19c1c 100644 --- a/src/com/android/launcher3/ButtonDropTarget.java +++ b/src/com/android/launcher3/ButtonDropTarget.java @@ -124,6 +124,9 @@ public abstract class ButtonDropTarget extends TextView mDrawable.setColorFilter(new ColorMatrixColorFilter(mCurrentFilter)); setTextColor(mHoverColor); } + if (d.stateAnnouncer != null) { + d.stateAnnouncer.cancel(); + } sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); } diff --git a/src/com/android/launcher3/accessibility/DragViewStateAnnouncer.java b/src/com/android/launcher3/accessibility/DragViewStateAnnouncer.java index b5e6194a06..8ff82dd4f8 100644 --- a/src/com/android/launcher3/accessibility/DragViewStateAnnouncer.java +++ b/src/com/android/launcher3/accessibility/DragViewStateAnnouncer.java @@ -41,6 +41,10 @@ public class DragViewStateAnnouncer implements Runnable { mTargetView.postDelayed(this, TIMEOUT_SEND_ACCESSIBILITY_EVENT); } + public void cancel() { + mTargetView.removeCallbacks(this); + } + @Override public void run() { mTargetView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); From 14a43ce3e69730ee17486e140dc76142f6f05254 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Fri, 25 Sep 2015 13:05:50 -0700 Subject: [PATCH 033/219] Inform users when "Set wallpaper" fails. Bug: 23716897 Change-Id: I06cd63d9ee869235c6a4c3140e574bf4c710454e --- WallpaperPicker/res/values/strings.xml | 3 +++ .../com/android/gallery3d/common/BitmapCropTask.java | 10 ++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/WallpaperPicker/res/values/strings.xml b/WallpaperPicker/res/values/strings.xml index 72b1e15df4..2bfd4767fc 100644 --- a/WallpaperPicker/res/values/strings.xml +++ b/WallpaperPicker/res/values/strings.xml @@ -28,6 +28,9 @@ usually see this when using another app and trying to set an image as the wallpaper --> Couldn\'t load image as wallpaper + + Couldn\'t set image as wallpaper diff --git a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java index a79fb65c93..8b51447484 100644 --- a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java +++ b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java @@ -31,6 +31,9 @@ import android.graphics.RectF; import android.net.Uri; import android.os.AsyncTask; import android.util.Log; +import android.widget.Toast; + +import com.android.launcher3.R; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; @@ -395,9 +398,12 @@ public class BitmapCropTask extends AsyncTask { } @Override - protected void onPostExecute(Boolean result) { + protected void onPostExecute(Boolean cropSucceeded) { + if (!cropSucceeded) { + Toast.makeText(mContext, R.string.wallpaper_set_fail, Toast.LENGTH_SHORT).show(); + } if (mOnEndCropHandler != null) { - mOnEndCropHandler.run(result); + mOnEndCropHandler.run(cropSucceeded); } } } \ No newline at end of file From 17e2d49547eb8d068b1ba816c6226cf5ef77369d Mon Sep 17 00:00:00 2001 From: Winson Date: Fri, 25 Sep 2015 16:01:24 -0700 Subject: [PATCH 034/219] Use Long.compare() instead of truncating values for comparison. Bug: 24116808 --- src/com/android/launcher3/LauncherModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index afd5330165..e1cd298e3a 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -2387,7 +2387,7 @@ public class LauncherModel extends BroadcastReceiver Collections.sort(allWorkspaceItems, new Comparator() { @Override public int compare(ItemInfo lhs, ItemInfo rhs) { - return (int) (lhs.container - rhs.container); + return Long.compare(lhs.container, rhs.container); } }); for (ItemInfo info : allWorkspaceItems) { From f768d934682ba80da89d454543928e629a44103d Mon Sep 17 00:00:00 2001 From: Winson Date: Fri, 25 Sep 2015 16:12:35 -0700 Subject: [PATCH 035/219] Fixing regression in L3 with search bar transition. Change-Id: Ia4155a653012c5d23df21167233fe766e5479347 --- src/com/android/launcher3/Launcher.java | 6 ++- .../LauncherStateTransitionAnimation.java | 39 ++++++++++--------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 84e6b997ac..e97f0172fa 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -3571,8 +3571,12 @@ public class Launcher extends Activity // NO-OP } + public boolean launcherCallbacksProvidesSearch() { + return (mLauncherCallbacks != null && mLauncherCallbacks.providesSearch()); + } + public View getOrCreateQsbBar() { - if (mLauncherCallbacks != null && mLauncherCallbacks.providesSearch()) { + if (launcherCallbacksProvidesSearch()) { return mLauncherCallbacks.getQsbBar(); } diff --git a/src/com/android/launcher3/LauncherStateTransitionAnimation.java b/src/com/android/launcher3/LauncherStateTransitionAnimation.java index cdde8c13fa..5b8af97585 100644 --- a/src/com/android/launcher3/LauncherStateTransitionAnimation.java +++ b/src/com/android/launcher3/LauncherStateTransitionAnimation.java @@ -710,26 +710,27 @@ public class LauncherStateTransitionAnimation { toWorkspaceState.getSearchDropTargetBarState(); if (overlaySearchBar != null) { - if ((toWorkspaceState == Workspace.State.NORMAL) && - (fromWorkspaceState == Workspace.State.NORMAL_HIDDEN)) { - // If we are transitioning from the overlay to the workspace, then show the - // workspace search bar immediately and let the overlay search bar fade out on top - mLauncher.getSearchDropTargetBar().animateToState(toSearchBarState, 0); - } else if (fromWorkspaceState == Workspace.State.NORMAL) { - // If we are transitioning from the workspace to the overlay, then keep the - // workspace search bar visible until the overlay search bar fades in on top - animation.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - mLauncher.getSearchDropTargetBar().animateToState(toSearchBarState, 0); - } - }); - } else { - // Otherwise, then just animate the workspace search bar normally - mLauncher.getSearchDropTargetBar().animateToState(toSearchBarState, duration); + if (mLauncher.launcherCallbacksProvidesSearch()) { + if ((toWorkspaceState == Workspace.State.NORMAL) && + (fromWorkspaceState == Workspace.State.NORMAL_HIDDEN)) { + // If we are transitioning from the overlay to the workspace, then show the + // workspace search bar immediately and let the overlay search bar fade out on + // top + mLauncher.getSearchDropTargetBar().animateToState(toSearchBarState, 0); + return; + } else if (fromWorkspaceState == Workspace.State.NORMAL) { + // If we are transitioning from the workspace to the overlay, then keep the + // workspace search bar visible until the overlay search bar fades in on top + animation.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mLauncher.getSearchDropTargetBar().animateToState(toSearchBarState, 0); + } + }); + return; + } } - } else { - // If there is no overlay search bar, then just animate the workspace search bar + // Fallback to the default search bar animation otherwise mLauncher.getSearchDropTargetBar().animateToState(toSearchBarState, duration); } } From de9590be4ca2779ae0f7f64a48ac8b90472484f8 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 23 Sep 2015 12:56:51 -0700 Subject: [PATCH 036/219] Adding null check when creating icon bitmap Bug: 24299267 Change-Id: I596e4a8dbd4e45cffff75e6cf7bbbf7ec45c8ec9 --- src/com/android/launcher3/Utilities.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index acc8090896..6521f15b21 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -208,7 +208,7 @@ public final class Utilities { // Ensure the bitmap has a density. BitmapDrawable bitmapDrawable = (BitmapDrawable) icon; Bitmap bitmap = bitmapDrawable.getBitmap(); - if (bitmap.getDensity() == Bitmap.DENSITY_NONE) { + if (bitmap != null && bitmap.getDensity() == Bitmap.DENSITY_NONE) { bitmapDrawable.setTargetDensity(context.getResources().getDisplayMetrics()); } } From bf1a98f59692e3261a7474078594980ce0c0c35b Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 28 Sep 2015 11:33:36 -0700 Subject: [PATCH 037/219] Adding size check when generating holographic outline Bug: 24426913 Change-Id: Ic7c9c767ea60ae4b25e064127105d94104233596 --- src/com/android/launcher3/HolographicOutlineHelper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/android/launcher3/HolographicOutlineHelper.java b/src/com/android/launcher3/HolographicOutlineHelper.java index 5ff85d664c..0d68e33b49 100644 --- a/src/com/android/launcher3/HolographicOutlineHelper.java +++ b/src/com/android/launcher3/HolographicOutlineHelper.java @@ -164,6 +164,9 @@ public class HolographicOutlineHelper { int bitmapWidth = (int) (rect.width() * view.getScaleX()); int bitmapHeight = (int) (rect.height() * view.getScaleY()); + if (bitmapHeight <= 0 || bitmapWidth <= 0) { + return null; + } int key = (bitmapWidth << 16) | bitmapHeight; Bitmap cache = mBitmapCache.get(key); From c088049113c261331b5685e64050d14a31cd72df Mon Sep 17 00:00:00 2001 From: Winson Date: Fri, 21 Aug 2015 11:16:27 -0700 Subject: [PATCH 038/219] Highlighting sectioned apps on fast-scroll. - This CL fixes an old assumption we had about the height of rows in AllApps, and ensures that we account for the difference in height between the predictive icons and the normal icons. - In addition, we refactor FastBitmapDrawable to have multiple states, which it manages in drawing itself, including the press state and fast scroll focus states. And we also refactor some of the fast scroll logic in the all apps recycler view out to its own class. Change-Id: I1988159b2767df733bbbfc7dc601859cde6c9943 --- proguard.flags | 11 +- .../android/launcher3/BaseRecyclerView.java | 71 ++-- .../BaseRecyclerViewFastScrollBar.java | 11 +- .../BaseRecyclerViewFastScrollPopup.java | 12 +- src/com/android/launcher3/BubbleTextView.java | 133 ++++---- .../android/launcher3/FastBitmapDrawable.java | 307 +++++++++++++----- src/com/android/launcher3/FolderIcon.java | 10 +- src/com/android/launcher3/Launcher.java | 13 + .../launcher3/PendingAppWidgetHostView.java | 2 +- .../launcher3/PreloadIconDrawable.java | 3 +- .../allapps/AllAppsContainerView.java | 14 + .../allapps/AllAppsFastScrollHelper.java | 228 +++++++++++++ .../launcher3/allapps/AllAppsGridAdapter.java | 21 ++ .../allapps/AllAppsRecyclerView.java | 190 +++-------- .../launcher3/widget/WidgetsRecyclerView.java | 23 +- 15 files changed, 688 insertions(+), 361 deletions(-) create mode 100644 src/com/android/launcher3/allapps/AllAppsFastScrollHelper.java diff --git a/proguard.flags b/proguard.flags index 5a3dfd1797..772580020d 100644 --- a/proguard.flags +++ b/proguard.flags @@ -19,11 +19,6 @@ public float getAlpha(); } --keep class com.android.launcher3.BubbleTextView { - public void setFastScrollFocus(float); - public float getFastScrollFocus(); -} - -keep class com.android.launcher3.ButtonDropTarget { public int getTextColor(); } @@ -56,8 +51,10 @@ } -keep class com.android.launcher3.FastBitmapDrawable { - public int getBrightness(); - public void setBrightness(int); + public void setDesaturation(float); + public float getDesaturation(); + public void setBrightness(float); + public float getBrightness(); } -keep class com.android.launcher3.MemoryDumpActivity { diff --git a/src/com/android/launcher3/BaseRecyclerView.java b/src/com/android/launcher3/BaseRecyclerView.java index 9d713e338e..f8ef1e1560 100644 --- a/src/com/android/launcher3/BaseRecyclerView.java +++ b/src/com/android/launcher3/BaseRecyclerView.java @@ -52,8 +52,8 @@ public abstract class BaseRecyclerView extends RecyclerView public int rowIndex; // The offset of the first visible row public int rowTopOffset; - // The height of a given row (they are currently all the same height) - public int rowHeight; + // The adapter position of the first visible item + public int itemPos; } protected BaseRecyclerViewFastScrollBar mScrollbar; @@ -186,16 +186,22 @@ public abstract class BaseRecyclerView extends RecyclerView return mScrollbar.getThumbMaxWidth(); } + /** + * Returns the visible height of the recycler view: + * VisibleHeight = View height - top padding - bottom padding + */ + protected int getVisibleHeight() { + int visibleHeight = getHeight() - mBackgroundPadding.top - mBackgroundPadding.bottom; + return visibleHeight; + } + /** * Returns the available scroll height: * AvailableScrollHeight = Total height of the all items - last page height - * - * This assumes that all rows are the same height. */ - protected int getAvailableScrollHeight(int rowCount, int rowHeight) { - int visibleHeight = getHeight() - mBackgroundPadding.top - mBackgroundPadding.bottom; - int scrollHeight = getPaddingTop() + rowCount * rowHeight + getPaddingBottom(); - int availableScrollHeight = scrollHeight - visibleHeight; + protected int getAvailableScrollHeight(int rowCount) { + int totalHeight = getPaddingTop() + getTop(rowCount) + getPaddingBottom(); + int availableScrollHeight = totalHeight - getVisibleHeight(); return availableScrollHeight; } @@ -204,8 +210,7 @@ public abstract class BaseRecyclerView extends RecyclerView * AvailableScrollBarHeight = Total height of the visible view - thumb height */ protected int getAvailableScrollBarHeight() { - int visibleHeight = getHeight() - mBackgroundPadding.top - mBackgroundPadding.bottom; - int availableScrollBarHeight = visibleHeight - mScrollbar.getThumbHeight(); + int availableScrollBarHeight = getVisibleHeight() - mScrollbar.getThumbHeight(); return availableScrollBarHeight; } @@ -223,6 +228,13 @@ public abstract class BaseRecyclerView extends RecyclerView return defaultInactiveThumbColor; } + /** + * Returns the scrollbar for this recycler view. + */ + public BaseRecyclerViewFastScrollBar getScrollBar() { + return mScrollbar; + } + @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); @@ -243,7 +255,7 @@ public abstract class BaseRecyclerView extends RecyclerView int rowCount) { // Only show the scrollbar if there is height to be scrolled int availableScrollBarHeight = getAvailableScrollBarHeight(); - int availableScrollHeight = getAvailableScrollHeight(rowCount, scrollPosState.rowHeight); + int availableScrollHeight = getAvailableScrollHeight(rowCount); if (availableScrollHeight <= 0) { mScrollbar.setThumbOffset(-1, -1); return; @@ -252,8 +264,7 @@ public abstract class BaseRecyclerView extends RecyclerView // Calculate the current scroll position, the scrollY of the recycler view accounts for the // view padding, while the scrollBarY is drawn right up to the background padding (ignoring // padding) - int scrollY = getPaddingTop() + - (scrollPosState.rowIndex * scrollPosState.rowHeight) - scrollPosState.rowTopOffset; + int scrollY = getScrollTop(scrollPosState); int scrollBarY = mBackgroundPadding.top + (int) (((float) scrollY / availableScrollHeight) * availableScrollBarHeight); @@ -268,7 +279,7 @@ public abstract class BaseRecyclerView extends RecyclerView } /** - * Returns whether fast scrolling is supported in the current state. + * @return whether fast scrolling is supported in the current state. */ protected boolean supportsFastScrolling() { return true; @@ -277,22 +288,38 @@ public abstract class BaseRecyclerView extends RecyclerView /** * Maps the touch (from 0..1) to the adapter position that should be visible. *

    Override in each subclass of this base class. + * + * @return the scroll top of this recycler view. */ - public abstract String scrollToPositionAtProgress(float touchFraction); + protected int getScrollTop(ScrollPositionState scrollPosState) { + return getPaddingTop() + getTop(scrollPosState.rowIndex) - + scrollPosState.rowTopOffset; + } + + /** + * Returns information about the item that the recycler view is currently scrolled to. + */ + protected abstract void getCurScrollState(ScrollPositionState stateOut, int viewTypeMask); + + /** + * Returns the top (or y position) of the row at the specified index. + */ + protected abstract int getTop(int rowIndex); + + /** + * Maps the touch (from 0..1) to the adapter position that should be visible. + *

    Override in each subclass of this base class. + */ + protected abstract String scrollToPositionAtProgress(float touchFraction); /** * Updates the bounds for the scrollbar. *

    Override in each subclass of this base class. */ - public abstract void onUpdateScrollbar(int dy); + protected abstract void onUpdateScrollbar(int dy); /** *

    Override in each subclass of this base class. */ - public void onFastScrollCompleted() {} - - /** - * Returns information about the item that the recycler view is currently scrolled to. - */ - protected abstract void getCurScrollState(ScrollPositionState stateOut); + protected void onFastScrollCompleted() {} } \ No newline at end of file diff --git a/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java b/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java index 32ea576671..a6801696a6 100644 --- a/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java +++ b/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java @@ -27,6 +27,7 @@ import android.graphics.Path; import android.graphics.Point; import android.graphics.Rect; import android.view.MotionEvent; +import android.view.VelocityTracker; import android.view.ViewConfiguration; import com.android.launcher3.util.Thunk; @@ -37,7 +38,7 @@ import com.android.launcher3.util.Thunk; public class BaseRecyclerViewFastScrollBar { public interface FastScrollFocusableView { - void setFastScrollFocused(boolean focused, boolean animated); + void setFastScrollFocusState(final FastBitmapDrawable.State focusState, boolean animated); } private final static int MAX_TRACK_ALPHA = 30; @@ -199,7 +200,7 @@ public class BaseRecyclerViewFastScrollBar { } mTouchOffset += (lastY - downY); mPopup.animateVisibility(true); - animateScrollbar(true); + showActiveScrollbar(true); } if (mIsDragging) { // Update the fastscroller section name at this touch position @@ -210,7 +211,7 @@ public class BaseRecyclerViewFastScrollBar { (bottom - top)); mPopup.setSectionName(sectionName); mPopup.animateVisibility(!sectionName.isEmpty()); - mRv.invalidate(mPopup.updateFastScrollerBounds(mRv, lastY)); + mRv.invalidate(mPopup.updateFastScrollerBounds(lastY)); mLastTouchY = boundedY; } break; @@ -222,7 +223,7 @@ public class BaseRecyclerViewFastScrollBar { if (mIsDragging) { mIsDragging = false; mPopup.animateVisibility(false); - animateScrollbar(false); + showActiveScrollbar(false); } break; } @@ -246,7 +247,7 @@ public class BaseRecyclerViewFastScrollBar { /** * Animates the width and color of the scrollbar. */ - private void animateScrollbar(boolean isScrolling) { + private void showActiveScrollbar(boolean isScrolling) { if (mScrollbarAnimator != null) { mScrollbarAnimator.cancel(); } diff --git a/src/com/android/launcher3/BaseRecyclerViewFastScrollPopup.java b/src/com/android/launcher3/BaseRecyclerViewFastScrollPopup.java index aeeb5156da..ebaba18805 100644 --- a/src/com/android/launcher3/BaseRecyclerViewFastScrollPopup.java +++ b/src/com/android/launcher3/BaseRecyclerViewFastScrollPopup.java @@ -77,26 +77,26 @@ public class BaseRecyclerViewFastScrollPopup { * Updates the bounds for the fast scroller. * @return the invalidation rect for this update. */ - public Rect updateFastScrollerBounds(BaseRecyclerView rv, int lastTouchY) { + public Rect updateFastScrollerBounds(int lastTouchY) { mInvalidateRect.set(mBgBounds); if (isVisible()) { // Calculate the dimensions and position of the fast scroller popup - int edgePadding = rv.getMaxScrollbarWidth(); + int edgePadding = mRv.getMaxScrollbarWidth(); int bgPadding = (mBgOriginalSize - mTextBounds.height()) / 2; int bgHeight = mBgOriginalSize; int bgWidth = Math.max(mBgOriginalSize, mTextBounds.width() + (2 * bgPadding)); if (Utilities.isRtl(mRes)) { - mBgBounds.left = rv.getBackgroundPadding().left + (2 * rv.getMaxScrollbarWidth()); + mBgBounds.left = mRv.getBackgroundPadding().left + (2 * mRv.getMaxScrollbarWidth()); mBgBounds.right = mBgBounds.left + bgWidth; } else { - mBgBounds.right = rv.getWidth() - rv.getBackgroundPadding().right - - (2 * rv.getMaxScrollbarWidth()); + mBgBounds.right = mRv.getWidth() - mRv.getBackgroundPadding().right - + (2 * mRv.getMaxScrollbarWidth()); mBgBounds.left = mBgBounds.right - bgWidth; } mBgBounds.top = lastTouchY - (int) (FAST_SCROLL_OVERLAY_Y_OFFSET_FACTOR * bgHeight); mBgBounds.top = Math.max(edgePadding, - Math.min(mBgBounds.top, rv.getHeight() - edgePadding - bgHeight)); + Math.min(mBgBounds.top, mRv.getHeight() - edgePadding - bgHeight)); mBgBounds.bottom = mBgBounds.top + bgHeight; } else { mBgBounds.setEmpty(); diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index 5070878244..0742b0e50f 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -16,7 +16,6 @@ package com.android.launcher3; -import android.animation.ObjectAnimator; import android.annotation.TargetApi; import android.content.Context; import android.content.res.ColorStateList; @@ -25,7 +24,6 @@ import android.content.res.Resources.Theme; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; -import android.graphics.Paint; import android.graphics.Region; import android.graphics.drawable.Drawable; import android.os.Build; @@ -37,8 +35,6 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewParent; -import android.view.animation.AccelerateInterpolator; -import android.view.animation.DecelerateInterpolator; import android.widget.TextView; import com.android.launcher3.IconCache.IconLoadRequest; @@ -63,13 +59,6 @@ public class BubbleTextView extends TextView private static final int DISPLAY_WORKSPACE = 0; private static final int DISPLAY_ALL_APPS = 1; - private static final float FAST_SCROLL_FOCUS_MAX_SCALE = 1.15f; - private static final int FAST_SCROLL_FOCUS_MODE_NONE = 0; - private static final int FAST_SCROLL_FOCUS_MODE_SCALE_ICON = 1; - private static final int FAST_SCROLL_FOCUS_MODE_DRAW_CIRCLE_BG = 2; - private static final int FAST_SCROLL_FOCUS_FADE_IN_DURATION = 175; - private static final int FAST_SCROLL_FOCUS_FADE_OUT_DURATION = 125; - private final Launcher mLauncher; private Drawable mIcon; private final Drawable mBackground; @@ -93,12 +82,6 @@ public class BubbleTextView extends TextView private boolean mIgnorePressedStateChange; private boolean mDisableRelayout = false; - private ObjectAnimator mFastScrollFocusAnimator; - private Paint mFastScrollFocusBgPaint; - private float mFastScrollFocusFraction; - private boolean mFastScrollFocused; - private final int mFastScrollMode = FAST_SCROLL_FOCUS_MODE_SCALE_ICON; - private IconLoadRequest mIconLoadRequest; public BubbleTextView(Context context) { @@ -151,13 +134,6 @@ public class BubbleTextView extends TextView setShadowLayer(SHADOW_LARGE_RADIUS, 0.0f, SHADOW_Y_OFFSET, SHADOW_LARGE_COLOUR); } - if (mFastScrollMode == FAST_SCROLL_FOCUS_MODE_DRAW_CIRCLE_BG) { - mFastScrollFocusBgPaint = new Paint(); - mFastScrollFocusBgPaint.setAntiAlias(true); - mFastScrollFocusBgPaint.setColor( - getResources().getColor(R.color.container_fastscroll_thumb_active_color)); - } - setAccessibilityDelegate(LauncherAppState.getInstance().getAccessibilityDelegate()); } @@ -170,8 +146,9 @@ public class BubbleTextView extends TextView Bitmap b = info.getIcon(iconCache); FastBitmapDrawable iconDrawable = mLauncher.createIconDrawable(b); - iconDrawable.setGhostModeEnabled(info.isDisabled != 0); - + if (info.isDisabled != 0) { + iconDrawable.setState(FastBitmapDrawable.State.DISABLED); + } setIcon(iconDrawable, mIconSize); if (info.contentDescription != null) { setContentDescription(info.contentDescription); @@ -259,7 +236,12 @@ public class BubbleTextView extends TextView private void updateIconState() { if (mIcon instanceof FastBitmapDrawable) { - ((FastBitmapDrawable) mIcon).setPressed(isPressed() || mStayPressed); + FastBitmapDrawable d = (FastBitmapDrawable) mIcon; + if (isPressed() || mStayPressed) { + d.animateState(FastBitmapDrawable.State.PRESSED); + } else { + d.animateState(FastBitmapDrawable.State.NORMAL); + } } } @@ -362,18 +344,7 @@ public class BubbleTextView extends TextView @Override public void draw(Canvas canvas) { if (!mCustomShadowsEnabled) { - // Draw the fast scroll focus bg if we have one - if (mFastScrollMode == FAST_SCROLL_FOCUS_MODE_DRAW_CIRCLE_BG && - mFastScrollFocusFraction > 0f) { - DeviceProfile grid = mLauncher.getDeviceProfile(); - int iconCenterX = getScrollX() + (getWidth() / 2); - int iconCenterY = getScrollY() + getPaddingTop() + (grid.iconSizePx / 2); - canvas.drawCircle(iconCenterX, iconCenterY, - mFastScrollFocusFraction * (getWidth() / 2), mFastScrollFocusBgPaint); - } - super.draw(canvas); - return; } @@ -533,8 +504,13 @@ public class BubbleTextView extends TextView */ public void reapplyItemInfo(final ItemInfo info) { if (getTag() == info) { + FastBitmapDrawable.State prevState = FastBitmapDrawable.State.NORMAL; + if (mIcon instanceof FastBitmapDrawable) { + prevState = ((FastBitmapDrawable) mIcon).getCurrentState(); + } mIconLoadRequest = null; mDisableRelayout = true; + if (info instanceof AppInfo) { applyFromApplicationInfo((AppInfo) info); } else if (info instanceof ShortcutInfo) { @@ -550,6 +526,13 @@ public class BubbleTextView extends TextView } else if (info instanceof PackageItemInfo) { applyFromPackageItemInfo((PackageItemInfo) info); } + + // If we are reapplying over an old icon, then we should update the new icon to the same + // state as the old icon + if (mIcon instanceof FastBitmapDrawable) { + ((FastBitmapDrawable) mIcon).setState(prevState); + } + mDisableRelayout = false; } } @@ -583,55 +566,53 @@ public class BubbleTextView extends TextView } } - // Setters & getters for the animation - public void setFastScrollFocus(float fraction) { - mFastScrollFocusFraction = fraction; - if (mFastScrollMode == FAST_SCROLL_FOCUS_MODE_SCALE_ICON) { - setScaleX(1f + fraction * (FAST_SCROLL_FOCUS_MAX_SCALE - 1f)); - setScaleY(1f + fraction * (FAST_SCROLL_FOCUS_MAX_SCALE - 1f)); - } else { - invalidate(); - } - } - - public float getFastScrollFocus() { - return mFastScrollFocusFraction; - } - @Override - public void setFastScrollFocused(final boolean focused, boolean animated) { - if (mFastScrollMode == FAST_SCROLL_FOCUS_MODE_NONE) { + public void setFastScrollFocusState(final FastBitmapDrawable.State focusState, boolean animated) { + // We can only set the fast scroll focus state on a FastBitmapDrawable + if (!(mIcon instanceof FastBitmapDrawable)) { return; } - if (mFastScrollFocused != focused) { - mFastScrollFocused = focused; - - if (animated) { - // Clean up the previous focus animator - if (mFastScrollFocusAnimator != null) { - mFastScrollFocusAnimator.cancel(); - } - mFastScrollFocusAnimator = ObjectAnimator.ofFloat(this, "fastScrollFocus", - focused ? 1f : 0f); - if (focused) { - mFastScrollFocusAnimator.setInterpolator(new DecelerateInterpolator()); - } else { - mFastScrollFocusAnimator.setInterpolator(new AccelerateInterpolator()); - } - mFastScrollFocusAnimator.setDuration(focused ? - FAST_SCROLL_FOCUS_FADE_IN_DURATION : FAST_SCROLL_FOCUS_FADE_OUT_DURATION); - mFastScrollFocusAnimator.start(); - } else { - mFastScrollFocusFraction = focused ? 1f : 0f; + FastBitmapDrawable d = (FastBitmapDrawable) mIcon; + if (animated) { + FastBitmapDrawable.State prevState = d.getCurrentState(); + if (d.animateState(focusState)) { + // If the state was updated, then update the view accordingly + animate().scaleX(focusState.viewScale) + .scaleY(focusState.viewScale) + .setStartDelay(getStartDelayForStateChange(prevState, focusState)) + .setDuration(d.getDurationForStateChange(prevState, focusState)) + .start(); + } + } else { + if (d.setState(focusState)) { + // If the state was updated, then update the view accordingly + animate().cancel(); + setScaleX(focusState.viewScale); + setScaleY(focusState.viewScale); } } } + /** + * Returns the start delay when animating between certain {@link FastBitmapDrawable} states. + */ + private static int getStartDelayForStateChange(final FastBitmapDrawable.State fromState, + final FastBitmapDrawable.State toState) { + switch (toState) { + case NORMAL: + switch (fromState) { + case FAST_SCROLL_HIGHLIGHTED: + return FastBitmapDrawable.FAST_SCROLL_INACTIVE_DURATION / 4; + } + } + return 0; + } + /** * Interface to be implemented by the grand parent to allow click shadow effect. */ - public static interface BubbleTextShadowHandler { + public interface BubbleTextShadowHandler { void setPressedIcon(BubbleTextView icon, Bitmap background); } } diff --git a/src/com/android/launcher3/FastBitmapDrawable.java b/src/com/android/launcher3/FastBitmapDrawable.java index 28e923e67a..30bc7eaa9a 100644 --- a/src/com/android/launcher3/FastBitmapDrawable.java +++ b/src/com/android/launcher3/FastBitmapDrawable.java @@ -16,6 +16,7 @@ package com.android.launcher3; +import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.TimeInterpolator; import android.graphics.Bitmap; @@ -28,13 +29,40 @@ import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; -import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.SparseArray; +import android.view.animation.DecelerateInterpolator; public class FastBitmapDrawable extends Drawable { - static final TimeInterpolator CLICK_FEEDBACK_INTERPOLATOR = new TimeInterpolator() { + /** + * The possible states that a FastBitmapDrawable can be in. + */ + public enum State { + + NORMAL (0f, 0f, 1f, new DecelerateInterpolator()), + PRESSED (0f, 100f / 255f, 1f, CLICK_FEEDBACK_INTERPOLATOR), + FAST_SCROLL_HIGHLIGHTED (0f, 0f, 1.1f, new DecelerateInterpolator()), + FAST_SCROLL_UNHIGHLIGHTED (0.8f, 0.35f, 1f, new DecelerateInterpolator()), + DISABLED (1f, 0.5f, 1f, new DecelerateInterpolator()); + + public final float desaturation; + public final float brightness; + /** + * Used specifically by the view drawing this FastBitmapDrawable. + */ + public final float viewScale; + public final TimeInterpolator interpolator; + + State(float desaturation, float brightness, float viewScale, TimeInterpolator interpolator) { + this.desaturation = desaturation; + this.brightness = brightness; + this.viewScale = viewScale; + this.interpolator = interpolator; + } + } + + public static final TimeInterpolator CLICK_FEEDBACK_INTERPOLATOR = new TimeInterpolator() { @Override public float getInterpolation(float input) { @@ -47,42 +75,46 @@ public class FastBitmapDrawable extends Drawable { } } }; - static final long CLICK_FEEDBACK_DURATION = 2000; + public static final int CLICK_FEEDBACK_DURATION = 2000; + public static final int FAST_SCROLL_HIGHLIGHT_DURATION = 225; + public static final int FAST_SCROLL_UNHIGHLIGHT_DURATION = 150; + public static final int FAST_SCROLL_UNHIGHLIGHT_FROM_NORMAL_DURATION = 225; + public static final int FAST_SCROLL_INACTIVE_DURATION = 275; - private static final int PRESSED_BRIGHTNESS = 100; - private static ColorMatrix sGhostModeMatrix; - private static final ColorMatrix sTempMatrix = new ColorMatrix(); + // Since we don't need 256^2 values for combinations of both the brightness and saturation, we + // reduce the value space to a smaller value V, which reduces the number of cached + // ColorMatrixColorFilters that we need to keep to V^2 + private static final int REDUCED_FILTER_VALUE_SPACE = 48; - /** - * Store the brightness colors filters to optimize animations during icon press. This - * only works for non-ghost-mode icons. - */ - private static final SparseArray sCachedBrightnessFilter = - new SparseArray(); + // A cache of ColorFilters for optimizing brightness and saturation animations + private static final SparseArray sCachedFilter = new SparseArray<>(); - private static final int GHOST_MODE_MIN_COLOR_RANGE = 130; + // Temporary matrices used for calculation + private static final ColorMatrix sTempBrightnessMatrix = new ColorMatrix(); + private static final ColorMatrix sTempFilterMatrix = new ColorMatrix(); private final Paint mPaint = new Paint(Paint.FILTER_BITMAP_FLAG); private final Bitmap mBitmap; - private int mAlpha; + private State mState = State.NORMAL; + // The saturation and brightness are values that are mapped to REDUCED_FILTER_VALUE_SPACE and + // as a result, can be used to compose the key for the cached ColorMatrixColorFilters + private int mDesaturation = 0; private int mBrightness = 0; - private boolean mGhostModeEnabled = false; + private int mAlpha = 255; + private int mPrevUpdateKey = Integer.MAX_VALUE; - private boolean mPressed = false; - private ObjectAnimator mPressedAnimator; + // Animators for the fast bitmap drawable's properties + private AnimatorSet mPropertyAnimator; public FastBitmapDrawable(Bitmap b) { - mAlpha = 255; mBitmap = b; setBounds(0, 0, b.getWidth(), b.getHeight()); } @Override public void draw(Canvas canvas) { - final Rect r = getBounds(); - // Draw the bitmap into the bounding rect - canvas.drawBitmap(mBitmap, null, r, mPaint); + canvas.drawBitmap(mBitmap, null, getBounds(), mPaint); } @Override @@ -136,96 +168,191 @@ public class FastBitmapDrawable extends Drawable { } /** - * When enabled, the icon is grayed out and the contrast is increased to give it a 'ghost' - * appearance. + * Animates this drawable to a new state. + * + * @return whether the state has changed. */ - public void setGhostModeEnabled(boolean enabled) { - if (mGhostModeEnabled != enabled) { - mGhostModeEnabled = enabled; + public boolean animateState(State newState) { + State prevState = mState; + if (mState != newState) { + mState = newState; + + mPropertyAnimator = cancelAnimator(mPropertyAnimator); + mPropertyAnimator = new AnimatorSet(); + mPropertyAnimator.playTogether( + ObjectAnimator + .ofFloat(this, "desaturation", newState.desaturation), + ObjectAnimator + .ofFloat(this, "brightness", newState.brightness)); + mPropertyAnimator.setInterpolator(newState.interpolator); + mPropertyAnimator.setDuration(getDurationForStateChange(prevState, newState)); + mPropertyAnimator.setStartDelay(getStartDelayForStateChange(prevState, newState)); + mPropertyAnimator.start(); + return true; + } + return false; + } + + /** + * Immediately sets this drawable to a new state. + * + * @return whether the state has changed. + */ + public boolean setState(State newState) { + if (mState != newState) { + mState = newState; + + mPropertyAnimator = cancelAnimator(mPropertyAnimator); + + setDesaturation(newState.desaturation); + setBrightness(newState.brightness); + return true; + } + return false; + } + + /** + * Returns the current state. + */ + public State getCurrentState() { + return mState; + } + + /** + * Returns the duration for the state change animation. + */ + public static int getDurationForStateChange(State fromState, State toState) { + switch (toState) { + case NORMAL: + switch (fromState) { + case PRESSED: + return 0; + case FAST_SCROLL_HIGHLIGHTED: + case FAST_SCROLL_UNHIGHLIGHTED: + return FAST_SCROLL_INACTIVE_DURATION; + } + case PRESSED: + return CLICK_FEEDBACK_DURATION; + case FAST_SCROLL_HIGHLIGHTED: + return FAST_SCROLL_HIGHLIGHT_DURATION; + case FAST_SCROLL_UNHIGHLIGHTED: + switch (fromState) { + case NORMAL: + // When animating from normal state, take a little longer + return FAST_SCROLL_UNHIGHLIGHT_FROM_NORMAL_DURATION; + default: + return FAST_SCROLL_UNHIGHLIGHT_DURATION; + } + } + return 0; + } + + /** + * Returns the start delay when animating between certain fast scroll states. + */ + public static int getStartDelayForStateChange(State fromState, State toState) { + switch (toState) { + case FAST_SCROLL_UNHIGHLIGHTED: + switch (fromState) { + case NORMAL: + return FAST_SCROLL_UNHIGHLIGHT_DURATION / 4; + } + } + return 0; + } + + /** + * Sets the saturation of this icon, 0 [full color] -> 1 [desaturated] + */ + public void setDesaturation(float desaturation) { + int newDesaturation = (int) Math.floor(desaturation * REDUCED_FILTER_VALUE_SPACE); + if (mDesaturation != newDesaturation) { + mDesaturation = newDesaturation; updateFilter(); } } - public void setPressed(boolean pressed) { - if (mPressed != pressed) { - mPressed = pressed; - if (mPressed) { - mPressedAnimator = ObjectAnimator - .ofInt(this, "brightness", PRESSED_BRIGHTNESS) - .setDuration(CLICK_FEEDBACK_DURATION); - mPressedAnimator.setInterpolator(CLICK_FEEDBACK_INTERPOLATOR); - mPressedAnimator.start(); - } else if (mPressedAnimator != null) { - mPressedAnimator.cancel(); - setBrightness(0); - } - } - invalidateSelf(); + public float getDesaturation() { + return (float) mDesaturation / REDUCED_FILTER_VALUE_SPACE; } - public boolean isGhostModeEnabled() { - return mGhostModeEnabled; - } - - public int getBrightness() { - return mBrightness; - } - - public void setBrightness(int brightness) { - if (mBrightness != brightness) { - mBrightness = brightness; + /** + * Sets the brightness of this icon, 0 [no add. brightness] -> 1 [2bright2furious] + */ + public void setBrightness(float brightness) { + int newBrightness = (int) Math.floor(brightness * REDUCED_FILTER_VALUE_SPACE); + if (mBrightness != newBrightness) { + mBrightness = newBrightness; updateFilter(); - invalidateSelf(); } } + public float getBrightness() { + return (float) mBrightness / REDUCED_FILTER_VALUE_SPACE; + } + + /** + * Updates the paint to reflect the current brightness and saturation. + */ private void updateFilter() { - if (mGhostModeEnabled) { - if (sGhostModeMatrix == null) { - sGhostModeMatrix = new ColorMatrix(); - sGhostModeMatrix.setSaturation(0); + boolean usePorterDuffFilter = false; + int key = -1; + if (mDesaturation > 0) { + key = (mDesaturation << 16) | mBrightness; + } else if (mBrightness > 0) { + // Compose a key with a fully saturated icon if we are just animating brightness + key = (1 << 16) | mBrightness; - // For ghost mode, set the color range to [GHOST_MODE_MIN_COLOR_RANGE, 255] - float range = (255 - GHOST_MODE_MIN_COLOR_RANGE) / 255.0f; - sTempMatrix.set(new float[] { - range, 0, 0, 0, GHOST_MODE_MIN_COLOR_RANGE, - 0, range, 0, 0, GHOST_MODE_MIN_COLOR_RANGE, - 0, 0, range, 0, GHOST_MODE_MIN_COLOR_RANGE, - 0, 0, 0, 1, 0 }); - sGhostModeMatrix.preConcat(sTempMatrix); - } + // We found that in L, ColorFilters cause drawing artifacts with shadows baked into + // icons, so just use a PorterDuff filter when we aren't animating saturation + usePorterDuffFilter = true; + } - if (mBrightness == 0) { - mPaint.setColorFilter(new ColorMatrixColorFilter(sGhostModeMatrix)); - } else { - setBrightnessMatrix(sTempMatrix, mBrightness); - sTempMatrix.postConcat(sGhostModeMatrix); - mPaint.setColorFilter(new ColorMatrixColorFilter(sTempMatrix)); - } - } else if (mBrightness != 0) { - ColorFilter filter = sCachedBrightnessFilter.get(mBrightness); + // Debounce multiple updates on the same frame + if (key == mPrevUpdateKey) { + return; + } + mPrevUpdateKey = key; + + if (key != -1) { + ColorFilter filter = sCachedFilter.get(key); if (filter == null) { - filter = new PorterDuffColorFilter(Color.argb(mBrightness, 255, 255, 255), - PorterDuff.Mode.SRC_ATOP); - sCachedBrightnessFilter.put(mBrightness, filter); + float brightnessF = getBrightness(); + int brightnessI = (int) (255 * brightnessF); + if (usePorterDuffFilter) { + filter = new PorterDuffColorFilter(Color.argb(brightnessI, 255, 255, 255), + PorterDuff.Mode.SRC_ATOP); + } else { + float saturationF = 1f - getDesaturation(); + sTempFilterMatrix.setSaturation(saturationF); + if (mBrightness > 0) { + // Brightness: C-new = C-old*(1-amount) + amount + float scale = 1f - brightnessF; + float[] mat = sTempBrightnessMatrix.getArray(); + mat[0] = scale; + mat[6] = scale; + mat[12] = scale; + mat[4] = brightnessI; + mat[9] = brightnessI; + mat[14] = brightnessI; + sTempFilterMatrix.preConcat(sTempBrightnessMatrix); + } + filter = new ColorMatrixColorFilter(sTempFilterMatrix); + } + sCachedFilter.append(key, filter); } mPaint.setColorFilter(filter); } else { mPaint.setColorFilter(null); } + invalidateSelf(); } - private static void setBrightnessMatrix(ColorMatrix matrix, int brightness) { - // Brightness: C-new = C-old*(1-amount) + amount - float scale = 1 - brightness / 255.0f; - matrix.setScale(scale, scale, scale, 1); - float[] array = matrix.getArray(); - - // Add the amount to RGB components of the matrix, as per the above formula. - // Fifth elements in the array correspond to the constant being added to - // red, blue, green, and alpha channel respectively. - array[4] = brightness; - array[9] = brightness; - array[14] = brightness; + private AnimatorSet cancelAnimator(AnimatorSet animator) { + if (animator != null) { + animator.removeAllListeners(); + animator.cancel(); + } + return null; } } diff --git a/src/com/android/launcher3/FolderIcon.java b/src/com/android/launcher3/FolderIcon.java index 8d534d2fef..d7b55b3a2f 100644 --- a/src/com/android/launcher3/FolderIcon.java +++ b/src/com/android/launcher3/FolderIcon.java @@ -520,7 +520,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { } class PreviewItemDrawingParams { - PreviewItemDrawingParams(float transX, float transY, float scale, int overlayAlpha) { + PreviewItemDrawingParams(float transX, float transY, float scale, float overlayAlpha) { this.transX = transX; this.transY = transY; this.scale = scale; @@ -529,7 +529,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { float transX; float transY; float scale; - int overlayAlpha; + float overlayAlpha; Drawable drawable; } @@ -561,7 +561,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { float transY = mAvailableSpaceInPreview - (offset + scaledSize + scaleOffsetCorrection) + getPaddingTop(); float transX = (mAvailableSpaceInPreview - scaledSize) / 2; float totalScale = mBaselineIconScale * scale; - final int overlayAlpha = (int) (80 * (1 - r)); + final float overlayAlpha = (80 * (1 - r)) / 255f; if (params == null) { params = new PreviewItemDrawingParams(transX, transY, totalScale, overlayAlpha); @@ -585,12 +585,12 @@ public class FolderIcon extends FrameLayout implements FolderListener { d.setBounds(0, 0, mIntrinsicIconSize, mIntrinsicIconSize); if (d instanceof FastBitmapDrawable) { FastBitmapDrawable fd = (FastBitmapDrawable) d; - int oldBrightness = fd.getBrightness(); + float oldBrightness = fd.getBrightness(); fd.setBrightness(params.overlayAlpha); d.draw(canvas); fd.setBrightness(oldBrightness); } else { - d.setColorFilter(Color.argb(params.overlayAlpha, 255, 255, 255), + d.setColorFilter(Color.argb((int) (params.overlayAlpha * 255), 255, 255, 255), PorterDuff.Mode.SRC_ATOP); d.draw(canvas); d.clearColorFilter(); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index e97f0172fa..370f695862 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -46,6 +46,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; @@ -4677,6 +4678,18 @@ public class Launcher extends Activity UserHandleCompat.myUserHandle()); } + /** + * Generates a dummy AppInfo for us to use to calculate BubbleTextView sizes. + */ + public AppInfo createDummyAppInfo() { + Intent intent = new Intent(); + intent.setComponent(new ComponentName(this, Launcher.class)); + PackageManager pm = getPackageManager(); + ResolveInfo info = pm.resolveActivity(intent, 0); + return new AppInfo(this, LauncherActivityInfoCompat.fromResolveInfo(info, this), + UserHandleCompat.myUserHandle(), mIconCache); + } + // TODO: This method should be a part of LauncherSearchCallback public void startDrag(View dragView, ItemInfo dragInfo, DragSource source) { dragView.setTag(dragInfo); diff --git a/src/com/android/launcher3/PendingAppWidgetHostView.java b/src/com/android/launcher3/PendingAppWidgetHostView.java index 40eadabd5c..1d7694598a 100644 --- a/src/com/android/launcher3/PendingAppWidgetHostView.java +++ b/src/com/android/launcher3/PendingAppWidgetHostView.java @@ -133,7 +133,7 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView implemen // 3) Setup icon in the center and app icon in the top right corner. if (mDisabledForSafeMode) { FastBitmapDrawable disabledIcon = mLauncher.createIconDrawable(mIcon); - disabledIcon.setGhostModeEnabled(true); + disabledIcon.setState(FastBitmapDrawable.State.DISABLED); mCenterDrawable = disabledIcon; mSettingIconDrawable = null; } else if (isReadyForClickSetup()) { diff --git a/src/com/android/launcher3/PreloadIconDrawable.java b/src/com/android/launcher3/PreloadIconDrawable.java index 45e4b2c4ad..908c8b9e28 100644 --- a/src/com/android/launcher3/PreloadIconDrawable.java +++ b/src/com/android/launcher3/PreloadIconDrawable.java @@ -179,7 +179,8 @@ class PreloadIconDrawable extends Drawable { mPaint.setColor(getIndicatorColor()); } if (mIcon instanceof FastBitmapDrawable) { - ((FastBitmapDrawable) mIcon).setGhostModeEnabled(level <= 0); + ((FastBitmapDrawable) mIcon).setState(level <= 0 ? + FastBitmapDrawable.State.DISABLED : FastBitmapDrawable.State.NORMAL); } invalidateSelf(); diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index 564527e28a..90f1322315 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -28,6 +28,7 @@ import android.text.SpannableStringBuilder; import android.text.method.TextKeyListener; import android.util.AttributeSet; import android.view.KeyEvent; +import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; @@ -35,6 +36,7 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import com.android.launcher3.AppInfo; import com.android.launcher3.BaseContainerView; +import com.android.launcher3.BubbleTextView; import com.android.launcher3.CellLayout; import com.android.launcher3.DeleteDropTarget; import com.android.launcher3.DeviceProfile; @@ -332,6 +334,18 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc mAppsRecyclerView.addItemDecoration(mItemDecoration); } + // Precalculate the prediction icon and normal icon sizes + LayoutInflater layoutInflater = LayoutInflater.from(getContext()); + BubbleTextView icon = (BubbleTextView) layoutInflater.inflate(R.layout.all_apps_icon, this, false); + icon.applyFromApplicationInfo(mLauncher.createDummyAppInfo()); + icon.measure(MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE, MeasureSpec.AT_MOST), + MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE, MeasureSpec.AT_MOST)); + BubbleTextView predIcon = (BubbleTextView) layoutInflater.inflate(R.layout.all_apps_prediction_bar_icon, this, false); + predIcon.applyFromApplicationInfo(mLauncher.createDummyAppInfo()); + predIcon.measure(MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE, MeasureSpec.AT_MOST), + MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE, MeasureSpec.AT_MOST)); + mAppsRecyclerView.setPremeasuredIconHeights(predIcon.getMeasuredHeight(), icon.getMeasuredHeight()); + updateBackgroundAndPaddings(); } diff --git a/src/com/android/launcher3/allapps/AllAppsFastScrollHelper.java b/src/com/android/launcher3/allapps/AllAppsFastScrollHelper.java new file mode 100644 index 0000000000..10453420af --- /dev/null +++ b/src/com/android/launcher3/allapps/AllAppsFastScrollHelper.java @@ -0,0 +1,228 @@ +/* + * Copyright (C) 2015 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.allapps; + +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import com.android.launcher3.BaseRecyclerView; +import com.android.launcher3.BaseRecyclerViewFastScrollBar; +import com.android.launcher3.FastBitmapDrawable; +import com.android.launcher3.util.Thunk; + +import java.util.HashSet; + +public class AllAppsFastScrollHelper implements AllAppsGridAdapter.BindViewCallback { + + private static final int INITIAL_TOUCH_SETTLING_DURATION = 300; + private static final int REPEAT_TOUCH_SETTLING_DURATION = 200; + private static final float FAST_SCROLL_TOUCH_VELOCITY_BARRIER = 1900f; + + private AllAppsRecyclerView mRv; + private AlphabeticalAppsList mApps; + + // Keeps track of the current and targetted fast scroll section (the section to scroll to after + // the initial delay) + int mTargetFastScrollPosition = -1; + @Thunk String mCurrentFastScrollSection; + @Thunk String mTargetFastScrollSection; + + // The settled states affect the delay before the fast scroll animation is applied + private boolean mHasFastScrollTouchSettled; + private boolean mHasFastScrollTouchSettledAtLeastOnce; + + // Set of all views animated during fast scroll. We keep track of these ourselves since there + // is no way to reset a view once it gets scrapped or recycled without other hacks + private HashSet mTrackedFastScrollViews = + new HashSet<>(); + + // Smooth fast-scroll animation frames + @Thunk int mFastScrollFrameIndex; + @Thunk final int[] mFastScrollFrames = new int[10]; + + /** + * This runnable runs a single frame of the smooth scroll animation and posts the next frame + * if necessary. + */ + @Thunk Runnable mSmoothSnapNextFrameRunnable = new Runnable() { + @Override + public void run() { + if (mFastScrollFrameIndex < mFastScrollFrames.length) { + mRv.scrollBy(0, mFastScrollFrames[mFastScrollFrameIndex]); + mFastScrollFrameIndex++; + mRv.postOnAnimation(mSmoothSnapNextFrameRunnable); + } + } + }; + + /** + * This runnable updates the current fast scroll section to the target fastscroll section. + */ + Runnable mFastScrollToTargetSectionRunnable = new Runnable() { + @Override + public void run() { + // Update to the target section + mCurrentFastScrollSection = mTargetFastScrollSection; + mHasFastScrollTouchSettled = true; + mHasFastScrollTouchSettledAtLeastOnce = true; + updateTrackedViewsFastScrollFocusState(); + } + }; + + public AllAppsFastScrollHelper(AllAppsRecyclerView rv, AlphabeticalAppsList apps) { + mRv = rv; + mApps = apps; + } + + public void onSetAdapter(AllAppsGridAdapter adapter) { + adapter.setBindViewCallback(this); + } + + /** + * Smooth scrolls the recycler view to the given section. + * + * @return whether the fastscroller can scroll to the new section. + */ + public boolean smoothScrollToSection(int scrollY, int availableScrollHeight, + AlphabeticalAppsList.FastScrollSectionInfo info) { + if (mTargetFastScrollPosition != info.fastScrollToItem.position) { + mTargetFastScrollPosition = info.fastScrollToItem.position; + smoothSnapToPosition(scrollY, availableScrollHeight, info); + return true; + } + return false; + } + + /** + * Smoothly snaps to a given position. We do this manually by calculating the keyframes + * ourselves and animating the scroll on the recycler view. + */ + private void smoothSnapToPosition(int scrollY, int availableScrollHeight, + AlphabeticalAppsList.FastScrollSectionInfo info) { + mRv.removeCallbacks(mSmoothSnapNextFrameRunnable); + mRv.removeCallbacks(mFastScrollToTargetSectionRunnable); + + trackAllChildViews(); + if (mHasFastScrollTouchSettled) { + // In this case, the user has already settled once (and the fast scroll state has + // animated) and they are just fine-tuning their section from the last section, so + // we should make it feel fast and update immediately. + mCurrentFastScrollSection = info.sectionName; + mTargetFastScrollSection = null; + updateTrackedViewsFastScrollFocusState(); + } else { + // Otherwise, the user has scrubbed really far, and we don't want to distract the user + // with the flashing fast scroll state change animation in addition to the fast scroll + // section popup, so reset the views to normal, and wait for the touch to settle again + // before animating the fast scroll state. + mCurrentFastScrollSection = null; + mTargetFastScrollSection = info.sectionName; + mHasFastScrollTouchSettled = false; + updateTrackedViewsFastScrollFocusState(); + + // Delay scrolling to a new section until after some duration. If the user has been + // scrubbing a while and makes multiple big jumps, then reduce the time needed for the + // fast scroll to settle so it doesn't feel so long. + mRv.postDelayed(mFastScrollToTargetSectionRunnable, + mHasFastScrollTouchSettledAtLeastOnce ? + REPEAT_TOUCH_SETTLING_DURATION : + INITIAL_TOUCH_SETTLING_DURATION); + } + + // Calculate the full animation from the current scroll position to the final scroll + // position, and then run the animation for the duration. + int newScrollY = Math.min(availableScrollHeight, + mRv.getPaddingTop() + mRv.getTop(info.fastScrollToItem.rowIndex)); + int numFrames = mFastScrollFrames.length; + for (int i = 0; i < numFrames; i++) { + // TODO(winsonc): We can interpolate this as well. + mFastScrollFrames[i] = (newScrollY - scrollY) / numFrames; + } + mFastScrollFrameIndex = 0; + mRv.postOnAnimation(mSmoothSnapNextFrameRunnable); + } + + public void onFastScrollCompleted() { + // TODO(winsonc): Handle the case when the user scrolls and releases before the animation + // runs + + // Stop animating the fast scroll position and state + mRv.removeCallbacks(mSmoothSnapNextFrameRunnable); + mRv.removeCallbacks(mFastScrollToTargetSectionRunnable); + + // Reset the tracking variables + mHasFastScrollTouchSettled = false; + mHasFastScrollTouchSettledAtLeastOnce = false; + mCurrentFastScrollSection = null; + mTargetFastScrollSection = null; + mTargetFastScrollPosition = -1; + + updateTrackedViewsFastScrollFocusState(); + mTrackedFastScrollViews.clear(); + } + + @Override + public void onBindView(AllAppsGridAdapter.ViewHolder holder) { + // Update newly bound views to the current fast scroll state if we are fast scrolling + if (mCurrentFastScrollSection != null || mTargetFastScrollSection != null) { + if (holder.mContent instanceof BaseRecyclerViewFastScrollBar.FastScrollFocusableView) { + BaseRecyclerViewFastScrollBar.FastScrollFocusableView v = + (BaseRecyclerViewFastScrollBar.FastScrollFocusableView) holder.mContent; + updateViewFastScrollFocusState(v, holder.getPosition(), false /* animated */); + mTrackedFastScrollViews.add(v); + } + } + } + + /** + * Starts tracking all the recycler view's children which are FastScrollFocusableViews. + */ + private void trackAllChildViews() { + int childCount = mRv.getChildCount(); + for (int i = 0; i < childCount; i++) { + View v = mRv.getChildAt(i); + if (v instanceof BaseRecyclerViewFastScrollBar.FastScrollFocusableView) { + mTrackedFastScrollViews.add((BaseRecyclerViewFastScrollBar.FastScrollFocusableView) v); + } + } + } + + /** + * Updates the fast scroll focus on all the children. + */ + private void updateTrackedViewsFastScrollFocusState() { + for (BaseRecyclerViewFastScrollBar.FastScrollFocusableView v : mTrackedFastScrollViews) { + RecyclerView.ViewHolder viewHolder = mRv.getChildViewHolder((View) v); + int pos = (viewHolder != null) ? viewHolder.getPosition() : -1; + updateViewFastScrollFocusState(v, pos, true); + } + } + + /** + * Updates the fast scroll focus on all a given view. + */ + private void updateViewFastScrollFocusState(BaseRecyclerViewFastScrollBar.FastScrollFocusableView v, + int pos, boolean animated) { + FastBitmapDrawable.State newState = FastBitmapDrawable.State.NORMAL; + if (mCurrentFastScrollSection != null && pos > -1) { + AlphabeticalAppsList.AdapterItem item = mApps.getAdapterItems().get(pos); + newState = item.sectionName.equals(mCurrentFastScrollSection) ? + FastBitmapDrawable.State.FAST_SCROLL_HIGHLIGHTED : + FastBitmapDrawable.State.FAST_SCROLL_UNHIGHLIGHTED; + } + v.setFastScrollFocusState(newState, animated); + } +} diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java index 1f95133d49..99004f2f78 100644 --- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java +++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java @@ -69,6 +69,10 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter fastScrollSections = mApps.getFastScrollerSections(); AlphabeticalAppsList.FastScrollSectionInfo lastInfo = fastScrollSections.get(0); - if (mScrollBarMode == FAST_SCROLL_BAR_MODE_DISTRIBUTE_BY_ROW) { - for (int i = 1; i < fastScrollSections.size(); i++) { - AlphabeticalAppsList.FastScrollSectionInfo info = fastScrollSections.get(i); - if (info.touchFraction > touchFraction) { - break; - } - lastInfo = info; + for (int i = 1; i < fastScrollSections.size(); i++) { + AlphabeticalAppsList.FastScrollSectionInfo info = fastScrollSections.get(i); + if (info.touchFraction > touchFraction) { + break; } - } else if (mScrollBarMode == FAST_SCROLL_BAR_MODE_DISTRIBUTE_BY_SECTIONS){ - lastInfo = fastScrollSections.get((int) (touchFraction * (fastScrollSections.size() - 1))); - } else { - throw new RuntimeException("Unexpected scroll bar mode"); + lastInfo = info; } - // Map the touch position back to the scroll of the recycler view - getCurScrollState(mScrollPosState); - int availableScrollHeight = getAvailableScrollHeight(rowCount, mScrollPosState.rowHeight); - LinearLayoutManager layoutManager = (LinearLayoutManager) getLayoutManager(); - if (mFastScrollMode == FAST_SCROLL_MODE_FREE_SCROLL) { - layoutManager.scrollToPositionWithOffset(0, (int) -(availableScrollHeight * touchFraction)); - } - - if (mPrevFastScrollFocusedPosition != lastInfo.fastScrollToItem.position) { - mPrevFastScrollFocusedPosition = lastInfo.fastScrollToItem.position; - - // Reset the last focused view - if (mLastFastScrollFocusedView != null) { - mLastFastScrollFocusedView.setFastScrollFocused(false, true); - mLastFastScrollFocusedView = null; - } - - if (mFastScrollMode == FAST_SCROLL_MODE_JUMP_TO_FIRST_ICON) { - smoothSnapToPosition(mPrevFastScrollFocusedPosition, mScrollPosState); - } else if (mFastScrollMode == FAST_SCROLL_MODE_FREE_SCROLL) { - final ViewHolder vh = findViewHolderForPosition(mPrevFastScrollFocusedPosition); - if (vh != null && - vh.itemView instanceof BaseRecyclerViewFastScrollBar.FastScrollFocusableView) { - mLastFastScrollFocusedView = - (BaseRecyclerViewFastScrollBar.FastScrollFocusableView) vh.itemView; - mLastFastScrollFocusedView.setFastScrollFocused(true, true); - } - } else { - throw new RuntimeException("Unexpected fast scroll mode"); - } - } + // Update the fast scroll + int scrollY = getScrollTop(mScrollPosState); + int availableScrollHeight = getAvailableScrollHeight(mApps.getNumAppRows()); + mFastScrollHelper.smoothScrollToSection(scrollY, availableScrollHeight, lastInfo); return lastInfo.sectionName; } @Override public void onFastScrollCompleted() { super.onFastScrollCompleted(); - // Reset and clean up the last focused view - if (mLastFastScrollFocusedView != null) { - mLastFastScrollFocusedView.setFastScrollFocused(false, true); - mLastFastScrollFocusedView = null; - } - mPrevFastScrollFocusedPosition = -1; + mFastScrollHelper.onFastScrollCompleted(); + } + + @Override + public void setAdapter(Adapter adapter) { + super.setAdapter(adapter); + mFastScrollHelper.onSetAdapter((AllAppsGridAdapter) adapter); } /** @@ -286,7 +244,7 @@ public class AllAppsRecyclerView extends BaseRecyclerView // Find the index and height of the first visible row (all rows have the same height) int rowCount = mApps.getNumAppRows(); - getCurScrollState(mScrollPosState); + getCurScrollState(mScrollPosState, -1); if (mScrollPosState.rowIndex < 0) { mScrollbar.setThumbOffset(-1, -1); return; @@ -294,7 +252,7 @@ public class AllAppsRecyclerView extends BaseRecyclerView // Only show the scrollbar if there is height to be scrolled int availableScrollBarHeight = getAvailableScrollBarHeight(); - int availableScrollHeight = getAvailableScrollHeight(mApps.getNumAppRows(), mScrollPosState.rowHeight); + int availableScrollHeight = getAvailableScrollHeight(mApps.getNumAppRows()); if (availableScrollHeight <= 0) { mScrollbar.setThumbOffset(-1, -1); return; @@ -303,8 +261,7 @@ public class AllAppsRecyclerView extends BaseRecyclerView // Calculate the current scroll position, the scrollY of the recycler view accounts for the // view padding, while the scrollBarY is drawn right up to the background padding (ignoring // padding) - int scrollY = getPaddingTop() + - (mScrollPosState.rowIndex * mScrollPosState.rowHeight) - mScrollPosState.rowTopOffset; + int scrollY = getScrollTop(mScrollPosState); int scrollBarY = mBackgroundPadding.top + (int) (((float) scrollY / availableScrollHeight) * availableScrollBarHeight); @@ -354,59 +311,13 @@ public class AllAppsRecyclerView extends BaseRecyclerView } } - /** - * This runnable runs a single frame of the smooth scroll animation and posts the next frame - * if necessary. - */ - @Thunk Runnable mSmoothSnapNextFrameRunnable = new Runnable() { - @Override - public void run() { - if (mFastScrollFrameIndex < mFastScrollFrames.length) { - scrollBy(0, mFastScrollFrames[mFastScrollFrameIndex]); - mFastScrollFrameIndex++; - postOnAnimation(mSmoothSnapNextFrameRunnable); - } else { - // Animation completed, set the fast scroll state on the target view - final ViewHolder vh = findViewHolderForPosition(mPrevFastScrollFocusedPosition); - if (vh != null && - vh.itemView instanceof BaseRecyclerViewFastScrollBar.FastScrollFocusableView && - mLastFastScrollFocusedView != vh.itemView) { - mLastFastScrollFocusedView = - (BaseRecyclerViewFastScrollBar.FastScrollFocusableView) vh.itemView; - mLastFastScrollFocusedView.setFastScrollFocused(true, true); - } - } - } - }; - - /** - * Smoothly snaps to a given position. We do this manually by calculating the keyframes - * ourselves and animating the scroll on the recycler view. - */ - private void smoothSnapToPosition(final int position, ScrollPositionState scrollPosState) { - removeCallbacks(mSmoothSnapNextFrameRunnable); - - // Calculate the full animation from the current scroll position to the final scroll - // position, and then run the animation for the duration. - int curScrollY = getPaddingTop() + - (scrollPosState.rowIndex * scrollPosState.rowHeight) - scrollPosState.rowTopOffset; - int newScrollY = getScrollAtPosition(position, scrollPosState.rowHeight); - int numFrames = mFastScrollFrames.length; - for (int i = 0; i < numFrames; i++) { - // TODO(winsonc): We can interpolate this as well. - mFastScrollFrames[i] = (newScrollY - curScrollY) / numFrames; - } - mFastScrollFrameIndex = 0; - postOnAnimation(mSmoothSnapNextFrameRunnable); - } - /** * Returns the current scroll state of the apps rows. */ - protected void getCurScrollState(ScrollPositionState stateOut) { + protected void getCurScrollState(ScrollPositionState stateOut, int viewTypeMask) { stateOut.rowIndex = -1; stateOut.rowTopOffset = -1; - stateOut.rowHeight = -1; + stateOut.itemPos = -1; // Return early if there are no items or we haven't been measured List items = mApps.getAdapterItems(); @@ -420,15 +331,15 @@ public class AllAppsRecyclerView extends BaseRecyclerView int position = getChildPosition(child); if (position != NO_POSITION) { AlphabeticalAppsList.AdapterItem item = items.get(position); - if (item.viewType == AllAppsGridAdapter.ICON_VIEW_TYPE || - item.viewType == AllAppsGridAdapter.PREDICTION_ICON_VIEW_TYPE) { + if ((item.viewType & viewTypeMask) != 0) { stateOut.rowIndex = item.rowIndex; stateOut.rowTopOffset = getLayoutManager().getDecoratedTop(child); - stateOut.rowHeight = child.getHeight(); - break; + stateOut.itemPos = position; + return; } } } + return; } @Override @@ -438,18 +349,13 @@ public class AllAppsRecyclerView extends BaseRecyclerView return !mApps.hasFilter(); } - /** - * Returns the scrollY for the given position in the adapter. - */ - private int getScrollAtPosition(int position, int rowHeight) { - AlphabeticalAppsList.AdapterItem item = mApps.getAdapterItems().get(position); - if (item.viewType == AllAppsGridAdapter.ICON_VIEW_TYPE || - item.viewType == AllAppsGridAdapter.PREDICTION_ICON_VIEW_TYPE) { - int offset = item.rowIndex > 0 ? getPaddingTop() : 0; - return offset + item.rowIndex * rowHeight; - } else { + protected int getTop(int rowIndex) { + if (getChildCount() == 0 || rowIndex <= 0) { return 0; } + + // The prediction bar icons have more padding, so account for that in the row offset + return mPredictionIconHeight + (rowIndex - 1) * mIconHeight; } /** diff --git a/src/com/android/launcher3/widget/WidgetsRecyclerView.java b/src/com/android/launcher3/widget/WidgetsRecyclerView.java index 884bdc4181..fe9c51c447 100644 --- a/src/com/android/launcher3/widget/WidgetsRecyclerView.java +++ b/src/com/android/launcher3/widget/WidgetsRecyclerView.java @@ -102,9 +102,9 @@ public class WidgetsRecyclerView extends BaseRecyclerView { // Stop the scroller if it is scrolling stopScroll(); - getCurScrollState(mScrollPosState); + getCurScrollState(mScrollPosState, -1); float pos = rowCount * touchFraction; - int availableScrollHeight = getAvailableScrollHeight(rowCount, mScrollPosState.rowHeight); + int availableScrollHeight = getAvailableScrollHeight(rowCount); LinearLayoutManager layoutManager = ((LinearLayoutManager) getLayoutManager()); layoutManager.scrollToPositionWithOffset(0, (int) -(availableScrollHeight * touchFraction)); @@ -131,7 +131,7 @@ public class WidgetsRecyclerView extends BaseRecyclerView { } // Skip early if, there no child laid out in the container. - getCurScrollState(mScrollPosState); + getCurScrollState(mScrollPosState, -1); if (mScrollPosState.rowIndex < 0) { mScrollbar.setThumbOffset(-1, -1); return; @@ -143,10 +143,10 @@ public class WidgetsRecyclerView extends BaseRecyclerView { /** * Returns the current scroll state. */ - protected void getCurScrollState(ScrollPositionState stateOut) { + protected void getCurScrollState(ScrollPositionState stateOut, int viewTypeMask) { stateOut.rowIndex = -1; stateOut.rowTopOffset = -1; - stateOut.rowHeight = -1; + stateOut.itemPos = -1; // Skip early if widgets are not bound. if (mWidgets == null) { @@ -163,6 +163,17 @@ public class WidgetsRecyclerView extends BaseRecyclerView { stateOut.rowIndex = position; stateOut.rowTopOffset = getLayoutManager().getDecoratedTop(child); - stateOut.rowHeight = child.getHeight(); + stateOut.itemPos = position; + } + + @Override + protected int getTop(int rowIndex) { + if (getChildCount() == 0) { + return 0; + } + + // All the rows are the same height, return any child height + View child = getChildAt(0); + return child.getMeasuredHeight() * rowIndex; } } \ No newline at end of file From 58ecbe40f6e95d53b74adeeea3fd83a32cea4f38 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Tue, 29 Sep 2015 15:15:53 -0700 Subject: [PATCH 039/219] Flipped widths of Nexus 4 and Nexus 5 in InvariantDeviceProfile. Without this change, Nexus 4 uses the Nexus 5 device profile and vice versa. But because the profiles have exactly the same values, it didn't matter that they were flopped. Change-Id: I3fd788e040feb8de5bb5f5e336acbd4ac995dc0f --- src/com/android/launcher3/InvariantDeviceProfile.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java index ae204c40c3..6881307239 100644 --- a/src/com/android/launcher3/InvariantDeviceProfile.java +++ b/src/com/android/launcher3/InvariantDeviceProfile.java @@ -184,9 +184,9 @@ public class InvariantDeviceProfile { predefinedDeviceProfiles.add(new InvariantDeviceProfile("Nexus S", 296, 491.33f, 4, 4, 4, 4, 4, 48, 13, 5, 48, R.xml.default_workspace_4x4)); predefinedDeviceProfiles.add(new InvariantDeviceProfile("Nexus 4", - 335, 567, 4, 4, 4, 4, 4, DEFAULT_ICON_SIZE_DP, 13, 5, 56, R.xml.default_workspace_4x4)); - predefinedDeviceProfiles.add(new InvariantDeviceProfile("Nexus 5", 359, 567, 4, 4, 4, 4, 4, DEFAULT_ICON_SIZE_DP, 13, 5, 56, R.xml.default_workspace_4x4)); + predefinedDeviceProfiles.add(new InvariantDeviceProfile("Nexus 5", + 335, 567, 4, 4, 4, 4, 4, DEFAULT_ICON_SIZE_DP, 13, 5, 56, R.xml.default_workspace_4x4)); predefinedDeviceProfiles.add(new InvariantDeviceProfile("Large Phone", 406, 694, 5, 5, 4, 4, 4, 64, 14.4f, 5, 56, R.xml.default_workspace_5x5)); // The tablet profile is odd in that the landscape orientation From 46a06da01cded4ba355381be41455f85f85369fa Mon Sep 17 00:00:00 2001 From: Winson Date: Tue, 29 Sep 2015 16:58:02 -0700 Subject: [PATCH 040/219] Fixing other missing cases of truncated sorts. Bug: 24505761 Change-Id: I9b9358e8b134f0c4aac32ac536d9c8a1f0629957 --- src/com/android/launcher3/InvariantDeviceProfile.java | 4 ++-- src/com/android/launcher3/LauncherModel.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java index ae204c40c3..ae430e049b 100644 --- a/src/com/android/launcher3/InvariantDeviceProfile.java +++ b/src/com/android/launcher3/InvariantDeviceProfile.java @@ -252,8 +252,8 @@ public class InvariantDeviceProfile { ArrayList pointsByNearness = points; Collections.sort(pointsByNearness, new Comparator() { public int compare(InvariantDeviceProfile a, InvariantDeviceProfile b) { - return (int) (dist(width, height, a.minWidthDps, a.minHeightDps) - - dist(width, height, b.minWidthDps, b.minHeightDps)); + return Float.compare(dist(width, height, a.minWidthDps, a.minHeightDps), + dist(width, height, b.minWidthDps, b.minHeightDps)); } }); diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index e1cd298e3a..1b0b3a4fd0 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -2469,7 +2469,7 @@ public class LauncherModel extends BroadcastReceiver lhs.cellY * cellCountX + lhs.cellX); long rr = (rhs.container * containerOffset + rhs.screenId * screenOffset + rhs.cellY * cellCountX + rhs.cellX); - return (int) (lr - rr); + return Long.compare(lr, rr); } }); } From 9fa63a3720d5ec33bc5d78f938f7bb91c8fae298 Mon Sep 17 00:00:00 2001 From: Geoff Mendal Date: Wed, 30 Sep 2015 07:12:17 -0700 Subject: [PATCH 041/219] Import translations. DO NOT MERGE Change-Id: I9f55cad49486a35efa5f85b54e894951b3e0964c Auto-generated-cl: translation import --- WallpaperPicker/res/values-af/strings.xml | 1 + WallpaperPicker/res/values-am/strings.xml | 1 + WallpaperPicker/res/values-ar/strings.xml | 1 + WallpaperPicker/res/values-bg/strings.xml | 1 + WallpaperPicker/res/values-bn-rBD/strings.xml | 1 + WallpaperPicker/res/values-ca/strings.xml | 1 + WallpaperPicker/res/values-cs/strings.xml | 1 + WallpaperPicker/res/values-da/strings.xml | 1 + WallpaperPicker/res/values-de/strings.xml | 1 + WallpaperPicker/res/values-el/strings.xml | 1 + WallpaperPicker/res/values-en-rAU/strings.xml | 1 + WallpaperPicker/res/values-en-rGB/strings.xml | 1 + WallpaperPicker/res/values-en-rIN/strings.xml | 1 + WallpaperPicker/res/values-es-rUS/strings.xml | 1 + WallpaperPicker/res/values-es/strings.xml | 1 + WallpaperPicker/res/values-et-rEE/strings.xml | 1 + WallpaperPicker/res/values-eu-rES/strings.xml | 1 + WallpaperPicker/res/values-fa/strings.xml | 1 + WallpaperPicker/res/values-fi/strings.xml | 1 + WallpaperPicker/res/values-fr-rCA/strings.xml | 1 + WallpaperPicker/res/values-fr/strings.xml | 1 + WallpaperPicker/res/values-gl-rES/strings.xml | 1 + WallpaperPicker/res/values-hi/strings.xml | 1 + WallpaperPicker/res/values-hr/strings.xml | 1 + WallpaperPicker/res/values-hu/strings.xml | 1 + WallpaperPicker/res/values-hy-rAM/strings.xml | 1 + WallpaperPicker/res/values-in/strings.xml | 1 + WallpaperPicker/res/values-is-rIS/strings.xml | 1 + WallpaperPicker/res/values-it/strings.xml | 1 + WallpaperPicker/res/values-iw/strings.xml | 1 + WallpaperPicker/res/values-ja/strings.xml | 1 + WallpaperPicker/res/values-ka-rGE/strings.xml | 1 + WallpaperPicker/res/values-kk-rKZ/strings.xml | 1 + WallpaperPicker/res/values-km-rKH/strings.xml | 1 + WallpaperPicker/res/values-kn-rIN/strings.xml | 1 + WallpaperPicker/res/values-ko/strings.xml | 1 + WallpaperPicker/res/values-ky-rKG/strings.xml | 1 + WallpaperPicker/res/values-lo-rLA/strings.xml | 1 + WallpaperPicker/res/values-lt/strings.xml | 1 + WallpaperPicker/res/values-lv/strings.xml | 1 + WallpaperPicker/res/values-mk-rMK/strings.xml | 1 + WallpaperPicker/res/values-ml-rIN/strings.xml | 1 + WallpaperPicker/res/values-mn-rMN/strings.xml | 1 + WallpaperPicker/res/values-mr-rIN/strings.xml | 1 + WallpaperPicker/res/values-ms-rMY/strings.xml | 1 + WallpaperPicker/res/values-my-rMM/strings.xml | 1 + WallpaperPicker/res/values-nb/strings.xml | 1 + WallpaperPicker/res/values-ne-rNP/strings.xml | 1 + WallpaperPicker/res/values-nl/strings.xml | 1 + WallpaperPicker/res/values-pl/strings.xml | 1 + WallpaperPicker/res/values-pt-rPT/strings.xml | 1 + WallpaperPicker/res/values-pt/strings.xml | 1 + WallpaperPicker/res/values-ro/strings.xml | 1 + WallpaperPicker/res/values-ru/strings.xml | 1 + WallpaperPicker/res/values-si-rLK/strings.xml | 1 + WallpaperPicker/res/values-sk/strings.xml | 1 + WallpaperPicker/res/values-sl/strings.xml | 1 + WallpaperPicker/res/values-sr/strings.xml | 1 + WallpaperPicker/res/values-sv/strings.xml | 1 + WallpaperPicker/res/values-sw/strings.xml | 1 + WallpaperPicker/res/values-ta-rIN/strings.xml | 1 + WallpaperPicker/res/values-te-rIN/strings.xml | 1 + WallpaperPicker/res/values-th/strings.xml | 1 + WallpaperPicker/res/values-tl/strings.xml | 1 + WallpaperPicker/res/values-tr/strings.xml | 1 + WallpaperPicker/res/values-uk/strings.xml | 1 + WallpaperPicker/res/values-ur-rPK/strings.xml | 1 + WallpaperPicker/res/values-uz-rUZ/strings.xml | 1 + WallpaperPicker/res/values-vi/strings.xml | 1 + WallpaperPicker/res/values-zh-rCN/strings.xml | 1 + WallpaperPicker/res/values-zh-rHK/strings.xml | 1 + WallpaperPicker/res/values-zh-rTW/strings.xml | 1 + WallpaperPicker/res/values-zu/strings.xml | 1 + res/values-af/strings.xml | 2 ++ res/values-am/strings.xml | 2 ++ res/values-ar/strings.xml | 2 ++ res/values-bg/strings.xml | 2 ++ res/values-bn-rBD/strings.xml | 2 ++ res/values-ca/strings.xml | 2 ++ res/values-cs/strings.xml | 2 ++ res/values-da/strings.xml | 2 ++ res/values-de/strings.xml | 2 ++ res/values-el/strings.xml | 2 ++ res/values-en-rAU/strings.xml | 2 ++ res/values-en-rGB/strings.xml | 2 ++ res/values-en-rIN/strings.xml | 2 ++ res/values-es-rUS/strings.xml | 2 ++ res/values-es/strings.xml | 2 ++ res/values-et-rEE/strings.xml | 2 ++ res/values-eu-rES/strings.xml | 2 ++ res/values-fa/strings.xml | 2 ++ res/values-fi/strings.xml | 2 ++ res/values-fr-rCA/strings.xml | 2 ++ res/values-fr/strings.xml | 2 ++ res/values-gl-rES/strings.xml | 2 ++ res/values-hi/strings.xml | 2 ++ res/values-hr/strings.xml | 2 ++ res/values-hu/strings.xml | 2 ++ res/values-hy-rAM/strings.xml | 2 ++ res/values-in/strings.xml | 2 ++ res/values-is-rIS/strings.xml | 2 ++ res/values-it/strings.xml | 2 ++ res/values-iw/strings.xml | 2 ++ res/values-ja/strings.xml | 2 ++ res/values-ka-rGE/strings.xml | 2 ++ res/values-kk-rKZ/strings.xml | 2 ++ res/values-km-rKH/strings.xml | 2 ++ res/values-kn-rIN/strings.xml | 2 ++ res/values-ko/strings.xml | 2 ++ res/values-ky-rKG/strings.xml | 2 ++ res/values-lo-rLA/strings.xml | 2 ++ res/values-lt/strings.xml | 2 ++ res/values-lv/strings.xml | 2 ++ res/values-mk-rMK/strings.xml | 2 ++ res/values-ml-rIN/strings.xml | 2 ++ res/values-mn-rMN/strings.xml | 2 ++ res/values-mr-rIN/strings.xml | 2 ++ res/values-ms-rMY/strings.xml | 2 ++ res/values-my-rMM/strings.xml | 2 ++ res/values-nb/strings.xml | 2 ++ res/values-ne-rNP/strings.xml | 2 ++ res/values-nl/strings.xml | 8 +++++--- res/values-pl/strings.xml | 2 ++ res/values-pt-rPT/strings.xml | 2 ++ res/values-pt/strings.xml | 2 ++ res/values-ro/strings.xml | 2 ++ res/values-ru/strings.xml | 4 +++- res/values-si-rLK/strings.xml | 2 ++ res/values-sk/strings.xml | 2 ++ res/values-sl/strings.xml | 2 ++ res/values-sr/strings.xml | 2 ++ res/values-sv/strings.xml | 2 ++ res/values-sw/strings.xml | 2 ++ res/values-ta-rIN/strings.xml | 2 ++ res/values-te-rIN/strings.xml | 2 ++ res/values-th/strings.xml | 2 ++ res/values-tl/strings.xml | 2 ++ res/values-tr/strings.xml | 2 ++ res/values-uk/strings.xml | 2 ++ res/values-ur-rPK/strings.xml | 2 ++ res/values-uz-rUZ/strings.xml | 2 ++ res/values-vi/strings.xml | 2 ++ res/values-zh-rCN/strings.xml | 2 ++ res/values-zh-rHK/strings.xml | 2 ++ res/values-zh-rTW/strings.xml | 2 ++ res/values-zu/strings.xml | 2 ++ 146 files changed, 223 insertions(+), 4 deletions(-) diff --git a/WallpaperPicker/res/values-af/strings.xml b/WallpaperPicker/res/values-af/strings.xml index eb816402a7..bc87fe1213 100644 --- a/WallpaperPicker/res/values-af/strings.xml +++ b/WallpaperPicker/res/values-af/strings.xml @@ -22,6 +22,7 @@ "Stel muurpapier" "Kon nie prent laai nie" "Kon nie prent as muurpapier laai nie" + "Kon nie prent as muurpapier stel nie" "%1$d gekies" "%1$d gekies" diff --git a/WallpaperPicker/res/values-am/strings.xml b/WallpaperPicker/res/values-am/strings.xml index 7e793856ec..23bf538e3c 100644 --- a/WallpaperPicker/res/values-am/strings.xml +++ b/WallpaperPicker/res/values-am/strings.xml @@ -22,6 +22,7 @@ "ልጣፍ አዘጋጅ" "ምስሉን መጫን አልተቻለም" "ምስሉን እንደ ግድግዳ ወረቀት መጫን አልተቻለም" + "ምስሉን እንደ ግድግዳ ወረቀት ማዘጋጀት አልተቻለም" "%1$d ተመርጧል" "%1$d ተመርጧል" diff --git a/WallpaperPicker/res/values-ar/strings.xml b/WallpaperPicker/res/values-ar/strings.xml index 84fa104db2..db6834c9ad 100644 --- a/WallpaperPicker/res/values-ar/strings.xml +++ b/WallpaperPicker/res/values-ar/strings.xml @@ -22,6 +22,7 @@ "تعيين الخلفية" "تعذر تحميل الصورة" "تعذر تحميل الصورة كخلفية" + "تعذر تعيين الصورة كخلفية" "‏تم تحديد %1$d" "‏تم تحديد %1$d" diff --git a/WallpaperPicker/res/values-bg/strings.xml b/WallpaperPicker/res/values-bg/strings.xml index 60ae3022f3..bf2a83b1ee 100644 --- a/WallpaperPicker/res/values-bg/strings.xml +++ b/WallpaperPicker/res/values-bg/strings.xml @@ -22,6 +22,7 @@ "Задаване на тапета" "Изображението не можа да бъде заредено" "Изображението не можа да бъде заредено като тапет" + "Изображението не можа да бъде зададено като тапет" "Избрахте %1$d" "Избрахте %1$d" diff --git a/WallpaperPicker/res/values-bn-rBD/strings.xml b/WallpaperPicker/res/values-bn-rBD/strings.xml index 74d7e57bda..1c4d3d493c 100644 --- a/WallpaperPicker/res/values-bn-rBD/strings.xml +++ b/WallpaperPicker/res/values-bn-rBD/strings.xml @@ -22,6 +22,7 @@ "ওয়ালপেপার সেট করুন" "চিত্র লোড করা যায়নি" "ওয়ালপেপার হিসাবে চিত্র লোড করা যায়নি" + "ওয়ালপেপার হিসাবে চিত্র সেট করা যায়নি" "%1$dটি নির্বাচন করা হয়েছে" "%1$dটি নির্বাচন করা হয়েছে" diff --git a/WallpaperPicker/res/values-ca/strings.xml b/WallpaperPicker/res/values-ca/strings.xml index cbec76250e..9533ae918c 100644 --- a/WallpaperPicker/res/values-ca/strings.xml +++ b/WallpaperPicker/res/values-ca/strings.xml @@ -22,6 +22,7 @@ "Estableix el fons de pantalla" "No s\'ha pogut carregar la imatge." "No s\'ha pogut carregar la imatge com a fons de pantalla." + "No s\'ha pogut definir la imatge com a fons de pantalla" "Seleccionats: %1$d" "Seleccionats: %1$d" diff --git a/WallpaperPicker/res/values-cs/strings.xml b/WallpaperPicker/res/values-cs/strings.xml index da0758e0ab..aab8cc8b34 100644 --- a/WallpaperPicker/res/values-cs/strings.xml +++ b/WallpaperPicker/res/values-cs/strings.xml @@ -22,6 +22,7 @@ "Nastavit jako tapetu" "Obrázek nelze načíst." "Obrázek nelze načíst jako tapetu." + "Obrázek nelze nastavit jako tapetu" "Vybráno: %1$d" "Vybráno: %1$d" diff --git a/WallpaperPicker/res/values-da/strings.xml b/WallpaperPicker/res/values-da/strings.xml index 12c0fe87e6..10ef5b3da0 100644 --- a/WallpaperPicker/res/values-da/strings.xml +++ b/WallpaperPicker/res/values-da/strings.xml @@ -22,6 +22,7 @@ "Angiv baggrund" "Billedet kunne ikke indlæses" "Billedet kunne ikke indlæses som baggrund" + "Billedet kunne ikke indlæses som baggrund" "%1$d er valgt" "%1$d er valgt" diff --git a/WallpaperPicker/res/values-de/strings.xml b/WallpaperPicker/res/values-de/strings.xml index 3171b3f3a7..be35b736bd 100644 --- a/WallpaperPicker/res/values-de/strings.xml +++ b/WallpaperPicker/res/values-de/strings.xml @@ -22,6 +22,7 @@ "Hintergrund auswählen" "Bild konnte nicht geladen werden." "Bild konnte nicht als Hintergrund geladen werden." + "Bild konnte nicht als Hintergrund festgelegt werden." "%1$d ausgewählt" "%1$d ausgewählt" diff --git a/WallpaperPicker/res/values-el/strings.xml b/WallpaperPicker/res/values-el/strings.xml index 2988beced4..1d799a86d5 100644 --- a/WallpaperPicker/res/values-el/strings.xml +++ b/WallpaperPicker/res/values-el/strings.xml @@ -22,6 +22,7 @@ "Ορισμός ταπετσαρίας" "Δεν ήταν δυνατή η φόρτωση της εικόνας" "Δεν ήταν δυνατή η φόρτωση της εικόνας ως ταπετσαρία" + "Δεν ήταν δυνατός ο ορισμός της εικόνας ως ταπετσαρία" "%1$d επιλεγμένα" "%1$d επιλεγμένα" diff --git a/WallpaperPicker/res/values-en-rAU/strings.xml b/WallpaperPicker/res/values-en-rAU/strings.xml index 30450ee814..a384ff6083 100644 --- a/WallpaperPicker/res/values-en-rAU/strings.xml +++ b/WallpaperPicker/res/values-en-rAU/strings.xml @@ -22,6 +22,7 @@ "Set wallpaper" "Couldn\'t load image" "Couldn\'t load image as wallpaper" + "Couldn\'t set image as wallpaper" "%1$d selected" "%1$d selected" diff --git a/WallpaperPicker/res/values-en-rGB/strings.xml b/WallpaperPicker/res/values-en-rGB/strings.xml index 30450ee814..a384ff6083 100644 --- a/WallpaperPicker/res/values-en-rGB/strings.xml +++ b/WallpaperPicker/res/values-en-rGB/strings.xml @@ -22,6 +22,7 @@ "Set wallpaper" "Couldn\'t load image" "Couldn\'t load image as wallpaper" + "Couldn\'t set image as wallpaper" "%1$d selected" "%1$d selected" diff --git a/WallpaperPicker/res/values-en-rIN/strings.xml b/WallpaperPicker/res/values-en-rIN/strings.xml index 30450ee814..a384ff6083 100644 --- a/WallpaperPicker/res/values-en-rIN/strings.xml +++ b/WallpaperPicker/res/values-en-rIN/strings.xml @@ -22,6 +22,7 @@ "Set wallpaper" "Couldn\'t load image" "Couldn\'t load image as wallpaper" + "Couldn\'t set image as wallpaper" "%1$d selected" "%1$d selected" diff --git a/WallpaperPicker/res/values-es-rUS/strings.xml b/WallpaperPicker/res/values-es-rUS/strings.xml index c18ecb2334..924ea56155 100644 --- a/WallpaperPicker/res/values-es-rUS/strings.xml +++ b/WallpaperPicker/res/values-es-rUS/strings.xml @@ -22,6 +22,7 @@ "Establecer como fondo de pantalla" "No se pudo cargar la imagen." "No se pudo cargar la imagen como fondo de pantalla." + "No se pudo establecer la imagen como fondo de pantalla" "%1$d seleccionado" "%1$d seleccionado" diff --git a/WallpaperPicker/res/values-es/strings.xml b/WallpaperPicker/res/values-es/strings.xml index b7221af2ae..8ecd3f4c36 100644 --- a/WallpaperPicker/res/values-es/strings.xml +++ b/WallpaperPicker/res/values-es/strings.xml @@ -22,6 +22,7 @@ "Establecer fondo" "No se ha podido cargar la imagen" "No se ha podido cargar la imagen como fondo de pantalla" + "No se ha podido establecer la imagen como fondo de pantalla" "Seleccionados: %1$d" "Seleccionados: %1$d" diff --git a/WallpaperPicker/res/values-et-rEE/strings.xml b/WallpaperPicker/res/values-et-rEE/strings.xml index 571a0ffbdd..59ca7704c4 100644 --- a/WallpaperPicker/res/values-et-rEE/strings.xml +++ b/WallpaperPicker/res/values-et-rEE/strings.xml @@ -22,6 +22,7 @@ "Määra taustapilt" "Kujutist ei õnnestunud laadida" "Kujutist ei õnnestunud taustapildina laadida" + "Kujutist ei õnnestunud taustapildiks määrata" "Valitud on %1$d" "Valitud on %1$d" diff --git a/WallpaperPicker/res/values-eu-rES/strings.xml b/WallpaperPicker/res/values-eu-rES/strings.xml index 45bf7a1061..fb77b1acd5 100644 --- a/WallpaperPicker/res/values-eu-rES/strings.xml +++ b/WallpaperPicker/res/values-eu-rES/strings.xml @@ -22,6 +22,7 @@ "Ezarri horma-papera" "Ezin izan da irudia kargatu" "Ezin izan da irudia horma-paper gisa kargatu" + "Ezin izan da ezarri irudia horma-paper gisa" "%1$d hautatuta" "%1$d hautatuta" diff --git a/WallpaperPicker/res/values-fa/strings.xml b/WallpaperPicker/res/values-fa/strings.xml index 469ec1263c..da4b7a10d4 100644 --- a/WallpaperPicker/res/values-fa/strings.xml +++ b/WallpaperPicker/res/values-fa/strings.xml @@ -22,6 +22,7 @@ "تنظیم کاغذدیواری" "تصویر بارگیری نشد" "تصویر به‌عنوان کاغذدیواری بارگیری نشد" + "تصویر به‌عنوان کاغذدیواری تنظیم نشد" "‏%1$d انتخاب شد" "‏%1$d انتخاب شد" diff --git a/WallpaperPicker/res/values-fi/strings.xml b/WallpaperPicker/res/values-fi/strings.xml index c82d3e0edd..3c8f1f538c 100644 --- a/WallpaperPicker/res/values-fi/strings.xml +++ b/WallpaperPicker/res/values-fi/strings.xml @@ -22,6 +22,7 @@ "Aseta taustakuva" "Kuvan lataus epäonnistui" "Kuvaa ei voitu ladata taustakuvaksi" + "Kuvan asettaminen taustakuvaksi epäonnistui." "%1$d valittu" "%1$d valittu" diff --git a/WallpaperPicker/res/values-fr-rCA/strings.xml b/WallpaperPicker/res/values-fr-rCA/strings.xml index 92568966ee..ba1d430002 100644 --- a/WallpaperPicker/res/values-fr-rCA/strings.xml +++ b/WallpaperPicker/res/values-fr-rCA/strings.xml @@ -22,6 +22,7 @@ "Définir le fond d\'écran" "Impossible de charger l\'image" "Impossible de charger l\'image comme fond d\'écran" + "Impossible d\'utiliser l\'image comme fond d\'écran" "%1$d sélectionné" "%1$d sélectionné" diff --git a/WallpaperPicker/res/values-fr/strings.xml b/WallpaperPicker/res/values-fr/strings.xml index 479a7e4303..9f3b525311 100644 --- a/WallpaperPicker/res/values-fr/strings.xml +++ b/WallpaperPicker/res/values-fr/strings.xml @@ -22,6 +22,7 @@ "Définir comme fond d\'écran" "Impossible de charger l\'image." "Impossible de charger l\'image comme fond d\'écran." + "Impossible de définir l\'image comme fond d\'écran." "%1$d élément sélectionné" "%1$d élément sélectionné" diff --git a/WallpaperPicker/res/values-gl-rES/strings.xml b/WallpaperPicker/res/values-gl-rES/strings.xml index 0396b2f628..5805489a7d 100644 --- a/WallpaperPicker/res/values-gl-rES/strings.xml +++ b/WallpaperPicker/res/values-gl-rES/strings.xml @@ -22,6 +22,7 @@ "Establecer fondo de pantalla" "Non se puido cargar a imaxe" "Non se puido cargar a imaxe como fondo de pantalla" + "Non se puido definir a imaxe como fondo de pantalla" "Seleccionaches %1$d" "Seleccionaches %1$d" diff --git a/WallpaperPicker/res/values-hi/strings.xml b/WallpaperPicker/res/values-hi/strings.xml index 60834e103d..6f610b5bb5 100644 --- a/WallpaperPicker/res/values-hi/strings.xml +++ b/WallpaperPicker/res/values-hi/strings.xml @@ -22,6 +22,7 @@ "वॉलपेपर सेट करें" "चित्र लोड नहीं किया जा सका" "चित्र को वॉलपेपर के रूप में लोड नहीं किया जा सका" + "चित्र को वॉलपेपर के रूप में सेट नहीं किया जा सका" "%1$d चयनित" "%1$d चयनित" diff --git a/WallpaperPicker/res/values-hr/strings.xml b/WallpaperPicker/res/values-hr/strings.xml index 9ed702c5ab..aaf5e1bcd0 100644 --- a/WallpaperPicker/res/values-hr/strings.xml +++ b/WallpaperPicker/res/values-hr/strings.xml @@ -22,6 +22,7 @@ "Postavi pozadinu" "Nije moguće učitati sliku" "Nije moguće učitati sliku kao pozadinu" + "Postavljanje slike kao pozadine nije uspjelo" "Odabrano je %1$d stavki" "Odabrana je %1$d stavka" diff --git a/WallpaperPicker/res/values-hu/strings.xml b/WallpaperPicker/res/values-hu/strings.xml index d8b08fdfd3..06c0952a40 100644 --- a/WallpaperPicker/res/values-hu/strings.xml +++ b/WallpaperPicker/res/values-hu/strings.xml @@ -22,6 +22,7 @@ "Háttérkép beállítása" "A kép betöltése nem sikerült" "A kép betöltése háttérképként nem sikerült" + "A kép beállítása háttérképként nem sikerült" "%1$d kiválasztva" "%1$d kiválasztva" diff --git a/WallpaperPicker/res/values-hy-rAM/strings.xml b/WallpaperPicker/res/values-hy-rAM/strings.xml index 027b841a73..f68d49f903 100644 --- a/WallpaperPicker/res/values-hy-rAM/strings.xml +++ b/WallpaperPicker/res/values-hy-rAM/strings.xml @@ -22,6 +22,7 @@ "Սահմանել պաստառը" "Չհաջողվեց բեռնել նկարը" "Չհաջողվեց նկարը սահմանել որպես պաստառ" + "Չհաջողվեց նկարը դնել որպես պաստառ" "%1$d ընտրված" "%1$d ընտրված" diff --git a/WallpaperPicker/res/values-in/strings.xml b/WallpaperPicker/res/values-in/strings.xml index 91554522f6..634eb1f765 100644 --- a/WallpaperPicker/res/values-in/strings.xml +++ b/WallpaperPicker/res/values-in/strings.xml @@ -22,6 +22,7 @@ "Setel wallpaper" "Tidak dapat memuat gambar" "Tidak dapat memuat gambar sebagai wallpaper" + "Tidak dapat menyetel gambar sebagai wallpaper" "%1$d dipilih" "%1$d dipilih" diff --git a/WallpaperPicker/res/values-is-rIS/strings.xml b/WallpaperPicker/res/values-is-rIS/strings.xml index 69e6cd4987..eac44ec2ad 100644 --- a/WallpaperPicker/res/values-is-rIS/strings.xml +++ b/WallpaperPicker/res/values-is-rIS/strings.xml @@ -22,6 +22,7 @@ "Velja veggfóður" "Ekki var hægt að hlaða mynd" "Ekki var hægt að hlaða mynd sem veggfóður" + "Ekki var hægt að nota mynd sem veggfóður" "%1$d valin" "%1$d valið" diff --git a/WallpaperPicker/res/values-it/strings.xml b/WallpaperPicker/res/values-it/strings.xml index f4d38d14e0..fdb0ce8de7 100644 --- a/WallpaperPicker/res/values-it/strings.xml +++ b/WallpaperPicker/res/values-it/strings.xml @@ -22,6 +22,7 @@ "Imposta sfondo" "Impossibile caricare l\'immagine" "Impossibile caricare l\'immagine come sfondo" + "Impossibile impostare l\'immagine come sfondo" "%1$d selezionati" "%1$d selezionato" diff --git a/WallpaperPicker/res/values-iw/strings.xml b/WallpaperPicker/res/values-iw/strings.xml index e29f2372f3..c6a583d0e8 100644 --- a/WallpaperPicker/res/values-iw/strings.xml +++ b/WallpaperPicker/res/values-iw/strings.xml @@ -22,6 +22,7 @@ "הגדר טפט" "לא ניתן היה לטעון את התמונה" "לא ניתן היה לטעון את התמונה כטפט" + "לא ניתן היה להגדיר את התמונה כטפט" "‏%1$d נבחרו" "‏%1$d נבחרו" diff --git a/WallpaperPicker/res/values-ja/strings.xml b/WallpaperPicker/res/values-ja/strings.xml index e86026bf95..f18da5d429 100644 --- a/WallpaperPicker/res/values-ja/strings.xml +++ b/WallpaperPicker/res/values-ja/strings.xml @@ -22,6 +22,7 @@ "壁紙を設定" "画像を読み込めませんでした" "画像を壁紙として読み込めませんでした" + "画像を壁紙として設定できませんでした" "%1$d個選択済み" "%1$d個選択済み" diff --git a/WallpaperPicker/res/values-ka-rGE/strings.xml b/WallpaperPicker/res/values-ka-rGE/strings.xml index 1ae10214a2..1f652823f7 100644 --- a/WallpaperPicker/res/values-ka-rGE/strings.xml +++ b/WallpaperPicker/res/values-ka-rGE/strings.xml @@ -22,6 +22,7 @@ "ფონის დაყენება" "სურათი ვერ ჩაიტვირთა." "სურათი ფონად ვერ ჩაიტვირთა." + "სურათი ფონად ვერ დაყენდა" "არჩეულია %1$d" "არჩეულია %1$d" diff --git a/WallpaperPicker/res/values-kk-rKZ/strings.xml b/WallpaperPicker/res/values-kk-rKZ/strings.xml index a10e273189..6f4ee7ca2e 100644 --- a/WallpaperPicker/res/values-kk-rKZ/strings.xml +++ b/WallpaperPicker/res/values-kk-rKZ/strings.xml @@ -22,6 +22,7 @@ "Тұсқағаз орнату" "Суретті жүктей алмады" "Суретті артқы фон ретінде жүктей алмады" + "Кескінді тұсқағаз ретінде орнату мүмкін болмады" "%1$d таңдалған" "%1$d таңдалған" diff --git a/WallpaperPicker/res/values-km-rKH/strings.xml b/WallpaperPicker/res/values-km-rKH/strings.xml index 2a605e86a5..801260d3fa 100644 --- a/WallpaperPicker/res/values-km-rKH/strings.xml +++ b/WallpaperPicker/res/values-km-rKH/strings.xml @@ -22,6 +22,7 @@ "កំណត់​ផ្ទាំង​រូបភាព" "មិន​អាច​ផ្ទុក​រូបភាព" "មិន​អាច​ផ្ទុក​រូបភាព​ជា​ផ្ទាំង​រូបភាព" + "មិនអាចកំណត់រូបភាពជាផ្ទាំងរូបភាពទេ" "បាន​ជ្រើស %1$d" "បាន​ជ្រើស %1$d" diff --git a/WallpaperPicker/res/values-kn-rIN/strings.xml b/WallpaperPicker/res/values-kn-rIN/strings.xml index b69bda5297..7d4d7e70e4 100644 --- a/WallpaperPicker/res/values-kn-rIN/strings.xml +++ b/WallpaperPicker/res/values-kn-rIN/strings.xml @@ -22,6 +22,7 @@ "ವಾಲ್‌ಪೇಪರ್ ಹೊಂದಿಸಿ" "ಚಿತ್ರವನ್ನು ಲೋಡ್‌ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ" "ಚಿತ್ರವನ್ನು ವಾಲ್‌ಪೇಪರ್‌ ರೂಪದಲ್ಲಿ ಲೋಡ್‌ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ" + "ಚಿತ್ರವನ್ನು ವಾಲ್‌ಪೇಪರ್‌ ರೂಪದಲ್ಲಿ ಹೊಂದಿಸಲಾಗಲಿಲ್ಲ" "%1$d ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ" "%1$d ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ" diff --git a/WallpaperPicker/res/values-ko/strings.xml b/WallpaperPicker/res/values-ko/strings.xml index 30e7cfa23b..f4072946da 100644 --- a/WallpaperPicker/res/values-ko/strings.xml +++ b/WallpaperPicker/res/values-ko/strings.xml @@ -22,6 +22,7 @@ "배경화면 설정" "이미지를 로드할 수 없습니다." "이미지를 배경화면으로 로드할 수 없습니다." + "이미지를 배경화면으로 설정할 수 없습니다." "%1$d개 선택됨" "%1$d개 선택됨" diff --git a/WallpaperPicker/res/values-ky-rKG/strings.xml b/WallpaperPicker/res/values-ky-rKG/strings.xml index f1ebf095d0..f53f52b29f 100644 --- a/WallpaperPicker/res/values-ky-rKG/strings.xml +++ b/WallpaperPicker/res/values-ky-rKG/strings.xml @@ -22,6 +22,7 @@ "Тушкагаз орнотуу" "Сүрөт жүктөө мүмкүн болбоду" "Сүрөттү тушкагаз катары жүктөө кыйрады" + "Сүрөт тушкагаз катары коюлбай койду" "%1$d тандалды" "%1$d тандалды" diff --git a/WallpaperPicker/res/values-lo-rLA/strings.xml b/WallpaperPicker/res/values-lo-rLA/strings.xml index e32cafb7d7..1da6d29c4a 100644 --- a/WallpaperPicker/res/values-lo-rLA/strings.xml +++ b/WallpaperPicker/res/values-lo-rLA/strings.xml @@ -22,6 +22,7 @@ "ຕັ້ງເປັນພາບພື້ນຫຼັງ" "ບໍ່ສາມາດໂຫຼດຮູບໄດ້" "ບໍ່ສາມາດໂຫຼດຮູບເປັນພາບພື້ນຫຼັງໄດ້" + "ບໍ່ສາມາດໂຫຼດຮູບເປັນພາບພື້ນຫຼັງໄດ້" "ເລືອກ %1$d" "ເລືອກ %1$d" diff --git a/WallpaperPicker/res/values-lt/strings.xml b/WallpaperPicker/res/values-lt/strings.xml index c442e3a5ad..98c9a365c4 100644 --- a/WallpaperPicker/res/values-lt/strings.xml +++ b/WallpaperPicker/res/values-lt/strings.xml @@ -22,6 +22,7 @@ "Nustatyti ekrano foną" "Nepavyko įkelti vaizdo" "Nepavyko įkelti vaizdo kaip ekrano fono" + "Nepavyko nustatyti vaizdo kaip ekrano fono" "Pasirinkta: %1$d" "Pasirinkta: %1$d" diff --git a/WallpaperPicker/res/values-lv/strings.xml b/WallpaperPicker/res/values-lv/strings.xml index d05a175470..ff7876c72e 100644 --- a/WallpaperPicker/res/values-lv/strings.xml +++ b/WallpaperPicker/res/values-lv/strings.xml @@ -22,6 +22,7 @@ "Iestatīt fona tapeti" "Nevarēja ielādēt attēlu." "Nevarēja ielādēt attēlu kā fona tapeti." + "Nevarēja iestatīt attēlu kā fona tapeti." "Atlasīts: %1$d" "Atlasīta: %1$d" diff --git a/WallpaperPicker/res/values-mk-rMK/strings.xml b/WallpaperPicker/res/values-mk-rMK/strings.xml index f9e0963ed0..13b38cd1d5 100644 --- a/WallpaperPicker/res/values-mk-rMK/strings.xml +++ b/WallpaperPicker/res/values-mk-rMK/strings.xml @@ -22,6 +22,7 @@ "Подеси тапет" "Сликата не можеше да се вчита" "Сликата не можеше да се вчита како тапет" + "Сликата не може да се постави како тапет" "Избрано %1$d" "Избрано %1$d" diff --git a/WallpaperPicker/res/values-ml-rIN/strings.xml b/WallpaperPicker/res/values-ml-rIN/strings.xml index 6be771c0ed..5831b36b91 100644 --- a/WallpaperPicker/res/values-ml-rIN/strings.xml +++ b/WallpaperPicker/res/values-ml-rIN/strings.xml @@ -22,6 +22,7 @@ "വാൾപേപ്പർ സജ്ജീകരിക്കുക" "ചിത്രം ലോഡുചെയ്യാനായില്ല" "വാൾപേപ്പറായി ചിത്രം ലോഡുചെയ്യാനായില്ല" + "വാൾപേപ്പറായി ചിത്രം ലോഡുചെയ്യാനായില്ല" "%1$d തിരഞ്ഞെടുത്തു" "%1$d തിരഞ്ഞെടുത്തു" diff --git a/WallpaperPicker/res/values-mn-rMN/strings.xml b/WallpaperPicker/res/values-mn-rMN/strings.xml index b88da5a96e..9995547d55 100644 --- a/WallpaperPicker/res/values-mn-rMN/strings.xml +++ b/WallpaperPicker/res/values-mn-rMN/strings.xml @@ -22,6 +22,7 @@ "Ханын зургийг тохируулах" "Зургийг ачаалж чадсангүй" "Зургийг ханын зураг болгож ачаалж чадсангүй" + "Зургийг ханын зураг болгож чадсангүй" "%1$d сонгогдсон" "%1$d сонгогдсон" diff --git a/WallpaperPicker/res/values-mr-rIN/strings.xml b/WallpaperPicker/res/values-mr-rIN/strings.xml index 128b21c1ca..d740fd29e6 100644 --- a/WallpaperPicker/res/values-mr-rIN/strings.xml +++ b/WallpaperPicker/res/values-mr-rIN/strings.xml @@ -22,6 +22,7 @@ "वॉलपेपर सेट करा" "प्रतिमा लोड करू शकलो नाही" "वॉलपेपर म्हणून प्रतिमा लोड करू शकलो नाही" + "प्रतिमा वॉलपेपर म्हणून सेट करू शकलो नाही" "%1$d निवडले" "%1$d निवडले" diff --git a/WallpaperPicker/res/values-ms-rMY/strings.xml b/WallpaperPicker/res/values-ms-rMY/strings.xml index 9d824e4fa3..759e48cecc 100644 --- a/WallpaperPicker/res/values-ms-rMY/strings.xml +++ b/WallpaperPicker/res/values-ms-rMY/strings.xml @@ -22,6 +22,7 @@ "Tetapkan kertas dinding" "Tidak dapat memuatkan imej" "Tidak dapat memuatkan imej sebagai kertas dinding" + "Tidak dapat menetapkan imej sebagai kertas dinding" "%1$d dipilih" "%1$d dipilih" diff --git a/WallpaperPicker/res/values-my-rMM/strings.xml b/WallpaperPicker/res/values-my-rMM/strings.xml index 233611431d..5197b98ea3 100644 --- a/WallpaperPicker/res/values-my-rMM/strings.xml +++ b/WallpaperPicker/res/values-my-rMM/strings.xml @@ -22,6 +22,7 @@ "နောက်ခံအား သတ်မှတ်ရန်" "ပုံရိပ် တင် မရပါ" "ပုံရိပ်အား နောက်ခံအဖြစ် တင် မရပါ" + "ပုံရိပ်အား နောက်ခံအဖြစ် တင်၍မရပါ" "%1$d ရွေးချယ်ပြီး" "%1$d ရွေးချယ်ပြီး" diff --git a/WallpaperPicker/res/values-nb/strings.xml b/WallpaperPicker/res/values-nb/strings.xml index 9ae0b989a7..8125b53bf0 100644 --- a/WallpaperPicker/res/values-nb/strings.xml +++ b/WallpaperPicker/res/values-nb/strings.xml @@ -22,6 +22,7 @@ "Angi bakgrunn" "Kunne ikke laste inn bildet" "Kunne ikke laste inn bildet som bakgrunn" + "Kunne ikke angi bildet som bakgrunn" "%1$d valgt" "%1$d valgt" diff --git a/WallpaperPicker/res/values-ne-rNP/strings.xml b/WallpaperPicker/res/values-ne-rNP/strings.xml index 5bca8d809d..b77a1c5d7b 100644 --- a/WallpaperPicker/res/values-ne-rNP/strings.xml +++ b/WallpaperPicker/res/values-ne-rNP/strings.xml @@ -22,6 +22,7 @@ "वालपेपर मिलाउनुहोस्" "तस्बिर लोड गर्न सकिएन" "तस्बिरलाई वालपेपरका रूपमा लोड गर्न सकिएन" + "छविलाई वालपेपरको रूपमा सेट गर्न सकिएन" "%1$d चयन भयो" "%1$d चयन भयो" diff --git a/WallpaperPicker/res/values-nl/strings.xml b/WallpaperPicker/res/values-nl/strings.xml index a86f0f6518..dc78305aa3 100644 --- a/WallpaperPicker/res/values-nl/strings.xml +++ b/WallpaperPicker/res/values-nl/strings.xml @@ -22,6 +22,7 @@ "Achtergrond instellen" "Kan afbeelding niet laden" "Kan afbeelding niet laden als achtergrond" + "Kan afbeelding niet instellen als achtergrond" "%1$d geselecteerd" "%1$d geselecteerd" diff --git a/WallpaperPicker/res/values-pl/strings.xml b/WallpaperPicker/res/values-pl/strings.xml index cd52082d6b..9693de46c7 100644 --- a/WallpaperPicker/res/values-pl/strings.xml +++ b/WallpaperPicker/res/values-pl/strings.xml @@ -22,6 +22,7 @@ "Ustaw tapetę" "Nie udało się załadować obrazu" "Nie udało się załadować obrazu jako tapety" + "Nie udało się ustawić obrazu jako tapety" "Wybranych %1$d" "Wybrana %1$d" diff --git a/WallpaperPicker/res/values-pt-rPT/strings.xml b/WallpaperPicker/res/values-pt-rPT/strings.xml index 82aa4694a1..3c4fa9b731 100644 --- a/WallpaperPicker/res/values-pt-rPT/strings.xml +++ b/WallpaperPicker/res/values-pt-rPT/strings.xml @@ -22,6 +22,7 @@ "Definir imagem fundo" "Não foi possível carregar a imagem" "Não foi possível carregar a imagem como imagem de fundo" + "Não foi possível definir a imagem como imagem de fundo" "%1$d selecionadas" "%1$d selecionada" diff --git a/WallpaperPicker/res/values-pt/strings.xml b/WallpaperPicker/res/values-pt/strings.xml index 74ff3106c3..2520eed3a7 100644 --- a/WallpaperPicker/res/values-pt/strings.xml +++ b/WallpaperPicker/res/values-pt/strings.xml @@ -22,6 +22,7 @@ "Definir plano de fundo" "Não foi possível carregar a imagem" "Não foi possível carregar a imagem como plano de fundo" + "Não foi possível definir a imagem como plano de fundo" "%1$d selecionados" "%1$d selecionado" diff --git a/WallpaperPicker/res/values-ro/strings.xml b/WallpaperPicker/res/values-ro/strings.xml index 6281b80fc3..f5df3eee22 100644 --- a/WallpaperPicker/res/values-ro/strings.xml +++ b/WallpaperPicker/res/values-ro/strings.xml @@ -22,6 +22,7 @@ "Setați imaginea de fundal" "Nu s-a putut încărca imaginea" "Nu s-a putut încărca imaginea ca fundal" + "Nu s-a putut seta ca imagine de fundal" "%1$d selectate" "%1$d selectată" diff --git a/WallpaperPicker/res/values-ru/strings.xml b/WallpaperPicker/res/values-ru/strings.xml index 959205a336..f8c350a1f8 100644 --- a/WallpaperPicker/res/values-ru/strings.xml +++ b/WallpaperPicker/res/values-ru/strings.xml @@ -22,6 +22,7 @@ "Установить как обои" "Не удалось загрузить изображение" "Не удалось загрузить изображение" + "Не удалось сменить обои" "Выбрано: %1$d" "Выбрано: %1$d" diff --git a/WallpaperPicker/res/values-si-rLK/strings.xml b/WallpaperPicker/res/values-si-rLK/strings.xml index 37ce1fc528..3945bdf89d 100644 --- a/WallpaperPicker/res/values-si-rLK/strings.xml +++ b/WallpaperPicker/res/values-si-rLK/strings.xml @@ -22,6 +22,7 @@ "වෝල්පේපරය සකසන්න" "පින්තූරය පූරණය කිරීමට නොහැකි විය" "පින්තූරය වෝල්පේපරයක් ලෙස පූරණය කිරීමට නොහැකි විය" + "පින්තූරය බිතුපතක් ලෙස සැකසීමට නොහැකි විය" "%1$d තෝරා ගන්නා ලදි" "%1$d තෝරා ගන්නා ලදි" diff --git a/WallpaperPicker/res/values-sk/strings.xml b/WallpaperPicker/res/values-sk/strings.xml index 9d38de437b..fb2c819b27 100644 --- a/WallpaperPicker/res/values-sk/strings.xml +++ b/WallpaperPicker/res/values-sk/strings.xml @@ -22,6 +22,7 @@ "Nastaviť tapetu" "Obrázok nie je možné načítať" "Obrázok nie je možné načítať ako tapetu" + "Obrázok nie je možné nastaviť ako tapetu" "Počet vybratých položiek: %1$d" "Počet vybratých položiek: %1$d" diff --git a/WallpaperPicker/res/values-sl/strings.xml b/WallpaperPicker/res/values-sl/strings.xml index e776cc7d54..a7ff0891d9 100644 --- a/WallpaperPicker/res/values-sl/strings.xml +++ b/WallpaperPicker/res/values-sl/strings.xml @@ -22,6 +22,7 @@ "Nastavi ozadje" "Slike ni bilo mogoče naložiti" "Slike ni bilo mogoče naložiti kot ozadje" + "Slike ni bilo mogoče nastaviti kot ozadje" "Št. izbranih: %1$d" "Št. izbranih: %1$d" diff --git a/WallpaperPicker/res/values-sr/strings.xml b/WallpaperPicker/res/values-sr/strings.xml index c37bc060f5..6154526cda 100644 --- a/WallpaperPicker/res/values-sr/strings.xml +++ b/WallpaperPicker/res/values-sr/strings.xml @@ -22,6 +22,7 @@ "Подеси позадину" "Није могуће учитати слику" "Није могуће учитати слику као позадину" + "Учитавање слике као позадине није успело" "Изабрано је %1$d" "Изабрана је %1$d" diff --git a/WallpaperPicker/res/values-sv/strings.xml b/WallpaperPicker/res/values-sv/strings.xml index 044508b4da..38062b9eed 100644 --- a/WallpaperPicker/res/values-sv/strings.xml +++ b/WallpaperPicker/res/values-sv/strings.xml @@ -22,6 +22,7 @@ "Ange bakgrund" "Det gick inte att läsa in bilden" "Det gick inte att läsa in bilden som bakgrund" + "Det gick inte att ange bilden som bakgrund" "%1$d har valts" "%1$d har valts" diff --git a/WallpaperPicker/res/values-sw/strings.xml b/WallpaperPicker/res/values-sw/strings.xml index 367912aab7..729a79a74f 100644 --- a/WallpaperPicker/res/values-sw/strings.xml +++ b/WallpaperPicker/res/values-sw/strings.xml @@ -22,6 +22,7 @@ "Weka mandhari" "Haikuweza kupakia picha" "Haikuweza kupakia picha iwe mandhari" + "Haikuweza kuweka picha kuwa mandhari" "%1$d zimechaguliwa" "%1$d zimechaguliwa" diff --git a/WallpaperPicker/res/values-ta-rIN/strings.xml b/WallpaperPicker/res/values-ta-rIN/strings.xml index 7284da8ae5..69a9d386be 100644 --- a/WallpaperPicker/res/values-ta-rIN/strings.xml +++ b/WallpaperPicker/res/values-ta-rIN/strings.xml @@ -22,6 +22,7 @@ "வால்பேப்பரை அமை" "படத்தை ஏற்ற முடியவில்லை" "படத்தை வால்பேப்பராக ஏற்ற முடியவில்லை" + "படத்தை வால்பேப்பராக அமைக்க முடியவில்லை" "%1$d தேர்ந்தெடுக்கப்பட்டன" "%1$d தேர்ந்தெடுக்கப்பட்டது" diff --git a/WallpaperPicker/res/values-te-rIN/strings.xml b/WallpaperPicker/res/values-te-rIN/strings.xml index 4c5ad2f080..6fb5fa29b1 100644 --- a/WallpaperPicker/res/values-te-rIN/strings.xml +++ b/WallpaperPicker/res/values-te-rIN/strings.xml @@ -22,6 +22,7 @@ "వాల్‌పేపర్‌ను సెట్ చేయి" "చిత్రాన్ని లోడ్ చేయడం సాధ్యపడలేదు" "చిత్రాన్ని వాల్‌పేపర్‌గా లోడ్ చేయడం సాధ్యపడలేదు" + "చిత్రాన్ని వాల్‌పేపర్‌గా సెట్ చేయడం సాధ్యపడలేదు" "%1$d ఎంచుకోబడింది" "%1$d ఎంచుకోబడింది" diff --git a/WallpaperPicker/res/values-th/strings.xml b/WallpaperPicker/res/values-th/strings.xml index b3d7a8bc7e..c689436060 100644 --- a/WallpaperPicker/res/values-th/strings.xml +++ b/WallpaperPicker/res/values-th/strings.xml @@ -22,6 +22,7 @@ "ตั้งวอลเปเปอร์" "ไม่สามารถโหลดรูปภาพ" "ไม่สามารถโหลดรูปภาพเป็นวอลเปเปอร์" + "ไม่สามารถตั้งรูปภาพเป็นวอลเปเปอร์" "เลือกไว้ %1$d" "เลือกไว้ %1$d" diff --git a/WallpaperPicker/res/values-tl/strings.xml b/WallpaperPicker/res/values-tl/strings.xml index db8f4d5426..c760d7f6e3 100644 --- a/WallpaperPicker/res/values-tl/strings.xml +++ b/WallpaperPicker/res/values-tl/strings.xml @@ -22,6 +22,7 @@ "Itakda ang wallpaper" "Hindi ma-load ang larawan" "Hindi ma-load ang larawan bilang wallpaper" + "Hindi maitakda ang larawan bilang wallpaper" "%1$d ang napili" "%1$d ang napili" diff --git a/WallpaperPicker/res/values-tr/strings.xml b/WallpaperPicker/res/values-tr/strings.xml index d1e57edbbf..e9dc1d2b29 100644 --- a/WallpaperPicker/res/values-tr/strings.xml +++ b/WallpaperPicker/res/values-tr/strings.xml @@ -22,6 +22,7 @@ "Duvar kağıdını ayarla" "Resim yüklenemedi" "Resim duvar kağıdı olarak yüklenemedi" + "Resim, duvar kağıdı olarak ayarlanamadı" "%1$d tane seçildi" "%1$d tane seçildi" diff --git a/WallpaperPicker/res/values-uk/strings.xml b/WallpaperPicker/res/values-uk/strings.xml index 756e7cf092..c6669c0c86 100644 --- a/WallpaperPicker/res/values-uk/strings.xml +++ b/WallpaperPicker/res/values-uk/strings.xml @@ -22,6 +22,7 @@ "Установити фон" "Не вдалося завантажити зображення" "Не вдалося завантажити зображення як фоновий малюнок" + "Не вдалося зробити зображення фоновим малюнком" "Вибрано %1$d" "Вибрано %1$d" diff --git a/WallpaperPicker/res/values-ur-rPK/strings.xml b/WallpaperPicker/res/values-ur-rPK/strings.xml index 86d8163d90..e240e1a50a 100644 --- a/WallpaperPicker/res/values-ur-rPK/strings.xml +++ b/WallpaperPicker/res/values-ur-rPK/strings.xml @@ -22,6 +22,7 @@ "وال پیپر سیٹ کریں" "تصویر کو لوڈ نہیں کیا جا سکا" "تصویر کو وال پیپر کے بطور لوڈ نہیں کیا جا سکا" + "تصویر کو بطور وال پیپر سیٹ نہیں کیا جا سکا" "‏%1$d کو منتخب کیا گیا" "‏%1$d کو منتخب کیا گیا" diff --git a/WallpaperPicker/res/values-uz-rUZ/strings.xml b/WallpaperPicker/res/values-uz-rUZ/strings.xml index 97d3938ae1..5a79981e9d 100644 --- a/WallpaperPicker/res/values-uz-rUZ/strings.xml +++ b/WallpaperPicker/res/values-uz-rUZ/strings.xml @@ -22,6 +22,7 @@ "Fonga rasm o‘rnatish" "Rasm yuklanmadi" "Fon rasmi sifatida rasm yuklanmadi" + "Rasmni fon rasmi sifatida o‘rnatib bo‘lmadi" "%1$d ta tanlandi" "%1$d ta tanlandi" diff --git a/WallpaperPicker/res/values-vi/strings.xml b/WallpaperPicker/res/values-vi/strings.xml index ae00d585cc..a7c636de3a 100644 --- a/WallpaperPicker/res/values-vi/strings.xml +++ b/WallpaperPicker/res/values-vi/strings.xml @@ -22,6 +22,7 @@ "Đặt hình nền" "Không thể tải hình ảnh" "Không thể tải hình ảnh làm hình nền" + "Không thể đặt hình ảnh làm hình nền" "Đã chọn %1$d" "Đã chọn %1$d" diff --git a/WallpaperPicker/res/values-zh-rCN/strings.xml b/WallpaperPicker/res/values-zh-rCN/strings.xml index 8bd5342eb5..4656ec687a 100644 --- a/WallpaperPicker/res/values-zh-rCN/strings.xml +++ b/WallpaperPicker/res/values-zh-rCN/strings.xml @@ -22,6 +22,7 @@ "设置壁纸" "无法加载图片" "无法加载要设为壁纸的图片" + "无法将图片设为壁纸" "已选择%1$d项" "已选择%1$d项" diff --git a/WallpaperPicker/res/values-zh-rHK/strings.xml b/WallpaperPicker/res/values-zh-rHK/strings.xml index e51d60afa2..eb9c327347 100644 --- a/WallpaperPicker/res/values-zh-rHK/strings.xml +++ b/WallpaperPicker/res/values-zh-rHK/strings.xml @@ -22,6 +22,7 @@ "設定桌布" "無法載入圖片" "無法載入圖片設為桌布" + "無法將圖片設為桌布" "已選取 %1$d 張" "已選取 %1$d 張" diff --git a/WallpaperPicker/res/values-zh-rTW/strings.xml b/WallpaperPicker/res/values-zh-rTW/strings.xml index c12350af0e..fda123c790 100644 --- a/WallpaperPicker/res/values-zh-rTW/strings.xml +++ b/WallpaperPicker/res/values-zh-rTW/strings.xml @@ -22,6 +22,7 @@ "設定桌布" "無法載入圖片" "無法載入您要設為桌布的圖片" + "無法將圖片設為桌布" "已選取 %1$d 個" "已選取 %1$d 個" diff --git a/WallpaperPicker/res/values-zu/strings.xml b/WallpaperPicker/res/values-zu/strings.xml index 537b2f3ca0..1a5b95e930 100644 --- a/WallpaperPicker/res/values-zu/strings.xml +++ b/WallpaperPicker/res/values-zu/strings.xml @@ -22,6 +22,7 @@ "Setha isithombe sangemuva" "Ayikwazanga ukulayisha isithombe" "Ayikwazanga ukulayisha isithombe njengesithombe sangemuva" + "Ayikwazanga ukusetha isithombe njengesithombe sangemuva" "%1$d khethiwe" "%1$d khethiwe" diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 78be3f4218..ad74fca04a 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -28,6 +28,7 @@ "Legstukke gedeaktiveer in Veiligmodus" "Wys Mem" "Raak en hou om \'n legstuk op te tel." + "Dubbeltik en hou om \'n legstuk op te tel of gebruik gepasmaakte handelinge." "%1$d × %2$d" "Deursoek programme" "Laai tans programme …" @@ -52,6 +53,7 @@ "Naamlose vouer" "Bladsy %1$d van %2$d" "Tuisskerm %1$d van %2$d" + "Nuwe tuisskermbladsy" "Welkom" "Kopieer jou program-ikone" "Voer ikone en vouers vanaf jou ou tuisskerms in?" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index b5d982ee42..5c6cdf409e 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -28,6 +28,7 @@ "ምግብሮች በደህንነቱ የተጠበቀ ሁኔታ ተሰናክለዋል" "ማህደረ ማስታወሻ አሳይ" "ፍርግም ለማንሳት ይንኩ እና ይያዙት" + "አንድ ንዑስ ፕሮግራም ለመምረጥ ወይም ብጁ እርምጃዎችን ለመጠቀም ሁለቴ መታ አድርገው ይያዙ።" "%1$d × %2$d" "መተግበሪያዎችን ይፈልጉ" "መተግበሪያዎችን በመጫን ላይ..." @@ -52,6 +53,7 @@ "ስም-አልባ አቃፊ" "ገጽ %1$d ከ%2$d" "መነሻ ማያ ገጽ %1$d ከ%2$d" + "አዲስ የመነሻ ማያ ገጽ" "እንኳን በደህና መጡ" "የመተግበሪያ አዶዎችዎን ይቅዱ" "አዶዎች እና አቃፊዎች ከድሮው የመነሻ ማያ ገጾችዎ ይምጡ?" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 619e11d679..bbcfbcbdb4 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -28,6 +28,7 @@ "الأدوات معطلة في الوضع الآمن" "عرض الذاكرة" "المس مع الاستمرار لاختيار إحدى الأدوات." + "انقر نقرًا مزدوجًا مع الاستمرار لاختيار أداة أو استخدم الإجراءات المخصصة." "%1$d × %2$d" "البحث في التطبيقات" "جارٍ تحميل التطبيقات…" @@ -52,6 +53,7 @@ "مجلد بدون اسم" "‏الصفحة %1$d من %2$d" "‏الشاشة الرئيسية %1$d من %2$d" + "صفحة الشاشة الرئيسية الجديدة" "مرحبًا" "نسخ رموز التطبيقات" "هل تريد استيراد رموز ومجلدات من الشاشات الرئيسية القديمة؟" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 214c64b2d1..4feea289b2 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -28,6 +28,7 @@ "Приспособленията са деактивирани в безопасния режим" "Показване на паметта" "Докоснете и задръжте за избор на приспособление." + "Докоснете двукратно и задръжте за избор на приспособление или използвайте персонализирани действия." "%1$d × %2$d" "Търсене в приложенията" "Приложенията се зареждат…" @@ -52,6 +53,7 @@ "Папка без име" "Страница %1$d от %2$d" "Начален екран %1$d от %2$d" + "Нова страница на началния екран" "Добре дошли" "Икони на прилож. ви: Копиране" "Да се импортират ли иконите и папките от старите ви начални екрани?" diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml index 129d2507a1..b35a8dbf43 100644 --- a/res/values-bn-rBD/strings.xml +++ b/res/values-bn-rBD/strings.xml @@ -28,6 +28,7 @@ "সুরক্ষিত মোডে উইজেট নিষ্ক্রিয় থাকে" "মেম দেখান" "একটি উইজেট তুলতে তা স্পর্শ করে ধরে রাখুন৷" + "কোনো উইজেট বেছে নিতে দুবার-আলতো চেপে ধরে থাকুন অথবা কাস্টম ক্রিয়াগুলি ব্যবহার করুন৷" "%1$d × %2$d" "অ্যাপ্লিকেশানগুলি অনুসন্ধান করুন" "অ্যাপ্লিকেশানগুলি লোড হচ্ছে..." @@ -52,6 +53,7 @@ "নামবিহীন ফোল্ডার" "%2$dটির মধ্যে %1$dটি পৃষ্ঠা" "%2$dটির %1$d নম্বর হোম স্ক্রীন" + "নতুন হোম স্ক্রীনের পৃষ্ঠা" "স্বাগতম" "আপনার অ্যাপ্লিকেশান আইকনগুলি অনুলিপি করুন" "আপনার পুরানো হোম স্ক্রীন থেকে আইকন এবং ফোল্ডারগুলি আমদানি করবেন?" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index cf874a4518..a3ce78a5de 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -28,6 +28,7 @@ "En Mode segur, els widgets estan desactivats." "Mostra la memòria" "Mantén premut un widget per triar-lo." + "Fes doble toc i mantén premut per seleccionar un widget o per utilitzar les accions predeterminades." "%1$d × %2$d" "Cerca a les aplicacions" "S\'estan carregant les aplicacions..." @@ -52,6 +53,7 @@ "Carpeta sense nom" "Pàgina %1$d de %2$d" "Pantalla d\'inici %1$d de %2$d" + "Pàgina de la pantalla d\'inici nova" "Us donem la benvinguda" "Copiar les icones d\'aplicació" "Importar icones i carpetes de pantalles d\'inici anteriors?" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index c2f9f421bd..0d7e3ad31d 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -28,6 +28,7 @@ "V nouzovém režimu jsou widgety zakázány." "Zobrazit Mem" "Widget vyberete dotykem a podržením." + "Dvojitým klepnutím a podržením vyberte widget, případně použijte vlastní akce." "%1$d × %2$d" "Hledat aplikace" "Načítání aplikací…" @@ -52,6 +53,7 @@ "Složka bez názvu" "Strana %1$d z %2$d" "Plocha %1$d z %2$d" + "Nová stránka plochy" "Vítejte" "Zkopírování ikon aplikací" "Chcete importovat ikony a složky ze svých starých ploch?" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index a9487050e2..608b3a4814 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -28,6 +28,7 @@ "Widgets er deaktiveret i Beskyttet tilstand" "Vis Mem" "Tryk på en widget, og hold den nede for at vælge." + "Tryk to gange, og hold fingeren nede for at vælge en widget eller bruge tilpassede handlinger." "%1$d × %2$d" "Søg i Apps" "Indlæser apps…" @@ -52,6 +53,7 @@ "Unavngiven mappe" "Side %1$d ud af %2$d" "Startskærm %1$d ud af %2$d" + "Ny startskærm" "Velkommen" "Kopiér dine appikoner" "Vil du importere ikoner og mapper fra gamle startskærme?" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 96ae74b11b..56921b7c84 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -28,6 +28,7 @@ "Widgets im abgesicherten Modus deaktiviert" "Speicher anzeigen" "Zum Hinzufügen Widget berühren und halten" + "Zum Hinzufügen auf Widget doppeltippen und gedrückt halten oder benutzerdefinierte Aktionen verwenden." "%1$d × %2$d" "In Apps suchen" "Apps werden geladen..." @@ -52,6 +53,7 @@ "Unbenannter Ordner" "Seite %1$d von %2$d" "Startbildschirm %1$d von %2$d" + "Neue Startbildschirmseite" "Hallo!" "App-Symbole kopieren" "Symbole und Ordner alter Startbildschirme importieren?" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 81b43e2e9f..262e245cc0 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -28,6 +28,7 @@ "Τα γραφικά στοιχεία απενεργοποιήθηκαν στην ασφαλή λειτουργία" "Εμφάνιση Mem" "Αγγίξτε παρατεταμένα για να πάρετε ένα γραφ.στοιχ." + "Πατήστε δύο φορές παρατεταμένα για επιλογή γραφικού στοιχείου ή χρήση προσαρμοσμένων ενεργειών." "%1$d × %2$d" "Αναζήτηση εφαρμογών" "Φόρτωση εφαρμογών…" @@ -52,6 +53,7 @@ "Φάκελος χωρίς όνομα" "Σελίδα %1$d από %2$d" "Αρχική οθόνη %1$d από %2$d" + "Νέα σελίδα αρχικής οθόνης" "Καλώς ορίσατε" "Αντιγραφή εικονιδίων εφαρμογών" "Εισαγωγή εικονιδίων και φακέλων από παλιές αρχικές οθόνες;" diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index f2a6eab168..53d095218e 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -28,6 +28,7 @@ "Widgets disabled in Safe mode" "Show Mem" "Touch & hold to pick up a widget." + "Double-tap & hold to pick up a widget or use customised actions." "%1$d × %2$d" "Search Apps" "Loading Apps…" @@ -52,6 +53,7 @@ "Unnamed Folder" "Page %1$d of %2$d" "Home screen %1$d of %2$d" + "New home screen page" "Welcome" "Copy your app icons" "Import icons and folders from your old Home screens?" diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index f2a6eab168..53d095218e 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -28,6 +28,7 @@ "Widgets disabled in Safe mode" "Show Mem" "Touch & hold to pick up a widget." + "Double-tap & hold to pick up a widget or use customised actions." "%1$d × %2$d" "Search Apps" "Loading Apps…" @@ -52,6 +53,7 @@ "Unnamed Folder" "Page %1$d of %2$d" "Home screen %1$d of %2$d" + "New home screen page" "Welcome" "Copy your app icons" "Import icons and folders from your old Home screens?" diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index f2a6eab168..53d095218e 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -28,6 +28,7 @@ "Widgets disabled in Safe mode" "Show Mem" "Touch & hold to pick up a widget." + "Double-tap & hold to pick up a widget or use customised actions." "%1$d × %2$d" "Search Apps" "Loading Apps…" @@ -52,6 +53,7 @@ "Unnamed Folder" "Page %1$d of %2$d" "Home screen %1$d of %2$d" + "New home screen page" "Welcome" "Copy your app icons" "Import icons and folders from your old Home screens?" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index c754493c86..45843a28f1 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -28,6 +28,7 @@ "Widgets inhabilitados en modo seguro" "Mostrar memoria" "Mantén presionado el widget que desees elegir." + "Presiona dos veces y mantén presionado para elegir un widget o usa una acción personalizada." "%1$d × %2$d" "Buscar aplicaciones" "Cargando aplicaciones…" @@ -52,6 +53,7 @@ "Carpeta sin nombre" "Página %1$d de %2$d" "Pantalla principal %1$d de %2$d" + "Nueva página en la pantalla principal" "Bienvenido" "Copiar íconos de aplicaciones" "¿Importar íconos y carpetas de pant. principales antiguas?" diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 16cd84fb2a..8903df991c 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -28,6 +28,7 @@ "Widgets inhabilitados en modo seguro" "Mostrar memoria" "Mantén pulsado el widget que quieras seleccionar." + "Toca dos veces y mantén pulsado el widget que quieras seleccionar o utiliza acciones personalizadas." "%1$d × %2$d" "Busca aplicaciones" "Cargando aplicaciones…" @@ -52,6 +53,7 @@ "Carpeta sin nombre" "Página %1$d de %2$d" "Pantalla de inicio %1$d de %2$d" + "Nueva página de pantalla de inicio" "Te damos la bienvenida" "Copiar iconos de aplicaciones" "¿Importar iconos y carpetas de pantallas de inicio antiguas?" diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 84ca45af48..29d629b473 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -28,6 +28,7 @@ "Turvarežiimis on vidinad keelatud" "Mälu kuvamine" "Vidina valimiseks vajutage ja hoidke seda all." + "Topeltpuudutage ja hoidke vidina valimiseks või kohandatud toimingute kasutamiseks." "%1$d × %2$d" "Otsige rakendustest" "Rakenduste laadimine ..." @@ -52,6 +53,7 @@ "Nimetu kaust" "Leht %1$d/%2$d" "Avaekraan %1$d/%2$d" + "Uus avaekraan" "Tere tulemast" "Kopeerige rakenduste ikoonid" "Kas importida vanade avaekraanide ikoonid ja kaustad?" diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml index 096a4f95e0..0b6b1a90fd 100644 --- a/res/values-eu-rES/strings.xml +++ b/res/values-eu-rES/strings.xml @@ -28,6 +28,7 @@ "Widgetak desgaitu egin dira modu seguruan" "Erakutsi memoria" "Eduki ukituta widgeta aukeratzeko." + "Sakatu birritan eta eduki sakatuta widgeta hartzeko edo ekintza pertsonalizatuak erabiltzeko." "%1$d × %2$d" "Bilatu aplikazioetan" "Aplikazioak kargatzen…" @@ -52,6 +53,7 @@ "Izenik gabeko karpeta" "%1$d/%2$d orria" "%1$d/%2$d hasierako pantaila" + "Hasierako pantailaren orri berria" "Ongi etorri" "Kopiatu aplikazioen ikonoak" "Ikonoak eta karpetak aurreko hasierako pantailatik inportatu?" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 3b6d01ae6e..a91378657f 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -28,6 +28,7 @@ "ابزارک‌ها در حالت ایمن غیرفعال هستند" "‏نمایش Mem" "برای انتخاب ابزارک لمس کنید و نگه دارید." + "برای انتخاب یک ابزارک، دو ضربه سریع بزنید و نگه‌دارید یا از اقدامات سفارشی استفاده کنید." "%1$d × %2$d" "جستجوی برنامه‌ها" "در حال بارگیری برنامه‌ها..." @@ -52,6 +53,7 @@ "پوشه بی‌نام" "‏صفحه %1$d از %2$d" "‏صفحه اصلی %1$d از %2$d" + "صفحه اصلی جدید" "خوش آمدید" "کپی کردن نمادهای برنامه شما" "نمادها و پوشه‌ها از صفحه‌های اصلی قدیمی شما وارد شوند؟" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 47b580e3b6..3d063bd218 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -28,6 +28,7 @@ "Widgetit poistettu käytöstä vikasietotilassa" "Näytä muisti" "Valitse widget painamalla sitä pitkään." + "Valitse widget tai käytä muokattuja toimintoja kaksoisnapauttamalla ja painamalla kohdetta pitkään." "%1$d × %2$d" "Sovellushaku" "Ladataan sovelluksia…" @@ -52,6 +53,7 @@ "Nimetön kansio" "Sivu %1$d / %2$d" "Aloitusruutu %1$d/%2$d" + "Uusi aloitusnäytön sivu" "Tervetuloa" "Kopioi sovelluskuvakkeet" "Tuodaanko kuvakkeet ja kansiot vanhoista aloitusruuduista?" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 91271f7e97..68c4cb8182 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -28,6 +28,7 @@ "Widgets désactivés en mode sans échec" "Afficher la mémoire" "Maintenez un doigt sur le widget pour l\'ajouter." + "Touchez 2X un widget et maintenez le doigt dessus pour l’ajouter ou utiliser des actions personnalisées" "%1$d × %2$d" "Rechercher des applications" "Chargement des applications en cours..." @@ -52,6 +53,7 @@ "Dossier sans nom" "Page %1$d sur %2$d" "Écran d\'accueil %1$d sur %2$d" + "Nouvelle page d\'écran d\'accueil" "Bienvenue" "Copier les icônes de vos applis" "Importer les icônes et dossiers des anciens écrans d\'accueil?" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 84e1594b4b..ec01ea8145 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -28,6 +28,7 @@ "Les widgets sont désactivés en mode sécurisé." "Afficher la mémoire" "App. de manière prolongée pour sélectionner widget." + "Appuyez 2 fois et maintenez la pression pour sélectionner widget ou utilisez actions personnalisées." "%1$d x %2$d" "Rechercher dans les applications" "Chargement des applications en cours…" @@ -52,6 +53,7 @@ "Dossier sans nom" "Page %1$d sur %2$d" "Écran d\'accueil %1$d sur %2$d" + "Nouvelle page d\'écran d\'accueil" "Bienvenue" "Copier les icônes de vos applis" "Importer les icônes et dossiers des anciens écrans d\'accueil ?" diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml index ccfe21ed1b..918ec9e735 100644 --- a/res/values-gl-rES/strings.xml +++ b/res/values-gl-rES/strings.xml @@ -28,6 +28,7 @@ "Os widgets están desactivados no modo seguro" "Mostrar memoria" "Mantén premido un widget para seleccionalo." + "Toca dúas veces e mantén premido para seleccionar un widget ou utiliza accións personalizadas." "%1$d × %2$d" "Aplicacións de busca" "Cargando aplicacións..." @@ -52,6 +53,7 @@ "Cartafol sen nome" "Páxina %1$d de %2$d" "Pantalla de inicio %1$d de %2$d" + "Nova páxina da pantalla de inicio" "Dámosche a benvida" "Copiar iconas das aplicacións" "Queres importar as iconas e os cartafoles doutras pantallas de inicio?" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 7cf4f33ef7..1ad4f91ec9 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -28,6 +28,7 @@ "विजेट सुरक्षित मोड में अक्षम हैं" "मेमोरी दिखाएं" "विजेट को चुनने के लिए स्‍पर्श करके रखें." + "कोई विजेट चुनने के लिए डबल टैप करके रखें या कस्‍टम कार्रवाइयां चुनें." "%1$d × %2$d" "ऐप्‍स खोजें" "ऐप्स लोड हो रहे हैं..." @@ -52,6 +53,7 @@ "अनामित फ़ोल्डर" "पृष्ठ %2$d में से %1$d" "होम स्क्रीन %2$d में से %1$d" + "नया होम स्‍क्रीन पृष्‍ठ" "स्वागत है" "ऐप्स आइकन की प्रतिलिपि बनाएं" "अपनी पुरानी होम स्क्रीन से आइकन और फ़ोल्डर आयात करें?" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 2679570dcf..3cf1d6c283 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -28,6 +28,7 @@ "Widgeti su onemogućeni u Sigurnom načinu rada" "Prikaži mem" "Dodirnite i držite kako biste podigli widget." + "Dodirnite dvaput i držite kako biste podigli widget ili pokušajte prilagođenim radnjama." "%1$d × %2$d" "Pretraži aplikacije" "Učitavanje aplikacija…" @@ -52,6 +53,7 @@ "Neimenovana mapa" "Stranica %1$d od %2$d" "Početni zaslon %1$d od %2$d" + "Nova stranica početnog zaslona" "Dobro došli" "Kopiranje ikona aplikacija" "Želite li uvesti ikone i mape sa starih početnih zaslona?" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 41c38b2def..a941609fb8 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -28,6 +28,7 @@ "A modulok ki vannak kapcsolva Csökkentett módban" "Mem. megjelenítése" "Modul felvételéhez érintse meg, és tartsa lenyomva" + "Modul mozgatásához koppintson rá duplán és tartsa lenyomva, vagy használjon egyéni műveleteket." "%1$d × %2$d" "Alkalmazások keresése" "Alkalmazások betöltése…" @@ -52,6 +53,7 @@ "Névtelen mappa" "%2$d/%1$d. oldal" "%2$d/%1$d. kezdőképernyő" + "Új kezdőképernyő oldal" "Üdvözöljük!" "Alkalmazásikonok másolása" "Importálja ikonjait és mappáit régi kezdőképernyőiről?" diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml index 49a9d18ab4..4d4fb0c419 100644 --- a/res/values-hy-rAM/strings.xml +++ b/res/values-hy-rAM/strings.xml @@ -28,6 +28,7 @@ "Վիջեթներն անջատված են անվտանգ ռեժիմում" "Ցուցադրել մեմը" "Հպեք և պահեք՝ վիջեթն ընտրելու համար:" + "Կրկնակի հպեք և պահեք՝ վիջեթ ավելացնելու համար կամ օգտվեք հարմարեցրած գործողություններից:" "%1$d × %2$d" "Հավելվածների որոնում" "Հավելվածների բեռնում…" @@ -52,6 +53,7 @@ "Անանուն պանակ" "Էջ %1$d՝ %2$d-ից" "Հիմնական էկրան %1$d` %2$d-ից" + "Հիմնական էկրանի նոր էջ" "Բարի գալուստ" "Պատճենել ձեր ծրագրի պատկերակները" "Ներմուծե՞լ պատկերակները և պանակները ձեր նախկին Հիմնական էկրանից" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 21c2080562..f86fed5a48 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -28,6 +28,7 @@ "Widget dinonaktifkan dalam mode Aman" "Tampilkan Memori" "Sentuh lama untuk memilih widget." + "Ketuk dua kalip & tahan untuk mengambil widget atau menggunakan tindakan khusus." "%1$d × %2$d" "Telusuri Apps" "Memuat Aplikasi..." @@ -52,6 +53,7 @@ "Folder Tanpa Nama" "Laman %1$d dari %2$d" "Layar utama %1$d dari %2$d" + "Laman layar utama baru" "Selamat Datang" "Salin ikon aplikasi Anda" "Impor ikon dan folder dari layar Utama lama Anda?" diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml index 7422eaf582..c57ce03a9d 100644 --- a/res/values-is-rIS/strings.xml +++ b/res/values-is-rIS/strings.xml @@ -28,6 +28,7 @@ "Græjur eru óvirkar í öruggri stillingu" "Sýna minni" "Haltu fingri á græju til að grípa hana." + "Ýttu tvisvar og haltu fingri á græju til að grípa hana eða notaðu sérsniðnar aðgerðir." "%1$d × %2$d" "Leita í forritum" "Hleður forrit…" @@ -52,6 +53,7 @@ "Ónefnd mappa" "Síða %1$d af %2$d" "Heimaskjár %1$d af %2$d" + "Ný síða á heimaskjá" "Komdu fagnandi" "Afritaðu forritatáknin þín" "Flytja inn tákn og möppur af eldri heimaskjáum?" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index e1e75b37f6..277b51693e 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -28,6 +28,7 @@ "Widget disabilitati in modalità provvisoria" "Mostra Mem" "Tocca e tieni premuto per scegliere un widget." + "Tocca due volte e tieni premuto per scegliere un widget o per utilizzare azioni personalizzate." "%1$d × %2$d" "Cerca app" "Caricamento di app…" @@ -52,6 +53,7 @@ "Cartella senza nome" "Pagina %1$d di %2$d" "Schermata Home %1$d di %2$d" + "Nuova pagina Schermata Home" "Benvenuto" "Copia le icone delle tue app" "Importare icone e cartelle dalle schermate Home precedenti?" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 3686abdbb9..a182a45ec2 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -28,6 +28,7 @@ "ווידג\'טים מושבתים במצב בטוח" "הצג זכרון" "גע נגיעה רציפה בווידג\'ט כדי לבחור בו." + "הקש פעמיים וגע נגיעה רציפה בווידג\'ט כדי לבחור בו, או השתמש בפעולות מותאמות אישית." "%1$d × %2$d" "חפש אפליקציות" "טוען אפליקציות…" @@ -52,6 +53,7 @@ "תיקיה ללא שם" "‏דף %1$d מתוך %2$d" "‏מסך דף הבית %1$d מתוך %2$d" + "מסך דף הבית חדש" "ברוכים הבאים" "העתקת סמלי האפליקציות שלך" "האם לייבא סמלים ותיקיות ממסכי דף הבית הישנים שלך?" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 87b3fa4992..9e25d0c086 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -28,6 +28,7 @@ "セーフモードではウィジェットは無効です" "メモリーを表示" "ウィジェットを追加するには押し続けます。" + "ダブルタップ後に押し続けてウィジェットを選択するか、カスタム操作を使用してください。" "%1$dx%2$d" "アプリを検索" "アプリを読み込んでいます…" @@ -52,6 +53,7 @@ "名前のないフォルダ" "%1$d/%2$dページ" "ホーム画面: %1$d/%2$d" + "新しいホーム画面ページ" "ようこそ" "アプリのアイコンをコピー" "古いホーム画面からアイコンとフォルダをインポートしますか?" diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index 290033088e..c2cbed60d5 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -28,6 +28,7 @@ "უსაფრთხო რეჟიმში ვიჯეტი გამორთულია" "Mem-ის ჩვენება" "შეეხეთ და დააყოვნეთ ვიჯეტის ასარჩევად." + "ორმაგად შეეხეთ და გეჭიროთ ვიჯეტის ასარჩევად ან მორგებული მოქმედებების გამოსაყენებლად." "%1$d × %2$d" "აპების ძიება" "აპები იტვირთება..." @@ -52,6 +53,7 @@ "უსახელო საქაღალდე" "გვერდი %1$d %2$d-დან" "მთავარი ეკრანი %1$d, %2$d-დან" + "მთავარი ეკრანის ახალი გვერდი" "მოგესალმებით" "თქვენი აპის ხატულების კოპირება" "გსურთ, ძველი მთავარი ეკრანიდან ხატულების და საქაღ. იმპორტი?" diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml index cae5e5edf9..7e98bf476c 100644 --- a/res/values-kk-rKZ/strings.xml +++ b/res/values-kk-rKZ/strings.xml @@ -28,6 +28,7 @@ "Қауіпсіз режимде виджеттер өшіріледі" "Жадты көрсету" "Виджетті таңдау үшін түртіп, мықтап ұстаңыз." + "Виджетті таңдау немесе арнаулы әрекеттерді таңдау үшін екі рет түртіп, ұстап тұрыңыз." "%1$d × %2$d" "Қолданбаларды іздеу" "Қолданбалар жүктелуде…" @@ -52,6 +53,7 @@ "Атауы жоқ қалта" "%1$d бет, барлығы %2$d" "%1$d негізгі экран, барлығы %2$d" + "Жаңа негізгі экран беті" "Қош келдіңіз" "Қолданба таңбаларын көшіру" "Бұрынғы негізгі экрандарыңыздағы таңбалар мен қалталар импортталсын ба?" diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml index 5ffbf76160..5ce2f6afc8 100644 --- a/res/values-km-rKH/strings.xml +++ b/res/values-km-rKH/strings.xml @@ -28,6 +28,7 @@ "បាន​បិទ​ធាតុ​ក្រាហ្វិក​ក្នុង​របៀប​សុវត្ថិភាព" "បង្ហាញ​ Mem" "ប៉ះ & សង្កត់ ដើម្បី​ជ្រើស​ធាតុ​ក្រាហ្វិក។" + "ប៉ះពីរដង ហើយចុចឲ្យជាប់ដើម្បីជ្រើសយកធាតុក្រាហ្វិក ឬប្រើសកម្មភាពផ្ទាល់ខ្លួន។" "%1$d × %2$d" "ស្វែងរកកម្មវិធី" "កំពុងដំណើរការកម្មវិធី..." @@ -52,6 +53,7 @@ "ថត​គ្មាន​ឈ្មោះ" "ទំព័រ %1$d នៃ %2$d" "អេក្រង់​ដើម %1$d នៃ %2$d" + "ទំព័រអេក្រង់ដើមថ្មី" "សូម​ស្វាគមន៍​" "ចម្លង​រូបតំណាង​កម្មវិធី​របស់​អ្នក" "នាំចូល​រូបតំណាង និង​ថត​ពី​អេក្រង់​ដើម​ចាស់​របស់​អ្នក?" diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml index a1aab7b5cc..8b62e1ac59 100644 --- a/res/values-kn-rIN/strings.xml +++ b/res/values-kn-rIN/strings.xml @@ -28,6 +28,7 @@ "ಸುರಕ್ಷಿತ ಮೋಡ್‌ನಲ್ಲಿ ವಿಜೆಟ್‌ಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ" "ಸ್ಮರಣೆ ತೋರಿಸು" "ವಿಜೆಟ್ ಅನ್ನು ಆರಿಸಿಕೊಳ್ಳಲು ಸ್ಪರ್ಶಿಸಿ & ಹಿಡಿದುಕೊಳ್ಳಿ." + "ಡಬಲ್ ಟ್ಯಾಪ್ ಮಾಡಿ ಮತ್ತು ವಿಜೆಟ್ ಆರಿಸಿಕೊಳ್ಳಲು ಹೋಲ್ಡ್ ಮಾಡಿ ಅಥವಾ ಕಸ್ಟಮ್ ಕ್ರಿಯೆಗಳನ್ನು ಬಳಸಿ" "%1$d × %2$d" "ಅಪ್ಲಿಕೇಷನ್‌ಗಳನ್ನು ಹುಡುಕಿ" "ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ..." @@ -52,6 +53,7 @@ "ಹೆಸರಿಲ್ಲದ ಫೋಲ್ಡರ್" "%2$d ರಲ್ಲಿ %1$d ಪುಟ" "%2$d ರಲ್ಲಿ %1$d ಮುಖಪುಟದ ಪರದೆ" + "ಹೊಸ ಮುಖಪುಟ ಪರದೆ" "ಸುಸ್ವಾಗತ" "ಅಪ್ಲಿಕೇಶನ್‌ ಐಕಾನ್‌ ನಕಲಿಸು" "ನಿಮ್ಮ ಹಳೆಯ ಮುಖಪುಟದ ಪರದೆಗಳಿಂದ ಐಕಾನ್‌ಗಳು ಮತ್ತು ಫೋಲ್ಡರ್‌ಗಳನ್ನು ಆಮದು ಮಾಡಿಕೊಳ್ಳುವುದೇ?" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index e0697121a0..9bc777eb55 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -28,6 +28,7 @@ "안전 모드에서 위젯 사용 중지됨" "메모리 표시" "위젯을 선택하려면 길게 터치하세요." + "위젯을 선택하려면 두 번 탭한 다음 길게 터치하거나 맞춤 액션을 사용합니다." "%1$d×%2$d" "앱 검색" "앱 로드 중..." @@ -52,6 +53,7 @@ "이름이 없는 폴더" "페이지 %1$d/%2$d" "홈 화면 %1$d/%2$d" + "새로운 메인 스크린 페이지" "환영합니다." "앱 아이콘 복사" "이전 메인 스크린에서 아이콘과 폴더를 가져오시겠습니까?" diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml index c530b5c9fc..c018ab8a3b 100644 --- a/res/values-ky-rKG/strings.xml +++ b/res/values-ky-rKG/strings.xml @@ -28,6 +28,7 @@ "Виджеттер Коопсуз режимде өчүрүлгөн" "Мемди көргөзүү" "Виджетти тандаш үчүн, басып туруңуз" + "Виджет тандоо үчүн эки жолу таптап, кармап туруңуз же ыңгайлаштырылган аракеттерди колдонуңуз." "%1$d × %2$d" "Колдонмолорду издөө" "Колдонмолор жүктөлүүдө…" @@ -52,6 +53,7 @@ "Аты жок фолдер" "%2$d ичинен %1$d барак" "Үй экраны %2$d ичинен %1$d" + "Жаңы башкы экран барагы" "Кош келиңиз" "Колдонмоңуздун сүрөтчөлөрүн көчүрүү" "Эски үй экрандарыңыздан сүрөтчөлөр жана фолдерлер импорттолсунбу?" diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml index 005f0265fc..f9fa8c92e1 100644 --- a/res/values-lo-rLA/strings.xml +++ b/res/values-lo-rLA/strings.xml @@ -28,6 +28,7 @@ "​ວິດ​ເຈັດ​ຖືກ​ປິດ​ໃນ Safe mode" "ສະແດງຄວາມຈຳ" "ສຳພັດຄ້າງໄວ້ ເພື່ອຈັບວິດເຈັດ." + "ແຕະ​ຄ້າງ​ໄວ້ ເພື່ອ​ເລືອກວິດ​ເຈັດ ຫຼື ໃຊ້​ການ​ດຳ​ເນີນ​ການ​ກຳ​ນົດ​ເອງ." "%1$d × %2$d" "ຊອກຫາແອັບ" "​ກຳ​ລັງ​ໂຫລດ​ແອັບ..." @@ -52,6 +53,7 @@ "ໂຟນເດີຍັງບໍ່ຖືກຕັ້ງຊື່" "ໜ້າ %1$d ຈາກ %2$d" "ໜ້າຈໍຫຼັກ %1$d ໃນ %2$d" + "ໜ້າ​ຂອງ​ໜ້າ​ຈໍ​ຫຼັກ​ໃໝ່" "ຍິນດີຕ້ອນຮັບ" "ສຳເນົາໄອຄອນແອັບຯຂອງທ່ານ" "ນຳເຂົ້າໄອຄອນ ແລະ ໂຟນເດີຈາກໂຮມສະກຣີນອັນເກົ່າຂອງທ່ານບໍ່?" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 442874dbe8..7fe29d0176 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -28,6 +28,7 @@ "Valdikliai išjungti Saugiame režime" "Rodyti atmintinę" "Palieskite ir laikykite, kad pasirinkt. valdiklį." + "Dukart palieskite ir laikykite, kad pasirinktumėte valdiklį ar naudotumėte tinkintus veiksmus." "%1$d × %2$d" "Ieškoti programų" "Įkeliamos programos..." @@ -52,6 +53,7 @@ "Aplankas be pavadinimo" "%1$d psl. iš %2$d" "%1$d pagrindinis ekranas iš %2$d" + "Naujas pagrindinio ekrano puslapis" "Sveiki" "Programų piktogramų kopij." "Importuoti piktogramas ir aplankus iš senų pagr. ekranų?" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 1bef22e039..7fb0bbd46b 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -28,6 +28,7 @@ "Logrīki atspējoti drošajā režīmā" "Rādīt atmiņu" "Lai izvēlētos logrīku, pieskarieties un turiet to." + "Lai atlasītu logrīku, veiciet dubultskārienu uz tā un turiet to vai arī veiciet pielāgotas darbības." "%1$d × %2$d" "Meklēt lietotnes" "Notiek lietotņu ielāde…" @@ -52,6 +53,7 @@ "Mape bez nosaukuma" "%1$d. lapa no %2$d" "Sākuma ekrāns: %1$d no %2$d" + "Jauna sākuma ekrāna lapa" "Laipni lūdzam!" "Lietotņu ikonu kopēšana" "Vai importēt ikonas, mapes no iepriekšējiem sākuma ekrāniem?" diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml index 0a6704b50c..fba1f070b8 100644 --- a/res/values-mk-rMK/strings.xml +++ b/res/values-mk-rMK/strings.xml @@ -28,6 +28,7 @@ "Додатоците се оневозможени во безбеден режим" "Прикажи „Мени“" "Допри и задржи за да се избере виџетот." + "Допрете двапати и задржете за да изберете додаток или да користите приспособени дејства." "%1$d × %2$d" "Пребарување апликации" "Се вчитуваат апликации…" @@ -52,6 +53,7 @@ "Неименувана папка" "Страница %1$d од %2$d" "Екран на почетна страница %1$d од %2$d" + "Нова страница на почетен екран" "Добредојдовте" "Копирај икони за апликација" "Зачувај икони и папки од твоите стари почетни страни?" diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml index 2bd80d3584..0dad3b48e4 100644 --- a/res/values-ml-rIN/strings.xml +++ b/res/values-ml-rIN/strings.xml @@ -28,6 +28,7 @@ "സുരക്ഷിത മോഡിൽ വിജറ്റുകൾ പ്രവർത്തനരഹിതമാക്കി" "മെമ്മറി കാണിക്കുക" "ഒരു വിജറ്റ് ചേർക്കുന്നതിന് അത് സ്‌പർശിച്ച് പിടിക്കുക." + "വിജറ്റ് തിരഞ്ഞെടുക്കാനോ ഇഷ്ടാനുസൃത പ്രവർത്തനങ്ങൾ ഉപയോഗിക്കാനോ രണ്ടുതവണ ടാപ്പുചെയ്ത് പിടിക്കുക." "%1$d × %2$d" "ആപ്പ്‌സ് തിരയുക" "ആപ്പ്‌സ് ലോഡുചെയ്യുന്നു..." @@ -52,6 +53,7 @@ "പേരുനൽകാത്ത ഫോൾഡർ" "പേജ് %1$d / %2$d" "ഹോം സ്‌ക്രീൻ %1$d / %2$d" + "പുതിയ ഹോം സ്ക്രീൻ പേജ്" "സ്വാഗതം" "നിങ്ങളുടെ അപ്ലിക്കേഷൻ ഐക്കണുകൾ പകർത്തുക" "നിങ്ങളുടെ പഴയ ഹോം സ്ക്രീനുകളിൽ നിന്ന് ഐക്കണുകളും ഫോൾഡറുകളും ഇമ്പോർട്ടുചെയ്യണോ?" diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml index 19ba66fdb3..0bd5ffd6ae 100644 --- a/res/values-mn-rMN/strings.xml +++ b/res/values-mn-rMN/strings.xml @@ -28,6 +28,7 @@ "Safe горимд виджетүүдийг идэвхгүйжүүлсэн" "Мем харуулах" "Виджетийг авах бол хүрээд барина уу." + "Жижиг хэрэгсэл авах болон тохируулсан үйлдлийг ашиглахын тулд 2 удаа товшоод барина уу." "%1$d × %2$d" "Апп хайх" "Аппликейшныг ачаалж байна..." @@ -52,6 +53,7 @@ "Нэргүй фолдер" "%2$d-н %1$d хуудас" "%2$d-н Нүүр дэлгэц %1$d" + "Шинэ үндсэн нүүр хуудас" "Тавтай морилно уу" "Таны апп дүрсүүдийг хуулах" "Таны хуучин Үндсэн дэлгэц дээрх дүрсүүдийг импорт хийх үү?" diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml index dc29b54628..a88d0300dc 100644 --- a/res/values-mr-rIN/strings.xml +++ b/res/values-mr-rIN/strings.xml @@ -28,6 +28,7 @@ "विजेट सुरक्षित मोडमध्ये अक्षम झाले" "Mem दर्शवा" "विजेट निवडण्यासाठी स्पर्श करा आणि धरून ठेवा." + "एक विजेट निवडण्यासाठी दोनदा टॅप करा आणि धरून ठेवा किंवा सानुकूल क्रिया वापरा." "%1$d × %2$d" "अॅप्स शोधा" "अॅप्स लोड करीत आहे..." @@ -52,6 +53,7 @@ "अनामित फोल्डर" "%2$d पैकी %1$d पृष्ठ" "%2$d पैकी %1$d मुख्य स्क्रीन" + "नवीन मुख्य स्क्रीन पृष्ठ" "सुस्वागतम" "आपली अॅप चिन्हे कॉपी करा" "आपल्या जुन्या मुख्य स्क्रीनवरून चिन्हे आणि फोल्डर आयात करायची?" diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index 26f27488c6..38322a3de0 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -28,6 +28,7 @@ "Widget dilumpuhkan dalam mod Selamat" "Papar Mem" "Sentuh & tahan untuk mengambil widget." + "Ketik dua kali & tahan untuk mengambil widget atau menggunakan tindakan tersuai" "%1$d × %2$d" "Cari Apl" "Memuatkan Apl…" @@ -52,6 +53,7 @@ "Folder Tanpa Nama" "Halaman %1$d daripada %2$d" "Skrin Laman Utama %1$d daripada %2$d" + "Halaman skrin utama baharu" "Selamat datang" "Salin ikon apl anda" "Import ikon dan folder dari skrin Laman Utama lama anda?" diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml index c13ff7e0d9..71e84c18ce 100644 --- a/res/values-my-rMM/strings.xml +++ b/res/values-my-rMM/strings.xml @@ -28,6 +28,7 @@ "လုံခြုံရေး မုဒ်ထဲမှာ ဝီဂျက်များကို ပိတ်ထား" "Mem ကိုပြရန်" "ဝဒ်ဂျက်တစ်ခုကို ကောက်ယူရန် ဖိနှိပ်ထားပါ" + "ဝစ်ဂျက်တစ်ခုကိုရယူရန် သို့မဟုတ် စိတ်ကြိုက်လုပ်ဆောင်မှုများကို အသုံးပြုရန် နှစ်ချက်တို့ပြီး ကိုင်ထားပါ။" "%1$d × %2$d" "ရှာဖွေမှု Appများ" "App များ ရယူနေစဉ်..." @@ -52,6 +53,7 @@ "အမည်မရှိအကန့်" "စာမျက်နှာ %1$d မှ %2$d" "ပင်မစာမျက်နှာ %1$d မှ %2$d" + "ပင်မမျက်နှာပြင် စာမျက်နှာသစ်" "မင်္ဂလာပါ" "အပ်ပလီကေးရှင်းပုံညွှန်းများကို ကူးယူပါ" "ပင်မစာမျက်နှာအဟောင်းမှ ပုံညွှန်းများ နှင့် အကန့်များကို ယူလာပါမလား" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 198d56c213..0ecca67cb0 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -28,6 +28,7 @@ "Moduler er deaktivert i sikker modus" "Vis minne" "Trykk og hold inne for å plukke opp en modul." + "Dobbelttrykk og hold inne for å velge en modul eller bruke tilpassede handlinger." "%1$d × %2$d" "Søk i apper" "Laster inn apper …" @@ -52,6 +53,7 @@ "Mappe uten navn" "Side %1$d av %2$d" "Startside %1$d av %2$d" + "Ny side på startskjermen" "Velkommen" "Kopiér appikonene dine" "Vil du importere ikoner og mapper fra dine gamle startsider?" diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml index 472bd4f5d1..5379b53630 100644 --- a/res/values-ne-rNP/strings.xml +++ b/res/values-ne-rNP/strings.xml @@ -28,6 +28,7 @@ "सुरक्षित मोडमा विगेटहरू अक्षम गरियो" "Mem देखाउनुहोस्" "एउटा विजेटलाई टिप्नको लागि टच गरेर होल्ड गर्नुहोस्।" + "विजेटलाई छान्न वा अनुकूलन कार्यहरू प्रयोग गर्न डबल ट्याप गरी होल्ड गर्नुहोस्।" "%1$d × %2$d" "अनुप्रयोगहरू खोज्नुहोस्" "अनुप्रयोगहरू लोड गरिँदै..." @@ -52,6 +53,7 @@ "बेनाम फोल्डर" "पृष्ठ %2$d को %1$d" "गृह स्क्रिन %1$d को %2$d" + "नयाँ गृह स्क्रिन पृष्ठ" "स्वागतम" "तपाईँको अनुप्रयोग आईकनको प्रतिलिप गर्नुहोस्" "आफ्नो पुरानो गृह स्क्रीनबाट अाईकन र फोल्डरहरू आयात गर्नुहोस्?" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 6f4981087a..1136b9f478 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -28,6 +28,7 @@ "Widgets uitgeschakeld in Veilige modus" "Geheugen weergeven" "Blijf aanraken om een widget toe te voegen." + "Dubbeltik en blijf aanraken om een widget toe te voegen of aangepaste acties te gebruiken." "%1$d × %2$d" "Apps zoeken" "Apps laden…" @@ -52,9 +53,10 @@ "Naamloze map" "Pagina %1$d van %2$d" "Startscherm %1$d van %2$d" + "Nieuwe startschermpagina" "Welkom" - "Uw app-pictogrammen kopiëren" - "Pictogrammen en mappen importeren uit uw oude startschermen?" + "Je app-pictogrammen kopiëren" + "Pictogrammen en mappen importeren uit je oude startschermen?" "PICTOGRAMMEN KOPIËREN" "OPNIEUW BEGINNEN" "Achtergronden, widgets en instellingen" @@ -74,7 +76,7 @@ "Verwijderen" "Zoeken" "Deze app is niet geïnstalleerd" - "De app voor dit pictogram is niet geïnstalleerd. U kunt het pictogram verwijderen of de app zoeken en handmatig installeren." + "De app voor dit pictogram is niet geïnstalleerd. Je kunt het pictogram verwijderen of de app zoeken en handmatig installeren." "Toevoegen aan startpagina" "Item hier naartoe verplaatsen" "Item toegevoegd aan startscherm" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index a1fd29f56b..8218822dcf 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -28,6 +28,7 @@ "Widżety są wyłączone w trybie bezpiecznym" "Pokaż pamięć" "Aby dodać widżet, kliknij go i przytrzymaj." + "Kliknij dwukrotnie i przytrzymaj, by wybrać widżet lub użyć działań niestandardowych." "%1$d × %2$d" "Szukaj w aplikacjach" "Wczytuję aplikacje…" @@ -52,6 +53,7 @@ "Folder bez nazwy" "Strona %1$d z %2$d" "Ekran główny %1$d z %2$d" + "Nowa strona ekranu głównego" "Witamy" "Kopiuj ikony aplikacji" "Zaimportować ikony i foldery ze starych ekranów głównych?" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 0d8a431799..f3410eac2c 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -28,6 +28,7 @@ "Widgets desativados no Modo de segurança" "Mostrar mem" "Prima sem soltar para escolher um widget." + "Toque duas vezes sem soltar para escolher um widget ou utilize ações personalizadas." "%1$d × %2$d" "Pesquisar aplicações" "A carregar aplicações..." @@ -52,6 +53,7 @@ "Pasta sem nome" "Página %1$d de %2$d" "Ecrã principal %1$d de %2$d" + "Nova página do ecrã principal" "Bem-vindo(a)" "Copiar ícones das aplicações" "Importar ícones e pastas dos ecrãs principais antigos?" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 41e5c021e9..857b9b07cf 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -28,6 +28,7 @@ "Widgets desativados no modo de segurança" "Mostrar memória" "Toque e pressione para selecionar um widget." + "Toque duas vezes e segure para selecionar um widget ou usar ações personalizadas." "%1$d × %2$d" "Pesquisar apps" "Carregando apps…" @@ -52,6 +53,7 @@ "Pasta sem nome" "Página %1$d de %2$d" "Tela inicial %1$d de %2$d" + "Nova página na tela inicial" "Bem-vindo" "Copiar ícones de apps" "Importar ícones e pastas de suas telas iniciais antigas?" diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index ffaca78569..91b542b5bd 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -28,6 +28,7 @@ "Widgeturile sunt dezactivate în modul de siguranță" "Afișați memoria" "Atingeți lung un widget pentru a-l alege." + "Atingeți de două ori și mențineți apăsat ca să alegeți un widget sau folosiți acțiuni personalizate." "%1$d × %2$d" "Căutați aplicații" "Se încarcă aplicațiile..." @@ -52,6 +53,7 @@ "Dosar fără nume" "Pagina %1$d din %2$d" "Ecranul de pornire %1$d din %2$d" + "Pagină nouă pe ecranul de pornire" "Bun venit" "Copiați pictogr. aplicațiilor" "Import. pictogr. și dosare de pe ecranele de pornire anter.?" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 6e69e4dee7..570967a77e 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -28,6 +28,7 @@ "Виджеты отключены в безопасном режиме" "Сведения о памяти" "Чтобы выбрать виджет, нажмите на значок и удерживайте его." + "Чтобы выбрать виджет, нажмите на него дважды и не отпускайте или выполните предложенные действия." "%1$d x %2$d" "Поиск приложений" "Загрузка…" @@ -37,7 +38,7 @@ "В разделе \"Избранное\" больше нет места" "Приложения" "Главный экран" - "Удалить" + "Убрать" "Удалить" "О приложении" "Создание ярлыков" @@ -52,6 +53,7 @@ "Папка без названия" "Стр. %1$d из %2$d" "Главные экран %1$d из %2$d" + "Новый экран" "Добро пожаловать!" "Копировать значки приложений" "Импортировать значки и папки со старого главного экрана?" diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml index 476fff8167..8fc70fcce1 100644 --- a/res/values-si-rLK/strings.xml +++ b/res/values-si-rLK/strings.xml @@ -28,6 +28,7 @@ "සුරක්ෂිත ආකාරය තුළ විජටය අබල කරන ලදි" "Mem පෙන්වන්න" "විජට් එක ස්පර්ශ කර අහුලා ගැනීමට අල්ලාගෙන සිටින්න." + "විජට් එකක් අහුලා ගැනීමට හෝ අභිරුචි ක්‍රියා කිරීමට ඩබල් ටැප් කර අල්ලා ගෙන සිටින්න." "%1$d × %2$d" "යෙදුම් සෙවීම" "යෙදුම් පූරණය වෙමින්…" @@ -52,6 +53,7 @@ "නම් නොකළ ෆෝල්ඩරය" "%2$d හි %1$d පිටුව" "මුල් පිටු තිරය %2$d හි %1$d" + "නව මුල් පිටුව" "සාදරයෙන් පිළිගනිමු" "ඔබේ යෙදුම් නිරූපක පිටපත් කිරීම" "ඔබගේ පැරණි මුල් තිර වල නිරූපක සහ ෆෝල්ඩර ආයාත කරන්නද?" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 703b46cb44..0245c0a799 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -28,6 +28,7 @@ "Miniaplikácie sú v núdzovom režime zakázané" "Zobraziť pamäť" "Miniaplikáciu pridáte stlačením a podržaním." + "Miniaplikáciu pridáte dvojitým klepnutím a pridržaním alebo pomocou vlastných akcií." "%1$d × %2$d" "Vyhľadávanie v aplikáciách" "Načítavajú sa aplikácie..." @@ -52,6 +53,7 @@ "Nepomenovaný priečinok" "Stránka %1$d z %2$d" "Plocha %1$d z %2$d" + "Nová stránka plochy" "Vitajte!" "Kopírovanie ikon aplikácií" "Chcete importovať ikony a priečinky zo starých plôch?" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 497378b788..e6853be151 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -28,6 +28,7 @@ "Pripomočki so onemogočeni v varnem načinu" "Pokaži pomnilnik" "Za izbiro pripomočka se ga dotaknite in pridržite." + "Če želite izbrati pripomoček ali uporabiti dejanja po meri, se ga dvakrat dotaknite in ga pridržite." "%1$d × %2$d" "Iskanje po aplikacijah" "Nalaganje aplikacij …" @@ -52,6 +53,7 @@ "Neimenovana mapa" "Stran %1$d od %2$d" "Začetni zaslon %1$d od %2$d" + "Nova stran na začetnem zaslonu" "Pozdravljeni" "Kopiranje ikon aplikacij" "Želite uvoziti ikone in mape iz starih začetnih zaslonov?" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index f21aae0198..ce4ea1bcb6 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -28,6 +28,7 @@ "Виџети су онемогућени у Безбедном режиму" "Прикажи меморију" "Додирните и задржите да бисте изабрали виџет." + "Двапут додирните и задржите да бисте изабрали виџет или користите прилагођене радње." "%1$d×%2$d" "Претражите апликације" "Апликације се учитавају..." @@ -52,6 +53,7 @@ "Неименовани директоријум" "%1$d. страница од %2$d" "%1$d. почетни екран од %2$d" + "Нова страница почетног екрана" "Добро дошли" "Копирајте иконе апликација" "Увести иконе и директоријуме са старих почетних екрана?" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 385d7a6f64..decc583177 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -28,6 +28,7 @@ "Widgets är inaktiverade i felsäkert läge" "Visa Mem" "Tryck länge om du vill flytta en widget." + "Tryck två gånger och håll kvar om du vill ta upp en widget eller använda anpassade åtgärder." "%1$d × %2$d" "Sök efter appar" "Läser in appar …" @@ -52,6 +53,7 @@ "Namnlös mapp" "Sidan %1$d av %2$d" "Startskärmen %1$d av %2$d" + "Ny sida på startskärmen" "Välkommen" "Kopiera appikoner" "Vill du importera ikoner och mappar från gamla startskärmar?" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index b86fb7325e..93b4e97844 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -28,6 +28,7 @@ "Wijeti zimezimwa katika hali ya Usalama" "Onyesha Kumbukumbu" "Gusa na ushikilie ili kuteua wijeti." + "Gonga mara mbili na ushikilie ile uchague wijeti au utumie vitendo maalum." "%1$d × %2$d" "Tafuta Programu" "Inapakia Programu..." @@ -54,6 +55,7 @@ + "Ukurasa mpya wa skrini ya kwanza" "Karibu" "Nakili ikoni za programu yako" "Je, ungependa kuingiza ikoni na folda kutoka kwenye skrini zako za Mwanzo za zamani?" diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml index 9dac6d011a..b3f48cba14 100644 --- a/res/values-ta-rIN/strings.xml +++ b/res/values-ta-rIN/strings.xml @@ -28,6 +28,7 @@ "பாதுகாப்புப் பயன்முறையில் விட்ஜெட்கள் முடக்கப்பட்டுள்ளன" "நினைவகத்தைக் காட்டு" "விட்ஜெட்டைத் தேர்வுசெய்ய தொட்டுப் பிடிக்கவும்." + "விட்ஜெட்டைத் தேர்ந்தெடுக்க இருமுறை தட்டிப் பிடிக்கவும் அல்லது தனிப்பயன் செயல்களைப் பயன்படுத்தவும்." "%1$d × %2$d" "பயன்பாடுகளில் தேடுக" "பயன்பாடுகளை ஏற்றுகிறது..." @@ -52,6 +53,7 @@ "பெயரிடப்படாத கோப்புறை" "பக்கம் %1$d / %2$d" "முகப்புத் திரை %1$d of %2$d" + "புதிய முகப்புத் திரை பக்கம்" "நல்வரவு" "பயன்பாட்டின் ஐகான்களை நகலெடுக்கவும்" "பழைய முகப்புத் திரைகளிலிருந்து ஐகான்களையும் கோப்புறைகளையும் இறக்குமதி செய்யவா?" diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml index 32cb292a1a..8e02d9a76f 100644 --- a/res/values-te-rIN/strings.xml +++ b/res/values-te-rIN/strings.xml @@ -28,6 +28,7 @@ "సురక్షిత మోడ్‌లో విడ్జెట్‌లు నిలిపివేయబడ్డాయి" "మెమరీ చూపు" "విడ్జెట్‌ను ఎంచుకోవడానికి తాకి & నొక్కి పెట్టండి." + "విడ్జెట్‌ను ఎంచుకోవడానికి లేదా అనుకూల చర్యలను ఉపయోగించడానికి రెండుసార్లు నొక్కి, ఉంచండి." "%1$d × %2$d" "అనువర్తనాలను శోధించండి" "అనువర్తనాలను లోడ్ చేస్తోంది…" @@ -52,6 +53,7 @@ "పేరు లేని ఫోల్డర్" "%2$dలో %1$dవ పేజీ" "%2$dలో %1$dవ హోమ్ స్క్రీన్" + "కొత్త హోమ్ స్క్రీన్ పేజీ" "స్వాగతం" "మీ అనువర్తన చిహ్నాలను కాపీ చేయండి" "మీ పాత హోమ్ స్క్రీన్‌ల నుండి చిహ్నాలు మరియు ఫోల్డర్‌లను దిగుమతి చేయాలా?" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 53ae5896b1..25ef7cee49 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -28,6 +28,7 @@ "มีการปิดใช้งานวิดเจ็ตในเซฟโหมด" "แสดง Mem" "แตะค้างเพื่อรับวิดเจ็ต" + "แตะ 2 ครั้งค้างไว้เพื่อเลือกวิดเจ็ตหรือใช้การกระทำที่กำหนดเอง" "%1$d × %2$d" "ค้นหาแอป" "กำลังโหลดแอป…" @@ -52,6 +53,7 @@ "โฟลเดอร์ที่ไม่มีชื่อ" "หน้า %1$d จาก %2$d" "หน้าจอหลัก %1$d จาก %2$d" + "หน้าใหม่ในหน้าจอหลัก" "ยินดีต้อนรับ" "คัดลอกไอคอนแอปของคุณ" "นำเข้าไอคอนและโฟลเดอร์จากหน้าจอหลักเก่าของคุณ" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 43afeab530..95d3319997 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -28,6 +28,7 @@ "Naka-disable ang mga widget sa Safe mode" "Ipakita ang Mem" "Pindutin nang matagal upang kumuha ng widget." + "I-double tap nang matagal upang pumili ng widget o gumamit ng mga custom na pagkilos." "%1$d × %2$d" "Mga App sa Paghahanap" "Nilo-load ang Mga App…" @@ -52,6 +53,7 @@ "Walang Pangalang Folder" "Pahina %1$d ng %2$d" "Home screen %1$d ng %2$d" + "Bagong page ng home screen" "Maligayang Pagdating" "Kopyahin ang mga icon ng app" "I-import ang icon at folder mula sa luma mong Home screen?" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 064d0496a0..50aca1b6ea 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -28,6 +28,7 @@ "Güvenli modda widget\'lar devre dışı" "Belleği Göster" "Widget seçmek için dokunun ve basılı tutun." + "Bir widget\'ı seçmek veya özel işlemleri kullanmak için iki kez hafifçe dokunun ve basılı tutun." "%1$d × %2$d" "Uygulamalarda Ara" "Uygulamalar Yükleniyor…" @@ -52,6 +53,7 @@ "Adsız Klasör" "Sayfa %1$d / %2$d" "Ana ekran %1$d / %2$d" + "Yeni ana ekran sayfası" "Hoş geldiniz" "Uygulama simgelerini kopyala" "Eski Ana ekranlarınızdaki simgeler ve klasörler içe aktarılsın mı?" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index ff9364e5f4..10c5a8f180 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -28,6 +28,7 @@ "У безпечному режимі віджети вимкнено" "Показати пам’ять" "Натисніть і утримуйте, щоб вибрати віджет." + "Двічі натисніть і утримуйте, щоб вибрати віджет, або виконайте іншу дію." "%1$d × %2$d" "Пошук додатків" "Завантаження додатків…" @@ -52,6 +53,7 @@ "Папка без назви" "Сторінка %1$d з %2$d" "Головний екран %1$d з %2$d" + "Нова сторінка головного екрана" "Вітаємо" "Копіювати значки програм" "Імпортувати значки та папки зі старих головних екранів?" diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml index f3d631173c..7db471ff80 100644 --- a/res/values-ur-rPK/strings.xml +++ b/res/values-ur-rPK/strings.xml @@ -28,6 +28,7 @@ "ویجیٹس کو محفوظ وضع میں غیر فعال کر دیا گیا" "‏Mem دکھائیں" "کوئی ویجیٹ منتخب کرنے کیلئے ٹچ کریں اور پکڑے رہیں۔" + "کوئی ویجٹ منتخب کرنے یا حسب ضرورت کاروائیاں استعمال کرنے کیلئے دو بار تھپتھپائیں اور پکڑے رکھیں۔" "%1$d × %2$d" "ایپس تلاش کریں" "ایپس لوڈ ہو رہی ہیں…" @@ -52,6 +53,7 @@ "بلا نام فولڈر" "‏صفحہ ‎%1$d از ‎%2$d" "‏ہوم اسکرین ‎%1$d از ‎%2$d" + "نیا ہوم اسکرین صفحہ" "خوش آمدید" "اپنے ایپ آئیکنز کو کاپی کریں" "اپنی پرانی ہوم اسکرینوں سے آئیکنز اور فولڈرز درآمد کریں؟" diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml index 24e4c4d14d..6fa016cc6f 100644 --- a/res/values-uz-rUZ/strings.xml +++ b/res/values-uz-rUZ/strings.xml @@ -28,6 +28,7 @@ "Xavfsiz rejimda vidjetlar o‘chirib qo‘yilgan" "Xotirani ko‘rsatish" "Vidjetni tanlash uchun bosib turing." + "Ikki marta bosib va bosib turgan holatda vidjetni tanlang yoki maxsus amaldan foydalaning." "%1$d × %2$d" "Ilovalarni qidirish" "Ilovalar yuklanmoqda…" @@ -52,6 +53,7 @@ "Nomsiz jild" "%2$ddan %1$d ta sahifa" "Uy ekrani %2$ddan %1$d" + "Yangi bosh ekran sahifasi" "Xush kelibsiz" "Ilovangiz nishonchalaridan nusxa olish" "Eski \"Uy\" ekranlaringizdan jildlar va nishonchalar import qilinsinmi?" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 6eff50760f..de8b962856 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -28,6 +28,7 @@ "Tiện ích con bị vô hiệu hóa ở chế độ an toàn" "Hiển thị bộ nhớ" "Chạm và giữ để chọn tiện ích con." + "Nhấn đúp & giữ để chọn tiện ích con hoặc sử dụng tác vụ tùy chỉnh." "%1$d × %2$d" "Tìm kiếm ứng dụng" "Đang tải ứng dụng..." @@ -52,6 +53,7 @@ "Thư mục chưa đặt tên" "Trang %1$d / %2$d" "Màn hình chính %1$d / %2$d" + "Trang màn hình chính mới" "Chào mừng" "Sao chép biểu tượng ứng dụng của bạn" "Nhập biểu tượng và thư mục từ Màn hình chính cũ của bạn?" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 77f07c9559..39a5410ea9 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -28,6 +28,7 @@ "安全模式下不允许使用小部件" "显示内存空间" "触摸并按住小部件即可选择。" + "点按两次并按住小部件即可选择小部件,您也可以使用自定义操作。" "%1$d × %2$d" "搜索应用" "正在加载应用…" @@ -52,6 +53,7 @@ "未命名文件夹" "第%1$d页,共%2$d页" "主屏幕:第%1$d屏,共%2$d屏" + "主屏幕新页面" "欢迎使用" "复制应用图标" "要导入旧的主屏幕中的图标和文件夹吗?" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 62032ecaa5..6f2f2c0aa8 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -28,6 +28,7 @@ "在安全模式中無法使用小工具" "顯示記憶體" "輕觸並按住小工具即可選取。" + "連扲兩下,然後扲住,就可以新增小工具,或者執行自訂操作。" "%1$d × %2$d" "搜尋應用程式" "正在載入應用程式…" @@ -52,6 +53,7 @@ "未命名的資料夾" "第 %1$d 頁,共 %2$d 頁" "主畫面 %1$d,共 %2$d 個" + "新主畫面頁面" "歡迎" "複製您的應用程式圖示" "要從舊主畫面匯入圖示和資料夾嗎?" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 0b3f4d6bc5..41dd307db2 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -28,6 +28,7 @@ "在安全模式下無法使用小工具" "顯示記憶體" "輕觸並按住小工具即可選取。" + "輕按兩下並按住小工具即可選取,您也可以使用自訂動作。" "%1$d × %2$d" "搜尋應用程式" "正在載入應用程式…" @@ -52,6 +53,7 @@ "未命名的資料夾" "第 %1$d 頁,共 %2$d 頁" "主螢幕:第 %1$d 頁,共 %2$d 頁" + "新的主畫面頁面" "歡迎使用" "複製您的應用程式圖示" "要從舊的主螢幕匯入圖示和資料夾嗎?" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index bb49f1f0ad..bdab4c3da0 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -28,6 +28,7 @@ "Amawijethi akhutshaziwe kwimodi yokuphepha" "Bonisa i-Mem" "Thinta uphinde ubambe ukuze uphakamise iwijethi." + "Thepha kabili bese uyabamba ukuze uthathe iwijethi noma sebenzisa izenzo ezingokwezifiso." "%1$d × %2$d" "Sesha Izinhlelo Zokusebenza" "Ilayisha izinhlelo zokusebenza..." @@ -52,6 +53,7 @@ "Ifolda engenagama" "Ikhasi elingu-%1$d kwangu-%2$d" "Isikrini sasekhaya esingu-%1$d se-%2$d" + "Ikhasi elisha lesikrini sasekhaya" "Siyakwamukela" "Kopisha izithonjana zakho zohlelo lokusebenza" "Ngenisa izithonjana namafolda kusukela kuzikrini zakho ezindala zasekhaya?" From 91dd087271807980638a490fd8072d28a39ada8d Mon Sep 17 00:00:00 2001 From: Geoff Mendal Date: Wed, 30 Sep 2015 14:08:36 -0500 Subject: [PATCH 042/219] Import translations. DO NOT MERGE Auto-generated-cl: translation import Bug: 22482938 Change-Id: Id607b75f77fe89ee801336c8bc3e7d7db3ad59fa --- res/values-nl/strings.xml | 6 +++--- res/values-ru/strings.xml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 6f4981087a..ac793caf80 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -53,8 +53,8 @@ "Pagina %1$d van %2$d" "Startscherm %1$d van %2$d" "Welkom" - "Uw app-pictogrammen kopiëren" - "Pictogrammen en mappen importeren uit uw oude startschermen?" + "Je app-pictogrammen kopiëren" + "Pictogrammen en mappen importeren uit je oude startschermen?" "PICTOGRAMMEN KOPIËREN" "OPNIEUW BEGINNEN" "Achtergronden, widgets en instellingen" @@ -74,7 +74,7 @@ "Verwijderen" "Zoeken" "Deze app is niet geïnstalleerd" - "De app voor dit pictogram is niet geïnstalleerd. U kunt het pictogram verwijderen of de app zoeken en handmatig installeren." + "De app voor dit pictogram is niet geïnstalleerd. Je kunt het pictogram verwijderen of de app zoeken en handmatig installeren." "Toevoegen aan startpagina" "Item hier naartoe verplaatsen" "Item toegevoegd aan startscherm" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 6e69e4dee7..d1be82b4f3 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -37,7 +37,7 @@ "В разделе \"Избранное\" больше нет места" "Приложения" "Главный экран" - "Удалить" + "Убрать" "Удалить" "О приложении" "Создание ярлыков" From 5fbe0746dd0bc8b8ef187c616084e75e0d7c8468 Mon Sep 17 00:00:00 2001 From: Winson Date: Wed, 30 Sep 2015 15:33:00 -0700 Subject: [PATCH 043/219] =?UTF-8?q?Don=E2=80=99t=20create=20dummy=20app=20?= =?UTF-8?q?info.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: 24539514 Change-Id: I5d14a4d9993e072451f8e7ed9a4cea219ae5d246 --- src/com/android/launcher3/BubbleTextView.java | 11 +++++++++++ src/com/android/launcher3/Launcher.java | 15 ++------------- .../launcher3/allapps/AllAppsContainerView.java | 13 ++++++++----- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index 0742b0e50f..7e790c6abe 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -25,6 +25,8 @@ import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Region; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Build; import android.util.AttributeSet; @@ -187,6 +189,15 @@ public class BubbleTextView extends TextView verifyHighRes(); } + /** + * Used for measurement only, sets some dummy values on this view. + */ + public void applyDummyInfo() { + ColorDrawable d = new ColorDrawable(); + setIcon(mLauncher.resizeIconDrawable(d), mIconSize); + setText(""); + } + /** * Overrides the default long press timeout. */ diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 370f695862..56c8d76cab 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -4678,18 +4678,6 @@ public class Launcher extends Activity UserHandleCompat.myUserHandle()); } - /** - * Generates a dummy AppInfo for us to use to calculate BubbleTextView sizes. - */ - public AppInfo createDummyAppInfo() { - Intent intent = new Intent(); - intent.setComponent(new ComponentName(this, Launcher.class)); - PackageManager pm = getPackageManager(); - ResolveInfo info = pm.resolveActivity(intent, 0); - return new AppInfo(this, LauncherActivityInfoCompat.fromResolveInfo(info, this), - UserHandleCompat.myUserHandle(), mIconCache); - } - // TODO: This method should be a part of LauncherSearchCallback public void startDrag(View dragView, ItemInfo dragInfo, DragSource source) { dragView.setTag(dragInfo); @@ -4721,8 +4709,9 @@ public class Launcher extends Activity /** * Resizes an icon drawable to the correct icon size. */ - public void resizeIconDrawable(Drawable icon) { + public Drawable resizeIconDrawable(Drawable icon) { icon.setBounds(0, 0, mDeviceProfile.iconSizePx, mDeviceProfile.iconSizePx); + return icon; } /** diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index 90f1322315..f9bb134503 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -336,15 +336,18 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc // Precalculate the prediction icon and normal icon sizes LayoutInflater layoutInflater = LayoutInflater.from(getContext()); - BubbleTextView icon = (BubbleTextView) layoutInflater.inflate(R.layout.all_apps_icon, this, false); - icon.applyFromApplicationInfo(mLauncher.createDummyAppInfo()); + BubbleTextView icon = (BubbleTextView) layoutInflater.inflate( + R.layout.all_apps_icon, this, false); + icon.applyDummyInfo(); icon.measure(MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE, MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE, MeasureSpec.AT_MOST)); - BubbleTextView predIcon = (BubbleTextView) layoutInflater.inflate(R.layout.all_apps_prediction_bar_icon, this, false); - predIcon.applyFromApplicationInfo(mLauncher.createDummyAppInfo()); + BubbleTextView predIcon = (BubbleTextView) layoutInflater.inflate( + R.layout.all_apps_prediction_bar_icon, this, false); + predIcon.applyDummyInfo(); predIcon.measure(MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE, MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE, MeasureSpec.AT_MOST)); - mAppsRecyclerView.setPremeasuredIconHeights(predIcon.getMeasuredHeight(), icon.getMeasuredHeight()); + mAppsRecyclerView.setPremeasuredIconHeights(predIcon.getMeasuredHeight(), + icon.getMeasuredHeight()); updateBackgroundAndPaddings(); } From c469aadd923d13caaf8c043813aa9582a50a8cd4 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 1 Oct 2015 11:24:23 -0700 Subject: [PATCH 044/219] Adding progress information for preload icons in content description Bug: 24086091 Change-Id: Id8fb024973f4affd998627d30077e2764b07edc4 --- res/values/strings.xml | 4 ++++ src/com/android/launcher3/BubbleTextView.java | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index f93b363ccb..91dfb19f36 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -191,6 +191,10 @@ The app for this icon isn\'t installed. You can remove it, or search for the app and install it manually. + + %1$s downloading, %2$s complete + + %1$s waiting to install diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index 0742b0e50f..a6a1f4e3f6 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -40,6 +40,8 @@ import android.widget.TextView; import com.android.launcher3.IconCache.IconLoadRequest; import com.android.launcher3.model.PackageItemInfo; +import java.text.NumberFormat; + /** * TextView that draws a bubble behind the text. We cannot use a LineBackgroundSpan * because we want to make the bubble taller than the text and TextView's clip is @@ -440,6 +442,11 @@ public class BubbleTextView extends TextView ((info.hasStatusFlag(ShortcutInfo.FLAG_INSTALL_SESSION_ACTIVE) ? info.getInstallProgress() : 0)) : 100; + setContentDescription(progressLevel > 0 ? + getContext().getString(R.string.app_downloading_title, info.title, + NumberFormat.getPercentInstance().format(progressLevel * 0.01)) : + getContext().getString(R.string.app_waiting_download_title, info.title)); + if (mIcon != null) { final PreloadIconDrawable preloadDrawable; if (mIcon instanceof PreloadIconDrawable) { From a2dc7c351d1455f578bf424b13dbf033344799ea Mon Sep 17 00:00:00 2001 From: Winson Date: Thu, 1 Oct 2015 12:19:23 -0700 Subject: [PATCH 045/219] Fixing regression in search bar animation. - The other case should fall through to the animation even when there is no search bar overlay. Change-Id: Id91bea78b56934cc1c3379777068adc100f11dba --- .../launcher3/LauncherStateTransitionAnimation.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/com/android/launcher3/LauncherStateTransitionAnimation.java b/src/com/android/launcher3/LauncherStateTransitionAnimation.java index 5b8af97585..47b0a91668 100644 --- a/src/com/android/launcher3/LauncherStateTransitionAnimation.java +++ b/src/com/android/launcher3/LauncherStateTransitionAnimation.java @@ -274,7 +274,7 @@ public class LauncherStateTransitionAnimation { if (overlaySearchBarView != null) { overlaySearchBarView.setAlpha(0f); ObjectAnimator searchBarAlpha = ObjectAnimator.ofFloat(overlaySearchBarView, "alpha", 0f, 1f); - searchBarAlpha.setDuration(100); + searchBarAlpha.setDuration(revealDuration / 2); searchBarAlpha.setInterpolator(new AccelerateInterpolator(1.5f)); layerViews.put(overlaySearchBarView, BUILD_AND_SET_LAYER); animation.play(searchBarAlpha); @@ -593,8 +593,8 @@ public class LauncherStateTransitionAnimation { if (overlaySearchBarView != null) { overlaySearchBarView.setAlpha(1f); ObjectAnimator searchAlpha = ObjectAnimator.ofFloat(overlaySearchBarView, "alpha", 1f, 0f); - searchAlpha.setDuration(material ? 100 : 150); - searchAlpha.setInterpolator(decelerateInterpolator); + searchAlpha.setDuration(revealDuration / 2); + searchAlpha.setInterpolator(new AccelerateInterpolator(1.5f)); searchAlpha.setStartDelay(material ? 0 : itemsAlphaStagger + SINGLE_FRAME_DELAY); layerViews.put(overlaySearchBarView, BUILD_AND_SET_LAYER); animation.play(searchAlpha); @@ -730,9 +730,9 @@ public class LauncherStateTransitionAnimation { return; } } - // Fallback to the default search bar animation otherwise - mLauncher.getSearchDropTargetBar().animateToState(toSearchBarState, duration); } + // Fallback to the default search bar animation otherwise + mLauncher.getSearchDropTargetBar().animateToState(toSearchBarState, duration); } /** From 12fb9fc3c3133c3a748deef7a0265e6a11a24cd6 Mon Sep 17 00:00:00 2001 From: Winson Date: Thu, 1 Oct 2015 15:34:08 -0700 Subject: [PATCH 046/219] Replace Long.compare() with implementation. - Long.compare() was added in API level 19. Change-Id: Ic7020c941403c10daa6feacdc737c6a82676ada0 --- src/com/android/launcher3/LauncherModel.java | 4 ++-- src/com/android/launcher3/Utilities.java | 7 +++++++ .../android/launcher3/util/ManagedProfileHeuristic.java | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 1b0b3a4fd0..a0e287ae24 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -2387,7 +2387,7 @@ public class LauncherModel extends BroadcastReceiver Collections.sort(allWorkspaceItems, new Comparator() { @Override public int compare(ItemInfo lhs, ItemInfo rhs) { - return Long.compare(lhs.container, rhs.container); + return Utilities.longCompare(lhs.container, rhs.container); } }); for (ItemInfo info : allWorkspaceItems) { @@ -2469,7 +2469,7 @@ public class LauncherModel extends BroadcastReceiver lhs.cellY * cellCountX + lhs.cellX); long rr = (rhs.container * containerOffset + rhs.screenId * screenOffset + rhs.cellY * cellCountX + rhs.cellX); - return Long.compare(lr, rr); + return Utilities.longCompare(lr, rr); } }); } diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index d054da31cd..2ed9a25ada 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -747,4 +747,11 @@ public final class Utilities { return msg; } } + + /** + * Replacement for Long.compare() which was added in API level 19. + */ + public static int longCompare(long lhs, long rhs) { + return lhs < rhs ? -1 : (lhs == rhs ? 0 : 1); + } } diff --git a/src/com/android/launcher3/util/ManagedProfileHeuristic.java b/src/com/android/launcher3/util/ManagedProfileHeuristic.java index 74fc92a04e..849b05c0af 100644 --- a/src/com/android/launcher3/util/ManagedProfileHeuristic.java +++ b/src/com/android/launcher3/util/ManagedProfileHeuristic.java @@ -156,7 +156,7 @@ public class ManagedProfileHeuristic { @Override public int compare(ShortcutInfo lhs, ShortcutInfo rhs) { - return Long.compare(lhs.firstInstallTime, rhs.firstInstallTime); + return Utilities.longCompare(lhs.firstInstallTime, rhs.firstInstallTime); } }); From 6bec75fe70d700e4c8e9b0ddfacb132d49b8cc19 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 1 Oct 2015 18:50:48 -0700 Subject: [PATCH 047/219] Do not reinflate/rebind widgets if we are going the rebind the full workspace anyway. Bug: 23820213 Bug: 24582781 Change-Id: I2cb4927916fed64a69100beb41ee14653ea1d70a --- src/com/android/launcher3/Launcher.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 56c8d76cab..8d3b14cbb5 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1047,7 +1047,9 @@ public class Launcher extends Activity // Consequently, the widgets will be inflated in the orientation of the foreground activity // (framework issue). On resuming, we ensure that any widgets are inflated for the current // orientation. - getWorkspace().reinflateWidgetsIfNecessary(); + if (!isWorkspaceLoading()) { + getWorkspace().reinflateWidgetsIfNecessary(); + } reinflateQSBIfNecessary(); if (DEBUG_RESUME_TIME) { From a682a5d8c747ac9cbbe10fb791a0548863422270 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 1 Oct 2015 19:35:03 -0700 Subject: [PATCH 048/219] Make sure that the dimensions are not negative when drawing pending widget Bug: 24585203 Change-Id: I3d328d0e1fe81d2704bb5b9d4b340a367bfb9249 --- src/com/android/launcher3/PendingAppWidgetHostView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/PendingAppWidgetHostView.java b/src/com/android/launcher3/PendingAppWidgetHostView.java index 1d7694598a..85d8658a69 100644 --- a/src/com/android/launcher3/PendingAppWidgetHostView.java +++ b/src/com/android/launcher3/PendingAppWidgetHostView.java @@ -218,7 +218,7 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView implemen mRect.offsetTo((getWidth() - mRect.width()) / 2, (getHeight() - mRect.height()) / 2); mCenterDrawable.setBounds(mRect); } else { - float iconSize = Math.min(availableWidth, availableHeight); + float iconSize = Math.max(0, Math.min(availableWidth, availableHeight)); // Use twice the setting size factor, as the setting is drawn at a corner and the // icon is drawn in the center. From 058c21db49f4f058b7d84c8de55d3c649918ab70 Mon Sep 17 00:00:00 2001 From: Winson Date: Fri, 2 Oct 2015 10:14:14 -0700 Subject: [PATCH 049/219] Ensure accessibility delegate is set on all apps icons. Bug: 24605237 Change-Id: I801e2aca1732c021b06d996d907f368f97277cf9 --- src/com/android/launcher3/allapps/AllAppsGridAdapter.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java index 1f95133d49..dfad22fd0e 100644 --- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java +++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java @@ -40,6 +40,7 @@ import android.widget.TextView; import com.android.launcher3.AppInfo; import com.android.launcher3.BubbleTextView; import com.android.launcher3.Launcher; +import com.android.launcher3.LauncherAppState; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.util.Thunk; @@ -461,6 +462,8 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter Date: Fri, 2 Oct 2015 11:25:46 -0700 Subject: [PATCH 050/219] Fixing regression in removing widgets via accessibility. - Regression was introduced in ag/765323, but not visible in normal drag and drop because the view is already removed from the parent. However, when accessibility is enabled, it was only removing it from the db, but not from the parents. Change-Id: I37483d0cd6306d270441b11e6f05247d58b88521 --- src/com/android/launcher3/Launcher.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 8d3b14cbb5..94cf85e594 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2447,6 +2447,7 @@ public class Launcher extends Activity } else if (itemInfo instanceof LauncherAppWidgetInfo) { final LauncherAppWidgetInfo widgetInfo = (LauncherAppWidgetInfo) itemInfo; unbindAppWidget(widgetInfo, deleteFromDb); + mWorkspace.removeWorkspaceItem(v); if (deleteFromDb) { LauncherModel.deleteItemFromDatabase(this, widgetInfo); } From c84e6e19363c590bbfbac17e9ab7cc61a04d552a Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 2 Oct 2015 12:48:37 -0700 Subject: [PATCH 051/219] Disabling widget debug Change-Id: I876a904358ce455c97a7a25a34c66af5e9316469 --- src/com/android/launcher3/Launcher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 547f849150..5a5bad7e54 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -135,7 +135,7 @@ public class Launcher extends Activity static final boolean LOGD = false; static final boolean PROFILE_STARTUP = false; - static final boolean DEBUG_WIDGETS = true; + static final boolean DEBUG_WIDGETS = false; static final boolean DEBUG_STRICT_MODE = false; static final boolean DEBUG_RESUME_TIME = false; static final boolean DEBUG_DUMP_LOG = false; From 6febe1f3613a3b994fa4a2bfad3a14f80f3b0126 Mon Sep 17 00:00:00 2001 From: Winson Date: Fri, 2 Oct 2015 17:14:14 -0700 Subject: [PATCH 052/219] Fixing regression when removing last item from folder. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - The regression caused the folder and all its contents to be removed before the new item could be moved to the place of the folder. In addition, in this case, the LauncherModel would get out of sync with the db because we move the last item to the workspace, but don’t remove it from the contents, so deleting the folder would remove the item’s mapping in sBgItemIdMap. Bug: 24620815 Change-Id: I17137f28b0f1617a890488c7a9c5b8a9e8df0e91 --- src/com/android/launcher3/Folder.java | 40 +++++++++++++++------------ 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index 1499a27369..18918612c3 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -1116,31 +1116,37 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList Runnable onCompleteRunnable = new Runnable() { @Override public void run() { - CellLayout cellLayout = mLauncher.getCellLayout(mInfo.container, mInfo.screenId); + int itemCount = getItemCount(); + if (itemCount <= 1) { + View newIcon = null; - // Remove the folder - if (getItemCount() <= 1) { + if (itemCount == 1) { + // Move the item from the folder to the workspace, in the position of the + // folder + CellLayout cellLayout = mLauncher.getCellLayout(mInfo.container, + mInfo.screenId); + ShortcutInfo finalItem = mInfo.contents.remove(0); + newIcon = mLauncher.createShortcut(cellLayout, finalItem); + LauncherModel.addOrMoveItemInDatabase(mLauncher, finalItem, mInfo.container, + mInfo.screenId, mInfo.cellX, mInfo.cellY); + } + + // Remove the folder mLauncher.removeItem(mFolderIcon, mInfo, true /* deleteFromDb */); if (mFolderIcon instanceof DropTarget) { mDragController.removeDropTarget((DropTarget) mFolderIcon); } - } - // Move the item from the folder to the workspace, in the position of the folder - if (getItemCount() == 1) { - ShortcutInfo finalItem = mInfo.contents.get(0); - View child = mLauncher.createShortcut(cellLayout, finalItem); - LauncherModel.addOrMoveItemInDatabase(mLauncher, finalItem, mInfo.container, - mInfo.screenId, mInfo.cellX, mInfo.cellY); - - // We add the child after removing the folder to prevent both from existing at - // the same time in the CellLayout. We need to add the new item with addInScreenFromBind() - // to ensure that hotseat items are placed correctly. - mLauncher.getWorkspace().addInScreenFromBind(child, mInfo.container, mInfo.screenId, - mInfo.cellX, mInfo.cellY, mInfo.spanX, mInfo.spanY); + if (newIcon != null) { + // We add the child after removing the folder to prevent both from existing + // at the same time in the CellLayout. We need to add the new item with + // addInScreenFromBind() to ensure that hotseat items are placed correctly. + mLauncher.getWorkspace().addInScreenFromBind(newIcon, mInfo.container, + mInfo.screenId, mInfo.cellX, mInfo.cellY, mInfo.spanX, mInfo.spanY); + } // Focus the newly created child - child.requestFocus(); + newIcon.requestFocus(); } } }; From 521c59a88201b0c74991d4928f19ece4d33e53c1 Mon Sep 17 00:00:00 2001 From: Geoff Mendal Date: Mon, 5 Oct 2015 07:19:24 -0700 Subject: [PATCH 053/219] Import translations. DO NOT MERGE Change-Id: Id66043bc65557ef6a886bb1bec6ef18590a7056b Auto-generated-cl: translation import --- res/values-af/strings.xml | 2 ++ res/values-am/strings.xml | 2 ++ res/values-ar/strings.xml | 2 ++ res/values-bg/strings.xml | 2 ++ res/values-bn-rBD/strings.xml | 2 ++ res/values-ca/strings.xml | 4 +++- res/values-cs/strings.xml | 2 ++ res/values-da/strings.xml | 2 ++ res/values-de/strings.xml | 2 ++ res/values-el/strings.xml | 2 ++ res/values-en-rAU/strings.xml | 2 ++ res/values-en-rGB/strings.xml | 2 ++ res/values-en-rIN/strings.xml | 2 ++ res/values-es-rUS/strings.xml | 2 ++ res/values-es/strings.xml | 2 ++ res/values-et-rEE/strings.xml | 2 ++ res/values-eu-rES/strings.xml | 4 +++- res/values-fa/strings.xml | 2 ++ res/values-fi/strings.xml | 6 ++++-- res/values-fr-rCA/strings.xml | 4 +++- res/values-fr/strings.xml | 2 ++ res/values-gl-rES/strings.xml | 2 ++ res/values-hi/strings.xml | 2 ++ res/values-hr/strings.xml | 2 ++ res/values-hu/strings.xml | 4 +++- res/values-hy-rAM/strings.xml | 2 ++ res/values-in/strings.xml | 2 ++ res/values-is-rIS/strings.xml | 2 ++ res/values-it/strings.xml | 2 ++ res/values-iw/strings.xml | 2 ++ res/values-ja/strings.xml | 2 ++ res/values-ka-rGE/strings.xml | 2 ++ res/values-kk-rKZ/strings.xml | 2 ++ res/values-km-rKH/strings.xml | 2 ++ res/values-kn-rIN/strings.xml | 2 ++ res/values-ko/strings.xml | 2 ++ res/values-ky-rKG/strings.xml | 2 ++ res/values-lo-rLA/strings.xml | 2 ++ res/values-lt/strings.xml | 4 +++- res/values-lv/strings.xml | 2 ++ res/values-mk-rMK/strings.xml | 2 ++ res/values-ml-rIN/strings.xml | 2 ++ res/values-mn-rMN/strings.xml | 2 ++ res/values-mr-rIN/strings.xml | 2 ++ res/values-ms-rMY/strings.xml | 2 ++ res/values-my-rMM/strings.xml | 2 ++ res/values-nb/strings.xml | 2 ++ res/values-ne-rNP/strings.xml | 4 +++- res/values-nl/strings.xml | 4 +++- res/values-pl/strings.xml | 2 ++ res/values-pt-rPT/strings.xml | 2 ++ res/values-pt/strings.xml | 2 ++ res/values-ro/strings.xml | 2 ++ res/values-ru/strings.xml | 2 ++ res/values-si-rLK/strings.xml | 2 ++ res/values-sk/strings.xml | 2 ++ res/values-sl/strings.xml | 4 +++- res/values-sr/strings.xml | 2 ++ res/values-sv/strings.xml | 2 ++ res/values-sw/strings.xml | 4 +++- res/values-ta-rIN/strings.xml | 2 ++ res/values-te-rIN/strings.xml | 2 ++ res/values-th/strings.xml | 2 ++ res/values-tl/strings.xml | 2 ++ res/values-tr/strings.xml | 2 ++ res/values-uk/strings.xml | 2 ++ res/values-ur-rPK/strings.xml | 2 ++ res/values-uz-rUZ/strings.xml | 4 +++- res/values-vi/strings.xml | 4 +++- res/values-zh-rCN/strings.xml | 4 ++++ res/values-zh-rHK/strings.xml | 2 ++ res/values-zh-rTW/strings.xml | 2 ++ res/values-zu/strings.xml | 2 ++ 73 files changed, 161 insertions(+), 13 deletions(-) diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index ad74fca04a..c3071b6e1e 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -77,6 +77,8 @@ "Soek" "Hierdie program is nie geïnstalleer nie" "Die program vir hierdie ikoon is nie geïnstalleer nie. Jy kan dit verwyder of die program soek en dit self installeer." + "%1$s laai tans af, %2$s voltooid" + "%1$s wag tans om te installeer" "Voeg by tuisskerm" "Skuif item hierheen" "Item is by tuisskerm gevoeg" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 5c6cdf409e..4d0a6b950a 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -77,6 +77,8 @@ "ፈልግ" "ይህ መተግበሪያ አልተጫነም" "የዚህ አዶ መተግበሪያ አልተጫነም። ማስወገድ ወይም መተግበሪያውን መፈለግና ራስዎ መጫን ይችላሉ።" + "%1$s በመውረድ ላይ፣ %2$s ተጠናቋል" + "%1$s ለመጫን በመጠበቅ ላይ" "ወደ መነሻ ማያ ገጽ ያክሉ" "ንጥልን ወደዚህ ውሰድ" "ወደ መነሻ ማያ ገጽ ንጥል ታክሏል" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index bbcfbcbdb4..bf426ece7e 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -77,6 +77,8 @@ "بحث" "لم يتم تثبيت هذا التطبيق" "لم يتم تثبيت تطبيق لهذا الرمز. يمكنك إزالته أو البحث عن التطبيق وتثبيته يدويًا." + "جارٍ تنزيل %1$s، اكتمل %2$s" + "%1$s في انتظار التثبيت" "إضافة إلى الشاشة الرئيسية" "نقل العنصر إلى هنا" "تمت إضافة العنصر إلى الشاشة الرئيسية" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 4feea289b2..fa62fb7e4e 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -77,6 +77,8 @@ "Търсене" "Това приложение не е инсталирано" "Приложението за тази икона не е инсталирано. Можете да я премахнете или да потърсите приложението и да го инсталирате ръчно." + "%1$s се изтегля. Завършено: %2$s" + "%1$s изчаква инсталиране" "Добавяне към началния екран" "Преместване на елемента тук" "Елементът е добавен към началния екран" diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml index b35a8dbf43..23f6c3fd58 100644 --- a/res/values-bn-rBD/strings.xml +++ b/res/values-bn-rBD/strings.xml @@ -77,6 +77,8 @@ "অনুসন্ধান" "এই অ্যাপ্লিকেশানটি ইন্সটল করা নাই" "এই আইকনের অ্যাপ্লিকেশানটি ইন্সটল করা নাই। আপনি এটি সরাতে পারেন বা অ্যাপ্লিকেশানটি অনুসন্ধান করে এটি নিজে ইন্সটল করতে পারেন।" + "%1$s ডাউনলোড হচ্ছে %2$s সম্পন্ন হয়েছে" + "%1$s ইনস্টলের অপেক্ষায় রয়েছে" "হোম স্ক্রীনে যোগ করুন" "এখানে আইটেম সরান" "হোম স্ক্রীনে আইটেম যোগ করা হয়েছে" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index a3ce78a5de..3b8e9b59de 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -28,7 +28,7 @@ "En Mode segur, els widgets estan desactivats." "Mostra la memòria" "Mantén premut un widget per triar-lo." - "Fes doble toc i mantén premut per seleccionar un widget o per utilitzar les accions predeterminades." + "Fes doble toc i mantén premut per seleccionar un widget o per utilitzar les accions personalitzades." "%1$d × %2$d" "Cerca a les aplicacions" "S\'estan carregant les aplicacions..." @@ -77,6 +77,8 @@ "Cerca" "Aquesta aplicació no està instal·lada" "L\'aplicació d\'aquesta icona no està instal·lada. Pots suprimir-la o cercar l\'aplicació i instal·lar-la manualment." + "S\'està baixant %1$s, %2$s completat" + "S\'està esperant per instal·lar %1$s" "Afegeix a la pantalla d\'inici" "Mou l\'element aquí" "S\'ha afegit l\'element a la pantalla d\'inici" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 0d7e3ad31d..47ca8d232f 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -77,6 +77,8 @@ "Hledat" "Tato aplikace není nainstalována" "Aplikace pro tuto ikonu není nainstalována. Můžete ikonu odstranit nebo zkusit aplikaci vyhledat a nainstalovat ručně." + "Stahování aplikace %1$s (dokončeno %2$s)" + "Instalace aplikace %1$s čeká na zahájení" "Přidat na plochu" "Přesunout položku sem" "Položka byla přidána na plochu" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 608b3a4814..1ddb45a7f6 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -77,6 +77,8 @@ "Søg" "Denne app er ikke installeret" "Appen, der hører til dette ikon, er ikke installeret. Du kan fjerne den eller prøve at søge efter appen og installere den manuelt." + "%1$s downloades. %2$s er gennemført" + "%1$s venter på at installere" "Føj til startskærm" "Flyt elementet hertil" "Elementet er føjet til startskærmen" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 56921b7c84..7adfbbfe28 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -77,6 +77,8 @@ "Suchen" "Diese App ist nicht installiert" "Die App für dieses Symbol ist nicht installiert. Sie können das Symbol entfernen oder nach der App suchen und sie manuell installieren." + "%1$s wird heruntergeladen, %2$s abgeschlossen" + "Warten auf Installation von %1$s" "Zum Startbildschirm hinzufügen" "Element hierhin verschieben" "Element zum Startbildschirm hinzugefügt" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 262e245cc0..2fd3733b72 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -77,6 +77,8 @@ "Αναζήτηση" "Αυτή η εφαρμογή δεν είναι εγκατεστημένη" "Η εφαρμογή γι\' αυτό το εικονίδιο δεν είναι εγκατεστημένη. Μπορείτε να το καταργήσετε ή να αναζητήσετε την εφαρμογή και να την εγκαταστήσετε με μη αυτόματο τρόπο." + "Λήψη %1$s, ολοκληρώθηκε %2$s" + "%1$s σε αναμονή για εγκατάσταση" "Προσθήκη στην αρχική οθόνη" "Μετακίνηση στοιχείου εδώ" "Το στοιχείο προστέθηκε στην αρχική οθόνη" diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index 53d095218e..88ae342c08 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -77,6 +77,8 @@ "Search" "This app is not installed" "The app for this icon isn\'t installed. You can remove it, or search for the app and install it manually." + "%1$s downloading, %2$s complete" + "%1$s waiting to install" "Add to Home screen" "Move item here" "Item added to home screen" diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 53d095218e..88ae342c08 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -77,6 +77,8 @@ "Search" "This app is not installed" "The app for this icon isn\'t installed. You can remove it, or search for the app and install it manually." + "%1$s downloading, %2$s complete" + "%1$s waiting to install" "Add to Home screen" "Move item here" "Item added to home screen" diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 53d095218e..88ae342c08 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -77,6 +77,8 @@ "Search" "This app is not installed" "The app for this icon isn\'t installed. You can remove it, or search for the app and install it manually." + "%1$s downloading, %2$s complete" + "%1$s waiting to install" "Add to Home screen" "Move item here" "Item added to home screen" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 45843a28f1..9d7ddd97f8 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -77,6 +77,8 @@ "Buscar" "Esta aplicación no está instalada" "La aplicación para este ícono no está instalada. Puedes eliminar el ícono o buscar la aplicación e instarla manualmente." + "Se completó el %2$s de la descarga de %1$s" + "Instalación de %1$s en espera" "Agregar a la pantalla principal" "Mover elemento aquí" "Se agregó el elemento a la pantalla principal." diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 8903df991c..0164377937 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -77,6 +77,8 @@ "Buscar" "Esta aplicación no está instalada" "La aplicación de este icono no está instalada. Puedes eliminar el icono o buscar la aplicación e instalarla manualmente." + "Descargando %1$s (%2$s completado)" + "Esperando para instalar %1$s" "Añadir a la pantalla de inicio" "Mover elemento aquí" "Elemento añadido a la pantalla de inicio" diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 29d629b473..18b4ccd0ef 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -77,6 +77,8 @@ "Otsing" "See rakendus ei ole installitud" "Selle ikooni rakendust pole installitud. Saate selle eemaldada või rakendust otsida ja käsitsi installida." + "Rakenduse %1$s allalaadimine, %2$s on valmis" + "%1$s on installimise ootel" "Lisa avaekraanile" "Teisalda üksus siia" "Üksus lisati avaekraanile" diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml index 0b6b1a90fd..4322188fed 100644 --- a/res/values-eu-rES/strings.xml +++ b/res/values-eu-rES/strings.xml @@ -28,7 +28,7 @@ "Widgetak desgaitu egin dira modu seguruan" "Erakutsi memoria" "Eduki ukituta widgeta aukeratzeko." - "Sakatu birritan eta eduki sakatuta widgeta hartzeko edo ekintza pertsonalizatuak erabiltzeko." + "Sakatu birritan eta eduki sakatuta widgeta aukeratzeko edo ekintza pertsonalizatuak erabiltzeko." "%1$d × %2$d" "Bilatu aplikazioetan" "Aplikazioak kargatzen…" @@ -77,6 +77,8 @@ "Bilatu" "Aplikazio hau ez dago instalatuta" "Ikono honen aplikazioa ez dago instalatuta. Ikonoa ken dezakezu, edo aplikazioa bilatu eta eskuz instalatu." + "%1$s deskargatzen, %2$s osatuta" + "%1$s instalatzeko zain" "Gehitu hasierako pantailan" "Ekarri elementua hona" "Gehitu da elementua hasierako pantailan" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index a91378657f..35808ae6ea 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -77,6 +77,8 @@ "جستجو" "این برنامه نصب نشده است." "برنامه برای این نماد نصب نشده است. می‌توانید آن را حذف کنید یا سعی کنید برنامه را جستجو کنید و آن را به صورت دستی نصب کنید." + "درحال دانلود %1$s، %2$s کامل شد" + "%1$s درانتظار نصب" "افزودن به صفحه اصلی" "انتقال مورد به اینجا" "مورد به صفحه اصلی اضافه شد" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 3d063bd218..e0b0041d79 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -38,8 +38,8 @@ "Suosikit-valikossa ei ole enää tilaa" "Sovellukset" "Aloitusruutu" - "Poista" - "Poista" + "Poista kuvake" + "Poista asennus" "Sovelluksen tiedot" "asenna pikakuvakkeita" "Antaa sovelluksen lisätä pikakuvakkeita itsenäisesti ilman käyttäjän valintaa." @@ -77,6 +77,8 @@ "Haku" "Sovellusta ei ole asennettu" "Kuvakkeen sovellusta ei ole asennettu. Voit poistaa kuvakkeen tai etsiä sovelluksen ja asentaa sen manuaalisesti." + "%1$s latautuu, valmiina %2$s" + "%1$s odottaa asennusta" "Lisää aloitusnäytölle" "Siirrä kohde tänne" "Kohde lisättiin aloitusnäytölle." diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 68c4cb8182..b122320c07 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -28,7 +28,7 @@ "Widgets désactivés en mode sans échec" "Afficher la mémoire" "Maintenez un doigt sur le widget pour l\'ajouter." - "Touchez 2X un widget et maintenez le doigt dessus pour l’ajouter ou utiliser des actions personnalisées" + "Touchez 2x un widget et maintenez doigt dessus pour l’ajouter ou utiliser des actions personnalisées" "%1$d × %2$d" "Rechercher des applications" "Chargement des applications en cours..." @@ -77,6 +77,8 @@ "Rechercher" "Cette application n\'est pas installée" "L\'application liée à cette icône n\'est pas installée. Vous pouvez la supprimer ou rechercher l\'application et l\'installer manuellement." + "Téléchargement de %1$s : %2$s" + "%1$s en attente d\'installation" "Ajouter à l\'écran d\'accueil" "Déplacer l\'élément ici" "Élément ajouté à l\'écran d\'accueil" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index ec01ea8145..5930b9ae74 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -77,6 +77,8 @@ "Rechercher" "Cette application n\'est pas installée" "L\'application correspondant à cette icône n\'est pas installée. Vous pouvez supprimer cette dernière, ou essayer de rechercher l\'application et de l\'installer manuellement." + "%1$s en cours de téléchargement, %2$s effectué(s)" + "%1$s en attente d\'installation" "Ajouter à l\'écran d\'accueil" "Déplacer l\'élément ici" "L\'élément a bien été ajouté à l\'écran d\'accueil." diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml index 918ec9e735..172186bfbc 100644 --- a/res/values-gl-rES/strings.xml +++ b/res/values-gl-rES/strings.xml @@ -77,6 +77,8 @@ "Buscar" "Esta aplicación non está instalada" "A aplicación para esta icona non está instalada. Podes eliminala ou buscar a aplicación e instalala manualmente." + "Descargando %1$s (%2$s completado)" + "Esperando para instalar %1$s" "Engadir á pantalla de inicio" "Mover elemento aquí" "Engadiuse o elemento á pantalla de inicio" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 1ad4f91ec9..2237c9c3f4 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -77,6 +77,8 @@ "खोजें" "यह ऐप्स इंस्टॉल नहीं है" "इस आइकन का ऐप्स इंस्टॉल नहीं है. आप उसे निकाल सकते हैं या ऐप्स की खोज करके उसे मैन्युअल रूप से इंस्टॉल कर सकते हैं." + "%1$s डाउनलोड हो रहा है, %2$s पूर्ण" + "%1$s के इंस्टॉल होने की प्रतीक्षा की जा रही है" "होम स्‍क्रीन में जोड़ें" "आइटम यहां ले जाएं" "होम स्क्रीन में आइटम जोड़ा गया" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 3cf1d6c283..9fb7bde454 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -77,6 +77,8 @@ "Traži" "Ta aplikacija nije instalirana" "Aplikacija ove ikone nije instalirana. Možete je ukloniti ili potražiti aplikaciju i instalirati je ručno." + "Preuzimanje aplikacije %1$s, dovršeno %2$s" + "Čekanje na instaliranje aplikacije %1$s" "Dodavanje na početni zaslon" "Premjesti stavku ovdje" "Stavka je dodana na početni zaslon" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index a941609fb8..01b8c8c1c3 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -39,7 +39,7 @@ "Alkalmazások" "Főoldal" "Eltávolítás" - "Eltávolítás" + "Törlés" "Alkalmazásinformáció" "parancsikonok telepítése" "Lehetővé teszi egy alkalmazás számára, hogy felhasználói beavatkozás nélkül adjon hozzá parancsikonokat." @@ -77,6 +77,8 @@ "Keresés" "Az alkalmazás nincs telepítve" "Az ikonhoz tartozó alkalmazás nincs telepítve. Törölheti az ikont, vagy az alkalmazás megkeresése után manuálisan telepítheti azt." + "A(z) %1$s letöltése, %2$s kész" + "A(z) %1$s telepítésre vár" "Hozzáadás a kezdőképernyőhöz" "Elem áthelyezése ide" "Elem hozzáadva a kezdőképernyőhöz" diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml index 4d4fb0c419..2fdb948070 100644 --- a/res/values-hy-rAM/strings.xml +++ b/res/values-hy-rAM/strings.xml @@ -77,6 +77,8 @@ "Գտնել" "Այս ծրագիրը տեղադրված չէ:" "Այս պատկերակի ծրագիրը տեղադրված չէ: Դուք կարող եք հեռացնել այն կամ գտնել ծրագիրը և տեղադրել այն ձեռքով:" + "%1$s-ը ներբեռնվում է, ավարտվել է %2$s" + "%1$s-ը սպասում է տեղադրելուն" "Ավելացնել Հիմնական էկրանին" "Տեղափոխել տարրն այստեղ" "Տարրն ավելացվեց հիմնական էկրանին" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index f86fed5a48..4b41f6bbcd 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -77,6 +77,8 @@ "Telusuri" "Aplikasi ini belum terpasang" "Aplikasi untuk ikon ini belum dipasang. Anda dapat membuangnya, atau menelusuri aplikasi dan memasangnya secara manual." + "%1$s sedang diunduh, %2$s selesai" + "%1$s menunggu dipasang" "Tambahkan ke layar Utama" "Pindahkan item ke sini" "Item ditambahkan ke layar utama" diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml index c57ce03a9d..590f963e5f 100644 --- a/res/values-is-rIS/strings.xml +++ b/res/values-is-rIS/strings.xml @@ -77,6 +77,8 @@ "Leita" "Þetta forrit er ekki uppsett" "Forritið fyrir þetta tákn er ekki uppsett. Þú getur fjarlægt það eða leitað að forritinu og sett það upp handvirkt." + "%1$s í niðurhali, %2$s lokið" + "%1$s bíður uppsetningar" "Bæta á heimaskjá" "Færa atriði hingað" "Atriði bætt á heimaskjáinn" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 277b51693e..26d55075d4 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -77,6 +77,8 @@ "Cerca" "L\'app non è installata" "L\'app per questa icona non è installata. Puoi rimuoverla o cercare l\'app e installarla manualmente." + "Download di %1$s in corso, %2$s completato" + "%1$s in attesa di installazione" "Aggiungi a schermata Home" "Sposta elemento qui" "Elemento aggiunto alla schermata Home" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index a182a45ec2..19df33039a 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -77,6 +77,8 @@ "חפש" "אפליקציה זו אינה מותקנת" "האפליקציה של סמל זה אינה מותקנת. ניתן להסיר אותו, או לחפש את האפליקציה ולהתקין אותה ידנית." + "מוריד את %1$s, %2$s הושלמו" + "מחכה להתקנה של %1$s" "הוסף למסך דף הבית" "העבר את הפריט לכאן" "הפריט הועבר אל מסך דף הבית" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 9e25d0c086..c731e1c6e7 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -77,6 +77,8 @@ "検索" "このアプリはインストールされていません" "このアイコンのアプリはインストールされていません。このアイコンは削除できます。または、手動でアプリを検索してインストールしください。" + "%1$sをダウンロード中、%2$s完了" + "%1$sのインストール待ち" "ホーム画面に追加" "アイテムをここに移動" "アイテムをホーム画面に追加しました" diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index c2cbed60d5..46d3967c48 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -77,6 +77,8 @@ "ძიება" "ეს აპი დაყენებული არ არის" "ამ ხატულის აპი დაყენებული არ არის. შეგიძლიათ ამოშალოთ, ან მოიძიოთ აპი და ხელით მოახდინოთ მისი ინსტალაცია." + "მიმდინარეობს %1$s-ის ჩამოტვირთვა, %2$s დასრულდა" + "%1$s ელოდება ინსტალაციას" "მთავარ ეკრანზე დამატება" "ერთეულის გადაადგილება აქ" "ერთეული დაემატა მთავარ ეკრანს" diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml index 7e98bf476c..071247ee1a 100644 --- a/res/values-kk-rKZ/strings.xml +++ b/res/values-kk-rKZ/strings.xml @@ -77,6 +77,8 @@ "Іздеу" "Бұл қолданба орнатылмаған" "Осы белгіше үшін қолданба орнатылмаған. Оны жоюға болады немесе қолданбаны іздеп, қолмен орнатуға болады." + "%1$s жүктелуде, %2$s аяқталды" + "%1$s орнату күтілуде" "Негізгі экранға қосу" "Элементті мұнда жылжыту" "Элемент негізгі экранға қосылды" diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml index 5ce2f6afc8..c0db0f26e8 100644 --- a/res/values-km-rKH/strings.xml +++ b/res/values-km-rKH/strings.xml @@ -77,6 +77,8 @@ "ស្វែងរក" "មិន​បាន​ដំឡើង​កម្មវិធី​នេះ" "មិន​បាន​ដំឡើង​កម្មវិធី​សម្រាប់​រូបតំណាង​នេះ។ អ្នក​អាច​លុប​វា ឬ​ស្វែងរក​កម្មវិធី និង​ដំឡើង​វា​ដោយ​ដៃ។" + "កំពុងដោនឡូត %1$s បានបញ្ចប់ %2$s" + "%1$s កំពុងរង់ចាំការដំឡើង" "បន្ថែមទៅអេក្រង់ដើម" "ផ្លាស់ធាតុមកទីនេះ" "ធាតុដែលត្រូវបានបន្ថែមទៅអេក្រង់ដើម" diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml index 8b62e1ac59..a6943addeb 100644 --- a/res/values-kn-rIN/strings.xml +++ b/res/values-kn-rIN/strings.xml @@ -77,6 +77,8 @@ "ಹುಡುಕು" "ಈ ಅಪ್ಲಿಕೇಶನ್ ಸ್ಥಾಪನೆಗೊಂಡಿಲ್ಲ" "ಈ ಐಕಾನ್ ಅಪ್ಲಿಕೇಶನ್ ಸ್ಥಾಪನೆಗೊಂಡಿಲ್ಲ. ನೀವು ಅದನ್ನು ತೆಗೆದುಹಾಕಬಹುದು ಅಥವಾ ಅಪ್ಲಿಕೇಶನ್ ಹುಡುಕಬಹುದು ಮತ್ತು ಹಸ್ತಚಾಲಿತವಾಗಿ ಅದನ್ನು ಸ್ಥಾಪಿಸಬಹುದು." + "%1$s ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ, %2$s ಪೂರ್ಣಗೊಂಡಿದೆ" + "%1$s ಸ್ಥಾಪಿಸಲು ಕಾಯಲಾಗುತ್ತಿದೆ" "ಮುಖಪುಟಕ್ಕೆ ಸೇರಿಸು" "ಐಟಂ ಇಲ್ಲಿಗೆ ಸರಿಸಿ" "ಮುಖಪುಟ ಪರದೆಗೆ ಐಟಂ ಸೇರಿಸಲಾಗಿದೆ" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 9bc777eb55..7f6d40b9c8 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -77,6 +77,8 @@ "검색" "이 앱이 설치되어 있지 않음" "이 아이콘의 앱이 설치되어 있지 않습니다. 아이콘을 삭제하거나 앱을 검색하여 수동으로 설치하세요." + "%1$s 다운로드 중, %2$s 완료" + "%1$s 설치 대기 중" "메인 스크린에 추가" "여기에 항목을 이동" "메인 스크린에 항목 추가됨" diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml index c018ab8a3b..e09bcd26a7 100644 --- a/res/values-ky-rKG/strings.xml +++ b/res/values-ky-rKG/strings.xml @@ -77,6 +77,8 @@ "Издөө" "Бул колдонмо орнотулган эмес" "Бул сүрөтчөнүн колдонмосу орнотулган эмес. Аны алып салсаңыз же колдонмону издеп, кол менен орнотсоңуз болот." + "%1$s жүктөлүп алынууда, %2$s аяктады" + "%1$s орнотулушу күтүлүүдө" "Башкы экранга кошуу" "Бул нерсени бул жерге жылдыруу" "Башкы экранга кошулду" diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml index f9fa8c92e1..98238d2e31 100644 --- a/res/values-lo-rLA/strings.xml +++ b/res/values-lo-rLA/strings.xml @@ -77,6 +77,8 @@ "ຊອກຫາ" "ແອັບຯ​ນີ້​ຍັງ​ບໍ່​ໄດ້​ຕິດ​ຕັ້ງ​ເທື່ອ" "​ແອັບຯ​ສຳ​ລັບ​ໄອ​ຄອນ​ນີ້​ຍັງ​ບໍ່ໄດ້​ຕິດ​ຕັ້ງ​ເທື່ອ. ທ່ານ​ສາ​ມາດ​ລຶບ​ມັນ​ອອກ ຫຼື​ຊອກ​ຫາ​ແອັບຯ ແລ້ວ​ຕິດ​ຕັ້ງ​ມັນ​ໄດ້​ດ້ວຍ​ຕົນ​ເອງ." + "%1$s ກຳ​ລັງ​ດາວ​ໂຫຼດ, %2$s ສຳ​ເລັດ" + "%1$s ກຳ​ລັງ​ລໍ​ຖ້າ​ຕິດ​ຕັ້ງ" "ເພີ່ມໃສ່ໜ້າຈໍຫຼັກ" "Move item here" "ເພີ່ມ​ລາຍ​ການ​ໃສ່​ໜ້າ​ຈໍ​ຫຼັກ​ແລ້ວ" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 7fe29d0176..1a2daebb89 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -38,7 +38,7 @@ "Mėgstamiausių dėkle nebėra vietos" "Programos" "Pagrindinis" - "Pašalinti" + "Ištrinti" "Pašalinti" "Programos informacija" "įdiegti sparčiuosius klavišus" @@ -77,6 +77,8 @@ "Ieškoti" "Ši programa neįdiegta" "Šios piktogramos programa neįdiegta. Galite ją pašalinti arba bandyti ieškoti programos ir ją įdiegti patys." + "Atsisiunčiama programa „%1$s“, %2$s baigta" + "Laukiama, kol bus įdiegta programa „%1$s“" "Pridėti prie pagrind. ekrano" "Perkelti elementą čia" "Elementas pridėtas prie pagrindinio ekrano" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 7fb0bbd46b..454f7e005e 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -77,6 +77,8 @@ "Meklēt" "Šī lietotne nav instalēta" "Šai ikonai paredzētā lietotne nav instalēta. Varat noņemt ikonu vai meklēt lietotni un instalēt to manuāli." + "Lietotnes %1$s lejupielāde (%2$s pabeigti)" + "Notiek %1$s instalēšana" "Pievienot sākuma ekrānam" "Pārvietot vienumu šeit" "Vienums pievienots sākuma ekrānam" diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml index fba1f070b8..a6d6bd0544 100644 --- a/res/values-mk-rMK/strings.xml +++ b/res/values-mk-rMK/strings.xml @@ -77,6 +77,8 @@ "Барај" "Апликацијата не е инсталирана" "Апликацијата за оваа икона не е инсталирана. Може да ја отстраните или да се обидете да ја најдете апликацијата и да ја инсталирате рачно." + "Се презема %1$s, %2$s завршено" + "%1$s чека да се инсталира" "Додај на Почетен екран" "Премести ја ставката овде" "Ставката е додадена на почетниот екран" diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml index 0dad3b48e4..645641dda7 100644 --- a/res/values-ml-rIN/strings.xml +++ b/res/values-ml-rIN/strings.xml @@ -77,6 +77,8 @@ "തിരയുക" "ഈ അപ്ലിക്കേഷൻ ഇൻസ്റ്റാളുചെയ്‌തിട്ടില്ല" "ഈ ഐക്കണുവേണ്ടി അപ്ലിക്കേഷൻ ഇൻസ്റ്റാളുചെയ്‌തിട്ടില്ല. നിങ്ങൾക്കത് നീക്കംചെയ്യാനാകും അല്ലെങ്കിൽ അപ്ലിക്കേഷനുവേണ്ടി തിരഞ്ഞുകൊണ്ട് അത് സ്വമേധയാ ഇൻസ്റ്റാളുചെയ്യുക." + "%1$s ഡൗൺലോഡ് ചെയ്യുന്നു, %2$s പൂർത്തിയായി" + "ഇൻസ്റ്റാൾ ചെയ്യാൻ %1$s കാക്കുന്നു" "ഹോം സ്ക്രീനിൽ ചേർക്കുക" "ഇനം ഇവിടേക്ക് നീക്കുക" "ഹോം സ്‌ക്രീനിൽ ഇനം ചേർത്തു" diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml index 0bd5ffd6ae..89ef7ee2b4 100644 --- a/res/values-mn-rMN/strings.xml +++ b/res/values-mn-rMN/strings.xml @@ -77,6 +77,8 @@ "Хайх" "Энэ апп-г суулгаагүй байна" "Энэ дүрсний апп-г суулгаагүй байна. Та үүнийг устгах буюу апп-г хайж суулгах боломжтой." + "%1$s-г татаж байна, %2$s татсан" + "%1$s нь суулгахыг хүлээж байна" "Нүүр дэлгэц нэмэх" "Энд байршуулах" "Нүүр дэлгэцэнд нэмсэн зүйл" diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml index a88d0300dc..cfc45b9598 100644 --- a/res/values-mr-rIN/strings.xml +++ b/res/values-mr-rIN/strings.xml @@ -77,6 +77,8 @@ "शोधा" "हा अॅप स्थापित केलेला नाही" "या चिन्हासाठी अॅप स्थापित केलेला नाही. आपण ते काढू शकता किंवा अॅपचा शोध घेऊ शकता आणि त्यास व्यक्तिचलितपणे स्थापित करू शकता." + "%1$s डाउनलोड होत आहे , %2$s पूर्ण झाले" + "%1$s स्थापित करण्याची प्रतिक्षा करीत आहे" "मुख्य स्क्रीनवर जोडा" "आयटम येथे हलवा" "आयटम मुख्य स्क्रीनवर जोडला" diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index 38322a3de0..fe4e59e5a0 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -77,6 +77,8 @@ "Carian" "Apl ini tidak dipasang" "Apl untuk ikon ini tidak dipasang. Anda boleh mengalih keluar atau mencari dan memasang apl itu secara manual." + "%1$s memuat turun, %2$s selesai" + "%1$s menunggu untuk dipasang" "Tambahkan pada Skrin Utama" "Alihkan item ke sini" "Item ditambahkan pada skrin utama" diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml index 71e84c18ce..f3994de0aa 100644 --- a/res/values-my-rMM/strings.xml +++ b/res/values-my-rMM/strings.xml @@ -77,6 +77,8 @@ "ရှာဖွေရန်" "App မတပ်ဆင်ရသေးပါ" "ဤအိုင်ကွန်အတွက် app အားမထည့်သွင်းထားပါ။ You can remove it, or search for the app and install it manually." + "%1$s ဒေါင်းလုဒ်လုပ်နေသည်၊ %2$s ပြီးပါပြီ" + "%1$s ကိုထည့်သွင်းရန်စောင့်နေသည်" "ပင်မမျက်နှာစာသို့ ထည့်ပါ" "၎င်းအား ဤသို့ ရွှေ့ပါ" "ပင်မ ဖန်မျက်နှာပြင်သို့ ထည့်ပြီး၏" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 0ecca67cb0..fbc174c41d 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -77,6 +77,8 @@ "Søk" "Denne appen er ikke installert" "Appen for dette ikonet er ikke installert. Du kan fjerne det, eller prøve å søke etter appen og installere den manuelt." + "Laster ned %1$s, %2$s er fullført" + "Venter på å installere %1$s" "Legg til på startskjermen" "Flytt elementet hit" "Elementet er lagt til på startskjermen" diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml index 5379b53630..d470efd490 100644 --- a/res/values-ne-rNP/strings.xml +++ b/res/values-ne-rNP/strings.xml @@ -39,7 +39,7 @@ "अनुप्रयोगहरू" "गृह" "हटाउनुहोस्" - "हटाउनुहोस्" + "स्थापना हटाउनुहोस्" "अनुप्रयोग जानकारी" "सर्टकट स्थापना गर्नेहोस्" "प्रयोगकर्ताको हस्तक्षेप बिना एउटा अनुप्रयोगलाई सर्टकटमा थप्नको लागि अनुमति दिनुहोस्।" @@ -77,6 +77,8 @@ "खोजी गर्नुहोस्" "यो अनुप्रयोग स्थापित छैन" "यो प्रतिमाका लागि अनुप्रयोगलाई स्थापना गरिएको छैन। तपाईँ यसलाई हटाउन, वा अनुप्रयोग खोजी र स्वयं यो स्थापित गर्न सक्नुहुन्छ।" + "%1$s डाउनलोड गर्दै, %2$s सम्पन्‍न" + "%1$s स्थापना गर्न प्रतीक्षा गर्दै" "गृह स्क्रिनमा थप्नुहोस्" "वस्तु यहाँ सार्नुहोस्" "वस्तु गृह स्क्रिनमा थपियो" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 1136b9f478..518fe29894 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -39,7 +39,7 @@ "Apps" "Startpagina" "Verwijderen" - "Verwijderen" + "Deïnstalleren" "App-info" "Snelkoppelingen instellen" "Een app toestaan snelkoppelingen toe te voegen zonder tussenkomst van de gebruiker." @@ -77,6 +77,8 @@ "Zoeken" "Deze app is niet geïnstalleerd" "De app voor dit pictogram is niet geïnstalleerd. Je kunt het pictogram verwijderen of de app zoeken en handmatig installeren." + "%1$s wordt gedownload, %2$s voltooid" + "%1$s wacht op installatie" "Toevoegen aan startpagina" "Item hier naartoe verplaatsen" "Item toegevoegd aan startscherm" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 8218822dcf..5afe6e2508 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -77,6 +77,8 @@ "Szukaj" "Ta aplikacja nie jest zainstalowana" "Aplikacja, której odpowiada ta ikona, nie jest zainstalowana. Możesz usunąć ikonę lub wyszukać aplikację i zainstalować ją ręcznie." + "Pobieranie elementu %1$s, ukończono: %2$s" + "%1$s oczekuje na instalację" "Dodaj do strony głównej" "Przenieś element tutaj" "Element został dodany do ekranu głównego" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index f3410eac2c..96e36f1fa5 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -77,6 +77,8 @@ "Pesquisar" "Esta aplicação não está instalada" "A aplicação deste ícone não está instalada. Pode removê-lo ou pesquisar a aplicação e instalá-la manualmente." + "A transferir o %1$s, %2$s concluído" + "A aguardar a instalação do %1$s" "Adicionar ao Ecrã principal" "Mover o item para aqui" "Item adicionado ao ecrã principal" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 857b9b07cf..40632ce827 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -77,6 +77,8 @@ "Pesquisar" "Este app não está instalado" "O app deste ícone não está instalado. Você pode remover o ícone, ou procurar o app e instalá-lo manualmente." + "Fazendo download de %1$s, %2$s concluído" + "Aguardando instalação de %1$s" "Adicionar à tela inicial" "Mover item para cá" "Item adicionado à tela inicial" diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 91b542b5bd..c41e0e0297 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -77,6 +77,8 @@ "Căutați" "Aplicația nu este instalată" "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." + "%1$s se descarcă (finalizat %2$s)" + "%1$s așteaptă instalarea" "Adăugați pe ecranul de pornire" "Mutați elementul aici" "Element adăugat pe ecranul de pornire" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 570967a77e..5ee47a876b 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -77,6 +77,8 @@ "Найти" "Приложение не установлено" "Приложение не установлено. Вы можете удалить значок или найти приложение и установить его вручную." + "Скачиваем \"%1$s\" (%2$s)" + "Скоро установим \"%1$s\"" "Добавить на главный экран" "Переместить элемент сюда" "Элемент добавлен на главный экран" diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml index 8fc70fcce1..6d735a319e 100644 --- a/res/values-si-rLK/strings.xml +++ b/res/values-si-rLK/strings.xml @@ -77,6 +77,8 @@ "සොයන්න" "මෙම යෙදුම ස්ථාපනය කර නොමැත" "මෙම නිරුපකයට යෙදුම ස්ථාපනය කර නොමැත. ඔබට එය ඉවත් කළ හැක, හෝ යෙදුම් සඳහා සොයන්න සහ අතින් ස්ථාපනය කරන්න." + "%1$s බාගත කරමින්, %2$s සම්පූර්ණයි" + "%1$s ස්ථාපනය කිරීමට බලා සිටිමින්" "මුල් තිරය වෙත එක් කරන්න" "මෙතනට අයිතමය ගෙන එන්න" "අයිතමය මුල් තිරය වෙත එකතු කරන ලදි" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 0245c0a799..ef01640e0b 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -77,6 +77,8 @@ "Vyhľadať" "Táto aplikácia nie je nainštalovaná" "Aplikácia, ktorú zastupuje táto ikona, nie je nainštalovaná. Ikonu môžete odstrániť alebo vyhľadajte aplikáciu a ručne ju nainštalujte." + "Sťahuje sa aplikácia %1$s. Stiahnuté: %2$s" + "Aplikácia %1$s čaká na inštaláciu" "Pridať na plochu" "Presunúť položku sem" "Položka bola pridaná na plochu" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index e6853be151..ab62195323 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -39,7 +39,7 @@ "Aplikacije" "Začetni zaslon" "Odstrani" - "Odstrani" + "Odstrani namestitev" "Podatki o aplikaciji" "namestitev bližnjic" "Aplikaciji dovoli dodajanje bližnjic brez posredovanja uporabnika." @@ -77,6 +77,8 @@ "Iskanje" "Ta aplikacija ni nameščena." "Aplikacija za to ikono ni nameščena. Lahko jo odstranite ali poiščete aplikacijo in to namestite ročno." + "Prenašanje aplikacije %1$s; preneseno %2$s" + "Aplikacija %1$s čaka na namestitev" "Dodajanje na začetni zaslon" "Premik elementa sem" "Element je bil dodan na začetni zaslon" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index ce4ea1bcb6..009cd61122 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -77,6 +77,8 @@ "Претражи" "Ова апликација није инсталирана" "Апликација за ову икону није инсталирана. Можете да је уклоните или да потражите апликацију и инсталирате је ручно." + "%1$s се преузима, завршено је %2$s" + "%1$s чека на инсталирање" "Додај на почетни екран" "Премести ставку овде" "Ставка је додата на почетни екран" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index decc583177..8fab88c375 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -77,6 +77,8 @@ "Sök" "Appen är inte installerad" "Appen för den här ikonen har inte installerats. Du kan ta bort den eller söka efter appen och installera den manuellt." + "%1$s laddas ned, %2$s klart" + "%1$s väntar på installation" "Lägg till på startskärmen" "Flytta objekt hit" "Objektet har lagts till på startskärmen" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 93b4e97844..9b74cea773 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -39,7 +39,7 @@ "Programu" "Mwanzo" "Ondoa" - "Ondoa" + "Sakinusha" "Maelezo ya programu" "kuweka njia za mkato" "Huruhusu programu kuongeza njia za mkato bila mtumiaji kuingilia kati." @@ -79,6 +79,8 @@ "Tafuta" "Programu hii haijasakinishwa" "Programu ya ikoni hii haijasakinishwa. Unaweza kuiondoa, au utafute programu na uisakinishe wewe mwenyewe." + "%1$s inapakuliwa, %2$s imekamilika" + "%1$s inasubiri kusakinisha" "Ongeza kwenye skrini ya Kwanza" "Hamishia kipengee hapa" "Kipengee kimeongezwa kwenye skrini ya kwanza" diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml index b3f48cba14..04bd08eceb 100644 --- a/res/values-ta-rIN/strings.xml +++ b/res/values-ta-rIN/strings.xml @@ -77,6 +77,8 @@ "தேடு" "பயன்பாடு நிறுவப்படவில்லை" "ஐகானுக்கான பயன்பாடு நிறுவப்படவில்லை. இதை அகற்றலாம் அல்லது பயன்பாட்டைத் தேடி கைமுறையாக நிறுவலாம்." + "%1$sஐப் பதிவிறக்குகிறது, %2$s முடிந்தது" + "%1$sஐ நிறுவுவதற்காகக் காத்திருக்கிறது" "முகப்புத் திரையில் சேர்" "இங்கு நகர்த்து" "முகப்புத் திரையில் சேர்க்கப்பட்டது" diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml index 8e02d9a76f..78a89c98b5 100644 --- a/res/values-te-rIN/strings.xml +++ b/res/values-te-rIN/strings.xml @@ -77,6 +77,8 @@ "శోధించు" "ఈ అనువర్తనం ఇన్‌స్టాల్ చేయబడలేదు" "ఈ చిహ్నం యొక్క అనువర్తనం ఇన్‌స్టాల్ చేయబడలేదు. మీరు దీన్ని తీసివేయవచ్చు లేదా ఆ అనువర్తనం కోసం శోధించి దాన్ని మాన్యువల్‌గా ఇన్‌స్టాల్ చేయవచ్చు." + "%1$s డౌన్‌లోడ్ అవుతోంది, %2$s పూర్తయింది" + "%1$s ఇన్‌స్టాల్ కావడానికి వేచి ఉంది" "హోమ్ స్క్రీన్‌కు జోడించు" "అంశాన్ని ఇక్కడికి తరలించు" "అంశం హోమ్‌స్క్రీన్‌కి జోడించబడింది" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 25ef7cee49..c3f95f3ea8 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -77,6 +77,8 @@ "ค้นหา" "ไม่ได้ติดตั้งแอปนี้" "ยังไม่ได้ติดตั้งแอปสำหรับไอคอนนี้ คุณสามารถนำไอคอนออก หรือค้นหาแอปดังกล่าวแล้วติดตั้งด้วยตนเอง" + "กำลังดาวน์โหลด %1$s เสร็จแล้ว %2$s" + "%1$s กำลังรอติดตั้ง" "เพิ่มลงในหน้าแรก" "ย้ายรายการมาที่นี่" "เพิ่มรายการไปยังหน้าจอหลักแล้ว" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 95d3319997..7958b60def 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -77,6 +77,8 @@ "Maghanap" "Hindi naka-install ang app na ito" "Hindi naka-install ang app para sa icon na ito. Maaari mo itong alisin, o maaari mong hanapin ang app at i-install ito nang manu-mano." + "Dina-download na ang %1$s, tapos na ang %2$s" + "Hinihintay nang mag-install ang %1$s" "Idagdag sa Home screen" "Ilipat ang item dito" "Naidagdag sa home screen ang item" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 50aca1b6ea..12ec8054b8 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -77,6 +77,8 @@ "Ara" "Bu uygulama yüklü değil" "Bu simgenin uygulaması yüklü değil. Uygulamayı kaldırabilir veya arayıp manuel olarak yükleyebilirsiniz." + "%1$s indiriliyor, %2$s tamamlandı" + "%1$s uygulaması yüklenmek için bekliyor" "Ana ekrana ekle" "Öğeyi buraya taşı" "Öğe ana ekrana eklendi" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 10c5a8f180..ad839e768a 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -77,6 +77,8 @@ "Шукати" "Цей додаток не встановлено" "Додаток для цього значка не встановлено. Можна видалити значок або знайти додаток і встановити його вручну." + "%1$s завантажується, %2$s" + "%1$s очікує на завантаження" "Додати на головний екран" "Перемістити елемент сюди" "Елемент додано на головний екран" diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml index 7db471ff80..9d096ed609 100644 --- a/res/values-ur-rPK/strings.xml +++ b/res/values-ur-rPK/strings.xml @@ -77,6 +77,8 @@ "تلاش کریں" "یہ ایپ انسٹال کردہ نہیں ہے" "اس آئیکن کیلئے ایپ انسٹال کردہ نہیں ہے۔ آپ اسے ہٹا سکتے ہیں یا ایپ کو تلاش کر سکتے اور دستی طور پر اسے انسٹال کر سکتے ہیں۔" + "%1$s ڈاؤن لوڈ ہو رہا ہے، %2$s مکمل ہو گیا" + "%1$s انسٹال ہونے کا انتظار کر رہی ہے" "ہوم اسکرین میں شامل کریں" "آئٹم یہاں منتقل کریں" "آئٹم کو ہوم اسکرین میں شامل کر دیا گیا" diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml index 6fa016cc6f..f0cf39eb2b 100644 --- a/res/values-uz-rUZ/strings.xml +++ b/res/values-uz-rUZ/strings.xml @@ -38,7 +38,7 @@ "Ajratilganlarda birorta ham xona yo‘q" "Ilovalar" "Uy" - "O‘chirish" + "Olib tashlash" "O‘chirish" "Ilova haqida" "yorliqlar yaratish" @@ -77,6 +77,8 @@ "Qidirish" "Ushbu ilova o‘rnatilmagan" "Ilova o‘rnatilmagan. Belgini o‘chirib tashlashingiz yoki ilovani topib, uni qo‘lda o‘rnatishingiz mumkin." + "%1$s yuklab olinmoqda, %2$s bajarildi" + "%1$s ilovasi o‘rnatilishi kutilmoqda" "Bosh ekranga qo‘shish" "Obyektni bu yerga ko‘chirish" "Obyekt bosh ekranga qo‘shildi" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index de8b962856..d741bf74bb 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -28,7 +28,7 @@ "Tiện ích con bị vô hiệu hóa ở chế độ an toàn" "Hiển thị bộ nhớ" "Chạm và giữ để chọn tiện ích con." - "Nhấn đúp & giữ để chọn tiện ích con hoặc sử dụng tác vụ tùy chỉnh." + "Nhấn đúp và giữ để chọn tiện ích hoặc sử dụng tác vụ tùy chỉnh." "%1$d × %2$d" "Tìm kiếm ứng dụng" "Đang tải ứng dụng..." @@ -77,6 +77,8 @@ "Tìm kiếm" "Ứng dụng này chưa được cài đặt" "Ứng dụng cho biểu tượng này chưa được cài đặt. Bạn có thể xóa ứng dụng hoặc tìm kiếm và cài đặt ứng dụng theo cách thủ công." + "Đang tải xuống %1$s, %2$s hoàn tất" + "Đang chờ cài đặt %1$s" "Thêm vào màn hình chính" "Di chuyển mục vào đây" "Đã thêm mục vào màn hình chính" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 39a5410ea9..8f0d8831ff 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -77,6 +77,10 @@ "搜索" "未安装此应用" "未安装此图标对应的应用。您可以移除此图标,也可以尝试搜索相应的应用并手动安装。" + + + + "添加到主屏幕" "将项目移至此处" "已将项目添加到主屏幕" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 6f2f2c0aa8..3a9ffd1b66 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -77,6 +77,8 @@ "搜尋" "尚未安裝這個應用程式" "您尚未安裝這個圖示代表的應用程式。您可以移除這個圖示,也可以搜尋該應用程式並手動安裝。" + "正在下載 %1$s,已完成 %2$s" + "正在等待安裝 %1$s" "新增至主畫面" "移動項目至這裡" "已將項目加入至主畫面" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 41dd307db2..643889a6c8 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -77,6 +77,8 @@ "搜尋" "尚未安裝這個應用程式" "您尚未安裝這個圖示代表的應用程式。您可以移除這個圖示,也可以搜尋該應用程式並手動安裝。" + "正在下載「%1$s」,已完成 %2$s" + "正在等待安裝「%1$s」" "新增至主畫面" "將項目移至這裡" "已將項目新增到主畫面" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index bdab4c3da0..1beebe6790 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -77,6 +77,8 @@ "Sesha" "Lolu hlelo lokusebenza alifakiwe" "Uhlelo lokusebenza lalesi sithonjana alufakiwe. Ungalisusa, noma sesha uhlelo lokusebenza bese uzifakela lona ngokuzenzela." + "I-%1$s iyalandwa, %2$s kuqediwe" + "%1$s ilinde ukufakwa" "Faka kusikrini sasekhaya" "Hambisa into lapha" "Into ingezwe kusikrini sasekhaya" From d1a0e8b5c8494945fe48c19fe0e13b6b161b90a7 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 27 Aug 2015 17:45:46 -0700 Subject: [PATCH 054/219] Jailing the saved instance state of all the dynamically generated views Using itemId instead of generating a new id for each item. This is because if the process gets killed, View.generateId will get reset but we will still receive the generated item id map in onRestoreInstance. This will cause conflicts with newly generated item ids. We wrap all the generated homescreen views inside a single sparse array. This ensures that we do not cause any conflict with dynamically generated views in other parts of the UI. Bug: 16840760 Change-Id: I6fe69c2e1dd463402f51222715fae31b9d4dd240 --- res/values/config.xml | 3 ++ src/com/android/launcher3/CellLayout.java | 36 ++++++++++--- src/com/android/launcher3/Launcher.java | 43 ++------------- src/com/android/launcher3/Workspace.java | 1 + .../launcher3/util/ParcelableSparseArray.java | 52 +++++++++++++++++++ 5 files changed, 90 insertions(+), 45 deletions(-) create mode 100644 src/com/android/launcher3/util/ParcelableSparseArray.java diff --git a/res/values/config.xml b/res/values/config.xml index 93c6d14f4a..5cde42e8a0 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -81,6 +81,9 @@ + + + diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index 5ae7310ffc..5539d9f8af 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -25,7 +25,6 @@ import android.animation.ValueAnimator.AnimatorUpdateListener; import android.annotation.TargetApi; import android.content.Context; import android.content.res.Resources; -import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; @@ -48,13 +47,13 @@ import android.view.ViewDebug; import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.view.animation.DecelerateInterpolator; -import android.widget.Toast; import com.android.launcher3.BubbleTextView.BubbleTextShadowHandler; import com.android.launcher3.FolderIcon.FolderRingAnimator; import com.android.launcher3.accessibility.DragAndDropAccessibilityDelegate; import com.android.launcher3.accessibility.FolderAccessibilityHelper; import com.android.launcher3.accessibility.WorkspaceAccessibilityHelper; +import com.android.launcher3.util.ParcelableSparseArray; import com.android.launcher3.util.Thunk; import java.util.ArrayList; @@ -86,6 +85,7 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { private int mMaxGap; private boolean mDropPending = false; private boolean mIsDragTarget = true; + private boolean mJailContent = true; // These are temporary variables to prevent having to allocate a new object just to // return an (x, y) value from helper functions. Do NOT use them to maintain other state. @@ -189,7 +189,6 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { mLauncher = (Launcher) context; DeviceProfile grid = mLauncher.getDeviceProfile(); - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CellLayout, defStyle, 0); mCellWidth = mCellHeight = -1; mFixedCellWidth = mFixedCellHeight = -1; @@ -203,10 +202,7 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { mPreviousReorderDirection[0] = INVALID_DIRECTION; mPreviousReorderDirection[1] = INVALID_DIRECTION; - a.recycle(); - setAlwaysDrawnWithCacheEnabled(false); - final Resources res = getResources(); mHotseatScale = (float) grid.hotseatIconSizePx / grid.iconSizePx; @@ -426,10 +422,36 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { } } - boolean getIsDragOverlapping() { + public boolean getIsDragOverlapping() { return mIsDragOverlapping; } + public void disableJailContent() { + mJailContent = false; + } + + @Override + protected void dispatchSaveInstanceState(SparseArray container) { + if (mJailContent) { + ParcelableSparseArray jail = getJailedArray(container); + super.dispatchSaveInstanceState(jail); + container.put(R.id.cell_layout_jail_id, jail); + } else { + super.dispatchSaveInstanceState(container); + } + } + + @Override + protected void dispatchRestoreInstanceState(SparseArray container) { + super.dispatchRestoreInstanceState(mJailContent ? getJailedArray(container) : container); + } + + private ParcelableSparseArray getJailedArray(SparseArray container) { + final Parcelable parcelable = container.get(R.id.cell_layout_jail_id); + return parcelable instanceof ParcelableSparseArray ? + (ParcelableSparseArray) parcelable : new ParcelableSparseArray(); + } + @Override protected void onDraw(Canvas canvas) { if (!mIsDragTarget) { diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 370f695862..37603379ac 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -124,7 +124,6 @@ import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; /** * Default launcher application. @@ -193,8 +192,6 @@ public class Launcher extends Activity private static final String RUNTIME_STATE_PENDING_ADD_WIDGET_INFO = "launcher.add_widget_info"; // Type: parcelable private static final String RUNTIME_STATE_PENDING_ADD_WIDGET_ID = "launcher.add_widget_id"; - // Type: int[] - private static final String RUNTIME_STATE_VIEW_IDS = "launcher.view_ids"; static final String INTRO_SCREEN_DISMISSED = "launcher.intro_screen_dismissed"; static final String FIRST_RUN_ACTIVITY_DISPLAYED = "launcher.first_run_activity_displayed"; @@ -228,9 +225,6 @@ public class Launcher extends Activity private static final int ON_ACTIVITY_RESULT_ANIMATION_DELAY = 500; private static final int ACTIVITY_START_DELAY = 1000; - private HashMap mItemIdToViewId = new HashMap(); - private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1); - // How long to wait before the new-shortcut animation automatically pans the workspace private static int NEW_APPS_PAGE_MOVE_DELAY = 500; private static int NEW_APPS_ANIMATION_INACTIVE_TIMEOUT_SECONDS = 5; @@ -656,34 +650,12 @@ public class Launcher extends Activity return !isWorkspaceLoading(); } - @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) - public static int generateViewId() { - if (Utilities.ATLEAST_JB_MR1) { - return View.generateViewId(); - } else { - // View.generateViewId() is not available. The following fallback logic is a copy - // of its implementation. - for (;;) { - final int result = sNextGeneratedId.get(); - // aapt-generated IDs have the high byte nonzero; clamp to the range under that. - int newValue = result + 1; - if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0. - if (sNextGeneratedId.compareAndSet(result, newValue)) { - return result; - } - } - } - } - public int getViewIdForItem(ItemInfo info) { - // This cast is safe given the > 2B range for int. - int itemId = (int) info.id; - if (mItemIdToViewId.containsKey(itemId)) { - return mItemIdToViewId.get(itemId); - } - int viewId = generateViewId(); - mItemIdToViewId.put(itemId, viewId); - return viewId; + // aapt-generated IDs have the high byte nonzero; clamp to the range under that. + // This cast is safe as long as the id < 0x00FFFFFF + // Since we jail all the dynamically generated views, there should be no clashes + // with any other views. + return (int) info.id; } /** @@ -1337,7 +1309,6 @@ public class Launcher extends Activity * * @param savedState The previous state. */ - @SuppressWarnings("unchecked") private void restoreState(Bundle savedState) { if (savedState == null) { return; @@ -1373,9 +1344,6 @@ public class Launcher extends Activity setWaitingForResult(true); mRestoring = true; } - - mItemIdToViewId = (HashMap) - savedState.getSerializable(RUNTIME_STATE_VIEW_IDS); } /** @@ -2019,7 +1987,6 @@ public class Launcher extends Activity // Save the current widgets tray? // TODO(hyunyoungs) - outState.putSerializable(RUNTIME_STATE_VIEW_IDS, mItemIdToViewId); if (mLauncherCallbacks != null) { mLauncherCallbacks.onSaveInstanceState(outState); diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index b63ddbaa7e..8d70c0b39a 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -579,6 +579,7 @@ public class Workspace extends PagedView CellLayout customScreen = (CellLayout) mLauncher.getLayoutInflater().inflate(R.layout.workspace_screen, this, false); customScreen.disableDragTarget(); + customScreen.disableJailContent(); mWorkspaceScreens.put(CUSTOM_CONTENT_SCREEN_ID, customScreen); mScreenOrder.add(0, CUSTOM_CONTENT_SCREEN_ID); diff --git a/src/com/android/launcher3/util/ParcelableSparseArray.java b/src/com/android/launcher3/util/ParcelableSparseArray.java new file mode 100644 index 0000000000..093577e593 --- /dev/null +++ b/src/com/android/launcher3/util/ParcelableSparseArray.java @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2015 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.util; + +import android.os.Parcel; +import android.os.Parcelable; +import android.util.SparseArray; + +public class ParcelableSparseArray extends SparseArray implements Parcelable { + public int describeContents() { + return 0; + } + + public void writeToParcel(Parcel dest, int flags) { + final int count = size(); + dest.writeInt(count); + for (int i = 0; i < count; i++) { + dest.writeInt(keyAt(i)); + dest.writeParcelable(valueAt(i), 0); + } + } + + public static final Parcelable.Creator CREATOR = + new Parcelable.Creator() { + public ParcelableSparseArray createFromParcel(Parcel source) { + final ParcelableSparseArray array = new ParcelableSparseArray(); + final ClassLoader loader = array.getClass().getClassLoader(); + final int count = source.readInt(); + for (int i = 0; i < count; i++) { + array.put(source.readInt(), source.readParcelable(loader)); + } + return array; + } + + public ParcelableSparseArray[] newArray(int size) { + return new ParcelableSparseArray[size]; + } + }; +} From ec88204389ffc0d5fdbe656c683d5844b9c8b49b Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 5 Oct 2015 10:36:54 -0700 Subject: [PATCH 055/219] Update the widget spans after the provider changes Bug: 24003213 Change-Id: I51ad5919a808ef10385d62a48a94589eefcb06bc --- src/com/android/launcher3/LauncherAppWidgetHost.java | 3 +++ src/com/android/launcher3/LauncherAppWidgetProviderInfo.java | 2 +- .../android/launcher3/compat/PackageInstallerCompatVL.java | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/LauncherAppWidgetHost.java b/src/com/android/launcher3/LauncherAppWidgetHost.java index 6c3a1e8963..28c5eacddb 100644 --- a/src/com/android/launcher3/LauncherAppWidgetHost.java +++ b/src/com/android/launcher3/LauncherAppWidgetHost.java @@ -125,5 +125,8 @@ public class LauncherAppWidgetHost extends AppWidgetHost { LauncherAppWidgetProviderInfo info = LauncherAppWidgetProviderInfo.fromProviderInfo( mLauncher, appWidget); super.onProviderChanged(appWidgetId, info); + // The super method updates the dimensions of the providerInfo. Update the + // launcher spans accordingly. + info.initSpans(); } } diff --git a/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java b/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java index 71a08a8536..28d805269a 100644 --- a/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java +++ b/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java @@ -59,7 +59,7 @@ public class LauncherAppWidgetProviderInfo extends AppWidgetProviderInfo { initSpans(); } - private void initSpans() { + public void initSpans() { LauncherAppState app = LauncherAppState.getInstance(); InvariantDeviceProfile idp = app.getInvariantDeviceProfile(); diff --git a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java index 3ad51017d2..6424e0379c 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java @@ -107,7 +107,7 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { @Override public void onProgressChanged(int sessionId, float progress) { SessionInfo session = mInstaller.getSessionInfo(sessionId); - if (session != null) { + if (session != null && session.getAppPackageName() != null) { sendUpdate(new PackageInstallInfo(session.getAppPackageName(), STATUS_INSTALLING, (int) (session.getProgress() * 100))); @@ -124,7 +124,7 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { private void pushSessionDisplayToLauncher(int sessionId) { SessionInfo session = mInstaller.getSessionInfo(sessionId); - if (session != null) { + if (session != null && session.getAppPackageName() != null) { addSessionInfoToCahce(session, UserHandleCompat.myUserHandle()); LauncherAppState app = LauncherAppState.getInstanceNoCreate(); From 0bb211a9d5cd4eabcbf46385bbfb9895e5cd7325 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Fri, 2 Oct 2015 16:22:08 -0700 Subject: [PATCH 056/219] Actually call LauncherTransitionable.onLauncherTransitionStep(). Previously, it was only called at the start and end of the transition; now it is called as the animation interpolates. Specifically, a dummy ValueAnimator is played alongside the transition animation and calls dispatchOnLauncherTransitionStep() as it goes. One place where this is important is in Workspace, where mTransitionProgress is used to determine things like whether the workspace should accept a drop - hence the bug that caused apps dragged from All Apps to vanish when dropped before the transition ended. Bug: 24215358 Change-Id: I32cd633c53557305caf84e87c9a4d4f07eef2223 --- src/com/android/launcher3/Launcher.java | 1 + .../android/launcher3/LauncherAnimUtils.java | 34 +++++++++---------- .../LauncherStateTransitionAnimation.java | 28 ++++++++++++++- 3 files changed, 45 insertions(+), 18 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index f90e09c39c..59fcb44f12 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -3824,6 +3824,7 @@ public class Launcher extends Activity * * Implementation of the method from LauncherModel.Callbacks. */ + @Override public void bindItems(final ArrayList shortcuts, final int start, final int end, final boolean forceAnimateIcons) { Runnable r = new Runnable() { diff --git a/src/com/android/launcher3/LauncherAnimUtils.java b/src/com/android/launcher3/LauncherAnimUtils.java index 6a248a3325..fa20f0360b 100644 --- a/src/com/android/launcher3/LauncherAnimUtils.java +++ b/src/com/android/launcher3/LauncherAnimUtils.java @@ -24,7 +24,6 @@ import android.animation.ValueAnimator; import android.annotation.TargetApi; import android.os.Build; import android.view.View; -import android.view.ViewAnimationUtils; import android.view.ViewTreeObserver; import com.android.launcher3.util.UiThreadCircularReveal; @@ -59,24 +58,25 @@ public class LauncherAnimUtils { // it should be cancelled public static void startAnimationAfterNextDraw(final Animator animator, final View view) { view.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawListener() { - private boolean mStarted = false; - public void onDraw() { - if (mStarted) return; - mStarted = true; - // Use this as a signal that the animation was cancelled - if (animator.getDuration() == 0) { - return; - } - animator.start(); + private boolean mStarted = false; - final ViewTreeObserver.OnDrawListener listener = this; - view.post(new Runnable() { - public void run() { - view.getViewTreeObserver().removeOnDrawListener(listener); - } - }); + public void onDraw() { + if (mStarted) return; + mStarted = true; + // Use this as a signal that the animation was cancelled + if (animator.getDuration() == 0) { + return; } - }); + animator.start(); + + final ViewTreeObserver.OnDrawListener listener = this; + view.post(new Runnable() { + public void run() { + view.getViewTreeObserver().removeOnDrawListener(listener); + } + }); + } + }); } public static void onDestroyActivity() { diff --git a/src/com/android/launcher3/LauncherStateTransitionAnimation.java b/src/com/android/launcher3/LauncherStateTransitionAnimation.java index 47b0a91668..3391d06c12 100644 --- a/src/com/android/launcher3/LauncherStateTransitionAnimation.java +++ b/src/com/android/launcher3/LauncherStateTransitionAnimation.java @@ -22,6 +22,7 @@ import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.animation.TimeInterpolator; +import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.content.res.Resources; import android.util.Log; @@ -229,6 +230,8 @@ public class LauncherStateTransitionAnimation { startWorkspaceSearchBarAnimation(animation, fromWorkspaceState, toWorkspaceState, animated ? revealDuration : 0, overlaySearchBarView); + Animator updateTransitionStepAnim = dispatchOnLauncherTransitionStepAnim(fromView, toView); + if (animated && initialized) { // Setup the reveal view animation int width = revealView.getMeasuredWidth(); @@ -342,11 +345,12 @@ public class LauncherStateTransitionAnimation { animation.play(workspaceAnim); } + animation.play(updateTransitionStepAnim); + // Dispatch the prepare transition signal dispatchOnLauncherTransitionPrepare(fromView, animated, false); dispatchOnLauncherTransitionPrepare(toView, animated, false); - final AnimatorSet stateAnimation = animation; final Runnable startAnimRunnable = new Runnable() { public void run() { @@ -401,6 +405,24 @@ public class LauncherStateTransitionAnimation { } } + /** + * Returns an Animator that calls {@link #dispatchOnLauncherTransitionStep(View, float)} on + * {@param fromView} and {@param toView} as the animation interpolates. + * + * This is a bit hacky: we create a dummy ValueAnimator just for the AnimatorUpdateListener. + */ + private Animator dispatchOnLauncherTransitionStepAnim(final View fromView, final View toView) { + ValueAnimator updateAnimator = ValueAnimator.ofFloat(0, 1); + updateAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + dispatchOnLauncherTransitionStep(fromView, animation.getAnimatedFraction()); + dispatchOnLauncherTransitionStep(toView, animation.getAnimatedFraction()); + } + }); + return updateAnimator; + } + /** * Starts and animation to the workspace from the apps view. */ @@ -509,12 +531,16 @@ public class LauncherStateTransitionAnimation { startWorkspaceSearchBarAnimation(animation, fromWorkspaceState, toWorkspaceState, animated ? revealDuration : 0, overlaySearchBarView); + Animator updateTransitionStepAnim = dispatchOnLauncherTransitionStepAnim(fromView, toView); + if (animated && initialized) { // Play the workspace animation if (workspaceAnim != null) { animation.play(workspaceAnim); } + animation.play(updateTransitionStepAnim); + // hideAppsCustomizeHelper is called in some cases when it is already hidden // don't perform all these no-op animations. In particularly, this was causing // the all-apps button to pop in and out. From 3a3517fb6c17120c6d11e5c95a0de4e81205d0ae Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Tue, 6 Oct 2015 11:27:04 -0700 Subject: [PATCH 057/219] Add widget size options for QSB. Bug: 24704753 Change-Id: I3e16c1f67a67b08b3843f7f38312447bdfa6a91e --- src/com/android/launcher3/DeviceProfile.java | 6 ++--- src/com/android/launcher3/Launcher.java | 27 ++++++++++++++++++-- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 774594fe2c..47c5ccc9e7 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -250,7 +250,7 @@ public class DeviceProfile { /** Returns the search bar bounds in the current orientation */ public Rect getSearchBarBounds(boolean isLayoutRtl) { Rect bounds = new Rect(); - if (isLandscape && transposeLayoutWithOrientation) { + if (isVerticalBarLayout()) { if (isLayoutRtl) { bounds.set(availableWidthPx - searchBarSpaceHeightPx, edgeMarginPx, availableWidthPx, availableHeightPx - edgeMarginPx); @@ -284,7 +284,7 @@ public class DeviceProfile { Rect getWorkspacePadding(boolean isLayoutRtl) { Rect searchBarBounds = getSearchBarBounds(isLayoutRtl); Rect padding = new Rect(); - if (isLandscape && transposeLayoutWithOrientation) { + if (isVerticalBarLayout()) { // Pad the left and right of the workspace with search/hotseat bar sizes if (isLayoutRtl) { padding.set(hotseatBarHeightPx, edgeMarginPx, @@ -320,7 +320,7 @@ public class DeviceProfile { } private int getWorkspacePageSpacing(boolean isLayoutRtl) { - if ((isLandscape && transposeLayoutWithOrientation) || isLargeTablet) { + if (isVerticalBarLayout() || isLargeTablet) { // In landscape mode the page spacing is set to the default. return defaultPageSpacingPx; } else { diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 5a5bad7e54..bf9a42681d 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -430,8 +430,8 @@ public class Launcher extends Activity // Load configuration-specific DeviceProfile mDeviceProfile = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? - app.getInvariantDeviceProfile().landscapeProfile - : app.getInvariantDeviceProfile().portraitProfile; + app.getInvariantDeviceProfile().landscapeProfile + : app.getInvariantDeviceProfile().portraitProfile; mSharedPrefs = getSharedPreferences(LauncherAppState.getSharedPreferencesKey(), Context.MODE_PRIVATE); @@ -3494,6 +3494,28 @@ public class Launcher extends Activity opts.putInt(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY, AppWidgetProviderInfo.WIDGET_CATEGORY_SEARCHBOX); + // Determine the min and max dimensions of the widget. + LauncherAppState app = LauncherAppState.getInstance(); + DeviceProfile portraitProfile = app.getInvariantDeviceProfile().portraitProfile; + DeviceProfile landscapeProfile = app.getInvariantDeviceProfile().landscapeProfile; + float density = getResources().getDisplayMetrics().density; + Rect searchBounds = portraitProfile.getSearchBarBounds(Utilities.isRtl(getResources())); + int maxHeight = (int) (searchBounds.height() / density); + int minHeight = maxHeight; + int maxWidth = (int) (searchBounds.width() / density); + int minWidth = maxWidth; + if (!landscapeProfile.isVerticalBarLayout()) { + searchBounds = landscapeProfile.getSearchBarBounds(Utilities.isRtl(getResources())); + maxHeight = (int) Math.max(maxHeight, searchBounds.height() / density); + minHeight = (int) Math.min(minHeight, searchBounds.height() / density); + maxWidth = (int) Math.max(maxWidth, searchBounds.width() / density); + minWidth = (int) Math.min(minWidth, searchBounds.width() / density); + } + opts.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT, maxHeight); + opts.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, minHeight); + opts.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH, maxWidth); + opts.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, minWidth); + SharedPreferences sp = getSharedPreferences( LauncherAppState.getSharedPreferencesKey(), MODE_PRIVATE); int widgetId = sp.getInt(QSB_WIDGET_ID, -1); @@ -4110,6 +4132,7 @@ public class Launcher extends Activity return mDeviceProfile.isVerticalBarLayout(); } + /** Returns the search bar bounds in pixels. */ protected Rect getSearchBarBounds() { return mDeviceProfile.getSearchBarBounds(Utilities.isRtl(getResources())); } From 53d3be63a5ab056280279bcb13089faae0e7796f Mon Sep 17 00:00:00 2001 From: Geoff Mendal Date: Tue, 6 Oct 2015 14:06:53 -0700 Subject: [PATCH 058/219] Import translations. DO NOT MERGE Auto-generated-cl: translation import Bug: 22482938 Change-Id: I758693c47b7d200da62bc1e9df4d0faaf9b147f2 --- res/values-fi/strings.xml | 4 ++-- res/values-hu/strings.xml | 2 +- res/values-lt/strings.xml | 2 +- res/values-ne-rNP/strings.xml | 2 +- res/values-nl/strings.xml | 2 +- res/values-sl/strings.xml | 2 +- res/values-sw/strings.xml | 2 +- res/values-uz-rUZ/strings.xml | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 47b580e3b6..7190b73a22 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -37,8 +37,8 @@ "Suosikit-valikossa ei ole enää tilaa" "Sovellukset" "Aloitusruutu" - "Poista" - "Poista" + "Poista kuvake" + "Poista asennus" "Sovelluksen tiedot" "asenna pikakuvakkeita" "Antaa sovelluksen lisätä pikakuvakkeita itsenäisesti ilman käyttäjän valintaa." diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 41c38b2def..cd328abd7a 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -38,7 +38,7 @@ "Alkalmazások" "Főoldal" "Eltávolítás" - "Eltávolítás" + "Törlés" "Alkalmazásinformáció" "parancsikonok telepítése" "Lehetővé teszi egy alkalmazás számára, hogy felhasználói beavatkozás nélkül adjon hozzá parancsikonokat." diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 442874dbe8..1cc543cb75 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -37,7 +37,7 @@ "Mėgstamiausių dėkle nebėra vietos" "Programos" "Pagrindinis" - "Pašalinti" + "Ištrinti" "Pašalinti" "Programos informacija" "įdiegti sparčiuosius klavišus" diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml index 472bd4f5d1..057dfb8b5b 100644 --- a/res/values-ne-rNP/strings.xml +++ b/res/values-ne-rNP/strings.xml @@ -38,7 +38,7 @@ "अनुप्रयोगहरू" "गृह" "हटाउनुहोस्" - "हटाउनुहोस्" + "स्थापना हटाउनुहोस्" "अनुप्रयोग जानकारी" "सर्टकट स्थापना गर्नेहोस्" "प्रयोगकर्ताको हस्तक्षेप बिना एउटा अनुप्रयोगलाई सर्टकटमा थप्नको लागि अनुमति दिनुहोस्।" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index ac793caf80..5ab1112a17 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -38,7 +38,7 @@ "Apps" "Startpagina" "Verwijderen" - "Verwijderen" + "Deïnstalleren" "App-info" "Snelkoppelingen instellen" "Een app toestaan snelkoppelingen toe te voegen zonder tussenkomst van de gebruiker." diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 497378b788..25a01fab18 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -38,7 +38,7 @@ "Aplikacije" "Začetni zaslon" "Odstrani" - "Odstrani" + "Odstrani namestitev" "Podatki o aplikaciji" "namestitev bližnjic" "Aplikaciji dovoli dodajanje bližnjic brez posredovanja uporabnika." diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index b86fb7325e..175f107f35 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -38,7 +38,7 @@ "Programu" "Mwanzo" "Ondoa" - "Ondoa" + "Sakinusha" "Maelezo ya programu" "kuweka njia za mkato" "Huruhusu programu kuongeza njia za mkato bila mtumiaji kuingilia kati." diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml index 24e4c4d14d..98786f5129 100644 --- a/res/values-uz-rUZ/strings.xml +++ b/res/values-uz-rUZ/strings.xml @@ -37,7 +37,7 @@ "Ajratilganlarda birorta ham xona yo‘q" "Ilovalar" "Uy" - "O‘chirish" + "Olib tashlash" "O‘chirish" "Ilova haqida" "yorliqlar yaratish" From 6fb929e0038a9d03b60540fdbf6b6914146f7b21 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 23 Sep 2015 11:40:53 -0700 Subject: [PATCH 059/219] Verifying that the table was successfully created during initialzation Table creation sometimes fails scilently, which leads to a crash loop. This way, we will try to create a table every time after crash, so the device would eventually be able to recover. Bug: 24263894 Change-Id: Ic0169d33f4092042423afa24320182786c544d47 --- .../android/launcher3/LauncherProvider.java | 106 +++++++++++------- 1 file changed, 63 insertions(+), 43 deletions(-) diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 8791e9e57d..a6fd282422 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -331,10 +331,6 @@ public class LauncherProvider extends ContentProvider { return mOpenHelper.generateNewItemId(); } - public void updateMaxItemId(long id) { - mOpenHelper.updateMaxItemId(id); - } - public long generateNewScreenId() { return mOpenHelper.generateNewScreenId(); } @@ -488,6 +484,16 @@ public class LauncherProvider extends ContentProvider { mContext = context; mAppWidgetHost = new AppWidgetHost(context, Launcher.APPWIDGET_HOST_ID); + // Table creation sometimes fails silently, which leads to a crash loop. + // This way, we will try to create a table every time after crash, so the device + // would eventually be able to recover. + if (!tableExists(TABLE_FAVORITES) || !tableExists(TABLE_WORKSPACE_SCREENS)) { + Log.e(TAG, "Tables are missing after onCreate has been called. Trying to recreate"); + // This operation is a no-op if the table already exists. + addFavoritesTable(getWritableDatabase(), true); + addWorkspacesTable(getWritableDatabase(), true); + } + // In the case where neither onCreate nor onUpgrade gets called, we read the maxId from // the DB here if (mMaxItemId == -1) { @@ -498,6 +504,18 @@ public class LauncherProvider extends ContentProvider { } } + private boolean tableExists(String tableName) { + Cursor c = getReadableDatabase().query( + true, "sqlite_master", new String[] {"tbl_name"}, + "tbl_name = ?", new String[] {tableName}, + null, null, null, null, null); + try { + return c.getCount() > 0; + } finally { + c.close(); + } + } + public boolean wasNewDbCreated() { return mNewDbCreated; } @@ -510,37 +528,8 @@ public class LauncherProvider extends ContentProvider { mMaxScreenId = 0; mNewDbCreated = true; - UserManagerCompat userManager = UserManagerCompat.getInstance(mContext); - long userSerialNumber = userManager.getSerialNumberForUser( - UserHandleCompat.myUserHandle()); - - db.execSQL("CREATE TABLE favorites (" + - "_id INTEGER PRIMARY KEY," + - "title TEXT," + - "intent TEXT," + - "container INTEGER," + - "screen INTEGER," + - "cellX INTEGER," + - "cellY INTEGER," + - "spanX INTEGER," + - "spanY INTEGER," + - "itemType INTEGER," + - "appWidgetId INTEGER NOT NULL DEFAULT -1," + - "isShortcut INTEGER," + - "iconType INTEGER," + - "iconPackage TEXT," + - "iconResource TEXT," + - "icon BLOB," + - "uri TEXT," + - "displayMode INTEGER," + - "appWidgetProvider TEXT," + - "modified INTEGER NOT NULL DEFAULT 0," + - "restored INTEGER NOT NULL DEFAULT 0," + - "profileId INTEGER DEFAULT " + userSerialNumber + "," + - "rank INTEGER NOT NULL DEFAULT 0," + - "options INTEGER NOT NULL DEFAULT 0" + - ");"); - addWorkspacesTable(db); + addFavoritesTable(db, false); + addWorkspacesTable(db, false); // Database was just created, so wipe any previous widgets if (mAppWidgetHost != null) { @@ -571,8 +560,43 @@ public class LauncherProvider extends ContentProvider { ManagedProfileHeuristic.processAllUsers(Collections.emptyList(), mContext); } - private void addWorkspacesTable(SQLiteDatabase db) { - db.execSQL("CREATE TABLE " + TABLE_WORKSPACE_SCREENS + " (" + + private void addFavoritesTable(SQLiteDatabase db, boolean optional) { + UserManagerCompat userManager = UserManagerCompat.getInstance(mContext); + long userSerialNumber = userManager.getSerialNumberForUser( + UserHandleCompat.myUserHandle()); + String ifNotExists = optional ? " IF NOT EXISTS " : ""; + + db.execSQL("CREATE TABLE " + ifNotExists + TABLE_FAVORITES + " (" + + "_id INTEGER PRIMARY KEY," + + "title TEXT," + + "intent TEXT," + + "container INTEGER," + + "screen INTEGER," + + "cellX INTEGER," + + "cellY INTEGER," + + "spanX INTEGER," + + "spanY INTEGER," + + "itemType INTEGER," + + "appWidgetId INTEGER NOT NULL DEFAULT -1," + + "isShortcut INTEGER," + + "iconType INTEGER," + + "iconPackage TEXT," + + "iconResource TEXT," + + "icon BLOB," + + "uri TEXT," + + "displayMode INTEGER," + + "appWidgetProvider TEXT," + + "modified INTEGER NOT NULL DEFAULT 0," + + "restored INTEGER NOT NULL DEFAULT 0," + + "profileId INTEGER DEFAULT " + userSerialNumber + "," + + "rank INTEGER NOT NULL DEFAULT 0," + + "options INTEGER NOT NULL DEFAULT 0" + + ");"); + } + + private void addWorkspacesTable(SQLiteDatabase db, boolean optional) { + String ifNotExists = optional ? " IF NOT EXISTS " : ""; + db.execSQL("CREATE TABLE " + ifNotExists + TABLE_WORKSPACE_SCREENS + " (" + LauncherSettings.WorkspaceScreens._ID + " INTEGER PRIMARY KEY," + LauncherSettings.WorkspaceScreens.SCREEN_RANK + " INTEGER," + LauncherSettings.ChangeLogColumns.MODIFIED + " INTEGER NOT NULL DEFAULT 0" + @@ -632,7 +656,7 @@ public class LauncherProvider extends ContentProvider { // With the new shrink-wrapped and re-orderable workspaces, it makes sense // to persist workspace screens and their relative order. mMaxScreenId = 0; - addWorkspacesTable(db); + addWorkspacesTable(db, false); } case 13: { db.beginTransaction(); @@ -828,7 +852,7 @@ public class LauncherProvider extends ContentProvider { } db.execSQL("DROP TABLE IF EXISTS " + TABLE_WORKSPACE_SCREENS); - addWorkspacesTable(db); + addWorkspacesTable(db, false); // Add all screen ids back int total = sortedIDs.size(); @@ -926,10 +950,6 @@ public class LauncherProvider extends ContentProvider { return dbInsertAndCheck(this, db, TABLE_FAVORITES, null, values); } - public void updateMaxItemId(long id) { - mMaxItemId = id + 1; - } - public void checkId(String table, ContentValues values) { long id = values.getAsLong(LauncherSettings.BaseLauncherColumns._ID); if (table == LauncherProvider.TABLE_WORKSPACE_SCREENS) { From 79d0ac937ba6d6f332e3c43fe9db43b008a04d14 Mon Sep 17 00:00:00 2001 From: Geoff Mendal Date: Wed, 7 Oct 2015 07:19:53 -0700 Subject: [PATCH 060/219] Import translations. DO NOT MERGE Change-Id: Ibbe258e46dd396e9186a47b3881796e12f689e33 Auto-generated-cl: translation import --- res/values-zh-rCN/strings.xml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 8f0d8831ff..1f2a394d5c 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -77,10 +77,8 @@ "搜索" "未安装此应用" "未安装此图标对应的应用。您可以移除此图标,也可以尝试搜索相应的应用并手动安装。" - - - - + "正在下载%1$s,已完成 %2$s" + "%1$s正在等待安装" "添加到主屏幕" "将项目移至此处" "已将项目添加到主屏幕" From d306055f2d7750df08d9dfb9f630517e0b43f6eb Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 25 Jun 2015 19:35:49 -0700 Subject: [PATCH 061/219] Moving a few testing classes to a separate package Change-Id: Ied1c063de3e938695493e4937f554686e0719dad --- AndroidManifest.xml | 103 +++++++++--------- ...{dummy_widget.xml => zzz_dummy_widget.xml} | 0 res/layout/zzz_weight_watcher.xml | 4 + res/values/config.xml | 3 - res/values/strings.xml | 5 - src/com/android/launcher3/Launcher.java | 68 ++---------- .../android/launcher3/LauncherAppState.java | 5 +- .../launcher3/ToggleWeightWatcher.java | 7 -- .../launcher3/{ => testing}/DummyWidget.java | 7 +- .../{ => testing}/MemoryDumpActivity.java | 16 ++- .../{ => testing}/MemoryTracker.java | 22 ++-- .../testing/ToggleWeightWatcher.java | 32 ++++++ .../{ => testing}/WeightWatcher.java | 6 +- .../android/launcher3/util/TestingUtils.java | 73 +++++++++++++ 14 files changed, 197 insertions(+), 154 deletions(-) rename res/layout/{dummy_widget.xml => zzz_dummy_widget.xml} (100%) create mode 100644 res/layout/zzz_weight_watcher.xml delete mode 100644 src/com/android/launcher3/ToggleWeightWatcher.java rename src/com/android/launcher3/{ => testing}/DummyWidget.java (82%) rename src/com/android/launcher3/{ => testing}/MemoryDumpActivity.java (94%) rename src/com/android/launcher3/{ => testing}/MemoryTracker.java (93%) create mode 100644 src/com/android/launcher3/testing/ToggleWeightWatcher.java rename src/com/android/launcher3/{ => testing}/WeightWatcher.java (98%) create mode 100644 src/com/android/launcher3/util/TestingUtils.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 99a6ad9aa2..b0b1e95cca 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -92,39 +92,6 @@ - - - - - - - - - - - - - - - - - - - - - - @@ -219,5 +165,54 @@ + + + diff --git a/res/layout/dummy_widget.xml b/res/layout/zzz_dummy_widget.xml similarity index 100% rename from res/layout/dummy_widget.xml rename to res/layout/zzz_dummy_widget.xml diff --git a/res/layout/zzz_weight_watcher.xml b/res/layout/zzz_weight_watcher.xml new file mode 100644 index 0000000000..07fd39e91f --- /dev/null +++ b/res/layout/zzz_weight_watcher.xml @@ -0,0 +1,4 @@ + + diff --git a/res/values/config.xml b/res/values/config.xml index 5cde42e8a0..85500883a1 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -67,9 +67,6 @@ true - - false - diff --git a/res/values/strings.xml b/res/values/strings.xml index 91dfb19f36..ca92e11340 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -45,8 +45,6 @@ Widgets disabled in Safe mode - Show Mem - Touch & hold to pick up a widget. @@ -162,9 +160,6 @@ Folder: %1$s - - * HPROF - Widgets diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 20c42377ed..c6cb779c4a 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -72,7 +72,6 @@ import android.text.TextUtils; import android.text.method.TextKeyListener; import android.util.Log; import android.view.Display; -import android.view.Gravity; import android.view.HapticFeedbackConstants; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -91,7 +90,6 @@ import android.view.accessibility.AccessibilityEvent; import android.view.animation.OvershootInterpolator; import android.view.inputmethod.InputMethodManager; import android.widget.Advanceable; -import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; @@ -107,6 +105,7 @@ import com.android.launcher3.compat.UserManagerCompat; import com.android.launcher3.model.WidgetsModel; import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.LongArrayMap; +import com.android.launcher3.util.TestingUtils; import com.android.launcher3.util.Thunk; import com.android.launcher3.widget.PendingAddWidgetInfo; import com.android.launcher3.widget.WidgetHostViewLoader; @@ -200,9 +199,6 @@ public class Launcher extends Activity static final String ACTION_FIRST_LOAD_COMPLETE = "com.android.launcher3.action.FIRST_LOAD_COMPLETE"; - public static final String SHOW_WEIGHT_WATCHER = "debug.show_mem"; - public static final boolean SHOW_WEIGHT_WATCHER_DEFAULT = false; - private static final String QSB_WIDGET_ID = "qsb_widget_id"; private static final String QSB_WIDGET_PROVIDER = "qsb_widget_provider"; @@ -240,7 +236,8 @@ public class Launcher extends Activity private View mPageIndicators; @Thunk DragLayer mDragLayer; private DragController mDragController; - private View mWeightWatcher; + + public View mWeightWatcher; private AppWidgetManagerCompat mAppWidgetManager; private LauncherAppWidgetHost mAppWidgetHost; @@ -350,10 +347,9 @@ public class Launcher extends Activity protected static HashMap sCustomAppWidgets = new HashMap(); - private static final boolean ENABLE_CUSTOM_WIDGET_TEST = false; static { - if (ENABLE_CUSTOM_WIDGET_TEST) { - sCustomAppWidgets.put(DummyWidget.class.getName(), new DummyWidget()); + if (TestingUtils.ENABLE_CUSTOM_WIDGET_TEST) { + TestingUtils.addDummyWidget(sCustomAppWidgets); } } @@ -1453,19 +1449,8 @@ public class Launcher extends Activity mSearchDropTargetBar.setQsbSearchBar(getOrCreateQsbBar()); } - if (getResources().getBoolean(R.bool.debug_memory_enabled)) { - Log.v(TAG, "adding WeightWatcher"); - mWeightWatcher = new WeightWatcher(this); - mWeightWatcher.setAlpha(0.5f); - ((FrameLayout) mLauncherView).addView(mWeightWatcher, - new FrameLayout.LayoutParams( - FrameLayout.LayoutParams.MATCH_PARENT, - FrameLayout.LayoutParams.WRAP_CONTENT, - Gravity.BOTTOM) - ); - - boolean show = shouldShowWeightWatcher(); - mWeightWatcher.setVisibility(show ? View.VISIBLE : View.GONE); + if (TestingUtils.MEMORY_DUMP_ENABLED) { + TestingUtils.addWeightWatcher(this); } } @@ -2673,21 +2658,6 @@ public class Launcher extends Activity return; } - final Intent intent = shortcut.intent; - - // Check for special shortcuts - if (intent.getComponent() != null) { - final String shortcutClass = intent.getComponent().getClassName(); - - if (shortcutClass.equals(MemoryDumpActivity.class.getName())) { - MemoryDumpActivity.startDump(this); - return; - } else if (shortcutClass.equals(ToggleWeightWatcher.class.getName())) { - toggleShowWeightWatcher(); - return; - } - } - // Check for abandoned promise if ((v instanceof BubbleTextView) && shortcut.isPromise() @@ -3780,30 +3750,6 @@ public class Launcher extends Activity } } - private boolean shouldShowWeightWatcher() { - String spKey = LauncherAppState.getSharedPreferencesKey(); - SharedPreferences sp = getSharedPreferences(spKey, Context.MODE_PRIVATE); - boolean show = sp.getBoolean(SHOW_WEIGHT_WATCHER, SHOW_WEIGHT_WATCHER_DEFAULT); - - return show; - } - - private void toggleShowWeightWatcher() { - String spKey = LauncherAppState.getSharedPreferencesKey(); - SharedPreferences sp = getSharedPreferences(spKey, Context.MODE_PRIVATE); - boolean show = sp.getBoolean(SHOW_WEIGHT_WATCHER, true); - - show = !show; - - SharedPreferences.Editor editor = sp.edit(); - editor.putBoolean(SHOW_WEIGHT_WATCHER, show); - editor.commit(); - - if (mWeightWatcher != null) { - mWeightWatcher.setVisibility(show ? View.VISIBLE : View.GONE); - } - } - public void bindAppsAdded(final ArrayList newScreens, final ArrayList addNotAnimated, final ArrayList addAnimated, diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index d87ad67e5f..f75b33c54f 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -27,6 +27,7 @@ import com.android.launcher3.accessibility.LauncherAccessibilityDelegate; import com.android.launcher3.compat.LauncherAppsCompat; import com.android.launcher3.compat.PackageInstallerCompat; import com.android.launcher3.compat.UserManagerCompat; +import com.android.launcher3.util.TestingUtils; import com.android.launcher3.util.Thunk; import java.lang.ref.WeakReference; @@ -79,8 +80,8 @@ public class LauncherAppState { Log.v(Launcher.TAG, "LauncherAppState inited"); - if (sContext.getResources().getBoolean(R.bool.debug_memory_enabled)) { - MemoryTracker.startTrackingMe(sContext, "L"); + if (TestingUtils.MEMORY_DUMP_ENABLED) { + TestingUtils.startTrackingMemory(sContext); } mInvariantDeviceProfile = new InvariantDeviceProfile(sContext); diff --git a/src/com/android/launcher3/ToggleWeightWatcher.java b/src/com/android/launcher3/ToggleWeightWatcher.java deleted file mode 100644 index 33701a2c43..0000000000 --- a/src/com/android/launcher3/ToggleWeightWatcher.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.android.launcher3; - -import android.app.Activity; - -public class ToggleWeightWatcher extends Activity { - -} diff --git a/src/com/android/launcher3/DummyWidget.java b/src/com/android/launcher3/testing/DummyWidget.java similarity index 82% rename from src/com/android/launcher3/DummyWidget.java rename to src/com/android/launcher3/testing/DummyWidget.java index 59cd805012..df887ac1fc 100644 --- a/src/com/android/launcher3/DummyWidget.java +++ b/src/com/android/launcher3/testing/DummyWidget.java @@ -1,7 +1,10 @@ -package com.android.launcher3; +package com.android.launcher3.testing; import android.appwidget.AppWidgetProviderInfo; +import com.android.launcher3.CustomAppWidget; +import com.android.launcher3.R; + public class DummyWidget implements CustomAppWidget { @Override public String getLabel() { @@ -20,7 +23,7 @@ public class DummyWidget implements CustomAppWidget { @Override public int getWidgetLayout() { - return R.layout.dummy_widget; + return R.layout.zzz_dummy_widget; } @Override diff --git a/src/com/android/launcher3/MemoryDumpActivity.java b/src/com/android/launcher3/testing/MemoryDumpActivity.java similarity index 94% rename from src/com/android/launcher3/MemoryDumpActivity.java rename to src/com/android/launcher3/testing/MemoryDumpActivity.java index d79be80073..9bcf92b1b2 100644 --- a/src/com/android/launcher3/MemoryDumpActivity.java +++ b/src/com/android/launcher3/testing/MemoryDumpActivity.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.launcher3; +package com.android.launcher3.testing; import android.app.Activity; import android.content.ComponentName; @@ -23,10 +23,20 @@ import android.content.Intent; import android.content.ServiceConnection; import android.content.pm.PackageManager; import android.net.Uri; -import android.os.*; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.IBinder; import android.util.Log; -import java.io.*; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.zip.ZipEntry; diff --git a/src/com/android/launcher3/MemoryTracker.java b/src/com/android/launcher3/testing/MemoryTracker.java similarity index 93% rename from src/com/android/launcher3/MemoryTracker.java rename to src/com/android/launcher3/testing/MemoryTracker.java index 067a50f970..ed2a3122c0 100644 --- a/src/com/android/launcher3/MemoryTracker.java +++ b/src/com/android/launcher3/testing/MemoryTracker.java @@ -14,22 +14,28 @@ * limitations under the License. */ -package com.android.launcher3; +package com.android.launcher3.testing; import android.app.ActivityManager; import android.app.Service; import android.content.Context; import android.content.Intent; -import android.os.*; +import android.os.Binder; +import android.os.Debug; +import android.os.Handler; +import android.os.IBinder; +import android.os.Message; +import android.os.SystemClock; import android.util.Log; import android.util.LongSparseArray; +import com.android.launcher3.util.TestingUtils; + import java.util.ArrayList; import java.util.List; public class MemoryTracker extends Service { public static final String TAG = MemoryTracker.class.getSimpleName(); - public static final String ACTION_START_TRACKING = "com.android.launcher3.action.START_TRACKING"; private static final long UPDATE_RATE = 5000; @@ -83,14 +89,6 @@ public class MemoryTracker extends Service { ActivityManager mAm; - public static void startTrackingMe(Context context, String name) { - context.startService(new Intent(context, MemoryTracker.class) - .setAction(MemoryTracker.ACTION_START_TRACKING) - .putExtra("pid", android.os.Process.myPid()) - .putExtra("name", name) - ); - } - public ProcessMemInfo getMemInfo(int pid) { return mData.get(pid); } @@ -190,7 +188,7 @@ public class MemoryTracker extends Service { Log.v(TAG, "Received start id " + startId + ": " + intent); if (intent != null) { - if (ACTION_START_TRACKING.equals(intent.getAction())) { + if (TestingUtils.ACTION_START_TRACKING.equals(intent.getAction())) { final int pid = intent.getIntExtra("pid", -1); final String name = intent.getStringExtra("name"); final long start = intent.getLongExtra("start", System.currentTimeMillis()); diff --git a/src/com/android/launcher3/testing/ToggleWeightWatcher.java b/src/com/android/launcher3/testing/ToggleWeightWatcher.java new file mode 100644 index 0000000000..15e55eea62 --- /dev/null +++ b/src/com/android/launcher3/testing/ToggleWeightWatcher.java @@ -0,0 +1,32 @@ +package com.android.launcher3.testing; + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.view.View; + +import com.android.launcher3.Launcher; +import com.android.launcher3.LauncherAppState; +import com.android.launcher3.util.TestingUtils; + +public class ToggleWeightWatcher extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + String spKey = LauncherAppState.getSharedPreferencesKey(); + SharedPreferences sp = getSharedPreferences(spKey, Context.MODE_PRIVATE); + boolean show = sp.getBoolean(TestingUtils.SHOW_WEIGHT_WATCHER, true); + + show = !show; + sp.edit().putBoolean(TestingUtils.SHOW_WEIGHT_WATCHER, show).apply(); + + Launcher launcher = (Launcher) LauncherAppState.getInstance().getModel().getCallback(); + if (launcher != null && launcher.mWeightWatcher != null) { + launcher.mWeightWatcher.setVisibility(show ? View.VISIBLE : View.GONE); + } + finish(); + } +} diff --git a/src/com/android/launcher3/WeightWatcher.java b/src/com/android/launcher3/testing/WeightWatcher.java similarity index 98% rename from src/com/android/launcher3/WeightWatcher.java rename to src/com/android/launcher3/testing/WeightWatcher.java index 75684797fa..a26a2b6420 100644 --- a/src/com/android/launcher3/WeightWatcher.java +++ b/src/com/android/launcher3/testing/WeightWatcher.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.launcher3; +package com.android.launcher3.testing; import android.content.ComponentName; import android.content.Context; @@ -116,10 +116,6 @@ public class WeightWatcher extends LinearLayout { } } - public WeightWatcher(Context context) { - this(context, null); - } - @Override public void onAttachedToWindow() { super.onAttachedToWindow(); diff --git a/src/com/android/launcher3/util/TestingUtils.java b/src/com/android/launcher3/util/TestingUtils.java new file mode 100644 index 0000000000..39b80463d5 --- /dev/null +++ b/src/com/android/launcher3/util/TestingUtils.java @@ -0,0 +1,73 @@ +package com.android.launcher3.util; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.widget.FrameLayout; + +import com.android.launcher3.CustomAppWidget; +import com.android.launcher3.Launcher; +import com.android.launcher3.LauncherAppState; +import com.android.launcher3.R; + +import java.util.HashMap; + +public class TestingUtils { + + public static final String MEMORY_TRACKER = "com.android.launcher3.testing.MemoryTracker"; + public static final String ACTION_START_TRACKING = "com.android.launcher3.action.START_TRACKING"; + + public static final boolean MEMORY_DUMP_ENABLED = false; + public static final String SHOW_WEIGHT_WATCHER = "debug.show_mem"; + + public static final boolean ENABLE_CUSTOM_WIDGET_TEST = false; + public static final String DUMMY_WIDGET = "com.android.launcher3.testing.DummyWidget"; + + public static void startTrackingMemory(Context context) { + if (MEMORY_DUMP_ENABLED) { + context.startService(new Intent() + .setComponent(new ComponentName(context.getPackageName(), MEMORY_TRACKER)) + .setAction(ACTION_START_TRACKING) + .putExtra("pid", android.os.Process.myPid()) + .putExtra("name", "L")); + } + } + + public static void addWeightWatcher(Launcher launcher) { + if (MEMORY_DUMP_ENABLED) { + String spKey = LauncherAppState.getSharedPreferencesKey(); + SharedPreferences sp = launcher.getSharedPreferences(spKey, Context.MODE_PRIVATE); + boolean show = sp.getBoolean(SHOW_WEIGHT_WATCHER, true); + + int id = launcher.getResources().getIdentifier("zzz_weight_watcher", "layout", + launcher.getPackageName()); + View watcher = launcher.getLayoutInflater().inflate(id, null); + watcher.setAlpha(0.5f); + ((FrameLayout) launcher.findViewById(R.id.launcher)).addView(watcher, + new FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.WRAP_CONTENT, + Gravity.BOTTOM) + ); + + watcher.setVisibility(show ? View.VISIBLE : View.GONE); + launcher.mWeightWatcher = watcher; + } + } + + public static void addDummyWidget(HashMap set) { + if (ENABLE_CUSTOM_WIDGET_TEST) { + try { + Class clazz = Class.forName(DUMMY_WIDGET); + CustomAppWidget widget = (CustomAppWidget) clazz.newInstance(); + set.put(widget.getClass().getName(), widget); + } catch (Exception e) { + Log.e("TestingUtils", "Error adding dummy widget", e); + } + } + } +} From bbf0184603ce9395173f5e412d8188b4b0910f9e Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 8 Oct 2015 07:41:15 -0700 Subject: [PATCH 062/219] Using 23 instead of Build.Versoin.M until the final SDK is available. Change-Id: I9f8f6fe049afcd0ceb0797ddc803a2e77bab0437 --- src/com/android/launcher3/InvariantDeviceProfile.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java index 631333b2d9..5914f44758 100644 --- a/src/com/android/launcher3/InvariantDeviceProfile.java +++ b/src/com/android/launcher3/InvariantDeviceProfile.java @@ -20,7 +20,6 @@ import android.annotation.TargetApi; import android.app.ActivityManager; import android.content.Context; import android.graphics.Point; -import android.os.Build; import android.util.DisplayMetrics; import android.view.Display; import android.view.WindowManager; @@ -120,7 +119,7 @@ public class InvariantDeviceProfile { defaultLayoutId = dlId; } - @TargetApi(Build.VERSION_CODES.M) + @TargetApi(23) InvariantDeviceProfile(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); From d6b4037b093445fefa7d036da339dd549fae7a9b Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 23 Sep 2015 18:37:57 -0700 Subject: [PATCH 063/219] Grid adjustments, specifically for Ryu. > Less than 14% of the screen is used for left/right workspace padding. (To be clear, this means 7% for the left and 7% for the right.) > Hotseat icons are the same size as workspace icons. > Far left and right hotseat edges line up with workspace edges. > All Apps button is scaled down 8dp. Bug: 24003478 Change-Id: Idb057ab0f6ba29e7fd93feac7573ca2e07c7e839 --- res/values-sw720dp/dimens.xml | 1 + res/values/dimens.xml | 1 + src/com/android/launcher3/DeviceProfile.java | 40 ++++++++++++++----- src/com/android/launcher3/Hotseat.java | 7 +++- .../launcher3/InvariantDeviceProfile.java | 6 +-- 5 files changed, 39 insertions(+), 16 deletions(-) diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml index 807fab919b..b9e28a95f5 100644 --- a/res/values-sw720dp/dimens.xml +++ b/res/values-sw720dp/dimens.xml @@ -16,6 +16,7 @@ + 8dp 54dp 14dp 64dp diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 36721797e4..28ede6785a 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -63,6 +63,7 @@ 48dp + 0dp 0dp 8dp 24sp diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 47c5ccc9e7..b297658b4d 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -49,6 +49,12 @@ public class DeviceProfile { public final int heightPx; public final int availableWidthPx; public final int availableHeightPx; + /** + * The maximum amount of left/right workspace padding as a percentage of the screen width. + * To be clear, this means that up to 7% of the screen width can be used as left padding, and + * 7% of the screen width can be used as right padding. + */ + private static final float MAX_HORIZONTAL_PADDING_PERCENT = 0.14f; // Overview mode private final int overviewModeMinIconZoneHeightPx; @@ -167,7 +173,8 @@ public class DeviceProfile { private void computeAllAppsButtonSize(Context context) { Resources res = context.getResources(); float padding = res.getInteger(R.integer.config_allAppsButtonPaddingPercent) / 100f; - allAppsButtonVisualSize = (int) (hotseatIconSizePx * (1 - padding)); + allAppsButtonVisualSize = (int) (hotseatIconSizePx * (1 - padding)) - context.getResources() + .getDimensionPixelSize(R.dimen.all_apps_button_scale_down); } private void updateAvailableDimensions(DisplayMetrics dm, Resources res) { @@ -302,12 +309,15 @@ public class DeviceProfile { int height = getCurrentHeight(); int paddingTop = searchBarBounds.bottom; int paddingBottom = hotseatBarHeightPx + pageIndicatorHeightPx; - int availableWidth = Math.max(0, width - (int) ((inv.numColumns * cellWidthPx) + - (inv.numColumns * gapScale * cellWidthPx))); - int availableHeight = Math.max(0, height - paddingTop - paddingBottom + // The amount of screen space available for left/right padding. + int availablePaddingX = Math.max(0, width - (int) ((inv.numColumns * cellWidthPx) + + ((inv.numColumns - 1) * gapScale * cellWidthPx))); + availablePaddingX = (int) Math.min(availablePaddingX, + width * MAX_HORIZONTAL_PADDING_PERCENT); + int availablePaddingY = Math.max(0, height - paddingTop - paddingBottom - (int) (2 * inv.numRows * cellHeightPx)); - padding.set(availableWidth / 2, paddingTop + availableHeight / 2, - availableWidth / 2, paddingBottom + availableHeight / 2); + padding.set(availablePaddingX / 2, paddingTop + availablePaddingY / 2, + availablePaddingX / 2, paddingBottom + availablePaddingY / 2); } else { // Pad the top and bottom of the workspace with search/hotseat bar sizes padding.set(desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.left, @@ -420,6 +430,13 @@ public class DeviceProfile { // Layout the hotseat View hotseat = launcher.findViewById(R.id.hotseat); lp = (FrameLayout.LayoutParams) hotseat.getLayoutParams(); + // We want the edges of the hotseat to line up with the edges of the workspace, but the + // icons in the hotseat are a different size, and so don't line up perfectly. To account for + // this, we pad the left and right of the hotseat with half of the difference of a workspace + // cell vs a hotseat cell. + float workspaceCellWidth = (float) getCurrentWidth() / inv.numColumns; + float hotseatCellWidth = (float) getCurrentWidth() / inv.numHotseatIcons; + int hotseatAdjustment = Math.round((workspaceCellWidth - hotseatCellWidth) / 2); if (hasVerticalBarLayout) { // Vertical hotseat -- The hotseat is fixed in the layout to be on the right of the // screen regardless of RTL @@ -432,17 +449,18 @@ public class DeviceProfile { lp.gravity = Gravity.BOTTOM; lp.width = LayoutParams.MATCH_PARENT; lp.height = hotseatBarHeightPx; - hotseat.setPadding(edgeMarginPx + padding.left, 0, - edgeMarginPx + padding.right, - 2 * edgeMarginPx); + hotseat.findViewById(R.id.layout).setPadding( + hotseatAdjustment + padding.left, 0, + hotseatAdjustment + padding.right, 2 * edgeMarginPx); } else { // For phones, layout the hotseat without any bottom margin // to ensure that we have space for the folders lp.gravity = Gravity.BOTTOM; lp.width = LayoutParams.MATCH_PARENT; lp.height = hotseatBarHeightPx; - hotseat.findViewById(R.id.layout).setPadding(2 * edgeMarginPx, 0, - 2 * edgeMarginPx, 0); + hotseat.findViewById(R.id.layout).setPadding( + hotseatAdjustment + padding.left, 0, + hotseatAdjustment + padding.right, 0); } hotseat.setLayoutParams(lp); diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java index 17fdeb1dc8..98912f56ee 100644 --- a/src/com/android/launcher3/Hotseat.java +++ b/src/com/android/launcher3/Hotseat.java @@ -17,8 +17,7 @@ package com.android.launcher3; import android.content.Context; -import android.content.res.Configuration; -import android.content.res.Resources; +import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.AttributeSet; @@ -118,6 +117,10 @@ public class Hotseat extends FrameLayout Drawable d = context.getResources().getDrawable(R.drawable.all_apps_button_icon); mLauncher.resizeIconDrawable(d); + int scaleDownPx = getResources().getDimensionPixelSize(R.dimen.all_apps_button_scale_down); + Rect bounds = d.getBounds(); + d.setBounds(bounds.left, bounds.top + scaleDownPx / 2, bounds.right - scaleDownPx, + bounds.bottom - scaleDownPx / 2); allAppsButton.setCompoundDrawables(null, d, null, null); allAppsButton.setContentDescription(context.getString(R.string.all_apps_button_label)); diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java index ae204c40c3..d91104acba 100644 --- a/src/com/android/launcher3/InvariantDeviceProfile.java +++ b/src/com/android/launcher3/InvariantDeviceProfile.java @@ -74,7 +74,7 @@ public class InvariantDeviceProfile { /** * Number of icons inside the hotseat area. */ - float numHotseatIcons; + int numHotseatIcons; float hotseatIconSize; int defaultLayoutId; @@ -95,7 +95,7 @@ public class InvariantDeviceProfile { } InvariantDeviceProfile(String n, float w, float h, int r, int c, int fr, int fc, int maapc, - float is, float its, float hs, float his, int dlId) { + float is, float its, int hs, float his, int dlId) { // Ensure that we have an odd number of hotseat items (since we need to place all apps) if (hs % 2 == 0) { throw new RuntimeException("All Device Profiles must have an odd number of hotseat spaces"); @@ -195,7 +195,7 @@ public class InvariantDeviceProfile { 575, 904, 5, 6, 4, 5, 4, 72, 14.4f, 7, 60, R.xml.default_workspace_5x6)); // Larger tablet profiles always have system bars on the top & bottom predefinedDeviceProfiles.add(new InvariantDeviceProfile("Nexus 10", - 727, 1207, 5, 6, 4, 5, 4, 76, 14.4f, 7, 64, R.xml.default_workspace_5x6)); + 727, 1207, 5, 6, 4, 5, 4, 76, 14.4f, 7, 76, R.xml.default_workspace_5x6)); predefinedDeviceProfiles.add(new InvariantDeviceProfile("20-inch Tablet", 1527, 2527, 7, 7, 6, 6, 4, 100, 20, 7, 72, R.xml.default_workspace_4x4)); return predefinedDeviceProfiles; From 3b5741c263fcc404845cfd1058898acc52ee99c3 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 8 Oct 2015 13:56:37 -0700 Subject: [PATCH 064/219] Null check in PackageInstallerCompat Bug: 24582224 Change-Id: I2cd4ca12d48b3316a8a519092118d9e2970d944d --- .../android/launcher3/compat/PackageInstallerCompatVL.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java index 3ad51017d2..6424e0379c 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java @@ -107,7 +107,7 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { @Override public void onProgressChanged(int sessionId, float progress) { SessionInfo session = mInstaller.getSessionInfo(sessionId); - if (session != null) { + if (session != null && session.getAppPackageName() != null) { sendUpdate(new PackageInstallInfo(session.getAppPackageName(), STATUS_INSTALLING, (int) (session.getProgress() * 100))); @@ -124,7 +124,7 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { private void pushSessionDisplayToLauncher(int sessionId) { SessionInfo session = mInstaller.getSessionInfo(sessionId); - if (session != null) { + if (session != null && session.getAppPackageName() != null) { addSessionInfoToCahce(session, UserHandleCompat.myUserHandle()); LauncherAppState app = LauncherAppState.getInstanceNoCreate(); From 56c7360497823ed83d4eb04ef32c117e9c5608d6 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 25 Sep 2015 12:55:01 -0700 Subject: [PATCH 065/219] Verify that the widget id is valid, before binding the widget Bug: 23820213 Bug: 24054205 Bug: 24582322 Change-Id: I25a09b0a2a706812a7d82729b5dc554ffba84a2a --- src/com/android/launcher3/Launcher.java | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index c6cb779c4a..9569ec6b21 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2398,11 +2398,13 @@ public class Launcher extends Activity } } else if (itemInfo instanceof LauncherAppWidgetInfo) { final LauncherAppWidgetInfo widgetInfo = (LauncherAppWidgetInfo) itemInfo; - unbindAppWidget(widgetInfo, deleteFromDb); mWorkspace.removeWorkspaceItem(v); + removeWidgetToAutoAdvance(widgetInfo.hostView); + widgetInfo.hostView = null; if (deleteFromDb) { - LauncherModel.deleteItemFromDatabase(this, widgetInfo); + deleteWidgetInfo(widgetInfo); } + } else { return false; } @@ -2417,12 +2419,11 @@ public class Launcher extends Activity } /** - * Unbinds any launcher references to the widget and deletes the app widget id. + * Deletes the widget info and the widget id. */ - private void unbindAppWidget(final LauncherAppWidgetInfo widgetInfo, boolean deleteAppWidgetId) { + private void deleteWidgetInfo(final LauncherAppWidgetInfo widgetInfo) { final LauncherAppWidgetHost appWidgetHost = getAppWidgetHost(); - if (deleteAppWidgetId && appWidgetHost != null && - !widgetInfo.isCustomWidget() && widgetInfo.isWidgetIdValid()) { + if (appWidgetHost != null && !widgetInfo.isCustomWidget() && widgetInfo.isWidgetIdValid()) { // Deleting an app widget ID is a void call but writes to disk before returning // to the caller... new AsyncTask() { @@ -2432,8 +2433,7 @@ public class Launcher extends Activity } }.executeOnExecutor(Utilities.THREAD_POOL_EXECUTOR); } - removeWidgetToAutoAdvance(widgetInfo.hostView); - widgetInfo.hostView = null; + LauncherModel.deleteItemFromDatabase(this, widgetInfo); } @Override @@ -4001,6 +4001,15 @@ public class Launcher extends Activity + appWidgetInfo.provider); } + // Verify that we own the widget + AppWidgetProviderInfo info = mAppWidgetManager.getAppWidgetInfo(appWidgetId); + if (info == null || appWidgetInfo == null || + !info.provider.equals(appWidgetInfo.provider)) { + Log.e(TAG, "Removing invalid widget: id=" + item.appWidgetId); + deleteWidgetInfo(item); + return; + } + item.hostView = mAppWidgetHost.createView(this, appWidgetId, appWidgetInfo); item.minSpanX = appWidgetInfo.minSpanX; item.minSpanY = appWidgetInfo.minSpanY; From 55616cd363202eccf7a9f9a5af00d12997c24b19 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 23 Sep 2015 14:55:17 -0700 Subject: [PATCH 066/219] Added launcher callback to specify search bar height. The search bar can now be be normal or tall. When it is set to tall, the hotseat and page indicators move down so that the workspace isn't compressed quite as much. Change-Id: Id92a946eab3a93524999f92efd847a501a95f002 --- res/values/dimens.xml | 3 ++ src/com/android/launcher3/DeviceProfile.java | 41 +++++++++++++------ src/com/android/launcher3/Launcher.java | 7 ++++ .../android/launcher3/LauncherCallbacks.java | 3 ++ .../launcher3/testing/LauncherExtension.java | 5 +++ 5 files changed, 46 insertions(+), 13 deletions(-) diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 36721797e4..99eaecbed9 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -21,6 +21,9 @@ 6dp 500dp 56dp + + 78dp 20dp 4dp 8dp diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 47c5ccc9e7..0abfc67715 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -84,7 +84,8 @@ public class DeviceProfile { public int hotseatCellWidthPx; public int hotseatCellHeightPx; public int hotseatIconSizePx; - private int hotseatBarHeightPx; + private int hotseatBarHeightNormalPx, hotseatBarHeightShortPx; + private int hotseatBarHeightPx; // One of the above. // All apps public int allAppsNumCols; @@ -95,7 +96,9 @@ public class DeviceProfile { // QSB private int searchBarSpaceWidthPx; - private int searchBarSpaceHeightPx; + private int searchBarSpaceHeightNormalPx, searchBarSpaceHeightTallPx; + private int searchBarSpaceHeightPx; // One of the above. + private int searchBarHeight = LauncherCallbacks.SEARCH_BAR_HEIGHT_NORMAL; public DeviceProfile(Context context, InvariantDeviceProfile inv, Point minSize, Point maxSize, @@ -198,8 +201,10 @@ public class DeviceProfile { // Search Bar searchBarSpaceWidthPx = Math.min(widthPx, res.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_max_width)); - searchBarSpaceHeightPx = getSearchBarTopOffset() + searchBarSpaceHeightNormalPx = getSearchBarTopOffset() + res.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_height); + searchBarSpaceHeightTallPx = getSearchBarTopOffset() + + res.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_height_tall); // Calculate the actual text height Paint textPaint = new Paint(); @@ -211,7 +216,8 @@ public class DeviceProfile { dragViewScale = (iconSizePx + scaleDps) / iconSizePx; // Hotseat - hotseatBarHeightPx = iconSizePx + 4 * edgeMarginPx; + hotseatBarHeightNormalPx = iconSizePx + 4 * edgeMarginPx; + hotseatBarHeightShortPx = iconSizePx + 2 * edgeMarginPx; hotseatCellWidthPx = iconSizePx; hotseatCellHeightPx = iconSizePx; @@ -252,10 +258,10 @@ public class DeviceProfile { Rect bounds = new Rect(); if (isVerticalBarLayout()) { if (isLayoutRtl) { - bounds.set(availableWidthPx - searchBarSpaceHeightPx, edgeMarginPx, + bounds.set(availableWidthPx - searchBarSpaceHeightNormalPx, edgeMarginPx, availableWidthPx, availableHeightPx - edgeMarginPx); } else { - bounds.set(0, edgeMarginPx, searchBarSpaceHeightPx, + bounds.set(0, edgeMarginPx, searchBarSpaceHeightNormalPx, availableHeightPx - edgeMarginPx); } } else { @@ -287,11 +293,11 @@ public class DeviceProfile { if (isVerticalBarLayout()) { // Pad the left and right of the workspace with search/hotseat bar sizes if (isLayoutRtl) { - padding.set(hotseatBarHeightPx, edgeMarginPx, + padding.set(hotseatBarHeightNormalPx, edgeMarginPx, searchBarBounds.width(), edgeMarginPx); } else { padding.set(searchBarBounds.width(), edgeMarginPx, - hotseatBarHeightPx, edgeMarginPx); + hotseatBarHeightNormalPx, edgeMarginPx); } } else { if (isTablet) { @@ -341,7 +347,7 @@ public class DeviceProfile { // The rect returned will be extended to below the system ui that covers the workspace Rect getHotseatRect() { if (isVerticalBarLayout()) { - return new Rect(availableWidthPx - hotseatBarHeightPx, 0, + return new Rect(availableWidthPx - hotseatBarHeightNormalPx, 0, Integer.MAX_VALUE, availableHeightPx); } else { return new Rect(0, availableHeightPx - hotseatBarHeightPx, @@ -357,8 +363,9 @@ public class DeviceProfile { } /** - * When {@code true}, hotseat is on the bottom row when in landscape mode. - * If {@code false}, hotseat is on the right column when in landscape mode. + * When {@code true}, the device is in landscape mode and the hotseat is on the right column. + * When {@code false}, either device is in portrait mode or the device is in landscape mode and + * the hotseat is on the bottom row. */ boolean isVerticalBarLayout() { return isLandscape && transposeLayoutWithOrientation; @@ -386,11 +393,19 @@ public class DeviceProfile { // Layout the search bar space View searchBar = launcher.getSearchDropTargetBar(); lp = (FrameLayout.LayoutParams) searchBar.getLayoutParams(); + searchBarHeight = launcher.getSearchBarHeight(); + if (searchBarHeight == LauncherCallbacks.SEARCH_BAR_HEIGHT_TALL) { + hotseatBarHeightPx = hotseatBarHeightShortPx; + searchBarSpaceHeightPx = searchBarSpaceHeightTallPx; + } else { + hotseatBarHeightPx = hotseatBarHeightNormalPx; + searchBarSpaceHeightPx = searchBarSpaceHeightNormalPx; + } if (hasVerticalBarLayout) { // Vertical search bar space -- The search bar is fixed in the layout to be on the left // of the screen regardless of RTL lp.gravity = Gravity.LEFT; - lp.width = searchBarSpaceHeightPx; + lp.width = searchBarSpaceHeightNormalPx; LinearLayout targets = (LinearLayout) searchBar.findViewById(R.id.drag_target_bar); targets.setOrientation(LinearLayout.VERTICAL); @@ -424,7 +439,7 @@ public class DeviceProfile { // Vertical hotseat -- The hotseat is fixed in the layout to be on the right of the // screen regardless of RTL lp.gravity = Gravity.RIGHT; - lp.width = hotseatBarHeightPx; + lp.width = hotseatBarHeightNormalPx; lp.height = LayoutParams.MATCH_PARENT; hotseat.findViewById(R.id.layout).setPadding(0, 2 * edgeMarginPx, 0, 2 * edgeMarginPx); } else if (isTablet) { diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index bf9a42681d..7f8dc3c2e2 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -4137,6 +4137,13 @@ public class Launcher extends Activity return mDeviceProfile.getSearchBarBounds(Utilities.isRtl(getResources())); } + public int getSearchBarHeight() { + if (mLauncherCallbacks != null) { + return mLauncherCallbacks.getSearchBarHeight(); + } + return LauncherCallbacks.SEARCH_BAR_HEIGHT_NORMAL; + } + public void bindSearchProviderChanged() { if (mSearchDropTargetBar == null) { return; diff --git a/src/com/android/launcher3/LauncherCallbacks.java b/src/com/android/launcher3/LauncherCallbacks.java index e34bd57fdd..927db224f8 100644 --- a/src/com/android/launcher3/LauncherCallbacks.java +++ b/src/com/android/launcher3/LauncherCallbacks.java @@ -99,6 +99,9 @@ public interface LauncherCallbacks { public boolean isLauncherPreinstalled(); public AllAppsSearchBarController getAllAppsSearchBarController(); public List getPredictedApps(); + public static final int SEARCH_BAR_HEIGHT_NORMAL = 0, SEARCH_BAR_HEIGHT_TALL = 1; + /** Must return one of {@link #SEARCH_BAR_HEIGHT_NORMAL} or {@link #SEARCH_BAR_HEIGHT_TALL} */ + public int getSearchBarHeight(); /** * Returning true will immediately result in a call to {@link #setLauncherOverlayView(ViewGroup, diff --git a/src/com/android/launcher3/testing/LauncherExtension.java b/src/com/android/launcher3/testing/LauncherExtension.java index dac279afa9..3364fcc9f5 100644 --- a/src/com/android/launcher3/testing/LauncherExtension.java +++ b/src/com/android/launcher3/testing/LauncherExtension.java @@ -302,6 +302,11 @@ public class LauncherExtension extends Launcher { return new ArrayList<>(); } + @Override + public int getSearchBarHeight() { + return SEARCH_BAR_HEIGHT_NORMAL; + } + @Override public boolean isLauncherPreinstalled() { return false; From f7203499f40af2afbcf20d5ff7555c97d86ad841 Mon Sep 17 00:00:00 2001 From: Geoff Mendal Date: Mon, 12 Oct 2015 07:00:09 -0700 Subject: [PATCH 067/219] Import translations. DO NOT MERGE Change-Id: I30deecd0fedace5365a877a8333206e7cb015afb Auto-generated-cl: translation import --- res/values-af/strings.xml | 1 - res/values-am/strings.xml | 1 - res/values-ar/strings.xml | 1 - res/values-bg/strings.xml | 1 - res/values-bn-rBD/strings.xml | 1 - res/values-ca/strings.xml | 1 - res/values-cs/strings.xml | 1 - res/values-da/strings.xml | 1 - res/values-de/strings.xml | 1 - res/values-el/strings.xml | 1 - res/values-en-rAU/strings.xml | 1 - res/values-en-rGB/strings.xml | 1 - res/values-en-rIN/strings.xml | 1 - res/values-es-rUS/strings.xml | 1 - res/values-es/strings.xml | 1 - res/values-et-rEE/strings.xml | 1 - res/values-eu-rES/strings.xml | 1 - res/values-fa/strings.xml | 1 - res/values-fi/strings.xml | 1 - res/values-fr-rCA/strings.xml | 1 - res/values-fr/strings.xml | 1 - res/values-gl-rES/strings.xml | 1 - res/values-hi/strings.xml | 1 - res/values-hr/strings.xml | 1 - res/values-hu/strings.xml | 1 - res/values-hy-rAM/strings.xml | 5 ++--- res/values-in/strings.xml | 1 - res/values-is-rIS/strings.xml | 1 - res/values-it/strings.xml | 1 - res/values-iw/strings.xml | 1 - res/values-ja/strings.xml | 1 - res/values-ka-rGE/strings.xml | 1 - res/values-kk-rKZ/strings.xml | 1 - res/values-km-rKH/strings.xml | 1 - res/values-kn-rIN/strings.xml | 1 - res/values-ko/strings.xml | 1 - res/values-ky-rKG/strings.xml | 1 - res/values-lo-rLA/strings.xml | 1 - res/values-lt/strings.xml | 1 - res/values-lv/strings.xml | 1 - res/values-mk-rMK/strings.xml | 1 - res/values-ml-rIN/strings.xml | 1 - res/values-mn-rMN/strings.xml | 1 - res/values-mr-rIN/strings.xml | 1 - res/values-ms-rMY/strings.xml | 1 - res/values-my-rMM/strings.xml | 1 - res/values-nb/strings.xml | 1 - res/values-ne-rNP/strings.xml | 1 - res/values-nl/strings.xml | 1 - res/values-pl/strings.xml | 1 - res/values-pt-rPT/strings.xml | 1 - res/values-pt/strings.xml | 1 - res/values-ro/strings.xml | 1 - res/values-ru/strings.xml | 5 ++--- res/values-si-rLK/strings.xml | 1 - res/values-sk/strings.xml | 1 - res/values-sl/strings.xml | 1 - res/values-sr/strings.xml | 1 - res/values-sv/strings.xml | 1 - res/values-sw/strings.xml | 1 - res/values-ta-rIN/strings.xml | 1 - res/values-te-rIN/strings.xml | 1 - res/values-th/strings.xml | 1 - res/values-tl/strings.xml | 1 - res/values-tr/strings.xml | 1 - res/values-uk/strings.xml | 1 - res/values-ur-rPK/strings.xml | 1 - res/values-uz-rUZ/strings.xml | 1 - res/values-vi/strings.xml | 1 - res/values-zh-rCN/strings.xml | 1 - res/values-zh-rHK/strings.xml | 1 - res/values-zh-rTW/strings.xml | 1 - res/values-zu/strings.xml | 1 - 73 files changed, 4 insertions(+), 77 deletions(-) diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index c3071b6e1e..e01192f70e 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -26,7 +26,6 @@ "Program is nie beskikbaar nie" "Afgelaaide program in veiligmodus gedeaktiveer" "Legstukke gedeaktiveer in Veiligmodus" - "Wys Mem" "Raak en hou om \'n legstuk op te tel." "Dubbeltik en hou om \'n legstuk op te tel of gebruik gepasmaakte handelinge." "%1$d × %2$d" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 4d0a6b950a..4eefc0adc1 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -26,7 +26,6 @@ "መተግበሪያ አይገኝም" "የወረደው መተግበሪያ ደህንነቱ በተጠበቀ ሁኔታ ውስጥ ተሰናክሏል" "ምግብሮች በደህንነቱ የተጠበቀ ሁኔታ ተሰናክለዋል" - "ማህደረ ማስታወሻ አሳይ" "ፍርግም ለማንሳት ይንኩ እና ይያዙት" "አንድ ንዑስ ፕሮግራም ለመምረጥ ወይም ብጁ እርምጃዎችን ለመጠቀም ሁለቴ መታ አድርገው ይያዙ።" "%1$d × %2$d" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index bf426ece7e..37e924d542 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -26,7 +26,6 @@ "التطبيق ليس متاحًا" "تم تعطيل التطبيق الذي تم تنزيله في الوضع الآمن" "الأدوات معطلة في الوضع الآمن" - "عرض الذاكرة" "المس مع الاستمرار لاختيار إحدى الأدوات." "انقر نقرًا مزدوجًا مع الاستمرار لاختيار أداة أو استخدم الإجراءات المخصصة." "%1$d × %2$d" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index fa62fb7e4e..fe0eff1e3c 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -26,7 +26,6 @@ "Приложението не е налично" "Изтегленото приложение е деактивирано в безопасния режим" "Приспособленията са деактивирани в безопасния режим" - "Показване на паметта" "Докоснете и задръжте за избор на приспособление." "Докоснете двукратно и задръжте за избор на приспособление или използвайте персонализирани действия." "%1$d × %2$d" diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml index 23f6c3fd58..2de48f6d23 100644 --- a/res/values-bn-rBD/strings.xml +++ b/res/values-bn-rBD/strings.xml @@ -26,7 +26,6 @@ "অ্যাপ্লিকেশান অনুপলব্ধ" "ডাউনলোড করা অ্যাপ্লিকেশান নিরাপদ মোডে অক্ষম রয়েছে" "সুরক্ষিত মোডে উইজেট নিষ্ক্রিয় থাকে" - "মেম দেখান" "একটি উইজেট তুলতে তা স্পর্শ করে ধরে রাখুন৷" "কোনো উইজেট বেছে নিতে দুবার-আলতো চেপে ধরে থাকুন অথবা কাস্টম ক্রিয়াগুলি ব্যবহার করুন৷" "%1$d × %2$d" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 3b8e9b59de..507c237540 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -26,7 +26,6 @@ "L\'aplicació no està disponible." "L\'aplicació que has baixat està desactivada al mode segur." "En Mode segur, els widgets estan desactivats." - "Mostra la memòria" "Mantén premut un widget per triar-lo." "Fes doble toc i mantén premut per seleccionar un widget o per utilitzar les accions personalitzades." "%1$d × %2$d" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 47ca8d232f..bb1205c5a7 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -26,7 +26,6 @@ "Aplikace není k dispozici." "Stažená aplikace je v nouzovém režimu zakázána" "V nouzovém režimu jsou widgety zakázány." - "Zobrazit Mem" "Widget vyberete dotykem a podržením." "Dvojitým klepnutím a podržením vyberte widget, případně použijte vlastní akce." "%1$d × %2$d" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 1ddb45a7f6..3b892b8ad0 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -26,7 +26,6 @@ "Appen er ikke tilgængelig" "Downloadet app er deaktiveret i sikker tilstand" "Widgets er deaktiveret i Beskyttet tilstand" - "Vis Mem" "Tryk på en widget, og hold den nede for at vælge." "Tryk to gange, og hold fingeren nede for at vælge en widget eller bruge tilpassede handlinger." "%1$d × %2$d" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 7adfbbfe28..25c59a07fa 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -26,7 +26,6 @@ "App nicht verfügbar" "Heruntergeladene App im abgesicherten Modus deaktiviert" "Widgets im abgesicherten Modus deaktiviert" - "Speicher anzeigen" "Zum Hinzufügen Widget berühren und halten" "Zum Hinzufügen auf Widget doppeltippen und gedrückt halten oder benutzerdefinierte Aktionen verwenden." "%1$d × %2$d" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 2fd3733b72..6e00963f68 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -26,7 +26,6 @@ "Η εφαρμογή δεν είναι διαθέσιμη" "Η λήψη εφαρμογών απενεργοποήθηκε στην Ασφαλή λειτουργία" "Τα γραφικά στοιχεία απενεργοποιήθηκαν στην ασφαλή λειτουργία" - "Εμφάνιση Mem" "Αγγίξτε παρατεταμένα για να πάρετε ένα γραφ.στοιχ." "Πατήστε δύο φορές παρατεταμένα για επιλογή γραφικού στοιχείου ή χρήση προσαρμοσμένων ενεργειών." "%1$d × %2$d" diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index 88ae342c08..88a43469dc 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -26,7 +26,6 @@ "App isn\'t available" "Downloaded app disabled in Safe mode" "Widgets disabled in Safe mode" - "Show Mem" "Touch & hold to pick up a widget." "Double-tap & hold to pick up a widget or use customised actions." "%1$d × %2$d" diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 88ae342c08..88a43469dc 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -26,7 +26,6 @@ "App isn\'t available" "Downloaded app disabled in Safe mode" "Widgets disabled in Safe mode" - "Show Mem" "Touch & hold to pick up a widget." "Double-tap & hold to pick up a widget or use customised actions." "%1$d × %2$d" diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 88ae342c08..88a43469dc 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -26,7 +26,6 @@ "App isn\'t available" "Downloaded app disabled in Safe mode" "Widgets disabled in Safe mode" - "Show Mem" "Touch & hold to pick up a widget." "Double-tap & hold to pick up a widget or use customised actions." "%1$d × %2$d" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 9d7ddd97f8..18146a92cd 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -26,7 +26,6 @@ "La aplicación no está disponible." "Aplicación descargada inhabilitada en modo seguro" "Widgets inhabilitados en modo seguro" - "Mostrar memoria" "Mantén presionado el widget que desees elegir." "Presiona dos veces y mantén presionado para elegir un widget o usa una acción personalizada." "%1$d × %2$d" diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 0164377937..d16ff0cbb4 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -26,7 +26,6 @@ "La aplicación no está disponible" "Aplicación descargada inhabilitada en modo seguro" "Widgets inhabilitados en modo seguro" - "Mostrar memoria" "Mantén pulsado el widget que quieras seleccionar." "Toca dos veces y mantén pulsado el widget que quieras seleccionar o utiliza acciones personalizadas." "%1$d × %2$d" diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 18b4ccd0ef..8b95a4426b 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -26,7 +26,6 @@ "Rakendus ei ole saadaval" "Allalaetud rakendus on turvarežiimis keelatud" "Turvarežiimis on vidinad keelatud" - "Mälu kuvamine" "Vidina valimiseks vajutage ja hoidke seda all." "Topeltpuudutage ja hoidke vidina valimiseks või kohandatud toimingute kasutamiseks." "%1$d × %2$d" diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml index 4322188fed..bfb93c6ba6 100644 --- a/res/values-eu-rES/strings.xml +++ b/res/values-eu-rES/strings.xml @@ -26,7 +26,6 @@ "Ez dago erabilgarri aplikazioa" "Deskargatutako aplikazioa modu seguruan desgaitu da" "Widgetak desgaitu egin dira modu seguruan" - "Erakutsi memoria" "Eduki ukituta widgeta aukeratzeko." "Sakatu birritan eta eduki sakatuta widgeta aukeratzeko edo ekintza pertsonalizatuak erabiltzeko." "%1$d × %2$d" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 35808ae6ea..cdbb53cbd6 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -26,7 +26,6 @@ "برنامه در دسترس نیست" "برنامه دانلود شده در حالت ایمن غیرفعال شد" "ابزارک‌ها در حالت ایمن غیرفعال هستند" - "‏نمایش Mem" "برای انتخاب ابزارک لمس کنید و نگه دارید." "برای انتخاب یک ابزارک، دو ضربه سریع بزنید و نگه‌دارید یا از اقدامات سفارشی استفاده کنید." "%1$d × %2$d" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index e0b0041d79..64c20a38b5 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -26,7 +26,6 @@ "Sovellus ei ole käytettävissä" "Ladattu sovellus poistettiin käytöstä suojatussa tilassa" "Widgetit poistettu käytöstä vikasietotilassa" - "Näytä muisti" "Valitse widget painamalla sitä pitkään." "Valitse widget tai käytä muokattuja toimintoja kaksoisnapauttamalla ja painamalla kohdetta pitkään." "%1$d × %2$d" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index b122320c07..e589009dcf 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -26,7 +26,6 @@ "Application indisponible" "L\'application téléchargée est désactivée en mode sécurisé." "Widgets désactivés en mode sans échec" - "Afficher la mémoire" "Maintenez un doigt sur le widget pour l\'ajouter." "Touchez 2x un widget et maintenez doigt dessus pour l’ajouter ou utiliser des actions personnalisées" "%1$d × %2$d" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 5930b9ae74..45c2564ae4 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -26,7 +26,6 @@ "Application indisponible" "L\'application téléchargée est désactivée en mode sécurisé." "Les widgets sont désactivés en mode sécurisé." - "Afficher la mémoire" "App. de manière prolongée pour sélectionner widget." "Appuyez 2 fois et maintenez la pression pour sélectionner widget ou utilisez actions personnalisées." "%1$d x %2$d" diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml index 172186bfbc..71d9e17bb5 100644 --- a/res/values-gl-rES/strings.xml +++ b/res/values-gl-rES/strings.xml @@ -26,7 +26,6 @@ "A aplicación non está dispoñible" "A aplicación que descargaches está desactivada no modo seguro" "Os widgets están desactivados no modo seguro" - "Mostrar memoria" "Mantén premido un widget para seleccionalo." "Toca dúas veces e mantén premido para seleccionar un widget ou utiliza accións personalizadas." "%1$d × %2$d" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 2237c9c3f4..3d8d5dd29c 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -26,7 +26,6 @@ "ऐप्स उपलब्ध नहीं है" "डाउनलोड किए गए ऐप्स सुरक्षित मोड में अक्षम है" "विजेट सुरक्षित मोड में अक्षम हैं" - "मेमोरी दिखाएं" "विजेट को चुनने के लिए स्‍पर्श करके रखें." "कोई विजेट चुनने के लिए डबल टैप करके रखें या कस्‍टम कार्रवाइयां चुनें." "%1$d × %2$d" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 9fb7bde454..809e588354 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -26,7 +26,6 @@ "Aplikacija nije dostupna" "Preuzeta aplikacija onemogućena je u Sigurnom načinu rada" "Widgeti su onemogućeni u Sigurnom načinu rada" - "Prikaži mem" "Dodirnite i držite kako biste podigli widget." "Dodirnite dvaput i držite kako biste podigli widget ili pokušajte prilagođenim radnjama." "%1$d × %2$d" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 01b8c8c1c3..e6d74d2b0d 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -26,7 +26,6 @@ "Az alkalmazás nem érhető el" "A letöltött alkalmazás Csökkentett módban ki van kapcsolva" "A modulok ki vannak kapcsolva Csökkentett módban" - "Mem. megjelenítése" "Modul felvételéhez érintse meg, és tartsa lenyomva" "Modul mozgatásához koppintson rá duplán és tartsa lenyomva, vagy használjon egyéni műveleteket." "%1$d × %2$d" diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml index 2fdb948070..9f5626b791 100644 --- a/res/values-hy-rAM/strings.xml +++ b/res/values-hy-rAM/strings.xml @@ -26,7 +26,6 @@ "Հավելվածը հասանելի չէ" "Ներբեռնված ծրագիրն անջատված է Անվտանգ ռեժիմում" "Վիջեթներն անջատված են անվտանգ ռեժիմում" - "Ցուցադրել մեմը" "Հպեք և պահեք՝ վիջեթն ընտրելու համար:" "Կրկնակի հպեք և պահեք՝ վիջեթ ավելացնելու համար կամ օգտվեք հարմարեցրած գործողություններից:" "%1$d × %2$d" @@ -77,8 +76,8 @@ "Գտնել" "Այս ծրագիրը տեղադրված չէ:" "Այս պատկերակի ծրագիրը տեղադրված չէ: Դուք կարող եք հեռացնել այն կամ գտնել ծրագիրը և տեղադրել այն ձեռքով:" - "%1$s-ը ներբեռնվում է, ավարտվել է %2$s" - "%1$s-ը սպասում է տեղադրելուն" + "%1$s–ի ներբեռնում (%2$s)" + "%1$s-ի տեղադրման սպասում" "Ավելացնել Հիմնական էկրանին" "Տեղափոխել տարրն այստեղ" "Տարրն ավելացվեց հիմնական էկրանին" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 4b41f6bbcd..51adf9f558 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -26,7 +26,6 @@ "Aplikasi tidak tersedia" "Aplikasi yang diunduh dinonaktifkan dalam mode Aman" "Widget dinonaktifkan dalam mode Aman" - "Tampilkan Memori" "Sentuh lama untuk memilih widget." "Ketuk dua kalip & tahan untuk mengambil widget atau menggunakan tindakan khusus." "%1$d × %2$d" diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml index 590f963e5f..093be61fd7 100644 --- a/res/values-is-rIS/strings.xml +++ b/res/values-is-rIS/strings.xml @@ -26,7 +26,6 @@ "Forritið er ekki í boði" "Sótt forrit er óvirkt í öryggisstillingu" "Græjur eru óvirkar í öruggri stillingu" - "Sýna minni" "Haltu fingri á græju til að grípa hana." "Ýttu tvisvar og haltu fingri á græju til að grípa hana eða notaðu sérsniðnar aðgerðir." "%1$d × %2$d" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 26d55075d4..b30fea1fa0 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -26,7 +26,6 @@ "App non disponibile" "L\'app scaricata è stata disattivata in modalità provvisoria" "Widget disabilitati in modalità provvisoria" - "Mostra Mem" "Tocca e tieni premuto per scegliere un widget." "Tocca due volte e tieni premuto per scegliere un widget o per utilizzare azioni personalizzate." "%1$d × %2$d" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 19df33039a..2f6af387b4 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -26,7 +26,6 @@ "האפליקציה אינה זמינה" "אפליקציה שהורדת הושבתה במצב בטוח" "ווידג\'טים מושבתים במצב בטוח" - "הצג זכרון" "גע נגיעה רציפה בווידג\'ט כדי לבחור בו." "הקש פעמיים וגע נגיעה רציפה בווידג\'ט כדי לבחור בו, או השתמש בפעולות מותאמות אישית." "%1$d × %2$d" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index c731e1c6e7..6471b4c0c3 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -26,7 +26,6 @@ "このアプリは使用できません" "ダウンロードしたアプリは、セーフモードでは無効です" "セーフモードではウィジェットは無効です" - "メモリーを表示" "ウィジェットを追加するには押し続けます。" "ダブルタップ後に押し続けてウィジェットを選択するか、カスタム操作を使用してください。" "%1$dx%2$d" diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index 46d3967c48..6c27c05cef 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -26,7 +26,6 @@ "აპი მიუწვდომელია" "უსაფრთხო რეჟიმში ჩამოტვირთული აპი გაუქმებულია" "უსაფრთხო რეჟიმში ვიჯეტი გამორთულია" - "Mem-ის ჩვენება" "შეეხეთ და დააყოვნეთ ვიჯეტის ასარჩევად." "ორმაგად შეეხეთ და გეჭიროთ ვიჯეტის ასარჩევად ან მორგებული მოქმედებების გამოსაყენებლად." "%1$d × %2$d" diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml index 071247ee1a..ade45c46a3 100644 --- a/res/values-kk-rKZ/strings.xml +++ b/res/values-kk-rKZ/strings.xml @@ -26,7 +26,6 @@ "Қолданба қол жетімді емес" "Жүктелген қолданба қауіпсіз режимде өшірілген" "Қауіпсіз режимде виджеттер өшіріледі" - "Жадты көрсету" "Виджетті таңдау үшін түртіп, мықтап ұстаңыз." "Виджетті таңдау немесе арнаулы әрекеттерді таңдау үшін екі рет түртіп, ұстап тұрыңыз." "%1$d × %2$d" diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml index c0db0f26e8..4d70eaf24d 100644 --- a/res/values-km-rKH/strings.xml +++ b/res/values-km-rKH/strings.xml @@ -26,7 +26,6 @@ "មិន​មាន​កម្មវិធី" "បាន​បិទ​កម្មវិធី​ដែល​បាន​ទាញ​យក​ក្នុង​របៀប​សុវត្ថិភាព" "បាន​បិទ​ធាតុ​ក្រាហ្វិក​ក្នុង​របៀប​សុវត្ថិភាព" - "បង្ហាញ​ Mem" "ប៉ះ & សង្កត់ ដើម្បី​ជ្រើស​ធាតុ​ក្រាហ្វិក។" "ប៉ះពីរដង ហើយចុចឲ្យជាប់ដើម្បីជ្រើសយកធាតុក្រាហ្វិក ឬប្រើសកម្មភាពផ្ទាល់ខ្លួន។" "%1$d × %2$d" diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml index a6943addeb..389697f6a1 100644 --- a/res/values-kn-rIN/strings.xml +++ b/res/values-kn-rIN/strings.xml @@ -26,7 +26,6 @@ "ಅಪ್ಲಿಕೇಶನ್ ಲಭ್ಯವಿಲ್ಲ" "ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾದ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಸುರಕ್ಷಿತ ಮೋಡ್‌ನಲ್ಲಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ" "ಸುರಕ್ಷಿತ ಮೋಡ್‌ನಲ್ಲಿ ವಿಜೆಟ್‌ಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ" - "ಸ್ಮರಣೆ ತೋರಿಸು" "ವಿಜೆಟ್ ಅನ್ನು ಆರಿಸಿಕೊಳ್ಳಲು ಸ್ಪರ್ಶಿಸಿ & ಹಿಡಿದುಕೊಳ್ಳಿ." "ಡಬಲ್ ಟ್ಯಾಪ್ ಮಾಡಿ ಮತ್ತು ವಿಜೆಟ್ ಆರಿಸಿಕೊಳ್ಳಲು ಹೋಲ್ಡ್ ಮಾಡಿ ಅಥವಾ ಕಸ್ಟಮ್ ಕ್ರಿಯೆಗಳನ್ನು ಬಳಸಿ" "%1$d × %2$d" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 7f6d40b9c8..f182045069 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -26,7 +26,6 @@ "앱을 사용할 수 없음" "다운로드한 앱은 안전 모드에서 사용할 수 없습니다." "안전 모드에서 위젯 사용 중지됨" - "메모리 표시" "위젯을 선택하려면 길게 터치하세요." "위젯을 선택하려면 두 번 탭한 다음 길게 터치하거나 맞춤 액션을 사용합니다." "%1$d×%2$d" diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml index e09bcd26a7..c5d071cde6 100644 --- a/res/values-ky-rKG/strings.xml +++ b/res/values-ky-rKG/strings.xml @@ -26,7 +26,6 @@ "Колдонмо жеткиликтүү эмес" "Жүктөп алынган колдонмо Коопсуз режиминде иштен чыгарылды" "Виджеттер Коопсуз режимде өчүрүлгөн" - "Мемди көргөзүү" "Виджетти тандаш үчүн, басып туруңуз" "Виджет тандоо үчүн эки жолу таптап, кармап туруңуз же ыңгайлаштырылган аракеттерди колдонуңуз." "%1$d × %2$d" diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml index 98238d2e31..cd30cad2c6 100644 --- a/res/values-lo-rLA/strings.xml +++ b/res/values-lo-rLA/strings.xml @@ -26,7 +26,6 @@ "ແອັບຯ​ໃຊ້​ບໍ່​ໄດ້" "ແອັບຯ​ທີ່​ດາວ​ໂຫລດ​ແລ້ວ​ຖືກ​ປິດ​ການ​ນຳ​ໃຊ້​ໃນ Safe mode" "​ວິດ​ເຈັດ​ຖືກ​ປິດ​ໃນ Safe mode" - "ສະແດງຄວາມຈຳ" "ສຳພັດຄ້າງໄວ້ ເພື່ອຈັບວິດເຈັດ." "ແຕະ​ຄ້າງ​ໄວ້ ເພື່ອ​ເລືອກວິດ​ເຈັດ ຫຼື ໃຊ້​ການ​ດຳ​ເນີນ​ການ​ກຳ​ນົດ​ເອງ." "%1$d × %2$d" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 1a2daebb89..28e4dd9fe3 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -26,7 +26,6 @@ "Programa nepasiekiama" "Atsisiųsta programa išjungta Saugos režimu" "Valdikliai išjungti Saugiame režime" - "Rodyti atmintinę" "Palieskite ir laikykite, kad pasirinkt. valdiklį." "Dukart palieskite ir laikykite, kad pasirinktumėte valdiklį ar naudotumėte tinkintus veiksmus." "%1$d × %2$d" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 454f7e005e..f9dbbaec17 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -26,7 +26,6 @@ "Lietotne nav pieejama." "Lejupielādētā lietotne ir atspējota drošajā režīmā." "Logrīki atspējoti drošajā režīmā" - "Rādīt atmiņu" "Lai izvēlētos logrīku, pieskarieties un turiet to." "Lai atlasītu logrīku, veiciet dubultskārienu uz tā un turiet to vai arī veiciet pielāgotas darbības." "%1$d × %2$d" diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml index a6d6bd0544..273073dad1 100644 --- a/res/values-mk-rMK/strings.xml +++ b/res/values-mk-rMK/strings.xml @@ -26,7 +26,6 @@ "Апликацијата не е достапна" "Преземената апликација е оневозможена во безбеден режим" "Додатоците се оневозможени во безбеден режим" - "Прикажи „Мени“" "Допри и задржи за да се избере виџетот." "Допрете двапати и задржете за да изберете додаток или да користите приспособени дејства." "%1$d × %2$d" diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml index 645641dda7..a11eac0dfd 100644 --- a/res/values-ml-rIN/strings.xml +++ b/res/values-ml-rIN/strings.xml @@ -26,7 +26,6 @@ "അപ്ലിക്കേഷൻ ലഭ്യമല്ല" "ഡൗൺലോഡുചെയ്‌ത അപ്ലിക്കേഷൻ സുരക്ഷാ മോഡിൽ പ്രവർത്തനരഹിതമാക്കി" "സുരക്ഷിത മോഡിൽ വിജറ്റുകൾ പ്രവർത്തനരഹിതമാക്കി" - "മെമ്മറി കാണിക്കുക" "ഒരു വിജറ്റ് ചേർക്കുന്നതിന് അത് സ്‌പർശിച്ച് പിടിക്കുക." "വിജറ്റ് തിരഞ്ഞെടുക്കാനോ ഇഷ്ടാനുസൃത പ്രവർത്തനങ്ങൾ ഉപയോഗിക്കാനോ രണ്ടുതവണ ടാപ്പുചെയ്ത് പിടിക്കുക." "%1$d × %2$d" diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml index 89ef7ee2b4..3f1f73dc96 100644 --- a/res/values-mn-rMN/strings.xml +++ b/res/values-mn-rMN/strings.xml @@ -26,7 +26,6 @@ "Апп-г ашиглах боломжгүй" "Татаж авсан апп-г Аюулгүй горим дотроос идэвхгүйжүүлсэн" "Safe горимд виджетүүдийг идэвхгүйжүүлсэн" - "Мем харуулах" "Виджетийг авах бол хүрээд барина уу." "Жижиг хэрэгсэл авах болон тохируулсан үйлдлийг ашиглахын тулд 2 удаа товшоод барина уу." "%1$d × %2$d" diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml index cfc45b9598..9ff6696c82 100644 --- a/res/values-mr-rIN/strings.xml +++ b/res/values-mr-rIN/strings.xml @@ -26,7 +26,6 @@ "अॅप उपलब्ध नाही" "डाउनलोड केलेला अ‍ॅप सुरक्षित मोड मध्‍ये अक्षम केला" "विजेट सुरक्षित मोडमध्ये अक्षम झाले" - "Mem दर्शवा" "विजेट निवडण्यासाठी स्पर्श करा आणि धरून ठेवा." "एक विजेट निवडण्यासाठी दोनदा टॅप करा आणि धरून ठेवा किंवा सानुकूल क्रिया वापरा." "%1$d × %2$d" diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index fe4e59e5a0..5d918417ad 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -26,7 +26,6 @@ "Apl tidak tersedia" "Apl yang dimuat turun dilumpuhkan dalam mod Selamat" "Widget dilumpuhkan dalam mod Selamat" - "Papar Mem" "Sentuh & tahan untuk mengambil widget." "Ketik dua kali & tahan untuk mengambil widget atau menggunakan tindakan tersuai" "%1$d × %2$d" diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml index f3994de0aa..ca590fad1c 100644 --- a/res/values-my-rMM/strings.xml +++ b/res/values-my-rMM/strings.xml @@ -26,7 +26,6 @@ "App လက်လှမ်း မမှီပါ" "ဒေါင်းလုဒ် appကို လုံခြုံရေး မုဒ်ထဲမှာ ပိတ်ထား" "လုံခြုံရေး မုဒ်ထဲမှာ ဝီဂျက်များကို ပိတ်ထား" - "Mem ကိုပြရန်" "ဝဒ်ဂျက်တစ်ခုကို ကောက်ယူရန် ဖိနှိပ်ထားပါ" "ဝစ်ဂျက်တစ်ခုကိုရယူရန် သို့မဟုတ် စိတ်ကြိုက်လုပ်ဆောင်မှုများကို အသုံးပြုရန် နှစ်ချက်တို့ပြီး ကိုင်ထားပါ။" "%1$d × %2$d" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index fbc174c41d..8b259c4b38 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -26,7 +26,6 @@ "Appen er ikke tilgjengelig" "En nedlastet app er deaktivert i sikker modus" "Moduler er deaktivert i sikker modus" - "Vis minne" "Trykk og hold inne for å plukke opp en modul." "Dobbelttrykk og hold inne for å velge en modul eller bruke tilpassede handlinger." "%1$d × %2$d" diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml index d470efd490..e2d7fbb8c5 100644 --- a/res/values-ne-rNP/strings.xml +++ b/res/values-ne-rNP/strings.xml @@ -26,7 +26,6 @@ "अनुप्रयोग उपलब्ध छैन" "सुरक्षित मोडमा डाउनलोड गरेको अनुप्रयोग अक्षम गरिएको छ" "सुरक्षित मोडमा विगेटहरू अक्षम गरियो" - "Mem देखाउनुहोस्" "एउटा विजेटलाई टिप्नको लागि टच गरेर होल्ड गर्नुहोस्।" "विजेटलाई छान्न वा अनुकूलन कार्यहरू प्रयोग गर्न डबल ट्याप गरी होल्ड गर्नुहोस्।" "%1$d × %2$d" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 518fe29894..90659ced49 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -26,7 +26,6 @@ "App is niet beschikbaar" "Gedownloade app uitgeschakeld in veilige modus" "Widgets uitgeschakeld in Veilige modus" - "Geheugen weergeven" "Blijf aanraken om een widget toe te voegen." "Dubbeltik en blijf aanraken om een widget toe te voegen of aangepaste acties te gebruiken." "%1$d × %2$d" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 5afe6e2508..6f1d1f467a 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -26,7 +26,6 @@ "Aplikacja niedostępna" "Pobrana aplikacja została wyłączona w trybie awaryjnym" "Widżety są wyłączone w trybie bezpiecznym" - "Pokaż pamięć" "Aby dodać widżet, kliknij go i przytrzymaj." "Kliknij dwukrotnie i przytrzymaj, by wybrać widżet lub użyć działań niestandardowych." "%1$d × %2$d" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 96e36f1fa5..f3dc9482fa 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -26,7 +26,6 @@ "A aplicação não está disponível" "Aplicação transferida desativada no Modo de segurança" "Widgets desativados no Modo de segurança" - "Mostrar mem" "Prima sem soltar para escolher um widget." "Toque duas vezes sem soltar para escolher um widget ou utilize ações personalizadas." "%1$d × %2$d" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 40632ce827..edcb68eb78 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -26,7 +26,6 @@ "O app não está disponível" "App transferido por download desativado no modo de segurança" "Widgets desativados no modo de segurança" - "Mostrar memória" "Toque e pressione para selecionar um widget." "Toque duas vezes e segure para selecionar um widget ou usar ações personalizadas." "%1$d × %2$d" diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index c41e0e0297..8145455d38 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -26,7 +26,6 @@ "Aplicația nu este disponibilă" "Aplicația descărcată este dezactivată în modul de siguranță" "Widgeturile sunt dezactivate în modul de siguranță" - "Afișați memoria" "Atingeți lung un widget pentru a-l alege." "Atingeți de două ori și mențineți apăsat ca să alegeți un widget sau folosiți acțiuni personalizate." "%1$d × %2$d" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 5ee47a876b..1b651a2ff0 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -26,7 +26,6 @@ "Приложение недоступно" "Скачанное приложение отключено в безопасном режиме" "Виджеты отключены в безопасном режиме" - "Сведения о памяти" "Чтобы выбрать виджет, нажмите на значок и удерживайте его." "Чтобы выбрать виджет, нажмите на него дважды и не отпускайте или выполните предложенные действия." "%1$d x %2$d" @@ -77,8 +76,8 @@ "Найти" "Приложение не установлено" "Приложение не установлено. Вы можете удалить значок или найти приложение и установить его вручную." - "Скачиваем \"%1$s\" (%2$s)" - "Скоро установим \"%1$s\"" + "Скачивается \"%1$s\" (%2$s)" + "Ожидание установки \"%1$s\"" "Добавить на главный экран" "Переместить элемент сюда" "Элемент добавлен на главный экран" diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml index 6d735a319e..a63982dc9a 100644 --- a/res/values-si-rLK/strings.xml +++ b/res/values-si-rLK/strings.xml @@ -26,7 +26,6 @@ "යෙදුම නොතිබේ" "ආරක්ෂිත ආකාරය තුළ බාගන්න ලද යෙදුම් අබල කරන්න" "සුරක්ෂිත ආකාරය තුළ විජටය අබල කරන ලදි" - "Mem පෙන්වන්න" "විජට් එක ස්පර්ශ කර අහුලා ගැනීමට අල්ලාගෙන සිටින්න." "විජට් එකක් අහුලා ගැනීමට හෝ අභිරුචි ක්‍රියා කිරීමට ඩබල් ටැප් කර අල්ලා ගෙන සිටින්න." "%1$d × %2$d" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index ef01640e0b..93dcc0e633 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -26,7 +26,6 @@ "Aplikácia nie je k dispozícii" "Stiahnutá aplikácia je v núdzovom režime zakázaná" "Miniaplikácie sú v núdzovom režime zakázané" - "Zobraziť pamäť" "Miniaplikáciu pridáte stlačením a podržaním." "Miniaplikáciu pridáte dvojitým klepnutím a pridržaním alebo pomocou vlastných akcií." "%1$d × %2$d" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index ab62195323..767bfdf94a 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -26,7 +26,6 @@ "Aplikacija ni na voljo" "Prenesena aplikacija je onemogočena v Varnem načinu" "Pripomočki so onemogočeni v varnem načinu" - "Pokaži pomnilnik" "Za izbiro pripomočka se ga dotaknite in pridržite." "Če želite izbrati pripomoček ali uporabiti dejanja po meri, se ga dvakrat dotaknite in ga pridržite." "%1$d × %2$d" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 009cd61122..8feec1ab5e 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -26,7 +26,6 @@ "Апликација није доступна" "Преузета апликација је онемогућена у Безбедном режиму" "Виџети су онемогућени у Безбедном режиму" - "Прикажи меморију" "Додирните и задржите да бисте изабрали виџет." "Двапут додирните и задржите да бисте изабрали виџет или користите прилагођене радње." "%1$d×%2$d" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 8fab88c375..1159919357 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -26,7 +26,6 @@ "Appen är inte tillgänglig" "Den hämtade appen inaktiverades i säkert läge" "Widgets är inaktiverade i felsäkert läge" - "Visa Mem" "Tryck länge om du vill flytta en widget." "Tryck två gånger och håll kvar om du vill ta upp en widget eller använda anpassade åtgärder." "%1$d × %2$d" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 9b74cea773..183095af1b 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -26,7 +26,6 @@ "Programu haipatikani" "Programu iliyopakuliwa imezimwa katika Hali Salama" "Wijeti zimezimwa katika hali ya Usalama" - "Onyesha Kumbukumbu" "Gusa na ushikilie ili kuteua wijeti." "Gonga mara mbili na ushikilie ile uchague wijeti au utumie vitendo maalum." "%1$d × %2$d" diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml index 04bd08eceb..628c0a5737 100644 --- a/res/values-ta-rIN/strings.xml +++ b/res/values-ta-rIN/strings.xml @@ -26,7 +26,6 @@ "பயன்பாடு இல்லை" "இறக்கிய பயன்பாடு பாதுகாப்பு முறையில் முடக்கப்பட்டது" "பாதுகாப்புப் பயன்முறையில் விட்ஜெட்கள் முடக்கப்பட்டுள்ளன" - "நினைவகத்தைக் காட்டு" "விட்ஜெட்டைத் தேர்வுசெய்ய தொட்டுப் பிடிக்கவும்." "விட்ஜெட்டைத் தேர்ந்தெடுக்க இருமுறை தட்டிப் பிடிக்கவும் அல்லது தனிப்பயன் செயல்களைப் பயன்படுத்தவும்." "%1$d × %2$d" diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml index 78a89c98b5..fd0f259145 100644 --- a/res/values-te-rIN/strings.xml +++ b/res/values-te-rIN/strings.xml @@ -26,7 +26,6 @@ "అనువర్తనం అందుబాటులో లేదు" "డౌన్‌లోడ్ చేసిన అనువర్తనం సురక్షిత మోడ్‌లో నిలిపివేయబడింది" "సురక్షిత మోడ్‌లో విడ్జెట్‌లు నిలిపివేయబడ్డాయి" - "మెమరీ చూపు" "విడ్జెట్‌ను ఎంచుకోవడానికి తాకి & నొక్కి పెట్టండి." "విడ్జెట్‌ను ఎంచుకోవడానికి లేదా అనుకూల చర్యలను ఉపయోగించడానికి రెండుసార్లు నొక్కి, ఉంచండి." "%1$d × %2$d" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index c3f95f3ea8..600a83a539 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -26,7 +26,6 @@ "แอปไม่พร้อมใช้งาน" "แอปที่ดาวน์โหลดถูกปิดในโหมดปลอดภัย" "มีการปิดใช้งานวิดเจ็ตในเซฟโหมด" - "แสดง Mem" "แตะค้างเพื่อรับวิดเจ็ต" "แตะ 2 ครั้งค้างไว้เพื่อเลือกวิดเจ็ตหรือใช้การกระทำที่กำหนดเอง" "%1$d × %2$d" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 7958b60def..1be988adce 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -26,7 +26,6 @@ "Hindi available ang app" "Naka-disable ang na-download na app sa Safe mode" "Naka-disable ang mga widget sa Safe mode" - "Ipakita ang Mem" "Pindutin nang matagal upang kumuha ng widget." "I-double tap nang matagal upang pumili ng widget o gumamit ng mga custom na pagkilos." "%1$d × %2$d" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 12ec8054b8..86304efaed 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -26,7 +26,6 @@ "Uygulama kullanılamıyor" "İndirilen uygulama Güvenli modda devre dışı bırakıldı" "Güvenli modda widget\'lar devre dışı" - "Belleği Göster" "Widget seçmek için dokunun ve basılı tutun." "Bir widget\'ı seçmek veya özel işlemleri kullanmak için iki kez hafifçe dokunun ve basılı tutun." "%1$d × %2$d" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index ad839e768a..4432302e38 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -26,7 +26,6 @@ "Додаток недоступний" "Завантажений додаток вимкнено в безпечному режимі" "У безпечному режимі віджети вимкнено" - "Показати пам’ять" "Натисніть і утримуйте, щоб вибрати віджет." "Двічі натисніть і утримуйте, щоб вибрати віджет, або виконайте іншу дію." "%1$d × %2$d" diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml index 9d096ed609..155fba3b24 100644 --- a/res/values-ur-rPK/strings.xml +++ b/res/values-ur-rPK/strings.xml @@ -26,7 +26,6 @@ "ایپ دستیاب نہیں ہے" "ڈاؤن لوڈ کردہ ایپ کو محفوظ وضع میں غیر فعال کر دیا گیا" "ویجیٹس کو محفوظ وضع میں غیر فعال کر دیا گیا" - "‏Mem دکھائیں" "کوئی ویجیٹ منتخب کرنے کیلئے ٹچ کریں اور پکڑے رہیں۔" "کوئی ویجٹ منتخب کرنے یا حسب ضرورت کاروائیاں استعمال کرنے کیلئے دو بار تھپتھپائیں اور پکڑے رکھیں۔" "%1$d × %2$d" diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml index f0cf39eb2b..2c1dd6c357 100644 --- a/res/values-uz-rUZ/strings.xml +++ b/res/values-uz-rUZ/strings.xml @@ -26,7 +26,6 @@ "Ilova mavjud emas" "Yuklab olingan ilova xavfsiz rejimda o‘chirib qo‘yildi" "Xavfsiz rejimda vidjetlar o‘chirib qo‘yilgan" - "Xotirani ko‘rsatish" "Vidjetni tanlash uchun bosib turing." "Ikki marta bosib va bosib turgan holatda vidjetni tanlang yoki maxsus amaldan foydalaning." "%1$d × %2$d" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index d741bf74bb..603352278a 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -26,7 +26,6 @@ "Ứng dụng không có sẵn" "Ứng dụng đã tải xuống bị tắt ở chế độ An toàn" "Tiện ích con bị vô hiệu hóa ở chế độ an toàn" - "Hiển thị bộ nhớ" "Chạm và giữ để chọn tiện ích con." "Nhấn đúp và giữ để chọn tiện ích hoặc sử dụng tác vụ tùy chỉnh." "%1$d × %2$d" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 1f2a394d5c..84f39e46d9 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -26,7 +26,6 @@ "应用不可用" "安全模式下不允许使用下载的此应用" "安全模式下不允许使用小部件" - "显示内存空间" "触摸并按住小部件即可选择。" "点按两次并按住小部件即可选择小部件,您也可以使用自定义操作。" "%1$d × %2$d" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 3a9ffd1b66..511ca28d90 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -26,7 +26,6 @@ "目前無法使用這個應用程式" "在安全模式中無法使用「已下載的應用程式」功能" "在安全模式中無法使用小工具" - "顯示記憶體" "輕觸並按住小工具即可選取。" "連扲兩下,然後扲住,就可以新增小工具,或者執行自訂操作。" "%1$d × %2$d" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 643889a6c8..62c6fd9969 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -26,7 +26,6 @@ "應用程式目前無法使用" "在安全模式中無法使用「已下載的應用程式」功能" "在安全模式下無法使用小工具" - "顯示記憶體" "輕觸並按住小工具即可選取。" "輕按兩下並按住小工具即可選取,您也可以使用自訂動作。" "%1$d × %2$d" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index 1beebe6790..168b6bc9d2 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -26,7 +26,6 @@ "Uhlelo lokusebenza alutholakali" "Uhlelo lokusebenza olulandiwe lukhutshaziwe kumodi ephephile" "Amawijethi akhutshaziwe kwimodi yokuphepha" - "Bonisa i-Mem" "Thinta uphinde ubambe ukuze uphakamise iwijethi." "Thepha kabili bese uyabamba ukuze uthathe iwijethi noma sebenzisa izenzo ezingokwezifiso." "%1$d × %2$d" From 28c6b963d4ccac73ab857c839420513dd560945c Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 12 Oct 2015 11:42:05 -0700 Subject: [PATCH 068/219] Showing a permission prompt for direct call shortcuts Bug: 24580949 Change-Id: Idc92f9f5979a730f43b4905af2bc47b6834dc7a7 --- AndroidManifest.xml | 2 +- res/values/strings.xml | 5 +++- src/com/android/launcher3/Launcher.java | 37 +++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 99a6ad9aa2..48dcf4ee7f 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -68,7 +68,7 @@ android:backupAgent="com.android.launcher3.LauncherBackupAgentHelper" android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher_home" - android:label="@string/application_name" + android:label="@string/app_name" android:largeHeap="@bool/config_largeHeap" android:restoreAnyVersion="true" android:supportsRtl="true" > diff --git a/res/values/strings.xml b/res/values/strings.xml index fefadef282..b544788602 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -31,7 +31,7 @@ com.android.launcher3.permission.RECEIVE_FIRST_LOAD_BROADCAST - Launcher3 + Launcher3 @@ -103,6 +103,9 @@ Allows the app to change the settings and shortcuts in Home. + + %1$s is not allowed to make phone calls + diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 7f8dc3c2e2..3b1ee2abb1 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -16,6 +16,7 @@ package com.android.launcher3; +import android.Manifest; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; @@ -150,6 +151,8 @@ public class Launcher extends Activity private static final int REQUEST_BIND_APPWIDGET = 11; private static final int REQUEST_RECONFIGURE_APPWIDGET = 12; + private static final int REQUEST_PERMISSION_CALL_PHONE = 13; + private static final int WORKSPACE_BACKGROUND_GRADIENT = 0; private static final int WORKSPACE_BACKGROUND_TRANSPARENT = 1; private static final int WORKSPACE_BACKGROUND_BLACK = 2; @@ -872,6 +875,24 @@ public class Launcher extends Activity /** @Override for MNC */ public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + if (requestCode == REQUEST_PERMISSION_CALL_PHONE && sPendingAddItem != null + && sPendingAddItem.requestCode == REQUEST_PERMISSION_CALL_PHONE) { + View v = null; + CellLayout layout = getCellLayout(sPendingAddItem.container, sPendingAddItem.screenId); + if (layout != null) { + v = layout.getChildAt(sPendingAddItem.cellX, sPendingAddItem.cellY); + } + Intent intent = sPendingAddItem.intent; + sPendingAddItem = null; + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + startActivity(v, intent, null); + } else { + // TODO: Show a snack bar with link to settings + Toast.makeText(this, getString(R.string.msg_no_phone_permission, + getString(R.string.app_name)), Toast.LENGTH_SHORT).show(); + } + } if (mLauncherCallbacks != null) { mLauncherCallbacks.onRequestPermissionsResult(requestCode, permissions, grantResults); @@ -2945,6 +2966,22 @@ public class Launcher extends Activity } return true; } catch (SecurityException e) { + if (Utilities.ATLEAST_MARSHMALLOW && tag instanceof ItemInfo) { + // Due to legacy reasons, direct call shortcuts require Launchers to have the + // corresponding permission. Show the appropriate permission prompt if that + // is the case. + if (intent.getComponent() == null + && Intent.ACTION_CALL.equals(intent.getAction()) + && checkSelfPermission(Manifest.permission.CALL_PHONE) != + PackageManager.PERMISSION_GRANTED) { + // TODO: Rename sPendingAddItem to a generic name. + sPendingAddItem = preparePendingAddArgs(REQUEST_PERMISSION_CALL_PHONE, intent, + 0, (ItemInfo) tag); + requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, + REQUEST_PERMISSION_CALL_PHONE); + return false; + } + } Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show(); Log.e(TAG, "Launcher does not have the permission to launch " + intent + ". Make sure to create a MAIN intent-filter for the corresponding activity " + From a295048a69d35b5adc3f021c3d40c32700cc9629 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Mon, 12 Oct 2015 15:57:23 -0700 Subject: [PATCH 069/219] Increase folder cell width slightly. The increased breathing room makes it more likely that long app names will fit in the folder cells without being cut off. Bug: 22462641 Change-Id: I110ede040f9e8fdddbf0c4e7a395ac71435559f3 --- src/com/android/launcher3/DeviceProfile.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 947b164408..5778763a4a 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -229,7 +229,8 @@ public class DeviceProfile { hotseatCellHeightPx = iconSizePx; // Folder - folderCellWidthPx = cellWidthPx + 3 * edgeMarginPx; + folderCellWidthPx = Math.min(cellWidthPx + 6 * edgeMarginPx, + (availableWidthPx - 4 * edgeMarginPx) / inv.numFolderColumns); folderCellHeightPx = cellHeightPx + edgeMarginPx; folderBackgroundOffset = -edgeMarginPx; folderIconSizePx = iconSizePx + 2 * -folderBackgroundOffset; From e9f27273855d50b54b654ef3a3056136e3f2668b Mon Sep 17 00:00:00 2001 From: Winson Date: Tue, 13 Oct 2015 10:47:51 -0700 Subject: [PATCH 070/219] Fixing issue with overview panel buttons. Bug: 22699895 Change-Id: I8a2f05a6008343327e34cbd3169e4056729e0b75 --- src/com/android/launcher3/Launcher.java | 137 +++++++++++++++--------- 1 file changed, 85 insertions(+), 52 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 8679ec7016..8736b3ab75 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -46,7 +46,6 @@ import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; @@ -1268,7 +1267,7 @@ public class Launcher extends Activity if (mState == State.WORKSPACE && !mWorkspace.isInOverviewMode() && !mWorkspace.isSwitchingState()) { mOverviewPanel.requestFocus(); - showOverviewMode(true); + showOverviewMode(true, true /* requestButtonFocus */); } } return true; @@ -1370,55 +1369,8 @@ public class Launcher extends Activity mHotseat.setOnLongClickListener(this); } - mOverviewPanel = (ViewGroup) findViewById(R.id.overview_panel); - // Long-clicking buttons in the overview panel does the same thing as clicking them. - OnLongClickListener performClickOnLongClick = new OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - return v.performClick(); - } - }; - mWidgetsButton = findViewById(R.id.widget_button); - mWidgetsButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View view) { - if (!mWorkspace.isSwitchingState()) { - onClickAddWidgetButton(view); - } - } - }); - mWidgetsButton.setOnLongClickListener(performClickOnLongClick); - mWidgetsButton.setOnTouchListener(getHapticFeedbackTouchListener()); - - View wallpaperButton = findViewById(R.id.wallpaper_button); - wallpaperButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View view) { - if (!mWorkspace.isSwitchingState()) { - onClickWallpaperPicker(view); - } - } - }); - wallpaperButton.setOnLongClickListener(performClickOnLongClick); - wallpaperButton.setOnTouchListener(getHapticFeedbackTouchListener()); - - View settingsButton = findViewById(R.id.settings_button); - if (hasSettings()) { - settingsButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View view) { - if (!mWorkspace.isSwitchingState()) { - onClickSettingsButton(view); - } - } - }); - settingsButton.setOnLongClickListener(performClickOnLongClick); - settingsButton.setOnTouchListener(getHapticFeedbackTouchListener()); - } else { - settingsButton.setVisibility(View.GONE); - } - - mOverviewPanel.setAlpha(0f); + // Setup the overview panel + setupOverviewPanel(); // Setup the workspace mWorkspace.setHapticFeedbackEnabled(false); @@ -1454,6 +1406,64 @@ public class Launcher extends Activity } } + private void setupOverviewPanel() { + mOverviewPanel = (ViewGroup) findViewById(R.id.overview_panel); + + // Long-clicking buttons in the overview panel does the same thing as clicking them. + OnLongClickListener performClickOnLongClick = new OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + return v.performClick(); + } + }; + + // Bind wallpaper button actions + View wallpaperButton = findViewById(R.id.wallpaper_button); + wallpaperButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + if (!mWorkspace.isSwitchingState()) { + onClickWallpaperPicker(view); + } + } + }); + wallpaperButton.setOnLongClickListener(performClickOnLongClick); + wallpaperButton.setOnTouchListener(getHapticFeedbackTouchListener()); + + // Bind widget button actions + mWidgetsButton = findViewById(R.id.widget_button); + mWidgetsButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + if (!mWorkspace.isSwitchingState()) { + onClickAddWidgetButton(view); + } + } + }); + mWidgetsButton.setOnLongClickListener(performClickOnLongClick); + mWidgetsButton.setOnTouchListener(getHapticFeedbackTouchListener()); + + // Bind settings actions + View settingsButton = findViewById(R.id.settings_button); + boolean hasSettings = hasSettings(); + if (hasSettings) { + settingsButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + if (!mWorkspace.isSwitchingState()) { + onClickSettingsButton(view); + } + } + }); + settingsButton.setOnLongClickListener(performClickOnLongClick); + settingsButton.setOnTouchListener(getHapticFeedbackTouchListener()); + } else { + settingsButton.setVisibility(View.GONE); + } + + mOverviewPanel.setAlpha(0f); + } + /** * Sets the all apps button. This method is called from {@link Hotseat}. */ @@ -3352,12 +3362,35 @@ public class Launcher extends Activity return changed; } + /** + * Shows the overview button. + */ void showOverviewMode(boolean animated) { + showOverviewMode(animated, false); + } + + /** + * Shows the overview button, and if {@param requestButtonFocus} is set, will force the focus + * onto one of the overview panel buttons. + */ + void showOverviewMode(boolean animated, boolean requestButtonFocus) { + Runnable postAnimRunnable = null; + if (requestButtonFocus) { + postAnimRunnable = new Runnable() { + @Override + public void run() { + // Hitting the menu button when in touch mode does not trigger touch mode to + // be disabled, so if requested, force focus on one of the overview panel + // buttons. + mOverviewPanel.requestFocusFromTouch(); + } + }; + } mWorkspace.setVisibility(View.VISIBLE); mStateTransitionAnimation.startAnimationToWorkspace(mState, mWorkspace.getState(), Workspace.State.OVERVIEW, WorkspaceStateTransitionAnimation.SCROLL_TO_CURRENT_PAGE, animated, - null /* onCompleteRunnable */); + postAnimRunnable); mState = State.WORKSPACE; } From d9bb1b45e9a8dd78b223fe39f5cbd643da1534cb Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 14 Oct 2015 11:53:04 -0700 Subject: [PATCH 071/219] Preventing activity to restart when keyboard is connected or keyboard type changes Bug: 20820889 Change-Id: Ib0b21c04290607ddd67cef2003e6d89f5d6492d8 --- AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index b0b1e95cca..d1170a303a 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -81,6 +81,7 @@ android:theme="@style/Theme" android:windowSoftInputMode="adjustPan" android:screenOrientation="nosensor" + android:configChanges="keyboard|keyboardHidden|navigation" android:resumeWhilePausing="true" android:taskAffinity="" android:enabled="true"> From a0628cc521614835933db74ba5a2536a936629c5 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 14 Oct 2015 15:23:04 -0700 Subject: [PATCH 072/219] Fix "The specified child already has a parent" IllegalStateException. The problem was due to a race condition between removing a prebound widget view from the drag layer and adding the same view to the workspace upon dropping it; if you let go of the widget immediately after picking it up, the latter happened before the former. Specifically, the flow was: long-click a widget --> drop --> remove the view from the drag layer if it's not null (it is, so nothing happens) --> the view is finally bound/inflated and added to the drag layer --> add the view to the workspace --> already has a parent. There are actually 2 problems here: one is that the bind/inflate is asynchronous, and can therefore happen after dropping the widget view being inflated, and the other is that the view is added to the workspace even though the transition has barely started (we usually ignore drops if the transition is less than half complete). It turns out that this second problem was also due to a race condition, this time between dropping a widget or app onto the workspace and calling LauncherStateTransitionAnimation.dispatchOnLauncherTransitionStart(). If the drop happened before the dispatch, as in the case of the crash, then the drop was accepted because the transition progress was still 1.0 from the previous transition. I fixed the first problem by removing the drag layer widget view in Launcher where it is potentially used instead of Workspace. And I fixed the second problem by setting mTransitionProgress to 0 in Workspace.onLauncherTransitionPrepare(). I also added some debugging logs. Bug: 23896857 Change-Id: I66944e6d3f23b70dea15f7fb01af0763a1bfcbda --- src/com/android/launcher3/CellLayout.java | 10 ++++--- src/com/android/launcher3/Launcher.java | 30 ++++++++++++------- src/com/android/launcher3/Workspace.java | 6 +--- .../widget/WidgetHostViewLoader.java | 27 +++++++++++++++-- .../widget/WidgetsContainerView.java | 15 ++++++---- 5 files changed, 59 insertions(+), 29 deletions(-) diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index 5539d9f8af..71a1df30fc 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -67,7 +67,8 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { public static final int WORKSPACE_ACCESSIBILITY_DRAG = 2; public static final int FOLDER_ACCESSIBILITY_DRAG = 1; - static final String TAG = "CellLayout"; + private static final String TAG = "CellLayout"; + private static final boolean LOGD = false; private Launcher mLauncher; @Thunk int mCellWidth; @@ -242,9 +243,7 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { // If an animation is started and then stopped very quickly, we can still // get spurious updates we've cleared the tag. Guard against this. if (outline == null) { - @SuppressWarnings("all") // suppress dead code warning - final boolean debug = false; - if (debug) { + if (LOGD) { Object val = animation.getAnimatedValue(); Log.d(TAG, "anim " + thisIndex + " update: " + val + ", isStopped " + anim.isStopped()); @@ -654,6 +653,9 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { if (lp.cellVSpan < 0) lp.cellVSpan = mCountY; child.setId(childId); + if (LOGD) { + Log.d(TAG, "Adding view to ShortcutsAndWidgetsContainer: " + child); + } mShortcutsAndWidgets.addView(child, index, lp); if (markCells) markCellsAsOccupiedForView(child); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index f90e09c39c..f5057c0b3d 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -46,7 +46,6 @@ import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; @@ -1728,14 +1727,14 @@ public class Launcher extends Activity mWorkspace.postDelayed(mBuildLayersRunnable, 500); final ViewTreeObserver.OnDrawListener listener = this; mWorkspace.post(new Runnable() { - public void run() { - if (mWorkspace != null && - mWorkspace.getViewTreeObserver() != null) { - mWorkspace.getViewTreeObserver(). - removeOnDrawListener(listener); - } + public void run() { + if (mWorkspace != null && + mWorkspace.getViewTreeObserver() != null) { + mWorkspace.getViewTreeObserver(). + removeOnDrawListener(listener); } - }); + } + }); return; } }); @@ -2226,8 +2225,11 @@ public class Launcher extends Activity mPendingAddInfo.dropPos = null; } - void addAppWidgetImpl(final int appWidgetId, final ItemInfo info, final + void addAppWidgetFromDropImpl(final int appWidgetId, final ItemInfo info, final AppWidgetHostView boundWidget, final LauncherAppWidgetProviderInfo appWidgetInfo) { + if (LOGD) { + Log.d(TAG, "Adding widget from drop"); + } addAppWidgetImpl(appWidgetId, info, boundWidget, appWidgetInfo, 0); } @@ -2335,8 +2337,14 @@ public class Launcher extends Activity AppWidgetHostView hostView = info.boundWidget; int appWidgetId; if (hostView != null) { + // In the case where we've prebound the widget, we remove it from the DragLayer + if (LOGD) { + Log.d(TAG, "Removing widget view from drag layer and setting boundWidget to null"); + } + getDragLayer().removeView(hostView); + appWidgetId = hostView.getAppWidgetId(); - addAppWidgetImpl(appWidgetId, info, hostView, info.info); + addAppWidgetFromDropImpl(appWidgetId, info, hostView, info.info); // Clear the boundWidget so that it doesn't get destroyed. info.boundWidget = null; @@ -2349,7 +2357,7 @@ public class Launcher extends Activity boolean success = mAppWidgetManager.bindAppWidgetIdIfAllowed( appWidgetId, info.info, options); if (success) { - addAppWidgetImpl(appWidgetId, info, null, info.info); + addAppWidgetFromDropImpl(appWidgetId, info, null, info.info); } else { mPendingAddWidgetInfo = info.info; Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND); diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 8d70c0b39a..23670c00c7 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -2060,6 +2060,7 @@ public class Workspace extends PagedView @Override public void onLauncherTransitionPrepare(Launcher l, boolean animated, boolean toWorkspace) { mIsSwitchingState = true; + mTransitionProgress = 0; // Invalidate here to ensure that the pages are rendered during the state change transition. invalidate(); @@ -3659,11 +3660,6 @@ public class Workspace extends PagedView Resources res = mLauncher.getResources(); final int duration = res.getInteger(R.integer.config_dropAnimMaxDuration) - 200; - // In the case where we've prebound the widget, we remove it from the DragLayer - if (finalView instanceof AppWidgetHostView && external) { - mLauncher.getDragLayer().removeView(finalView); - } - boolean isWidget = info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET || info.itemType == LauncherSettings.Favorites.ITEM_TYPE_CUSTOM_APPWIDGET; if ((animationType == ANIMATE_INTO_POSITION_AND_RESIZE || external) && finalView != null) { diff --git a/src/com/android/launcher3/widget/WidgetHostViewLoader.java b/src/com/android/launcher3/widget/WidgetHostViewLoader.java index 461aebb6b8..5d3af52542 100644 --- a/src/com/android/launcher3/widget/WidgetHostViewLoader.java +++ b/src/com/android/launcher3/widget/WidgetHostViewLoader.java @@ -4,13 +4,13 @@ import android.appwidget.AppWidgetHostView; import android.appwidget.AppWidgetManager; import android.content.Context; import android.graphics.Rect; -import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.util.Log; import android.view.View; import com.android.launcher3.AppWidgetResizeFrame; -import com.android.launcher3.DragController.DragListener; +import com.android.launcher3.DragController; import com.android.launcher3.DragLayer; import com.android.launcher3.DragSource; import com.android.launcher3.Launcher; @@ -19,7 +19,9 @@ import com.android.launcher3.Utilities; import com.android.launcher3.compat.AppWidgetManagerCompat; import com.android.launcher3.util.Thunk; -public class WidgetHostViewLoader implements DragListener { +public class WidgetHostViewLoader implements DragController.DragListener { + private static final String TAG = "WidgetHostViewLoader"; + private static final boolean LOGD = false; /* Runnables to handle inflation and binding. */ @Thunk Runnable mInflateWidgetRunnable = null; @@ -48,6 +50,10 @@ public class WidgetHostViewLoader implements DragListener { @Override public void onDragEnd() { + if (LOGD) { + Log.d(TAG, "Cleaning up in onDragEnd()..."); + } + // Cleanup up preloading state. mLauncher.getDragController().removeDragListener(this); @@ -62,6 +68,9 @@ public class WidgetHostViewLoader implements DragListener { // The widget was inflated and added to the DragLayer -- remove it. if (mInfo.boundWidget != null) { + if (LOGD) { + Log.d(TAG, "...removing widget from drag layer"); + } mLauncher.getDragLayer().removeView(mInfo.boundWidget); mLauncher.getAppWidgetHost().deleteAppWidgetId(mInfo.boundWidget.getAppWidgetId()); mInfo.boundWidget = null; @@ -89,6 +98,9 @@ public class WidgetHostViewLoader implements DragListener { @Override public void run() { mWidgetLoadingId = mLauncher.getAppWidgetHost().allocateAppWidgetId(); + if (LOGD) { + Log.d(TAG, "Binding widget, id: " + mWidgetLoadingId); + } if(AppWidgetManagerCompat.getInstance(mLauncher).bindAppWidgetIdIfAllowed( mWidgetLoadingId, pInfo, options)) { @@ -101,6 +113,9 @@ public class WidgetHostViewLoader implements DragListener { mInflateWidgetRunnable = new Runnable() { @Override public void run() { + if (LOGD) { + Log.d(TAG, "Inflating widget, id: " + mWidgetLoadingId); + } if (mWidgetLoadingId == -1) { return; } @@ -120,11 +135,17 @@ public class WidgetHostViewLoader implements DragListener { lp.x = lp.y = 0; lp.customPosition = true; hostView.setLayoutParams(lp); + if (LOGD) { + Log.d(TAG, "Adding host view to drag layer"); + } mLauncher.getDragLayer().addView(hostView); mView.setTag(mInfo); } }; + if (LOGD) { + Log.d(TAG, "About to bind/inflate widget"); + } mHandler.post(mBindWidgetRunnable); return true; } diff --git a/src/com/android/launcher3/widget/WidgetsContainerView.java b/src/com/android/launcher3/widget/WidgetsContainerView.java index 64d33aa09a..b780f590b3 100644 --- a/src/com/android/launcher3/widget/WidgetsContainerView.java +++ b/src/com/android/launcher3/widget/WidgetsContainerView.java @@ -52,10 +52,9 @@ import com.android.launcher3.util.Thunk; * The widgets list view container. */ public class WidgetsContainerView extends BaseContainerView - implements View.OnLongClickListener, View.OnClickListener, DragSource{ - + implements View.OnLongClickListener, View.OnClickListener, DragSource { private static final String TAG = "WidgetsContainerView"; - private static final boolean DEBUG = false; + private static final boolean LOGD = false; /* Coefficient multiplied to the screen height for preloading widgets. */ private static final int PRELOAD_SCREEN_HEIGHT_MULTIPLE = 1; @@ -92,13 +91,14 @@ public class WidgetsContainerView extends BaseContainerView mDragController = mLauncher.getDragController(); mAdapter = new WidgetsListAdapter(context, this, this, mLauncher); mIconCache = (LauncherAppState.getInstance()).getIconCache(); - if (DEBUG) { + if (LOGD) { Log.d(TAG, "WidgetsContainerView constructor"); } } @Override protected void onFinishInflate() { + super.onFinishInflate(); mContent = findViewById(R.id.content); mView = (WidgetsRecyclerView) findViewById(R.id.widgets_list_view); mView.setAdapter(mAdapter); @@ -158,7 +158,7 @@ public class WidgetsContainerView extends BaseContainerView @Override public boolean onLongClick(View v) { - if (DEBUG) { + if (LOGD) { Log.d(TAG, String.format("onLonglick [v=%s]", v)); } // Return early if this is not initiated from a touch @@ -173,7 +173,7 @@ public class WidgetsContainerView extends BaseContainerView if (status && v.getTag() instanceof PendingAddWidgetInfo) { WidgetHostViewLoader hostLoader = new WidgetHostViewLoader(mLauncher, v); boolean preloadStatus = hostLoader.preloadWidget(); - if (DEBUG) { + if (LOGD) { Log.d(TAG, String.format("preloading widget [status=%s]", preloadStatus)); } mLauncher.getDragController().addDragListener(hostLoader); @@ -302,6 +302,9 @@ public class WidgetsContainerView extends BaseContainerView @Override public void onDropCompleted(View target, DragObject d, boolean isFlingToDelete, boolean success) { + if (LOGD) { + Log.d(TAG, "onDropCompleted"); + } if (isFlingToDelete || !success || (target != mLauncher.getWorkspace() && !(target instanceof DeleteDropTarget) && !(target instanceof Folder))) { // Exit spring loaded mode if we have not successfully dropped or have not handled the From fb062c63355f65e6df9e99cbf4cce49cee2900d1 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Fri, 16 Oct 2015 10:12:23 -0700 Subject: [PATCH 073/219] Close some Cursors and call super.onFinishInflate(). Android Studio gave these warnings, and they seem like good ideas. Change-Id: I9a4d3997fd18e86e007e4511e1ac9e8a75509265 --- src/com/android/launcher3/PageIndicatorMarker.java | 1 + src/com/android/launcher3/model/MigrateFromRestoreTask.java | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/PageIndicatorMarker.java b/src/com/android/launcher3/PageIndicatorMarker.java index f012db74b0..7bf21dd905 100644 --- a/src/com/android/launcher3/PageIndicatorMarker.java +++ b/src/com/android/launcher3/PageIndicatorMarker.java @@ -45,6 +45,7 @@ public class PageIndicatorMarker extends FrameLayout { } protected void onFinishInflate() { + super.onFinishInflate(); mActiveMarker = (ImageView) findViewById(R.id.active); mInactiveMarker = (ImageView) findViewById(R.id.inactive); } diff --git a/src/com/android/launcher3/model/MigrateFromRestoreTask.java b/src/com/android/launcher3/model/MigrateFromRestoreTask.java index 6a529f61f7..ba33b02ce5 100644 --- a/src/com/android/launcher3/model/MigrateFromRestoreTask.java +++ b/src/com/android/launcher3/model/MigrateFromRestoreTask.java @@ -632,9 +632,9 @@ public class MigrateFromRestoreTask { mEntryToRemove.add(entry.id); continue; } - entries.add(entry); } + c.close(); return entries; } @@ -655,7 +655,7 @@ public class MigrateFromRestoreTask { mEntryToRemove.add(c.getLong(0)); } } - + c.close(); return total; } From 775455c4a8266655bf43b943e969d42ac32609ec Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Fri, 16 Oct 2015 09:49:32 -0700 Subject: [PATCH 074/219] Add LauncherCallbacks method to add additional search widget options. Bug: 25000458 Change-Id: I5e8d48617568569bc6e4f284749c3ed9fb20a68f --- src/com/android/launcher3/Launcher.java | 4 ++++ src/com/android/launcher3/LauncherCallbacks.java | 1 + src/com/android/launcher3/testing/LauncherExtension.java | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 3b1ee2abb1..9c321a81a6 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -3553,6 +3553,10 @@ public class Launcher extends Activity opts.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH, maxWidth); opts.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, minWidth); + if (mLauncherCallbacks != null) { + opts.putAll(mLauncherCallbacks.getAdditionalSearchWidgetOptions()); + } + SharedPreferences sp = getSharedPreferences( LauncherAppState.getSharedPreferencesKey(), MODE_PRIVATE); int widgetId = sp.getInt(QSB_WIDGET_ID, -1); diff --git a/src/com/android/launcher3/LauncherCallbacks.java b/src/com/android/launcher3/LauncherCallbacks.java index 927db224f8..f27ed1da9e 100644 --- a/src/com/android/launcher3/LauncherCallbacks.java +++ b/src/com/android/launcher3/LauncherCallbacks.java @@ -83,6 +83,7 @@ public interface LauncherCallbacks { public boolean hasCustomContentToLeft(); public void populateCustomContentContainer(); public View getQsbBar(); + public Bundle getAdditionalSearchWidgetOptions(); /* * Extensions points for adding / replacing some other aspects of the Launcher experience. diff --git a/src/com/android/launcher3/testing/LauncherExtension.java b/src/com/android/launcher3/testing/LauncherExtension.java index 3364fcc9f5..1bb57874e3 100644 --- a/src/com/android/launcher3/testing/LauncherExtension.java +++ b/src/com/android/launcher3/testing/LauncherExtension.java @@ -252,6 +252,11 @@ public class LauncherExtension extends Launcher { return mLauncherOverlay.getSearchBox(); } + @Override + public Bundle getAdditionalSearchWidgetOptions() { + return new Bundle(); + } + @Override public Intent getFirstRunActivity() { return null; From a49b1f75cdf8efe88408173737a7b3c8f4b58a4c Mon Sep 17 00:00:00 2001 From: Winson Date: Fri, 16 Oct 2015 14:57:24 -0700 Subject: [PATCH 075/219] Fix issue with source params not reporting predicted apps. Bug: 25020080 Change-Id: Iaa67ccbb3e3a6c264aaa4fa3c915faad8a69bbbc --- src/com/android/launcher3/Folder.java | 2 +- src/com/android/launcher3/Hotseat.java | 3 ++- src/com/android/launcher3/Stats.java | 4 ++-- src/com/android/launcher3/Workspace.java | 2 +- .../launcher3/allapps/AllAppsRecyclerView.java | 16 +++++++++++++++- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index 18918612c3..fb9d95a201 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -1347,7 +1347,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList } @Override - public void fillInLaunchSourceData(Bundle sourceData) { + public void fillInLaunchSourceData(View v, Bundle sourceData) { // Fill in from the folder icon's launch source provider first Stats.LaunchSourceUtils.populateSourceDataFromAncestorProvider(mFolderIcon, sourceData); sourceData.putString(Stats.SOURCE_EXTRA_SUB_CONTAINER, Stats.SUB_CONTAINER_FOLDER); diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java index 98912f56ee..902b6ec61d 100644 --- a/src/com/android/launcher3/Hotseat.java +++ b/src/com/android/launcher3/Hotseat.java @@ -23,6 +23,7 @@ import android.os.Bundle; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.MotionEvent; +import android.view.View; import android.widget.FrameLayout; import android.widget.TextView; @@ -153,7 +154,7 @@ public class Hotseat extends FrameLayout } @Override - public void fillInLaunchSourceData(Bundle sourceData) { + public void fillInLaunchSourceData(View v, Bundle sourceData) { sourceData.putString(Stats.SOURCE_EXTRA_CONTAINER, Stats.CONTAINER_HOTSEAT); } } diff --git a/src/com/android/launcher3/Stats.java b/src/com/android/launcher3/Stats.java index cb0e252b2e..83bca855a9 100644 --- a/src/com/android/launcher3/Stats.java +++ b/src/com/android/launcher3/Stats.java @@ -31,7 +31,7 @@ public class Stats { * Implemented by containers to provide a launch source for a given child. */ public interface LaunchSourceProvider { - void fillInLaunchSourceData(Bundle sourceData); + void fillInLaunchSourceData(View v, Bundle sourceData); } /** @@ -70,7 +70,7 @@ public class Stats { } if (provider != null) { - provider.fillInLaunchSourceData(sourceData); + provider.fillInLaunchSourceData(v, sourceData); } else if (LauncherAppState.isDogfoodBuild()) { throw new RuntimeException("Expected LaunchSourceProvider"); } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 89d1ab4d82..df4274a7a4 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -4500,7 +4500,7 @@ public class Workspace extends PagedView } @Override - public void fillInLaunchSourceData(Bundle sourceData) { + public void fillInLaunchSourceData(View v, Bundle sourceData) { sourceData.putString(Stats.SOURCE_EXTRA_CONTAINER, Stats.CONTAINER_HOMESCREEN); sourceData.putInt(Stats.SOURCE_EXTRA_CONTAINER_PAGE, getCurrentPage()); } diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java index 48b9494b7e..1cb03c9898 100644 --- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java +++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java @@ -25,6 +25,7 @@ import android.util.AttributeSet; import android.view.View; import com.android.launcher3.BaseRecyclerView; +import com.android.launcher3.BubbleTextView; import com.android.launcher3.DeviceProfile; import com.android.launcher3.R; import com.android.launcher3.Stats; @@ -155,12 +156,25 @@ public class AllAppsRecyclerView extends BaseRecyclerView } @Override - public void fillInLaunchSourceData(Bundle sourceData) { + public void fillInLaunchSourceData(View v, Bundle sourceData) { sourceData.putString(Stats.SOURCE_EXTRA_CONTAINER, Stats.CONTAINER_ALL_APPS); if (mApps.hasFilter()) { sourceData.putString(Stats.SOURCE_EXTRA_SUB_CONTAINER, Stats.SUB_CONTAINER_ALL_APPS_SEARCH); } else { + if (v instanceof BubbleTextView) { + BubbleTextView icon = (BubbleTextView) v; + int position = getChildPosition(icon); + if (position != NO_POSITION) { + List items = mApps.getAdapterItems(); + AlphabeticalAppsList.AdapterItem item = items.get(position); + if (item.viewType == AllAppsGridAdapter.PREDICTION_ICON_VIEW_TYPE) { + sourceData.putString(Stats.SOURCE_EXTRA_SUB_CONTAINER, + Stats.SUB_CONTAINER_ALL_APPS_PREDICTION); + return; + } + } + } sourceData.putString(Stats.SOURCE_EXTRA_SUB_CONTAINER, Stats.SUB_CONTAINER_ALL_APPS_A_Z); } From 3d1c0ffba76d45104560acb52ca95e0f9e992a50 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 16 Oct 2015 17:18:54 -0700 Subject: [PATCH 076/219] Adding tests for rotation preference Updating the gradle file to run tests directly from AndroidStudio Change-Id: Iac23dfc6f995477f2406071fbfab3a16ee58ce6f --- build.gradle | 21 ++++- tests/AndroidManifest.xml | 8 +- .../launcher3/InvariantDeviceProfileTest.java | 5 +- .../launcher3/RotationPreferenceTest.java | 87 +++++++++++++++++++ 4 files changed, 113 insertions(+), 8 deletions(-) create mode 100644 tests/src/com/android/launcher3/RotationPreferenceTest.java diff --git a/build.gradle b/build.gradle index d971755688..44f5b7c528 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:1.3.0' + classpath 'com.android.tools.build:gradle:+' classpath 'com.google.protobuf:protobuf-gradle-plugin:0.7.0' } } @@ -21,6 +21,9 @@ android { targetSdkVersion 23 versionCode 1 versionName "1.0" + + testApplicationId "com.android.launcher3.tests" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { debug { @@ -30,10 +33,16 @@ android { sourceSets { main { res.srcDirs = ['res', 'WallpaperPicker/res'] - main.java.srcDirs = ['src', 'WallpaperPicker/src'] + java.srcDirs = ['src', 'WallpaperPicker/src'] manifest.srcFile 'AndroidManifest.xml' proto.srcDirs 'protos/' } + + androidTest { + java.srcDirs = ['tests/src'] + res.srcDirs = ['tests/res'] + manifest.srcFile "tests/AndroidManifest.xml" + } } } @@ -42,9 +51,13 @@ repositories { } dependencies { - compile 'com.android.support:support-v4:+' - compile 'com.android.support:recyclerview-v7:+' + compile 'com.android.support:support-v4:23.0.1' + compile 'com.android.support:recyclerview-v7:23.0.1' compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-2' + + testCompile 'junit:junit:4.12' + androidTestCompile 'com.android.support.test:runner:+' + androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:+' } protobuf { diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml index 42ae5a38a7..8acc5e90cd 100644 --- a/tests/AndroidManifest.xml +++ b/tests/AndroidManifest.xml @@ -1,4 +1,4 @@ - + + + + android:targetPackage="com.android.launcher3" > diff --git a/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java b/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java index 1bc7c1190f..a99ae4f958 100644 --- a/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java +++ b/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java @@ -52,9 +52,12 @@ public class InvariantDeviceProfileTest extends AndroidTestCase { public void testFindClosestDeviceProfile2() { for (InvariantDeviceProfile idf: mPredefinedDeviceProfiles) { + ArrayList predefinedProfilesCopy = + new ArrayList<>(mPredefinedDeviceProfiles); ArrayList closestProfiles = mInvariantProfile.findClosestDeviceProfiles( - idf.minWidthDps, idf.minHeightDps, mPredefinedDeviceProfiles); + idf.minWidthDps, idf.minHeightDps, predefinedProfilesCopy + ); assertTrue(closestProfiles.get(0).equals(idf)); } } diff --git a/tests/src/com/android/launcher3/RotationPreferenceTest.java b/tests/src/com/android/launcher3/RotationPreferenceTest.java new file mode 100644 index 0000000000..5f63475579 --- /dev/null +++ b/tests/src/com/android/launcher3/RotationPreferenceTest.java @@ -0,0 +1,87 @@ +package com.android.launcher3; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Rect; +import android.support.test.uiautomator.By; +import android.support.test.uiautomator.UiDevice; +import android.support.test.uiautomator.Until; +import android.test.InstrumentationTestCase; + +/** + * Test for auto rotate preference. + */ +public class RotationPreferenceTest extends InstrumentationTestCase { + + private UiDevice mDevice; + private Context mTargetContext; + private String mTargetPackage; + + private SharedPreferences mPrefs; + private boolean mOriginalRotationValue; + + @Override + protected void setUp() throws Exception { + super.setUp(); + + mDevice = UiDevice.getInstance(getInstrumentation()); + mTargetContext = getInstrumentation().getTargetContext(); + mTargetPackage = mTargetContext.getPackageName(); + mPrefs = mTargetContext.getSharedPreferences( + LauncherAppState.getSharedPreferencesKey(), Context.MODE_PRIVATE); + mOriginalRotationValue = mPrefs.getBoolean(Utilities.ALLOW_ROTATION_PREFERENCE_KEY, false); + } + + @Override + protected void tearDown() throws Exception { + setRotationEnabled(mOriginalRotationValue); + super.tearDown(); + } + + public void testRotation_disabled() throws Exception { + if (mTargetContext.getResources().getBoolean(R.bool.allow_rotation)) { + // This is a tablet. The test is only valid to mobile devices. + return; + } + + setRotationEnabled(false); + mDevice.setOrientationRight(); + goToLauncher(); + + Rect hotseat = getHotseatBounds(); + assertTrue(hotseat.width() > hotseat.height()); + } + + public void testRotation_enabled() throws Exception { + if (mTargetContext.getResources().getBoolean(R.bool.allow_rotation)) { + // This is a tablet. The test is only valid to mobile devices. + return; + } + + setRotationEnabled(true); + mDevice.setOrientationRight(); + goToLauncher(); + + Rect hotseat = getHotseatBounds(); + assertTrue(hotseat.width() < hotseat.height()); + } + + private void goToLauncher() { + Intent homeIntent = new Intent(Intent.ACTION_MAIN) + .addCategory(Intent.CATEGORY_HOME) + .setPackage(mTargetPackage) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getInstrumentation().getContext().startActivity(homeIntent); + mDevice.wait(Until.hasObject(By.pkg(mTargetPackage).depth(0)), 3000); + } + + private void setRotationEnabled(boolean enabled) { + mPrefs.edit().putBoolean(Utilities.ALLOW_ROTATION_PREFERENCE_KEY, enabled).commit(); + } + + private Rect getHotseatBounds() { + mDevice.wait(Until.hasObject(By.res(mTargetPackage, "hotseat")), 3000); + return mDevice.findObject(By.res(mTargetPackage, "hotseat")).getVisibleBounds(); + } +} From f58538672aaeb1d0d00a9c65a773f5e251003c3b Mon Sep 17 00:00:00 2001 From: Geoff Mendal Date: Mon, 19 Oct 2015 08:49:51 -0700 Subject: [PATCH 077/219] Import translations. DO NOT MERGE Change-Id: Iee53921c75c785c7d73dd375b4e044761a5a7246 Auto-generated-cl: translation import --- res/values-af/strings.xml | 3 ++- res/values-am/strings.xml | 3 ++- res/values-ar/strings.xml | 3 ++- res/values-az-rAZ/strings.xml | 3 ++- res/values-bg/strings.xml | 3 ++- res/values-bn-rBD/strings.xml | 3 ++- res/values-ca/strings.xml | 3 ++- res/values-cs/strings.xml | 3 ++- res/values-da/strings.xml | 3 ++- res/values-de/strings.xml | 3 ++- res/values-el/strings.xml | 3 ++- res/values-en-rAU/strings.xml | 3 ++- res/values-en-rGB/strings.xml | 3 ++- res/values-en-rIN/strings.xml | 3 ++- res/values-es-rUS/strings.xml | 3 ++- res/values-es/strings.xml | 3 ++- res/values-et-rEE/strings.xml | 3 ++- res/values-eu-rES/strings.xml | 3 ++- res/values-fa/strings.xml | 3 ++- res/values-fi/strings.xml | 3 ++- res/values-fr-rCA/strings.xml | 3 ++- res/values-fr/strings.xml | 3 ++- res/values-gl-rES/strings.xml | 3 ++- res/values-gu-rIN/strings.xml | 3 ++- res/values-hi/strings.xml | 3 ++- res/values-hr/strings.xml | 3 ++- res/values-hu/strings.xml | 3 ++- res/values-hy-rAM/strings.xml | 3 ++- res/values-in/strings.xml | 3 ++- res/values-is-rIS/strings.xml | 3 ++- res/values-it/strings.xml | 3 ++- res/values-iw/strings.xml | 3 ++- res/values-ja/strings.xml | 3 ++- res/values-ka-rGE/strings.xml | 3 ++- res/values-kk-rKZ/strings.xml | 3 ++- res/values-km-rKH/strings.xml | 3 ++- res/values-kn-rIN/strings.xml | 3 ++- res/values-ko/strings.xml | 3 ++- res/values-ky-rKG/strings.xml | 3 ++- res/values-lo-rLA/strings.xml | 3 ++- res/values-lt/strings.xml | 3 ++- res/values-lv/strings.xml | 3 ++- res/values-mk-rMK/strings.xml | 3 ++- res/values-ml-rIN/strings.xml | 3 ++- res/values-mn-rMN/strings.xml | 3 ++- res/values-mr-rIN/strings.xml | 3 ++- res/values-ms-rMY/strings.xml | 3 ++- res/values-my-rMM/strings.xml | 3 ++- res/values-nb/strings.xml | 3 ++- res/values-ne-rNP/strings.xml | 3 ++- res/values-nl/strings.xml | 3 ++- res/values-pa-rIN/strings.xml | 3 ++- res/values-pl/strings.xml | 3 ++- res/values-pt-rPT/strings.xml | 3 ++- res/values-pt/strings.xml | 3 ++- res/values-ro/strings.xml | 3 ++- res/values-ru/strings.xml | 3 ++- res/values-si-rLK/strings.xml | 3 ++- res/values-sk/strings.xml | 3 ++- res/values-sl/strings.xml | 3 ++- res/values-sq-rAL/strings.xml | 3 ++- res/values-sr/strings.xml | 3 ++- res/values-sv/strings.xml | 3 ++- res/values-sw/strings.xml | 3 ++- res/values-ta-rIN/strings.xml | 3 ++- res/values-te-rIN/strings.xml | 3 ++- res/values-th/strings.xml | 3 ++- res/values-tl/strings.xml | 3 ++- res/values-tr/strings.xml | 3 ++- res/values-uk/strings.xml | 3 ++- res/values-ur-rPK/strings.xml | 3 ++- res/values-uz-rUZ/strings.xml | 3 ++- res/values-vi/strings.xml | 3 ++- res/values-zh-rCN/strings.xml | 3 ++- res/values-zh-rHK/strings.xml | 3 ++- res/values-zh-rTW/strings.xml | 3 ++- res/values-zu/strings.xml | 3 ++- 77 files changed, 154 insertions(+), 77 deletions(-) diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 78be3f4218..b94ddabeda 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Werk" "Program is nie geïnstalleer nie." @@ -46,6 +46,7 @@ "Laat die program toe om die instellings en kortpaaie in Tuis te lees." "skryf Tuis-instellings en -kortpaaie" "Laat die program toe om die instellings en kortpaaie in Tuis te verander." + "%1$s word nie toegelaat om foonoproepe te maak nie" "Kon nie legstuk laai nie" "Stel op" "Dit is \'n stelselprogram en kan nie gedeïnstalleer word nie." diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index b5d982ee42..fc404ffb63 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -19,7 +19,7 @@ - "ማስጀመሪያ3" + "Launcher3" "ስራ" "መተግበሪያ አልተጫነም።" @@ -46,6 +46,7 @@ "መተግበሪያው በመነሻ ውስጥ ያሉ ቅንብሮችን እና አቋራጮችን እንዲያነብ ያስችለዋል።" "የመነሻ ቅንብሮችን እና አቋራጮችን ይጽፋል" "መተግብሪያው ቅንብሮችን እና አቋራጮችን በመነሻ ውስጥ እንዲቀይራቸው ያስችለዋል።" + "%1$s የስልክ ጥሪዎችን ለማድረግ አልተፈቀደለትም" "ፍርግም የመጫን ችግር" "ማዋቀሪያ" "ይህ የስርዓት መተግበሪያ ነው እና ማራገፍ አይቻልም።" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 619e11d679..1bea20c9d5 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "العمل" "لم يتم تثبيت التطبيق." @@ -46,6 +46,7 @@ "للسماح للتطبيق بقراءة الإعدادات والاختصارات في الشاشة الرئيسية." "كتابة إعدادات واختصارات الشاشة الرئيسية" "للسماح للتطبيق بتغيير الإعدادات والاختصارات في الشاشة الرئيسية." + "%1$s غير مسموح به لإجراء مكالمات هاتفية" "حدثت مشكلة أثناء تحميل الأداة" "الإعداد" "هذا تطبيق نظام وتتعذر إزالته." diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml index b9ea83f263..6a2bbbb77b 100644 --- a/res/values-az-rAZ/strings.xml +++ b/res/values-az-rAZ/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "İş" "Tətbiq quraşdırılmayıb." @@ -46,6 +46,7 @@ "Tətbiqə Əsas Səhifədə parametrləri və qısayolları oxumağa icazə verir." "Əsas Səhifə ayarlarını və qısayolları yazın" "Tətbiqə Əsas Səhifədə ayarları və qısayolları dəyişməyə icazə verir." + "%1$s tətbiqinə telefon zəngləri etmək üçün icazə verilmir" "Vidcet yükləmə problemi" "Quraşdırma" "Bu sistem tətbiqi olduğu üçün sistemdən silinə bilməz." diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 214c64b2d1..92bc1531a6 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Работа" "Приложението не е инсталирано." @@ -46,6 +46,7 @@ "Разрешава на приложението да чете настройките и преките пътища в Начало." "запис на настройките и преките пътища в Начало" "Разрешава на приложението да променя настройките и преките пътища в Начало." + "%1$s няма разрешение да извършва телефонни обаждания" "Проблем при зареждане на приспособлението" "Настройване" "Това е системно приложение и не може да се деинсталира." diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml index 129d2507a1..fd9b711fa2 100644 --- a/res/values-bn-rBD/strings.xml +++ b/res/values-bn-rBD/strings.xml @@ -19,7 +19,7 @@ - "লঞ্চার৩" + "Launcher3" "কাজ" "অ্যাপ্লিকেশান ইনস্টল করা নেই৷" @@ -46,6 +46,7 @@ "হোমে অ্যাপ্লিকেশানটিকে সেটিংস এবং শর্টকাটগুলি পড়তে দেয়৷" "হোম সেটিংস এবং শর্টকাটগুলি লেখে" "হোমে অ্যাপ্লিকেশানটিকে সেটিংস এবং শর্টকাটগুলি পরিবর্তন করতে দেয়৷" + "ফোন কলগুলি করার জন্য %1$s এর অনুমতি নেই" "উইজেট লোড হতে সমস্যা হয়েছে" "সেটআপ" "এটি একটি সিস্টেম অ্যাপ্লিকেশান এবং আনইনস্টল করা যাবে না৷" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index cf874a4518..61ae7435f2 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Feina" "L\'aplicació no s\'ha instal·lat." @@ -46,6 +46,7 @@ "Permet que l\'aplicació llegeixi la configuració i les dreceres de la pantalla d\'inici." "escriu la configuració i les dreceres de la pantalla d\'inici" "Permet que l\'aplicació canviï la configuració i les dreceres de la pantalla d\'inici." + "%1$s no té permís per fer trucades telefòniques" "S\'ha produït un problema en carregar el widget" "Configuració" "Aquesta aplicació és una aplicació del sistema i no es pot desinstal·lar." diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index c2f9f421bd..6d0326b48a 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Práce" "Aplikace není nainstalována." @@ -46,6 +46,7 @@ "Umožňuje aplikaci číst nastavení a odkazy na ploše." "zápis nastavení a odkazů plochy" "Umožňuje aplikaci změnit nastavení a odkazy na ploše." + "Aplikace %1$s nemá oprávnění telefonovat" "Problém s načtením widgetu" "Nastavení" "Toto je systémová aplikace a nelze ji odinstalovat." diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index a9487050e2..d536bc6822 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Arbejde" "Appen er ikke installeret." @@ -46,6 +46,7 @@ "Tillader, at appen læser indstillingerne og genvejene på startskærmen." "skrive indstillinger og genveje for startskærmen" "Tillader, at appen ændrer indstillingerne og genvejene på startskærmen." + "%1$s har ikke tilladelse til at foretage telefonopkald" "Der er problemer med indlæsning af widgetten" "Konfigurer" "Dette er en systemapp, som ikke kan afinstalleres." diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 96ae74b11b..bf423cbe8f 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Arbeit" "App ist nicht installiert." @@ -46,6 +46,7 @@ "Ermöglicht der App, die Einstellungen und Verknüpfungen auf dem Startbildschirm zu lesen" "Einstellungen und Verknüpfungen für den Startbildschirm schreiben" "Ermöglicht der App, die Einstellungen und Verknüpfungen auf dem Startbildschirm zu ändern" + "%1$s darf keine Telefonanrufe tätigen." "Problem beim Laden des Widgets" "Einrichten" "Dies ist eine Systemanwendung, die nicht deinstalliert werden kann." diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 81b43e2e9f..ba5562fe69 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Εργασία" "Η εφαρμογή δεν έχει εγκατασταθεί." @@ -46,6 +46,7 @@ "Επιτρέπει στην εφαρμογή την ανάγνωση των ρυθμίσεων και των συντομεύσεων στην Αρχική οθόνη." "εγγραφή ρυθμίσεων και συντομεύσεων αρχικής οθόνης" "Επιτρέπει στην εφαρμογή την αλλαγή των ρυθμίσεων και των συντομεύσεων στην Αρχική οθόνη." + "Η εφαρμογή %1$s δεν επιτρέπεται να πραγματοποιεί τηλεφωνικές κλήσεις" "Παρουσιάστηκε πρόβλημα στη φόρτωση του γραφικού στοιχείου" "Ρύθμιση" "Αυτή είναι μια εφαρμογή συστήματος και δεν είναι δυνατή η κατάργηση της εγκατάστασής της." diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index f2a6eab168..18cb59de12 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Work" "App isn\'t installed." @@ -46,6 +46,7 @@ "Allows the app to read the settings and shortcuts in Home." "write Home settings and shortcuts" "Allows the app to change the settings and shortcuts in Home." + "%1$s is not allowed to make phone calls" "Problem loading widget" "Setup" "This is a system app and can\'t be uninstalled." diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index f2a6eab168..18cb59de12 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Work" "App isn\'t installed." @@ -46,6 +46,7 @@ "Allows the app to read the settings and shortcuts in Home." "write Home settings and shortcuts" "Allows the app to change the settings and shortcuts in Home." + "%1$s is not allowed to make phone calls" "Problem loading widget" "Setup" "This is a system app and can\'t be uninstalled." diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index f2a6eab168..18cb59de12 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Work" "App isn\'t installed." @@ -46,6 +46,7 @@ "Allows the app to read the settings and shortcuts in Home." "write Home settings and shortcuts" "Allows the app to change the settings and shortcuts in Home." + "%1$s is not allowed to make phone calls" "Problem loading widget" "Setup" "This is a system app and can\'t be uninstalled." diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index c754493c86..93bc0c2d3b 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Trabajo" "No se instaló la aplicación." @@ -46,6 +46,7 @@ "Permite que la aplicación lea la configuración y los accesos directos de la pantalla principal." "escribir configuración y accesos directos de la pantalla principal" "Permite que la aplicación cambie la configuración y los accesos directos de la pantalla principal." + "%1$s no puede realizar llamadas telefónicas" "Problema al cargar el widget" "Configuración" "Esta es una aplicación del sistema y no se puede desinstalar." diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 16cd84fb2a..0487143ae0 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Trabajo" "La aplicación no está instalada." @@ -46,6 +46,7 @@ "Permite que la aplicación consulte los ajustes y los accesos directos de la pantalla de inicio." "escribir información de accesos directos y de ajustes de la pantalla de inicio" "Permite que las aplicaciones cambien los ajustes y los accesos directos de la pantalla de inicio." + "%1$s no puede hacer llamadas" "Problema al cargar el widget" "Configuración" "Esta aplicación es del sistema y no se puede desinstalar." diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 84ca45af48..a162d06592 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Töö" "Rakendus pole installitud." @@ -46,6 +46,7 @@ "Võimaldab rakendusel lugeda avaekraanil seadeid ja otseteid." "kirjuta avaekraani seaded ja otseteed" "Võimaldab rakendusel muuta avaekraanil seadeid ja otseteid." + "Rakendusel %1$s pole lubatud helistada" "Probleem vidina laadimisel" "Seadistamine" "See on süsteemirakendus ja seda ei saa desinstallida." diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml index 096a4f95e0..63a94cca3e 100644 --- a/res/values-eu-rES/strings.xml +++ b/res/values-eu-rES/strings.xml @@ -19,7 +19,7 @@ - "Abiarazlea3" + "Launcher3" "Lana" "Aplikazioa instalatu gabe dago." @@ -46,6 +46,7 @@ "Hasierako pantailako ezarpenak eta lasterbideak irakurtzea baimentzen die aplikazioei." "Idatzi hasierako ezarpenak eta lasterbideak" "Hasierako pantailako ezarpenak eta lasterbideak aldatzea baimentzen die aplikazioei." + "%1$s aplikazioak ez du telefono-deiak egiteko baimenik" "Arazo bat izan da widgeta kargatzean" "Konfigurazioa" "Sistema-aplikazioa da hau eta ezin da desinstalatu." diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 3b6d01ae6e..0aa9b7cde3 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "کاری" "برنامه نصب نشده است." @@ -46,6 +46,7 @@ "به برنامه اجازه می‌دهد تنظیمات و میان‌برها را در صفحه اصلی بخواند." "نوشتن تنظیمات و میان‌برهای صفحه اصلی" "به برنامه اجازه می‌دهد تنظیمات و میان‌برها را در صفحه اصلی تغییر دهد." + "%1$s مجاز نیست تماس تلفنی برقرار کند" "مشکل در بارگیری ابزارک" "تنظیم" "این برنامه سیستمی است و حذف نصب نمی‌شود." diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 7190b73a22..82e4b03bf0 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Työ" "Sovellusta ei ole asennettu." @@ -46,6 +46,7 @@ "Antaa sovelluksen lukea aloitusruudun asetukset ja pikakuvakkeet." "kirjoita aloitusruudun asetuksia ja pikakuvakkeita" "Antaa sovelluksen muuttaa aloitusruudun asetuksia ja pikakuvakkeita." + "%1$s ei saa soittaa puheluita." "Ongelma ladattaessa widgetiä" "Asetus" "Tämä on järjestelmäsovellus, eikä sitä voi poistaa." diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 91271f7e97..c3e3cb0c22 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -19,7 +19,7 @@ - "Lanceur3" + "Lanceur3" "Travail" "L\'application n\'est pas installée." @@ -46,6 +46,7 @@ "Permet à l\'application de lire les paramètres et les raccourcis de l\'écran d\'accueil." "enregistrer les paramètres de la page d\'accueil et des raccourcis" "Permet à l\'application de modifier les paramètres et les raccourcis de l\'écran d\'accueil." + "%1$s n\'est pas autorisée à faire des appels téléphoniques" "Problème lors du chargement du widget" "Configuration" "Impossible de désinstaller cette application, car il s\'agit d\'une application système." diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 84e1594b4b..573a0e0fa9 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Android Work" "L\'application n\'est pas installée." @@ -46,6 +46,7 @@ "Permettre à l\'application de lire les paramètres et les raccourcis de l\'écran d\'accueil" "modifier les paramètres et les raccourcis de l\'écran d\'accueil" "Permettre à l\'application de modifier les paramètres et les raccourcis de l\'écran d\'accueil" + "L\'application %1$s n\'est pas autorisée à passer des appels téléphoniques." "Problème lors du chargement du widget." "Configuration" "Impossible de désinstaller cette application, car il s\'agit d\'une application système." diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml index ccfe21ed1b..f57a49ce62 100644 --- a/res/values-gl-rES/strings.xml +++ b/res/values-gl-rES/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Traballo" "A aplicación non está instalada" @@ -46,6 +46,7 @@ "Permite a unha aplicación ler a configuración e os atallos da páxina de inicio." "modificar a configuración e os atallos da pantalla de inicio" "Permite a unha aplicación cambiar a configuración e os atallos da pantalla de inicio." + "%1$s non ten permiso para facer chamadas telefónicas" "Produciuse un problema ao cargar o widget" "Configuración" "Esta aplicación é do sistema e non se pode desinstalar." diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml index db056a0e8c..f2375adac5 100644 --- a/res/values-gu-rIN/strings.xml +++ b/res/values-gu-rIN/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "કાર્યાલય" "એપ્લિકેશન ઇન્સ્ટોલ થઈ નથી." @@ -46,6 +46,7 @@ "એપ્લિકેશનને હોમમાં સેટિંગ્સ અને શોર્ટકટ્સ વાંચવાની મંજૂરી આપે છે." "હોમ સેટિંગ્સ અને શોર્ટકટ્સ લખો" "એપ્લિકેશનને હોમમાં સેટિંગ્સ અને શોર્ટકટ્સ બદલવાની મંજૂરી આપે છે." + "%1$s ને ફોન કૉલ્સ કરવાની મંજૂરી નથી" "વિજેટ લોડ કરવામાં સમસ્યા" "સેટઅપ" "આ એક સિસ્ટમ એપ્લિકેશન છે અને અનઇન્સ્ટોલ કરી શકાતી નથી." diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 7cf4f33ef7..9ae75ab378 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "कार्यस्‍थल" "एप्‍लिकेशन इंस्‍टॉल नहीं है." @@ -46,6 +46,7 @@ "ऐप्लिकेशन को होम में सेटिंग और शॉर्टकट पढ़ने देती है." "होम सेटिंग और शॉर्टकट लिखें" "ऐप्लिकेशन को होम में सेटिंग और शॉर्टकट बदलने देती है." + "%1$s को फ़ोन कॉल करने की अनुमति नहीं है" "विजेट लोड करने में समस्‍या" "सेटअप" "यह एक सिस्टम ऐप्लिकेशन है और इसे अनइंस्टॉल नहीं किया जा सकता." diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 2679570dcf..6b78c7ef1c 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -19,7 +19,7 @@ - "Pokretač3" + "Launcher3" "Posao" "Aplikacija nije instalirana." @@ -46,6 +46,7 @@ "Aplikaciji omogućuje čitanje postavki i prečaca na početnom zaslonu." "pisanje postavki početnog zaslona i prečaca" "Aplikaciji omogućuje promjenu postavki i prečaca na početnom zaslonu." + "%1$s nema dopuštenje za telefonske pozive" "Problem pri učitavanju widgeta" "Postavljanje" "Ovo je aplikacija sustava i ne može se ukloniti." diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index cd328abd7a..506ac6e975 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Munka" "Az alkalmazás nincs telepítve." @@ -46,6 +46,7 @@ "Lehetővé teszi az alkalmazás számára, hogy beolvassa a kezdőképernyő beállításait és parancsikonjait." "Főoldal beállításainak és parancsikonjainak írása" "Lehetővé teszi az alkalmazás számára, hogy módosítsa a kezdőképernyő beállításait és parancsikonjait." + "A(z) %1$s nem kezdeményezhet telefonhívásokat" "Probléma történt a modul betöltésekor" "Beállítás" "Ez egy rendszeralkalmazás, és nem lehet eltávolítani." diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml index 49a9d18ab4..01b8e4d82d 100644 --- a/res/values-hy-rAM/strings.xml +++ b/res/values-hy-rAM/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Աշխատանքային" "Ծրագիրը տեղադրված չէ:" @@ -46,6 +46,7 @@ "Ծրագրին թույլ է տալիս կարդալ հիմնաէջի կարգավորումներն ու դյուրանցումները:" "ստեղծել հիմնաէջի կարգավորումներ ու դյուրանցումներ" "Ծրագրին թույլ է տալիս փոփոխել հիմնաէջի կարգավորումներն ու դյուրանցումները:" + "%1$s հավելվածին չի թույլատրվում հեռախոսազանգեր կատարել" "Վիջեթի բեռնման խնդիր կա" "Կարգավորում" "Սա համակարգային ծրագիր է և չի կարող ապատեղադրվել:" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 21c2080562..3c99ff13d7 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Kantor" "Aplikasi tidak dipasang." @@ -46,6 +46,7 @@ "Mengizinkan aplikasi membaca setelan dan pintasan di layar Utama." "menulis setelan dan pintasan layar Utama" "Mengizinkan aplikasi mengubah setelan dan pintasan di layar Utama." + "%1$s tidak diizinkan untuk melakukan panggilan telepon" "Masalah memuat widget" "Siapkan" "Ini adalah aplikasi sistem dan tidak dapat dicopot pemasangannya." diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml index 7422eaf582..d8404c4563 100644 --- a/res/values-is-rIS/strings.xml +++ b/res/values-is-rIS/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Vinna" "Forritið er ekki uppsett." @@ -46,6 +46,7 @@ "Leyfir forriti að lesa stillingar og flýtileiðir heimaskjás." "skrifa stillingar og flýtileiðir heimaskjás" "Leyfir forriti að breyta stillingum og flýtileiðum heimaskjás." + "%1$s hefur ekki leyfi til að hringja símtöl" "Vandamál við að hlaða græju" "Uppsetning" "Þetta er kerfisforrit sem ekki er hægt að fjarlægja." diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index e1e75b37f6..3b7a9576cf 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Lavoro" "App non installata." @@ -46,6 +46,7 @@ "Consente all\'app di leggere le impostazioni e le scorciatoie in Home." "creazione di impostazioni e scorciatoie in Home" "Consente all\'app di modificare le impostazioni e le scorciatoie in Home." + "L\'app %1$s non è autorizzata a effettuare telefonate" "Errore durante il caricamento del widget" "Configurazione" "Questa è un\'app di sistema e non può essere disinstallata." diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 3686abdbb9..333da358fa 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "עבודה" "האפליקציה לא מותקנת." @@ -46,6 +46,7 @@ "מאפשר לאפליקציה לקרוא את ההגדרות וקיצורי הדרך בדף הבית." "כתוב הגדרות וקיצורי דרך של דף הבית" "מאפשר לאפליקציה לשנות את ההגדרות וקיצורי הדרך בדף הבית." + "%1$s אינו רשאי להתקשר" "בעיה בטעינת ווידג\'ט" "הגדר" "זוהי אפליקציית מערכת ולא ניתן להסיר את התקנתה." diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 87b3fa4992..43411e8d02 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "仕事用" "このアプリはインストールされていません。" @@ -46,6 +46,7 @@ "ホームの設定とショートカットの読み取りをアプリに許可します。" "ホームの設定とショートカットの書き込み" "ホームの設定とショートカットの変更をアプリに許可します。" + "「%1$s」から電話をかけることはできません" "ウィジェットを表示できません" "セットアップ" "このシステムアプリはアンインストールできません。" diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index 290033088e..1280a54b71 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "სამუშაო" "აპი არ არის დაყენებული." @@ -46,6 +46,7 @@ "აპისთვის მთავარი ეკრანის პარამეტრებისა და მალსახმობების წაკითხვის უფლების მიცემა." "მთავარი ეკრანის პარამეტრებისა და მალსახმობების ჩაწერა" "აპისთვის მთავარი ეკრანის პარამეტრებისა და მალსახმობების შეცვლის უფლების მიცემა." + "%1$s-ს არ აქვს სატელეფონო ზარების განხორციელების უფლება" "პრობლემა ვიჯეტის ჩატვირთვისას" "დაყენება" "ეს სისტემური აპია და მისი წაშლა შეუძლებელია." diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml index cae5e5edf9..c6ab0e3999 100644 --- a/res/values-kk-rKZ/strings.xml +++ b/res/values-kk-rKZ/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Жұмыс" "Қолданба орнатылмаған." @@ -46,6 +46,7 @@ "Қолданбаға Негізгі экрандағы параметрлер мен төте пернелерді оқу мүмкіндігін береді." "Негізгі экран параметрлері мен төте пернелерін жазу" "Қолданбаға Негізгі экрандағы параметрлер мен төте пернелерді өзгерту мүмкіндігін береді." + "%1$s арқылы телефон қоңырауларын соғуға рұқсат етілмеген" "Виджетті жүктеу барысында мәселе орын алды" "Орнату" "Бұл жүйе қолданбасы, сондықтан оны алу мүмкін емес." diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml index 5ffbf76160..6f4feebebe 100644 --- a/res/values-km-rKH/strings.xml +++ b/res/values-km-rKH/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "ការងារ" "មិន​បាន​ដំឡើង​កម្មវិធី។" @@ -46,6 +46,7 @@ "អនុញ្ញាត​ឲ្យ​កម្មវិធី​អាន​ការ​កំណត់ និង​ផ្លូវកាត់​ក្នុង​អេក្រង់​ដើម។" "សរសេរ​ការ​កំណត់ ​និង​ផ្លូវកាត់​​លើ​អេក្រង់​ដើម" "អនុញ្ញាត​ឲ្យ​កម្មវិធី​ប្ដូរ​ការ​កំណត់ និង​ផ្លូវ​កាត់​ក្នុង​អេក្រង់​ដើម។" + "%1$s មិនត្រូវបានអនុញ្ញាតឲ្យធ្វើការហៅទូរស័ព្ទទេ" "បញ្ហា​ក្នុង​ការ​ផ្ទុក​ធាតុ​​ក្រាហ្វិក" "រៀបចំ" "នេះ​​​ជា​កម្មវិធី​ប្រព័ន្ធ មិន​អាច​លុប​បាន​ទេ។" diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml index a1aab7b5cc..14cfe55688 100644 --- a/res/values-kn-rIN/strings.xml +++ b/res/values-kn-rIN/strings.xml @@ -19,7 +19,7 @@ - "ಲಾಂಚರ್3" + "Launcher3" "ಕೆಲಸ" "ಅಪ್ಲಿಕೇಶನ್‌ ಅನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ" @@ -46,6 +46,7 @@ "ಮುಖಪುಟದಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಮತ್ತು ಶಾರ್ಟ್‌ಕಟ್‌ಗಳನ್ನು ಓದಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿ ನೀಡುತ್ತದೆ." "ಮುಖಪುಟದ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಮತ್ತು ಶಾರ್ಟ್‌ಕಟ್‌ಗಳನ್ನು ಬರೆಯಿರಿ" "ಮುಖಪುಟದಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಮತ್ತು ಶಾರ್ಟ್‌ಕಟ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿ ನೀಡುತ್ತದೆ." + "ಫೋನ್ ಕರೆಗಳನ್ನು ಮಾಡಲು %1$s ಅಪ್ಲಿಕೇಶನ್‌‌ಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ" "ವಿಜೆಟ್ ಲೋಡ್‌ ಮಾಡುವಲ್ಲಿ ಸಮಸ್ಯೆ" "ಸೆಟಪ್" "ಇದೊಂದು ಅಪ್ಲಿಕೇಶನ್ ಆಗಿದೆ ಮತ್ತು ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ." diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index e0697121a0..2eb75f9307 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "업무" "앱이 설치되지 않았습니다." @@ -46,6 +46,7 @@ "앱이 홈에 있는 설정 및 바로가기를 읽을 수 있도록 합니다." "홈 설정 및 바로가기 쓰기" "앱이 홈에 있는 설정 및 바로가기를 변경할 수 있도록 합니다." + "%1$s에서 전화를 걸 수 없습니다." "위젯을 로드하는 중 문제가 발생했습니다." "설정" "시스템 앱은 제거할 수 없습니다." diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml index c530b5c9fc..799a69e6d6 100644 --- a/res/values-ky-rKG/strings.xml +++ b/res/values-ky-rKG/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Жумуш" "Колдонмо орнотулган эмес." @@ -46,6 +46,7 @@ "Колдонмого Үйдүн тууралоолорун жана тез чакырмаларын окууга уруксат берет." "Үйдүн тууралоолорун жана тез чакырмаларын жазуу" "Колдонмого Үйдүн тууралоолорун жана тез чакырмаларын өзгөртүүгө уруксат берет." + "%1$s телефон чалууларды аткарууга уруксаты жок" "Виджетти жүктөөдө маселе бар" "Орнотуу" "Бул системдик колдонмо жана аны чечкенге болбойт." diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml index 005f0265fc..4ae46abd66 100644 --- a/res/values-lo-rLA/strings.xml +++ b/res/values-lo-rLA/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "ວຽກ" "ແອັບຯບໍ່ໄດ້ຖືກຕິດຕັ້ງ." @@ -46,6 +46,7 @@ "ອະນຸຍາດໃຫ້ແອັບຯດັ່ງກ່າວອ່ານການຕັ້ງຄ່າ ແລະທາງລັດໃນໜ້າຫຼັກ." "ຂຽນການຕັ້ງຄ່າໜ້າຫຼັກ ແລະທາງລັດ" "ອະນຸຍາດໃຫ້ແອັບຯດັ່ງກ່າວ ປ່ຽນການຕັ້ງຄ່າ ແລະທາງລັດໃນໜ້າຫຼັກ." + "%1$s ບໍ່​ໄດ້​ຮັບ​ອະ​ນຸ​ຍາດ​ໃຫ້​ໂທ" "ມີບັນຫາໃນການໂຫລດວິດເຈັດ" "ຕິດຕັ້ງ" "ນີ້ແມ່ນແອັບຯຂອງລະບົບ ແລະບໍ່ສາມາດຖອນການຕິດຕັ້ງອອກໄດ້." diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 1cc543cb75..741ef1286d 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Darbas" "Programa neįdiegta." @@ -46,6 +46,7 @@ "Programai leidžiama skaityti pagrindinio puslapio nustatymus ir sparčiuosius klavišus." "rašyti pagrindinio puslapio nustatymus ir sparčiuosius klavišus" "Programai leidžiama keisti pagrindinio puslapio nustatymus ir sparčiuosius klavišus." + "„%1$s“ neleidžiama skambinti" "Problema įkeliant valdiklį" "Sąranka" "Tai sistemos programa ir jos negalima pašalinti." diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 1bef22e039..1cea5194f5 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Darbs" "Lietotne nav instalēta." @@ -46,6 +46,7 @@ "Ļauj lietotnei lasīt iestatījumus un saīsnes sākuma ekrānā." "rakstīt sākuma ekrāna iestatījumus un saīsnes" "Ļauj lietotnei mainīt iestatījumus un saīsnes sākuma ekrānā." + "Lietotnei %1$s nav atļauts veikt tālruņa zvanus." "Ielādējot logrīku, radās problēma." "Notiek iestatīšana" "Šī ir sistēmas lietotne, un to nevar atinstalēt." diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml index 0a6704b50c..e84a5cbcaa 100644 --- a/res/values-mk-rMK/strings.xml +++ b/res/values-mk-rMK/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Стартер3" "Работа" "Апликацијата не е инсталирана." @@ -46,6 +46,7 @@ "Овозможува апликацијата да ги менува подесувањата и кратенките на почетната страница." "напиши подесувања и кратенки на почетна страница" "Овозможува апликацијата да ги менува подесувањата и кратенките на почетната страница." + "%1$s нема дозвола за телефонски повици" "Проблем при вчитувањето на виџетот" "Поставување" "Ова е системска апликација и не може да се деинсталира." diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml index 2bd80d3584..e82aa36742 100644 --- a/res/values-ml-rIN/strings.xml +++ b/res/values-ml-rIN/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "ലോഞ്ചർ3" "ഔദ്യോഗികം" "അപ്ലിക്കേഷൻ ഇൻസ്‌റ്റാളുചെ‌യ്‌തിട്ടില്ല." @@ -46,6 +46,7 @@ "ഹോമിലെ ക്രമീകരണങ്ങളും കുറുക്കുവഴികളും റീഡുചെയ്യാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു." "ഹോം ക്രമീകരണങ്ങളും കുറുക്കുവഴികളും റൈറ്റുചെയ്യുക" "ഹോമിലെ ക്രമീകരണങ്ങളും കുറുക്കുവഴികളും മാറ്റാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു." + "ഫോൺ കോൾ ചെയ്യാൻ %1$s എന്നതിനെ അനുവദിച്ചിട്ടില്ല" "വിജറ്റ് ലോഡുചെയ്യുന്നതിൽ പ്രശ്നമുണ്ട്" "സജ്ജീകരിക്കുക" "ഇതൊരു സിസ്‌റ്റം അപ്ലിക്കേഷനായതിനാൽ അൺഇൻസ്‌റ്റാളുചെയ്യാനാവില്ല." diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml index 19ba66fdb3..bdf9123748 100644 --- a/res/values-mn-rMN/strings.xml +++ b/res/values-mn-rMN/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Ажил" "Апп суугаагүй байна." @@ -46,6 +46,7 @@ "Апп нь Нүүрэндэх товчлол болон тохиргоог уншиж чадна." "Нүүрний тохиргоо болон товчлолыг бичих" "Апп нь Нүүрэндэх товчлол болон тохиргоог өөрчилж чадна." + "%1$s утасны дуудлага хийх боломжгүй" "Виджет ачаалахад асуудал гарав" "Тохируулга" "Энэ апп нь системийн апп ба устгах боломжгүй." diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml index dc29b54628..820e8e8fdd 100644 --- a/res/values-mr-rIN/strings.xml +++ b/res/values-mr-rIN/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "कार्य" "अॅप स्थापित केलेला नाही." @@ -46,6 +46,7 @@ "मुख्यपृष्ठातील सेटिंग्ज आणि शॉर्टकट वाचण्यास अॅप ला अनुमती देते." "मुख्यपृष्ठ सेटिंग्ज आणि शॉर्टकट लिहा" "मुख्यपृष्ठातील सेटिंग्ज आणि शॉर्टकट बदलण्यास अॅप ला अनुमती देते." + "%1$s ला फोन कॉल करण्याची अनुमती नाही" "विजेट लोड करण्यात समस्या" "सेटअप" "हा सिस्टम अॅप आहे आणि विस्थापित केला जाऊ शकत नाही." diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index 26f27488c6..aebc5bf284 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Kerja" "Apl tidak dipasang." @@ -46,6 +46,7 @@ "Membenarkan apl membaca tetapan dan pintasan di Laman Utama." "tulis tetapan dan pintasan Laman Utama" "Membenarkan apl menukar tetapan dan pintasan di Laman Utama." + "%1$s tidak dibenarkan membuat panggilan telefon" "Masalah memuatkan widget" "Persediaan" "Ini ialah apl sistem dan tidak boleh dinyahpasang." diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml index c13ff7e0d9..e12b84ac10 100644 --- a/res/values-my-rMM/strings.xml +++ b/res/values-my-rMM/strings.xml @@ -19,7 +19,7 @@ - "Launcher၃" + "ဖွင့်တင်စက်၃" "အလုပ်" "အပ်ပလီကေးရှင်း မထည့်သွင်းထားပါ" @@ -46,6 +46,7 @@ "ပင်မမျက်နှာစာတွင်ရှိသော အပြင်အဆင်နှင့် အတိုကောက်မှတ်သားမှုများကို အပ်ပလီကေးရှင်းအား ဖတ်ခွင့်ပြုခြင်း" "ပင်မမျက်နှာစာ အပြင်အဆင် နှင့် အတိုကောက်မှတ်သားမှုများအား ရေးသားခြင်း" "ပင်မမျက်နှာစာတွင် ရှိသော အပြင်အဆင် နှင့် အတိုကောက်မှတ်သားမှုများ ကို အပ်ပလီကေးရှင်းအား ပြောင်းခွင့်ပြုခြင်း" + "%1$sသည် ဖုန်းခေါ်ဆိုခွင့် မရှိပါ" "ဝဒ်ဂျက် တင်ရာတွင် ပြသနာ ရှိပါသည်" "စဖွင့်သတ်မှတ်ရန်" "ဤအပ်ပလီကေးရှင်းမှာ စစ်စတန်ပိုင်းဆိုင်ရာ အပ်ပလီကေးရှင်းဖြစ်ပါသည်။ ထုတ်ပစ်၍ မရပါ" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 198d56c213..81aabd80ec 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Jobb" "Appen er ikke installert." @@ -46,6 +46,7 @@ "Lar appen lese innstillingene og snarveiene på startsiden." "angi startsideinnstillinger og -snarveier" "Lar appen endre innstillingene og snarveiene på startsiden." + "%1$s har ikke tillatelse til å ringe" "Problem ved innlasting av modul" "Konfigurering" "Dette er en systemapp som ikke kan avinstalleres." diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml index 057dfb8b5b..847350a7b3 100644 --- a/res/values-ne-rNP/strings.xml +++ b/res/values-ne-rNP/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "कार्य" "अनुप्रयोग स्थापित छैन।" @@ -46,6 +46,7 @@ "गृहमा एउटा अनुप्रयोगलाई सेटिङहरू र सर्टकटहरू पढ्न अनुमति दिनुहोस्।" "गृह सेटिङहरू र सर्टकटहरू लेख्नुहोस्" "गृहमा एउटा अनुप्रयोगलाई सेटिङ र सर्टकट बदल्न अनुमति दिनुहोस्।" + "%1$s ले फोन कलहरू गर्न अनुमति छैन" "समस्या लोडिङ गर्ने विजेट" "सेटअप" "यो प्रणाली अनुप्रयोग हो र यसलाई स्थापना रद्द गर्न सकिँदैन।" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 5ab1112a17..edb012bede 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Werk" "App is niet geïnstalleerd." @@ -46,6 +46,7 @@ "De app toestaan de instellingen en snelkoppelingen op de startpagina te lezen." "instellingen en snelkoppelingen op de startpagina schrijven" "De app toestaan de instellingen en snelkoppelingen op de startpagina te wijzigen." + "%1$s mag niet bellen" "Probleem bij het laden van widget" "Configuratie" "Dit is een systeemapp die niet kan worden verwijderd." diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml index 30c44280e0..7352248467 100644 --- a/res/values-pa-rIN/strings.xml +++ b/res/values-pa-rIN/strings.xml @@ -19,7 +19,7 @@ - "ਲਾਂਚਰ3" + "Launcher3" "ਦਫ਼ਤਰ" "ਐਪ ਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਹੋਇਆ ਹੈ।" @@ -46,6 +46,7 @@ "ਐਪ ਨੂੰ ਹੋਮ ਵਿੱਚ ਸੈਟਿੰਗਾਂ ਅਤੇ ਸ਼ੌਰਟਕਟ ਪੜ੍ਹਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।" "ਹੋਮ ਸੈਟਿੰਗਾਂ ਅਤੇ ਸ਼ੌਰਟਕਟ ਲਿਖੋ" "ਐਪ ਨੂੰ ਹੋਮ ਵਿੱਚ ਸੈਟਿੰਗਾਂ ਅਤੇ ਸ਼ੌਰਟਕਟ ਬਦਲਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।" + "%1$s ਨੂੰ ਫੋਨ ਕਾਲਾਂ ਕਰਨ ਦੀ ਆਗਿਆ ਨਹੀਂ ਹੈ" "ਵਿਜੇਟ ਲੋਡ ਕਰਨ ਵਿੱਚ ਸਮੱਸਿਆ" "ਸੈਟਅਪ" "ਇਹ ਇੱਕ ਸਿਸਟਮ ਐਪ ਹੈ ਅਤੇ ਇਸਨੂੰ ਅਣਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index a1fd29f56b..26f86cf806 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Praca" "Aplikacja nie jest zainstalowana." @@ -46,6 +46,7 @@ "Pozwala aplikacji na odczytywanie ustawień i skrótów na ekranie głównym." "zapisywanie ustawień i skrótów na ekranie głównym" "Umożliwia aplikacji zmianę ustawień i skrótów na ekranie głównym." + "%1$s nie może wykonywać połączeń telefonicznych" "Problem podczas ładowania widżetu" "Konfiguracja" "To aplikacja systemowa i nie można jej odinstalować." diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 0d8a431799..ed6c56c0fd 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -19,7 +19,7 @@ - "Iniciador3" + "Launcher3" "Trabalho" "A aplicação não está instalada." @@ -46,6 +46,7 @@ "Permite à aplicação ler as definições e os atalhos no Ecrã Principal." "escrever definições e atalhos do Ecrã principal" "Permite à aplicação alterar as definições e os atalhos no Ecrã Principal." + "O %1$s não tem autorização para efetuar chamadas telefónicas" "Problema ao carregar o widget" "Configuração" "É uma aplicação de sistema e não pode ser desinstalada." diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 41e5c021e9..50da2e8ed7 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Tela de início 3" "Trabalho" "O app não está instalado." @@ -46,6 +46,7 @@ "Permite que o app leia as configurações e os atalhos na tela inicial." "gravar configurações e atalhos da tela inicial" "Permite que o app altere as configurações e os atalhos na tela inicial." + "%1$s não tem permissão para fazer chamadas" "Problema ao carregar o widget" "Configuração" "Este é um app do sistema e não pode ser desinstalado." diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index ffaca78569..844376983c 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Work" "Aplicația nu este instalată." @@ -46,6 +46,7 @@ "Permite aplicației să citească setările și comenzile rapide din ecranul de pornire." "scrie setări și comenzi rapide pentru ecranul de pornire" "Permite aplicației să modifice setările și comenzile rapide din ecranul de pornire." + "%1$s nu are permisiunea de a apela" "Problemă la încărcarea widgetului" "Configurați" "Aceasta este o aplicație de sistem și nu poate fi dezinstalată." diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index d1be82b4f3..d2c778641a 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Работа" "Приложение удалено" @@ -46,6 +46,7 @@ "Приложение получит доступ к данным о настройках и ярлыках на главном экране." "Изменение настроек и ярлыков главного экрана" "Приложение сможет изменять настройки и ярлыки на главном экране." + "Приложение %1$s не может делать телефонные звонки" "Не удалось загрузить виджет" "Настройка" "Это системное приложение, его нельзя удалить." diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml index 476fff8167..29e06d2d29 100644 --- a/res/values-si-rLK/strings.xml +++ b/res/values-si-rLK/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "කාර්යාලය" "යෙදුම ස්ථාපනය කර නැත." @@ -46,6 +46,7 @@ "මුල් පිටුවේ ඇති සැකසීම් සහ කෙටිමං කියවීමට යෙදුමකට අවසර දෙයි." "මුල් පිටු සැකසීම් සහ කෙටිමං ලියන්න" "මුල් පිටුවේ සැකසීම් සහ කෙටිමං ඉවත් කිරීමට යෙදුමට අවසර දෙයි." + "%1$s හට දුරකථන ඇමතුම් සිදු කිරීමට ඉඩ නොදේ" "ගැටලු පූරණ විජට් එක" "ස්ථාපනය කරන්න" "මෙය පද්ධති යෙදුමක් වන අතර අස්ථාපනය කළ නොහැක." diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 703b46cb44..2e8071601e 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Pracovné" "Aplikácia nie je nainštalovaná." @@ -46,6 +46,7 @@ "Povoľuje aplikácii čítať nastavenia a odkazy na ploche." "zápis nastavení a odkazov plochy" "Povoľuje aplikácii zmeniť nastavenia a odkazy na ploche." + "Aplikácia %1$s nemá povolenie uskutočňovať telefonické hovory" "Problém s načítaním miniaplikácií" "Nastavenie" "Toto je systémová aplikácia a nedá sa odinštalovať." diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 25a01fab18..3d090e7b5b 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -19,7 +19,7 @@ - "Zaganjalnik3" + "Launcher3" "Služba" "Aplikacija ni nameščena." @@ -46,6 +46,7 @@ "Aplikaciji dovoli branje nastavitev in bližnjic na začetnem zaslonu." "zapis nastavitev in bližnjic na začetnem zaslonu" "Aplikaciji dovoli spreminjanje nastavitev in bližnjic na začetnem zaslonu." + "Aplikaciji %1$s ni dovoljeno opravljanje klicev" "Težava pri nalaganju pripomočka" "Nastavitev" "To je sistemska aplikacija in je ni mogoče odstraniti." diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml index 2b535a3a5f..b8430c6c45 100644 --- a/res/values-sq-rAL/strings.xml +++ b/res/values-sq-rAL/strings.xml @@ -19,7 +19,7 @@ - "Nisësi3" + "Nisësi3" "Puna" "Aplikacioni nuk është i instaluar." @@ -46,6 +46,7 @@ "Lejon aplikacionin të lexojë cilësimet dhe shkurtoret në ekranin bazë." "shkruaj cilësimet dhe shkurtoret e ekranit bazë" "Lejon aplikacionin të ndryshojë cilësimet dhe shkurtoret në ekranin bazë." + "%1$s nuk lejohet të kryejë telefonata" "Problem në ngarkimin e miniaplikacionit" "Konfiguro" "Ky është aplikacion sistemi dhe nuk mund të çinstalohet." diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index f21aae0198..55d848f7eb 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Work" "Апликација није инсталирана." @@ -46,6 +46,7 @@ "Дозвољава апликацији да чита подешавања и пречице на почетном екрану." "уписивање подешавања и пречица на почетном екрану" "Дозвољава апликацији да мења подешавања и пречице на почетном екрану." + "%1$s нема дозволу за упућивање телефонских позива" "Проблем при учитавању виџета" "Подешавање" "Ово је системска апликација и не може да се деинсталира." diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 385d7a6f64..fb49f32c28 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Arbete" "Appen är inte installerad." @@ -46,6 +46,7 @@ "Tillåter att appen läser inställningar och genvägar på startsidan." "skriva inställningar och genvägar för startsidan" "Tillåter att appen ändrar inställningar och genvägar på startsidan." + "%1$s har inte behörighet att ringa samtal" "Det gick inte att läsa in widgeten" "Konfiguration" "Det här är en systemapp som inte kan avinstalleras." diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 175f107f35..1e6c80a21e 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -19,7 +19,7 @@ - "Kizindua3" + "Launcher3" "Kazini" "Programu haijasakinishwa." @@ -46,6 +46,7 @@ "Huruhusu programu kusoma mipangilio na njia za mikato zilizo katika skirini ya Mwanzo." "andika mipangilio ya skrini ya Mwanzo na njia za mkato" "Huruhusu programu kubadilisha mipangilio na njia za mkato katika skrini ya Mwanzo." + "%1$s hairuhusiwi kupiga simu" "Tatizo la kupakia wijeti" "Sanidi" "Hii ni programu ya mfumo na haiwezi kuondolewa." diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml index 9dac6d011a..180c2e986a 100644 --- a/res/values-ta-rIN/strings.xml +++ b/res/values-ta-rIN/strings.xml @@ -19,7 +19,7 @@ - "லாஞ்சர்3" + "Launcher3" "பணியிடம்" "பயன்பாடு நிறுவப்படவில்லை." @@ -46,6 +46,7 @@ "முகப்பில் உள்ள அமைப்பு மற்றும் குறுக்குவழிகளைப் படிக்க பயன்பாட்டை அனுமதிக்கிறது." "முகப்பின் அமைப்பு மற்றும் குறுக்குவழிகளை எழுதுதல்" "முகப்பில் உள்ள அமைப்பு மற்றும் குறுக்குவழிகளை மாற்ற பயன்பாட்டை அனுமதிக்கிறது." + "ஃபோன் அழைப்புகள் செய்ய, %1$s அனுமதிக்கப்படவில்லை" "விட்ஜெட்டை ஏற்றுவதில் சிக்கல்" "அமைவு" "இது அமைப்பு பயன்பாடு என்பதால் நிறுவல் நீக்கம் செய்ய முடியாது." diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml index 32cb292a1a..b3f6ec0b5d 100644 --- a/res/values-te-rIN/strings.xml +++ b/res/values-te-rIN/strings.xml @@ -19,7 +19,7 @@ - "లాంచర్3" + "Launcher3" "కార్యాలయం" "అనువర్తనం ఇన్‌స్టాల్ చేయబడలేదు." @@ -46,6 +46,7 @@ "హోమ్‌లో సెట్టింగ్‌లు మరియు సత్వరమార్గాలను చదవడానికి అనువర్తనాన్ని అనుమతిస్తుంది." "హోమ్ సెట్టింగ్‌లు మరియు సత్వరమార్గాలను వ్రాయడం" "హోమ్‌లో సెట్టింగ్‌లు మరియు సత్వరమార్గాలను మార్చడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "ఫోన్ కాల్‌లను చేసేందుకు %1$sకి అనుమతి లేదు" "విడ్జెట్‌ను లోడ్ చేయడంలో సమస్య" "సెటప్ చేయి" "ఇది సిస్టమ్ అనువర్తనం మరియు దీన్ని అన్‌ఇన్‌స్టాల్ చేయడం సాధ్యపడదు." diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 53ae5896b1..0c7d6aa517 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "งาน" "ไม่ได้ติดตั้งแอป" @@ -46,6 +46,7 @@ "อนุญาตให้แอปอ่านการตั้งค่าและทางลัดในหน้าแรก" "เขียนการตั้งค่าและทางลัดหน้าแรกแล้ว" "อนุญาตให้แอปเปลี่ยนการตั้งค่าและทางลัดในหน้าแรก" + "%1$s ไม่ได้รับอนุญาตให้โทรออก" "มีปัญหาขณะโหลดวิดเจ็ต" "ตั้งค่า" "นี่เป็นแอประบบและไม่สามารถถอนการติดตั้งได้" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 43afeab530..4b5115b5b3 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Trabaho" "Hindi naka-install ang app." @@ -46,6 +46,7 @@ "Pinapayagan ang app na basahin ang mga setting at shortcut sa Home." "magsulat ng mga setting at shortcut ng Home" "Pinapayagan ang app na baguhin ang mga setting at shortcut sa Home." + "Hindi pinahihintulutang tumawag ang %1$s" "Problema sa pag-load ng widget" "I-setup" "Isa itong app ng system at hindi maaaring i-uninstall." diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 064d0496a0..1f4706717e 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "İş" "Uygulama yüklü değil." @@ -46,6 +46,7 @@ "Uygulamaya, Ana ekrandaki ayarları ve kısayolları okuma izni verir." "Ana ekran ayarlarını ve kısayollarını yaz" "Uygulamaya, Ana ekrandaki ayarları ve kısayolları değiştirme izni verir." + "%1$s uygulamasının telefon etmesine izin verilmiyor" "Widget yüklenirken sorun oluştu" "Kurulum" "Bu bir sistem uygulamasıdır ve yüklemesi kaldırılamaz." diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index ff9364e5f4..1015ebdea2 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Робоча папка" "Додаток видалено." @@ -46,6 +46,7 @@ "Дозволяє програмі читати налаштування та ярлики на головному екрані." "записувати налаштування та ярлики головного екрана" "Дозволяє програмі змінювати налаштування та ярлики на головному екрані." + "Додаток %1$s не має дозволу телефонувати" "Проблема із завантаженням віджета" "Налаштування" "Це системна програма, її неможливо видалити." diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml index f3d631173c..1560b8a1ba 100644 --- a/res/values-ur-rPK/strings.xml +++ b/res/values-ur-rPK/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "دفتری" "ایپ انسٹال نہیں ہے۔" @@ -46,6 +46,7 @@ "ایپ کو ہوم میں ترتیبات اور شارٹ کٹس کو پڑھنے کی اجازت دیتا ہے۔" "ہوم ترتیبات اور شارٹ کٹس کو لکھیں" "ایپ کو ہوم میں ترتیبات اور شارٹ کٹس کو تبدیل کرنے کی اجازت دیتا ہے۔" + "%1$s کو فون کالیں کرنے کی اجازت نہیں ہے" "ویجیٹ کو لوڈ کرنے میں مسئلہ" "ترتیب دیں" "یہ ایک سسٹم ایپ ہے اور اسے اَن انسٹال نہیں کیا جا سکتا ہے۔" diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml index 98786f5129..58d8eb59d3 100644 --- a/res/values-uz-rUZ/strings.xml +++ b/res/values-uz-rUZ/strings.xml @@ -19,7 +19,7 @@ - "Ishga tushirgich3" + "Launcher3" "Ishga oid" "Ilova o‘rnatilmadi." @@ -46,6 +46,7 @@ "Ilovaga \"Uy\" ekranidagi yorliqlar va sozlamalarni o‘qish uchun ruxsat beradi." "Uy sozlamalari va yorliqlarini yozish" "Ilovaga \"Uy\" ekranidagi yorliqlar va sozlamalrni o‘zgartirish uchun ruxsat beradi." + "%1$s ilovasiga qo‘ng‘iroqlarni amalga oshirishga ruxsat berilmagan" "Vidjetni yuklashda muammo" "Sozlash" "Bu tizim ilovasi, shuning uchun o‘chirib bo‘lmaydi." diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 6eff50760f..b1851d51a9 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Trình chạy 3" "Work" "Ứng dụng chưa được cài đặt." @@ -46,6 +46,7 @@ "Cho phép ứng dụng đọc cài đặt và lối tắt trên Màn hình chính." "ghi cài đặt và lối tắt trên Màn hình chính" "Cho phép ứng dụng thay đổi cài đặt và lối tắt trên Màn hình chính." + "%1$s không được phép thực hiện cuộc gọi điện thoại" "Sự cố khi tải tiện ích con" "Thiết lập" "Đây là ứng dụng hệ thống và không thể gỡ cài đặt." diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 77f07c9559..8ac167d71d 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Work" "未安装该应用。" @@ -46,6 +46,7 @@ "允许应用读取主屏幕中的设置和快捷方式。" "写入主屏幕设置和快捷方式" "允许应用更改主屏幕中的设置和快捷方式。" + "不允许使用%1$s拨打电话" "加载小部件时出现问题" "设置" "这是系统应用,无法卸载。" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 62032ecaa5..ec8388f9fe 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "工作" "尚未安裝應用程式。" @@ -46,6 +46,7 @@ "允許應用程式讀取主畫面中的設定和捷徑。" "寫入主畫面的設定和捷徑" "允許應用程式更改主畫面中的設定和捷徑。" + "不允許 %1$s 撥打電話" "載入小工具時發生問題" "設定" "這是系統應用程式,無法將其解除安裝。" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 0b3f4d6bc5..de06342033 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "公司" "應用程式未安裝。" @@ -46,6 +46,7 @@ "允許應用程式讀取主螢幕中的設定和捷徑。" "寫入主螢幕設定和捷徑" "允許應用程式變更主螢幕中的設定和捷徑。" + "%1$s 無法撥打電話" "載入小工具時發生問題" "設定" "這是系統應用程式,不可解除安裝。" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index bb49f1f0ad..854ace1921 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -19,7 +19,7 @@ - "Isiqalisi3" + "Isiqalisi3" "Umsebenzi" "Uhlelo lokusebenza alufakiwe." @@ -46,6 +46,7 @@ "Ivumela uhlelo lokusebenza ukuthi lifunde izilungiselelo nezinqamuleli ekhaya." "bhala izilungiselelo zokuthi Ikhaya nezinqamuleli" "Ivumela uhlelo lokusebenza ukuthi lushintshe izilungiselelo nezinqamuleli Ekhaya." + "%1$s ayivunyelwe ukwenza amakholi wefoni" "Inkinga yokulayisha iwijethi" "Ukumisa" "Lolu uhlelo lokusebenza lwesistimu futhi alikwazi ukukhishwa." From 8c23c2d2ba4b7067afca5a28df2709450d29c5bf Mon Sep 17 00:00:00 2001 From: Geoff Mendal Date: Mon, 19 Oct 2015 08:50:56 -0700 Subject: [PATCH 078/219] Import translations. DO NOT MERGE Change-Id: If930ef94a3abe3e27123d1fe3553b0a3a453ffec Auto-generated-cl: translation import --- res/values-af/strings.xml | 3 ++- res/values-am/strings.xml | 3 ++- res/values-ar/strings.xml | 3 ++- res/values-bg/strings.xml | 3 ++- res/values-bn-rBD/strings.xml | 3 ++- res/values-ca/strings.xml | 3 ++- res/values-cs/strings.xml | 3 ++- res/values-da/strings.xml | 3 ++- res/values-de/strings.xml | 3 ++- res/values-el/strings.xml | 3 ++- res/values-en-rAU/strings.xml | 3 ++- res/values-en-rGB/strings.xml | 3 ++- res/values-en-rIN/strings.xml | 3 ++- res/values-es-rUS/strings.xml | 3 ++- res/values-es/strings.xml | 3 ++- res/values-et-rEE/strings.xml | 3 ++- res/values-eu-rES/strings.xml | 3 ++- res/values-fa/strings.xml | 3 ++- res/values-fi/strings.xml | 3 ++- res/values-fr-rCA/strings.xml | 3 ++- res/values-fr/strings.xml | 3 ++- res/values-gl-rES/strings.xml | 3 ++- res/values-hi/strings.xml | 3 ++- res/values-hr/strings.xml | 3 ++- res/values-hu/strings.xml | 3 ++- res/values-hy-rAM/strings.xml | 3 ++- res/values-in/strings.xml | 3 ++- res/values-is-rIS/strings.xml | 3 ++- res/values-it/strings.xml | 3 ++- res/values-iw/strings.xml | 3 ++- res/values-ja/strings.xml | 3 ++- res/values-ka-rGE/strings.xml | 3 ++- res/values-kk-rKZ/strings.xml | 3 ++- res/values-km-rKH/strings.xml | 3 ++- res/values-kn-rIN/strings.xml | 3 ++- res/values-ko/strings.xml | 3 ++- res/values-ky-rKG/strings.xml | 3 ++- res/values-lo-rLA/strings.xml | 3 ++- res/values-lt/strings.xml | 3 ++- res/values-lv/strings.xml | 3 ++- res/values-mk-rMK/strings.xml | 3 ++- res/values-ml-rIN/strings.xml | 3 ++- res/values-mn-rMN/strings.xml | 3 ++- res/values-mr-rIN/strings.xml | 3 ++- res/values-ms-rMY/strings.xml | 3 ++- res/values-my-rMM/strings.xml | 3 ++- res/values-nb/strings.xml | 3 ++- res/values-ne-rNP/strings.xml | 3 ++- res/values-nl/strings.xml | 3 ++- res/values-pl/strings.xml | 3 ++- res/values-pt-rPT/strings.xml | 3 ++- res/values-pt/strings.xml | 3 ++- res/values-ro/strings.xml | 3 ++- res/values-ru/strings.xml | 3 ++- res/values-si-rLK/strings.xml | 3 ++- res/values-sk/strings.xml | 3 ++- res/values-sl/strings.xml | 3 ++- res/values-sr/strings.xml | 3 ++- res/values-sv/strings.xml | 3 ++- res/values-sw/strings.xml | 3 ++- res/values-ta-rIN/strings.xml | 3 ++- res/values-te-rIN/strings.xml | 3 ++- res/values-th/strings.xml | 3 ++- res/values-tl/strings.xml | 3 ++- res/values-tr/strings.xml | 3 ++- res/values-uk/strings.xml | 3 ++- res/values-ur-rPK/strings.xml | 3 ++- res/values-uz-rUZ/strings.xml | 3 ++- res/values-vi/strings.xml | 3 ++- res/values-zh-rCN/strings.xml | 3 ++- res/values-zh-rHK/strings.xml | 3 ++- res/values-zh-rTW/strings.xml | 3 ++- res/values-zu/strings.xml | 3 ++- 73 files changed, 146 insertions(+), 73 deletions(-) diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index e01192f70e..e426e50b5f 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Werk" "Program is nie geïnstalleer nie." @@ -46,6 +46,7 @@ "Laat die program toe om die instellings en kortpaaie in Tuis te lees." "skryf Tuis-instellings en -kortpaaie" "Laat die program toe om die instellings en kortpaaie in Tuis te verander." + "%1$s word nie toegelaat om foonoproepe te maak nie" "Kon nie legstuk laai nie" "Stel op" "Dit is \'n stelselprogram en kan nie gedeïnstalleer word nie." diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 4eefc0adc1..2d1fb3dc39 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -19,7 +19,7 @@ - "ማስጀመሪያ3" + "Launcher3" "ስራ" "መተግበሪያ አልተጫነም።" @@ -46,6 +46,7 @@ "መተግበሪያው በመነሻ ውስጥ ያሉ ቅንብሮችን እና አቋራጮችን እንዲያነብ ያስችለዋል።" "የመነሻ ቅንብሮችን እና አቋራጮችን ይጽፋል" "መተግብሪያው ቅንብሮችን እና አቋራጮችን በመነሻ ውስጥ እንዲቀይራቸው ያስችለዋል።" + "%1$s የስልክ ጥሪዎችን ለማድረግ አልተፈቀደለትም" "ፍርግም የመጫን ችግር" "ማዋቀሪያ" "ይህ የስርዓት መተግበሪያ ነው እና ማራገፍ አይቻልም።" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 37e924d542..67400d4fc9 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "العمل" "لم يتم تثبيت التطبيق." @@ -46,6 +46,7 @@ "للسماح للتطبيق بقراءة الإعدادات والاختصارات في الشاشة الرئيسية." "كتابة إعدادات واختصارات الشاشة الرئيسية" "للسماح للتطبيق بتغيير الإعدادات والاختصارات في الشاشة الرئيسية." + "%1$s غير مسموح به لإجراء مكالمات هاتفية" "حدثت مشكلة أثناء تحميل الأداة" "الإعداد" "هذا تطبيق نظام وتتعذر إزالته." diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index fe0eff1e3c..0ba7525618 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Работа" "Приложението не е инсталирано." @@ -46,6 +46,7 @@ "Разрешава на приложението да чете настройките и преките пътища в Начало." "запис на настройките и преките пътища в Начало" "Разрешава на приложението да променя настройките и преките пътища в Начало." + "%1$s няма разрешение да извършва телефонни обаждания" "Проблем при зареждане на приспособлението" "Настройване" "Това е системно приложение и не може да се деинсталира." diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml index 2de48f6d23..8f0c922869 100644 --- a/res/values-bn-rBD/strings.xml +++ b/res/values-bn-rBD/strings.xml @@ -19,7 +19,7 @@ - "লঞ্চার৩" + "Launcher3" "কাজ" "অ্যাপ্লিকেশান ইনস্টল করা নেই৷" @@ -46,6 +46,7 @@ "হোমে অ্যাপ্লিকেশানটিকে সেটিংস এবং শর্টকাটগুলি পড়তে দেয়৷" "হোম সেটিংস এবং শর্টকাটগুলি লেখে" "হোমে অ্যাপ্লিকেশানটিকে সেটিংস এবং শর্টকাটগুলি পরিবর্তন করতে দেয়৷" + "ফোন কলগুলি করার জন্য %1$s এর অনুমতি নেই" "উইজেট লোড হতে সমস্যা হয়েছে" "সেটআপ" "এটি একটি সিস্টেম অ্যাপ্লিকেশান এবং আনইনস্টল করা যাবে না৷" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 507c237540..2d3f9ed2b7 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Feina" "L\'aplicació no s\'ha instal·lat." @@ -46,6 +46,7 @@ "Permet que l\'aplicació llegeixi la configuració i les dreceres de la pantalla d\'inici." "escriu la configuració i les dreceres de la pantalla d\'inici" "Permet que l\'aplicació canviï la configuració i les dreceres de la pantalla d\'inici." + "%1$s no té permís per fer trucades telefòniques" "S\'ha produït un problema en carregar el widget" "Configuració" "Aquesta aplicació és una aplicació del sistema i no es pot desinstal·lar." diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index bb1205c5a7..ce3757a73b 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Práce" "Aplikace není nainstalována." @@ -46,6 +46,7 @@ "Umožňuje aplikaci číst nastavení a odkazy na ploše." "zápis nastavení a odkazů plochy" "Umožňuje aplikaci změnit nastavení a odkazy na ploše." + "Aplikace %1$s nemá oprávnění telefonovat" "Problém s načtením widgetu" "Nastavení" "Toto je systémová aplikace a nelze ji odinstalovat." diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 3b892b8ad0..ffa168bdba 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Arbejde" "Appen er ikke installeret." @@ -46,6 +46,7 @@ "Tillader, at appen læser indstillingerne og genvejene på startskærmen." "skrive indstillinger og genveje for startskærmen" "Tillader, at appen ændrer indstillingerne og genvejene på startskærmen." + "%1$s har ikke tilladelse til at foretage telefonopkald" "Der er problemer med indlæsning af widgetten" "Konfigurer" "Dette er en systemapp, som ikke kan afinstalleres." diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 25c59a07fa..118e34aa58 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Arbeit" "App ist nicht installiert." @@ -46,6 +46,7 @@ "Ermöglicht der App, die Einstellungen und Verknüpfungen auf dem Startbildschirm zu lesen" "Einstellungen und Verknüpfungen für den Startbildschirm schreiben" "Ermöglicht der App, die Einstellungen und Verknüpfungen auf dem Startbildschirm zu ändern" + "%1$s darf keine Telefonanrufe tätigen." "Problem beim Laden des Widgets" "Einrichten" "Dies ist eine Systemanwendung, die nicht deinstalliert werden kann." diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 6e00963f68..38ee326d4b 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Εργασία" "Η εφαρμογή δεν έχει εγκατασταθεί." @@ -46,6 +46,7 @@ "Επιτρέπει στην εφαρμογή την ανάγνωση των ρυθμίσεων και των συντομεύσεων στην Αρχική οθόνη." "εγγραφή ρυθμίσεων και συντομεύσεων αρχικής οθόνης" "Επιτρέπει στην εφαρμογή την αλλαγή των ρυθμίσεων και των συντομεύσεων στην Αρχική οθόνη." + "Η εφαρμογή %1$s δεν επιτρέπεται να πραγματοποιεί τηλεφωνικές κλήσεις" "Παρουσιάστηκε πρόβλημα στη φόρτωση του γραφικού στοιχείου" "Ρύθμιση" "Αυτή είναι μια εφαρμογή συστήματος και δεν είναι δυνατή η κατάργηση της εγκατάστασής της." diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index 88a43469dc..ee45af040a 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Work" "App isn\'t installed." @@ -46,6 +46,7 @@ "Allows the app to read the settings and shortcuts in Home." "write Home settings and shortcuts" "Allows the app to change the settings and shortcuts in Home." + "%1$s is not allowed to make phone calls" "Problem loading widget" "Setup" "This is a system app and can\'t be uninstalled." diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 88a43469dc..ee45af040a 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Work" "App isn\'t installed." @@ -46,6 +46,7 @@ "Allows the app to read the settings and shortcuts in Home." "write Home settings and shortcuts" "Allows the app to change the settings and shortcuts in Home." + "%1$s is not allowed to make phone calls" "Problem loading widget" "Setup" "This is a system app and can\'t be uninstalled." diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 88a43469dc..ee45af040a 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Work" "App isn\'t installed." @@ -46,6 +46,7 @@ "Allows the app to read the settings and shortcuts in Home." "write Home settings and shortcuts" "Allows the app to change the settings and shortcuts in Home." + "%1$s is not allowed to make phone calls" "Problem loading widget" "Setup" "This is a system app and can\'t be uninstalled." diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 18146a92cd..6f6c9def23 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Trabajo" "No se instaló la aplicación." @@ -46,6 +46,7 @@ "Permite que la aplicación lea la configuración y los accesos directos de la pantalla principal." "escribir configuración y accesos directos de la pantalla principal" "Permite que la aplicación cambie la configuración y los accesos directos de la pantalla principal." + "%1$s no puede realizar llamadas telefónicas" "Problema al cargar el widget" "Configuración" "Esta es una aplicación del sistema y no se puede desinstalar." diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index d16ff0cbb4..11ae8cb9b6 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Trabajo" "La aplicación no está instalada." @@ -46,6 +46,7 @@ "Permite que la aplicación consulte los ajustes y los accesos directos de la pantalla de inicio." "escribir información de accesos directos y de ajustes de la pantalla de inicio" "Permite que las aplicaciones cambien los ajustes y los accesos directos de la pantalla de inicio." + "%1$s no puede hacer llamadas" "Problema al cargar el widget" "Configuración" "Esta aplicación es del sistema y no se puede desinstalar." diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 8b95a4426b..6f45387f91 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Töö" "Rakendus pole installitud." @@ -46,6 +46,7 @@ "Võimaldab rakendusel lugeda avaekraanil seadeid ja otseteid." "kirjuta avaekraani seaded ja otseteed" "Võimaldab rakendusel muuta avaekraanil seadeid ja otseteid." + "Rakendusel %1$s pole lubatud helistada" "Probleem vidina laadimisel" "Seadistamine" "See on süsteemirakendus ja seda ei saa desinstallida." diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml index bfb93c6ba6..7a465b3abe 100644 --- a/res/values-eu-rES/strings.xml +++ b/res/values-eu-rES/strings.xml @@ -19,7 +19,7 @@ - "Abiarazlea3" + "Launcher3" "Lana" "Aplikazioa instalatu gabe dago." @@ -46,6 +46,7 @@ "Hasierako pantailako ezarpenak eta lasterbideak irakurtzea baimentzen die aplikazioei." "Idatzi hasierako ezarpenak eta lasterbideak" "Hasierako pantailako ezarpenak eta lasterbideak aldatzea baimentzen die aplikazioei." + "%1$s aplikazioak ez du telefono-deiak egiteko baimenik" "Arazo bat izan da widgeta kargatzean" "Konfigurazioa" "Sistema-aplikazioa da hau eta ezin da desinstalatu." diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index cdbb53cbd6..9f0bb44f43 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "کاری" "برنامه نصب نشده است." @@ -46,6 +46,7 @@ "به برنامه اجازه می‌دهد تنظیمات و میان‌برها را در صفحه اصلی بخواند." "نوشتن تنظیمات و میان‌برهای صفحه اصلی" "به برنامه اجازه می‌دهد تنظیمات و میان‌برها را در صفحه اصلی تغییر دهد." + "%1$s مجاز نیست تماس تلفنی برقرار کند" "مشکل در بارگیری ابزارک" "تنظیم" "این برنامه سیستمی است و حذف نصب نمی‌شود." diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 64c20a38b5..2cbf127747 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Työ" "Sovellusta ei ole asennettu." @@ -46,6 +46,7 @@ "Antaa sovelluksen lukea aloitusruudun asetukset ja pikakuvakkeet." "kirjoita aloitusruudun asetuksia ja pikakuvakkeita" "Antaa sovelluksen muuttaa aloitusruudun asetuksia ja pikakuvakkeita." + "%1$s ei saa soittaa puheluita." "Ongelma ladattaessa widgetiä" "Asetus" "Tämä on järjestelmäsovellus, eikä sitä voi poistaa." diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index e589009dcf..0d3439de77 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -19,7 +19,7 @@ - "Lanceur3" + "Lanceur3" "Travail" "L\'application n\'est pas installée." @@ -46,6 +46,7 @@ "Permet à l\'application de lire les paramètres et les raccourcis de l\'écran d\'accueil." "enregistrer les paramètres de la page d\'accueil et des raccourcis" "Permet à l\'application de modifier les paramètres et les raccourcis de l\'écran d\'accueil." + "%1$s n\'est pas autorisée à faire des appels téléphoniques" "Problème lors du chargement du widget" "Configuration" "Impossible de désinstaller cette application, car il s\'agit d\'une application système." diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 45c2564ae4..2d97d230d9 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Android Work" "L\'application n\'est pas installée." @@ -46,6 +46,7 @@ "Permettre à l\'application de lire les paramètres et les raccourcis de l\'écran d\'accueil" "modifier les paramètres et les raccourcis de l\'écran d\'accueil" "Permettre à l\'application de modifier les paramètres et les raccourcis de l\'écran d\'accueil" + "L\'application %1$s n\'est pas autorisée à passer des appels téléphoniques." "Problème lors du chargement du widget." "Configuration" "Impossible de désinstaller cette application, car il s\'agit d\'une application système." diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml index 71d9e17bb5..0a1cbe1b96 100644 --- a/res/values-gl-rES/strings.xml +++ b/res/values-gl-rES/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Traballo" "A aplicación non está instalada" @@ -46,6 +46,7 @@ "Permite a unha aplicación ler a configuración e os atallos da páxina de inicio." "modificar a configuración e os atallos da pantalla de inicio" "Permite a unha aplicación cambiar a configuración e os atallos da pantalla de inicio." + "%1$s non ten permiso para facer chamadas telefónicas" "Produciuse un problema ao cargar o widget" "Configuración" "Esta aplicación é do sistema e non se pode desinstalar." diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 3d8d5dd29c..49531af74c 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "कार्यस्‍थल" "एप्‍लिकेशन इंस्‍टॉल नहीं है." @@ -46,6 +46,7 @@ "ऐप्लिकेशन को होम में सेटिंग और शॉर्टकट पढ़ने देती है." "होम सेटिंग और शॉर्टकट लिखें" "ऐप्लिकेशन को होम में सेटिंग और शॉर्टकट बदलने देती है." + "%1$s को फ़ोन कॉल करने की अनुमति नहीं है" "विजेट लोड करने में समस्‍या" "सेटअप" "यह एक सिस्टम ऐप्लिकेशन है और इसे अनइंस्टॉल नहीं किया जा सकता." diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 809e588354..0ec3789a02 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -19,7 +19,7 @@ - "Pokretač3" + "Launcher3" "Posao" "Aplikacija nije instalirana." @@ -46,6 +46,7 @@ "Aplikaciji omogućuje čitanje postavki i prečaca na početnom zaslonu." "pisanje postavki početnog zaslona i prečaca" "Aplikaciji omogućuje promjenu postavki i prečaca na početnom zaslonu." + "%1$s nema dopuštenje za telefonske pozive" "Problem pri učitavanju widgeta" "Postavljanje" "Ovo je aplikacija sustava i ne može se ukloniti." diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index e6d74d2b0d..8f93d97cf0 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Munka" "Az alkalmazás nincs telepítve." @@ -46,6 +46,7 @@ "Lehetővé teszi az alkalmazás számára, hogy beolvassa a kezdőképernyő beállításait és parancsikonjait." "Főoldal beállításainak és parancsikonjainak írása" "Lehetővé teszi az alkalmazás számára, hogy módosítsa a kezdőképernyő beállításait és parancsikonjait." + "A(z) %1$s nem kezdeményezhet telefonhívásokat" "Probléma történt a modul betöltésekor" "Beállítás" "Ez egy rendszeralkalmazás, és nem lehet eltávolítani." diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml index 9f5626b791..3f06f8c87a 100644 --- a/res/values-hy-rAM/strings.xml +++ b/res/values-hy-rAM/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Աշխատանքային" "Ծրագիրը տեղադրված չէ:" @@ -46,6 +46,7 @@ "Ծրագրին թույլ է տալիս կարդալ հիմնաէջի կարգավորումներն ու դյուրանցումները:" "ստեղծել հիմնաէջի կարգավորումներ ու դյուրանցումներ" "Ծրագրին թույլ է տալիս փոփոխել հիմնաէջի կարգավորումներն ու դյուրանցումները:" + "%1$s հավելվածին չի թույլատրվում հեռախոսազանգեր կատարել" "Վիջեթի բեռնման խնդիր կա" "Կարգավորում" "Սա համակարգային ծրագիր է և չի կարող ապատեղադրվել:" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 51adf9f558..2537255ae3 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Kantor" "Aplikasi tidak dipasang." @@ -46,6 +46,7 @@ "Mengizinkan aplikasi membaca setelan dan pintasan di layar Utama." "menulis setelan dan pintasan layar Utama" "Mengizinkan aplikasi mengubah setelan dan pintasan di layar Utama." + "%1$s tidak diizinkan untuk melakukan panggilan telepon" "Masalah memuat widget" "Siapkan" "Ini adalah aplikasi sistem dan tidak dapat dicopot pemasangannya." diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml index 093be61fd7..1bf3dbfad7 100644 --- a/res/values-is-rIS/strings.xml +++ b/res/values-is-rIS/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Vinna" "Forritið er ekki uppsett." @@ -46,6 +46,7 @@ "Leyfir forriti að lesa stillingar og flýtileiðir heimaskjás." "skrifa stillingar og flýtileiðir heimaskjás" "Leyfir forriti að breyta stillingum og flýtileiðum heimaskjás." + "%1$s hefur ekki leyfi til að hringja símtöl" "Vandamál við að hlaða græju" "Uppsetning" "Þetta er kerfisforrit sem ekki er hægt að fjarlægja." diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index b30fea1fa0..e1631a4d40 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Lavoro" "App non installata." @@ -46,6 +46,7 @@ "Consente all\'app di leggere le impostazioni e le scorciatoie in Home." "creazione di impostazioni e scorciatoie in Home" "Consente all\'app di modificare le impostazioni e le scorciatoie in Home." + "L\'app %1$s non è autorizzata a effettuare telefonate" "Errore durante il caricamento del widget" "Configurazione" "Questa è un\'app di sistema e non può essere disinstallata." diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 2f6af387b4..db88fe21e2 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "עבודה" "האפליקציה לא מותקנת." @@ -46,6 +46,7 @@ "מאפשר לאפליקציה לקרוא את ההגדרות וקיצורי הדרך בדף הבית." "כתוב הגדרות וקיצורי דרך של דף הבית" "מאפשר לאפליקציה לשנות את ההגדרות וקיצורי הדרך בדף הבית." + "%1$s אינו רשאי להתקשר" "בעיה בטעינת ווידג\'ט" "הגדר" "זוהי אפליקציית מערכת ולא ניתן להסיר את התקנתה." diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 6471b4c0c3..b4873a0e3b 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "仕事用" "このアプリはインストールされていません。" @@ -46,6 +46,7 @@ "ホームの設定とショートカットの読み取りをアプリに許可します。" "ホームの設定とショートカットの書き込み" "ホームの設定とショートカットの変更をアプリに許可します。" + "「%1$s」から電話をかけることはできません" "ウィジェットを表示できません" "セットアップ" "このシステムアプリはアンインストールできません。" diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index 6c27c05cef..44c17a2b91 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "სამუშაო" "აპი არ არის დაყენებული." @@ -46,6 +46,7 @@ "აპისთვის მთავარი ეკრანის პარამეტრებისა და მალსახმობების წაკითხვის უფლების მიცემა." "მთავარი ეკრანის პარამეტრებისა და მალსახმობების ჩაწერა" "აპისთვის მთავარი ეკრანის პარამეტრებისა და მალსახმობების შეცვლის უფლების მიცემა." + "%1$s-ს არ აქვს სატელეფონო ზარების განხორციელების უფლება" "პრობლემა ვიჯეტის ჩატვირთვისას" "დაყენება" "ეს სისტემური აპია და მისი წაშლა შეუძლებელია." diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml index ade45c46a3..e30d9fe097 100644 --- a/res/values-kk-rKZ/strings.xml +++ b/res/values-kk-rKZ/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Жұмыс" "Қолданба орнатылмаған." @@ -46,6 +46,7 @@ "Қолданбаға Негізгі экрандағы параметрлер мен төте пернелерді оқу мүмкіндігін береді." "Негізгі экран параметрлері мен төте пернелерін жазу" "Қолданбаға Негізгі экрандағы параметрлер мен төте пернелерді өзгерту мүмкіндігін береді." + "%1$s арқылы телефон қоңырауларын соғуға рұқсат етілмеген" "Виджетті жүктеу барысында мәселе орын алды" "Орнату" "Бұл жүйе қолданбасы, сондықтан оны алу мүмкін емес." diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml index 4d70eaf24d..abe8a1c596 100644 --- a/res/values-km-rKH/strings.xml +++ b/res/values-km-rKH/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "ការងារ" "មិន​បាន​ដំឡើង​កម្មវិធី។" @@ -46,6 +46,7 @@ "អនុញ្ញាត​ឲ្យ​កម្មវិធី​អាន​ការ​កំណត់ និង​ផ្លូវកាត់​ក្នុង​អេក្រង់​ដើម។" "សរសេរ​ការ​កំណត់ ​និង​ផ្លូវកាត់​​លើ​អេក្រង់​ដើម" "អនុញ្ញាត​ឲ្យ​កម្មវិធី​ប្ដូរ​ការ​កំណត់ និង​ផ្លូវ​កាត់​ក្នុង​អេក្រង់​ដើម។" + "%1$s មិនត្រូវបានអនុញ្ញាតឲ្យធ្វើការហៅទូរស័ព្ទទេ" "បញ្ហា​ក្នុង​ការ​ផ្ទុក​ធាតុ​​ក្រាហ្វិក" "រៀបចំ" "នេះ​​​ជា​កម្មវិធី​ប្រព័ន្ធ មិន​អាច​លុប​បាន​ទេ។" diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml index 389697f6a1..9086d9bf69 100644 --- a/res/values-kn-rIN/strings.xml +++ b/res/values-kn-rIN/strings.xml @@ -19,7 +19,7 @@ - "ಲಾಂಚರ್3" + "Launcher3" "ಕೆಲಸ" "ಅಪ್ಲಿಕೇಶನ್‌ ಅನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ" @@ -46,6 +46,7 @@ "ಮುಖಪುಟದಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಮತ್ತು ಶಾರ್ಟ್‌ಕಟ್‌ಗಳನ್ನು ಓದಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿ ನೀಡುತ್ತದೆ." "ಮುಖಪುಟದ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಮತ್ತು ಶಾರ್ಟ್‌ಕಟ್‌ಗಳನ್ನು ಬರೆಯಿರಿ" "ಮುಖಪುಟದಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಮತ್ತು ಶಾರ್ಟ್‌ಕಟ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿ ನೀಡುತ್ತದೆ." + "ಫೋನ್ ಕರೆಗಳನ್ನು ಮಾಡಲು %1$s ಅಪ್ಲಿಕೇಶನ್‌‌ಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ" "ವಿಜೆಟ್ ಲೋಡ್‌ ಮಾಡುವಲ್ಲಿ ಸಮಸ್ಯೆ" "ಸೆಟಪ್" "ಇದೊಂದು ಅಪ್ಲಿಕೇಶನ್ ಆಗಿದೆ ಮತ್ತು ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ." diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index f182045069..cebf762b10 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "업무" "앱이 설치되지 않았습니다." @@ -46,6 +46,7 @@ "앱이 홈에 있는 설정 및 바로가기를 읽을 수 있도록 합니다." "홈 설정 및 바로가기 쓰기" "앱이 홈에 있는 설정 및 바로가기를 변경할 수 있도록 합니다." + "%1$s에서 전화를 걸 수 없습니다." "위젯을 로드하는 중 문제가 발생했습니다." "설정" "시스템 앱은 제거할 수 없습니다." diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml index c5d071cde6..89f97a4c33 100644 --- a/res/values-ky-rKG/strings.xml +++ b/res/values-ky-rKG/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Жумуш" "Колдонмо орнотулган эмес." @@ -46,6 +46,7 @@ "Колдонмого Үйдүн тууралоолорун жана тез чакырмаларын окууга уруксат берет." "Үйдүн тууралоолорун жана тез чакырмаларын жазуу" "Колдонмого Үйдүн тууралоолорун жана тез чакырмаларын өзгөртүүгө уруксат берет." + "%1$s телефон чалууларды аткарууга уруксаты жок" "Виджетти жүктөөдө маселе бар" "Орнотуу" "Бул системдик колдонмо жана аны чечкенге болбойт." diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml index cd30cad2c6..04fdd0294b 100644 --- a/res/values-lo-rLA/strings.xml +++ b/res/values-lo-rLA/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "ວຽກ" "ແອັບຯບໍ່ໄດ້ຖືກຕິດຕັ້ງ." @@ -46,6 +46,7 @@ "ອະນຸຍາດໃຫ້ແອັບຯດັ່ງກ່າວອ່ານການຕັ້ງຄ່າ ແລະທາງລັດໃນໜ້າຫຼັກ." "ຂຽນການຕັ້ງຄ່າໜ້າຫຼັກ ແລະທາງລັດ" "ອະນຸຍາດໃຫ້ແອັບຯດັ່ງກ່າວ ປ່ຽນການຕັ້ງຄ່າ ແລະທາງລັດໃນໜ້າຫຼັກ." + "%1$s ບໍ່​ໄດ້​ຮັບ​ອະ​ນຸ​ຍາດ​ໃຫ້​ໂທ" "ມີບັນຫາໃນການໂຫລດວິດເຈັດ" "ຕິດຕັ້ງ" "ນີ້ແມ່ນແອັບຯຂອງລະບົບ ແລະບໍ່ສາມາດຖອນການຕິດຕັ້ງອອກໄດ້." diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 28e4dd9fe3..34d1bbada4 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Darbas" "Programa neįdiegta." @@ -46,6 +46,7 @@ "Programai leidžiama skaityti pagrindinio puslapio nustatymus ir sparčiuosius klavišus." "rašyti pagrindinio puslapio nustatymus ir sparčiuosius klavišus" "Programai leidžiama keisti pagrindinio puslapio nustatymus ir sparčiuosius klavišus." + "„%1$s“ neleidžiama skambinti" "Problema įkeliant valdiklį" "Sąranka" "Tai sistemos programa ir jos negalima pašalinti." diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index f9dbbaec17..cc157c53ae 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Darbs" "Lietotne nav instalēta." @@ -46,6 +46,7 @@ "Ļauj lietotnei lasīt iestatījumus un saīsnes sākuma ekrānā." "rakstīt sākuma ekrāna iestatījumus un saīsnes" "Ļauj lietotnei mainīt iestatījumus un saīsnes sākuma ekrānā." + "Lietotnei %1$s nav atļauts veikt tālruņa zvanus." "Ielādējot logrīku, radās problēma." "Notiek iestatīšana" "Šī ir sistēmas lietotne, un to nevar atinstalēt." diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml index 273073dad1..b6f89d1b7e 100644 --- a/res/values-mk-rMK/strings.xml +++ b/res/values-mk-rMK/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Стартер3" "Работа" "Апликацијата не е инсталирана." @@ -46,6 +46,7 @@ "Овозможува апликацијата да ги менува подесувањата и кратенките на почетната страница." "напиши подесувања и кратенки на почетна страница" "Овозможува апликацијата да ги менува подесувањата и кратенките на почетната страница." + "%1$s нема дозвола за телефонски повици" "Проблем при вчитувањето на виџетот" "Поставување" "Ова е системска апликација и не може да се деинсталира." diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml index a11eac0dfd..4a4795618d 100644 --- a/res/values-ml-rIN/strings.xml +++ b/res/values-ml-rIN/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "ലോഞ്ചർ3" "ഔദ്യോഗികം" "അപ്ലിക്കേഷൻ ഇൻസ്‌റ്റാളുചെ‌യ്‌തിട്ടില്ല." @@ -46,6 +46,7 @@ "ഹോമിലെ ക്രമീകരണങ്ങളും കുറുക്കുവഴികളും റീഡുചെയ്യാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു." "ഹോം ക്രമീകരണങ്ങളും കുറുക്കുവഴികളും റൈറ്റുചെയ്യുക" "ഹോമിലെ ക്രമീകരണങ്ങളും കുറുക്കുവഴികളും മാറ്റാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു." + "ഫോൺ കോൾ ചെയ്യാൻ %1$s എന്നതിനെ അനുവദിച്ചിട്ടില്ല" "വിജറ്റ് ലോഡുചെയ്യുന്നതിൽ പ്രശ്നമുണ്ട്" "സജ്ജീകരിക്കുക" "ഇതൊരു സിസ്‌റ്റം അപ്ലിക്കേഷനായതിനാൽ അൺഇൻസ്‌റ്റാളുചെയ്യാനാവില്ല." diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml index 3f1f73dc96..c59a206fbe 100644 --- a/res/values-mn-rMN/strings.xml +++ b/res/values-mn-rMN/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Ажил" "Апп суугаагүй байна." @@ -46,6 +46,7 @@ "Апп нь Нүүрэндэх товчлол болон тохиргоог уншиж чадна." "Нүүрний тохиргоо болон товчлолыг бичих" "Апп нь Нүүрэндэх товчлол болон тохиргоог өөрчилж чадна." + "%1$s утасны дуудлага хийх боломжгүй" "Виджет ачаалахад асуудал гарав" "Тохируулга" "Энэ апп нь системийн апп ба устгах боломжгүй." diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml index 9ff6696c82..373a7cdef3 100644 --- a/res/values-mr-rIN/strings.xml +++ b/res/values-mr-rIN/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "कार्य" "अॅप स्थापित केलेला नाही." @@ -46,6 +46,7 @@ "मुख्यपृष्ठातील सेटिंग्ज आणि शॉर्टकट वाचण्यास अॅप ला अनुमती देते." "मुख्यपृष्ठ सेटिंग्ज आणि शॉर्टकट लिहा" "मुख्यपृष्ठातील सेटिंग्ज आणि शॉर्टकट बदलण्यास अॅप ला अनुमती देते." + "%1$s ला फोन कॉल करण्याची अनुमती नाही" "विजेट लोड करण्यात समस्या" "सेटअप" "हा सिस्टम अॅप आहे आणि विस्थापित केला जाऊ शकत नाही." diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index 5d918417ad..0ff456ca57 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Kerja" "Apl tidak dipasang." @@ -46,6 +46,7 @@ "Membenarkan apl membaca tetapan dan pintasan di Laman Utama." "tulis tetapan dan pintasan Laman Utama" "Membenarkan apl menukar tetapan dan pintasan di Laman Utama." + "%1$s tidak dibenarkan membuat panggilan telefon" "Masalah memuatkan widget" "Persediaan" "Ini ialah apl sistem dan tidak boleh dinyahpasang." diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml index ca590fad1c..ceef91c6c5 100644 --- a/res/values-my-rMM/strings.xml +++ b/res/values-my-rMM/strings.xml @@ -19,7 +19,7 @@ - "Launcher၃" + "ဖွင့်တင်စက်၃" "အလုပ်" "အပ်ပလီကေးရှင်း မထည့်သွင်းထားပါ" @@ -46,6 +46,7 @@ "ပင်မမျက်နှာစာတွင်ရှိသော အပြင်အဆင်နှင့် အတိုကောက်မှတ်သားမှုများကို အပ်ပလီကေးရှင်းအား ဖတ်ခွင့်ပြုခြင်း" "ပင်မမျက်နှာစာ အပြင်အဆင် နှင့် အတိုကောက်မှတ်သားမှုများအား ရေးသားခြင်း" "ပင်မမျက်နှာစာတွင် ရှိသော အပြင်အဆင် နှင့် အတိုကောက်မှတ်သားမှုများ ကို အပ်ပလီကေးရှင်းအား ပြောင်းခွင့်ပြုခြင်း" + "%1$sသည် ဖုန်းခေါ်ဆိုခွင့် မရှိပါ" "ဝဒ်ဂျက် တင်ရာတွင် ပြသနာ ရှိပါသည်" "စဖွင့်သတ်မှတ်ရန်" "ဤအပ်ပလီကေးရှင်းမှာ စစ်စတန်ပိုင်းဆိုင်ရာ အပ်ပလီကေးရှင်းဖြစ်ပါသည်။ ထုတ်ပစ်၍ မရပါ" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 8b259c4b38..981b21e5af 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Jobb" "Appen er ikke installert." @@ -46,6 +46,7 @@ "Lar appen lese innstillingene og snarveiene på startsiden." "angi startsideinnstillinger og -snarveier" "Lar appen endre innstillingene og snarveiene på startsiden." + "%1$s har ikke tillatelse til å ringe" "Problem ved innlasting av modul" "Konfigurering" "Dette er en systemapp som ikke kan avinstalleres." diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml index e2d7fbb8c5..b480826d90 100644 --- a/res/values-ne-rNP/strings.xml +++ b/res/values-ne-rNP/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "कार्य" "अनुप्रयोग स्थापित छैन।" @@ -46,6 +46,7 @@ "गृहमा एउटा अनुप्रयोगलाई सेटिङहरू र सर्टकटहरू पढ्न अनुमति दिनुहोस्।" "गृह सेटिङहरू र सर्टकटहरू लेख्नुहोस्" "गृहमा एउटा अनुप्रयोगलाई सेटिङ र सर्टकट बदल्न अनुमति दिनुहोस्।" + "%1$s ले फोन कलहरू गर्न अनुमति छैन" "समस्या लोडिङ गर्ने विजेट" "सेटअप" "यो प्रणाली अनुप्रयोग हो र यसलाई स्थापना रद्द गर्न सकिँदैन।" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 90659ced49..45c5e45659 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Werk" "App is niet geïnstalleerd." @@ -46,6 +46,7 @@ "De app toestaan de instellingen en snelkoppelingen op de startpagina te lezen." "instellingen en snelkoppelingen op de startpagina schrijven" "De app toestaan de instellingen en snelkoppelingen op de startpagina te wijzigen." + "%1$s mag niet bellen" "Probleem bij het laden van widget" "Configuratie" "Dit is een systeemapp die niet kan worden verwijderd." diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 6f1d1f467a..bbed949cfa 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Praca" "Aplikacja nie jest zainstalowana." @@ -46,6 +46,7 @@ "Pozwala aplikacji na odczytywanie ustawień i skrótów na ekranie głównym." "zapisywanie ustawień i skrótów na ekranie głównym" "Umożliwia aplikacji zmianę ustawień i skrótów na ekranie głównym." + "%1$s nie może wykonywać połączeń telefonicznych" "Problem podczas ładowania widżetu" "Konfiguracja" "To aplikacja systemowa i nie można jej odinstalować." diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index f3dc9482fa..a8c9b5e0af 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -19,7 +19,7 @@ - "Iniciador3" + "Launcher3" "Trabalho" "A aplicação não está instalada." @@ -46,6 +46,7 @@ "Permite à aplicação ler as definições e os atalhos no Ecrã Principal." "escrever definições e atalhos do Ecrã principal" "Permite à aplicação alterar as definições e os atalhos no Ecrã Principal." + "O %1$s não tem autorização para efetuar chamadas telefónicas" "Problema ao carregar o widget" "Configuração" "É uma aplicação de sistema e não pode ser desinstalada." diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index edcb68eb78..f46dca15c8 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Tela de início 3" "Trabalho" "O app não está instalado." @@ -46,6 +46,7 @@ "Permite que o app leia as configurações e os atalhos na tela inicial." "gravar configurações e atalhos da tela inicial" "Permite que o app altere as configurações e os atalhos na tela inicial." + "%1$s não tem permissão para fazer chamadas" "Problema ao carregar o widget" "Configuração" "Este é um app do sistema e não pode ser desinstalado." diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 8145455d38..512e5cfb42 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Work" "Aplicația nu este instalată." @@ -46,6 +46,7 @@ "Permite aplicației să citească setările și comenzile rapide din ecranul de pornire." "scrie setări și comenzi rapide pentru ecranul de pornire" "Permite aplicației să modifice setările și comenzile rapide din ecranul de pornire." + "%1$s nu are permisiunea de a apela" "Problemă la încărcarea widgetului" "Configurați" "Aceasta este o aplicație de sistem și nu poate fi dezinstalată." diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 1b651a2ff0..963c895695 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Работа" "Приложение удалено" @@ -46,6 +46,7 @@ "Приложение получит доступ к данным о настройках и ярлыках на главном экране." "Изменение настроек и ярлыков главного экрана" "Приложение сможет изменять настройки и ярлыки на главном экране." + "Приложение %1$s не может делать телефонные звонки" "Не удалось загрузить виджет" "Настройка" "Это системное приложение, его нельзя удалить." diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml index a63982dc9a..84304f6b75 100644 --- a/res/values-si-rLK/strings.xml +++ b/res/values-si-rLK/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "කාර්යාලය" "යෙදුම ස්ථාපනය කර නැත." @@ -46,6 +46,7 @@ "මුල් පිටුවේ ඇති සැකසීම් සහ කෙටිමං කියවීමට යෙදුමකට අවසර දෙයි." "මුල් පිටු සැකසීම් සහ කෙටිමං ලියන්න" "මුල් පිටුවේ සැකසීම් සහ කෙටිමං ඉවත් කිරීමට යෙදුමට අවසර දෙයි." + "%1$s හට දුරකථන ඇමතුම් සිදු කිරීමට ඉඩ නොදේ" "ගැටලු පූරණ විජට් එක" "ස්ථාපනය කරන්න" "මෙය පද්ධති යෙදුමක් වන අතර අස්ථාපනය කළ නොහැක." diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 93dcc0e633..2875e96b3a 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Pracovné" "Aplikácia nie je nainštalovaná." @@ -46,6 +46,7 @@ "Povoľuje aplikácii čítať nastavenia a odkazy na ploche." "zápis nastavení a odkazov plochy" "Povoľuje aplikácii zmeniť nastavenia a odkazy na ploche." + "Aplikácia %1$s nemá povolenie uskutočňovať telefonické hovory" "Problém s načítaním miniaplikácií" "Nastavenie" "Toto je systémová aplikácia a nedá sa odinštalovať." diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 767bfdf94a..2eea38a1c6 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -19,7 +19,7 @@ - "Zaganjalnik3" + "Launcher3" "Služba" "Aplikacija ni nameščena." @@ -46,6 +46,7 @@ "Aplikaciji dovoli branje nastavitev in bližnjic na začetnem zaslonu." "zapis nastavitev in bližnjic na začetnem zaslonu" "Aplikaciji dovoli spreminjanje nastavitev in bližnjic na začetnem zaslonu." + "Aplikaciji %1$s ni dovoljeno opravljanje klicev" "Težava pri nalaganju pripomočka" "Nastavitev" "To je sistemska aplikacija in je ni mogoče odstraniti." diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 8feec1ab5e..9fdf574103 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Work" "Апликација није инсталирана." @@ -46,6 +46,7 @@ "Дозвољава апликацији да чита подешавања и пречице на почетном екрану." "уписивање подешавања и пречица на почетном екрану" "Дозвољава апликацији да мења подешавања и пречице на почетном екрану." + "%1$s нема дозволу за упућивање телефонских позива" "Проблем при учитавању виџета" "Подешавање" "Ово је системска апликација и не може да се деинсталира." diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 1159919357..4d9589ea36 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Arbete" "Appen är inte installerad." @@ -46,6 +46,7 @@ "Tillåter att appen läser inställningar och genvägar på startsidan." "skriva inställningar och genvägar för startsidan" "Tillåter att appen ändrar inställningar och genvägar på startsidan." + "%1$s har inte behörighet att ringa samtal" "Det gick inte att läsa in widgeten" "Konfiguration" "Det här är en systemapp som inte kan avinstalleras." diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 183095af1b..bcd5082dce 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -19,7 +19,7 @@ - "Kizindua3" + "Launcher3" "Kazini" "Programu haijasakinishwa." @@ -46,6 +46,7 @@ "Huruhusu programu kusoma mipangilio na njia za mikato zilizo katika skirini ya Mwanzo." "andika mipangilio ya skrini ya Mwanzo na njia za mkato" "Huruhusu programu kubadilisha mipangilio na njia za mkato katika skrini ya Mwanzo." + "%1$s hairuhusiwi kupiga simu" "Tatizo la kupakia wijeti" "Sanidi" "Hii ni programu ya mfumo na haiwezi kuondolewa." diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml index 628c0a5737..a080bce854 100644 --- a/res/values-ta-rIN/strings.xml +++ b/res/values-ta-rIN/strings.xml @@ -19,7 +19,7 @@ - "லாஞ்சர்3" + "Launcher3" "பணியிடம்" "பயன்பாடு நிறுவப்படவில்லை." @@ -46,6 +46,7 @@ "முகப்பில் உள்ள அமைப்பு மற்றும் குறுக்குவழிகளைப் படிக்க பயன்பாட்டை அனுமதிக்கிறது." "முகப்பின் அமைப்பு மற்றும் குறுக்குவழிகளை எழுதுதல்" "முகப்பில் உள்ள அமைப்பு மற்றும் குறுக்குவழிகளை மாற்ற பயன்பாட்டை அனுமதிக்கிறது." + "ஃபோன் அழைப்புகள் செய்ய, %1$s அனுமதிக்கப்படவில்லை" "விட்ஜெட்டை ஏற்றுவதில் சிக்கல்" "அமைவு" "இது அமைப்பு பயன்பாடு என்பதால் நிறுவல் நீக்கம் செய்ய முடியாது." diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml index fd0f259145..65d9df803e 100644 --- a/res/values-te-rIN/strings.xml +++ b/res/values-te-rIN/strings.xml @@ -19,7 +19,7 @@ - "లాంచర్3" + "Launcher3" "కార్యాలయం" "అనువర్తనం ఇన్‌స్టాల్ చేయబడలేదు." @@ -46,6 +46,7 @@ "హోమ్‌లో సెట్టింగ్‌లు మరియు సత్వరమార్గాలను చదవడానికి అనువర్తనాన్ని అనుమతిస్తుంది." "హోమ్ సెట్టింగ్‌లు మరియు సత్వరమార్గాలను వ్రాయడం" "హోమ్‌లో సెట్టింగ్‌లు మరియు సత్వరమార్గాలను మార్చడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "ఫోన్ కాల్‌లను చేసేందుకు %1$sకి అనుమతి లేదు" "విడ్జెట్‌ను లోడ్ చేయడంలో సమస్య" "సెటప్ చేయి" "ఇది సిస్టమ్ అనువర్తనం మరియు దీన్ని అన్‌ఇన్‌స్టాల్ చేయడం సాధ్యపడదు." diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 600a83a539..2813a1f3af 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "งาน" "ไม่ได้ติดตั้งแอป" @@ -46,6 +46,7 @@ "อนุญาตให้แอปอ่านการตั้งค่าและทางลัดในหน้าแรก" "เขียนการตั้งค่าและทางลัดหน้าแรกแล้ว" "อนุญาตให้แอปเปลี่ยนการตั้งค่าและทางลัดในหน้าแรก" + "%1$s ไม่ได้รับอนุญาตให้โทรออก" "มีปัญหาขณะโหลดวิดเจ็ต" "ตั้งค่า" "นี่เป็นแอประบบและไม่สามารถถอนการติดตั้งได้" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 1be988adce..23e70eab4c 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Trabaho" "Hindi naka-install ang app." @@ -46,6 +46,7 @@ "Pinapayagan ang app na basahin ang mga setting at shortcut sa Home." "magsulat ng mga setting at shortcut ng Home" "Pinapayagan ang app na baguhin ang mga setting at shortcut sa Home." + "Hindi pinahihintulutang tumawag ang %1$s" "Problema sa pag-load ng widget" "I-setup" "Isa itong app ng system at hindi maaaring i-uninstall." diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 86304efaed..4149e9dccb 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "İş" "Uygulama yüklü değil." @@ -46,6 +46,7 @@ "Uygulamaya, Ana ekrandaki ayarları ve kısayolları okuma izni verir." "Ana ekran ayarlarını ve kısayollarını yaz" "Uygulamaya, Ana ekrandaki ayarları ve kısayolları değiştirme izni verir." + "%1$s uygulamasının telefon etmesine izin verilmiyor" "Widget yüklenirken sorun oluştu" "Kurulum" "Bu bir sistem uygulamasıdır ve yüklemesi kaldırılamaz." diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 4432302e38..804f66fa62 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Робоча папка" "Додаток видалено." @@ -46,6 +46,7 @@ "Дозволяє програмі читати налаштування та ярлики на головному екрані." "записувати налаштування та ярлики головного екрана" "Дозволяє програмі змінювати налаштування та ярлики на головному екрані." + "Додаток %1$s не має дозволу телефонувати" "Проблема із завантаженням віджета" "Налаштування" "Це системна програма, її неможливо видалити." diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml index 155fba3b24..6bfe9b8454 100644 --- a/res/values-ur-rPK/strings.xml +++ b/res/values-ur-rPK/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "دفتری" "ایپ انسٹال نہیں ہے۔" @@ -46,6 +46,7 @@ "ایپ کو ہوم میں ترتیبات اور شارٹ کٹس کو پڑھنے کی اجازت دیتا ہے۔" "ہوم ترتیبات اور شارٹ کٹس کو لکھیں" "ایپ کو ہوم میں ترتیبات اور شارٹ کٹس کو تبدیل کرنے کی اجازت دیتا ہے۔" + "%1$s کو فون کالیں کرنے کی اجازت نہیں ہے" "ویجیٹ کو لوڈ کرنے میں مسئلہ" "ترتیب دیں" "یہ ایک سسٹم ایپ ہے اور اسے اَن انسٹال نہیں کیا جا سکتا ہے۔" diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml index 2c1dd6c357..34ed118cb7 100644 --- a/res/values-uz-rUZ/strings.xml +++ b/res/values-uz-rUZ/strings.xml @@ -19,7 +19,7 @@ - "Ishga tushirgich3" + "Launcher3" "Ishga oid" "Ilova o‘rnatilmadi." @@ -46,6 +46,7 @@ "Ilovaga \"Uy\" ekranidagi yorliqlar va sozlamalarni o‘qish uchun ruxsat beradi." "Uy sozlamalari va yorliqlarini yozish" "Ilovaga \"Uy\" ekranidagi yorliqlar va sozlamalrni o‘zgartirish uchun ruxsat beradi." + "%1$s ilovasiga qo‘ng‘iroqlarni amalga oshirishga ruxsat berilmagan" "Vidjetni yuklashda muammo" "Sozlash" "Bu tizim ilovasi, shuning uchun o‘chirib bo‘lmaydi." diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 603352278a..7b4b2419cf 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Trình chạy 3" "Work" "Ứng dụng chưa được cài đặt." @@ -46,6 +46,7 @@ "Cho phép ứng dụng đọc cài đặt và lối tắt trên Màn hình chính." "ghi cài đặt và lối tắt trên Màn hình chính" "Cho phép ứng dụng thay đổi cài đặt và lối tắt trên Màn hình chính." + "%1$s không được phép thực hiện cuộc gọi điện thoại" "Sự cố khi tải tiện ích con" "Thiết lập" "Đây là ứng dụng hệ thống và không thể gỡ cài đặt." diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 84f39e46d9..0b47a6108a 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "Work" "未安装该应用。" @@ -46,6 +46,7 @@ "允许应用读取主屏幕中的设置和快捷方式。" "写入主屏幕设置和快捷方式" "允许应用更改主屏幕中的设置和快捷方式。" + "不允许使用%1$s拨打电话" "加载小部件时出现问题" "设置" "这是系统应用,无法卸载。" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 511ca28d90..beb3be1afa 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "工作" "尚未安裝應用程式。" @@ -46,6 +46,7 @@ "允許應用程式讀取主畫面中的設定和捷徑。" "寫入主畫面的設定和捷徑" "允許應用程式更改主畫面中的設定和捷徑。" + "不允許 %1$s 撥打電話" "載入小工具時發生問題" "設定" "這是系統應用程式,無法將其解除安裝。" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 62c6fd9969..611e708619 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -19,7 +19,7 @@ - "Launcher3" + "Launcher3" "公司" "應用程式未安裝。" @@ -46,6 +46,7 @@ "允許應用程式讀取主螢幕中的設定和捷徑。" "寫入主螢幕設定和捷徑" "允許應用程式變更主螢幕中的設定和捷徑。" + "%1$s 無法撥打電話" "載入小工具時發生問題" "設定" "這是系統應用程式,不可解除安裝。" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index 168b6bc9d2..6b6fc8ef32 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -19,7 +19,7 @@ - "Isiqalisi3" + "Isiqalisi3" "Umsebenzi" "Uhlelo lokusebenza alufakiwe." @@ -46,6 +46,7 @@ "Ivumela uhlelo lokusebenza ukuthi lifunde izilungiselelo nezinqamuleli ekhaya." "bhala izilungiselelo zokuthi Ikhaya nezinqamuleli" "Ivumela uhlelo lokusebenza ukuthi lushintshe izilungiselelo nezinqamuleli Ekhaya." + "%1$s ayivunyelwe ukwenza amakholi wefoni" "Inkinga yokulayisha iwijethi" "Ukumisa" "Lolu uhlelo lokusebenza lwesistimu futhi alikwazi ukukhishwa." From ead4ab9655683050a967864a3213d8782be0344c Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 19 Oct 2015 17:32:10 -0700 Subject: [PATCH 079/219] Using UiSelector instead of BySelector Change-Id: Ie912cc7291a2533f6686bdb34e108be15ce244ac --- .../android/launcher3/RotationPreferenceTest.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/src/com/android/launcher3/RotationPreferenceTest.java b/tests/src/com/android/launcher3/RotationPreferenceTest.java index 5f63475579..4e18aa6bfa 100644 --- a/tests/src/com/android/launcher3/RotationPreferenceTest.java +++ b/tests/src/com/android/launcher3/RotationPreferenceTest.java @@ -4,9 +4,9 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Rect; -import android.support.test.uiautomator.By; import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.Until; +import android.support.test.uiautomator.UiObject; +import android.support.test.uiautomator.UiSelector; import android.test.InstrumentationTestCase; /** @@ -73,15 +73,17 @@ public class RotationPreferenceTest extends InstrumentationTestCase { .setPackage(mTargetPackage) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getInstrumentation().getContext().startActivity(homeIntent); - mDevice.wait(Until.hasObject(By.pkg(mTargetPackage).depth(0)), 3000); + mDevice.findObject(new UiSelector().packageName(mTargetPackage)).waitForExists(6000); } private void setRotationEnabled(boolean enabled) { mPrefs.edit().putBoolean(Utilities.ALLOW_ROTATION_PREFERENCE_KEY, enabled).commit(); } - private Rect getHotseatBounds() { - mDevice.wait(Until.hasObject(By.res(mTargetPackage, "hotseat")), 3000); - return mDevice.findObject(By.res(mTargetPackage, "hotseat")).getVisibleBounds(); + private Rect getHotseatBounds() throws Exception { + UiObject hotseat = mDevice.findObject( + new UiSelector().resourceId(mTargetPackage + ":id/hotseat")); + hotseat.waitForExists(6000); + return hotseat.getVisibleBounds(); } } From f725824fa2091cab44cf1bcbfe5b5b8d06475560 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 19 Oct 2015 16:59:07 -0700 Subject: [PATCH 080/219] Refactoring getPreferenceKey method This method was returnning a constant and getting inlined by proguard. Change-Id: I87348e25b21483adc1b27d16f99dec4b73205701 --- .../launcher3/InstallShortcutReceiver.java | 10 +++---- src/com/android/launcher3/Launcher.java | 11 +++----- .../android/launcher3/LauncherAppState.java | 6 +---- src/com/android/launcher3/LauncherClings.java | 8 ++---- .../android/launcher3/LauncherProvider.java | 27 +++++-------------- src/com/android/launcher3/Utilities.java | 7 ++++- .../launcher3/compat/UserManagerCompatVL.java | 4 +-- .../model/MigrateFromRestoreTask.java | 12 +++------ .../testing/ToggleWeightWatcher.java | 5 ++-- .../android/launcher3/util/TestingUtils.java | 5 ++-- .../launcher3/RotationPreferenceTest.java | 3 +-- 11 files changed, 33 insertions(+), 65 deletions(-) diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java index 3fc8fc0a98..9a7519323b 100644 --- a/src/com/android/launcher3/InstallShortcutReceiver.java +++ b/src/com/android/launcher3/InstallShortcutReceiver.java @@ -92,8 +92,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver { if (packageNames.isEmpty()) { return; } - String spKey = LauncherAppState.getSharedPreferencesKey(); - SharedPreferences sp = context.getSharedPreferences(spKey, Context.MODE_PRIVATE); + SharedPreferences sp = Utilities.getPrefs(context); synchronized(sLock) { Set strings = sp.getStringSet(APPS_PENDING_INSTALL, null); if (DBG) { @@ -176,9 +175,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver { LauncherAppState app = LauncherAppState.getInstance(); boolean launcherNotLoaded = app.getModel().getCallback() == null; - String spKey = LauncherAppState.getSharedPreferencesKey(); - SharedPreferences sp = context.getSharedPreferences(spKey, Context.MODE_PRIVATE); - addToInstallQueue(sp, info); + addToInstallQueue(Utilities.getPrefs(context), info); if (!mUseInstallQueue && !launcherNotLoaded) { flushInstallQueue(context); } @@ -192,8 +189,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver { flushInstallQueue(context); } static void flushInstallQueue(Context context) { - String spKey = LauncherAppState.getSharedPreferencesKey(); - SharedPreferences sp = context.getSharedPreferences(spKey, Context.MODE_PRIVATE); + SharedPreferences sp = Utilities.getPrefs(context); ArrayList installQueue = getAndClearInstallQueue(sp, context); if (!installQueue.isEmpty()) { Iterator iter = installQueue.iterator(); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 6dc044d43b..caa3b8b868 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -426,8 +426,7 @@ public class Launcher extends Activity app.getInvariantDeviceProfile().landscapeProfile : app.getInvariantDeviceProfile().portraitProfile; - mSharedPrefs = getSharedPreferences(LauncherAppState.getSharedPreferencesKey(), - Context.MODE_PRIVATE); + mSharedPrefs = Utilities.getPrefs(this); mIsSafeModeEnabled = getPackageManager().isSafeMode(); mModel = app.setLauncher(this); mIconCache = app.getIconCache(); @@ -3636,12 +3635,10 @@ public class Launcher extends Activity opts.putAll(mLauncherCallbacks.getAdditionalSearchWidgetOptions()); } - SharedPreferences sp = getSharedPreferences( - LauncherAppState.getSharedPreferencesKey(), MODE_PRIVATE); - int widgetId = sp.getInt(QSB_WIDGET_ID, -1); + int widgetId = mSharedPrefs.getInt(QSB_WIDGET_ID, -1); AppWidgetProviderInfo widgetInfo = mAppWidgetManager.getAppWidgetInfo(widgetId); if (!searchProvider.provider.flattenToString().equals( - sp.getString(QSB_WIDGET_PROVIDER, null)) + mSharedPrefs.getString(QSB_WIDGET_PROVIDER, null)) || (widgetInfo == null) || !widgetInfo.provider.equals(searchProvider.provider)) { // A valid widget is not already bound. @@ -3659,7 +3656,7 @@ public class Launcher extends Activity widgetId = -1; } - sp.edit() + mSharedPrefs.edit() .putInt(QSB_WIDGET_ID, widgetId) .putString(QSB_WIDGET_PROVIDER, searchProvider.provider.flattenToString()) .commit(); diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index f75b33c54f..34b8382523 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -153,14 +153,10 @@ public class LauncherAppState { return sLauncherProvider.get(); } - public static String getSharedPreferencesKey() { - return LauncherFiles.SHARED_PREFERENCES_KEY; - } - public WidgetPreviewLoader getWidgetCache() { return mWidgetCache; } - + public void onWallpaperChanged() { mWallpaperChangedSinceLastCheck = true; } diff --git a/src/com/android/launcher3/LauncherClings.java b/src/com/android/launcher3/LauncherClings.java index 18fe8ef868..8f719e539a 100644 --- a/src/com/android/launcher3/LauncherClings.java +++ b/src/com/android/launcher3/LauncherClings.java @@ -73,9 +73,7 @@ class LauncherClings implements OnClickListener { LauncherModel.LOADER_FLAG_CLEAR_WORKSPACE | LauncherModel.LOADER_FLAG_MIGRATE_SHORTCUTS); // Set the flag to skip the folder cling - String spKey = LauncherAppState.getSharedPreferencesKey(); - SharedPreferences sp = mLauncher.getSharedPreferences(spKey, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sp.edit(); + SharedPreferences.Editor editor = Utilities.getPrefs(mLauncher).edit(); editor.putBoolean(Launcher.USER_HAS_MIGRATED, true); editor.apply(); // Disable the migration cling @@ -254,9 +252,7 @@ class LauncherClings implements OnClickListener { } public static void synchonouslyMarkFirstRunClingDismissed(Context ctx) { - SharedPreferences prefs = ctx.getSharedPreferences( - LauncherAppState.getSharedPreferencesKey(), Context.MODE_PRIVATE); - SharedPreferences.Editor editor = prefs.edit(); + SharedPreferences.Editor editor = Utilities.getPrefs(ctx).edit(); editor.putBoolean(WORKSPACE_CLING_DISMISSED_KEY, true); editor.commit(); } diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index a6fd282422..ef79cf85e2 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -257,17 +257,13 @@ public class LauncherProvider extends ContentProvider { case LauncherSettings.Settings.METHOD_GET_BOOLEAN: { Bundle result = new Bundle(); result.putBoolean(LauncherSettings.Settings.EXTRA_VALUE, - getContext().getSharedPreferences( - LauncherAppState.getSharedPreferencesKey(), Context.MODE_PRIVATE) - .getBoolean(arg, extras.getBoolean( - LauncherSettings.Settings.EXTRA_DEFAULT_VALUE))); + Utilities.getPrefs(getContext()).getBoolean(arg, extras.getBoolean( + LauncherSettings.Settings.EXTRA_DEFAULT_VALUE))); return result; } case LauncherSettings.Settings.METHOD_SET_BOOLEAN: { boolean value = extras.getBoolean(LauncherSettings.Settings.EXTRA_VALUE); - getContext().getSharedPreferences( - LauncherAppState.getSharedPreferencesKey(), Context.MODE_PRIVATE) - .edit().putBoolean(arg, value).apply(); + Utilities.getPrefs(getContext()).edit().putBoolean(arg, value).apply(); if (mListener != null) { mListener.onSettingsChanged(arg, value); } @@ -343,11 +339,7 @@ public class LauncherProvider extends ContentProvider { } public void clearFlagEmptyDbCreated() { - String spKey = LauncherAppState.getSharedPreferencesKey(); - getContext().getSharedPreferences(spKey, Context.MODE_PRIVATE) - .edit() - .remove(EMPTY_DATABASE_CREATED) - .commit(); + Utilities.getPrefs(getContext()).edit().remove(EMPTY_DATABASE_CREATED).commit(); } /** @@ -358,8 +350,7 @@ public class LauncherProvider extends ContentProvider { * 4) The default configuration for the particular device */ synchronized public void loadDefaultFavoritesIfNecessary() { - String spKey = LauncherAppState.getSharedPreferencesKey(); - SharedPreferences sp = getContext().getSharedPreferences(spKey, Context.MODE_PRIVATE); + SharedPreferences sp = Utilities.getPrefs(getContext()); if (sp.getBoolean(EMPTY_DATABASE_CREATED, false)) { Log.d(TAG, "loading default workspace"); @@ -635,15 +626,11 @@ public class LauncherProvider extends ContentProvider { } private void setFlagJustLoadedOldDb() { - String spKey = LauncherAppState.getSharedPreferencesKey(); - SharedPreferences sp = mContext.getSharedPreferences(spKey, Context.MODE_PRIVATE); - sp.edit().putBoolean(EMPTY_DATABASE_CREATED, false).commit(); + Utilities.getPrefs(mContext).edit().putBoolean(EMPTY_DATABASE_CREATED, false).commit(); } private void setFlagEmptyDbCreated() { - String spKey = LauncherAppState.getSharedPreferencesKey(); - SharedPreferences sp = mContext.getSharedPreferences(spKey, Context.MODE_PRIVATE); - sp.edit().putBoolean(EMPTY_DATABASE_CREATED, true).commit(); + Utilities.getPrefs(mContext).edit().putBoolean(EMPTY_DATABASE_CREATED, true).commit(); } @Override diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index 2ed9a25ada..d14d056fed 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -137,7 +137,7 @@ public final class Utilities { public static boolean isAllowRotationPrefEnabled(Context context, boolean multiProcess) { SharedPreferences sharedPrefs = context.getSharedPreferences( - LauncherAppState.getSharedPreferencesKey(), Context.MODE_PRIVATE | (multiProcess ? + LauncherFiles.SHARED_PREFERENCES_KEY, Context.MODE_PRIVATE | (multiProcess ? Context.MODE_MULTI_PROCESS : 0)); boolean allowRotationPref = sharedPrefs.getBoolean(ALLOW_ROTATION_PREFERENCE_KEY, false); return sForceEnableRotation || allowRotationPref; @@ -754,4 +754,9 @@ public final class Utilities { public static int longCompare(long lhs, long rhs) { return lhs < rhs ? -1 : (lhs == rhs ? 0 : 1); } + + public static SharedPreferences getPrefs(Context context) { + return context.getSharedPreferences( + LauncherFiles.SHARED_PREFERENCES_KEY, Context.MODE_PRIVATE); + } } diff --git a/src/com/android/launcher3/compat/UserManagerCompatVL.java b/src/com/android/launcher3/compat/UserManagerCompatVL.java index dc3ec3cd85..98d5eca5f8 100644 --- a/src/com/android/launcher3/compat/UserManagerCompatVL.java +++ b/src/com/android/launcher3/compat/UserManagerCompatVL.java @@ -25,7 +25,6 @@ import android.graphics.drawable.Drawable; import android.os.Build; import android.os.UserHandle; -import com.android.launcher3.LauncherAppState; import com.android.launcher3.Utilities; import com.android.launcher3.util.LongArrayMap; @@ -104,8 +103,7 @@ public class UserManagerCompatVL extends UserManagerCompatV17 { if (Utilities.ATLEAST_MARSHMALLOW) { return mUserManager.getUserCreationTime(user.getUser()); } - SharedPreferences prefs = mContext.getSharedPreferences( - LauncherAppState.getSharedPreferencesKey(), Context.MODE_PRIVATE); + SharedPreferences prefs = Utilities.getPrefs(mContext); String key = USER_CREATION_TIME_KEY + getSerialNumberForUser(user); if (!prefs.contains(key)) { prefs.edit().putLong(key, System.currentTimeMillis()).apply(); diff --git a/src/com/android/launcher3/model/MigrateFromRestoreTask.java b/src/com/android/launcher3/model/MigrateFromRestoreTask.java index ba33b02ce5..786ab6009a 100644 --- a/src/com/android/launcher3/model/MigrateFromRestoreTask.java +++ b/src/com/android/launcher3/model/MigrateFromRestoreTask.java @@ -71,7 +71,7 @@ public class MigrateFromRestoreTask { public MigrateFromRestoreTask(Context context) { mContext = context; - SharedPreferences prefs = prefs(context); + SharedPreferences prefs = Utilities.getPrefs(context); Point sourceSize = parsePoint(prefs.getString(KEY_MIGRATION_SOURCE_SIZE, "")); mSrcX = sourceSize.x; mSrcY = sourceSize.y; @@ -745,23 +745,19 @@ public class MigrateFromRestoreTask { public static void markForMigration(Context context, int srcX, int srcY, HashSet widgets) { - prefs(context).edit() + Utilities.getPrefs(context).edit() .putString(KEY_MIGRATION_SOURCE_SIZE, srcX + "," + srcY) .putStringSet(KEY_MIGRATION_WIDGET_MINSIZE, widgets) .apply(); } public static boolean shouldRunTask(Context context) { - return !TextUtils.isEmpty(prefs(context).getString(KEY_MIGRATION_SOURCE_SIZE, "")); + return !TextUtils.isEmpty(Utilities.getPrefs(context).getString(KEY_MIGRATION_SOURCE_SIZE, "")); } public static void clearFlags(Context context) { - prefs(context).edit().remove(KEY_MIGRATION_SOURCE_SIZE) + Utilities.getPrefs(context).edit().remove(KEY_MIGRATION_SOURCE_SIZE) .remove(KEY_MIGRATION_WIDGET_MINSIZE).commit(); } - private static SharedPreferences prefs(Context context) { - return context.getSharedPreferences(LauncherAppState.getSharedPreferencesKey(), - Context.MODE_PRIVATE); - } } diff --git a/src/com/android/launcher3/testing/ToggleWeightWatcher.java b/src/com/android/launcher3/testing/ToggleWeightWatcher.java index 15e55eea62..e08ec3aca0 100644 --- a/src/com/android/launcher3/testing/ToggleWeightWatcher.java +++ b/src/com/android/launcher3/testing/ToggleWeightWatcher.java @@ -1,13 +1,13 @@ package com.android.launcher3.testing; import android.app.Activity; -import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.view.View; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAppState; +import com.android.launcher3.Utilities; import com.android.launcher3.util.TestingUtils; public class ToggleWeightWatcher extends Activity { @@ -16,8 +16,7 @@ public class ToggleWeightWatcher extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - String spKey = LauncherAppState.getSharedPreferencesKey(); - SharedPreferences sp = getSharedPreferences(spKey, Context.MODE_PRIVATE); + SharedPreferences sp = Utilities.getPrefs(this); boolean show = sp.getBoolean(TestingUtils.SHOW_WEIGHT_WATCHER, true); show = !show; diff --git a/src/com/android/launcher3/util/TestingUtils.java b/src/com/android/launcher3/util/TestingUtils.java index 39b80463d5..665c371755 100644 --- a/src/com/android/launcher3/util/TestingUtils.java +++ b/src/com/android/launcher3/util/TestingUtils.java @@ -13,6 +13,7 @@ import com.android.launcher3.CustomAppWidget; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAppState; import com.android.launcher3.R; +import com.android.launcher3.Utilities; import java.util.HashMap; @@ -39,9 +40,7 @@ public class TestingUtils { public static void addWeightWatcher(Launcher launcher) { if (MEMORY_DUMP_ENABLED) { - String spKey = LauncherAppState.getSharedPreferencesKey(); - SharedPreferences sp = launcher.getSharedPreferences(spKey, Context.MODE_PRIVATE); - boolean show = sp.getBoolean(SHOW_WEIGHT_WATCHER, true); + boolean show = Utilities.getPrefs(launcher).getBoolean(SHOW_WEIGHT_WATCHER, true); int id = launcher.getResources().getIdentifier("zzz_weight_watcher", "layout", launcher.getPackageName()); diff --git a/tests/src/com/android/launcher3/RotationPreferenceTest.java b/tests/src/com/android/launcher3/RotationPreferenceTest.java index 5f63475579..17d961c5a5 100644 --- a/tests/src/com/android/launcher3/RotationPreferenceTest.java +++ b/tests/src/com/android/launcher3/RotationPreferenceTest.java @@ -28,8 +28,7 @@ public class RotationPreferenceTest extends InstrumentationTestCase { mDevice = UiDevice.getInstance(getInstrumentation()); mTargetContext = getInstrumentation().getTargetContext(); mTargetPackage = mTargetContext.getPackageName(); - mPrefs = mTargetContext.getSharedPreferences( - LauncherAppState.getSharedPreferencesKey(), Context.MODE_PRIVATE); + mPrefs = Utilities.getPrefs(mTargetContext); mOriginalRotationValue = mPrefs.getBoolean(Utilities.ALLOW_ROTATION_PREFERENCE_KEY, false); } From ec7c9178dd1f17cf8479acd4e0b4575a91cfb255 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 20 Oct 2015 10:31:09 -0700 Subject: [PATCH 081/219] Fixing ConcurrentModificationException in tests Change-Id: I7aabc62aa249dae979366ce2871604f5822f3139 --- .../com/android/launcher3/InvariantDeviceProfileTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java b/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java index 1bc7c1190f..a99ae4f958 100644 --- a/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java +++ b/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java @@ -52,9 +52,12 @@ public class InvariantDeviceProfileTest extends AndroidTestCase { public void testFindClosestDeviceProfile2() { for (InvariantDeviceProfile idf: mPredefinedDeviceProfiles) { + ArrayList predefinedProfilesCopy = + new ArrayList<>(mPredefinedDeviceProfiles); ArrayList closestProfiles = mInvariantProfile.findClosestDeviceProfiles( - idf.minWidthDps, idf.minHeightDps, mPredefinedDeviceProfiles); + idf.minWidthDps, idf.minHeightDps, predefinedProfilesCopy + ); assertTrue(closestProfiles.get(0).equals(idf)); } } From cd5b7f9fc64aebabe5a037f4a3376802209c1aa2 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 20 Oct 2015 15:17:00 -0700 Subject: [PATCH 082/219] Fixing disabled icon getting changed back to normal state on long press Change-Id: I4f35c1cbecfef7891f8b1187ba3be0af695d4fd5 --- src/com/android/launcher3/BubbleTextView.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index 70bf859927..c8f5a45945 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -252,6 +252,9 @@ public class BubbleTextView extends TextView FastBitmapDrawable d = (FastBitmapDrawable) mIcon; if (isPressed() || mStayPressed) { d.animateState(FastBitmapDrawable.State.PRESSED); + } else if (getTag() instanceof ShortcutInfo + && ((ShortcutInfo) getTag()).isDisabled != 0) { + d.animateState(FastBitmapDrawable.State.DISABLED); } else { d.animateState(FastBitmapDrawable.State.NORMAL); } From c2bc0ef1c313698fd931fc84ec2f11882c38cdba Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Tue, 20 Oct 2015 16:24:53 -0700 Subject: [PATCH 083/219] Fix regression where keyboard couldn't switch between workspace pages. Bug: 25122302 Change-Id: Id1d7628753ce7ef37af50e8594e541dcb6bea13e --- src/com/android/launcher3/util/FocusLogic.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/com/android/launcher3/util/FocusLogic.java b/src/com/android/launcher3/util/FocusLogic.java index 696eabe002..27ce3f1279 100644 --- a/src/com/android/launcher3/util/FocusLogic.java +++ b/src/com/android/launcher3/util/FocusLogic.java @@ -22,9 +22,6 @@ import android.view.View; import android.view.ViewGroup; import com.android.launcher3.CellLayout; -import com.android.launcher3.DeviceProfile; -import com.android.launcher3.Launcher; -import com.android.launcher3.LauncherAppState; import com.android.launcher3.ShortcutAndWidgetContainer; import java.util.Arrays; @@ -51,7 +48,7 @@ public class FocusLogic { private static final String TAG = "FocusLogic"; private static final boolean DEBUG = false; - // Item and page index related constant used by {@link #handleKeyEvent}. + /** Item and page index related constant used by {@link #handleKeyEvent}. */ public static final int NOOP = -1; public static final int PREVIOUS_PAGE_RIGHT_COLUMN = -2; @@ -94,7 +91,7 @@ public class FocusLogic { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_LEFT: newIndex = handleDpadHorizontal(iconIdx, cntX, cntY, map, -1 /*increment*/); - if (isRtl && newIndex == NOOP && pageIndex > 0) { + if (!isRtl && newIndex == NOOP && pageIndex > 0) { newIndex = PREVIOUS_PAGE_RIGHT_COLUMN; } else if (isRtl && newIndex == NOOP && pageIndex < pageCount - 1) { newIndex = NEXT_PAGE_RIGHT_COLUMN; @@ -102,7 +99,7 @@ public class FocusLogic { break; case KeyEvent.KEYCODE_DPAD_RIGHT: newIndex = handleDpadHorizontal(iconIdx, cntX, cntY, map, 1 /*increment*/); - if (isRtl && newIndex == NOOP && pageIndex < pageCount - 1) { + if (!isRtl && newIndex == NOOP && pageIndex < pageCount - 1) { newIndex = NEXT_PAGE_LEFT_COLUMN; } else if (isRtl && newIndex == NOOP && pageIndex > 0) { newIndex = PREVIOUS_PAGE_LEFT_COLUMN; From 6ce85953acf0399965c6c8a75f5e6eea5a643678 Mon Sep 17 00:00:00 2001 From: Geoff Mendal Date: Wed, 21 Oct 2015 08:02:37 -0700 Subject: [PATCH 084/219] Import translations. DO NOT MERGE Change-Id: I1cea6130293678ef0d5da961d11428f14e62ee25 Auto-generated-cl: translation import --- res/values-fr-rCA/strings.xml | 2 +- res/values-zh-rCN/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index c3e3cb0c22..c24a34ca07 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -46,7 +46,7 @@ "Permet à l\'application de lire les paramètres et les raccourcis de l\'écran d\'accueil." "enregistrer les paramètres de la page d\'accueil et des raccourcis" "Permet à l\'application de modifier les paramètres et les raccourcis de l\'écran d\'accueil." - "%1$s n\'est pas autorisée à faire des appels téléphoniques" + "L\'application %1$s n\'est pas autorisée à faire des appels téléphoniques" "Problème lors du chargement du widget" "Configuration" "Impossible de désinstaller cette application, car il s\'agit d\'une application système." diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 8ac167d71d..d4f7755709 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -46,7 +46,7 @@ "允许应用读取主屏幕中的设置和快捷方式。" "写入主屏幕设置和快捷方式" "允许应用更改主屏幕中的设置和快捷方式。" - "不允许使用%1$s拨打电话" + "不允许使用“%1$s”拨打电话" "加载小部件时出现问题" "设置" "这是系统应用,无法卸载。" From 8a9f7abcf169e0dbd38e8ea4be9e1229f8f71488 Mon Sep 17 00:00:00 2001 From: Geoff Mendal Date: Wed, 21 Oct 2015 08:03:43 -0700 Subject: [PATCH 085/219] Import translations. DO NOT MERGE Change-Id: I4f645e8f071559ad56ee7963934f1039b06d6e96 Auto-generated-cl: translation import --- res/values-fr-rCA/strings.xml | 2 +- res/values-zh-rCN/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 0d3439de77..2b05477eda 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -46,7 +46,7 @@ "Permet à l\'application de lire les paramètres et les raccourcis de l\'écran d\'accueil." "enregistrer les paramètres de la page d\'accueil et des raccourcis" "Permet à l\'application de modifier les paramètres et les raccourcis de l\'écran d\'accueil." - "%1$s n\'est pas autorisée à faire des appels téléphoniques" + "L\'application %1$s n\'est pas autorisée à faire des appels téléphoniques" "Problème lors du chargement du widget" "Configuration" "Impossible de désinstaller cette application, car il s\'agit d\'une application système." diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 0b47a6108a..b42e0216f4 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -46,7 +46,7 @@ "允许应用读取主屏幕中的设置和快捷方式。" "写入主屏幕设置和快捷方式" "允许应用更改主屏幕中的设置和快捷方式。" - "不允许使用%1$s拨打电话" + "不允许使用“%1$s”拨打电话" "加载小部件时出现问题" "设置" "这是系统应用,无法卸载。" From eef443248a86bdb2dc5c21e81d3eeaef67a695bc Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Tue, 20 Oct 2015 13:24:36 -0700 Subject: [PATCH 086/219] Set search bar height before setting up views in Launcher. This ensures that the QSB widget options are set correctly the first time they are used. Bug: 24704753 Change-Id: I2bb13ff012b6f13ca076deed61f0b08a7037e2fa --- src/com/android/launcher3/DeviceProfile.java | 20 +++++++++++--------- src/com/android/launcher3/Launcher.java | 6 ++++++ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 5778763a4a..ed6b7d7a86 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -104,7 +104,6 @@ public class DeviceProfile { private int searchBarSpaceWidthPx; private int searchBarSpaceHeightNormalPx, searchBarSpaceHeightTallPx; private int searchBarSpaceHeightPx; // One of the above. - private int searchBarHeight = LauncherCallbacks.SEARCH_BAR_HEIGHT_NORMAL; public DeviceProfile(Context context, InvariantDeviceProfile inv, Point minSize, Point maxSize, @@ -396,6 +395,17 @@ public class DeviceProfile { return visibleChildren; } + // TODO(twickham): b/25154513 + public void setSearchBarHeight(int searchBarHeight) { + if (searchBarHeight == LauncherCallbacks.SEARCH_BAR_HEIGHT_TALL) { + hotseatBarHeightPx = hotseatBarHeightShortPx; + searchBarSpaceHeightPx = searchBarSpaceHeightTallPx; + } else { + hotseatBarHeightPx = hotseatBarHeightNormalPx; + searchBarSpaceHeightPx = searchBarSpaceHeightNormalPx; + } + } + public void layout(Launcher launcher) { FrameLayout.LayoutParams lp; boolean hasVerticalBarLayout = isVerticalBarLayout(); @@ -404,14 +414,6 @@ public class DeviceProfile { // Layout the search bar space View searchBar = launcher.getSearchDropTargetBar(); lp = (FrameLayout.LayoutParams) searchBar.getLayoutParams(); - searchBarHeight = launcher.getSearchBarHeight(); - if (searchBarHeight == LauncherCallbacks.SEARCH_BAR_HEIGHT_TALL) { - hotseatBarHeightPx = hotseatBarHeightShortPx; - searchBarSpaceHeightPx = searchBarSpaceHeightTallPx; - } else { - hotseatBarHeightPx = hotseatBarHeightNormalPx; - searchBarSpaceHeightPx = searchBarSpaceHeightNormalPx; - } if (hasVerticalBarLayout) { // Vertical search bar space -- The search bar is fixed in the layout to be on the left // of the screen regardless of RTL diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index caa3b8b868..426a77f327 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -454,6 +454,8 @@ public class Launcher extends Activity setContentView(R.layout.launcher); + app.getInvariantDeviceProfile().landscapeProfile.setSearchBarHeight(getSearchBarHeight()); + app.getInvariantDeviceProfile().portraitProfile.setSearchBarHeight(getSearchBarHeight()); setupViews(); mDeviceProfile.layout(this); @@ -3630,6 +3632,10 @@ public class Launcher extends Activity opts.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, minHeight); opts.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH, maxWidth); opts.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, minWidth); + if (LOGD) { + Log.d(TAG, "QSB widget options: maxHeight=" + maxHeight + " minHeight=" + minHeight + + " maxWidth=" + maxWidth + " minWidth=" + minWidth); + } if (mLauncherCallbacks != null) { opts.putAll(mLauncherCallbacks.getAdditionalSearchWidgetOptions()); From 935fca185741e51ab634e5df63c6369d2d55dba5 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 13 Oct 2015 10:19:01 -0700 Subject: [PATCH 087/219] Do not animate folder when it is closed while changing activity state Bug: 21733536 Change-Id: I36aa3041b9300c917e320b511e00a1721e44f854 --- src/com/android/launcher3/Folder.java | 55 ++++++++++--------- src/com/android/launcher3/Launcher.java | 31 +++++++---- .../LauncherAccessibilityDelegate.java | 2 +- 3 files changed, 50 insertions(+), 38 deletions(-) diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index fb9d95a201..9377bad6d2 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -414,7 +414,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList /** * Creates a new UserFolder, inflated from R.layout.user_folder. * - * @param context The application's context. + * @param launcher The main activity. * * @return A new UserFolder. */ @@ -639,9 +639,8 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList oa.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - onCloseComplete(); setLayerType(LAYER_TYPE_NONE, null); - mState = STATE_SMALL; + close(); } @Override public void onAnimationStart(Animator animation) { @@ -655,6 +654,32 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList oa.start(); } + public void close() { + // TODO: Clear all active animations. + DragLayer parent = (DragLayer) getParent(); + if (parent != null) { + parent.removeView(this); + } + mDragController.removeDropTarget(this); + clearFocus(); + mFolderIcon.requestFocus(); + + if (mRearrangeOnClose) { + rearrangeChildren(); + mRearrangeOnClose = false; + } + if (getItemCount() <= 1) { + if (!mDragInProgress && !mSuppressFolderDeletion) { + replaceFolderWithFinalItem(); + } else if (mDragInProgress) { + mDeleteFolderOnDropCompleted = true; + } + } + mSuppressFolderDeletion = false; + clearDragInfo(); + mState = STATE_SMALL; + } + public boolean acceptDrop(DragObject d) { final ItemInfo item = (ItemInfo) d.dragInfo; final int itemType = item.itemType; @@ -1087,30 +1112,6 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList return mContent.getItemCount(); } - @Thunk void onCloseComplete() { - DragLayer parent = (DragLayer) getParent(); - if (parent != null) { - parent.removeView(this); - } - mDragController.removeDropTarget((DropTarget) this); - clearFocus(); - mFolderIcon.requestFocus(); - - if (mRearrangeOnClose) { - rearrangeChildren(); - mRearrangeOnClose = false; - } - if (getItemCount() <= 1) { - if (!mDragInProgress && !mSuppressFolderDeletion) { - replaceFolderWithFinalItem(); - } else if (mDragInProgress) { - mDeleteFolderOnDropCompleted = true; - } - } - mSuppressFolderDeletion = false; - clearDragInfo(); - } - @Thunk void replaceFolderWithFinalItem() { // Add the last remaining child to the workspace in place of the folder Runnable onCompleteRunnable = new Runnable() { diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index caa3b8b868..7ba9cc8ca4 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1906,7 +1906,7 @@ public class Launcher extends Activity // In all these cases, only animate if we're already on home mWorkspace.exitWidgetResizeMode(); - closeFolder(); + closeFolder(alreadyOnHome); exitSpringLoadedDragMode(); // If we are already on home, then just animate back to the workspace, @@ -1988,7 +1988,7 @@ public class Launcher extends Activity outState.putInt(RUNTIME_STATE, mState.ordinal()); // We close any open folder since it will not be re-opened, and we need to make sure // this state is reflected. - closeFolder(); + closeFolder(false); if (mPendingAddInfo.container != ItemInfo.NO_ID && mPendingAddInfo.screenId > -1 && mWaitingForResult) { @@ -2782,7 +2782,7 @@ public class Launcher extends Activity if (openFolder != null) { folderScreen = mWorkspace.getPageForView(openFolder); // .. and close it - closeFolder(openFolder); + closeFolder(openFolder, true); if (folderScreen != mWorkspace.getCurrentPage()) { // Close any folder open on the current screen closeFolder(); @@ -3122,7 +3122,7 @@ public class Launcher extends Activity oa.start(); } - private void shrinkAndFadeInFolderIcon(final FolderIcon fi) { + private void shrinkAndFadeInFolderIcon(final FolderIcon fi, boolean animate) { if (fi == null) return; PropertyValuesHolder alpha = PropertyValuesHolder.ofFloat("alpha", 1.0f); PropertyValuesHolder scaleX = PropertyValuesHolder.ofFloat("scaleX", 1.0f); @@ -3148,6 +3148,9 @@ public class Launcher extends Activity } }); oa.start(); + if (!animate) { + oa.end(); + } } /** @@ -3191,30 +3194,38 @@ public class Launcher extends Activity } public void closeFolder() { + closeFolder(true); + } + + public void closeFolder(boolean animate) { Folder folder = mWorkspace != null ? mWorkspace.getOpenFolder() : null; if (folder != null) { if (folder.isEditingName()) { folder.dismissEditingName(); } - closeFolder(folder); + closeFolder(folder, animate); } } - public void closeFolder(Folder folder) { + public void closeFolder(Folder folder, boolean animate) { folder.getInfo().opened = false; ViewGroup parent = (ViewGroup) folder.getParent().getParent(); if (parent != null) { FolderIcon fi = (FolderIcon) mWorkspace.getViewForTag(folder.mInfo); - shrinkAndFadeInFolderIcon(fi); + shrinkAndFadeInFolderIcon(fi, animate); if (fi != null) { ((CellLayout.LayoutParams) fi.getLayoutParams()).canReorder = true; } } - folder.animateClosed(); + if (animate) { + folder.animateClosed(); + } else { + folder.close(); + } - // Notify the accessibility manager that this folder "window" has disappeard and no - // longer occludeds the workspace items + // Notify the accessibility manager that this folder "window" has disappeared and no + // longer occludes the workspace items getDragLayer().sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); } diff --git a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java index 2233ebb7aa..2306b776ed 100644 --- a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java +++ b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java @@ -172,7 +172,7 @@ public class LauncherAccessibilityDelegate extends AccessibilityDelegate impleme return true; } else if (action == MOVE_TO_WORKSPACE) { Folder folder = mLauncher.getWorkspace().getOpenFolder(); - mLauncher.closeFolder(folder); + mLauncher.closeFolder(folder, true); ShortcutInfo info = (ShortcutInfo) item; folder.getInfo().remove(info); From eb804b6aacb3d0d044273a1d4194abb994b9e10d Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 21 Oct 2015 13:56:59 -0700 Subject: [PATCH 088/219] Hide the "Set Wallpaper" action bar when clicked. This already happens everywhere except for the case where an external app such as Photos started the wallpaper picker. So not only is this more consistent, it also prevents crashes and other potential issues caused by clicking "Set Wallpaper" too many times. Bug: 25026717 Change-Id: I63c6a0ce68656e6e68094e88074a836d8c1034f9 --- .../src/com/android/launcher3/WallpaperCropActivity.java | 1 + 1 file changed, 1 insertion(+) diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java index b717b597c7..9af5f16534 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java @@ -123,6 +123,7 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb new View.OnClickListener() { @Override public void onClick(View v) { + actionBar.hide(); boolean finishActivityWhenDone = true; // Never fade on finish because we return to the app that started us (e.g. // Photos), not the home screen. From df315180f0653702b470beea62f27927e45fab4b Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 21 Oct 2015 17:50:22 -0700 Subject: [PATCH 089/219] Don't add cells to FocusLogic sparse matrix if they aren't focusable. Previously, any child of ShortcutAndWidgetContainer was added to the matrix, causing widgets (which aren't focusable) to be considered as potential targets to gain focus when an arrow key was pressed. But if the algorithm chose them, they couldn't take the focus so nothing happened (i.e. the focus stayed on the app/folder it was on before). Bug: 25126768 Change-Id: Id55fc310f7f58fb8795cce51dcefe4fd1210f788 --- .../android/launcher3/util/FocusLogic.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/com/android/launcher3/util/FocusLogic.java b/src/com/android/launcher3/util/FocusLogic.java index 27ce3f1279..7f0da77e45 100644 --- a/src/com/android/launcher3/util/FocusLogic.java +++ b/src/com/android/launcher3/util/FocusLogic.java @@ -165,8 +165,12 @@ public class FocusLogic { // Iterate thru the children. for (int i = 0; i < parent.getChildCount(); i++ ) { - int cx = ((CellLayout.LayoutParams) parent.getChildAt(i).getLayoutParams()).cellX; - int cy = ((CellLayout.LayoutParams) parent.getChildAt(i).getLayoutParams()).cellY; + View cell = parent.getChildAt(i); + if (!cell.isFocusable()) { + continue; + } + int cx = ((CellLayout.LayoutParams) cell.getLayoutParams()).cellX; + int cy = ((CellLayout.LayoutParams) cell.getLayoutParams()).cellY; matrix[invert ? (m - cx - 1) : cx][cy] = i; } if (DEBUG) { @@ -199,8 +203,12 @@ public class FocusLogic { // Iterate thru the children of the top parent. for (int i = 0; i < iconParent.getChildCount(); i++) { - int cx = ((CellLayout.LayoutParams) iconParent.getChildAt(i).getLayoutParams()).cellX; - int cy = ((CellLayout.LayoutParams) iconParent.getChildAt(i).getLayoutParams()).cellY; + View cell = iconParent.getChildAt(i); + if (!cell.isFocusable()) { + continue; + } + int cx = ((CellLayout.LayoutParams) cell.getLayoutParams()).cellX; + int cy = ((CellLayout.LayoutParams) cell.getLayoutParams()).cellY; matrix[cx][cy] = i; } @@ -253,8 +261,12 @@ public class FocusLogic { // Iterate thru the children of the top parent. for (int i = 0; i < iconParent.getChildCount(); i++) { - int cx = ((CellLayout.LayoutParams) iconParent.getChildAt(i).getLayoutParams()).cellX; - int cy = ((CellLayout.LayoutParams) iconParent.getChildAt(i).getLayoutParams()).cellY; + View cell = iconParent.getChildAt(i); + if (!cell.isFocusable()) { + continue; + } + int cx = ((CellLayout.LayoutParams) cell.getLayoutParams()).cellX; + int cy = ((CellLayout.LayoutParams) cell.getLayoutParams()).cellY; if (pivotX < 0) { matrix[cx - pivotX][cy] = i; } else { From c1739096b44770cd9a3894970f9e86b29043ead9 Mon Sep 17 00:00:00 2001 From: Tony Date: Sun, 25 Oct 2015 17:39:37 -0700 Subject: [PATCH 090/219] Add null check in Launcher onNewIntent() before moveToDefaultScreen(). There is a race condition that occurs primarily (maybe entirely) with Android Auto, it seems because they hijack the Home intent or something similar. I'm not exactly sure how Android Auto works, but if I pair my phone with the Desktop Head Unit (car dashboard emulator), I can repro the NPE fairly easily by simply force closing Android Auto and then disconnecting my phone from the DHU. If I don't force close Android Auto, then pressing home launches Android Auto or other apps that I assume handle some custom intent, such as Car Home Ultra, instead of normal Home intents such as Launcher3/Google Now Launcher. So I think what's happening is that, when the phone is disconnected from the car, Android Auto restores and launches the real home intent (Launcher 3) around the same time that it destroys the previous home intent (Android Auto, Car Home Ultra, etc.). This could cause the NPE if both intents are actually Launcher 3, as is the case when Android Auto is already closed, because mWorkspace is set to null in Launcher#onDestroy() (something like onNewIntent() --> post() called --> onDestroy() --> post() runs). This is consistent with the fact that I can guarantee a repro if I use postDelayed() instead of post(). Long-winded explanation aside, I think this fix is safe, especially since we already have a null check for mWorkspace in onNewIntent(), just not inside the post(). Bug: 24610231 Change-Id: I42f75b83946f375d947be1961a1f2a03a3707a84 --- src/com/android/launcher3/Launcher.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 6dc044d43b..c7229f0ae6 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1920,7 +1920,7 @@ public class Launcher extends Activity final View v = getWindow().peekDecorView(); if (v != null && v.getWindowToken() != null) { - InputMethodManager imm = (InputMethodManager)getSystemService( + InputMethodManager imm = (InputMethodManager) getSystemService( INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } @@ -1959,7 +1959,9 @@ public class Launcher extends Activity mWorkspace.post(new Runnable() { @Override public void run() { - mWorkspace.moveToDefaultScreen(true); + if (mWorkspace != null) { + mWorkspace.moveToDefaultScreen(true); + } } }); } From 1ba7e36cc8901b34b91d06fdc868a63f9a8fad2d Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 26 Oct 2015 10:42:12 -0700 Subject: [PATCH 091/219] Fixing null check when calling mutateOnMainThread Bug: 25269169 Change-Id: I74f7fb833a374f59a16487099f1bf72b086e88ee --- src/com/android/launcher3/WidgetPreviewLoader.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java index 603b07278f..10c1053266 100644 --- a/src/com/android/launcher3/WidgetPreviewLoader.java +++ b/src/com/android/launcher3/WidgetPreviewLoader.java @@ -428,8 +428,9 @@ public class WidgetPreviewLoader { float iconScale = Math.min((float) smallestSide / (appIconSize + 2 * minOffset), scale); try { - Drawable icon = mutateOnMainThread(mManager.loadIcon(info, mIconCache)); + Drawable icon = mManager.loadIcon(info, mIconCache); if (icon != null) { + icon = mutateOnMainThread(icon); int hoffset = (int) ((tileW - appIconSize * iconScale) / 2) + x; int yoffset = (int) ((tileH - appIconSize * iconScale) / 2); icon.setBounds(hoffset, yoffset, From 097db343a47df5e70692f485a034e179f9a32fe7 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 28 Oct 2015 14:29:14 -0700 Subject: [PATCH 092/219] Setting statusbar and nav bar colors in theme instead of code Change-Id: I4da50809d14f5fa4e47df47fcfd99df7b713950d --- .../res/values-sw720dp-v19/styles.xml | 26 ------------------- WallpaperPicker/res/values-sw720dp/styles.xml | 6 ++++- WallpaperPicker/res/values-v21/styles.xml | 4 +-- src/com/android/launcher3/Launcher.java | 22 ---------------- 4 files changed, 7 insertions(+), 51 deletions(-) delete mode 100644 WallpaperPicker/res/values-sw720dp-v19/styles.xml diff --git a/WallpaperPicker/res/values-sw720dp-v19/styles.xml b/WallpaperPicker/res/values-sw720dp-v19/styles.xml deleted file mode 100644 index d8dab223a1..0000000000 --- a/WallpaperPicker/res/values-sw720dp-v19/styles.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - diff --git a/WallpaperPicker/res/values-sw720dp/styles.xml b/WallpaperPicker/res/values-sw720dp/styles.xml index 12f8884f18..0058f7e38c 100644 --- a/WallpaperPicker/res/values-sw720dp/styles.xml +++ b/WallpaperPicker/res/values-sw720dp/styles.xml @@ -18,7 +18,11 @@ --> - diff --git a/WallpaperPicker/res/values-v21/styles.xml b/WallpaperPicker/res/values-v21/styles.xml index 70220edb9b..de4b2f2af5 100644 --- a/WallpaperPicker/res/values-v21/styles.xml +++ b/WallpaperPicker/res/values-v21/styles.xml @@ -34,8 +34,8 @@ diff --git a/src/com/android/launcher3/PreloadIconDrawable.java b/src/com/android/launcher3/PreloadIconDrawable.java index 908c8b9e28..a31ae0bb0f 100644 --- a/src/com/android/launcher3/PreloadIconDrawable.java +++ b/src/com/android/launcher3/PreloadIconDrawable.java @@ -60,7 +60,7 @@ class PreloadIconDrawable extends Drawable { public void applyPreloaderTheme(Theme t) { TypedArray ta = t.obtainStyledAttributes(R.styleable.PreloadIconDrawable); - mBgDrawable = ta.getDrawable(R.styleable.PreloadIconDrawable_background); + mBgDrawable = ta.getDrawable(R.styleable.PreloadIconDrawable_ringBackground); mBgDrawable.setFilterBitmap(true); mPaint.setStrokeWidth(ta.getDimension(R.styleable.PreloadIconDrawable_indicatorSize, 0)); mRingOutset = ta.getDimensionPixelSize(R.styleable.PreloadIconDrawable_ringOutset, 0); diff --git a/src/com/android/launcher3/widget/WidgetsListAdapter.java b/src/com/android/launcher3/widget/WidgetsListAdapter.java index 00696c86b2..f2d00271eb 100644 --- a/src/com/android/launcher3/widget/WidgetsListAdapter.java +++ b/src/com/android/launcher3/widget/WidgetsListAdapter.java @@ -16,7 +16,9 @@ package com.android.launcher3.widget; import android.annotation.TargetApi; +import android.content.Context; import android.content.pm.ResolveInfo; +import android.content.res.Resources; import android.os.Build; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.Adapter; @@ -25,10 +27,10 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; -import android.view.ViewGroup.MarginLayoutParams; import android.widget.LinearLayout; import com.android.launcher3.BubbleTextView; +import com.android.launcher3.DeviceProfile; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherAppWidgetProviderInfo; From d31dcbcc7c7901959c65c4e635e59274a1d4c334 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Tue, 23 Feb 2016 11:36:21 -0800 Subject: [PATCH 174/219] Manual revert due to conflict: Revert "Load label in bg thread to prevent ANR b/27238970" This reverts commit b62fd0957607ae54c7bca7ce64eed288a11f0f2f. Change-Id: Ia751e3414fb24a18bb8bb9ca09dcd93d0e4249f6 --- .../android/launcher3/model/WidgetsModel.java | 33 +---------------- .../android/launcher3/widget/WidgetCell.java | 37 ++++++++++++------- .../launcher3/widget/WidgetsListAdapter.java | 16 +++++--- 3 files changed, 34 insertions(+), 52 deletions(-) diff --git a/src/com/android/launcher3/model/WidgetsModel.java b/src/com/android/launcher3/model/WidgetsModel.java index 5051e62207..99a53ff369 100644 --- a/src/com/android/launcher3/model/WidgetsModel.java +++ b/src/com/android/launcher3/model/WidgetsModel.java @@ -3,7 +3,6 @@ package com.android.launcher3.model; import android.content.ComponentName; import android.content.Context; -import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.util.Log; @@ -17,7 +16,6 @@ import com.android.launcher3.Utilities; import com.android.launcher3.compat.AlphabeticIndexCompat; import com.android.launcher3.compat.AppWidgetManagerCompat; import com.android.launcher3.compat.UserHandleCompat; -import com.android.launcher3.util.ComponentKey; import java.util.ArrayList; import java.util.Collections; @@ -41,11 +39,7 @@ public class WidgetsModel { /* Map of widgets and shortcuts that are tracked per package. */ private final HashMap> mWidgetsList; - /* Labels of widgets */ - private final HashMap mLabels; - private final AppWidgetManagerCompat mAppWidgetMgr; - private final PackageManager mPackageMgr; private final WidgetsAndShortcutNameComparator mWidgetAndShortcutNameComparator; private final Comparator mAppNameComparator; private final IconCache mIconCache; @@ -56,7 +50,6 @@ public class WidgetsModel { public WidgetsModel(Context context, IconCache iconCache, AppFilter appFilter) { mAppWidgetMgr = AppWidgetManagerCompat.getInstance(context); - mPackageMgr = context.getPackageManager(); mWidgetAndShortcutNameComparator = new WidgetsAndShortcutNameComparator(context); mAppNameComparator = (new AppNameComparator(context)).getAppInfoComparator(); mIconCache = iconCache; @@ -64,14 +57,13 @@ public class WidgetsModel { mIndexer = new AlphabeticIndexCompat(context); mPackageItemInfos = new ArrayList<>(); mWidgetsList = new HashMap<>(); + mRawList = new ArrayList<>(); - mLabels = new HashMap<>(); } @SuppressWarnings("unchecked") private WidgetsModel(WidgetsModel model) { mAppWidgetMgr = model.mAppWidgetMgr; - mPackageMgr = model.mPackageMgr; mPackageItemInfos = (ArrayList) model.mPackageItemInfos.clone(); mWidgetsList = (HashMap>) model.mWidgetsList.clone(); mWidgetAndShortcutNameComparator = model.mWidgetAndShortcutNameComparator; @@ -80,7 +72,6 @@ public class WidgetsModel { mAppFilter = model.mAppFilter; mIndexer = model.mIndexer; mRawList = (ArrayList) model.mRawList.clone(); - mLabels = (HashMap) model.mLabels.clone(); } // Access methods that may be deleted if the private fields are made package-private. @@ -96,22 +87,6 @@ public class WidgetsModel { return mPackageItemInfos.get(pos); } - public CharSequence getLabel(Object info) { - ComponentKey key; - if (info instanceof LauncherAppWidgetProviderInfo) { - key = new ComponentKey(((LauncherAppWidgetProviderInfo) info).provider, - mAppWidgetMgr.getUser(((LauncherAppWidgetProviderInfo) info))); - return mLabels.get(key); - } else if (info instanceof ResolveInfo) { - ResolveInfo ri = (ResolveInfo) info; - ComponentName componentName = new ComponentName(ri.activityInfo.packageName, - ri.activityInfo.name); - key = new ComponentKey(componentName, UserHandleCompat.myUserHandle()); - return mLabels.get(key); - } - return null; - } - public List getSortedWidgets(int pos) { return mWidgetsList.get(mPackageItemInfos.get(pos)); } @@ -134,7 +109,6 @@ public class WidgetsModel { // clear the lists. mWidgetsList.clear(); mPackageItemInfos.clear(); - mLabels.clear(); mWidgetAndShortcutNameComparator.reset(); InvariantDeviceProfile idp = LauncherAppState.getInstance().getInvariantDeviceProfile(); @@ -144,7 +118,6 @@ public class WidgetsModel { String packageName = ""; UserHandleCompat userHandle = null; ComponentName componentName = null; - ComponentKey key = null; if (o instanceof LauncherAppWidgetProviderInfo) { LauncherAppWidgetProviderInfo widgetInfo = (LauncherAppWidgetProviderInfo) o; @@ -164,16 +137,12 @@ public class WidgetsModel { } continue; } - key = new ComponentKey(componentName, userHandle); - mLabels.put(key, mAppWidgetMgr.loadLabel(widgetInfo)); } else if (o instanceof ResolveInfo) { ResolveInfo resolveInfo = (ResolveInfo) o; componentName = new ComponentName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name); packageName = resolveInfo.activityInfo.packageName; userHandle = UserHandleCompat.myUserHandle(); - key = new ComponentKey(componentName, userHandle); - mLabels.put(key, resolveInfo.loadLabel(mPackageMgr)); } if (componentName == null || userHandle == null) { diff --git a/src/com/android/launcher3/widget/WidgetCell.java b/src/com/android/launcher3/widget/WidgetCell.java index 75c84c32f6..94bbd929fb 100644 --- a/src/com/android/launcher3/widget/WidgetCell.java +++ b/src/com/android/launcher3/widget/WidgetCell.java @@ -136,23 +136,32 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener { } /** - * Apply the widget provider info or the resolve info to the view. + * Apply the widget provider info to the view. */ - public void applyFromInfo(Object info, CharSequence label, - WidgetPreviewLoader loader) { + public void applyFromAppWidgetProviderInfo(LauncherAppWidgetProviderInfo info, + WidgetPreviewLoader loader) { + + InvariantDeviceProfile profile = + LauncherAppState.getInstance().getInvariantDeviceProfile(); mInfo = info; - mWidgetName.setText(label); + // TODO(hyunyoungs): setup a cache for these labels. + mWidgetName.setText(AppWidgetManagerCompat.getInstance(getContext()).loadLabel(info)); + int hSpan = Math.min(info.spanX, profile.numColumns); + int vSpan = Math.min(info.spanY, profile.numRows); + mWidgetDims.setText(String.format(mDimensionsFormatString, hSpan, vSpan)); + mWidgetPreviewLoader = loader; + } + + /** + * Apply the resolve info to the view. + */ + public void applyFromResolveInfo( + PackageManager pm, ResolveInfo info, WidgetPreviewLoader loader) { + mInfo = info; + CharSequence label = info.loadLabel(pm); + mWidgetName.setText(label); + mWidgetDims.setText(String.format(mDimensionsFormatString, 1, 1)); mWidgetPreviewLoader = loader; - if (info instanceof LauncherAppWidgetProviderInfo) { - InvariantDeviceProfile profile = - LauncherAppState.getInstance().getInvariantDeviceProfile(); - int hSpan = Math.min(((LauncherAppWidgetProviderInfo)info).spanX, profile.numColumns); - int vSpan = Math.min(((LauncherAppWidgetProviderInfo)info).spanY, profile.numRows); - mWidgetDims.setText(String.format(mDimensionsFormatString, hSpan, vSpan)); - } - if (info instanceof ResolveInfo) { - mWidgetDims.setText(String.format(mDimensionsFormatString, 1, 1)); - } } public int[] getPreviewSize() { diff --git a/src/com/android/launcher3/widget/WidgetsListAdapter.java b/src/com/android/launcher3/widget/WidgetsListAdapter.java index f2d00271eb..885d96fe5f 100644 --- a/src/com/android/launcher3/widget/WidgetsListAdapter.java +++ b/src/com/android/launcher3/widget/WidgetsListAdapter.java @@ -139,13 +139,17 @@ public class WidgetsListAdapter extends Adapter { } for (int i=0; i < infoList.size(); i++) { WidgetCell widget = (WidgetCell) row.getChildAt(i); - Object info = infoList.get(i); - if (info instanceof LauncherAppWidgetProviderInfo) { - widget.setTag(new PendingAddWidgetInfo(mLauncher, (LauncherAppWidgetProviderInfo)info, null)); - } else if (info instanceof ResolveInfo) { - widget.setTag(new PendingAddShortcutInfo(((ResolveInfo) info).activityInfo)); + if (infoList.get(i) instanceof LauncherAppWidgetProviderInfo) { + LauncherAppWidgetProviderInfo info = (LauncherAppWidgetProviderInfo) infoList.get(i); + PendingAddWidgetInfo pawi = new PendingAddWidgetInfo(mLauncher, info, null); + widget.setTag(pawi); + widget.applyFromAppWidgetProviderInfo(info, mWidgetPreviewLoader); + } else if (infoList.get(i) instanceof ResolveInfo) { + ResolveInfo info = (ResolveInfo) infoList.get(i); + PendingAddShortcutInfo pasi = new PendingAddShortcutInfo(info.activityInfo); + widget.setTag(pasi); + widget.applyFromResolveInfo(mLauncher.getPackageManager(), info, mWidgetPreviewLoader); } - widget.applyFromInfo(info, mWidgetsModel.getLabel(info), mWidgetPreviewLoader); widget.ensurePreview(); widget.setVisibility(View.VISIBLE); } From 72bb7b6125106b44422a037e5e89b3e9ea25f994 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 23 Feb 2016 16:25:42 -0800 Subject: [PATCH 175/219] Defining the base state of the Launcher theme, in case the platform has different defaults Bug: 27226038 Change-Id: Ic552e4c17551117236d018656fdf39b29fb06345 --- WallpaperPicker/res/values-v21/styles.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/WallpaperPicker/res/values-v21/styles.xml b/WallpaperPicker/res/values-v21/styles.xml index de4b2f2af5..d2f7dd44ff 100644 --- a/WallpaperPicker/res/values-v21/styles.xml +++ b/WallpaperPicker/res/values-v21/styles.xml @@ -34,6 +34,9 @@ diff --git a/src/com/android/launcher3/PreloadIconDrawable.java b/src/com/android/launcher3/PreloadIconDrawable.java index a31ae0bb0f..908c8b9e28 100644 --- a/src/com/android/launcher3/PreloadIconDrawable.java +++ b/src/com/android/launcher3/PreloadIconDrawable.java @@ -60,7 +60,7 @@ class PreloadIconDrawable extends Drawable { public void applyPreloaderTheme(Theme t) { TypedArray ta = t.obtainStyledAttributes(R.styleable.PreloadIconDrawable); - mBgDrawable = ta.getDrawable(R.styleable.PreloadIconDrawable_ringBackground); + mBgDrawable = ta.getDrawable(R.styleable.PreloadIconDrawable_background); mBgDrawable.setFilterBitmap(true); mPaint.setStrokeWidth(ta.getDimension(R.styleable.PreloadIconDrawable_indicatorSize, 0)); mRingOutset = ta.getDimensionPixelSize(R.styleable.PreloadIconDrawable_ringOutset, 0); From 5845bea514409ada1d5022c8a25fe175f6cac975 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 23 Feb 2016 16:43:23 -0800 Subject: [PATCH 177/219] Preventing crash when there is not enough width to show the pending text Bug: 26901856 Change-Id: I03c9631ce224cce76b2c896a5e6ce6b0ee741782 --- .../launcher3/PendingAppWidgetHostView.java | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/com/android/launcher3/PendingAppWidgetHostView.java b/src/com/android/launcher3/PendingAppWidgetHostView.java index 85d8658a69..1c0290417f 100644 --- a/src/com/android/launcher3/PendingAppWidgetHostView.java +++ b/src/com/android/launcher3/PendingAppWidgetHostView.java @@ -231,26 +231,30 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView implemen int actualIconSize = (int) Math.min(iconSize, grid.iconSizePx); - // Recreate the setup text. - mSetupTextLayout = new StaticLayout( - getResources().getText(R.string.gadget_setup_text), mPaint, availableWidth, - Layout.Alignment.ALIGN_CENTER, 1, 0, true); - int textHeight = mSetupTextLayout.getHeight(); + // Icon top when we do not draw the text + int iconTop = (getHeight() - actualIconSize) / 2; + mSetupTextLayout = null; - // Extra icon size due to the setting icon - float minHeightWithText = textHeight + actualIconSize * settingIconScaleFactor - + grid.iconDrawablePaddingPx; + if (availableWidth > 0) { + // Recreate the setup text. + mSetupTextLayout = new StaticLayout( + getResources().getText(R.string.gadget_setup_text), mPaint, availableWidth, + Layout.Alignment.ALIGN_CENTER, 1, 0, true); + int textHeight = mSetupTextLayout.getHeight(); - int iconTop; - if (minHeightWithText < availableHeight) { - // We can draw the text as well - iconTop = (getHeight() - textHeight - - grid.iconDrawablePaddingPx - actualIconSize) / 2; + // Extra icon size due to the setting icon + float minHeightWithText = textHeight + actualIconSize * settingIconScaleFactor + + grid.iconDrawablePaddingPx; - } else { - // The text will not fit. Only draw the icons. - iconTop = (getHeight() - actualIconSize) / 2; - mSetupTextLayout = null; + if (minHeightWithText < availableHeight) { + // We can draw the text as well + iconTop = (getHeight() - textHeight - + grid.iconDrawablePaddingPx - actualIconSize) / 2; + + } else { + // We can't draw the text. Let the iconTop be same as before. + mSetupTextLayout = null; + } } mRect.set(0, 0, actualIconSize, actualIconSize); From b7271fd17ea78acbf8506b2c9a34f741680fc4a9 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Tue, 23 Feb 2016 18:23:54 -0800 Subject: [PATCH 178/219] Change preloading coefficient for widgets tray to improve jankness on low performance devices. Change-Id: I6dfe1161bf596792a7fc8b3c5160a4922e177834 --- .../launcher3/widget/WidgetsContainerView.java | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/com/android/launcher3/widget/WidgetsContainerView.java b/src/com/android/launcher3/widget/WidgetsContainerView.java index 0173eb771a..03410ed4a1 100644 --- a/src/com/android/launcher3/widget/WidgetsContainerView.java +++ b/src/com/android/launcher3/widget/WidgetsContainerView.java @@ -55,9 +55,6 @@ public class WidgetsContainerView extends BaseContainerView private static final String TAG = "WidgetsContainerView"; private static final boolean LOGD = false; - /* Coefficient multiplied to the screen height for preloading widgets. */ - private static final int PRELOAD_SCREEN_HEIGHT_MULTIPLE = 1; - /* Global instances that are used inside this container. */ @Thunk Launcher mLauncher; private DragController mDragController; @@ -97,16 +94,7 @@ public class WidgetsContainerView extends BaseContainerView super.onFinishInflate(); mRecyclerView = (WidgetsRecyclerView) getContentView().findViewById(R.id.widgets_list_view); mRecyclerView.setAdapter(mAdapter); - - // This extends the layout space so that preloading happen for the {@link RecyclerView} - mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()) { - @Override - protected int getExtraLayoutSpace(State state) { - DeviceProfile grid = mLauncher.getDeviceProfile(); - return super.getExtraLayoutSpace(state) - + grid.availableHeightPx * PRELOAD_SCREEN_HEIGHT_MULTIPLE; - } - }); + mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); } // From eba87b1770937f44998aff5fc4b34a12b30c6440 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 26 Feb 2016 09:44:27 -0800 Subject: [PATCH 179/219] Chaning the 'title' attribute format to string to be consistent with support libraries Change-Id: I58f687f9ab5d6c0e42bebd4f0f75e1efc696b9fe --- res/values/attrs.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/res/values/attrs.xml b/res/values/attrs.xml index 82f33d1c05..c5be9f2006 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -100,8 +100,8 @@ - - + + From 645bdb373a8f8449bb9b2d45556fd6babc4d16a3 Mon Sep 17 00:00:00 2001 From: Geoff Mendal Date: Mon, 29 Feb 2016 05:24:53 -0800 Subject: [PATCH 180/219] Import translations. DO NOT MERGE Change-Id: I728beebf58b37229d4836f627a2227519bc28734 Auto-generated-cl: translation import --- res/values-hy-rAM/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml index 950cca2061..74d98d6d47 100644 --- a/res/values-hy-rAM/strings.xml +++ b/res/values-hy-rAM/strings.xml @@ -67,7 +67,7 @@ "Հպեք՝ վերանվանումը պահելու համար" "Պանակը փակ է" "Պանակը վերանվանվեց %1$s" - "Թղթապանակ՝ %1$s" + "Պանակ՝ %1$s" "Վիջեթներ" "Պաստառներ" "Կարգավորումներ" From 3e840f4343086ed78a8ae44fd543a9863d868dc9 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Tue, 1 Mar 2016 11:57:44 -0800 Subject: [PATCH 181/219] Prevent work profile widget DnD crash b/26079469 Change-Id: I3d49ac498bbaaef8ca8a3051f5ab4b35ef771410 --- .../launcher3/WidgetPreviewLoader.java | 30 ++++++++++++++----- .../compat/AppWidgetManagerCompat.java | 2 +- .../compat/AppWidgetManagerCompatV16.java | 2 +- .../compat/AppWidgetManagerCompatVL.java | 10 +++++-- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java index b27fa60b72..314dd8a60d 100644 --- a/src/com/android/launcher3/WidgetPreviewLoader.java +++ b/src/com/android/launcher3/WidgetPreviewLoader.java @@ -65,7 +65,7 @@ public class WidgetPreviewLoader { private final Context mContext; private final IconCache mIconCache; private final UserManagerCompat mUserManager; - private final AppWidgetManagerCompat mManager; + private final AppWidgetManagerCompat mWidgetManager; private final CacheDb mDb; private final int mProfileBadgeMargin; @@ -75,7 +75,7 @@ public class WidgetPreviewLoader { public WidgetPreviewLoader(Context context, IconCache iconCache) { mContext = context; mIconCache = iconCache; - mManager = AppWidgetManagerCompat.getInstance(context); + mWidgetManager = AppWidgetManagerCompat.getInstance(context); mUserManager = UserManagerCompat.getInstance(context); mDb = new CacheDb(context); mWorkerHandler = new Handler(LauncherModel.getWorkerLooper()); @@ -139,7 +139,7 @@ public class WidgetPreviewLoader { // should cache the string builder if (o instanceof LauncherAppWidgetProviderInfo) { LauncherAppWidgetProviderInfo info = (LauncherAppWidgetProviderInfo) o; - return new WidgetCacheKey(info.provider, mManager.getUser(info), size); + return new WidgetCacheKey(info.provider, mWidgetManager.getUser(info), size); } else { ResolveInfo info = (ResolveInfo) o; return new WidgetCacheKey( @@ -193,7 +193,7 @@ public class WidgetPreviewLoader { pkg = ((ResolveInfo) obj).activityInfo.packageName; } else { LauncherAppWidgetProviderInfo info = (LauncherAppWidgetProviderInfo) obj; - user = mManager.getUser(info); + user = mWidgetManager.getUser(info); pkg = info.provider.getPackageName(); } @@ -305,6 +305,17 @@ public class WidgetPreviewLoader { } } + /** + * Generates the widget preview from either the {@link AppWidgetManagerCompat} or cache + * and add badge at the bottom right corner. + * + * @param launcher + * @param info information about the widget + * @param maxPreviewWidth width of the preview on either workspace or tray + * @param preview bitmap that can be recycled + * @param preScaledWidthOut return the width of the returned bitmap + * @return + */ public Bitmap generateWidgetPreview(Launcher launcher, LauncherAppWidgetProviderInfo info, int maxPreviewWidth, Bitmap preview, int[] preScaledWidthOut) { // Load the preview image if possible @@ -312,7 +323,7 @@ public class WidgetPreviewLoader { Drawable drawable = null; if (info.previewImage != 0) { - drawable = mManager.loadPreview(info); + drawable = mWidgetManager.loadPreview(info); if (drawable != null) { drawable = mutateOnMainThread(drawable); } else { @@ -327,6 +338,7 @@ public class WidgetPreviewLoader { int previewWidth; int previewHeight; + Bitmap tileBitmap = null; if (widgetPreviewExists) { @@ -398,7 +410,7 @@ public class WidgetPreviewLoader { float iconScale = Math.min((float) smallestSide / (appIconSize + 2 * minOffset), scale); try { - Drawable icon = mManager.loadIcon(info, mIconCache); + Drawable icon = mWidgetManager.loadIcon(info, mIconCache); if (icon != null) { icon = mutateOnMainThread(icon); int hoffset = (int) ((tileW - appIconSize * iconScale) / 2) + x; @@ -408,11 +420,13 @@ public class WidgetPreviewLoader { yoffset + (int) (appIconSize * iconScale)); icon.draw(c); } - } catch (Resources.NotFoundException e) { } + } catch (Resources.NotFoundException e) { + } c.setBitmap(null); } + int imageWidth = Math.min(preview.getWidth(), previewWidth + mProfileBadgeMargin); int imageHeight = Math.min(preview.getHeight(), previewHeight + mProfileBadgeMargin); - return mManager.getBadgeBitmap(info, preview, imageHeight); + return mWidgetManager.getBadgeBitmap(info, preview, imageWidth, imageHeight); } private Bitmap generateShortcutPreview( diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompat.java b/src/com/android/launcher3/compat/AppWidgetManagerCompat.java index 434f13dcc1..f0221bc240 100644 --- a/src/com/android/launcher3/compat/AppWidgetManagerCompat.java +++ b/src/com/android/launcher3/compat/AppWidgetManagerCompat.java @@ -79,6 +79,6 @@ public abstract class AppWidgetManagerCompat { public abstract Drawable loadIcon(LauncherAppWidgetProviderInfo info, IconCache cache); public abstract Bitmap getBadgeBitmap(LauncherAppWidgetProviderInfo info, Bitmap bitmap, - int imageHeight); + int imageWidth, int imageHeight); } diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompatV16.java b/src/com/android/launcher3/compat/AppWidgetManagerCompatV16.java index 463cf902d1..e9d2510e8e 100644 --- a/src/com/android/launcher3/compat/AppWidgetManagerCompatV16.java +++ b/src/com/android/launcher3/compat/AppWidgetManagerCompatV16.java @@ -88,7 +88,7 @@ class AppWidgetManagerCompatV16 extends AppWidgetManagerCompat { @Override public Bitmap getBadgeBitmap(LauncherAppWidgetProviderInfo info, Bitmap bitmap, - int imageHeight) { + int imageWidth, int imageHeight) { return bitmap; } } diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java b/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java index b3c5cc2a39..3bc3d0d80c 100644 --- a/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java +++ b/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java @@ -107,18 +107,24 @@ class AppWidgetManagerCompatVL extends AppWidgetManagerCompat { @Override public Bitmap getBadgeBitmap(LauncherAppWidgetProviderInfo info, Bitmap bitmap, - int imageHeight) { + int imageWidth, int imageHeight) { if (info.isCustomWidget || info.getProfile().equals(android.os.Process.myUserHandle())) { return bitmap; } // Add a user badge in the bottom right of the image. final Resources res = mContext.getResources(); - final int badgeSize = res.getDimensionPixelSize(R.dimen.profile_badge_size); final int badgeMinTop = res.getDimensionPixelSize(R.dimen.profile_badge_minimum_top); + + // choose min between badge size defined for widget tray versus width, height of the image. + // Width, height of the image can be smaller than widget tray badge size when being dropped + // to the workspace. + final int badgeSize = Math.min(res.getDimensionPixelSize(R.dimen.profile_badge_size), + Math.min(imageWidth, imageHeight - badgeMinTop)); final Rect badgeLocation = new Rect(0, 0, badgeSize, badgeSize); final int top = Math.max(imageHeight - badgeSize, badgeMinTop); + if (res.getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) { badgeLocation.offset(0, top); } else { From 9e3fee1427c0baa38564e20a9f351d1a87c25761 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 2 Mar 2016 11:32:18 -0800 Subject: [PATCH 182/219] Starting market search whenever the search key is pressed Bug: 27365428 Change-Id: I508cb35cd1aaab1eac6cf60014fa6f80592365ef (cherry picked from commit 992a5f566e7f1b1fc8bd766f1fd00bee7ea2a634) --- .../allapps/AllAppsContainerView.java | 2 +- .../launcher3/allapps/AllAppsGridAdapter.java | 2 +- .../allapps/AllAppsSearchBarController.java | 34 +++++-------------- 3 files changed, 11 insertions(+), 27 deletions(-) diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index 57da6c57cd..016381ff98 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -228,7 +228,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc throw new RuntimeException("Expected search bar controller to only be set once"); } mSearchBarController = searchController; - mSearchBarController.initialize(mApps, mSearchInput, mAppsRecyclerView, this); + mSearchBarController.initialize(mApps, mSearchInput, mLauncher, this); updateBackgroundAndPaddings(); } diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java index cfaf195152..1b6f21bcd2 100644 --- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java +++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java @@ -567,7 +567,7 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter 1) { + // Skip if the query is empty + String query = v.getText().toString(); + if (query.isEmpty()) { return false; } - // Otherwise, find the first icon, or fallback to the search-market-view and launch it - List items = mApps.getAdapterItems(); - for (int i = 0; i < items.size(); i++) { - AlphabeticalAppsList.AdapterItem item = items.get(i); - switch (item.viewType) { - case AllAppsGridAdapter.ICON_VIEW_TYPE: - case AllAppsGridAdapter.SEARCH_MARKET_VIEW_TYPE: - mAppsRecyclerView.getChildAt(i).performClick(); - mInputMethodManager.hideSoftInputFromWindow(mInput.getWindowToken(), 0); - return true; - } - } - return false; + return mLauncher.startActivitySafely( + v, AllAppsGridAdapter.createMarketSearchIntent(query), null); } @Override From 2494c3f1681e71af06556ef47de16f018811f7e3 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 3 Mar 2016 11:35:59 -0800 Subject: [PATCH 183/219] Moving createMarketSearchIntent to search controller to allow it to be customizable Change-Id: I3a05abf7c0357a2f92c8a3fa2dc223f9eacc221e --- .../allapps/AllAppsContainerView.java | 2 +- .../launcher3/allapps/AllAppsGridAdapter.java | 89 ++++++++----------- .../allapps/AllAppsSearchBarController.java | 32 +++---- 3 files changed, 50 insertions(+), 73 deletions(-) diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index 016381ff98..c12f645e31 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -229,6 +229,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc } mSearchBarController = searchController; mSearchBarController.initialize(mApps, mSearchInput, mLauncher, this); + mAdapter.setSearchController(mSearchBarController); updateBackgroundAndPaddings(); } @@ -261,7 +262,6 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc @Override protected void onFinishInflate() { super.onFinishInflate(); - mAdapter.setRtl(Utilities.isRtl(getResources())); // This is a focus listener that proxies focus from a view into the list view. This is to // work around the search box from getting first focus and showing the cursor. diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java index 1b6f21bcd2..d41224a2d9 100644 --- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java +++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java @@ -324,20 +324,29 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter Date: Fri, 4 Mar 2016 10:27:09 -0800 Subject: [PATCH 184/219] [DO NOT MERGE] Upload proto file to burnaby-polish b/26494415 - needed for ag/879262 getLogger function parameter - prediction to start parsing proto instead of the bundle Change-Id: I002ceb5faad0f2272ae5676b891f20826dbfcf3f --- protos/launcher_log.proto | 122 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 protos/launcher_log.proto diff --git a/protos/launcher_log.proto b/protos/launcher_log.proto new file mode 100644 index 0000000000..a7b6429e42 --- /dev/null +++ b/protos/launcher_log.proto @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2016 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. + */ +syntax = "proto2"; + +option java_package = "com.android.launcher3.userevent.nano"; +option java_outer_classname = "LauncherLogProto"; + +package userevent; + +message Target { + enum Type { + NONE = 0; + ITEM = 1; + CONTROL = 2; + CONTAINER = 3; + } + + optional Type type = 1; + + // For container type and item type + // Used mainly for ContainerType.FOLDER, ItemType.* + optional Target parent = 2; + optional int32 page_index = 3; + optional int32 rank = 4; + optional int32 grid_x = 5; + optional int32 grid_y = 6; + + // For container types only + optional ContainerType container_type = 7; + optional int32 cardinality = 8; + + // For control types only + optional ControlType control_type = 9; + + // For item types only + optional ItemType item_type = 10; + optional int32 package_name_hash = 11; + optional int32 component_hash = 12; // Used for ItemType.WIDGET + optional int32 intent_hash = 13; // Used for ItemType.SHORTCUT + optional int32 span_x = 14 [default = 1];// Used for ItemType.WIDGET + optional int32 span_y = 15 [default = 1];// Used for ItemType.WIDGET +} + +enum ItemType { + APP_ICON = 0; + SHORTCUT = 1; + WIDGET = 2; + FOLDER_ICON = 3; +} + +enum ContainerType { + WORKSPACE = 0; + HOTSEAT = 1; + FOLDER = 2; + ALLAPPS = 3; + WIDGETS = 4; + OVERVIEW = 5; + PREDICTION = 6; + SEARCHRESULT = 7; +} + +enum ControlType { + ALL_APPS_BUTTON = 0; + WIDGETS_BUTTON = 1; + WALLPAPER_BUTTON = 2; + SETTINGS_BUTTON = 3; + REMOVE_TARGET = 4; + UNINSTALL_TARGET = 5; + APPINFO_TARGET = 6; + RESIZE_HANDLE = 7; + FAST_SCROLL_HANDLE = 8; + // HOME, BACK, GO_TO_PLAYSTORE +} + +message Action { + enum Type { + TOUCH = 0; + AUTOMATED = 1; + // SOFT_KEYBOARD, HARD_KEYBOARD, ASSIST + } + enum Touch { + TAP = 0; + LONGPRESS = 1; + DRAGDROP = 2; + SWIPE = 3; + FLING = 4; + PINCH = 5; + } + optional Type type = 1; + optional Touch touch = 2; +} + +// +// Context free grammar of typical user interaction: +// Action (Touch) + Target +// Action (Touch) + Target + Target +// +message LauncherEvent { + + required Action action = 1; + + // List of targets that touch actions can be operated on. + optional Target src_target = 2; + optional Target dest_target = 3; + + optional int64 action_duration_millis = 4; + optional int64 elapsed_container_millis = 5; + optional int64 elapsed_session_millis = 6; +} From a9c69ce09c164c8ad0191e05318460d0955825a7 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Fri, 4 Mar 2016 11:02:40 -0800 Subject: [PATCH 185/219] Define generic logging class b/26494415 Change-Id: I5fbf54eb5986eb49a62ba51d41aab43e00a9ca12 --- src/com/android/launcher3/logging/UserEventLogger.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/com/android/launcher3/logging/UserEventLogger.java diff --git a/src/com/android/launcher3/logging/UserEventLogger.java b/src/com/android/launcher3/logging/UserEventLogger.java new file mode 100644 index 0000000000..9ab305f494 --- /dev/null +++ b/src/com/android/launcher3/logging/UserEventLogger.java @@ -0,0 +1,7 @@ +package com.android.launcher3.logging; + +import com.android.launcher3.userevent.nano.LauncherLogProto; + +public abstract class UserEventLogger { + public void processEvent(LauncherLogProto proto) {} +} \ No newline at end of file From 3650019856ad9bd44ad8ecb591917f7f2520e8d6 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Fri, 4 Mar 2016 12:00:25 -0800 Subject: [PATCH 186/219] Trim down the logging class b/26494415 Change-Id: I9035f515e4eb54af8f8ad2f29ab294d2ac9760e8 --- protos/launcher_log.proto | 122 ------------------ .../launcher3/logging/UserEventLogger.java | 3 - 2 files changed, 125 deletions(-) delete mode 100644 protos/launcher_log.proto diff --git a/protos/launcher_log.proto b/protos/launcher_log.proto deleted file mode 100644 index a7b6429e42..0000000000 --- a/protos/launcher_log.proto +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2016 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. - */ -syntax = "proto2"; - -option java_package = "com.android.launcher3.userevent.nano"; -option java_outer_classname = "LauncherLogProto"; - -package userevent; - -message Target { - enum Type { - NONE = 0; - ITEM = 1; - CONTROL = 2; - CONTAINER = 3; - } - - optional Type type = 1; - - // For container type and item type - // Used mainly for ContainerType.FOLDER, ItemType.* - optional Target parent = 2; - optional int32 page_index = 3; - optional int32 rank = 4; - optional int32 grid_x = 5; - optional int32 grid_y = 6; - - // For container types only - optional ContainerType container_type = 7; - optional int32 cardinality = 8; - - // For control types only - optional ControlType control_type = 9; - - // For item types only - optional ItemType item_type = 10; - optional int32 package_name_hash = 11; - optional int32 component_hash = 12; // Used for ItemType.WIDGET - optional int32 intent_hash = 13; // Used for ItemType.SHORTCUT - optional int32 span_x = 14 [default = 1];// Used for ItemType.WIDGET - optional int32 span_y = 15 [default = 1];// Used for ItemType.WIDGET -} - -enum ItemType { - APP_ICON = 0; - SHORTCUT = 1; - WIDGET = 2; - FOLDER_ICON = 3; -} - -enum ContainerType { - WORKSPACE = 0; - HOTSEAT = 1; - FOLDER = 2; - ALLAPPS = 3; - WIDGETS = 4; - OVERVIEW = 5; - PREDICTION = 6; - SEARCHRESULT = 7; -} - -enum ControlType { - ALL_APPS_BUTTON = 0; - WIDGETS_BUTTON = 1; - WALLPAPER_BUTTON = 2; - SETTINGS_BUTTON = 3; - REMOVE_TARGET = 4; - UNINSTALL_TARGET = 5; - APPINFO_TARGET = 6; - RESIZE_HANDLE = 7; - FAST_SCROLL_HANDLE = 8; - // HOME, BACK, GO_TO_PLAYSTORE -} - -message Action { - enum Type { - TOUCH = 0; - AUTOMATED = 1; - // SOFT_KEYBOARD, HARD_KEYBOARD, ASSIST - } - enum Touch { - TAP = 0; - LONGPRESS = 1; - DRAGDROP = 2; - SWIPE = 3; - FLING = 4; - PINCH = 5; - } - optional Type type = 1; - optional Touch touch = 2; -} - -// -// Context free grammar of typical user interaction: -// Action (Touch) + Target -// Action (Touch) + Target + Target -// -message LauncherEvent { - - required Action action = 1; - - // List of targets that touch actions can be operated on. - optional Target src_target = 2; - optional Target dest_target = 3; - - optional int64 action_duration_millis = 4; - optional int64 elapsed_container_millis = 5; - optional int64 elapsed_session_millis = 6; -} diff --git a/src/com/android/launcher3/logging/UserEventLogger.java b/src/com/android/launcher3/logging/UserEventLogger.java index 9ab305f494..d05b683065 100644 --- a/src/com/android/launcher3/logging/UserEventLogger.java +++ b/src/com/android/launcher3/logging/UserEventLogger.java @@ -1,7 +1,4 @@ package com.android.launcher3.logging; -import com.android.launcher3.userevent.nano.LauncherLogProto; - public abstract class UserEventLogger { - public void processEvent(LauncherLogProto proto) {} } \ No newline at end of file From f4c0f7d2505833fac1f5dad173282d8c73cbff5d Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Mon, 14 Mar 2016 11:00:07 -0700 Subject: [PATCH 187/219] [DO NOT MERGE] Fix widget tray clipping due to wrong padding b/27380335 padding was set wrong when the widget view hierarchy was being refactored in this CL: ag/870011 Change-Id: I003634acded2bbe204098c0e6fefff13d154b5d6 (cherry picked from commit 58e61ac216adbc3e4e211a428692dbeb54e78b45) --- .../android/launcher3/widget/WidgetsContainerView.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/widget/WidgetsContainerView.java b/src/com/android/launcher3/widget/WidgetsContainerView.java index 03410ed4a1..10a00c600f 100644 --- a/src/com/android/launcher3/widget/WidgetsContainerView.java +++ b/src/com/android/launcher3/widget/WidgetsContainerView.java @@ -312,7 +312,15 @@ public class WidgetsContainerView extends BaseContainerView // @Override protected void onUpdateBgPadding(Rect padding, Rect bgPadding) { - mRecyclerView.updateBackgroundPadding(bgPadding); + if (Utilities.isRtl(getResources())) { + getContentView().setPadding(0, bgPadding.top, + bgPadding.right, bgPadding.bottom); + mRecyclerView.updateBackgroundPadding(new Rect(bgPadding.left, 0, 0, 0)); + } else { + getContentView().setPadding(bgPadding.left, bgPadding.top, + 0, bgPadding.bottom); + mRecyclerView.updateBackgroundPadding(new Rect(0, 0, bgPadding.right, 0)); + } } /** From 04907eea71327a5e828421eaf7e43d689e974049 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Mon, 4 Apr 2016 13:47:01 -0700 Subject: [PATCH 188/219] [DO NOT MERGE] updateOverlayBounds no longer rely on LauncherCallback method mFixedSearchBarBounds is no longer used. b/25255451 Change-Id: I3e2f7511c7a418f211a8b17a62b98f2736dfc91d --- res/values-land/dimens.xml | 2 + res/values-sw600dp-land/dimens.xml | 4 ++ res/values-sw600dp/dimens.xml | 5 +- res/values-sw768dp-port/dimens.xml | 21 ++++++++ res/values/dimens.xml | 5 +- .../android/launcher3/BaseContainerView.java | 53 +++++++------------ 6 files changed, 54 insertions(+), 36 deletions(-) create mode 100644 res/values-sw768dp-port/dimens.xml diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml index 06a99842ef..fa362319d5 100644 --- a/res/values-land/dimens.xml +++ b/res/values-land/dimens.xml @@ -18,4 +18,6 @@ 8dip 0dip + + 12% diff --git a/res/values-sw600dp-land/dimens.xml b/res/values-sw600dp-land/dimens.xml index f9ca01beec..644c891abb 100644 --- a/res/values-sw600dp-land/dimens.xml +++ b/res/values-sw600dp-land/dimens.xml @@ -18,4 +18,8 @@ 12dip 20dip + + + 736dp + diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml index feb1a00a67..0756dc9cc4 100644 --- a/res/values-sw600dp/dimens.xml +++ b/res/values-sw600dp/dimens.xml @@ -15,7 +15,10 @@ --> - + + 16dp + + 0dp 26sp 12dp diff --git a/res/values-sw768dp-port/dimens.xml b/res/values-sw768dp-port/dimens.xml new file mode 100644 index 0000000000..4df1725194 --- /dev/null +++ b/res/values-sw768dp-port/dimens.xml @@ -0,0 +1,21 @@ + + + + + + 736dp + + \ No newline at end of file diff --git a/res/values/dimens.xml b/res/values/dimens.xml index a303daba87..af4ae5ed7b 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -60,6 +60,10 @@ 12dip + 0% + 8dp + 0dp + 8dp @@ -160,5 +164,4 @@ 8dp 2dp - diff --git a/src/com/android/launcher3/BaseContainerView.java b/src/com/android/launcher3/BaseContainerView.java index 7de2774dcd..538c24a66b 100644 --- a/src/com/android/launcher3/BaseContainerView.java +++ b/src/com/android/launcher3/BaseContainerView.java @@ -22,7 +22,6 @@ import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.InsetDrawable; import android.util.AttributeSet; -import android.util.Log; import android.view.View; import android.widget.FrameLayout; @@ -35,9 +34,6 @@ public abstract class BaseContainerView extends FrameLayout implements Insettabl // The window insets private final Rect mInsets = new Rect(); - // The bounds of the search bar. Only the left, top, right are used to inset the - // search bar and the height is determined by the measurement of the layout - private final Rect mFixedSearchBarBounds = new Rect(); // The computed padding to apply to the container to achieve the container bounds protected final Rect mContentPadding = new Rect(); // The inset to apply to the edges and between the search bar and the container @@ -48,6 +44,8 @@ public abstract class BaseContainerView extends FrameLayout implements Insettabl private View mRevealView; private View mContent; + protected final int mHorizontalPadding; + public BaseContainerView(Context context) { this(context, null); } @@ -64,6 +62,17 @@ public abstract class BaseContainerView extends FrameLayout implements Insettabl R.styleable.BaseContainerView, defStyleAttr, 0); mRevealDrawable = a.getDrawable(R.styleable.BaseContainerView_revealBackground); a.recycle(); + + int maxSize = getResources().getDimensionPixelSize(R.dimen.container_max_width); + int minMargin = getResources().getDimensionPixelSize(R.dimen.container_min_margin); + int width = ((Launcher) context).getDeviceProfile().availableWidthPx; + + if (maxSize > 0) { + mHorizontalPadding = Math.max(minMargin, (width - maxSize) / 2); + } else { + mHorizontalPadding = Math.max(minMargin, + (int) getResources().getFraction(R.fraction.container_margin, width, 1)); + } } @Override @@ -84,12 +93,6 @@ public abstract class BaseContainerView extends FrameLayout implements Insettabl * Sets the search bar bounds for this container view to match. */ final public void setSearchBarBounds(Rect bounds) { - if (LauncherAppState.isDogfoodBuild() && !isValidSearchBarBounds(bounds)) { - Log.e(TAG, "Invalid search bar bounds: " + bounds); - } - - mFixedSearchBarBounds.set(bounds); - // Post the updates since they can trigger a relayout, and this call can be triggered from // a layout pass itself. post(new Runnable() { @@ -105,21 +108,12 @@ public abstract class BaseContainerView extends FrameLayout implements Insettabl */ protected void updateBackgroundAndPaddings() { Rect padding; - if (isValidSearchBarBounds(mFixedSearchBarBounds)) { - padding = new Rect( - mFixedSearchBarBounds.left, - mInsets.top + mContainerBoundsInset, - getMeasuredWidth() - mFixedSearchBarBounds.right, - mInsets.bottom + mContainerBoundsInset - ); - } else { - padding = new Rect( - mInsets.left + mContainerBoundsInset, - mInsets.top + mContainerBoundsInset, - mInsets.right + mContainerBoundsInset, - mInsets.bottom + mContainerBoundsInset - ); - } + padding = new Rect( + mHorizontalPadding, + mInsets.top + mContainerBoundsInset, + mHorizontalPadding, + mInsets.bottom + mContainerBoundsInset + ); // The container padding changed, notify the container. if (!padding.equals(mContentPadding)) { @@ -149,15 +143,6 @@ public abstract class BaseContainerView extends FrameLayout implements Insettabl protected abstract void onUpdateBgPadding(Rect padding, Rect bgPadding); - /** - * Returns whether the search bar bounds we got are considered valid. - */ - private boolean isValidSearchBarBounds(Rect searchBarBounds) { - return !searchBarBounds.isEmpty() && - searchBarBounds.right <= getMeasuredWidth() && - searchBarBounds.bottom <= getMeasuredHeight(); - } - public final View getContentView() { return mContent; } From 82fdb81d6398fcd1bd72e6ed7f3b35b550746eb9 Mon Sep 17 00:00:00 2001 From: Kenny Guy Date: Thu, 21 Jan 2016 19:50:02 +0000 Subject: [PATCH 189/219] Grey out suspended applications. Grey out application shortcuts and all apps entries for packages that are suspended. Bug: 22776761 Change-Id: I1b63da1816aca1de52b9f9bee62d1b162d0cdf4d (cherry picked from commit 44cba696386b44f9115cad13ec9ecf67a0ac9119) --- proguard.flags | 7 +++ src/com/android/launcher3/AllAppsList.java | 19 +++++++ src/com/android/launcher3/AppInfo.java | 15 ++++- src/com/android/launcher3/BubbleTextView.java | 16 ++++-- src/com/android/launcher3/ItemInfo.java | 7 +++ src/com/android/launcher3/Launcher.java | 14 +++-- src/com/android/launcher3/LauncherModel.java | 41 ++++++++++++- src/com/android/launcher3/ShortcutInfo.java | 11 ++++ .../compat/LauncherActivityInfoCompat.java | 2 + .../launcher3/compat/LauncherAppsCompat.java | 9 ++- .../compat/LauncherAppsCompatV16.java | 4 ++ .../compat/LauncherAppsCompatVL.java | 14 ++++- .../compat/LauncherAppsCompatVN.java | 57 +++++++++++++++++++ 13 files changed, 199 insertions(+), 17 deletions(-) create mode 100644 src/com/android/launcher3/compat/LauncherAppsCompatVN.java diff --git a/proguard.flags b/proguard.flags index 772580020d..a167663668 100644 --- a/proguard.flags +++ b/proguard.flags @@ -70,3 +70,10 @@ public float getBackgroundAlpha(); public void setBackgroundAlpha(float); } + +# Proguard will strip new callbacks in LauncherApps.Callback from +# WrappedCallback if compiled against an older SDK. Don't let this happen. +-keep class com.android.launcher3.compat.** { + *; +} + diff --git a/src/com/android/launcher3/AllAppsList.java b/src/com/android/launcher3/AllAppsList.java index 3b25dca34c..f76c185127 100644 --- a/src/com/android/launcher3/AllAppsList.java +++ b/src/com/android/launcher3/AllAppsList.java @@ -118,6 +118,25 @@ class AllAppsList { } } + /** + * Suspend the apps for the given apk identified by packageName. + */ + public void suspendPackage(String packageName, UserHandleCompat user, boolean suspend) { + final List data = this.data; + for (int i = data.size() - 1; i >= 0; i--) { + AppInfo info = data.get(i); + final ComponentName component = info.intent.getComponent(); + if (info.user.equals(user) && packageName.equals(component.getPackageName())) { + if (suspend) { + info.isDisabled |= ShortcutInfo.FLAG_DISABLED_SUSPENDED; + } else { + info.isDisabled &= ~ShortcutInfo.FLAG_DISABLED_SUSPENDED; + } + modified.add(info); + } + } + } + public void updateIconsAndLabels(HashSet packages, UserHandleCompat user, ArrayList outUpdates) { for (AppInfo info : data) { diff --git a/src/com/android/launcher3/AppInfo.java b/src/com/android/launcher3/AppInfo.java index ede6c71c1d..0fe1f31e52 100644 --- a/src/com/android/launcher3/AppInfo.java +++ b/src/com/android/launcher3/AppInfo.java @@ -58,6 +58,11 @@ public class AppInfo extends ItemInfo { int flags = 0; + /** + * {@see ShortcutInfo#isDisabled} + */ + int isDisabled = ShortcutInfo.DEFAULT; + AppInfo() { itemType = LauncherSettings.BaseLauncherColumns.ITEM_TYPE_SHORTCUT; } @@ -77,8 +82,10 @@ public class AppInfo extends ItemInfo { IconCache iconCache) { this.componentName = info.getComponentName(); this.container = ItemInfo.NO_ID; - flags = initFlags(info); + if ((info.getApplicationInfo().flags & LauncherActivityInfoCompat.FLAG_SUSPENDED) != 0) { + isDisabled |= ShortcutInfo.FLAG_DISABLED_SUSPENDED; + } iconCache.getTitleAndIcon(this, info, true /* useLowResIcon */); intent = makeLaunchIntent(context, info, user); this.user = user; @@ -103,6 +110,7 @@ public class AppInfo extends ItemInfo { title = Utilities.trim(info.title); intent = new Intent(info.intent); flags = info.flags; + isDisabled = info.isDisabled; iconBitmap = info.iconBitmap; } @@ -143,4 +151,9 @@ public class AppInfo extends ItemInfo { .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) .putExtra(EXTRA_PROFILE, serialNumber); } + + @Override + public boolean isDisabled() { + return isDisabled != 0; + } } diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index f6c9e3c772..09ec60c50f 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -150,7 +150,7 @@ public class BubbleTextView extends TextView Bitmap b = info.getIcon(iconCache); FastBitmapDrawable iconDrawable = mLauncher.createIconDrawable(b); - if (info.isDisabled != 0) { + if (info.isDisabled()) { iconDrawable.setState(FastBitmapDrawable.State.DISABLED); } setIcon(iconDrawable, mIconSize); @@ -166,7 +166,11 @@ public class BubbleTextView extends TextView } public void applyFromApplicationInfo(AppInfo info) { - setIcon(mLauncher.createIconDrawable(info.iconBitmap), mIconSize); + FastBitmapDrawable iconDrawable = mLauncher.createIconDrawable(info.iconBitmap); + if (info.isDisabled()) { + iconDrawable.setState(FastBitmapDrawable.State.DISABLED); + } + setIcon(iconDrawable, mIconSize); setText(info.title); if (info.contentDescription != null) { setContentDescription(info.contentDescription); @@ -250,11 +254,11 @@ public class BubbleTextView extends TextView private void updateIconState() { if (mIcon instanceof FastBitmapDrawable) { FastBitmapDrawable d = (FastBitmapDrawable) mIcon; - if (isPressed() || mStayPressed) { - d.animateState(FastBitmapDrawable.State.PRESSED); - } else if (getTag() instanceof ShortcutInfo - && ((ShortcutInfo) getTag()).isDisabled != 0) { + if (getTag() instanceof ItemInfo + && ((ItemInfo) getTag()).isDisabled()) { d.animateState(FastBitmapDrawable.State.DISABLED); + } else if (isPressed() || mStayPressed) { + d.animateState(FastBitmapDrawable.State.PRESSED); } else { d.animateState(FastBitmapDrawable.State.NORMAL); } diff --git a/src/com/android/launcher3/ItemInfo.java b/src/com/android/launcher3/ItemInfo.java index f7e0ea488e..c7a6807190 100644 --- a/src/com/android/launcher3/ItemInfo.java +++ b/src/com/android/launcher3/ItemInfo.java @@ -197,4 +197,11 @@ public class ItemInfo { + " spanY=" + spanY + " dropPos=" + Arrays.toString(dropPos) + " user=" + user + ")"; } + + /** + * Whether this item is disabled. + */ + public boolean isDisabled() { + return false; + } } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 166acd33b9..3eb33afec5 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2676,12 +2676,16 @@ public class Launcher extends Activity final ShortcutInfo shortcut = (ShortcutInfo) tag; if (shortcut.isDisabled != 0) { - int error = R.string.activity_not_available; - if ((shortcut.isDisabled & ShortcutInfo.FLAG_DISABLED_SAFEMODE) != 0) { - error = R.string.safemode_shortcut_error; + if ((shortcut.isDisabled & ShortcutInfo.FLAG_DISABLED_SUSPENDED) != 0) { + // Launch activity anyway, framework will tell the user why the app is suspended. + } else { + int error = R.string.activity_not_available; + if ((shortcut.isDisabled & ShortcutInfo.FLAG_DISABLED_SAFEMODE) != 0) { + error = R.string.safemode_shortcut_error; + } + Toast.makeText(this, error, Toast.LENGTH_SHORT).show(); + return; } - Toast.makeText(this, error, Toast.LENGTH_SHORT).show(); - return; } // Check for abandoned promise diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 774cca459b..1b3926b91e 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -1264,6 +1264,20 @@ public class LauncherModel extends BroadcastReceiver } } + @Override + public void onPackagesSuspended(String[] packageNames, UserHandleCompat user) { + enqueuePackageUpdated(new PackageUpdatedTask( + PackageUpdatedTask.OP_SUSPEND, packageNames, + user)); + } + + @Override + public void onPackagesUnsuspended(String[] packageNames, UserHandleCompat user) { + enqueuePackageUpdated(new PackageUpdatedTask( + PackageUpdatedTask.OP_UNSUSPEND, packageNames, + user)); + } + /** * Call from the handler for ACTION_PACKAGE_ADDED, ACTION_PACKAGE_REMOVED and * ACTION_PACKAGE_CHANGED. @@ -1872,6 +1886,11 @@ public class LauncherModel extends BroadcastReceiver restoredRows.add(id); restored = false; } + boolean isSuspended = launcherApps.isPackageSuspendedForProfile( + cn.getPackageName(), user); + if (isSuspended) { + disabledState = ShortcutInfo.FLAG_DISABLED_SUSPENDED; + } } else if (validPkg) { intent = null; if ((promiseType & ShortcutInfo.FLAG_AUTOINTALL_ICON) != 0) { @@ -2995,6 +3014,8 @@ public class LauncherModel extends BroadcastReceiver public static final int OP_UPDATE = 2; public static final int OP_REMOVE = 3; // uninstlled public static final int OP_UNAVAILABLE = 4; // external media unmounted + public static final int OP_SUSPEND = 5; // package suspended + public static final int OP_UNSUSPEND = 6; // package unsuspended public PackageUpdatedTask(int op, String[] packages, UserHandleCompat user) { @@ -3052,6 +3073,15 @@ public class LauncherModel extends BroadcastReceiver mApp.getWidgetCache().removePackage(packages[i], mUser); } break; + case OP_SUSPEND: + case OP_UNSUSPEND: + boolean suspend = mOp == OP_SUSPEND; + for (int i=0; i added = null; @@ -3104,7 +3134,7 @@ public class LauncherModel extends BroadcastReceiver } // Update shortcut infos - if (mOp == OP_ADD || mOp == OP_UPDATE) { + if (mOp == OP_ADD || mOp == OP_UPDATE || mOp == OP_UNSUSPEND) { final ArrayList updatedShortcuts = new ArrayList(); final ArrayList removedShortcuts = new ArrayList(); final ArrayList widgets = new ArrayList(); @@ -3117,6 +3147,11 @@ public class LauncherModel extends BroadcastReceiver boolean infoUpdated = false; boolean shortcutUpdated = false; + if (mOp == OP_UNSUSPEND) { + si.isDisabled &= ~ ShortcutInfo.FLAG_DISABLED_SUSPENDED; + infoUpdated = true; + } + // Update shortcuts which use iconResource. if ((si.iconResource != null) && packageSet.contains(si.iconResource.packageName)) { @@ -3242,7 +3277,7 @@ public class LauncherModel extends BroadcastReceiver final ArrayList removedPackageNames = new ArrayList(); - if (mOp == OP_REMOVE || mOp == OP_UNAVAILABLE) { + if (mOp == OP_REMOVE || mOp == OP_UNAVAILABLE || mOp == OP_SUSPEND) { // Mark all packages in the broadcast to be removed removedPackageNames.addAll(Arrays.asList(packages)); } else if (mOp == OP_UPDATE) { @@ -3258,6 +3293,8 @@ public class LauncherModel extends BroadcastReceiver final int removeReason; if (mOp == OP_UNAVAILABLE) { removeReason = ShortcutInfo.FLAG_DISABLED_NOT_AVAILABLE; + } else if (mOp == OP_SUSPEND) { + removeReason = ShortcutInfo.FLAG_DISABLED_SUSPENDED; } else { // Remove all the components associated with this package for (String pn : removedPackageNames) { diff --git a/src/com/android/launcher3/ShortcutInfo.java b/src/com/android/launcher3/ShortcutInfo.java index 6bdcb4bf19..6dbcd1b1f2 100644 --- a/src/com/android/launcher3/ShortcutInfo.java +++ b/src/com/android/launcher3/ShortcutInfo.java @@ -112,6 +112,11 @@ public class ShortcutInfo extends ItemInfo { */ public static final int FLAG_DISABLED_NOT_AVAILABLE = 2; + /** + * Indicates that the icon is disabled as the app is suspended + */ + public static final int FLAG_DISABLED_SUSPENDED = 4; + /** * Could be disabled, if the the app is installed but unavailable (eg. in safe mode or when * sd-card is not available). @@ -178,6 +183,7 @@ public class ShortcutInfo extends ItemInfo { intent = new Intent(info.intent); customIcon = false; flags = info.flags; + isDisabled = info.isDisabled; } public void setIcon(Bitmap b) { @@ -288,5 +294,10 @@ public class ShortcutInfo extends ItemInfo { shortcut.flags = AppInfo.initFlags(info); return shortcut; } + + @Override + public boolean isDisabled() { + return isDisabled != 0; + } } diff --git a/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java b/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java index 0bc9588aae..aaf756edaf 100644 --- a/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java +++ b/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java @@ -24,6 +24,8 @@ import android.graphics.drawable.Drawable; public abstract class LauncherActivityInfoCompat { + public static final int FLAG_SUSPENDED = 1<<30; + LauncherActivityInfoCompat() { } diff --git a/src/com/android/launcher3/compat/LauncherAppsCompat.java b/src/com/android/launcher3/compat/LauncherAppsCompat.java index 95e3ba9024..da3eb8fee5 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompat.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompat.java @@ -42,6 +42,8 @@ public abstract class LauncherAppsCompat { void onPackageChanged(String packageName, UserHandleCompat user); void onPackagesAvailable(String[] packageNames, UserHandleCompat user, boolean replacing); void onPackagesUnavailable(String[] packageNames, UserHandleCompat user, boolean replacing); + void onPackagesSuspended(String[] packageNames, UserHandleCompat user); + void onPackagesUnsuspended(String[] packageNames, UserHandleCompat user); } protected LauncherAppsCompat() { @@ -53,7 +55,9 @@ public abstract class LauncherAppsCompat { public static LauncherAppsCompat getInstance(Context context) { synchronized (sInstanceLock) { if (sInstance == null) { - if (Utilities.ATLEAST_LOLLIPOP) { + if (Utilities.isNycOrAbove()) { + sInstance = new LauncherAppsCompatVN(context.getApplicationContext()); + } else if (Utilities.ATLEAST_LOLLIPOP) { sInstance = new LauncherAppsCompatVL(context.getApplicationContext()); } else { sInstance = new LauncherAppsCompatV16(context.getApplicationContext()); @@ -75,6 +79,7 @@ public abstract class LauncherAppsCompat { public abstract boolean isPackageEnabledForProfile(String packageName, UserHandleCompat user); public abstract boolean isActivityEnabledForProfile(ComponentName component, UserHandleCompat user); + public abstract boolean isPackageSuspendedForProfile(String packageName, UserHandleCompat user); public boolean isAppEnabled(PackageManager pm, String packageName, int flags) { try { @@ -84,4 +89,4 @@ public abstract class LauncherAppsCompat { return false; } } -} \ No newline at end of file +} diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatV16.java b/src/com/android/launcher3/compat/LauncherAppsCompatV16.java index 339c457e18..2d0778d306 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompatV16.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompatV16.java @@ -126,6 +126,10 @@ public class LauncherAppsCompatV16 extends LauncherAppsCompat { } } + public boolean isPackageSuspendedForProfile(String packageName, UserHandleCompat user) { + return false; + } + private void unregisterForPackageIntents() { mContext.unregisterReceiver(mPackageMonitor); } diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java index fbf91b548c..7270d023be 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java @@ -36,7 +36,7 @@ import java.util.Map; @TargetApi(Build.VERSION_CODES.LOLLIPOP) public class LauncherAppsCompatVL extends LauncherAppsCompat { - private LauncherApps mLauncherApps; + protected LauncherApps mLauncherApps; private Map mCallbacks = new HashMap(); @@ -106,6 +106,10 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat { return mLauncherApps.isActivityEnabled(component, user.getUser()); } + public boolean isPackageSuspendedForProfile(String packageName, UserHandleCompat user) { + return false; + } + private static class WrappedCallback extends LauncherApps.Callback { private LauncherAppsCompat.OnAppsChangedCallbackCompat mCallback; @@ -134,6 +138,14 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat { mCallback.onPackagesUnavailable(packageNames, UserHandleCompat.fromUser(user), replacing); } + + public void onPackagesSuspended(String[] packageNames, UserHandle user) { + mCallback.onPackagesSuspended(packageNames, UserHandleCompat.fromUser(user)); + } + + public void onPackagesUnsuspended(String[] packageNames, UserHandle user) { + mCallback.onPackagesUnsuspended(packageNames, UserHandleCompat.fromUser(user)); + } } } diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVN.java b/src/com/android/launcher3/compat/LauncherAppsCompatVN.java new file mode 100644 index 0000000000..0d883b6fd0 --- /dev/null +++ b/src/com/android/launcher3/compat/LauncherAppsCompatVN.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2016 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.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.LauncherApps; +import android.os.UserHandle; +import android.util.Log; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +//TODO: Once gogole3 SDK is updated to N, add @TargetApi(Build.VERSION_CODES.N) +public class LauncherAppsCompatVN extends LauncherAppsCompatVL { + + private static final String TAG = "LauncherAppsCompatVN"; + + LauncherAppsCompatVN(Context context) { + super(context); + } + + @Override + public boolean isPackageSuspendedForProfile(String packageName, UserHandleCompat user) { + if (user != null && packageName != null) { + try { + //TODO: Replace with proper API call once google3 SDK is updated. + Method getApplicationInfoMethod = LauncherApps.class.getMethod("getApplicationInfo", + String.class, int.class, UserHandle.class); + + ApplicationInfo info = (ApplicationInfo) getApplicationInfoMethod.invoke( + mLauncherApps, packageName, 0, user.getUser()); + if (info != null) { + return (info.flags & LauncherActivityInfoCompat.FLAG_SUSPENDED) != 0; + } + } catch (NoSuchMethodError | NoSuchMethodException | IllegalAccessException + | IllegalArgumentException | InvocationTargetException e) { + Log.e(TAG, "Running on N without getApplicationInfo", e); + } + } + return false; + } +} From e0b655e8456e53786f5622b7a2534377319272b5 Mon Sep 17 00:00:00 2001 From: Kenny Guy Date: Fri, 22 Jan 2016 17:48:29 +0000 Subject: [PATCH 190/219] Respond to managed profile availabilty Intents. Grey out applications when managed profile is not available. Change-Id: I9bb9442cd0b3d0d207062716bfd6b179e3ba8489 (cherry picked from commit ff05f4375dd47242d7e4864287e0d5af8ac8ba8f) --- src/com/android/launcher3/AppInfo.java | 10 ++++ src/com/android/launcher3/Launcher.java | 3 +- .../android/launcher3/LauncherAppState.java | 1 + src/com/android/launcher3/LauncherModel.java | 15 +++-- src/com/android/launcher3/ShortcutInfo.java | 5 ++ .../launcher3/compat/LauncherAppsCompat.java | 2 + .../launcher3/compat/UserManagerCompat.java | 5 +- .../compat/UserManagerCompatV16.java | 5 ++ .../launcher3/compat/UserManagerCompatVN.java | 55 +++++++++++++++++++ 9 files changed, 95 insertions(+), 6 deletions(-) create mode 100644 src/com/android/launcher3/compat/UserManagerCompatVN.java diff --git a/src/com/android/launcher3/AppInfo.java b/src/com/android/launcher3/AppInfo.java index 0fe1f31e52..427c9c801a 100644 --- a/src/com/android/launcher3/AppInfo.java +++ b/src/com/android/launcher3/AppInfo.java @@ -80,12 +80,22 @@ public class AppInfo extends ItemInfo { */ public AppInfo(Context context, LauncherActivityInfoCompat info, UserHandleCompat user, IconCache iconCache) { + this(context, info, user, iconCache, + UserManagerCompat.getInstance(context).isQuietModeEnabled(user)); + } + + public AppInfo(Context context, LauncherActivityInfoCompat info, UserHandleCompat user, + IconCache iconCache, boolean quietModeEnabled) { this.componentName = info.getComponentName(); this.container = ItemInfo.NO_ID; flags = initFlags(info); if ((info.getApplicationInfo().flags & LauncherActivityInfoCompat.FLAG_SUSPENDED) != 0) { isDisabled |= ShortcutInfo.FLAG_DISABLED_SUSPENDED; } + if (quietModeEnabled) { + isDisabled |= ShortcutInfo.FLAG_DISABLED_QUIET_USER; + } + iconCache.getTitleAndIcon(this, info, true /* useLowResIcon */); intent = makeLaunchIntent(context, info, user); this.user = user; diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 3eb33afec5..40c5bd69eb 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2676,7 +2676,8 @@ public class Launcher extends Activity final ShortcutInfo shortcut = (ShortcutInfo) tag; if (shortcut.isDisabled != 0) { - if ((shortcut.isDisabled & ShortcutInfo.FLAG_DISABLED_SUSPENDED) != 0) { + if ((shortcut.isDisabled & ShortcutInfo.FLAG_DISABLED_SUSPENDED) != 0 + || (shortcut.isDisabled & ShortcutInfo.FLAG_DISABLED_QUIET_USER) != 0) { // Launch activity anyway, framework will tell the user why the app is suspended. } else { int error = R.string.activity_not_available; diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index 4ac5ef3d5d..042fc072c8 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -100,6 +100,7 @@ public class LauncherAppState { // For handling managed profiles filter.addAction(LauncherAppsCompat.ACTION_MANAGED_PROFILE_ADDED); filter.addAction(LauncherAppsCompat.ACTION_MANAGED_PROFILE_REMOVED); + filter.addAction(LauncherAppsCompat.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED); sContext.registerReceiver(mModel, filter); UserManagerCompat.getInstance(sContext).enableAndResetCache(); diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 1b3926b91e..c34987220d 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -1296,7 +1296,8 @@ public class LauncherModel extends BroadcastReceiver callbacks.bindSearchProviderChanged(); } } else if (LauncherAppsCompat.ACTION_MANAGED_PROFILE_ADDED.equals(action) - || LauncherAppsCompat.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) { + || LauncherAppsCompat.ACTION_MANAGED_PROFILE_REMOVED.equals(action) + || LauncherAppsCompat.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED.equals(action)) { UserManagerCompat.getInstance(context).enableAndResetCache(); forceReload(); } @@ -1836,8 +1837,11 @@ public class LauncherModel extends BroadcastReceiver final CursorIconInfo cursorIconInfo = new CursorIconInfo(c); final LongSparseArray allUsers = new LongSparseArray<>(); + final LongSparseArray quietMode = new LongSparseArray<>(); for (UserHandleCompat user : mUserManager.getUserProfiles()) { - allUsers.put(mUserManager.getSerialNumberForUser(user), user); + long serialNo = mUserManager.getSerialNumberForUser(user); + allUsers.put(serialNo, user); + quietMode.put(serialNo, mUserManager.isQuietModeEnabled(user)); } ShortcutInfo info; @@ -1891,6 +1895,9 @@ public class LauncherModel extends BroadcastReceiver if (isSuspended) { disabledState = ShortcutInfo.FLAG_DISABLED_SUSPENDED; } + if (quietMode.get(serialNumber)) { + disabledState |= ShortcutInfo.FLAG_DISABLED_QUIET_USER; + } } else if (validPkg) { intent = null; if ((promiseType & ShortcutInfo.FLAG_AUTOINTALL_ICON) != 0) { @@ -2829,12 +2836,12 @@ public class LauncherModel extends BroadcastReceiver if (apps == null || apps.isEmpty()) { return; } - + boolean quietMode = mUserManager.isQuietModeEnabled(user); // Create the ApplicationInfos for (int i = 0; i < apps.size(); i++) { LauncherActivityInfoCompat app = apps.get(i); // This builds the icon bitmaps. - mBgAllAppsList.add(new AppInfo(mContext, app, user, mIconCache)); + mBgAllAppsList.add(new AppInfo(mContext, app, user, mIconCache, quietMode)); } final ManagedProfileHeuristic heuristic = ManagedProfileHeuristic.get(mContext, user); diff --git a/src/com/android/launcher3/ShortcutInfo.java b/src/com/android/launcher3/ShortcutInfo.java index 6dbcd1b1f2..60e080ea64 100644 --- a/src/com/android/launcher3/ShortcutInfo.java +++ b/src/com/android/launcher3/ShortcutInfo.java @@ -117,6 +117,11 @@ public class ShortcutInfo extends ItemInfo { */ public static final int FLAG_DISABLED_SUSPENDED = 4; + /** + * Indicates that the icon is disabled as the user is in quiet mode. + */ + public static final int FLAG_DISABLED_QUIET_USER = 8; + /** * Could be disabled, if the the app is installed but unavailable (eg. in safe mode or when * sd-card is not available). diff --git a/src/com/android/launcher3/compat/LauncherAppsCompat.java b/src/com/android/launcher3/compat/LauncherAppsCompat.java index da3eb8fee5..db5b89e811 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompat.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompat.java @@ -35,6 +35,8 @@ public abstract class LauncherAppsCompat { "android.intent.action.MANAGED_PROFILE_ADDED"; public static final String ACTION_MANAGED_PROFILE_REMOVED = "android.intent.action.MANAGED_PROFILE_REMOVED"; + public static final String ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED = + "android.intent.action.MANAGED_PROFILE_AVAILABILITY_CHANGED"; public interface OnAppsChangedCallbackCompat { void onPackageRemoved(String packageName, UserHandleCompat user); diff --git a/src/com/android/launcher3/compat/UserManagerCompat.java b/src/com/android/launcher3/compat/UserManagerCompat.java index 6b7cba8401..978f9229da 100644 --- a/src/com/android/launcher3/compat/UserManagerCompat.java +++ b/src/com/android/launcher3/compat/UserManagerCompat.java @@ -32,7 +32,9 @@ public abstract class UserManagerCompat { public static UserManagerCompat getInstance(Context context) { synchronized (sInstanceLock) { if (sInstance == null) { - if (Utilities.ATLEAST_LOLLIPOP) { + if (Utilities.isNycOrAbove()) { + sInstance = new UserManagerCompatVN(context.getApplicationContext()); + } else if (Utilities.ATLEAST_LOLLIPOP) { sInstance = new UserManagerCompatVL(context.getApplicationContext()); } else if (Utilities.ATLEAST_JB_MR1) { sInstance = new UserManagerCompatV17(context.getApplicationContext()); @@ -54,4 +56,5 @@ public abstract class UserManagerCompat { public abstract UserHandleCompat getUserForSerialNumber(long serialNumber); public abstract CharSequence getBadgedLabelForUser(CharSequence label, UserHandleCompat user); public abstract long getUserCreationTime(UserHandleCompat user); + public abstract boolean isQuietModeEnabled(UserHandleCompat user); } diff --git a/src/com/android/launcher3/compat/UserManagerCompatV16.java b/src/com/android/launcher3/compat/UserManagerCompatV16.java index fcd7555210..a006efd50d 100644 --- a/src/com/android/launcher3/compat/UserManagerCompatV16.java +++ b/src/com/android/launcher3/compat/UserManagerCompatV16.java @@ -50,4 +50,9 @@ public class UserManagerCompatV16 extends UserManagerCompat { @Override public void enableAndResetCache() { } + + @Override + public boolean isQuietModeEnabled(UserHandleCompat user) { + return false; + } } diff --git a/src/com/android/launcher3/compat/UserManagerCompatVN.java b/src/com/android/launcher3/compat/UserManagerCompatVN.java new file mode 100644 index 0000000000..ae41e68a36 --- /dev/null +++ b/src/com/android/launcher3/compat/UserManagerCompatVN.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2016 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.content.Context; +import android.os.UserHandle; +import android.os.UserManager; +import android.util.Log; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +//TODO: Once gogole3 SDK is updated to N, add @TargetApi(Build.VERSION_CODES.N) +public class UserManagerCompatVN extends UserManagerCompatVL { + + private static final String TAG = "UserManagerCompatVN"; + + UserManagerCompatVN(Context context) { + super(context); + } + + @Override + public boolean isQuietModeEnabled(UserHandleCompat user) { + if (user != null) { + try { + //TODO: Replace with proper API call once google3 SDK is updated. + Method isQuietModeEnabledMethod = UserManager.class.getMethod("isQuietModeEnabled", + UserHandle.class); + return (boolean) isQuietModeEnabledMethod.invoke(mUserManager, user.getUser()); + } catch (NoSuchMethodError | NoSuchMethodException | IllegalAccessException + | InvocationTargetException e) { + Log.e(TAG, "Running on N without isQuietModeEnabled", e); + } catch (IllegalArgumentException e) { + // TODO remove this when API is fixed to not throw this + // when called on user that isn't a managed profile. + } + } + return false; + } +} + From dfeaa9a99e1a5a18362c0f0dc8b0b965b73c0121 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 7 Apr 2016 12:56:50 -0700 Subject: [PATCH 191/219] Adding a check for NYC in utilities Change-Id: I37ec2b571374cc093b73032645fd36e3dff805b2 --- src/com/android/launcher3/Utilities.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index 87c9262d78..e3b450bb08 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -117,6 +117,18 @@ public final class Utilities { public static final boolean ATLEAST_JB_MR2 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2; + public static boolean isNycOrAbove() { + // TODO: Replace using reflection with looking at the API version once + // Build.VERSION.SDK_INT gets bumped to 24. b/22942492. + try { + View.class.getDeclaredField("DRAG_FLAG_OPAQUE"); + // View.DRAG_FLAG_OPAQUE doesn't exist in M-release, so it's an indication of N+. + return true; + } catch (NoSuchFieldException e) { + return false; + } + } + // These values are same as that in {@link AsyncTask}. private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); private static final int CORE_POOL_SIZE = CPU_COUNT + 1; From adc13395e01aeb2f69f188e7db58414eb70eb4ff Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 14 Dec 2015 14:27:38 -0800 Subject: [PATCH 192/219] Extending the grid migration logic to handle density changes For hotseat migratino, we simply drop the items with least weight If the workspace row/column decreases by 2 or more, we clear the whole workspace Bug: 25958224 Change-Id: I7131b955023d185ed10955f593184b9238546dc8 --- .../launcher3/InvariantDeviceProfile.java | 4 +- .../launcher3/LauncherBackupAgentHelper.java | 7 +- .../launcher3/LauncherBackupHelper.java | 4 +- src/com/android/launcher3/LauncherModel.java | 10 +- ...reTask.java => GridSizeMigrationTask.java} | 260 +++++++++++++++--- .../android/launcher3/util/ConfigMonitor.java | 12 +- 6 files changed, 240 insertions(+), 57 deletions(-) rename src/com/android/launcher3/model/{MigrateFromRestoreTask.java => GridSizeMigrationTask.java} (78%) diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java index b3a8bbc32a..dce1ab8873 100644 --- a/src/com/android/launcher3/InvariantDeviceProfile.java +++ b/src/com/android/launcher3/InvariantDeviceProfile.java @@ -73,12 +73,12 @@ public class InvariantDeviceProfile { /** * Number of icons inside the hotseat area. */ - int numHotseatIcons; + public int numHotseatIcons; float hotseatIconSize; int defaultLayoutId; // Derived invariant properties - int hotseatAllAppsRank; + public int hotseatAllAppsRank; DeviceProfile landscapeProfile; DeviceProfile portraitProfile; diff --git a/src/com/android/launcher3/LauncherBackupAgentHelper.java b/src/com/android/launcher3/LauncherBackupAgentHelper.java index 2177f527e2..d69383e91a 100644 --- a/src/com/android/launcher3/LauncherBackupAgentHelper.java +++ b/src/com/android/launcher3/LauncherBackupAgentHelper.java @@ -25,7 +25,7 @@ import android.database.Cursor; import android.os.ParcelFileDescriptor; import android.util.Log; -import com.android.launcher3.model.MigrateFromRestoreTask; +import com.android.launcher3.model.GridSizeMigrationTask; import java.io.IOException; @@ -118,8 +118,9 @@ public class LauncherBackupAgentHelper extends BackupAgentHelper { LauncherAppState.getLauncherProvider().updateFolderItemsRank(); } - if (MigrateFromRestoreTask.ENABLED && mHelper.shouldAttemptWorkspaceMigration()) { - MigrateFromRestoreTask.markForMigration(getApplicationContext(), + // TODO: Update this logic to handle grid difference of 2. as well as hotseat difference + if (GridSizeMigrationTask.ENABLED && mHelper.shouldAttemptWorkspaceMigration()) { + GridSizeMigrationTask.markForMigration(getApplicationContext(), (int) mHelper.migrationCompatibleProfileData.desktopCols, (int) mHelper.migrationCompatibleProfileData.desktopRows, mHelper.widgetSizes); diff --git a/src/com/android/launcher3/LauncherBackupHelper.java b/src/com/android/launcher3/LauncherBackupHelper.java index 47d1ce9c0c..5f58e284a7 100644 --- a/src/com/android/launcher3/LauncherBackupHelper.java +++ b/src/com/android/launcher3/LauncherBackupHelper.java @@ -52,7 +52,7 @@ import com.android.launcher3.backup.nano.BackupProtos.Screen; import com.android.launcher3.backup.nano.BackupProtos.Widget; import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.compat.UserManagerCompat; -import com.android.launcher3.model.MigrateFromRestoreTask; +import com.android.launcher3.model.GridSizeMigrationTask; import com.android.launcher3.util.Thunk; import com.google.protobuf.nano.InvalidProtocolBufferNanoException; import com.google.protobuf.nano.MessageNano; @@ -315,7 +315,7 @@ public class LauncherBackupHelper implements BackupHelper { return true; } - if (MigrateFromRestoreTask.ENABLED && + if (GridSizeMigrationTask.ENABLED && (oldProfile.desktopCols - currentProfile.desktopCols <= 1) && (oldProfile.desktopRows - currentProfile.desktopRows <= 1)) { // Allow desktop migration when row and/or column count contracts by 1. diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index c34987220d..2e380ed682 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -56,7 +56,7 @@ import com.android.launcher3.compat.PackageInstallerCompat; import com.android.launcher3.compat.PackageInstallerCompat.PackageInstallInfo; import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.compat.UserManagerCompat; -import com.android.launcher3.model.MigrateFromRestoreTask; +import com.android.launcher3.model.GridSizeMigrationTask; import com.android.launcher3.model.WidgetsModel; import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.CursorIconInfo; @@ -1751,14 +1751,14 @@ public class LauncherModel extends BroadcastReceiver int countX = profile.numColumns; int countY = profile.numRows; - if (MigrateFromRestoreTask.ENABLED && MigrateFromRestoreTask.shouldRunTask(mContext)) { + if (GridSizeMigrationTask.ENABLED && GridSizeMigrationTask.shouldRunTask(mContext)) { long migrationStartTime = System.currentTimeMillis(); Log.v(TAG, "Starting workspace migration after restore"); try { - MigrateFromRestoreTask task = new MigrateFromRestoreTask(mContext); + GridSizeMigrationTask task = new GridSizeMigrationTask(mContext); // Clear the flags before starting the task, so that we do not run the task // again, in case there was an uncaught error. - MigrateFromRestoreTask.clearFlags(mContext); + GridSizeMigrationTask.clearFlags(mContext); task.execute(); } catch (Exception e) { Log.e(TAG, "Error during grid migration", e); @@ -1768,6 +1768,8 @@ public class LauncherModel extends BroadcastReceiver } Log.v(TAG, "Workspace migration completed in " + (System.currentTimeMillis() - migrationStartTime)); + + GridSizeMigrationTask.saveCurrentConfig(mContext); } if ((mFlags & LOADER_FLAG_CLEAR_WORKSPACE) != 0) { diff --git a/src/com/android/launcher3/model/MigrateFromRestoreTask.java b/src/com/android/launcher3/model/GridSizeMigrationTask.java similarity index 78% rename from src/com/android/launcher3/model/MigrateFromRestoreTask.java rename to src/com/android/launcher3/model/GridSizeMigrationTask.java index 786ab6009a..bb6a392fc4 100644 --- a/src/com/android/launcher3/model/MigrateFromRestoreTask.java +++ b/src/com/android/launcher3/model/GridSizeMigrationTask.java @@ -24,29 +24,33 @@ import com.android.launcher3.Utilities; import com.android.launcher3.compat.PackageInstallerCompat; import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.util.LongArrayMap; -import com.android.launcher3.util.Thunk; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.Locale; /** * This class takes care of shrinking the workspace (by maximum of one row and one column), as a - * result of restoring from a larger device. + * result of restoring from a larger device or device density change. */ -public class MigrateFromRestoreTask { +public class GridSizeMigrationTask { - public static boolean ENABLED = false; + public static boolean ENABLED = Utilities.isNycOrAbove(); - private static final String TAG = "MigrateFromRestoreTask"; + private static final String TAG = "GridSizeMigrationTask"; private static final boolean DEBUG = true; - private static final String KEY_MIGRATION_SOURCE_SIZE = "migration_restore_src_size"; + private static final String KEY_MIGRATION_SRC_WORKSPACE_SIZE = "migration_src_workspace_size"; + private static final String KEY_MIGRATION_SRC_HOTSEAT_SIZE = "migration_src_hotseat_size"; + + // Set of entries indicating minimum size a widget can be resized to. This is used during + // restore in case the widget has not been installed yet. private static final String KEY_MIGRATION_WIDGET_MINSIZE = "migration_widget_min_size"; // These are carefully selected weights for various item types (Math.random?), to allow for - // the lease absurd migration experience. + // the least absurd migration experience. private static final float WT_SHORTCUT = 1; private static final float WT_APPLICATION = 0.8f; private static final float WT_WIDGET_MIN = 2; @@ -65,17 +69,37 @@ public class MigrateFromRestoreTask { private ArrayList mCarryOver; private final int mSrcX, mSrcY; - @Thunk final int mTrgX, mTrgY; + private final int mTrgX, mTrgY; private final boolean mShouldRemoveX, mShouldRemoveY; - public MigrateFromRestoreTask(Context context) { + private final int mSrcHotseatSize; + private final int mSrcAllAppsRank; + + /** + * TODO: Create a generic constructor which can be unit tested. + */ + public GridSizeMigrationTask(Context context) { mContext = context; + + mIdp = LauncherAppState.getInstance().getInvariantDeviceProfile(); + mTrgX = mIdp.numColumns; + mTrgY = mIdp.numRows; + SharedPreferences prefs = Utilities.getPrefs(context); - Point sourceSize = parsePoint(prefs.getString(KEY_MIGRATION_SOURCE_SIZE, "")); + Point sourceSize = parsePoint( + prefs.getString(KEY_MIGRATION_SRC_WORKSPACE_SIZE, getPointString(mTrgX, mTrgY))); mSrcX = sourceSize.x; mSrcY = sourceSize.y; + // Hotseat + Point hotseatSize = parsePoint( + prefs.getString(KEY_MIGRATION_SRC_HOTSEAT_SIZE, + getPointString(mIdp.numHotseatIcons, mIdp.hotseatAllAppsRank))); + mSrcHotseatSize = hotseatSize.x; + mSrcAllAppsRank = hotseatSize.y; + + // Widget sizes mWidgetMinSize = new HashMap(); for (String s : prefs.getStringSet(KEY_MIGRATION_WIDGET_MINSIZE, Collections.emptySet())) { @@ -83,16 +107,12 @@ public class MigrateFromRestoreTask { mWidgetMinSize.put(parts[0], parsePoint(parts[1])); } - mIdp = LauncherAppState.getInstance().getInvariantDeviceProfile(); - mTrgX = mIdp.numColumns; - mTrgY = mIdp.numRows; mShouldRemoveX = mTrgX < mSrcX; mShouldRemoveY = mTrgY < mSrcY; } public void execute() throws Exception { mEntryToRemove = new ArrayList<>(); - mCarryOver = new ArrayList<>(); mUpdateOperations = new ArrayList<>(); // Initialize list of valid packages. This contain all the packages which are already on @@ -107,6 +127,97 @@ public class MigrateFromRestoreTask { mValidPackages.addAll(PackageInstallerCompat.getInstance(mContext) .updateAndGetActiveSessionCache().keySet()); + // Migrate hotseat + if (mSrcHotseatSize != mIdp.numHotseatIcons || mSrcAllAppsRank != mIdp.hotseatAllAppsRank) { + migrateHotseat(); + } + + if (mShouldRemoveX || mShouldRemoveY) { + if ((mSrcY - mTrgX) > 1 || (mSrcY - mSrcY) > 1) { + // TODO: support this. + throw new Exception("The universe is too large for migration"); + } else { + migrateWorkspace(); + } + } + + // Update items + if (!mUpdateOperations.isEmpty()) { + mContext.getContentResolver().applyBatch(LauncherProvider.AUTHORITY, mUpdateOperations); + } + + if (!mEntryToRemove.isEmpty()) { + if (DEBUG) { + Log.d(TAG, "Removing items: " + TextUtils.join(", ", mEntryToRemove)); + } + mContext.getContentResolver().delete(LauncherSettings.Favorites.CONTENT_URI, + Utilities.createDbSelectionQuery( + LauncherSettings.Favorites._ID, mEntryToRemove), null); + } + + if (!mUpdateOperations.isEmpty() || !mEntryToRemove.isEmpty()) { + // Make sure we haven't removed everything. + final Cursor c = mContext.getContentResolver().query( + LauncherSettings.Favorites.CONTENT_URI, null, null, null, null); + boolean hasData = c.moveToNext(); + c.close(); + if (!hasData) { + throw new Exception("Removed every thing during grid resize"); + } + } + } + + /** + * To migrate hotseat, we load all the entries in order (LTR or RTL) and arrange them + * in the order in the new hotseat while keeping an empty space for all-apps. If the number of + * entries is more than what can fit in the new hotseat, we drop the entries with least weight. + * For weight calculation {@see #WT_SHORTCUT}, {@see #WT_APPLICATION} + * & {@see #WT_FOLDER_FACTOR}. + */ + private void migrateHotseat() { + ArrayList items = loadHotseatEntries(); + + int requiredCount = mIdp.numHotseatIcons - 1; + + while (items.size() > requiredCount) { + // Pick the center item by default. + DbEntry toRemove = items.get(items.size() / 2); + + // Find the item with least weight. + for (DbEntry entry : items) { + if (entry.weight < toRemove.weight) { + toRemove = entry; + } + } + + mEntryToRemove.add(toRemove.id); + items.remove(toRemove); + } + + // Update screen IDS + int newScreenId = 0; + for (DbEntry entry : items) { + if (entry.screenId != newScreenId) { + entry.screenId = newScreenId; + + // These values does not affect the item position, but we should set them + // to something other than -1. + entry.cellX = newScreenId; + entry.cellY = 0; + + update(entry); + } + + newScreenId++; + if (newScreenId == mIdp.hotseatAllAppsRank) { + newScreenId++; + } + } + } + + private void migrateWorkspace() throws Exception { + mCarryOver = new ArrayList<>(); + ArrayList allScreens = LauncherModel.loadWorkspaceScreensDb(mContext); if (allScreens.isEmpty()) { throw new Exception("Unable to get workspace screens"); @@ -154,27 +265,6 @@ public class MigrateFromRestoreTask { LauncherAppState.getInstance().getModel() .updateWorkspaceScreenOrder(mContext, allScreens); } - - // Update items - mContext.getContentResolver().applyBatch(LauncherProvider.AUTHORITY, mUpdateOperations); - - if (!mEntryToRemove.isEmpty()) { - if (DEBUG) { - Log.d(TAG, "Removing items: " + TextUtils.join(", ", mEntryToRemove)); - } - mContext.getContentResolver().delete(LauncherSettings.Favorites.CONTENT_URI, - Utilities.createDbSelectionQuery( - LauncherSettings.Favorites._ID, mEntryToRemove), null); - } - - // Make sure we haven't removed everything. - final Cursor c = mContext.getContentResolver().query( - LauncherSettings.Favorites.CONTENT_URI, null, null, null, null); - boolean hasData = c.moveToNext(); - c.close(); - if (!hasData) { - throw new Exception("Removed every thing during grid resize"); - } } /** @@ -188,7 +278,7 @@ public class MigrateFromRestoreTask { * (otherwise they are placed on a new screen). */ private void migrateScreen(long screenId) { - ArrayList items = loadEntries(screenId); + ArrayList items = loadWorkspaceEntries(screenId); int removedCol = Integer.MAX_VALUE; int removedRow = Integer.MAX_VALUE; @@ -326,7 +416,7 @@ public class MigrateFromRestoreTask { return finalItems; } - @Thunk void markCells(boolean[][] occupied, DbEntry item, boolean val) { + private void markCells(boolean[][] occupied, DbEntry item, boolean val) { for (int i = item.cellX; i < (item.cellX + item.spanX); i++) { for (int j = item.cellY; j < (item.cellY + item.spanY); j++) { occupied[i][j] = val; @@ -334,7 +424,7 @@ public class MigrateFromRestoreTask { } } - @Thunk boolean isVacant(boolean[][] occupied, int x, int y, int w, int h) { + private boolean isVacant(boolean[][] occupied, int x, int y, int w, int h) { if (x + w > mTrgX) return false; if (y + h > mTrgY) return false; @@ -542,10 +632,71 @@ public class MigrateFromRestoreTask { } } + private ArrayList loadHotseatEntries() { + Cursor c = mContext.getContentResolver().query(LauncherSettings.Favorites.CONTENT_URI, + new String[]{ + Favorites._ID, // 0 + Favorites.ITEM_TYPE, // 1 + Favorites.INTENT, // 2 + Favorites.SCREEN}, // 3 + Favorites.CONTAINER + " = " + Favorites.CONTAINER_HOTSEAT, null, null, null); + + final int indexId = c.getColumnIndexOrThrow(Favorites._ID); + final int indexItemType = c.getColumnIndexOrThrow(Favorites.ITEM_TYPE); + final int indexIntent = c.getColumnIndexOrThrow(Favorites.INTENT); + final int indexScreen = c.getColumnIndexOrThrow(Favorites.SCREEN); + + ArrayList entries = new ArrayList<>(); + while (c.moveToNext()) { + DbEntry entry = new DbEntry(); + entry.id = c.getLong(indexId); + entry.itemType = c.getInt(indexItemType); + entry.screenId = c.getLong(indexScreen); + + if (entry.screenId >= mSrcHotseatSize) { + mEntryToRemove.add(entry.id); + continue; + } + + try { + // calculate weight + switch (entry.itemType) { + case Favorites.ITEM_TYPE_SHORTCUT: + case Favorites.ITEM_TYPE_APPLICATION: { + verifyIntent(c.getString(indexIntent)); + entry.weight = entry.itemType == Favorites.ITEM_TYPE_SHORTCUT + ? WT_SHORTCUT : WT_APPLICATION; + break; + } + case Favorites.ITEM_TYPE_FOLDER: { + int total = getFolderItemsCount(entry.id); + if (total == 0) { + throw new Exception("Folder is empty"); + } + entry.weight = WT_FOLDER_FACTOR * total; + break; + } + default: + throw new Exception("Invalid item type"); + } + } catch (Exception e) { + if (DEBUG) { + Log.d(TAG, "Removing item " + entry.id, e); + } + mEntryToRemove.add(entry.id); + continue; + } + entries.add(entry); + } + c.close(); + return entries; + } + + /** * Loads entries for a particular screen id. */ - public ArrayList loadEntries(long screen) { + private ArrayList loadWorkspaceEntries(long screen) { Cursor c = mContext.getContentResolver().query(LauncherSettings.Favorites.CONTENT_URI, new String[] { Favorites._ID, // 0 @@ -730,7 +881,7 @@ public class MigrateFromRestoreTask { } } - @Thunk static ArrayList deepCopy(ArrayList src) { + private static ArrayList deepCopy(ArrayList src) { ArrayList dup = new ArrayList(src.size()); for (DbEntry e : src) { dup.add(e.copy()); @@ -746,18 +897,39 @@ public class MigrateFromRestoreTask { public static void markForMigration(Context context, int srcX, int srcY, HashSet widgets) { Utilities.getPrefs(context).edit() - .putString(KEY_MIGRATION_SOURCE_SIZE, srcX + "," + srcY) + .putString(KEY_MIGRATION_SRC_WORKSPACE_SIZE, getPointString(srcX, srcY)) .putStringSet(KEY_MIGRATION_WIDGET_MINSIZE, widgets) .apply(); } public static boolean shouldRunTask(Context context) { - return !TextUtils.isEmpty(Utilities.getPrefs(context).getString(KEY_MIGRATION_SOURCE_SIZE, "")); + SharedPreferences prefs = Utilities.getPrefs(context); + InvariantDeviceProfile idp = LauncherAppState.getInstance().getInvariantDeviceProfile(); + + // Run task if workspace or hotseat size has changed. + return !getPointString(idp.numColumns, idp.numRows).equals( + prefs.getString(KEY_MIGRATION_SRC_WORKSPACE_SIZE, "")) + || !getPointString(idp.numHotseatIcons, idp.hotseatAllAppsRank).equals( + prefs.getString(KEY_MIGRATION_SRC_HOTSEAT_SIZE, "")); } public static void clearFlags(Context context) { - Utilities.getPrefs(context).edit().remove(KEY_MIGRATION_SOURCE_SIZE) - .remove(KEY_MIGRATION_WIDGET_MINSIZE).commit(); + Utilities.getPrefs(context).edit().remove(KEY_MIGRATION_WIDGET_MINSIZE).commit(); + } + + public static void saveCurrentConfig(Context context) { + InvariantDeviceProfile idp = LauncherAppState.getInstance().getInvariantDeviceProfile(); + Utilities.getPrefs(context).edit() + .putString(KEY_MIGRATION_SRC_WORKSPACE_SIZE, + getPointString(idp.numColumns, idp.numRows)) + .putString(KEY_MIGRATION_SRC_HOTSEAT_SIZE, + getPointString(idp.numHotseatIcons, idp.hotseatAllAppsRank)) + .remove(KEY_MIGRATION_WIDGET_MINSIZE) + .commit(); + } + + private static String getPointString(int x, int y) { + return String.format(Locale.ENGLISH, "%d,%d", x, y); } } diff --git a/src/com/android/launcher3/util/ConfigMonitor.java b/src/com/android/launcher3/util/ConfigMonitor.java index c61fa88591..bdb16390b2 100644 --- a/src/com/android/launcher3/util/ConfigMonitor.java +++ b/src/com/android/launcher3/util/ConfigMonitor.java @@ -23,26 +23,30 @@ import android.content.IntentFilter; import android.content.res.Configuration; import android.util.Log; +import com.android.launcher3.Utilities; + /** * {@link BroadcastReceiver} which watches configuration changes and - * restarts the process in case changes which affect the device profile. + * restarts the process in case changes which affect the device profile occur. */ public class ConfigMonitor extends BroadcastReceiver { private final Context mContext; private final float mFontScale; + private final int mDensity; public ConfigMonitor(Context context) { mContext = context; Configuration config = context.getResources().getConfiguration(); mFontScale = config.fontScale; + mDensity = getDensity(config); } @Override public void onReceive(Context context, Intent intent) { Configuration config = context.getResources().getConfiguration(); - if (mFontScale != config.fontScale) { + if (mFontScale != config.fontScale || mDensity != getDensity(config)) { Log.d("ConfigMonitor", "Configuration changed, restarting launcher"); mContext.unregisterReceiver(this); android.os.Process.killProcess(android.os.Process.myPid()); @@ -52,4 +56,8 @@ public class ConfigMonitor extends BroadcastReceiver { public void register() { mContext.registerReceiver(this, new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED)); } + + private static int getDensity(Configuration config) { + return Utilities.ATLEAST_JB_MR1 ? config.densityDpi : 0; + } } From 08db27c9f7011e3e656866c49d8d6ed7ed62e6fd Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 11 Jan 2016 12:25:10 -0800 Subject: [PATCH 193/219] Adding support for migrating the grid between any two valid screens sizes. The grid is migrated in steps where each step consists of at max one column change and at max one row change. Adding some unit tests for GridMigrationLogic Bug: 25958224 Change-Id: Ie54e872ea0925cc4c463edbba0a7201d62b373a0 --- .../launcher3/InvariantDeviceProfile.java | 2 +- .../launcher3/LauncherBackupAgentHelper.java | 5 +- .../launcher3/LauncherBackupHelper.java | 9 +- src/com/android/launcher3/LauncherModel.java | 23 +- .../android/launcher3/LauncherProvider.java | 61 ++- .../android/launcher3/LauncherSettings.java | 2 +- .../model/GridSizeMigrationTask.java | 485 +++++++++++------- .../model/GridSizeMigrationTaskTest.java | 317 ++++++++++++ .../launcher3/util/TestLauncherProvider.java | 40 ++ 9 files changed, 703 insertions(+), 241 deletions(-) create mode 100644 tests/src/com/android/launcher3/model/GridSizeMigrationTaskTest.java create mode 100644 tests/src/com/android/launcher3/util/TestLauncherProvider.java diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java index dce1ab8873..d60132270a 100644 --- a/src/com/android/launcher3/InvariantDeviceProfile.java +++ b/src/com/android/launcher3/InvariantDeviceProfile.java @@ -83,7 +83,7 @@ public class InvariantDeviceProfile { DeviceProfile landscapeProfile; DeviceProfile portraitProfile; - InvariantDeviceProfile() { + public InvariantDeviceProfile() { } public InvariantDeviceProfile(InvariantDeviceProfile p) { diff --git a/src/com/android/launcher3/LauncherBackupAgentHelper.java b/src/com/android/launcher3/LauncherBackupAgentHelper.java index d69383e91a..1703e41672 100644 --- a/src/com/android/launcher3/LauncherBackupAgentHelper.java +++ b/src/com/android/launcher3/LauncherBackupAgentHelper.java @@ -118,12 +118,9 @@ public class LauncherBackupAgentHelper extends BackupAgentHelper { LauncherAppState.getLauncherProvider().updateFolderItemsRank(); } - // TODO: Update this logic to handle grid difference of 2. as well as hotseat difference if (GridSizeMigrationTask.ENABLED && mHelper.shouldAttemptWorkspaceMigration()) { GridSizeMigrationTask.markForMigration(getApplicationContext(), - (int) mHelper.migrationCompatibleProfileData.desktopCols, - (int) mHelper.migrationCompatibleProfileData.desktopRows, - mHelper.widgetSizes); + mHelper.widgetSizes, mHelper.migrationCompatibleProfileData); } LauncherAppState.getLauncherProvider().convertShortcutsToLauncherActivities(); diff --git a/src/com/android/launcher3/LauncherBackupHelper.java b/src/com/android/launcher3/LauncherBackupHelper.java index 5f58e284a7..05d729e78a 100644 --- a/src/com/android/launcher3/LauncherBackupHelper.java +++ b/src/com/android/launcher3/LauncherBackupHelper.java @@ -315,14 +315,13 @@ public class LauncherBackupHelper implements BackupHelper { return true; } - if (GridSizeMigrationTask.ENABLED && - (oldProfile.desktopCols - currentProfile.desktopCols <= 1) && - (oldProfile.desktopRows - currentProfile.desktopRows <= 1)) { - // Allow desktop migration when row and/or column count contracts by 1. - + if (GridSizeMigrationTask.ENABLED) { + // One time migrate the workspace when launcher starts. migrationCompatibleProfileData = initDeviceProfileData(mIdp); migrationCompatibleProfileData.desktopCols = oldProfile.desktopCols; migrationCompatibleProfileData.desktopRows = oldProfile.desktopRows; + migrationCompatibleProfileData.hotseatCount = oldProfile.hotseatCount; + migrationCompatibleProfileData.allappsRank = oldProfile.allappsRank; return true; } return false; diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 2e380ed682..391ccd4bc5 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -1751,25 +1751,10 @@ public class LauncherModel extends BroadcastReceiver int countX = profile.numColumns; int countY = profile.numRows; - if (GridSizeMigrationTask.ENABLED && GridSizeMigrationTask.shouldRunTask(mContext)) { - long migrationStartTime = System.currentTimeMillis(); - Log.v(TAG, "Starting workspace migration after restore"); - try { - GridSizeMigrationTask task = new GridSizeMigrationTask(mContext); - // Clear the flags before starting the task, so that we do not run the task - // again, in case there was an uncaught error. - GridSizeMigrationTask.clearFlags(mContext); - task.execute(); - } catch (Exception e) { - Log.e(TAG, "Error during grid migration", e); - - // Clear workspace. - mFlags = mFlags | LOADER_FLAG_CLEAR_WORKSPACE; - } - Log.v(TAG, "Workspace migration completed in " - + (System.currentTimeMillis() - migrationStartTime)); - - GridSizeMigrationTask.saveCurrentConfig(mContext); + if (GridSizeMigrationTask.ENABLED && + !GridSizeMigrationTask.migrateGridIfNeeded(mContext)) { + // Migration failed. Clear workspace. + mFlags = mFlags | LOADER_FLAG_CLEAR_WORKSPACE; } if ((mFlags & LOADER_FLAG_CLEAR_WORKSPACE) != 0) { diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 4760930321..0947709170 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -78,7 +78,7 @@ public class LauncherProvider extends ContentProvider { private static final String RESTRICTION_PACKAGE_NAME = "workspace.configuration.package.name"; @Thunk LauncherProviderChangeListener mListener; - @Thunk DatabaseHelper mOpenHelper; + protected DatabaseHelper mOpenHelper; @Override public boolean onCreate() { @@ -113,6 +113,15 @@ public class LauncherProvider extends ContentProvider { } } + /** + * Overridden in tests + */ + protected synchronized void createDbIfNotExists() { + if (mOpenHelper == null) { + mOpenHelper = new DatabaseHelper(getContext()); + } + } + @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { @@ -317,7 +326,10 @@ public class LauncherProvider extends ContentProvider { return folderIds; } - private void notifyListeners() { + /** + * Overridden in tests + */ + protected void notifyListeners() { // always notify the backup agent LauncherBackupAgentHelper.dataChanged(getContext()); if (mListener != null) { @@ -459,7 +471,10 @@ public class LauncherProvider extends ContentProvider { mOpenHelper.createEmptyDB(mOpenHelper.getWritableDatabase()); } - private static class DatabaseHelper extends SQLiteOpenHelper implements LayoutParserCallback { + /** + * The class is subclassed in tests to create an in-memory db. + */ + protected static class DatabaseHelper extends SQLiteOpenHelper implements LayoutParserCallback { private final Context mContext; @Thunk final AppWidgetHost mAppWidgetHost; private long mMaxItemId = -1; @@ -494,6 +509,18 @@ public class LauncherProvider extends ContentProvider { } } + /** + * Constructor used only in tests. + */ + public DatabaseHelper(Context context, String tableName) { + super(context, tableName, null, DATABASE_VERSION); + mContext = context; + + mAppWidgetHost = null; + mMaxItemId = initializeMaxItemId(getWritableDatabase()); + mMaxScreenId = initializeMaxScreenId(getWritableDatabase()); + } + private boolean tableExists(String tableName) { Cursor c = getReadableDatabase().query( true, "sqlite_master", new String[] {"tbl_name"}, @@ -544,18 +571,28 @@ public class LauncherProvider extends ContentProvider { // Fresh and clean launcher DB. mMaxItemId = initializeMaxItemId(db); - setFlagEmptyDbCreated(); + onEmptyDbCreated(); + } + + /** + * Overriden in tests. + */ + protected void onEmptyDbCreated() { + // Set the flag for empty DB + Utilities.getPrefs(mContext).edit().putBoolean(EMPTY_DATABASE_CREATED, true).commit(); // When a new DB is created, remove all previously stored managed profile information. - ManagedProfileHeuristic.processAllUsers(Collections.emptyList(), mContext); + ManagedProfileHeuristic.processAllUsers(Collections.emptyList(), + mContext); + } + + protected long getDefaultUserSerial() { + return UserManagerCompat.getInstance(mContext).getSerialNumberForUser( + UserHandleCompat.myUserHandle()); } private void addFavoritesTable(SQLiteDatabase db, boolean optional) { - UserManagerCompat userManager = UserManagerCompat.getInstance(mContext); - long userSerialNumber = userManager.getSerialNumberForUser( - UserHandleCompat.myUserHandle()); String ifNotExists = optional ? " IF NOT EXISTS " : ""; - db.execSQL("CREATE TABLE " + ifNotExists + TABLE_FAVORITES + " (" + "_id INTEGER PRIMARY KEY," + "title TEXT," + @@ -578,7 +615,7 @@ public class LauncherProvider extends ContentProvider { "appWidgetProvider TEXT," + "modified INTEGER NOT NULL DEFAULT 0," + "restored INTEGER NOT NULL DEFAULT 0," + - "profileId INTEGER DEFAULT " + userSerialNumber + "," + + "profileId INTEGER DEFAULT " + getDefaultUserSerial() + "," + "rank INTEGER NOT NULL DEFAULT 0," + "options INTEGER NOT NULL DEFAULT 0" + ");"); @@ -628,10 +665,6 @@ public class LauncherProvider extends ContentProvider { Utilities.getPrefs(mContext).edit().putBoolean(EMPTY_DATABASE_CREATED, false).commit(); } - private void setFlagEmptyDbCreated() { - Utilities.getPrefs(mContext).edit().putBoolean(EMPTY_DATABASE_CREATED, true).commit(); - } - @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (LOGD) Log.d(TAG, "onUpgrade triggered: " + oldVersion); diff --git a/src/com/android/launcher3/LauncherSettings.java b/src/com/android/launcher3/LauncherSettings.java index 01d670d7b4..55e6395ac4 100644 --- a/src/com/android/launcher3/LauncherSettings.java +++ b/src/com/android/launcher3/LauncherSettings.java @@ -113,7 +113,7 @@ public class LauncherSettings { /** * The content:// style URL for this table */ - static final Uri CONTENT_URI = Uri.parse("content://" + + public static final Uri CONTENT_URI = Uri.parse("content://" + ProviderConfig.AUTHORITY + "/" + TABLE_NAME); /** diff --git a/src/com/android/launcher3/model/GridSizeMigrationTask.java b/src/com/android/launcher3/model/GridSizeMigrationTask.java index bb6a392fc4..f4c564132a 100644 --- a/src/com/android/launcher3/model/GridSizeMigrationTask.java +++ b/src/com/android/launcher3/model/GridSizeMigrationTask.java @@ -9,6 +9,7 @@ import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.database.Cursor; import android.graphics.Point; +import android.net.Uri; import android.text.TextUtils; import android.util.Log; @@ -21,6 +22,7 @@ import com.android.launcher3.LauncherProvider; import com.android.launcher3.LauncherSettings; import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.Utilities; +import com.android.launcher3.backup.nano.BackupProtos; import com.android.launcher3.compat.PackageInstallerCompat; import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.util.LongArrayMap; @@ -58,15 +60,14 @@ public class GridSizeMigrationTask { private static final float WT_FOLDER_FACTOR = 0.5f; private final Context mContext; - private final ContentValues mTempValues = new ContentValues(); - private final HashMap mWidgetMinSize; private final InvariantDeviceProfile mIdp; - private HashSet mValidPackages; - public ArrayList mEntryToRemove; - private ArrayList mUpdateOperations; - - private ArrayList mCarryOver; + private final HashMap mWidgetMinSize = new HashMap<>(); + private final ContentValues mTempValues = new ContentValues(); + private final ArrayList mEntryToRemove = new ArrayList<>(); + private final ArrayList mUpdateOperations = new ArrayList<>(); + private final ArrayList mCarryOver = new ArrayList<>(); + private final HashSet mValidPackages; private final int mSrcX, mSrcY; private final int mTrgX, mTrgY; @@ -74,73 +75,54 @@ public class GridSizeMigrationTask { private final int mSrcHotseatSize; private final int mSrcAllAppsRank; + private final int mDestHotseatSize; + private final int mDestAllAppsRank; - /** - * TODO: Create a generic constructor which can be unit tested. - */ - public GridSizeMigrationTask(Context context) { + protected GridSizeMigrationTask(Context context, InvariantDeviceProfile idp, + HashSet validPackages, HashMap widgetMinSize, + Point sourceSize, Point targetSize) { mContext = context; + mValidPackages = validPackages; + mWidgetMinSize.putAll(widgetMinSize); + mIdp = idp; - - mIdp = LauncherAppState.getInstance().getInvariantDeviceProfile(); - mTrgX = mIdp.numColumns; - mTrgY = mIdp.numRows; - - SharedPreferences prefs = Utilities.getPrefs(context); - Point sourceSize = parsePoint( - prefs.getString(KEY_MIGRATION_SRC_WORKSPACE_SIZE, getPointString(mTrgX, mTrgY))); mSrcX = sourceSize.x; mSrcY = sourceSize.y; - // Hotseat - Point hotseatSize = parsePoint( - prefs.getString(KEY_MIGRATION_SRC_HOTSEAT_SIZE, - getPointString(mIdp.numHotseatIcons, mIdp.hotseatAllAppsRank))); - mSrcHotseatSize = hotseatSize.x; - mSrcAllAppsRank = hotseatSize.y; - - // Widget sizes - mWidgetMinSize = new HashMap(); - for (String s : prefs.getStringSet(KEY_MIGRATION_WIDGET_MINSIZE, - Collections.emptySet())) { - String[] parts = s.split("#"); - mWidgetMinSize.put(parts[0], parsePoint(parts[1])); - } + mTrgX = targetSize.x; + mTrgY = targetSize.y; mShouldRemoveX = mTrgX < mSrcX; mShouldRemoveY = mTrgY < mSrcY; + + // Non-used variables + mSrcHotseatSize = mSrcAllAppsRank = mDestHotseatSize = mDestAllAppsRank = -1; } - public void execute() throws Exception { - mEntryToRemove = new ArrayList<>(); - mUpdateOperations = new ArrayList<>(); + protected GridSizeMigrationTask(Context context, + InvariantDeviceProfile idp, HashSet validPackages, + int srcHotseatSize, int srcAllAppsRank, + int destHotseatSize, int destAllAppsRank) { + mContext = context; + mIdp = idp; + mValidPackages = validPackages; - // Initialize list of valid packages. This contain all the packages which are already on - // the device and packages which are being installed. Any item which doesn't belong to - // this set is removed. - // Since the loader removes such items anyway, removing these items here doesn't cause any - // extra data loss and gives us more free space on the grid for better migration. - mValidPackages = new HashSet<>(); - for (PackageInfo info : mContext.getPackageManager().getInstalledPackages(0)) { - mValidPackages.add(info.packageName); - } - mValidPackages.addAll(PackageInstallerCompat.getInstance(mContext) - .updateAndGetActiveSessionCache().keySet()); + mSrcHotseatSize = srcHotseatSize; + mSrcAllAppsRank = srcAllAppsRank; - // Migrate hotseat - if (mSrcHotseatSize != mIdp.numHotseatIcons || mSrcAllAppsRank != mIdp.hotseatAllAppsRank) { - migrateHotseat(); - } + mDestHotseatSize = destHotseatSize; + mDestAllAppsRank = destAllAppsRank; - if (mShouldRemoveX || mShouldRemoveY) { - if ((mSrcY - mTrgX) > 1 || (mSrcY - mSrcY) > 1) { - // TODO: support this. - throw new Exception("The universe is too large for migration"); - } else { - migrateWorkspace(); - } - } + // Non-used variables + mSrcX = mSrcY = mTrgX = mTrgY = -1; + mShouldRemoveX = mShouldRemoveY = false; + } + /** + * Applied all the pending DB operations + * @return true if any DB operation was commited. + */ + private boolean applyOperations() throws Exception { // Update items if (!mUpdateOperations.isEmpty()) { mContext.getContentResolver().applyBatch(LauncherProvider.AUTHORITY, mUpdateOperations); @@ -155,16 +137,7 @@ public class GridSizeMigrationTask { LauncherSettings.Favorites._ID, mEntryToRemove), null); } - if (!mUpdateOperations.isEmpty() || !mEntryToRemove.isEmpty()) { - // Make sure we haven't removed everything. - final Cursor c = mContext.getContentResolver().query( - LauncherSettings.Favorites.CONTENT_URI, null, null, null, null); - boolean hasData = c.moveToNext(); - c.close(); - if (!hasData) { - throw new Exception("Removed every thing during grid resize"); - } - } + return !mUpdateOperations.isEmpty() || !mEntryToRemove.isEmpty(); } /** @@ -173,11 +146,12 @@ public class GridSizeMigrationTask { * entries is more than what can fit in the new hotseat, we drop the entries with least weight. * For weight calculation {@see #WT_SHORTCUT}, {@see #WT_APPLICATION} * & {@see #WT_FOLDER_FACTOR}. + * @return true if any DB change was made */ - private void migrateHotseat() { + protected boolean migrateHotseat() throws Exception { ArrayList items = loadHotseatEntries(); - int requiredCount = mIdp.numHotseatIcons - 1; + int requiredCount = mDestHotseatSize - 1; while (items.size() > requiredCount) { // Pick the center item by default. @@ -209,15 +183,18 @@ public class GridSizeMigrationTask { } newScreenId++; - if (newScreenId == mIdp.hotseatAllAppsRank) { + if (newScreenId == mDestAllAppsRank) { newScreenId++; } } + + return applyOperations(); } - private void migrateWorkspace() throws Exception { - mCarryOver = new ArrayList<>(); - + /** + * @return true if any DB change was made + */ + protected boolean migrateWorkspace() throws Exception { ArrayList allScreens = LauncherModel.loadWorkspaceScreensDb(mContext); if (allScreens.isEmpty()) { throw new Exception("Unable to get workspace screens"); @@ -261,10 +238,19 @@ public class GridSizeMigrationTask { } while (!mCarryOver.isEmpty()); - - LauncherAppState.getInstance().getModel() - .updateWorkspaceScreenOrder(mContext, allScreens); + // Update screens + final Uri uri = LauncherSettings.WorkspaceScreens.CONTENT_URI; + mUpdateOperations.add(ContentProviderOperation.newDelete(uri).build()); + int count = allScreens.size(); + for (int i = 0; i < count; i++) { + ContentValues v = new ContentValues(); + long screenId = allScreens.get(i); + v.put(LauncherSettings.WorkspaceScreens._ID, screenId); + v.put(LauncherSettings.WorkspaceScreens.SCREEN_RANK, i); + mUpdateOperations.add(ContentProviderOperation.newInsert(uri).withValues(v).build()); + } } + return applyOperations(); } /** @@ -697,96 +683,96 @@ public class GridSizeMigrationTask { * Loads entries for a particular screen id. */ private ArrayList loadWorkspaceEntries(long screen) { - Cursor c = mContext.getContentResolver().query(LauncherSettings.Favorites.CONTENT_URI, - new String[] { - Favorites._ID, // 0 - Favorites.ITEM_TYPE, // 1 - Favorites.CELLX, // 2 - Favorites.CELLY, // 3 - Favorites.SPANX, // 4 - Favorites.SPANY, // 5 - Favorites.INTENT, // 6 - Favorites.APPWIDGET_PROVIDER}, // 7 + Cursor c = mContext.getContentResolver().query(LauncherSettings.Favorites.CONTENT_URI, + new String[]{ + Favorites._ID, // 0 + Favorites.ITEM_TYPE, // 1 + Favorites.CELLX, // 2 + Favorites.CELLY, // 3 + Favorites.SPANX, // 4 + Favorites.SPANY, // 5 + Favorites.INTENT, // 6 + Favorites.APPWIDGET_PROVIDER}, // 7 Favorites.CONTAINER + " = " + Favorites.CONTAINER_DESKTOP - + " AND " + Favorites.SCREEN + " = " + screen, null, null, null); + + " AND " + Favorites.SCREEN + " = " + screen, null, null, null); - final int indexId = c.getColumnIndexOrThrow(Favorites._ID); - final int indexItemType = c.getColumnIndexOrThrow(Favorites.ITEM_TYPE); - final int indexCellX = c.getColumnIndexOrThrow(Favorites.CELLX); - final int indexCellY = c.getColumnIndexOrThrow(Favorites.CELLY); - final int indexSpanX = c.getColumnIndexOrThrow(Favorites.SPANX); - final int indexSpanY = c.getColumnIndexOrThrow(Favorites.SPANY); - final int indexIntent = c.getColumnIndexOrThrow(Favorites.INTENT); - final int indexAppWidgetProvider = c.getColumnIndexOrThrow(Favorites.APPWIDGET_PROVIDER); + final int indexId = c.getColumnIndexOrThrow(Favorites._ID); + final int indexItemType = c.getColumnIndexOrThrow(Favorites.ITEM_TYPE); + final int indexCellX = c.getColumnIndexOrThrow(Favorites.CELLX); + final int indexCellY = c.getColumnIndexOrThrow(Favorites.CELLY); + final int indexSpanX = c.getColumnIndexOrThrow(Favorites.SPANX); + final int indexSpanY = c.getColumnIndexOrThrow(Favorites.SPANY); + final int indexIntent = c.getColumnIndexOrThrow(Favorites.INTENT); + final int indexAppWidgetProvider = c.getColumnIndexOrThrow(Favorites.APPWIDGET_PROVIDER); - ArrayList entries = new ArrayList<>(); - while (c.moveToNext()) { - DbEntry entry = new DbEntry(); - entry.id = c.getLong(indexId); - entry.itemType = c.getInt(indexItemType); - entry.cellX = c.getInt(indexCellX); - entry.cellY = c.getInt(indexCellY); - entry.spanX = c.getInt(indexSpanX); - entry.spanY = c.getInt(indexSpanY); - entry.screenId = screen; + ArrayList entries = new ArrayList<>(); + while (c.moveToNext()) { + DbEntry entry = new DbEntry(); + entry.id = c.getLong(indexId); + entry.itemType = c.getInt(indexItemType); + entry.cellX = c.getInt(indexCellX); + entry.cellY = c.getInt(indexCellY); + entry.spanX = c.getInt(indexSpanX); + entry.spanY = c.getInt(indexSpanY); + entry.screenId = screen; - try { - // calculate weight - switch (entry.itemType) { - case Favorites.ITEM_TYPE_SHORTCUT: - case Favorites.ITEM_TYPE_APPLICATION: { - verifyIntent(c.getString(indexIntent)); - entry.weight = entry.itemType == Favorites.ITEM_TYPE_SHORTCUT - ? WT_SHORTCUT : WT_APPLICATION; - break; - } - case Favorites.ITEM_TYPE_APPWIDGET: { - String provider = c.getString(indexAppWidgetProvider); - ComponentName cn = ComponentName.unflattenFromString(provider); - verifyPackage(cn.getPackageName()); - entry.weight = Math.max(WT_WIDGET_MIN, WT_WIDGET_FACTOR - * entry.spanX * entry.spanY); + try { + // calculate weight + switch (entry.itemType) { + case Favorites.ITEM_TYPE_SHORTCUT: + case Favorites.ITEM_TYPE_APPLICATION: { + verifyIntent(c.getString(indexIntent)); + entry.weight = entry.itemType == Favorites.ITEM_TYPE_SHORTCUT + ? WT_SHORTCUT : WT_APPLICATION; + break; + } + case Favorites.ITEM_TYPE_APPWIDGET: { + String provider = c.getString(indexAppWidgetProvider); + ComponentName cn = ComponentName.unflattenFromString(provider); + verifyPackage(cn.getPackageName()); + entry.weight = Math.max(WT_WIDGET_MIN, WT_WIDGET_FACTOR + * entry.spanX * entry.spanY); - // Migration happens for current user only. - LauncherAppWidgetProviderInfo pInfo = LauncherModel.getProviderInfo( - mContext, cn, UserHandleCompat.myUserHandle()); - Point spans = pInfo == null ? - mWidgetMinSize.get(provider) : pInfo.getMinSpans(mIdp, mContext); - if (spans != null) { - entry.minSpanX = spans.x > 0 ? spans.x : entry.spanX; - entry.minSpanY = spans.y > 0 ? spans.y : entry.spanY; - } else { - // Assume that the widget be resized down to 2x2 - entry.minSpanX = entry.minSpanY = 2; - } + // Migration happens for current user only. + LauncherAppWidgetProviderInfo pInfo = LauncherModel.getProviderInfo( + mContext, cn, UserHandleCompat.myUserHandle()); + Point spans = pInfo == null ? + mWidgetMinSize.get(provider) : pInfo.getMinSpans(mIdp, mContext); + if (spans != null) { + entry.minSpanX = spans.x > 0 ? spans.x : entry.spanX; + entry.minSpanY = spans.y > 0 ? spans.y : entry.spanY; + } else { + // Assume that the widget be resized down to 2x2 + entry.minSpanX = entry.minSpanY = 2; + } - if (entry.minSpanX > mTrgX || entry.minSpanY > mTrgY) { - throw new Exception("Widget can't be resized down to fit the grid"); - } - break; - } - case Favorites.ITEM_TYPE_FOLDER: { - int total = getFolderItemsCount(entry.id); - if (total == 0) { - throw new Exception("Folder is empty"); - } - entry.weight = WT_FOLDER_FACTOR * total; - break; - } - default: - throw new Exception("Invalid item type"); - } - } catch (Exception e) { - if (DEBUG) { - Log.d(TAG, "Removing item " + entry.id, e); - } - mEntryToRemove.add(entry.id); - continue; - } - entries.add(entry); - } - c.close(); - return entries; + if (entry.minSpanX > mTrgX || entry.minSpanY > mTrgY) { + throw new Exception("Widget can't be resized down to fit the grid"); + } + break; + } + case Favorites.ITEM_TYPE_FOLDER: { + int total = getFolderItemsCount(entry.id); + if (total == 0) { + throw new Exception("Folder is empty"); + } + entry.weight = WT_FOLDER_FACTOR * total; + break; + } + default: + throw new Exception("Invalid item type"); + } + } catch (Exception e) { + if (DEBUG) { + Log.d(TAG, "Removing item " + entry.id, e); + } + mEntryToRemove.add(entry.id); + continue; + } + entries.add(entry); + } + c.close(); + return entries; } /** @@ -794,7 +780,7 @@ public class GridSizeMigrationTask { */ private int getFolderItemsCount(long folderId) { Cursor c = mContext.getContentResolver().query(LauncherSettings.Favorites.CONTENT_URI, - new String[] {Favorites._ID, Favorites.INTENT}, + new String[]{Favorites._ID, Favorites.INTENT}, Favorites.CONTAINER + " = " + folderId, null, null, null); int total = 0; @@ -894,42 +880,147 @@ public class GridSizeMigrationTask { return new Point(Integer.parseInt(split[0]), Integer.parseInt(split[1])); } - public static void markForMigration(Context context, int srcX, int srcY, - HashSet widgets) { - Utilities.getPrefs(context).edit() - .putString(KEY_MIGRATION_SRC_WORKSPACE_SIZE, getPointString(srcX, srcY)) - .putStringSet(KEY_MIGRATION_WIDGET_MINSIZE, widgets) - .apply(); - } - - public static boolean shouldRunTask(Context context) { - SharedPreferences prefs = Utilities.getPrefs(context); - InvariantDeviceProfile idp = LauncherAppState.getInstance().getInvariantDeviceProfile(); - - // Run task if workspace or hotseat size has changed. - return !getPointString(idp.numColumns, idp.numRows).equals( - prefs.getString(KEY_MIGRATION_SRC_WORKSPACE_SIZE, "")) - || !getPointString(idp.numHotseatIcons, idp.hotseatAllAppsRank).equals( - prefs.getString(KEY_MIGRATION_SRC_HOTSEAT_SIZE, "")); - } - - public static void clearFlags(Context context) { - Utilities.getPrefs(context).edit().remove(KEY_MIGRATION_WIDGET_MINSIZE).commit(); - } - - public static void saveCurrentConfig(Context context) { - InvariantDeviceProfile idp = LauncherAppState.getInstance().getInvariantDeviceProfile(); - Utilities.getPrefs(context).edit() - .putString(KEY_MIGRATION_SRC_WORKSPACE_SIZE, - getPointString(idp.numColumns, idp.numRows)) - .putString(KEY_MIGRATION_SRC_HOTSEAT_SIZE, - getPointString(idp.numHotseatIcons, idp.hotseatAllAppsRank)) - .remove(KEY_MIGRATION_WIDGET_MINSIZE) - .commit(); - } - private static String getPointString(int x, int y) { return String.format(Locale.ENGLISH, "%d,%d", x, y); } + public static void markForMigration( + Context context, HashSet widgets, BackupProtos.DeviceProfieData srcProfile) { + Utilities.getPrefs(context).edit() + .putString(KEY_MIGRATION_SRC_WORKSPACE_SIZE, + getPointString((int) srcProfile.desktopCols, (int) srcProfile.desktopRows)) + .putString(KEY_MIGRATION_SRC_HOTSEAT_SIZE, + getPointString((int) srcProfile.hotseatCount, srcProfile.allappsRank)) + .putStringSet(KEY_MIGRATION_WIDGET_MINSIZE, widgets) + .apply(); + } + + /** + * Migrates the workspace and hotseat in case their sizes changed. + * @return false if the migration failed. + */ + public static boolean migrateGridIfNeeded(Context context) { + SharedPreferences prefs = Utilities.getPrefs(context); + InvariantDeviceProfile idp = LauncherAppState.getInstance().getInvariantDeviceProfile(); + + String gridSizeString = getPointString(idp.numColumns, idp.numRows); + String hotseatSizeString = getPointString(idp.numHotseatIcons, idp.hotseatAllAppsRank); + + if (gridSizeString.equals(prefs.getString(KEY_MIGRATION_SRC_WORKSPACE_SIZE, "")) && + hotseatSizeString.equals(prefs.getString(KEY_MIGRATION_SRC_HOTSEAT_SIZE, ""))) { + // Skip if workspace and hotseat sizes have not changed. + return true; + } + + long migrationStartTime = System.currentTimeMillis(); + try { + boolean dbChanged = false; + + // Initialize list of valid packages. This contain all the packages which are already on + // the device and packages which are being installed. Any item which doesn't belong to + // this set is removed. + // Since the loader removes such items anyway, removing these items here doesn't cause + // any extra data loss and gives us more free space on the grid for better migration. + HashSet validPackages = new HashSet<>(); + for (PackageInfo info : context.getPackageManager().getInstalledPackages(0)) { + validPackages.add(info.packageName); + } + validPackages.addAll(PackageInstallerCompat.getInstance(context) + .updateAndGetActiveSessionCache().keySet()); + + // Hotseat + Point srcHotseatSize = parsePoint(prefs.getString( + KEY_MIGRATION_SRC_HOTSEAT_SIZE, hotseatSizeString)); + if (srcHotseatSize.x != idp.numHotseatIcons || + srcHotseatSize.y != idp.hotseatAllAppsRank) { + // Migrate hotseat. + + dbChanged = new GridSizeMigrationTask(context, + LauncherAppState.getInstance().getInvariantDeviceProfile(), + validPackages, + srcHotseatSize.x, srcHotseatSize.y, + idp.numHotseatIcons, idp.hotseatAllAppsRank).migrateHotseat(); + } + + // Grid size + Point targetSize = new Point(idp.numColumns, idp.numRows); + Point sourceSize = parsePoint(prefs.getString( + KEY_MIGRATION_SRC_WORKSPACE_SIZE, gridSizeString)); + + if (!targetSize.equals(sourceSize)) { + + // The following list defines all possible grid sizes (and intermediate steps + // during migration). Note that at each step, dx <= 1 && dy <= 1. Any grid size + // which is not in this list is not migrated. + ArrayList gridSizeSteps = new ArrayList<>(); + gridSizeSteps.add(new Point(2, 3)); + gridSizeSteps.add(new Point(3, 3)); + gridSizeSteps.add(new Point(3, 4)); + gridSizeSteps.add(new Point(4, 4)); + gridSizeSteps.add(new Point(5, 5)); + gridSizeSteps.add(new Point(5, 6)); + gridSizeSteps.add(new Point(6, 6)); + gridSizeSteps.add(new Point(7, 7)); + + int sourceSizeIndex = gridSizeSteps.indexOf(sourceSize); + int targetSizeIndex = gridSizeSteps.indexOf(targetSize); + + if (sourceSizeIndex <= -1 || targetSizeIndex <= -1) { + throw new Exception("Unable to migrate grid size from " + sourceSize + + " to " + targetSize); + } + + // Min widget sizes + HashMap widgetMinSize = new HashMap<>(); + for (String s : Utilities.getPrefs(context).getStringSet(KEY_MIGRATION_WIDGET_MINSIZE, + Collections.emptySet())) { + String[] parts = s.split("#"); + widgetMinSize.put(parts[0], parsePoint(parts[1])); + } + + // Migrate the workspace grid, step by step. + while (targetSizeIndex < sourceSizeIndex ) { + // We only need to migrate the grid if source size is greater + // than the target size. + Point stepTargetSize = gridSizeSteps.get(sourceSizeIndex - 1); + Point stepSourceSize = gridSizeSteps.get(sourceSizeIndex); + + if (new GridSizeMigrationTask(context, + LauncherAppState.getInstance().getInvariantDeviceProfile(), + validPackages, widgetMinSize, + stepSourceSize, stepTargetSize).migrateWorkspace()) { + dbChanged = true; + } + sourceSizeIndex--; + } + } + + if (dbChanged) { + // Make sure we haven't removed everything. + final Cursor c = context.getContentResolver().query( + LauncherSettings.Favorites.CONTENT_URI, null, null, null, null); + boolean hasData = c.moveToNext(); + c.close(); + if (!hasData) { + throw new Exception("Removed every thing during grid resize"); + } + } + + return true; + } catch (Exception e) { + Log.e(TAG, "Error during grid migration", e); + + return false; + } finally { + Log.v(TAG, "Workspace migration completed in " + + (System.currentTimeMillis() - migrationStartTime)); + + // Save current configuration, so that the migration does not run again. + prefs.edit() + .putString(KEY_MIGRATION_SRC_WORKSPACE_SIZE, gridSizeString) + .putString(KEY_MIGRATION_SRC_HOTSEAT_SIZE, hotseatSizeString) + .remove(KEY_MIGRATION_WIDGET_MINSIZE) + .apply(); + } + } } diff --git a/tests/src/com/android/launcher3/model/GridSizeMigrationTaskTest.java b/tests/src/com/android/launcher3/model/GridSizeMigrationTaskTest.java new file mode 100644 index 0000000000..ec157bc123 --- /dev/null +++ b/tests/src/com/android/launcher3/model/GridSizeMigrationTaskTest.java @@ -0,0 +1,317 @@ +package com.android.launcher3.model; + +import android.content.ContentValues; +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Point; +import android.test.ProviderTestCase2; + +import com.android.launcher3.InvariantDeviceProfile; +import com.android.launcher3.LauncherAppState; +import com.android.launcher3.LauncherModel; +import com.android.launcher3.LauncherSettings; +import com.android.launcher3.config.ProviderConfig; +import com.android.launcher3.util.TestLauncherProvider; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; + +/** + * Unit tests for {@link GridSizeMigrationTask} + */ +public class GridSizeMigrationTaskTest extends ProviderTestCase2 { + + private static final long DESKTOP = LauncherSettings.Favorites.CONTAINER_DESKTOP; + private static final long HOTSEAT = LauncherSettings.Favorites.CONTAINER_HOTSEAT; + + private static final int APPLICATION = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION; + private static final int SHORTCUT = LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT; + + private static final String TEST_PACKAGE = "com.android.launcher3.validpackage"; + private static final String VALID_INTENT = + new Intent(Intent.ACTION_MAIN).setPackage(TEST_PACKAGE).toUri(0); + + private HashSet mValidPackages; + private InvariantDeviceProfile mIdp; + + public GridSizeMigrationTaskTest() { + super(TestLauncherProvider.class, ProviderConfig.AUTHORITY); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + mValidPackages = new HashSet<>(); + mValidPackages.add(TEST_PACKAGE); + + mIdp = new InvariantDeviceProfile(); + } + + public void testHotseatMigration_apps_dropped() throws Exception { + long[] hotseatItems = { + addItem(APPLICATION, 0, HOTSEAT, 0, 0), + addItem(SHORTCUT, 1, HOTSEAT, 0, 0), + -1, + addItem(SHORTCUT, 3, HOTSEAT, 0, 0), + addItem(APPLICATION, 4, HOTSEAT, 0, 0), + }; + + new GridSizeMigrationTask(getMockContext(), mIdp, mValidPackages, 5, 2, 3, 1) + .migrateHotseat(); + // First & last items are dropped as they have the least weight. + verifyHotseat(hotseatItems[1], -1, hotseatItems[3]); + } + + public void testHotseatMigration_shortcuts_dropped() throws Exception { + long[] hotseatItems = { + addItem(APPLICATION, 0, HOTSEAT, 0, 0), + addItem(30, 1, HOTSEAT, 0, 0), + -1, + addItem(SHORTCUT, 3, HOTSEAT, 0, 0), + addItem(10, 4, HOTSEAT, 0, 0), + }; + + new GridSizeMigrationTask(getMockContext(), mIdp, mValidPackages, 5, 2, 3, 1) + .migrateHotseat(); + // First & third items are dropped as they have the least weight. + verifyHotseat(hotseatItems[1], -1, hotseatItems[4]); + } + + private void verifyHotseat(long... sortedIds) { + int screenId = 0; + int total = 0; + + for (long id : sortedIds) { + Cursor c = getMockContentResolver().query(LauncherSettings.Favorites.CONTENT_URI, + new String[]{LauncherSettings.Favorites._ID}, + "container=-101 and screen=" + screenId, null, null, null); + + if (id == -1) { + assertEquals(0, c.getCount()); + } else { + assertEquals(1, c.getCount()); + c.moveToNext(); + assertEquals(id, c.getLong(0)); + total ++; + } + c.close(); + + screenId++; + } + + // Verify that not other entry exist in the DB. + Cursor c = getMockContentResolver().query(LauncherSettings.Favorites.CONTENT_URI, + new String[]{LauncherSettings.Favorites._ID}, + "container=-101", null, null, null); + assertEquals(total, c.getCount()); + c.close(); + } + + public void testWorkspace_empty_row_column_removed() throws Exception { + long[][][] ids = createGrid(new int[][][]{{ + { 0, 0, -1, 1}, + { 3, 1, -1, 4}, + { -1, -1, -1, -1}, + { 5, 2, -1, 6}, + }}); + + new GridSizeMigrationTask(getMockContext(), mIdp, mValidPackages, new HashMap(), + new Point(4, 4), new Point(3, 3)).migrateWorkspace(); + + // Column 2 and row 2 got removed. + verifyWorkspace(new long[][][] {{ + {ids[0][0][0], ids[0][0][1], ids[0][0][3]}, + {ids[0][1][0], ids[0][1][1], ids[0][1][3]}, + {ids[0][3][0], ids[0][3][1], ids[0][3][3]}, + }}); + } + + public void testWorkspace_new_screen_created() throws Exception { + long[][][] ids = createGrid(new int[][][]{{ + { 0, 0, 0, 1}, + { 3, 1, 0, 4}, + { -1, -1, -1, -1}, + { 5, 2, -1, 6}, + }}); + + new GridSizeMigrationTask(getMockContext(), mIdp, mValidPackages, new HashMap(), + new Point(4, 4), new Point(3, 3)).migrateWorkspace(); + + // Items in the second column get moved to new screen + verifyWorkspace(new long[][][] {{ + {ids[0][0][0], ids[0][0][1], ids[0][0][3]}, + {ids[0][1][0], ids[0][1][1], ids[0][1][3]}, + {ids[0][3][0], ids[0][3][1], ids[0][3][3]}, + }, { + {ids[0][0][2], ids[0][1][2], -1}, + }}); + } + + public void testWorkspace_items_merged_in_next_screen() throws Exception { + long[][][] ids = createGrid(new int[][][]{{ + { 0, 0, 0, 1}, + { 3, 1, 0, 4}, + { -1, -1, -1, -1}, + { 5, 2, -1, 6}, + },{ + { 0, 0, -1, 1}, + { 3, 1, -1, 4}, + }}); + + new GridSizeMigrationTask(getMockContext(), mIdp, mValidPackages, new HashMap(), + new Point(4, 4), new Point(3, 3)).migrateWorkspace(); + + // Items in the second column of the first screen should get placed on the 3rd + // row of the second screen + verifyWorkspace(new long[][][] {{ + {ids[0][0][0], ids[0][0][1], ids[0][0][3]}, + {ids[0][1][0], ids[0][1][1], ids[0][1][3]}, + {ids[0][3][0], ids[0][3][1], ids[0][3][3]}, + }, { + {ids[1][0][0], ids[1][0][1], ids[1][0][3]}, + {ids[1][1][0], ids[1][1][1], ids[1][1][3]}, + {ids[0][0][2], ids[0][1][2], -1}, + }}); + } + + public void testWorkspace_items_not_merged_in_next_screen() throws Exception { + // First screen has 2 items that need to be moved, but second screen has only one + // empty space after migration (top-left corner) + long[][][] ids = createGrid(new int[][][]{{ + { 0, 0, 0, 1}, + { 3, 1, 0, 4}, + { -1, -1, -1, -1}, + { 5, 2, -1, 6}, + },{ + { -1, 0, -1, 1}, + { 3, 1, -1, 4}, + { -1, -1, -1, -1}, + { 5, 2, -1, 6}, + }}); + + new GridSizeMigrationTask(getMockContext(), mIdp, mValidPackages, new HashMap(), + new Point(4, 4), new Point(3, 3)).migrateWorkspace(); + + // Items in the second column of the first screen should get placed on a new screen. + verifyWorkspace(new long[][][] {{ + {ids[0][0][0], ids[0][0][1], ids[0][0][3]}, + {ids[0][1][0], ids[0][1][1], ids[0][1][3]}, + {ids[0][3][0], ids[0][3][1], ids[0][3][3]}, + }, { + { -1, ids[1][0][1], ids[1][0][3]}, + {ids[1][1][0], ids[1][1][1], ids[1][1][3]}, + {ids[1][3][0], ids[1][3][1], ids[1][3][3]}, + }, { + {ids[0][0][2], ids[0][1][2], -1}, + }}); + } + + /** + * Initializes the DB with dummy elements to represent the provided grid structure. + * @param typeArray A 3d array of item types. {@see #addItem(int, long, long, int, int)} for + * type definitions. The first dimension represents the screens and the next + * two represent the workspace grid. + * @return the same grid representation where each entry is the corresponding item id. + */ + private long[][][] createGrid(int[][][] typeArray) throws Exception { + long[][][] ids = new long[typeArray.length][][]; + + for (int i = 0; i < typeArray.length; i++) { + // Add screen to DB + long screenId = LauncherAppState.getLauncherProvider().generateNewScreenId(); + ContentValues v = new ContentValues(); + v.put(LauncherSettings.WorkspaceScreens._ID, screenId); + v.put(LauncherSettings.WorkspaceScreens.SCREEN_RANK, i); + getMockContentResolver().insert(LauncherSettings.WorkspaceScreens.CONTENT_URI, v); + + ids[i] = new long[typeArray[i].length][]; + for (int y = 0; y < typeArray[i].length; y++) { + ids[i][y] = new long[typeArray[i][y].length]; + for (int x = 0; x < typeArray[i][y].length; x++) { + if (typeArray[i][y][x] < 0) { + // Empty cell + ids[i][y][x] = -1; + } else { + ids[i][y][x] = addItem(typeArray[i][y][x], screenId, DESKTOP, x, y); + } + } + } + } + return ids; + } + + /** + * Verifies that the workspace items are arranged in the provided order. + * @param ids A 3d array where the first dimension represents the screen, and the rest two + * represent the workspace grid. + */ + private void verifyWorkspace(long[][][] ids) { + ArrayList allScreens = LauncherModel.loadWorkspaceScreensDb(getMockContext()); + assertEquals(ids.length, allScreens.size()); + int total = 0; + + for (int i = 0; i < ids.length; i++) { + long screenId = allScreens.get(i); + for (int y = 0; y < ids[i].length; y++) { + for (int x = 0; x < ids[i][y].length; x++) { + long id = ids[i][y][x]; + + Cursor c = getMockContentResolver().query(LauncherSettings.Favorites.CONTENT_URI, + new String[]{LauncherSettings.Favorites._ID}, + "container=-100 and screen=" + screenId + + " and cellX=" + x + " and cellY=" + y, null, null, null); + if (id == -1) { + assertEquals(0, c.getCount()); + } else { + assertEquals(1, c.getCount()); + c.moveToNext(); + assertEquals(id, c.getLong(0)); + total++; + } + c.close(); + } + } + } + + // Verify that not other entry exist in the DB. + Cursor c = getMockContentResolver().query(LauncherSettings.Favorites.CONTENT_URI, + new String[]{LauncherSettings.Favorites._ID}, + "container=-100", null, null, null); + assertEquals(total, c.getCount()); + c.close(); + } + + /** + * Adds a dummy item in the DB. + * @param type {@link #APPLICATION} or {@link #SHORTCUT} or >= 2 for + * folder (where the type represents the number of items in the folder). + */ + private long addItem(int type, long screen, long container, int x, int y) throws Exception { + long id = LauncherAppState.getLauncherProvider().generateNewItemId(); + + ContentValues values = new ContentValues(); + values.put(LauncherSettings.Favorites._ID, id); + values.put(LauncherSettings.Favorites.CONTAINER, container); + values.put(LauncherSettings.Favorites.SCREEN, screen); + values.put(LauncherSettings.Favorites.CELLX, x); + values.put(LauncherSettings.Favorites.CELLY, y); + values.put(LauncherSettings.Favorites.SPANX, 1); + values.put(LauncherSettings.Favorites.SPANY, 1); + + if (type == APPLICATION || type == SHORTCUT) { + values.put(LauncherSettings.Favorites.ITEM_TYPE, type); + values.put(LauncherSettings.Favorites.INTENT, VALID_INTENT); + } else { + values.put(LauncherSettings.Favorites.ITEM_TYPE, + LauncherSettings.Favorites.ITEM_TYPE_FOLDER); + // Add folder items. + for (int i = 0; i < type; i++) { + addItem(APPLICATION, 0, id, 0, 0); + } + } + + getMockContentResolver().insert(LauncherSettings.Favorites.CONTENT_URI, values); + return id; + } +} diff --git a/tests/src/com/android/launcher3/util/TestLauncherProvider.java b/tests/src/com/android/launcher3/util/TestLauncherProvider.java new file mode 100644 index 0000000000..aef3240ca8 --- /dev/null +++ b/tests/src/com/android/launcher3/util/TestLauncherProvider.java @@ -0,0 +1,40 @@ +package com.android.launcher3.util; + +import android.content.Context; + +import com.android.launcher3.LauncherProvider; + +/** + * An extension of LauncherProvider backed up by in-memory database. + */ +public class TestLauncherProvider extends LauncherProvider { + + @Override + public boolean onCreate() { + return true; + } + + @Override + protected synchronized void createDbIfNotExists() { + if (mOpenHelper == null) { + mOpenHelper = new MyDatabaseHelper(getContext(), this); + } + } + + @Override + protected void notifyListeners() { } + + private static class MyDatabaseHelper extends DatabaseHelper { + public MyDatabaseHelper(Context context, LauncherProvider provider) { + super(context, provider, null); + } + + @Override + protected long getDefaultUserSerial() { + return 0; + } + + @Override + protected void onEmptyDbCreated() { } + } +} \ No newline at end of file From 1e41c08fa31cbbea82f954d50a39da29367b13c1 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 7 Apr 2016 15:21:29 -0700 Subject: [PATCH 194/219] Fixing gradle and some tests Change-Id: Ied44ab475a30058f19387e843ce113b3028c1bd5 --- build.gradle | 10 +++++----- .../android/launcher3/util/TestLauncherProvider.java | 7 ++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 44f5b7c528..b9a990f87e 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:+' + classpath 'com.android.tools.build:gradle:1.5.0' classpath 'com.google.protobuf:protobuf-gradle-plugin:0.7.0' } } @@ -51,13 +51,13 @@ repositories { } dependencies { - compile 'com.android.support:support-v4:23.0.1' - compile 'com.android.support:recyclerview-v7:23.0.1' + compile 'com.android.support:support-v4:23.1.1' + compile 'com.android.support:recyclerview-v7:23.1.1' compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-2' testCompile 'junit:junit:4.12' - androidTestCompile 'com.android.support.test:runner:+' - androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:+' + androidTestCompile 'com.android.support.test:runner:0.5' + androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' } protobuf { diff --git a/tests/src/com/android/launcher3/util/TestLauncherProvider.java b/tests/src/com/android/launcher3/util/TestLauncherProvider.java index aef3240ca8..8758f55708 100644 --- a/tests/src/com/android/launcher3/util/TestLauncherProvider.java +++ b/tests/src/com/android/launcher3/util/TestLauncherProvider.java @@ -2,6 +2,7 @@ package com.android.launcher3.util; import android.content.Context; +import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherProvider; /** @@ -17,7 +18,7 @@ public class TestLauncherProvider extends LauncherProvider { @Override protected synchronized void createDbIfNotExists() { if (mOpenHelper == null) { - mOpenHelper = new MyDatabaseHelper(getContext(), this); + mOpenHelper = new MyDatabaseHelper(getContext()); } } @@ -25,8 +26,8 @@ public class TestLauncherProvider extends LauncherProvider { protected void notifyListeners() { } private static class MyDatabaseHelper extends DatabaseHelper { - public MyDatabaseHelper(Context context, LauncherProvider provider) { - super(context, provider, null); + public MyDatabaseHelper(Context context) { + super(context, null); } @Override From 58b53b5dff703285229fd024fdd882c1606df1a9 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 23 Feb 2016 14:49:22 -0800 Subject: [PATCH 195/219] Preserving the homescreen rotation setting on a tablet, when the display is scaled Bug: 27040652 Change-Id: I07f5e02443379ac5b877f72d33cedf4f2feca926 Conflicts: src/com/android/launcher3/Utilities.java --- .../launcher3/WallpaperPickerActivity.java | 7 +--- src/com/android/launcher3/Launcher.java | 6 ++-- .../android/launcher3/LauncherProvider.java | 11 +++++-- src/com/android/launcher3/Utilities.java | 33 ++++++++++--------- 4 files changed, 30 insertions(+), 27 deletions(-) diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index 5d41238434..4998bf4b73 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -1195,11 +1195,6 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { @Override public boolean enableRotation() { - // Check if rotation is enabled for this device. - if (Utilities.isRotationAllowedForDevice(getContext())) - return true; - - // Check if the user has specifically enabled rotation via preferences. - return Utilities.isAllowRotationPrefEnabled(getApplicationContext(), true); + return true; } } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 40c5bd69eb..5d53fd0159 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -488,11 +488,11 @@ public class Launcher extends Activity IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); registerReceiver(mCloseSystemDialogsReceiver, filter); - mRotationEnabled = Utilities.isRotationAllowedForDevice(getApplicationContext()); + mRotationEnabled = getResources().getBoolean(R.bool.allow_rotation); // In case we are on a device with locked rotation, we should look at preferences to check // if the user has specifically allowed rotation. if (!mRotationEnabled) { - mRotationEnabled = Utilities.isAllowRotationPrefEnabled(getApplicationContext(), false); + mRotationEnabled = Utilities.isAllowRotationPrefEnabled(getApplicationContext()); } // On large interfaces, or on devices that a user has specifically enabled screen rotation, @@ -1205,7 +1205,7 @@ public class Launcher extends Activity } else { // On devices with a locked orientation, we will at least have the allow rotation // setting. - return !Utilities.isRotationAllowedForDevice(this); + return !getResources().getBoolean(R.bool.allow_rotation); } } diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 0947709170..7c4b78d0be 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -268,9 +268,14 @@ public class LauncherProvider extends ContentProvider { switch (method) { case LauncherSettings.Settings.METHOD_GET_BOOLEAN: { Bundle result = new Bundle(); - result.putBoolean(LauncherSettings.Settings.EXTRA_VALUE, - Utilities.getPrefs(getContext()).getBoolean(arg, extras.getBoolean( - LauncherSettings.Settings.EXTRA_DEFAULT_VALUE))); + if (Utilities.ALLOW_ROTATION_PREFERENCE_KEY.equals(arg)) { + result.putBoolean(LauncherSettings.Settings.EXTRA_VALUE, + Utilities.isAllowRotationPrefEnabled(getContext())); + } else { + result.putBoolean(LauncherSettings.Settings.EXTRA_VALUE, + Utilities.getPrefs(getContext()).getBoolean(arg, extras.getBoolean( + LauncherSettings.Settings.EXTRA_DEFAULT_VALUE))); + } return result; } case LauncherSettings.Settings.METHOD_SET_BOOLEAN: { diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index e3b450bb08..271e581f01 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -141,27 +141,30 @@ public final class Utilities { CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE, TimeUnit.SECONDS, new LinkedBlockingQueue()); - // To turn on these properties, type - // adb shell setprop log.tag.PROPERTY_NAME [VERBOSE | SUPPRESS] - private static final String FORCE_ENABLE_ROTATION_PROPERTY = "launcher_force_rotate"; - private static boolean sForceEnableRotation = isPropertyEnabled(FORCE_ENABLE_ROTATION_PROPERTY); - public static final String ALLOW_ROTATION_PREFERENCE_KEY = "pref_allowRotation"; public static boolean isPropertyEnabled(String propertyName) { return Log.isLoggable(propertyName, Log.VERBOSE); } - public static boolean isAllowRotationPrefEnabled(Context context, boolean multiProcess) { - SharedPreferences sharedPrefs = context.getSharedPreferences( - LauncherFiles.SHARED_PREFERENCES_KEY, Context.MODE_PRIVATE | (multiProcess ? - Context.MODE_MULTI_PROCESS : 0)); - boolean allowRotationPref = sharedPrefs.getBoolean(ALLOW_ROTATION_PREFERENCE_KEY, false); - return sForceEnableRotation || allowRotationPref; - } - - public static boolean isRotationAllowedForDevice(Context context) { - return sForceEnableRotation || context.getResources().getBoolean(R.bool.allow_rotation); + public static boolean isAllowRotationPrefEnabled(Context context) { + boolean allowRotationPref = false; + if (isNycOrAbove()) { + // If the device was scaled, used the original dimensions to determine if rotation + // is allowed of not. + try { + // TODO: Use the actual field when the API is finalized. + int originalDensity = + DisplayMetrics.class.getField("DENSITY_DEVICE_STABLE").getInt(null); + Resources res = context.getResources(); + int originalSmallestWidth = res.getConfiguration().smallestScreenWidthDp + * res.getDisplayMetrics().densityDpi / originalDensity; + allowRotationPref = originalSmallestWidth >= 600; + } catch (Exception e) { + // Ignore + } + } + return getPrefs(context).getBoolean(ALLOW_ROTATION_PREFERENCE_KEY, allowRotationPref); } public static Bitmap createIconBitmap(Cursor c, int iconIndex, Context context) { From 1024a80f2c2cb70bc4bd0ea72d998464e59471ab Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 3 Mar 2016 16:58:55 -0800 Subject: [PATCH 196/219] Changing the widget loading strategy Widget is loaded only when the user enters the overview mode and we keep the list updated as long as the user is in the overview mode. Once the user leaves the overview mode, we stop responding to widget updates Bug: 26077457 Change-Id: I9e4904b8f1300bfe0d77e2bc5f59aa6963fad8d1 --- src/com/android/launcher3/Launcher.java | 88 ++++--- .../launcher3/LauncherAppWidgetHost.java | 4 + .../launcher3/LauncherBackupHelper.java | 25 +- src/com/android/launcher3/LauncherModel.java | 231 ++++-------------- .../LauncherStateTransitionAnimation.java | 2 +- src/com/android/launcher3/Workspace.java | 48 ++-- .../compat/AppWidgetManagerCompat.java | 12 + .../compat/AppWidgetManagerCompatV16.java | 24 ++ .../compat/AppWidgetManagerCompatVL.java | 27 ++ .../model/GridSizeMigrationTask.java | 12 +- .../android/launcher3/model/WidgetsModel.java | 40 ++- .../widget/WidgetsContainerView.java | 4 + 12 files changed, 262 insertions(+), 255 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 5d53fd0159..308e08de0c 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1594,8 +1594,7 @@ public class Launcher extends Activity ItemInfo info = mPendingAddInfo; if (appWidgetInfo == null) { - appWidgetInfo = LauncherAppWidgetProviderInfo.fromProviderInfo(this, - mAppWidgetManager.getAppWidgetInfo(appWidgetId)); + appWidgetInfo = mAppWidgetManager.getLauncherAppWidgetInfo(appWidgetId); } if (appWidgetInfo.isCustomWidget) { @@ -2591,10 +2590,10 @@ public class Launcher extends Activity final LauncherAppWidgetInfo info = (LauncherAppWidgetInfo) v.getTag(); if (v.isReadyForClickSetup()) { int widgetId = info.appWidgetId; - AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(widgetId); + LauncherAppWidgetProviderInfo appWidgetInfo = + mAppWidgetManager.getLauncherAppWidgetInfo(widgetId); if (appWidgetInfo != null) { - mPendingAddWidgetInfo = LauncherAppWidgetProviderInfo.fromProviderInfo( - this, appWidgetInfo); + mPendingAddWidgetInfo = appWidgetInfo; mPendingAddInfo.copyFrom(info); mPendingAddWidgetId = widgetId; @@ -3593,10 +3592,6 @@ public class Launcher extends Activity // TODO } - protected void disableVoiceButtonProxy(boolean disable) { - // NO-OP - } - public boolean launcherCallbacksProvidesSearch() { return (mLauncherCallbacks != null && mLauncherCallbacks.providesSearch()); } @@ -4002,6 +3997,16 @@ public class Launcher extends Activity sFolders = folders.clone(); } + private void bindSafeModeWidget(LauncherAppWidgetInfo item) { + PendingAppWidgetHostView view = new PendingAppWidgetHostView(this, item, true); + view.updateIcon(mIconCache); + item.hostView = view; + item.hostView.updateAppWidget(null); + item.hostView.setOnClickListener(this); + addAppWidgetToWorkspace(item, null, false); + mWorkspace.requestLayout(); + } + /** * Add the views for a widget to the workspace. * @@ -4017,19 +4022,31 @@ public class Launcher extends Activity return; } + if (mIsSafeModeEnabled) { + bindSafeModeWidget(item); + return; + } + final long start = DEBUG_WIDGETS ? SystemClock.uptimeMillis() : 0; if (DEBUG_WIDGETS) { Log.d(TAG, "bindAppWidget: " + item); } - final Workspace workspace = mWorkspace; - LauncherAppWidgetProviderInfo appWidgetInfo = - LauncherModel.getProviderInfo(this, item.providerName, item.user); + final LauncherAppWidgetProviderInfo appWidgetInfo; - if (!mIsSafeModeEnabled - && ((item.restoreStatus & LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY) == 0) - && (item.restoreStatus != LauncherAppWidgetInfo.RESTORE_COMPLETED)) { + if (item.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY)) { + // If the provider is not ready, bind as a pending widget. + appWidgetInfo = null; + } else if (item.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_ID_NOT_VALID)) { + // The widget id is not valid. Try to find the widget based on the provider info. + appWidgetInfo = mAppWidgetManager.findProvider(item.providerName, item.user); + } else { + appWidgetInfo = mAppWidgetManager.getLauncherAppWidgetInfo(item.appWidgetId); + } + // If the provider is ready, but the width is not yet restored, try to restore it. + if (!item.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY) && + (item.restoreStatus != LauncherAppWidgetInfo.RESTORE_COMPLETED)) { if (appWidgetInfo == null) { if (DEBUG_WIDGETS) { Log.d(TAG, "Removing restored widget: id=" + item.appWidgetId @@ -4041,7 +4058,7 @@ public class Launcher extends Activity } // If we do not have a valid id, try to bind an id. - if ((item.restoreStatus & LauncherAppWidgetInfo.FLAG_ID_NOT_VALID) != 0) { + if (item.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_ID_NOT_VALID)) { // Note: This assumes that the id remap broadcast is received before this step. // If that is not the case, the id remap will be ignored and user may see the // click to setup view. @@ -4077,46 +4094,42 @@ public class Launcher extends Activity : LauncherAppWidgetInfo.FLAG_UI_NOT_READY; LauncherModel.updateItemInDatabase(this, item); - } else if (((item.restoreStatus & LauncherAppWidgetInfo.FLAG_UI_NOT_READY) != 0) + } else if (item.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_UI_NOT_READY) && (appWidgetInfo.configure == null)) { - // If the ID is already valid, verify if we need to configure or not. + // The widget was marked as UI not ready, but there is no configure activity to + // update the UI. item.restoreStatus = LauncherAppWidgetInfo.RESTORE_COMPLETED; LauncherModel.updateItemInDatabase(this, item); } } - if (!mIsSafeModeEnabled && item.restoreStatus == LauncherAppWidgetInfo.RESTORE_COMPLETED) { - final int appWidgetId = item.appWidgetId; + if (item.restoreStatus == LauncherAppWidgetInfo.RESTORE_COMPLETED) { if (DEBUG_WIDGETS) { Log.d(TAG, "bindAppWidget: id=" + item.appWidgetId + " belongs to component " + appWidgetInfo.provider); } // Verify that we own the widget - AppWidgetProviderInfo info = mAppWidgetManager.getAppWidgetInfo(appWidgetId); - if (info == null || appWidgetInfo == null || - !info.provider.equals(appWidgetInfo.provider)) { - Log.e(TAG, "Removing invalid widget: id=" + item.appWidgetId + " info=" + info - + " appWidgetInfo=" + appWidgetInfo); + if (appWidgetInfo == null) { + Log.e(TAG, "Removing invalid widget: id=" + item.appWidgetId); deleteWidgetInfo(item); return; } - item.hostView = mAppWidgetHost.createView(this, appWidgetId, appWidgetInfo); + item.hostView = mAppWidgetHost.createView(this, item.appWidgetId, appWidgetInfo); item.minSpanX = appWidgetInfo.minSpanX; item.minSpanY = appWidgetInfo.minSpanY; + addAppWidgetToWorkspace(item, appWidgetInfo, false); } else { - appWidgetInfo = null; PendingAppWidgetHostView view = new PendingAppWidgetHostView(this, item, mIsSafeModeEnabled); view.updateIcon(mIconCache); item.hostView = view; item.hostView.updateAppWidget(null); item.hostView.setOnClickListener(this); + addAppWidgetToWorkspace(item, null, false); } - - addAppWidgetToWorkspace(item, appWidgetInfo, false); - workspace.requestLayout(); + mWorkspace.requestLayout(); if (DEBUG_WIDGETS) { Log.d(TAG, "bound widget id="+item.appWidgetId+" in " @@ -4422,15 +4435,15 @@ public class Launcher extends Activity } } - private Runnable mBindPackagesUpdatedRunnable = new Runnable() { + private Runnable mBindWidgetModelRunnable = new Runnable() { public void run() { - bindAllPackages(mWidgetsModel); + bindWidgetsModel(mWidgetsModel); } }; @Override - public void bindAllPackages(final WidgetsModel model) { - if (waitUntilResume(mBindPackagesUpdatedRunnable, true)) { + public void bindWidgetsModel(WidgetsModel model) { + if (waitUntilResume(mBindWidgetModelRunnable, true)) { mWidgetsModel = model; return; } @@ -4441,6 +4454,13 @@ public class Launcher extends Activity } } + @Override + public void notifyWidgetProvidersChanged() { + if (mWorkspace.getState().shouldUpdateWidget) { + mModel.refreshAndBindWidgetsAndShortcuts(this, mWidgetsView.isEmpty()); + } + } + private int mapConfigurationOriActivityInfoOri(int configOri) { final Display d = getWindowManager().getDefaultDisplay(); int naturalOri = Configuration.ORIENTATION_LANDSCAPE; diff --git a/src/com/android/launcher3/LauncherAppWidgetHost.java b/src/com/android/launcher3/LauncherAppWidgetHost.java index b07ccc362e..8c23ff30d7 100644 --- a/src/com/android/launcher3/LauncherAppWidgetHost.java +++ b/src/com/android/launcher3/LauncherAppWidgetHost.java @@ -102,6 +102,10 @@ public class LauncherAppWidgetHost extends AppWidgetHost { callback.run(); } } + + if (Utilities.ATLEAST_MARSHMALLOW) { + mLauncher.notifyWidgetProvidersChanged(); + } } public AppWidgetHostView createView(Context context, int appWidgetId, diff --git a/src/com/android/launcher3/LauncherBackupHelper.java b/src/com/android/launcher3/LauncherBackupHelper.java index 05d729e78a..cad0f2c25a 100644 --- a/src/com/android/launcher3/LauncherBackupHelper.java +++ b/src/com/android/launcher3/LauncherBackupHelper.java @@ -50,6 +50,7 @@ import com.android.launcher3.backup.nano.BackupProtos.Key; import com.android.launcher3.backup.nano.BackupProtos.Resource; import com.android.launcher3.backup.nano.BackupProtos.Screen; import com.android.launcher3.backup.nano.BackupProtos.Widget; +import com.android.launcher3.compat.AppWidgetManagerCompat; import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.compat.UserManagerCompat; import com.android.launcher3.model.GridSizeMigrationTask; @@ -660,12 +661,14 @@ public class LauncherBackupHelper implements BackupHelper { + getUserSelectionArg(); Cursor cursor = cr.query(Favorites.CONTENT_URI, FAVORITE_PROJECTION, where, null, null); + AppWidgetManagerCompat widgetManager = AppWidgetManagerCompat.getInstance(mContext); try { cursor.moveToPosition(-1); while(cursor.moveToNext()) { final long id = cursor.getLong(ID_INDEX); final String providerName = cursor.getString(APPWIDGET_PROVIDER_INDEX); final ComponentName provider = ComponentName.unflattenFromString(providerName); + Key key = null; String backupKey = null; if (provider != null) { @@ -684,11 +687,14 @@ public class LauncherBackupHelper implements BackupHelper { } else if (backupKey != null) { if (DEBUG) Log.d(TAG, "I can count this high: " + backupWidgetCount); if (backupWidgetCount < MAX_WIDGETS_PER_PASS) { - if (DEBUG) Log.d(TAG, "saving widget " + backupKey); - UserHandleCompat user = UserHandleCompat.myUserHandle(); - writeRowToBackup(key, packWidget(dpi, provider, user), data); - mKeys.add(key); - backupWidgetCount ++; + LauncherAppWidgetProviderInfo widgetInfo = widgetManager + .getLauncherAppWidgetInfo(cursor.getInt(APPWIDGET_ID_INDEX)); + if (widgetInfo != null) { + if (DEBUG) Log.d(TAG, "saving widget " + backupKey); + writeRowToBackup(key, packWidget(dpi, widgetInfo), data); + mKeys.add(key); + backupWidgetCount ++; + } } else { if (VERBOSE) Log.v(TAG, "deferring widget backup " + backupKey); // too many widgets for this pass, request another. @@ -1004,16 +1010,14 @@ public class LauncherBackupHelper implements BackupHelper { } /** Serialize a widget for persistence, including a checksum wrapper. */ - private Widget packWidget(int dpi, ComponentName provider, UserHandleCompat user) { - final LauncherAppWidgetProviderInfo info = - LauncherModel.getProviderInfo(mContext, provider, user); + private Widget packWidget(int dpi, LauncherAppWidgetProviderInfo info) { Widget widget = new Widget(); - widget.provider = provider.flattenToShortString(); + widget.provider = info.provider.flattenToShortString(); widget.label = info.label; widget.configure = info.configure != null; if (info.icon != 0) { widget.icon = new Resource(); - Drawable fullResIcon = mIconCache.getFullResIcon(provider.getPackageName(), info.icon); + Drawable fullResIcon = mIconCache.getFullResIcon(info.provider.getPackageName(), info.icon); Bitmap icon = Utilities.createIconBitmap(fullResIcon, mContext); widget.icon.data = Utilities.flattenBitmap(icon); widget.icon.dpi = dpi; @@ -1022,7 +1026,6 @@ public class LauncherBackupHelper implements BackupHelper { Point spans = info.getMinSpans(mIdp, mContext); widget.minSpanX = spans.x; widget.minSpanY = spans.y; - return widget; } diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 391ccd4bc5..a9a964d98e 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -17,7 +17,6 @@ package com.android.launcher3; import android.app.SearchManager; -import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProviderInfo; import android.content.BroadcastReceiver; import android.content.ComponentName; @@ -34,7 +33,6 @@ import android.content.pm.ResolveInfo; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; -import android.os.DeadObjectException; import android.os.Environment; import android.os.Handler; import android.os.HandlerThread; @@ -42,7 +40,6 @@ import android.os.Looper; import android.os.Parcelable; import android.os.Process; import android.os.SystemClock; -import android.os.TransactionTooLargeException; import android.provider.BaseColumns; import android.text.TextUtils; import android.util.Log; @@ -69,7 +66,6 @@ import java.net.URISyntaxException; import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -138,11 +134,9 @@ public class LauncherModel extends BroadcastReceiver @Thunk WeakReference mCallbacks; // < only access in worker thread > - AllAppsList mBgAllAppsList; + private final AllAppsList mBgAllAppsList; // Entire list of widgets. - WidgetsModel mBgWidgetsModel; - // Keep a clone of widgets that can be accessed from non-worker thread. - WidgetsModel mFgWidgetsModel; + private final WidgetsModel mBgWidgetsModel; // The lock that must be acquired before referencing any static bg data structures. Unlike // other locks, this one can generally be held long-term because we never expect any of these @@ -169,12 +163,6 @@ public class LauncherModel extends BroadcastReceiver // sBgWorkspaceScreens is the ordered set of workspace screens. static final ArrayList sBgWorkspaceScreens = new ArrayList(); - // sBgWidgetProviders is the set of widget providers including custom internal widgets - public static HashMap sBgWidgetProviders; - - // sBgShortcutProviders is the set of custom shortcut providers - public static List sBgShortcutProviders; - // sPendingPackages is a set of packages which could be on sdcard and are not available yet static final HashMap> sPendingPackages = new HashMap>(); @@ -209,7 +197,8 @@ public class LauncherModel extends BroadcastReceiver public void bindRestoreItemsChange(HashSet updates); public void bindComponentsRemoved(ArrayList packageNames, ArrayList appInfos, UserHandleCompat user, int reason); - public void bindAllPackages(WidgetsModel model); + public void notifyWidgetProvidersChanged(); + public void bindWidgetsModel(WidgetsModel model); public void bindSearchProviderChanged(); public boolean isAllAppsButtonRank(int rank); public void onPageBoundSynchronously(int page); @@ -245,7 +234,6 @@ public class LauncherModel extends BroadcastReceiver mApp = app; mBgAllAppsList = new AllAppsList(iconCache, appFilter); mBgWidgetsModel = new WidgetsModel(context, iconCache, appFilter); - mFgWidgetsModel = mBgWidgetsModel.clone(); mIconCache = iconCache; mLauncherApps = LauncherAppsCompat.getInstance(context); @@ -1778,8 +1766,8 @@ public class LauncherModel extends BroadcastReceiver .getInstance(mContext).updateAndGetActiveSessionCache(); sBgWorkspaceScreens.addAll(loadWorkspaceScreensDb(mContext)); - final ArrayList itemsToRemove = new ArrayList(); - final ArrayList restoredRows = new ArrayList(); + final ArrayList itemsToRemove = new ArrayList<>(); + final ArrayList restoredRows = new ArrayList<>(); final Uri contentUri = LauncherSettings.Favorites.CONTENT_URI; if (DEBUG_LOADERS) Log.d(TAG, "loading model from " + contentUri); final Cursor c = contentResolver.query(contentUri, null, null, null, null); @@ -1788,6 +1776,7 @@ public class LauncherModel extends BroadcastReceiver // Load workspace in reverse order to ensure that latest items are loaded first (and // before any earlier duplicates) final LongArrayMap occupied = new LongArrayMap<>(); + HashMap widgetProvidersMap = null; try { final int idIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites._ID); @@ -2157,10 +2146,14 @@ public class LauncherModel extends BroadcastReceiver final boolean wasProviderReady = (restoreStatus & LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY) == 0; - final LauncherAppWidgetProviderInfo provider = - LauncherModel.getProviderInfo(context, + if (widgetProvidersMap == null) { + widgetProvidersMap = AppWidgetManagerCompat + .getInstance(mContext).getAllProvidersMap(); + } + final AppWidgetProviderInfo provider = widgetProvidersMap.get( + new ComponentKey( ComponentName.unflattenFromString(savedProvider), - user); + user)); final boolean isProviderReady = isValidProvider(provider); if (!isSafeMode && !customWidget && @@ -2779,7 +2772,6 @@ public class LauncherModel extends BroadcastReceiver final Callbacks callbacks = tryGetCallbacks(oldCallbacks); if (callbacks != null) { callbacks.bindAllApplications(list); - callbacks.bindAllPackages(mFgWidgetsModel); } if (DEBUG_LOADERS) { Log.d(TAG, "bound all " + list.size() + " apps from cache in " @@ -2871,7 +2863,7 @@ public class LauncherModel extends BroadcastReceiver callbacks.bindAllApplications(added); if (DEBUG_LOADERS) { Log.d(TAG, "bound " + added.size() + " apps in " - + (SystemClock.uptimeMillis() - bindTime) + "ms"); + + (SystemClock.uptimeMillis() - bindTime) + "ms"); } } else { Log.i(TAG, "not binding apps: no Launcher activity"); @@ -2880,8 +2872,6 @@ public class LauncherModel extends BroadcastReceiver }); // Cleanup any data stored for a deleted user. ManagedProfileHeuristic.processAllUsers(profiles, mContext); - - loadAndBindWidgetsAndShortcuts(tryGetCallbacks(oldCallbacks), true /* refresh */); if (DEBUG_LOADERS) { Log.d(TAG, "Icons processed in " + (SystemClock.uptimeMillis() - loadTime) + "ms"); @@ -2948,9 +2938,6 @@ public class LauncherModel extends BroadcastReceiver } }); } - - // Reload widget list. No need to refresh, as we only want to update the icons and labels. - loadAndBindWidgetsAndShortcuts(callbacks, false); } void enqueuePackageUpdated(PackageUpdatedTask task) { @@ -3316,177 +3303,49 @@ public class LauncherModel extends BroadcastReceiver }); } - // Update widgets - if (mOp == OP_ADD || mOp == OP_REMOVE || mOp == OP_UPDATE) { - // Always refresh for a package event on secondary user - boolean needToRefresh = !mUser.equals(UserHandleCompat.myUserHandle()); - - // Refresh widget list, if the package already had a widget. - synchronized (sBgLock) { - if (sBgWidgetProviders != null) { - HashSet pkgSet = new HashSet<>(); - Collections.addAll(pkgSet, mPackages); - - for (ComponentKey key : sBgWidgetProviders.keySet()) { - needToRefresh |= key.user.equals(mUser) && - pkgSet.contains(key.componentName.getPackageName()); - } - } - } - - if (!needToRefresh && mOp != OP_REMOVE) { - // Refresh widget list, if there is any newly added widget - PackageManager pm = context.getPackageManager(); - for (String pkg : mPackages) { - try { - List widgets = pm.queryBroadcastReceivers( - new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE) - .setPackage(pkg), 0); - needToRefresh |= widgets != null && !widgets.isEmpty(); - } catch (RuntimeException e) { - if (LauncherAppState.isDogfoodBuild()) { - throw e; - } - // Ignore the crash. We can live with a state widget list. - Log.e(TAG, "PM call failed for " + pkg, e); - } - } - } - - loadAndBindWidgetsAndShortcuts(callbacks, needToRefresh); - } - - // Write all the logs to disk - mHandler.post(new Runnable() { - public void run() { - Callbacks cb = getCallback(); - if (callbacks == cb && cb != null) { - callbacks.dumpLogsToLocalData(); - } - } - }); - } - } - - public static List getWidgetProviders(Context context, - boolean refresh) { - ArrayList results = - new ArrayList(); - try { - synchronized (sBgLock) { - if (sBgWidgetProviders == null || refresh) { - HashMap tmpWidgetProviders - = new HashMap<>(); - AppWidgetManagerCompat wm = AppWidgetManagerCompat.getInstance(context); - LauncherAppWidgetProviderInfo info; - - List widgets = wm.getAllProviders(); - for (AppWidgetProviderInfo pInfo : widgets) { - info = LauncherAppWidgetProviderInfo.fromProviderInfo(context, pInfo); - UserHandleCompat user = wm.getUser(info); - tmpWidgetProviders.put(new ComponentKey(info.provider, user), info); - } - - Collection customWidgets = Launcher.getCustomAppWidgets().values(); - for (CustomAppWidget widget : customWidgets) { - info = new LauncherAppWidgetProviderInfo(context, widget); - UserHandleCompat user = wm.getUser(info); - tmpWidgetProviders.put(new ComponentKey(info.provider, user), info); - } - // Replace the global list at the very end, so that if there is an exception, - // previously loaded provider list is used. - sBgWidgetProviders = tmpWidgetProviders; - } - results.addAll(sBgWidgetProviders.values()); - return results; - } - } catch (Exception e) { - if (!LauncherAppState.isDogfoodBuild() && - (e.getCause() instanceof TransactionTooLargeException || - e.getCause() instanceof DeadObjectException)) { - // the returned value may be incomplete and will not be refreshed until the next - // time Launcher starts. - // TODO: after figuring out a repro step, introduce a dirty bit to check when - // onResume is called to refresh the widget provider list. - synchronized (sBgLock) { - if (sBgWidgetProviders != null) { - results.addAll(sBgWidgetProviders.values()); - } - return results; - } - } else { - throw e; - } - } - } - - public static LauncherAppWidgetProviderInfo getProviderInfo(Context ctx, ComponentName name, - UserHandleCompat user) { - synchronized (sBgLock) { - if (sBgWidgetProviders == null) { - getWidgetProviders(ctx, false /* refresh */); - } - return sBgWidgetProviders.get(new ComponentKey(name, user)); - } - } - - public void loadAndBindWidgetsAndShortcuts(final Callbacks callbacks, final boolean refresh) { - - runOnWorkerThread(new Runnable() { - @Override - public void run() { - updateWidgetsModel(refresh); + // Notify launcher of widget update. From marshmallow onwards we use AppWidgetHost to + // get widget update signals. + if (!Utilities.ATLEAST_MARSHMALLOW && + (mOp == OP_ADD || mOp == OP_REMOVE || mOp == OP_UPDATE)) { mHandler.post(new Runnable() { - @Override public void run() { Callbacks cb = getCallback(); if (callbacks == cb && cb != null) { - callbacks.bindAllPackages(mFgWidgetsModel); + callbacks.notifyWidgetProvidersChanged(); } } }); - // update the Widget entries inside DB on the worker thread. - LauncherAppState.getInstance().getWidgetCache().removeObsoletePreviews( - mFgWidgetsModel.getRawList()); + } + } + } + + private void bindWidgetsModel(final Callbacks callbacks, final WidgetsModel model) { + mHandler.post(new Runnable() { + @Override + public void run() { + Callbacks cb = getCallback(); + if (callbacks == cb && cb != null) { + callbacks.bindWidgetsModel(model); + } } }); } - /** - * Returns a list of ResolveInfos/AppWidgetInfos. - * - * @see #loadAndBindWidgetsAndShortcuts - */ - @Thunk void updateWidgetsModel(boolean refresh) { - Utilities.assertWorkerThread(); - PackageManager packageManager = mApp.getContext().getPackageManager(); - final ArrayList widgetsAndShortcuts = new ArrayList(); - widgetsAndShortcuts.addAll(getWidgetProviders(mApp.getContext(), refresh)); - - // Update shortcut providers - synchronized (sBgLock) { - try { - Intent shortcutsIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT); - List providers = packageManager.queryIntentActivities(shortcutsIntent, 0); - sBgShortcutProviders = providers; - } catch (RuntimeException e) { - if (!LauncherAppState.isDogfoodBuild() && - (e.getCause() instanceof TransactionTooLargeException || - e.getCause() instanceof DeadObjectException)) { - /** - * Ignore exception and use the cached list if available. - * Refer to {@link #getWidgetProviders(Context, boolean}} for more info. - */ - } else { - throw e; + public void refreshAndBindWidgetsAndShortcuts( + final Callbacks callbacks, final boolean bindFirst) { + runOnWorkerThread(new Runnable() { + @Override + public void run() { + if (bindFirst && !mBgWidgetsModel.isEmpty()) { + bindWidgetsModel(callbacks, mBgWidgetsModel.clone()); } + final WidgetsModel model = mBgWidgetsModel.updateAndClone(mApp.getContext()); + bindWidgetsModel(callbacks, model); + // update the Widget entries inside DB on the worker thread. + LauncherAppState.getInstance().getWidgetCache().removeObsoletePreviews( + model.getRawList()); } - if (sBgShortcutProviders != null) { - widgetsAndShortcuts.addAll(sBgShortcutProviders); - } - } - mBgWidgetsModel.setWidgetsAndShortcuts(widgetsAndShortcuts); - mFgWidgetsModel = mBgWidgetsModel.clone(); + }); } @Thunk static boolean isPackageDisabled(Context context, String packageName, diff --git a/src/com/android/launcher3/LauncherStateTransitionAnimation.java b/src/com/android/launcher3/LauncherStateTransitionAnimation.java index 30cae31148..b95e2b031b 100644 --- a/src/com/android/launcher3/LauncherStateTransitionAnimation.java +++ b/src/com/android/launcher3/LauncherStateTransitionAnimation.java @@ -702,7 +702,7 @@ public class LauncherStateTransitionAnimation { private void startWorkspaceSearchBarAnimation( final Workspace.State toWorkspaceState, int duration, AnimatorSet animation) { final SearchDropTargetBar.State toSearchBarState = - toWorkspaceState.getSearchDropTargetBarState(); + toWorkspaceState.searchDropTargetBarState; mLauncher.getSearchDropTargetBar().animateToState(toSearchBarState, duration, animation); } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 7b873d420c..26cce98655 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -68,6 +68,7 @@ import com.android.launcher3.accessibility.LauncherAccessibilityDelegate; import com.android.launcher3.accessibility.LauncherAccessibilityDelegate.AccessibilityDragSource; import com.android.launcher3.accessibility.OverviewScreenAccessibilityDelegate; import com.android.launcher3.accessibility.WorkspaceAccessibilityHelper; +import com.android.launcher3.compat.AppWidgetManagerCompat; import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.util.LongArrayMap; import com.android.launcher3.util.Thunk; @@ -180,22 +181,20 @@ public class Workspace extends PagedView // in all apps or customize mode) enum State { - NORMAL (SearchDropTargetBar.State.SEARCH_BAR), - NORMAL_HIDDEN (SearchDropTargetBar.State.INVISIBLE_TRANSLATED), - SPRING_LOADED (SearchDropTargetBar.State.DROP_TARGET), - OVERVIEW (SearchDropTargetBar.State.INVISIBLE), - OVERVIEW_HIDDEN (SearchDropTargetBar.State.INVISIBLE); + NORMAL (SearchDropTargetBar.State.SEARCH_BAR, false), + NORMAL_HIDDEN (SearchDropTargetBar.State.INVISIBLE_TRANSLATED, false), + SPRING_LOADED (SearchDropTargetBar.State.DROP_TARGET, false), + OVERVIEW (SearchDropTargetBar.State.INVISIBLE, true), + OVERVIEW_HIDDEN (SearchDropTargetBar.State.INVISIBLE, true); - private final SearchDropTargetBar.State mBarState; + public final SearchDropTargetBar.State searchDropTargetBarState; + public final boolean shouldUpdateWidget; - State(SearchDropTargetBar.State searchBarState) { - mBarState = searchBarState; + State(SearchDropTargetBar.State searchBarState, boolean shouldUpdateWidget) { + searchDropTargetBarState = searchBarState; + this.shouldUpdateWidget = shouldUpdateWidget; } - - public SearchDropTargetBar.State getSearchDropTargetBarState() { - return mBarState; - } - }; + } private State mState = State.NORMAL; private boolean mIsSwitchingState = false; @@ -2017,10 +2016,16 @@ public class Workspace extends PagedView Animator workspaceAnim = mStateTransitionAnimation.getAnimationToState(mState, toState, toPage, animated, layerViews); + boolean shouldNotifyWidgetChange = !mState.shouldUpdateWidget + && toState.shouldUpdateWidget; // Update the current state mState = toState; updateAccessibilityFlags(); + if (shouldNotifyWidgetChange) { + mLauncher.notifyWidgetProvidersChanged(); + } + return workspaceAnim; } @@ -4400,13 +4405,22 @@ public class Workspace extends PagedView }); } - void widgetsRestored(ArrayList changedInfo) { + public void widgetsRestored(ArrayList changedInfo) { if (!changedInfo.isEmpty()) { DeferredWidgetRefresh widgetRefresh = new DeferredWidgetRefresh(changedInfo, mLauncher.getAppWidgetHost()); - if (LauncherModel.getProviderInfo(getContext(), - changedInfo.get(0).providerName, - changedInfo.get(0).user) != null) { + + LauncherAppWidgetInfo item = changedInfo.get(0); + final AppWidgetProviderInfo widgetInfo; + if (item.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_ID_NOT_VALID)) { + widgetInfo = AppWidgetManagerCompat + .getInstance(mLauncher).findProvider(item.providerName, item.user); + } else { + widgetInfo = AppWidgetManagerCompat.getInstance(mLauncher) + .getAppWidgetInfo(item.appWidgetId); + } + + if (widgetInfo != null) { // Re-inflate the widgets which have changed status widgetRefresh.run(); } else { diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompat.java b/src/com/android/launcher3/compat/AppWidgetManagerCompat.java index f0221bc240..811cacfc09 100644 --- a/src/com/android/launcher3/compat/AppWidgetManagerCompat.java +++ b/src/com/android/launcher3/compat/AppWidgetManagerCompat.java @@ -20,6 +20,7 @@ import android.app.Activity; import android.appwidget.AppWidgetHost; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProviderInfo; +import android.content.ComponentName; import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; @@ -28,7 +29,9 @@ import android.os.Bundle; import com.android.launcher3.IconCache; import com.android.launcher3.LauncherAppWidgetProviderInfo; import com.android.launcher3.Utilities; +import com.android.launcher3.util.ComponentKey; +import java.util.HashMap; import java.util.List; public abstract class AppWidgetManagerCompat { @@ -62,6 +65,11 @@ public abstract class AppWidgetManagerCompat { return mAppWidgetManager.getAppWidgetInfo(appWidgetId); } + public LauncherAppWidgetProviderInfo getLauncherAppWidgetInfo(int appWidgetId) { + AppWidgetProviderInfo info = getAppWidgetInfo(appWidgetId); + return info == null ? null : LauncherAppWidgetProviderInfo.fromProviderInfo(mContext, info); + } + public abstract List getAllProviders(); public abstract String loadLabel(LauncherAppWidgetProviderInfo info); @@ -81,4 +89,8 @@ public abstract class AppWidgetManagerCompat { public abstract Bitmap getBadgeBitmap(LauncherAppWidgetProviderInfo info, Bitmap bitmap, int imageWidth, int imageHeight); + public abstract LauncherAppWidgetProviderInfo findProvider( + ComponentName provider, UserHandleCompat user); + + public abstract HashMap getAllProvidersMap(); } diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompatV16.java b/src/com/android/launcher3/compat/AppWidgetManagerCompatV16.java index e9d2510e8e..de9414ed27 100644 --- a/src/com/android/launcher3/compat/AppWidgetManagerCompatV16.java +++ b/src/com/android/launcher3/compat/AppWidgetManagerCompatV16.java @@ -21,6 +21,7 @@ import android.app.Activity; import android.appwidget.AppWidgetHost; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProviderInfo; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; @@ -31,7 +32,9 @@ import android.os.Bundle; import com.android.launcher3.IconCache; import com.android.launcher3.LauncherAppWidgetProviderInfo; import com.android.launcher3.Utilities; +import com.android.launcher3.util.ComponentKey; +import java.util.HashMap; import java.util.List; class AppWidgetManagerCompatV16 extends AppWidgetManagerCompat { @@ -91,4 +94,25 @@ class AppWidgetManagerCompatV16 extends AppWidgetManagerCompat { int imageWidth, int imageHeight) { return bitmap; } + + @Override + public LauncherAppWidgetProviderInfo findProvider( + ComponentName provider, UserHandleCompat user) { + for (AppWidgetProviderInfo info : mAppWidgetManager.getInstalledProviders()) { + if (info.provider.equals(provider)) { + return LauncherAppWidgetProviderInfo.fromProviderInfo(mContext, info); + } + } + return null; + } + + @Override + public HashMap getAllProvidersMap() { + HashMap result = new HashMap<>(); + UserHandleCompat user = UserHandleCompat.myUserHandle(); + for (AppWidgetProviderInfo info : mAppWidgetManager.getInstalledProviders()) { + result.put(new ComponentKey(info.provider, user), info); + } + return result; + } } diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java b/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java index 3bc3d0d80c..a1570e66a1 100644 --- a/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java +++ b/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java @@ -21,6 +21,7 @@ import android.app.Activity; import android.appwidget.AppWidgetHost; import android.appwidget.AppWidgetProviderInfo; import android.content.ActivityNotFoundException; +import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; import android.content.res.Resources; @@ -40,8 +41,10 @@ import android.widget.Toast; import com.android.launcher3.IconCache; import com.android.launcher3.LauncherAppWidgetProviderInfo; import com.android.launcher3.R; +import com.android.launcher3.util.ComponentKey; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; @TargetApi(Build.VERSION_CODES.LOLLIPOP) @@ -145,4 +148,28 @@ class AppWidgetManagerCompatVL extends AppWidgetManagerCompat { c.setBitmap(null); return bitmap; } + + @Override + public LauncherAppWidgetProviderInfo findProvider(ComponentName provider, UserHandleCompat user) { + for (AppWidgetProviderInfo info : mAppWidgetManager + .getInstalledProvidersForProfile(user.getUser())) { + if (info.provider.equals(provider)) { + return LauncherAppWidgetProviderInfo.fromProviderInfo(mContext, info); + } + } + return null; + } + + @Override + public HashMap getAllProvidersMap() { + HashMap result = new HashMap<>(); + for (UserHandle user : mUserManager.getUserProfiles()) { + UserHandleCompat userHandle = UserHandleCompat.fromUser(user); + for (AppWidgetProviderInfo info : + mAppWidgetManager.getInstalledProvidersForProfile(user)) { + result.put(new ComponentKey(info.provider, userHandle), info); + } + } + return result; + } } diff --git a/src/com/android/launcher3/model/GridSizeMigrationTask.java b/src/com/android/launcher3/model/GridSizeMigrationTask.java index f4c564132a..9cab25a5ef 100644 --- a/src/com/android/launcher3/model/GridSizeMigrationTask.java +++ b/src/com/android/launcher3/model/GridSizeMigrationTask.java @@ -23,8 +23,8 @@ import com.android.launcher3.LauncherSettings; import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.Utilities; import com.android.launcher3.backup.nano.BackupProtos; +import com.android.launcher3.compat.AppWidgetManagerCompat; import com.android.launcher3.compat.PackageInstallerCompat; -import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.util.LongArrayMap; import java.util.ArrayList; @@ -692,7 +692,8 @@ public class GridSizeMigrationTask { Favorites.SPANX, // 4 Favorites.SPANY, // 5 Favorites.INTENT, // 6 - Favorites.APPWIDGET_PROVIDER}, // 7 + Favorites.APPWIDGET_PROVIDER, // 7 + Favorites.APPWIDGET_ID}, // 8 Favorites.CONTAINER + " = " + Favorites.CONTAINER_DESKTOP + " AND " + Favorites.SCREEN + " = " + screen, null, null, null); @@ -704,6 +705,7 @@ public class GridSizeMigrationTask { final int indexSpanY = c.getColumnIndexOrThrow(Favorites.SPANY); final int indexIntent = c.getColumnIndexOrThrow(Favorites.INTENT); final int indexAppWidgetProvider = c.getColumnIndexOrThrow(Favorites.APPWIDGET_PROVIDER); + final int indexAppWidgetId = c.getColumnIndexOrThrow(Favorites.APPWIDGET_ID); ArrayList entries = new ArrayList<>(); while (c.moveToNext()) { @@ -733,9 +735,9 @@ public class GridSizeMigrationTask { entry.weight = Math.max(WT_WIDGET_MIN, WT_WIDGET_FACTOR * entry.spanX * entry.spanY); - // Migration happens for current user only. - LauncherAppWidgetProviderInfo pInfo = LauncherModel.getProviderInfo( - mContext, cn, UserHandleCompat.myUserHandle()); + int widgetId = c.getInt(indexAppWidgetId); + LauncherAppWidgetProviderInfo pInfo = AppWidgetManagerCompat.getInstance( + mContext).getLauncherAppWidgetInfo(widgetId); Point spans = pInfo == null ? mWidgetMinSize.get(provider) : pInfo.getMinSpans(mIdp, mContext); if (spans != null) { diff --git a/src/com/android/launcher3/model/WidgetsModel.java b/src/com/android/launcher3/model/WidgetsModel.java index 99a53ff369..53e5213139 100644 --- a/src/com/android/launcher3/model/WidgetsModel.java +++ b/src/com/android/launcher3/model/WidgetsModel.java @@ -1,9 +1,13 @@ package com.android.launcher3.model; +import android.appwidget.AppWidgetProviderInfo; import android.content.ComponentName; import android.content.Context; +import android.content.Intent; import android.content.pm.ResolveInfo; +import android.os.DeadObjectException; +import android.os.TransactionTooLargeException; import android.util.Log; import com.android.launcher3.AppFilter; @@ -16,6 +20,7 @@ import com.android.launcher3.Utilities; import com.android.launcher3.compat.AlphabeticIndexCompat; import com.android.launcher3.compat.AppWidgetManagerCompat; import com.android.launcher3.compat.UserHandleCompat; +import com.android.launcher3.config.ProviderConfig; import java.util.ArrayList; import java.util.Collections; @@ -95,8 +100,41 @@ public class WidgetsModel { return mRawList; } - public void setWidgetsAndShortcuts(ArrayList rawWidgetsShortcuts) { + public boolean isEmpty() { + return mRawList.isEmpty(); + } + + public WidgetsModel updateAndClone(Context context) { Utilities.assertWorkerThread(); + + try { + final ArrayList widgetsAndShortcuts = new ArrayList<>(); + // Widgets + for (AppWidgetProviderInfo widgetInfo : + AppWidgetManagerCompat.getInstance(context).getAllProviders()) { + widgetsAndShortcuts.add(LauncherAppWidgetProviderInfo + .fromProviderInfo(context, widgetInfo)); + } + // Shortcuts + widgetsAndShortcuts.addAll(context.getPackageManager().queryIntentActivities( + new Intent(Intent.ACTION_CREATE_SHORTCUT), 0)); + setWidgetsAndShortcuts(widgetsAndShortcuts); + } catch (Exception e) { + if (!LauncherAppState.isDogfoodBuild() && + (e.getCause() instanceof TransactionTooLargeException || + e.getCause() instanceof DeadObjectException)) { + // the returned value may be incomplete and will not be refreshed until the next + // time Launcher starts. + // TODO: after figuring out a repro step, introduce a dirty bit to check when + // onResume is called to refresh the widget provider list. + } else { + throw e; + } + } + return clone(); + } + + private void setWidgetsAndShortcuts(ArrayList rawWidgetsShortcuts) { mRawList = rawWidgetsShortcuts; if (DEBUG) { Log.d(TAG, "addWidgetsAndShortcuts, widgetsShortcuts#=" + rawWidgetsShortcuts.size()); diff --git a/src/com/android/launcher3/widget/WidgetsContainerView.java b/src/com/android/launcher3/widget/WidgetsContainerView.java index 10a00c600f..c8e8cf8cd6 100644 --- a/src/com/android/launcher3/widget/WidgetsContainerView.java +++ b/src/com/android/launcher3/widget/WidgetsContainerView.java @@ -332,6 +332,10 @@ public class WidgetsContainerView extends BaseContainerView mAdapter.notifyDataSetChanged(); } + public boolean isEmpty() { + return mAdapter.getItemCount() == 0; + } + private WidgetPreviewLoader getWidgetPreviewLoader() { if (mWidgetPreviewLoader == null) { mWidgetPreviewLoader = LauncherAppState.getInstance().getWidgetCache(); From 1cfd40c0771c4ebfd83fc0066aa56b0e77491e30 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 23 Mar 2016 10:47:15 -0700 Subject: [PATCH 197/219] Fixing wrong preference file name in LauncherFiles Bug: 27778623 Change-Id: I28aa6698d3caa1fc11b2e8df0733143865f9b408 (cherry picked from commit 8a6edce064c1854895a91f120a42ccdc2f7804bb) --- src/com/android/launcher3/LauncherFiles.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/LauncherFiles.java b/src/com/android/launcher3/LauncherFiles.java index c08cd0bf52..6ce2293829 100644 --- a/src/com/android/launcher3/LauncherFiles.java +++ b/src/com/android/launcher3/LauncherFiles.java @@ -34,7 +34,7 @@ public class LauncherFiles { WALLPAPER_CROP_PREFERENCES_KEY + XML, WALLPAPER_IMAGES_DB, WIDGET_PREVIEWS_DB, - MANAGED_USER_PREFERENCES_KEY, + MANAGED_USER_PREFERENCES_KEY + XML, APP_ICONS_DB)); // TODO: Delete these files on upgrade From 97909124a2d8b89135a5885c52226191e30291b6 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 15 Mar 2016 09:16:30 -0700 Subject: [PATCH 198/219] Fixing model being updated on UI thread > When package gets unavailable or suspended, the disabled flag was getting updated on the UI thread. This could lead to inconsistent model if launcher activity didn't exist. > Fixing: When unsuspending one work profile apps, all work profile apps get unsuspended Bug: 27673573,27673373,27403236 Change-Id: I7fde3f79c36204e73ca66ccf8431fa0f0cce3d08 Conflicts: src/com/android/launcher3/DragController.java --- src/com/android/launcher3/AllAppsList.java | 11 +- src/com/android/launcher3/DragController.java | 3 +- .../launcher3/InstallShortcutReceiver.java | 2 +- src/com/android/launcher3/Launcher.java | 49 ++++---- src/com/android/launcher3/LauncherModel.java | 112 ++++++++++-------- src/com/android/launcher3/Workspace.java | 35 +----- src/com/android/launcher3/util/FlagOp.java | 30 +++++ 7 files changed, 126 insertions(+), 116 deletions(-) create mode 100644 src/com/android/launcher3/util/FlagOp.java diff --git a/src/com/android/launcher3/AllAppsList.java b/src/com/android/launcher3/AllAppsList.java index f76c185127..962396c3b1 100644 --- a/src/com/android/launcher3/AllAppsList.java +++ b/src/com/android/launcher3/AllAppsList.java @@ -22,6 +22,7 @@ import android.content.Context; import com.android.launcher3.compat.LauncherActivityInfoCompat; import com.android.launcher3.compat.LauncherAppsCompat; import com.android.launcher3.compat.UserHandleCompat; +import com.android.launcher3.util.FlagOp; import java.util.ArrayList; import java.util.HashSet; @@ -119,19 +120,15 @@ class AllAppsList { } /** - * Suspend the apps for the given apk identified by packageName. + * Updates the apps for the given packageName and user based on {@param op}. */ - public void suspendPackage(String packageName, UserHandleCompat user, boolean suspend) { + public void updatePackageFlags(String packageName, UserHandleCompat user, FlagOp op) { final List data = this.data; for (int i = data.size() - 1; i >= 0; i--) { AppInfo info = data.get(i); final ComponentName component = info.intent.getComponent(); if (info.user.equals(user) && packageName.equals(component.getPackageName())) { - if (suspend) { - info.isDisabled |= ShortcutInfo.FLAG_DISABLED_SUSPENDED; - } else { - info.isDisabled &= ~ShortcutInfo.FLAG_DISABLED_SUSPENDED; - } + info.isDisabled = op.apply(info.isDisabled); modified.add(info); } } diff --git a/src/com/android/launcher3/DragController.java b/src/com/android/launcher3/DragController.java index eefb287cb2..2f0bfe5c77 100644 --- a/src/com/android/launcher3/DragController.java +++ b/src/com/android/launcher3/DragController.java @@ -341,7 +341,8 @@ public class DragController { } endDrag(); } - public void onAppsRemoved(final ArrayList packageNames, HashSet cns) { + + public void onAppsRemoved(final HashSet packageNames, HashSet cns) { // Cancel the current drag if we are removing an app that we are dragging if (mDragObject != null) { Object rawDragInfo = mDragObject.dragInfo; diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java index 46b9b7d78a..921e90ced8 100644 --- a/src/com/android/launcher3/InstallShortcutReceiver.java +++ b/src/com/android/launcher3/InstallShortcutReceiver.java @@ -87,7 +87,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver { } } - public static void removeFromInstallQueue(Context context, ArrayList packageNames, + public static void removeFromInstallQueue(Context context, HashSet packageNames, UserHandleCompat user) { if (packageNames.isEmpty()) { return; diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 308e08de0c..704e001c0c 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -4366,7 +4366,7 @@ public class Launcher extends Activity } mWorkspace.removeItemsByComponentName(removedComponents, user); // Notify the drag controller - mDragController.onAppsRemoved(new ArrayList(), removedComponents); + mDragController.onAppsRemoved(new HashSet(), removedComponents); } } @@ -4390,43 +4390,44 @@ public class Launcher extends Activity } /** - * A package was uninstalled. We take both the super set of packageNames + * A package was uninstalled/updated. We take both the super set of packageNames * in addition to specific applications to remove, the reason being that * this can be called when a package is updated as well. In that scenario, - * we only remove specific components from the workspace, where as + * we only remove specific components from the workspace and hotseat, where as * package-removal should clear all items by package name. - * - * @param reason if non-zero, the icons are not permanently removed, rather marked as disabled. - * Implementation of the method from LauncherModel.Callbacks. */ @Override - public void bindComponentsRemoved(final ArrayList packageNames, - final ArrayList appInfos, final UserHandleCompat user, final int reason) { + public void bindWorkspaceComponentsRemoved( + final HashSet packageNames, final HashSet components, + final UserHandleCompat user) { Runnable r = new Runnable() { public void run() { - bindComponentsRemoved(packageNames, appInfos, user, reason); + bindWorkspaceComponentsRemoved(packageNames, components, user); } }; if (waitUntilResume(r)) { return; } + if (!packageNames.isEmpty()) { + mWorkspace.removeItemsByPackageName(packageNames, user); + } + if (!components.isEmpty()) { + mWorkspace.removeItemsByComponentName(components, user); + } + // Notify the drag controller + mDragController.onAppsRemoved(packageNames, components); - if (reason == 0) { - HashSet removedComponents = new HashSet(); - for (AppInfo info : appInfos) { - removedComponents.add(info.componentName); - } - if (!packageNames.isEmpty()) { - mWorkspace.removeItemsByPackageName(packageNames, user); - } - if (!removedComponents.isEmpty()) { - mWorkspace.removeItemsByComponentName(removedComponents, user); - } - // Notify the drag controller - mDragController.onAppsRemoved(packageNames, removedComponents); + } - } else { - mWorkspace.disableShortcutsByPackageName(packageNames, user, reason); + @Override + public void bindAppInfosRemoved(final ArrayList appInfos) { + Runnable r = new Runnable() { + public void run() { + bindAppInfosRemoved(appInfos); + } + }; + if (waitUntilResume(r)) { + return; } // Update AllApps diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index a9a964d98e..703161c075 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -57,6 +57,7 @@ import com.android.launcher3.model.GridSizeMigrationTask; import com.android.launcher3.model.WidgetsModel; import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.CursorIconInfo; +import com.android.launcher3.util.FlagOp; import com.android.launcher3.util.LongArrayMap; import com.android.launcher3.util.ManagedProfileHeuristic; import com.android.launcher3.util.Thunk; @@ -195,8 +196,10 @@ public class LauncherModel extends BroadcastReceiver ArrayList removed, UserHandleCompat user); public void bindWidgetsRestored(ArrayList widgets); public void bindRestoreItemsChange(HashSet updates); - public void bindComponentsRemoved(ArrayList packageNames, - ArrayList appInfos, UserHandleCompat user, int reason); + public void bindWorkspaceComponentsRemoved( + HashSet packageNames, HashSet components, + UserHandleCompat user); + public void bindAppInfosRemoved(ArrayList appInfos); public void notifyWidgetProvidersChanged(); public void bindWidgetsModel(WidgetsModel model); public void bindSearchProviderChanged(); @@ -3014,6 +3017,7 @@ public class LauncherModel extends BroadcastReceiver final String[] packages = mPackages; final int N = packages.length; + FlagOp flagOp = FlagOp.NO_OP; switch (mOp) { case OP_ADD: { for (int i=0; i removedApps = new ArrayList(); if (mBgAllAppsList.added.size() > 0) { - added = new ArrayList(mBgAllAppsList.added); + added = new ArrayList<>(mBgAllAppsList.added); mBgAllAppsList.added.clear(); } if (mBgAllAppsList.modified.size() > 0) { - modified = new ArrayList(mBgAllAppsList.modified); + modified = new ArrayList<>(mBgAllAppsList.modified); mBgAllAppsList.modified.clear(); } if (mBgAllAppsList.removed.size() > 0) { @@ -3082,14 +3090,7 @@ public class LauncherModel extends BroadcastReceiver mBgAllAppsList.removed.clear(); } - final Callbacks callbacks = getCallback(); - if (callbacks == null) { - Log.w(TAG, "Nobody to tell about the new app. Launcher is probably loading."); - return; - } - - final HashMap addedOrUpdatedApps = - new HashMap(); + final HashMap addedOrUpdatedApps = new HashMap<>(); if (added != null) { addAppsToAllApps(context, added); @@ -3099,6 +3100,7 @@ public class LauncherModel extends BroadcastReceiver } if (modified != null) { + final Callbacks callbacks = getCallback(); final ArrayList modifiedFinal = modified; for (AppInfo ai : modified) { addedOrUpdatedApps.put(ai.componentName, ai); @@ -3115,7 +3117,7 @@ public class LauncherModel extends BroadcastReceiver } // Update shortcut infos - if (mOp == OP_ADD || mOp == OP_UPDATE || mOp == OP_UNSUSPEND) { + if (mOp == OP_ADD || flagOp != FlagOp.NO_OP) { final ArrayList updatedShortcuts = new ArrayList(); final ArrayList removedShortcuts = new ArrayList(); final ArrayList widgets = new ArrayList(); @@ -3128,11 +3130,6 @@ public class LauncherModel extends BroadcastReceiver boolean infoUpdated = false; boolean shortcutUpdated = false; - if (mOp == OP_UNSUSPEND) { - si.isDisabled &= ~ ShortcutInfo.FLAG_DISABLED_SUSPENDED; - infoUpdated = true; - } - // Update shortcuts which use iconResource. if ((si.iconResource != null) && packageSet.contains(si.iconResource.packageName)) { @@ -3195,9 +3192,9 @@ public class LauncherModel extends BroadcastReceiver infoUpdated = true; } - if ((si.isDisabled & ShortcutInfo.FLAG_DISABLED_NOT_AVAILABLE) != 0) { - // Since package was just updated, the target must be available now. - si.isDisabled &= ~ShortcutInfo.FLAG_DISABLED_NOT_AVAILABLE; + int oldDisabledFlags = si.isDisabled; + si.isDisabled = flagOp.apply(si.isDisabled); + if (si.isDisabled != oldDisabledFlags) { shortcutUpdated = true; } } @@ -3230,6 +3227,7 @@ public class LauncherModel extends BroadcastReceiver } if (!updatedShortcuts.isEmpty() || !removedShortcuts.isEmpty()) { + final Callbacks callbacks = getCallback(); mHandler.post(new Runnable() { public void run() { @@ -3245,6 +3243,7 @@ public class LauncherModel extends BroadcastReceiver } } if (!widgets.isEmpty()) { + final Callbacks callbacks = getCallback(); mHandler.post(new Runnable() { public void run() { Callbacks cb = getCallback(); @@ -3256,48 +3255,60 @@ public class LauncherModel extends BroadcastReceiver } } - final ArrayList removedPackageNames = - new ArrayList(); - if (mOp == OP_REMOVE || mOp == OP_UNAVAILABLE || mOp == OP_SUSPEND) { + final HashSet removedPackages = new HashSet<>(); + final HashSet removedComponents = new HashSet<>(); + if (mOp == OP_REMOVE) { // Mark all packages in the broadcast to be removed - removedPackageNames.addAll(Arrays.asList(packages)); + Collections.addAll(removedPackages, packages); + + // No need to update the removedComponents as + // removedPackages is a super-set of removedComponents } else if (mOp == OP_UPDATE) { // Mark disabled packages in the broadcast to be removed for (int i=0; i infos = getItemInfoForComponentName(a.componentName, mUser); - deleteItemsFromDatabase(context, infos); - } - removeReason = 0; + if (!removedPackages.isEmpty() || !removedComponents.isEmpty()) { + for (String pn : removedPackages) { + deletePackageFromDatabase(context, pn, mUser); + } + for (ComponentName cn : removedComponents) { + deleteItemsFromDatabase(context, getItemInfoForComponentName(cn, mUser)); } // Remove any queued items from the install queue - InstallShortcutReceiver.removeFromInstallQueue(context, removedPackageNames, mUser); + InstallShortcutReceiver.removeFromInstallQueue(context, removedPackages, mUser); + // Call the components-removed callback + final Callbacks callbacks = getCallback(); mHandler.post(new Runnable() { public void run() { Callbacks cb = getCallback(); if (callbacks == cb && cb != null) { - callbacks.bindComponentsRemoved( - removedPackageNames, removedApps, mUser, removeReason); + callbacks.bindWorkspaceComponentsRemoved( + removedPackages, removedComponents, mUser); + } + } + }); + } + + if (!removedApps.isEmpty()) { + // Remove corresponding apps from All-Apps + final Callbacks callbacks = getCallback(); + mHandler.post(new Runnable() { + public void run() { + Callbacks cb = getCallback(); + if (callbacks == cb && cb != null) { + callbacks.bindAppInfosRemoved(removedApps); } } }); @@ -3307,6 +3318,7 @@ public class LauncherModel extends BroadcastReceiver // get widget update signals. if (!Utilities.ATLEAST_MARSHMALLOW && (mOp == OP_ADD || mOp == OP_REMOVE || mOp == OP_UPDATE)) { + final Callbacks callbacks = getCallback(); mHandler.post(new Runnable() { public void run() { Callbacks cb = getCallback(); diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 26cce98655..86c25b7029 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -4165,41 +4165,10 @@ public class Workspace extends PagedView }); } - public void disableShortcutsByPackageName(final ArrayList packages, - final UserHandleCompat user, final int reason) { - final HashSet packageNames = new HashSet(); - packageNames.addAll(packages); - - mapOverItems(MAP_RECURSE, new ItemOperator() { - @Override - public boolean evaluate(ItemInfo info, View v, View parent) { - if (info instanceof ShortcutInfo && v instanceof BubbleTextView) { - ShortcutInfo shortcutInfo = (ShortcutInfo) info; - ComponentName cn = shortcutInfo.getTargetComponent(); - if (user.equals(shortcutInfo.user) && cn != null - && packageNames.contains(cn.getPackageName())) { - shortcutInfo.isDisabled |= reason; - BubbleTextView shortcut = (BubbleTextView) v; - shortcut.applyFromShortcutInfo(shortcutInfo, mIconCache); - - if (parent != null) { - parent.invalidate(); - } - } - } - // process all the shortcuts - return false; - } - }); - } - // Removes ALL items that match a given package name, this is usually called when a package // has been removed and we want to remove all components (widgets, shortcuts, apps) that // belong to that package. - void removeItemsByPackageName(final ArrayList packages, final UserHandleCompat user) { - final HashSet packageNames = new HashSet(); - packageNames.addAll(packages); - + void removeItemsByPackageName(final HashSet packageNames, final UserHandleCompat user) { // Filter out all the ItemInfos that this is going to affect final HashSet infos = new HashSet(); final HashSet cns = new HashSet(); @@ -4381,7 +4350,7 @@ public class Workspace extends PagedView } public void removeAbandonedPromise(String packageName, UserHandleCompat user) { - ArrayList packages = new ArrayList(1); + HashSet packages = new HashSet<>(1); packages.add(packageName); LauncherModel.deletePackageFromDatabase(mLauncher, packageName, user); removeItemsByPackageName(packages, user); diff --git a/src/com/android/launcher3/util/FlagOp.java b/src/com/android/launcher3/util/FlagOp.java new file mode 100644 index 0000000000..5e26ed12fe --- /dev/null +++ b/src/com/android/launcher3/util/FlagOp.java @@ -0,0 +1,30 @@ +package com.android.launcher3.util; + +public abstract class FlagOp { + + public static FlagOp NO_OP = new FlagOp() {}; + + private FlagOp() {} + + public int apply(int flags) { + return flags; + } + + public static FlagOp addFlag(final int flag) { + return new FlagOp() { + @Override + public int apply(int flags) { + return flags | flag; + } + }; + } + + public static FlagOp removeFlag(final int flag) { + return new FlagOp() { + @Override + public int apply(int flags) { + return flags & ~flag; + } + }; + } +} From 20adc79a9059c641a61df8334f785f3dbf307c62 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 18 Mar 2016 18:29:24 -0700 Subject: [PATCH 199/219] Instead of reloading the launcher, updating items dynamically when Quiet mode changes Bug: 27632028,27763316 Change-Id: I55f018e855448df0abcbf4fd0fcb39344594980c --- src/com/android/launcher3/AllAppsList.java | 5 ++- src/com/android/launcher3/LauncherModel.java | 37 +++++++++++++------ .../launcher3/compat/UserHandleCompat.java | 10 +++++ .../android/launcher3/util/StringFilter.java | 31 ++++++++++++++++ 4 files changed, 69 insertions(+), 14 deletions(-) create mode 100644 src/com/android/launcher3/util/StringFilter.java diff --git a/src/com/android/launcher3/AllAppsList.java b/src/com/android/launcher3/AllAppsList.java index 962396c3b1..c4315936cc 100644 --- a/src/com/android/launcher3/AllAppsList.java +++ b/src/com/android/launcher3/AllAppsList.java @@ -23,6 +23,7 @@ import com.android.launcher3.compat.LauncherActivityInfoCompat; import com.android.launcher3.compat.LauncherAppsCompat; import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.util.FlagOp; +import com.android.launcher3.util.StringFilter; import java.util.ArrayList; import java.util.HashSet; @@ -122,12 +123,12 @@ class AllAppsList { /** * Updates the apps for the given packageName and user based on {@param op}. */ - public void updatePackageFlags(String packageName, UserHandleCompat user, FlagOp op) { + public void updatePackageFlags(StringFilter pkgFilter, UserHandleCompat user, FlagOp op) { final List data = this.data; for (int i = data.size() - 1; i >= 0; i--) { AppInfo info = data.get(i); final ComponentName component = info.intent.getComponent(); - if (info.user.equals(user) && packageName.equals(component.getPackageName())) { + if (info.user.equals(user) && pkgFilter.matches(component.getPackageName())) { info.isDisabled = op.apply(info.isDisabled); modified.add(info); } diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 703161c075..5cbea601de 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -60,6 +60,7 @@ import com.android.launcher3.util.CursorIconInfo; import com.android.launcher3.util.FlagOp; import com.android.launcher3.util.LongArrayMap; import com.android.launcher3.util.ManagedProfileHeuristic; +import com.android.launcher3.util.StringFilter; import com.android.launcher3.util.Thunk; import java.lang.ref.WeakReference; @@ -1287,10 +1288,16 @@ public class LauncherModel extends BroadcastReceiver callbacks.bindSearchProviderChanged(); } } else if (LauncherAppsCompat.ACTION_MANAGED_PROFILE_ADDED.equals(action) - || LauncherAppsCompat.ACTION_MANAGED_PROFILE_REMOVED.equals(action) - || LauncherAppsCompat.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED.equals(action)) { + || LauncherAppsCompat.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) { UserManagerCompat.getInstance(context).enableAndResetCache(); forceReload(); + } else if (LauncherAppsCompat.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED.equals(action)) { + UserHandleCompat user = UserHandleCompat.fromIntent(intent); + if (user != null) { + enqueuePackageUpdated(new PackageUpdatedTask( + PackageUpdatedTask.OP_USER_AVAILABILITY_CHANGE, + new String[0], user)); + } } } @@ -3000,7 +3007,7 @@ public class LauncherModel extends BroadcastReceiver public static final int OP_UNAVAILABLE = 4; // external media unmounted public static final int OP_SUSPEND = 5; // package suspended public static final int OP_UNSUSPEND = 6; // package unsuspended - + public static final int OP_USER_AVAILABILITY_CHANGE = 7; // user available/unavailable public PackageUpdatedTask(int op, String[] packages, UserHandleCompat user) { mOp = op; @@ -3018,6 +3025,7 @@ public class LauncherModel extends BroadcastReceiver final String[] packages = mPackages; final int N = packages.length; FlagOp flagOp = FlagOp.NO_OP; + StringFilter pkgFilter = StringFilter.of(new HashSet<>(Arrays.asList(packages))); switch (mOp) { case OP_ADD: { for (int i=0; i removedShortcuts = new ArrayList(); final ArrayList widgets = new ArrayList(); - HashSet packageSet = new HashSet(Arrays.asList(packages)); synchronized (sBgLock) { for (ItemInfo info : sBgItemsIdMap) { if (info instanceof ShortcutInfo && mUser.equals(info.user)) { @@ -3132,7 +3145,7 @@ public class LauncherModel extends BroadcastReceiver // Update shortcuts which use iconResource. if ((si.iconResource != null) - && packageSet.contains(si.iconResource.packageName)) { + && pkgFilter.matches(si.iconResource.packageName)) { Bitmap icon = Utilities.createIconBitmap( si.iconResource.packageName, si.iconResource.resourceName, context); @@ -3144,7 +3157,7 @@ public class LauncherModel extends BroadcastReceiver } ComponentName cn = si.getTargetComponent(); - if (cn != null && packageSet.contains(cn.getPackageName())) { + if (cn != null && pkgFilter.matches(cn.getPackageName())) { AppInfo appInfo = addedOrUpdatedApps.get(cn); if (si.isPromise()) { @@ -3205,11 +3218,11 @@ public class LauncherModel extends BroadcastReceiver if (infoUpdated) { updateItemInDatabase(context, si); } - } else if (info instanceof LauncherAppWidgetInfo) { + } else if (info instanceof LauncherAppWidgetInfo && mOp == OP_ADD) { LauncherAppWidgetInfo widgetInfo = (LauncherAppWidgetInfo) info; if (mUser.equals(widgetInfo.user) && widgetInfo.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY) - && packageSet.contains(widgetInfo.providerName.getPackageName())) { + && pkgFilter.matches(widgetInfo.providerName.getPackageName())) { widgetInfo.restoreStatus &= ~LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY & ~LauncherAppWidgetInfo.FLAG_RESTORE_STARTED; diff --git a/src/com/android/launcher3/compat/UserHandleCompat.java b/src/com/android/launcher3/compat/UserHandleCompat.java index 94799089fc..50af21b968 100644 --- a/src/com/android/launcher3/compat/UserHandleCompat.java +++ b/src/com/android/launcher3/compat/UserHandleCompat.java @@ -93,4 +93,14 @@ public class UserHandleCompat { intent.putExtra(name, mUser); } } + + public static UserHandleCompat fromIntent(Intent intent) { + if (Utilities.ATLEAST_LOLLIPOP) { + UserHandle user = intent.getParcelableExtra(Intent.EXTRA_USER); + if (user != null) { + return UserHandleCompat.fromUser(user); + } + } + return null; + } } diff --git a/src/com/android/launcher3/util/StringFilter.java b/src/com/android/launcher3/util/StringFilter.java new file mode 100644 index 0000000000..f539ad11e8 --- /dev/null +++ b/src/com/android/launcher3/util/StringFilter.java @@ -0,0 +1,31 @@ +package com.android.launcher3.util; + +import java.util.Set; + +/** + * Abstract class to filter a set of strings. + */ +public abstract class StringFilter { + + private StringFilter() { } + + public abstract boolean matches(String str); + + public static StringFilter matchesAll() { + return new StringFilter() { + @Override + public boolean matches(String str) { + return true; + } + }; + } + + public static StringFilter of(final Set validEntries) { + return new StringFilter() { + @Override + public boolean matches(String str) { + return validEntries.contains(str); + } + }; + } +} From 16affbdf30b51ada08391d1ece721dca61ba3dea Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 22 Mar 2016 14:32:44 -0700 Subject: [PATCH 200/219] Embedding the icon pixel size in the cache DB version. This causes the cache to get reset when the icon size changes, for eg, in case of display scale changes Bug: 27701193 Change-Id: Ib11144757a93cb50fb233d855902c0b2c15afbed --- src/com/android/launcher3/IconCache.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/IconCache.java b/src/com/android/launcher3/IconCache.java index 05ad5388a4..c72c2f9f6d 100644 --- a/src/com/android/launcher3/IconCache.java +++ b/src/com/android/launcher3/IconCache.java @@ -118,7 +118,7 @@ public class IconCache { mUserManager = UserManagerCompat.getInstance(mContext); mLauncherApps = LauncherAppsCompat.getInstance(mContext); mIconDpi = inv.fillResIconDpi; - mIconDb = new IconDB(context); + mIconDb = new IconDB(context, inv.iconBitmapSize); mWorkerHandler = new Handler(LauncherModel.getWorkerLooper()); @@ -809,8 +809,10 @@ public class IconCache { private final static String COLUMN_LABEL = "label"; private final static String COLUMN_SYSTEM_STATE = "system_state"; - public IconDB(Context context) { - super(context, LauncherFiles.APP_ICONS_DB, RELEASE_VERSION, TABLE_NAME); + public IconDB(Context context, int iconPixelSize) { + super(context, LauncherFiles.APP_ICONS_DB, + (RELEASE_VERSION << 16) + iconPixelSize, + TABLE_NAME); } @Override From 194cf5061a5898b542712acd2270eafff112e961 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 30 Mar 2016 16:47:03 -0700 Subject: [PATCH 201/219] No need to differentiate package event into app or updated based on a package is being updated or not Package update handling is a super set of package add handling which also updates the all-apps and package disabled state. This also prevents addtion of a home screen icon when a managed profile app on SD card become available. Bug: 27877926 Change-Id: I9264e422fd30b94ce6ebb2e5adea820b3cda3063 (cherry picked from commit 144154d435ac535b28c947cd765c02590a683d3a) --- src/com/android/launcher3/LauncherModel.java | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 5cbea601de..96afc112b9 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -97,7 +97,6 @@ public class LauncherModel extends BroadcastReceiver private static final int ITEMS_CHUNK = 6; // batch size for the workspace icons private static final long INVALID_SCREEN_ID = -1L; - @Thunk final boolean mAppsCanBeOnRemoveableStorage; private final boolean mOldContentProviderExists; @Thunk final LauncherAppState mApp; @@ -216,7 +215,6 @@ public class LauncherModel extends BroadcastReceiver LauncherModel(LauncherAppState app, IconCache iconCache, AppFilter appFilter) { Context context = app.getContext(); - mAppsCanBeOnRemoveableStorage = Environment.isExternalStorageRemovable(); String oldProvider = context.getString(R.string.old_launcher_provider_uri); // This may be the same as MIGRATE_AUTHORITY, or it may be replaced by a different // resource string. @@ -1230,20 +1228,8 @@ public class LauncherModel extends BroadcastReceiver @Override public void onPackagesAvailable(String[] packageNames, UserHandleCompat user, boolean replacing) { - if (!replacing) { - enqueuePackageUpdated(new PackageUpdatedTask(PackageUpdatedTask.OP_ADD, packageNames, - user)); - if (mAppsCanBeOnRemoveableStorage) { - // Only rebind if we support removable storage. It catches the - // case where - // apps on the external sd card need to be reloaded - startLoaderFromBackground(); - } - } else { - // If we are replacing then just update the packages in the list - enqueuePackageUpdated(new PackageUpdatedTask(PackageUpdatedTask.OP_UPDATE, - packageNames, user)); - } + enqueuePackageUpdated( + new PackageUpdatedTask(PackageUpdatedTask.OP_UPDATE, packageNames, user)); } @Override From e7e7fc6995609de925c7938aa7a0473d20533b58 Mon Sep 17 00:00:00 2001 From: Rubin Xu Date: Mon, 4 Apr 2016 16:13:35 +0100 Subject: [PATCH 202/219] Listen on new broadcasts for profile changes. The change is due to API review comments on the platform side. Bug: 27532254 Change-Id: I44133fbb5c3ee13d0523a72b25d2e1c5d1eba6a0 --- src/com/android/launcher3/LauncherAppState.java | 3 ++- src/com/android/launcher3/LauncherModel.java | 3 ++- src/com/android/launcher3/compat/LauncherAppsCompat.java | 6 ++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index 042fc072c8..1f7bbe0da8 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -100,7 +100,8 @@ public class LauncherAppState { // For handling managed profiles filter.addAction(LauncherAppsCompat.ACTION_MANAGED_PROFILE_ADDED); filter.addAction(LauncherAppsCompat.ACTION_MANAGED_PROFILE_REMOVED); - filter.addAction(LauncherAppsCompat.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED); + filter.addAction(LauncherAppsCompat.ACTION_MANAGED_PROFILE_AVAILABLE); + filter.addAction(LauncherAppsCompat.ACTION_MANAGED_PROFILE_UNAVAILABLE); sContext.registerReceiver(mModel, filter); UserManagerCompat.getInstance(sContext).enableAndResetCache(); diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 96afc112b9..b553710c56 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -1277,7 +1277,8 @@ public class LauncherModel extends BroadcastReceiver || LauncherAppsCompat.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) { UserManagerCompat.getInstance(context).enableAndResetCache(); forceReload(); - } else if (LauncherAppsCompat.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED.equals(action)) { + } else if (LauncherAppsCompat.ACTION_MANAGED_PROFILE_AVAILABLE.equals(action) || + LauncherAppsCompat.ACTION_MANAGED_PROFILE_UNAVAILABLE.equals(action)) { UserHandleCompat user = UserHandleCompat.fromIntent(intent); if (user != null) { enqueuePackageUpdated(new PackageUpdatedTask( diff --git a/src/com/android/launcher3/compat/LauncherAppsCompat.java b/src/com/android/launcher3/compat/LauncherAppsCompat.java index db5b89e811..bc900bcb5f 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompat.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompat.java @@ -35,8 +35,10 @@ public abstract class LauncherAppsCompat { "android.intent.action.MANAGED_PROFILE_ADDED"; public static final String ACTION_MANAGED_PROFILE_REMOVED = "android.intent.action.MANAGED_PROFILE_REMOVED"; - public static final String ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED = - "android.intent.action.MANAGED_PROFILE_AVAILABILITY_CHANGED"; + public static final String ACTION_MANAGED_PROFILE_AVAILABLE = + "android.intent.action.MANAGED_PROFILE_AVAILABLE"; + public static final String ACTION_MANAGED_PROFILE_UNAVAILABLE = + "android.intent.action.MANAGED_PROFILE_UNAVAILABLE"; public interface OnAppsChangedCallbackCompat { void onPackageRemoved(String packageName, UserHandleCompat user); From 90f995521edd4f94a7ca18018115aa04b9d46e28 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 24 Mar 2016 13:53:22 -0700 Subject: [PATCH 203/219] Fixing debug log Change-Id: I85c1f7707a3ea9cae2701aa781b74d758602f643 (cherry picked from commit 17763cb1d2060fb95873a8920196720c862f0e14) --- src/com/android/launcher3/LauncherModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index b553710c56..97fc2ddcc3 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -3061,7 +3061,7 @@ public class LauncherModel extends BroadcastReceiver flagOp = mOp == OP_SUSPEND ? FlagOp.addFlag(ShortcutInfo.FLAG_DISABLED_SUSPENDED) : FlagOp.removeFlag(ShortcutInfo.FLAG_DISABLED_SUSPENDED); - if (DEBUG_LOADERS) Log.d(TAG, "mAllAppsList.(un)suspend " + packages); + if (DEBUG_LOADERS) Log.d(TAG, "mAllAppsList.(un)suspend " + N); mBgAllAppsList.updatePackageFlags(pkgFilter, mUser, flagOp); break; case OP_USER_AVAILABILITY_CHANGE: From f9dc857a0e49750fefd88d4201ee74e1b3cfee3d Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Fri, 8 Apr 2016 10:55:50 -0700 Subject: [PATCH 204/219] Make com.android.launcher3.action.LAUNCH intent explicit b/27967359 Change-Id: I355ffc0af07d5bddcf87d41cf42bead9d5c824dc --- res/values/config.xml | 4 ++++ src/com/android/launcher3/Stats.java | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/res/values/config.xml b/res/values/config.xml index c846b98ac1..47311f3e87 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -71,6 +71,10 @@ filter the activities shown in the launcher. Can be empty. --> + + + diff --git a/src/com/android/launcher3/Stats.java b/src/com/android/launcher3/Stats.java index 83bca855a9..d46c939c9b 100644 --- a/src/com/android/launcher3/Stats.java +++ b/src/com/android/launcher3/Stats.java @@ -132,6 +132,7 @@ public class Stats { final String flat = intent.toUri(0); Intent broadcastIntent = new Intent(ACTION_LAUNCH).putExtra(EXTRA_INTENT, flat); + if (shortcut != null) { broadcastIntent.putExtra(EXTRA_CONTAINER, shortcut.container) .putExtra(EXTRA_SCREEN, shortcut.screenId) @@ -142,6 +143,11 @@ public class Stats { Bundle sourceExtras = LaunchSourceUtils.createSourceData(); LaunchSourceUtils.populateSourceDataFromAncestorProvider(v, sourceExtras); broadcastIntent.putExtra(EXTRA_SOURCE, sourceExtras); - mLauncher.sendBroadcast(broadcastIntent, mLaunchBroadcastPermission); + + String[] packages = mLauncher.getResources().getStringArray(R.array.launch_broadcast_targets); + for(String p: packages) { + broadcastIntent.setPackage(p); + mLauncher.sendBroadcast(broadcastIntent, mLaunchBroadcastPermission); + } } } From 63d093de024a5e1bd26b71bd823df0017d1ec945 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Fri, 8 Apr 2016 12:17:25 -0700 Subject: [PATCH 205/219] Fixing a typo from to Change-Id: Iadbbe59e0ba93a21373056fe6b4af9db7ce39f66 --- res/values/config.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values/config.xml b/res/values/config.xml index 47311f3e87..c8a610db72 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -73,7 +73,7 @@ - + From 96b6ed77a4ba0b67f8ed3105c515a1ff8bc7c390 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 7 Apr 2016 12:14:37 -0700 Subject: [PATCH 206/219] Calling start/stop listening in onStart/onStop AppWidgetHost in N was changed to make start/stop lisenting calls light weight, which allows launcher to avoid getting unnecessary updates when its not visible Bug: 23892701 Change-Id: I0ca6e02400992bc4e0359e45a3d66b9252751402 (cherry picked from commit 23ac9cb3e1bed8de0155f1a117739a582cb8abae) --- src/com/android/launcher3/Launcher.java | 6 ++++++ src/com/android/launcher3/LauncherAppWidgetHost.java | 6 ------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 704e001c0c..ff120f7fd1 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -939,6 +939,9 @@ public class Launcher extends Activity protected void onStop() { super.onStop(); FirstFrameAnimatorHelper.setIsVisible(false); + if (Utilities.isNycOrAbove()) { + mAppWidgetHost.stopListening(); + } if (mLauncherCallbacks != null) { mLauncherCallbacks.onStop(); @@ -949,6 +952,9 @@ public class Launcher extends Activity protected void onStart() { super.onStart(); FirstFrameAnimatorHelper.setIsVisible(true); + if (Utilities.isNycOrAbove()) { + mAppWidgetHost.startListening(); + } if (mLauncherCallbacks != null) { mLauncherCallbacks.onStart(); diff --git a/src/com/android/launcher3/LauncherAppWidgetHost.java b/src/com/android/launcher3/LauncherAppWidgetHost.java index 8c23ff30d7..1510558f19 100644 --- a/src/com/android/launcher3/LauncherAppWidgetHost.java +++ b/src/com/android/launcher3/LauncherAppWidgetHost.java @@ -82,12 +82,6 @@ public class LauncherAppWidgetHost extends AppWidgetHost { } } - @Override - public void stopListening() { - super.stopListening(); - clearViews(); - } - public void addProviderChangeListener(Runnable callback) { mProviderChangeListeners.add(callback); } From fa7a67ebfc6187dc3861f5424b5c46b8662a5c4c Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 6 Apr 2016 16:18:20 -0700 Subject: [PATCH 207/219] Removing dependency on getApplicationInfo method added in N This method is goiing away. We don't need this method anyway since LauncherActivityInfo already has the information Change-Id: Ic6afa1df14958b894925d730e01a2e2d2a6fb98c Conflicts: src/com/android/launcher3/LauncherModel.java --- src/com/android/launcher3/AppInfo.java | 3 +- src/com/android/launcher3/LauncherModel.java | 41 ++++++------ .../compat/LauncherActivityInfoCompat.java | 2 - .../launcher3/compat/LauncherAppsCompat.java | 16 +---- .../compat/LauncherAppsCompatV16.java | 4 +- .../compat/LauncherAppsCompatVN.java | 57 ----------------- .../launcher3/util/PackageManagerHelper.java | 62 +++++++++++++++++++ 7 files changed, 90 insertions(+), 95 deletions(-) delete mode 100644 src/com/android/launcher3/compat/LauncherAppsCompatVN.java create mode 100644 src/com/android/launcher3/util/PackageManagerHelper.java diff --git a/src/com/android/launcher3/AppInfo.java b/src/com/android/launcher3/AppInfo.java index 427c9c801a..c7a6ae4291 100644 --- a/src/com/android/launcher3/AppInfo.java +++ b/src/com/android/launcher3/AppInfo.java @@ -26,6 +26,7 @@ import com.android.launcher3.compat.LauncherActivityInfoCompat; import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.compat.UserManagerCompat; import com.android.launcher3.util.ComponentKey; +import com.android.launcher3.util.PackageManagerHelper; import java.util.ArrayList; import java.util.Arrays; @@ -89,7 +90,7 @@ public class AppInfo extends ItemInfo { this.componentName = info.getComponentName(); this.container = ItemInfo.NO_ID; flags = initFlags(info); - if ((info.getApplicationInfo().flags & LauncherActivityInfoCompat.FLAG_SUSPENDED) != 0) { + if (PackageManagerHelper.isAppSuspended(info.getApplicationInfo())) { isDisabled |= ShortcutInfo.FLAG_DISABLED_SUSPENDED; } if (quietModeEnabled) { diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 97fc2ddcc3..c8860e3ed0 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -33,7 +33,6 @@ import android.content.pm.ResolveInfo; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; -import android.os.Environment; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; @@ -60,6 +59,7 @@ import com.android.launcher3.util.CursorIconInfo; import com.android.launcher3.util.FlagOp; import com.android.launcher3.util.LongArrayMap; import com.android.launcher3.util.ManagedProfileHeuristic; +import com.android.launcher3.util.PackageManagerHelper; import com.android.launcher3.util.StringFilter; import com.android.launcher3.util.Thunk; @@ -1825,6 +1825,7 @@ public class LauncherModel extends BroadcastReceiver long serialNumber; Intent intent; UserHandleCompat user; + String targetPackage; while (!mStopped && c.moveToNext()) { try { @@ -1843,6 +1844,7 @@ public class LauncherModel extends BroadcastReceiver int promiseType = c.getInt(restoredIndex); int disabledState = 0; boolean itemReplaced = false; + targetPackage = null; if (user == null) { // User has been deleted remove the item. itemsToRemove.add(id); @@ -1856,6 +1858,9 @@ public class LauncherModel extends BroadcastReceiver cn.getPackageName(), user); boolean validComponent = validPkg && launcherApps.isActivityEnabledForProfile(cn, user); + if (validPkg) { + targetPackage = cn.getPackageName(); + } if (validComponent) { if (restored) { @@ -1863,13 +1868,8 @@ public class LauncherModel extends BroadcastReceiver restoredRows.add(id); restored = false; } - boolean isSuspended = launcherApps.isPackageSuspendedForProfile( - cn.getPackageName(), user); - if (isSuspended) { - disabledState = ShortcutInfo.FLAG_DISABLED_SUSPENDED; - } if (quietMode.get(serialNumber)) { - disabledState |= ShortcutInfo.FLAG_DISABLED_QUIET_USER; + disabledState = ShortcutInfo.FLAG_DISABLED_QUIET_USER; } } else if (validPkg) { intent = null; @@ -1939,9 +1939,8 @@ public class LauncherModel extends BroadcastReceiver itemsToRemove.add(id); continue; } - } else if (launcherApps.isAppEnabled( - manager, cn.getPackageName(), - PackageManager.GET_UNINSTALLED_PACKAGES)) { + } else if (PackageManagerHelper.isAppOnSdcard( + manager, cn.getPackageName())) { // Package is present but not available. allowMissingTarget = true; disabledState = ShortcutInfo.FLAG_DISABLED_NOT_AVAILABLE; @@ -1984,7 +1983,7 @@ public class LauncherModel extends BroadcastReceiver if (itemReplaced) { if (user.equals(UserHandleCompat.myUserHandle())) { - info = getAppShortcutInfo(manager, intent, user, context, null, + info = getAppShortcutInfo(intent, user, context, null, cursorIconInfo.iconIndex, titleIndex, false, useLowResIcon); } else { @@ -2007,12 +2006,17 @@ public class LauncherModel extends BroadcastReceiver } } else if (itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION) { - info = getAppShortcutInfo(manager, intent, user, context, c, + info = getAppShortcutInfo(intent, user, context, c, cursorIconInfo.iconIndex, titleIndex, allowMissingTarget, useLowResIcon); } else { info = getShortcutInfo(c, context, titleIndex, cursorIconInfo); + // Shortcuts are only available on the primary profile + if (PackageManagerHelper.isAppSuspended(manager, targetPackage)) { + disabledState |= ShortcutInfo.FLAG_DISABLED_SUSPENDED; + } + // App shortcuts that used to be automatically added to Launcher // didn't always have the correct intent flags set, so do that // here @@ -2040,7 +2044,7 @@ public class LauncherModel extends BroadcastReceiver if (info.promisedIntent != null) { info.promisedIntent.putExtra(ItemInfo.EXTRA_PROFILE, serialNumber); } - info.isDisabled = disabledState; + info.isDisabled |= disabledState; if (isSafeMode && !Utilities.isSystemApp(context, intent)) { info.isDisabled |= ShortcutInfo.FLAG_DISABLED_SAFEMODE; } @@ -2957,10 +2961,7 @@ public class LauncherModel extends BroadcastReceiver packagesUnavailable.clear(); for (String pkg : entry.getValue()) { if (!launcherApps.isPackageEnabledForProfile(pkg, user)) { - boolean packageOnSdcard = launcherApps.isAppEnabled( - manager, pkg, PackageManager.GET_UNINSTALLED_PACKAGES); - if (packageOnSdcard) { - Launcher.addDumpLog(TAG, "Package found on sd-card: " + pkg, true); + if (PackageManagerHelper.isAppOnSdcard(manager, pkg)) { packagesUnavailable.add(pkg); } else { Launcher.addDumpLog(TAG, "Package not found: " + pkg, true); @@ -3447,7 +3448,7 @@ public class LauncherModel extends BroadcastReceiver * * If c is not null, then it will be used to fill in missing data like the title and icon. */ - public ShortcutInfo getAppShortcutInfo(PackageManager manager, Intent intent, + public ShortcutInfo getAppShortcutInfo(Intent intent, UserHandleCompat user, Context context, Cursor c, int iconIndex, int titleIndex, boolean allowMissingTarget, boolean useLowResIcon) { if (user == null) { @@ -3477,6 +3478,10 @@ public class LauncherModel extends BroadcastReceiver info.setIcon(icon == null ? mIconCache.getDefaultIcon(user) : icon); } + if (lai != null && PackageManagerHelper.isAppSuspended(lai.getApplicationInfo())) { + info.isDisabled = ShortcutInfo.FLAG_DISABLED_SUSPENDED; + } + // from the db if (TextUtils.isEmpty(info.title) && c != null) { info.title = Utilities.trim(c.getString(titleIndex)); diff --git a/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java b/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java index aaf756edaf..0bc9588aae 100644 --- a/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java +++ b/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java @@ -24,8 +24,6 @@ import android.graphics.drawable.Drawable; public abstract class LauncherActivityInfoCompat { - public static final int FLAG_SUSPENDED = 1<<30; - LauncherActivityInfoCompat() { } diff --git a/src/com/android/launcher3/compat/LauncherAppsCompat.java b/src/com/android/launcher3/compat/LauncherAppsCompat.java index bc900bcb5f..237a9e9fb8 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompat.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompat.java @@ -19,9 +19,6 @@ package com.android.launcher3.compat; import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; import android.graphics.Rect; import android.os.Bundle; @@ -59,9 +56,7 @@ public abstract class LauncherAppsCompat { public static LauncherAppsCompat getInstance(Context context) { synchronized (sInstanceLock) { if (sInstance == null) { - if (Utilities.isNycOrAbove()) { - sInstance = new LauncherAppsCompatVN(context.getApplicationContext()); - } else if (Utilities.ATLEAST_LOLLIPOP) { + if (Utilities.ATLEAST_LOLLIPOP) { sInstance = new LauncherAppsCompatVL(context.getApplicationContext()); } else { sInstance = new LauncherAppsCompatV16(context.getApplicationContext()); @@ -84,13 +79,4 @@ public abstract class LauncherAppsCompat { public abstract boolean isActivityEnabledForProfile(ComponentName component, UserHandleCompat user); public abstract boolean isPackageSuspendedForProfile(String packageName, UserHandleCompat user); - - public boolean isAppEnabled(PackageManager pm, String packageName, int flags) { - try { - ApplicationInfo info = pm.getApplicationInfo(packageName, flags); - return info != null && info.enabled; - } catch (NameNotFoundException e) { - return false; - } - } } diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatV16.java b/src/com/android/launcher3/compat/LauncherAppsCompatV16.java index 2d0778d306..4e2fc055e0 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompatV16.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompatV16.java @@ -27,11 +27,11 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.graphics.Rect; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.provider.Settings; import com.android.launcher3.Utilities; +import com.android.launcher3.util.PackageManagerHelper; import com.android.launcher3.util.Thunk; import java.util.ArrayList; @@ -114,7 +114,7 @@ public class LauncherAppsCompatV16 extends LauncherAppsCompat { } public boolean isPackageEnabledForProfile(String packageName, UserHandleCompat user) { - return isAppEnabled(mPm, packageName, 0); + return PackageManagerHelper.isAppEnabled(mPm, packageName); } public boolean isActivityEnabledForProfile(ComponentName component, UserHandleCompat user) { diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVN.java b/src/com/android/launcher3/compat/LauncherAppsCompatVN.java deleted file mode 100644 index 0d883b6fd0..0000000000 --- a/src/com/android/launcher3/compat/LauncherAppsCompatVN.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2016 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.content.Context; -import android.content.pm.ApplicationInfo; -import android.content.pm.LauncherApps; -import android.os.UserHandle; -import android.util.Log; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -//TODO: Once gogole3 SDK is updated to N, add @TargetApi(Build.VERSION_CODES.N) -public class LauncherAppsCompatVN extends LauncherAppsCompatVL { - - private static final String TAG = "LauncherAppsCompatVN"; - - LauncherAppsCompatVN(Context context) { - super(context); - } - - @Override - public boolean isPackageSuspendedForProfile(String packageName, UserHandleCompat user) { - if (user != null && packageName != null) { - try { - //TODO: Replace with proper API call once google3 SDK is updated. - Method getApplicationInfoMethod = LauncherApps.class.getMethod("getApplicationInfo", - String.class, int.class, UserHandle.class); - - ApplicationInfo info = (ApplicationInfo) getApplicationInfoMethod.invoke( - mLauncherApps, packageName, 0, user.getUser()); - if (info != null) { - return (info.flags & LauncherActivityInfoCompat.FLAG_SUSPENDED) != 0; - } - } catch (NoSuchMethodError | NoSuchMethodException | IllegalAccessException - | IllegalArgumentException | InvocationTargetException e) { - Log.e(TAG, "Running on N without getApplicationInfo", e); - } - } - return false; - } -} diff --git a/src/com/android/launcher3/util/PackageManagerHelper.java b/src/com/android/launcher3/util/PackageManagerHelper.java new file mode 100644 index 0000000000..d0345727fb --- /dev/null +++ b/src/com/android/launcher3/util/PackageManagerHelper.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2016 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.util; + +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; + +/** + * Utility methods using package manager + */ +public class PackageManagerHelper { + + private static final int FLAG_SUSPENDED = 1<<30; + + /** + * Returns true if the app can possibly be on the SDCard. This is just a workaround and doesn't + * guarantee that the app is on SD card. + */ + public static boolean isAppOnSdcard(PackageManager pm, String packageName) { + return isAppEnabled(pm, packageName, PackageManager.GET_UNINSTALLED_PACKAGES); + } + + public static boolean isAppEnabled(PackageManager pm, String packageName) { + return isAppEnabled(pm, packageName, 0); + } + + public static boolean isAppEnabled(PackageManager pm, String packageName, int flags) { + try { + ApplicationInfo info = pm.getApplicationInfo(packageName, flags); + return info != null && info.enabled; + } catch (PackageManager.NameNotFoundException e) { + return false; + } + } + + public static boolean isAppSuspended(PackageManager pm, String packageName) { + try { + ApplicationInfo info = pm.getApplicationInfo(packageName, 0); + return info != null && isAppSuspended(info); + } catch (PackageManager.NameNotFoundException e) { + return false; + } + } + + public static boolean isAppSuspended(ApplicationInfo info) { + return (info.flags & FLAG_SUSPENDED) != 0; + } +} From aac9af46c09daf50dc3e04b180534de64688a0e0 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Mon, 11 Apr 2016 11:24:45 -0700 Subject: [PATCH 208/219] Prompt users to set wallpaper on lockscreen on N+. This CL handles all wallpapers except the default one, which will be handled in a follow-up CL. Change-Id: Ib8e4f18fb35b4c1442efb3893df75bf5f4f9b0d5 --- WallpaperPicker/res/values/arrays.xml | 22 ++++++ WallpaperPicker/res/values/strings.xml | 7 ++ .../gallery3d/common/BitmapCropTask.java | 24 ++++-- .../android/launcher3/NycWallpaperUtils.java | 79 +++++++++++++++++++ .../launcher3/WallpaperCropActivity.java | 24 +++++- .../launcher3/WallpaperPickerActivity.java | 2 +- 6 files changed, 147 insertions(+), 11 deletions(-) create mode 100644 WallpaperPicker/res/values/arrays.xml create mode 100644 WallpaperPicker/src/com/android/launcher3/NycWallpaperUtils.java diff --git a/WallpaperPicker/res/values/arrays.xml b/WallpaperPicker/res/values/arrays.xml new file mode 100644 index 0000000000..5c10b98fb4 --- /dev/null +++ b/WallpaperPicker/res/values/arrays.xml @@ -0,0 +1,22 @@ + + + + + @string/which_wallpaper_option_home_screen + @string/which_wallpaper_option_lock_screen + @string/which_wallpaper_option_home_screen_and_lock_screen + + \ No newline at end of file diff --git a/WallpaperPicker/res/values/strings.xml b/WallpaperPicker/res/values/strings.xml index 2bfd4767fc..aef6a1a50c 100644 --- a/WallpaperPicker/res/values/strings.xml +++ b/WallpaperPicker/res/values/strings.xml @@ -53,4 +53,11 @@ Wallpapers Crop wallpaper + + + Home screen + + Lock screen + + Home screen and lock screen diff --git a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java index 8b51447484..2d10b7265a 100644 --- a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java +++ b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java @@ -33,7 +33,9 @@ import android.os.AsyncTask; import android.util.Log; import android.widget.Toast; +import com.android.launcher3.NycWallpaperUtils; import com.android.launcher3.R; +import com.android.launcher3.Utilities; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; @@ -42,7 +44,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -public class BitmapCropTask extends AsyncTask { +public class BitmapCropTask extends AsyncTask { public interface OnBitmapCroppedHandler { public void onBitmapCropped(byte[] imageBytes); @@ -175,7 +177,7 @@ public class BitmapCropTask extends AsyncTask { public Bitmap getCroppedBitmap() { return mCroppedBitmap; } - public boolean cropBitmap() { + public boolean cropBitmap(int whichWallpaper) { boolean failure = false; @@ -189,7 +191,11 @@ public class BitmapCropTask extends AsyncTask { try { InputStream is = regenerateInputStream(); if (is != null) { - wallpaperManager.setStream(is); + if (!Utilities.isNycOrAbove()) { + wallpaperManager.setStream(is); + } else { + NycWallpaperUtils.setStream(mContext, is, null, true, whichWallpaper); + } Utils.closeSilently(is); } } catch (IOException e) { @@ -375,7 +381,13 @@ public class BitmapCropTask extends AsyncTask { if (mSetWallpaper && wallpaperManager != null) { try { byte[] outByteArray = tmpOut.toByteArray(); - wallpaperManager.setStream(new ByteArrayInputStream(outByteArray)); + if (!Utilities.isNycOrAbove()) { + wallpaperManager.setStream(new ByteArrayInputStream(outByteArray)); + } else { + NycWallpaperUtils.setStream(mContext, + new ByteArrayInputStream(outByteArray), null, true, + whichWallpaper); + } if (mOnBitmapCroppedHandler != null) { mOnBitmapCroppedHandler.onBitmapCropped(outByteArray); } @@ -393,8 +405,8 @@ public class BitmapCropTask extends AsyncTask { } @Override - protected Boolean doInBackground(Void... params) { - return cropBitmap(); + protected Boolean doInBackground(Integer... params) { + return cropBitmap(params.length == 0 ? NycWallpaperUtils.FLAG_SET_SYSTEM : params[0]); } @Override diff --git a/WallpaperPicker/src/com/android/launcher3/NycWallpaperUtils.java b/WallpaperPicker/src/com/android/launcher3/NycWallpaperUtils.java new file mode 100644 index 0000000000..abac830a2a --- /dev/null +++ b/WallpaperPicker/src/com/android/launcher3/NycWallpaperUtils.java @@ -0,0 +1,79 @@ +package com.android.launcher3; + +import android.app.AlertDialog; +import android.app.WallpaperManager; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Rect; +import android.os.AsyncTask; + +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +/** + * Utility class used to help set lockscreen wallpapers on N+. + */ +public class NycWallpaperUtils { + public static final int FLAG_SET_SYSTEM = 1 << 0; // TODO: use WallpaperManager.FLAG_SET_SYSTEM + public static final int FLAG_SET_LOCK = 1 << 1; // TODO: use WallpaperManager.FLAG_SET_LOCK + + /** + * Calls cropTask.execute(), once the user has selected which wallpaper to set. On pre-N + * devices, the prompt is not displayed since there is no API to set the lockscreen wallpaper. + */ + public static void executeCropTaskAfterPrompt( + Context context, final AsyncTask cropTask, + DialogInterface.OnCancelListener onCancelListener) { + if (Utilities.isNycOrAbove()) { + new AlertDialog.Builder(context) + .setTitle(R.string.wallpaper_instructions) + .setItems(R.array.which_wallpaper_options, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int selectedItemIndex) { + int whichWallpaper; + if (selectedItemIndex == 0) { + whichWallpaper = FLAG_SET_SYSTEM; + } else if (selectedItemIndex == 1) { + whichWallpaper = FLAG_SET_LOCK; + } else { + whichWallpaper = FLAG_SET_SYSTEM | FLAG_SET_LOCK; + } + cropTask.execute(whichWallpaper); + } + }) + .setOnCancelListener(onCancelListener) + .show(); + } else { + cropTask.execute(FLAG_SET_SYSTEM); + } + } + + public static void setStream(Context context, final InputStream data, Rect visibleCropHint, + boolean allowBackup, int whichWallpaper) throws IOException { + WallpaperManager wallpaperManager = WallpaperManager.getInstance(context); + try { + // TODO: use mWallpaperManager.setStream(data, visibleCropHint, allowBackup, which) + // without needing reflection. + Method setStream = WallpaperManager.class.getMethod("setStream", InputStream.class, + Rect.class, boolean.class, int.class); + setStream.invoke(wallpaperManager, data, visibleCropHint, allowBackup, whichWallpaper); + } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + // Fall back to previous implementation (set system) + wallpaperManager.setStream(data); + } + } + + public static void clear(Context context, int whichWallpaper) throws IOException { + WallpaperManager wallpaperManager = WallpaperManager.getInstance(context); + try { + // TODO: use mWallpaperManager.clear(whichWallpaper) without needing reflection. + Method clear = WallpaperManager.class.getMethod("clear", int.class); + clear.invoke(wallpaperManager, whichWallpaper); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + // Fall back to previous implementation (clear system) + wallpaperManager.clear(); + } + } +} \ No newline at end of file diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java index 75bdb8a618..364cdb88de 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java @@ -21,6 +21,7 @@ import android.app.ActionBar; import android.app.Activity; import android.app.WallpaperManager; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; @@ -86,6 +87,18 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb @Thunk Set mReusableBitmaps = Collections.newSetFromMap(new WeakHashMap()); + private final DialogInterface.OnCancelListener mOnDialogCancelListener = + new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + getActionBar().show(); + View wallpaperStrip = findViewById(R.id.wallpaper_strip); + if (wallpaperStrip != null) { + wallpaperStrip.setVisibility(View.VISIBLE); + } + } + }; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -242,6 +255,10 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb } } + public DialogInterface.OnCancelListener getOnDialogCancelListener() { + return mOnDialogCancelListener; + } + protected void onLoadRequestComplete(LoadRequest req, boolean success) { mCurrentLoadRequest = null; if (success) { @@ -326,7 +343,7 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb }; cropTask.setOnEndRunnable(onEndCrop); cropTask.setNoCrop(true); - cropTask.execute(); + NycWallpaperUtils.executeCropTaskAfterPrompt(this, cropTask, getOnDialogCancelListener()); } protected void cropImageAndSetWallpaper(Resources res, int resId, @@ -335,8 +352,7 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb // this device int rotation = BitmapUtils.getRotationFromExif(res, resId); Point inSize = mCropView.getSourceDimensions(); - Point outSize = WallpaperUtils.getDefaultWallpaperSize(getResources(), - getWindowManager()); + Point outSize = WallpaperUtils.getDefaultWallpaperSize(getResources(), getWindowManager()); RectF crop = Utils.getMaxCropRect( inSize.x, inSize.y, outSize.x, outSize.y, false); BitmapCropTask.OnEndCropHandler onEndCrop = new BitmapCropTask.OnEndCropHandler() { @@ -355,7 +371,7 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb }; BitmapCropTask cropTask = new BitmapCropTask(getContext(), res, resId, crop, rotation, outSize.x, outSize.y, true, false, onEndCrop); - cropTask.execute(); + NycWallpaperUtils.executeCropTaskAfterPrompt(this, cropTask, getOnDialogCancelListener()); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index 4998bf4b73..46e4716587 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -849,7 +849,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { (int) rotatedBounds[0], (int) rotatedBounds[1], width, height, leftAligned); cropTask.setCropBounds(cropRect); - if (cropTask.cropBitmap()) { + if (cropTask.cropBitmap(NycWallpaperUtils.FLAG_SET_SYSTEM)) { return cropTask.getCroppedBitmap(); } else { return null; From b2694f5482e0deb362fa5ad309c0c2ca517ba1d9 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Mon, 11 Apr 2016 11:59:56 -0700 Subject: [PATCH 209/219] Disable "Set wallpaper" action bar when no tile is selected. Change-Id: Ia21dfb8248fc607e3f5606f2cac18345cff6f260 --- .../res/layout/actionbar_set_wallpaper.xml | 3 ++- .../android/launcher3/WallpaperPickerActivity.java | 14 +++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/WallpaperPicker/res/layout/actionbar_set_wallpaper.xml b/WallpaperPicker/res/layout/actionbar_set_wallpaper.xml index 8e349b7324..2b39b09527 100644 --- a/WallpaperPicker/res/layout/actionbar_set_wallpaper.xml +++ b/WallpaperPicker/res/layout/actionbar_set_wallpaper.xml @@ -28,5 +28,6 @@ android:drawableLeft="@drawable/ic_actionbar_accept" android:drawablePadding="8dp" android:gravity="start|center_vertical" - android:text="@string/wallpaper_instructions"> + android:text="@string/wallpaper_instructions" + android:enabled="false"> diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index 46e4716587..acc6dd9b8f 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -83,7 +83,7 @@ import java.io.IOException; import java.util.ArrayList; public class WallpaperPickerActivity extends WallpaperCropActivity { - static final String TAG = "Launcher.WallpaperPickerActivity"; + static final String TAG = "WallpaperPickerActivity"; public static final int IMAGE_PICK = 5; public static final int PICK_WALLPAPER_THIRD_PARTY_ACTIVITY = 6; @@ -322,7 +322,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { WallpaperManager.getInstance(a.getContext()).clear(); a.setResult(Activity.RESULT_OK); } catch (IOException e) { - Log.w("Setting wallpaper to default threw exception", e); + Log.w(TAG, "Setting wallpaper to default threw exception", e); } a.finish(); } @@ -442,10 +442,10 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } return; } - setWallpaperButtonEnabled(true); WallpaperTileInfo info = (WallpaperTileInfo) v.getTag(); if (info.isSelectable() && v.getVisibility() == View.VISIBLE) { selectTile(v); + setWallpaperButtonEnabled(true); } info.onClick(WallpaperPickerActivity.this); } @@ -561,7 +561,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { new View.OnClickListener() { @Override public void onClick(View v) { - // Ensure that a tile is slelected and loaded. + // Ensure that a tile is selected and loaded. if (mSelectedTile != null && mCropView.getTileSource() != null) { // Prevent user from selecting any new tile. mWallpaperStrip.setVisibility(View.GONE); @@ -570,9 +570,9 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { WallpaperTileInfo info = (WallpaperTileInfo) mSelectedTile.getTag(); info.onSave(WallpaperPickerActivity.this); } else { - // no tile was selected, so we just finish the activity and go back - setResult(Activity.RESULT_OK); - finish(); + // This case shouldn't be possible, since "Set wallpaper" is disabled + // until user clicks on a title. + Log.w(TAG, "\"Set wallpaper\" was clicked when no tile was selected"); } } }); From d435cc070ad72d2e94546d274e29159ee4c21a9a Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 11 Apr 2016 13:01:32 -0700 Subject: [PATCH 210/219] [DO NOT MERGE] Changing WallpaperChangeReceiver to a runtime registered broadcast receiver Bug: 28115607 Change-Id: I208d629a346781d9b1fbeb0a245685bf36f85aeb --- AndroidManifest.xml | 7 ------- src/com/android/launcher3/LauncherAppState.java | 3 +++ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 990bde0b17..918ae52aaa 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -127,13 +127,6 @@ android:process=":settings_process"> - - - - - - Date: Mon, 11 Apr 2016 13:01:32 -0700 Subject: [PATCH 211/219] [DO NOT MERGE] Changing WallpaperChangeReceiver to a runtime registered broadcast receiver Bug: 28115607 Change-Id: I208d629a346781d9b1fbeb0a245685bf36f85aeb (cherry picked from commit d435cc070ad72d2e94546d274e29159ee4c21a9a) --- AndroidManifest.xml | 7 ------- src/com/android/launcher3/LauncherAppState.java | 3 +++ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 990bde0b17..918ae52aaa 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -127,13 +127,6 @@ android:process=":settings_process"> - - - - - - Date: Mon, 11 Apr 2016 15:14:39 -0700 Subject: [PATCH 212/219] Add dialog to set Default Wallpaper on lock screen for N+. Change-Id: I91c77f5751202f9a4b3a922726ab55e354c50b4a --- .../gallery3d/common/BitmapCropTask.java | 9 --- .../launcher3/WallpaperPickerActivity.java | 77 +++++++++++++++++-- 2 files changed, 70 insertions(+), 16 deletions(-) diff --git a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java index 2d10b7265a..027e94708e 100644 --- a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java +++ b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java @@ -73,15 +73,6 @@ public class BitmapCropTask extends AsyncTask { BitmapCropTask.OnBitmapCroppedHandler mOnBitmapCroppedHandler; boolean mNoCrop; - public BitmapCropTask(Context c, String filePath, - RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, OnEndCropHandler onEndCropHandler) { - mContext = c; - mInFilePath = filePath; - init(cropBounds, rotation, - outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndCropHandler); - } - public BitmapCropTask(byte[] imageBytes, RectF cropBounds, int rotation, int outWidth, int outHeight, boolean setWallpaper, boolean saveCroppedBitmap, OnEndCropHandler onEndCropHandler) { diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index acc6dd9b8f..5c6113f95a 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -44,6 +44,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Process; import android.provider.MediaStore; +import android.support.annotation.NonNull; import android.util.Log; import android.util.Pair; import android.view.ActionMode; @@ -77,6 +78,8 @@ import com.android.launcher3.util.Thunk; import com.android.photos.BitmapRegionTileSource; import com.android.photos.BitmapRegionTileSource.BitmapSource; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -317,15 +320,75 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { a.onLoadRequestComplete(req, true); } @Override - public void onSave(WallpaperPickerActivity a) { - try { - WallpaperManager.getInstance(a.getContext()).clear(); - a.setResult(Activity.RESULT_OK); - } catch (IOException e) { - Log.w(TAG, "Setting wallpaper to default threw exception", e); + public void onSave(final WallpaperPickerActivity a) { + if (!Utilities.isNycOrAbove()) { + try { + WallpaperManager.getInstance(a.getContext()).clear(); + a.setResult(Activity.RESULT_OK); + } catch (IOException e) { + Log.e(TAG, "Setting wallpaper to default threw exception", e); + } catch (SecurityException e) { + Log.w(TAG, "Setting wallpaper to default threw exception", e); + // In this case, clearing worked; the exception was thrown afterwards. + a.setResult(Activity.RESULT_OK); + } + a.finish(); + } else { + BitmapCropTask.OnEndCropHandler onEndCropHandler + = new BitmapCropTask.OnEndCropHandler() { + @Override + public void run(boolean cropSucceeded) { + if (cropSucceeded) { + a.setResult(Activity.RESULT_OK); + } + a.finish(); + } + }; + BitmapCropTask setWallpaperTask = getDefaultWallpaperCropTask(a, onEndCropHandler); + + NycWallpaperUtils.executeCropTaskAfterPrompt(a, setWallpaperTask, + a.getOnDialogCancelListener()); } - a.finish(); } + + @NonNull + private BitmapCropTask getDefaultWallpaperCropTask(final WallpaperPickerActivity a, + final BitmapCropTask.OnEndCropHandler onEndCropHandler) { + return new BitmapCropTask(a, null, null, -1, -1, -1, + true, false, onEndCropHandler) { + @Override + protected Boolean doInBackground(Integer... params) { + int whichWallpaper = params[0]; + boolean succeeded = true; + try { + if (whichWallpaper == NycWallpaperUtils.FLAG_SET_LOCK) { + Bitmap defaultWallpaper = ((BitmapDrawable) WallpaperManager + .getInstance(a.getApplicationContext()).getBuiltInDrawable()) + .getBitmap(); + ByteArrayOutputStream tmpOut = new ByteArrayOutputStream(2048); + if (defaultWallpaper.compress(Bitmap.CompressFormat.PNG, 100, + tmpOut)) { + byte[] outByteArray = tmpOut.toByteArray(); + NycWallpaperUtils.setStream(a.getApplicationContext(), + new ByteArrayInputStream(outByteArray), null, true, + NycWallpaperUtils.FLAG_SET_LOCK); + } + } else { + NycWallpaperUtils.clear(a, whichWallpaper); + } + } catch (IOException e) { + Log.e(TAG, "Setting wallpaper to default threw exception", e); + succeeded = false; + } catch (SecurityException e) { + Log.w(TAG, "Setting wallpaper to default threw exception", e); + // In this case, clearing worked; the exception was thrown afterwards. + succeeded = true; + } + return succeeded; + } + }; + } + @Override public boolean isSelectable() { return true; From d61db3f9fead2d577abbfa1d75f5261a1a9bd93d Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Tue, 12 Apr 2016 12:51:36 -0700 Subject: [PATCH 213/219] Talkback: return correct row index inside AllApps b/27108673 b/26546781 Change-Id: If8ed40986efdecb2cd994d011777588a97457326 --- .../launcher3/allapps/AllAppsGridAdapter.java | 65 +++++++++++++++++-- .../allapps/AlphabeticalAppsList.java | 4 ++ 2 files changed, 62 insertions(+), 7 deletions(-) diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java index d41224a2d9..0460c91066 100644 --- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java +++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java @@ -24,12 +24,16 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PointF; import android.graphics.Rect; -import android.graphics.drawable.Drawable; +import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; +import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat; import android.support.v4.view.accessibility.AccessibilityRecordCompat; import android.support.v4.view.accessibility.AccessibilityEventCompat; import android.net.Uri; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.RecyclerView.Recycler; +import android.support.v7.widget.RecyclerView.State; +import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; @@ -40,10 +44,8 @@ import android.widget.TextView; import com.android.launcher3.AppInfo; import com.android.launcher3.BubbleTextView; import com.android.launcher3.Launcher; -import com.android.launcher3.LauncherAppState; import com.android.launcher3.R; import com.android.launcher3.Utilities; -import com.android.launcher3.util.Thunk; import java.util.HashMap; import java.util.List; @@ -103,18 +105,67 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter 0); + } + /** * Sets the sorted list of filtered components. */ From d797327b79c5ded53f698201af5abb7d779ddfa9 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Tue, 12 Apr 2016 14:17:58 -0700 Subject: [PATCH 214/219] [DO NOT MERGE] Address some spacing issues in all apps related to new support library issue 27581978 Change-Id: If7a1ea19aa586bb3de6bde960b16e59f86061227 --- res/layout/all_apps_empty_search.xml | 2 +- res/layout/all_apps_icon.xml | 2 +- res/layout/all_apps_prediction_bar_icon.xml | 2 +- res/layout/all_apps_search_market.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/res/layout/all_apps_empty_search.xml b/res/layout/all_apps_empty_search.xml index 5439111a2a..e1635d638f 100644 --- a/res/layout/all_apps_empty_search.xml +++ b/res/layout/all_apps_empty_search.xml @@ -16,7 +16,7 @@ Date: Tue, 12 Apr 2016 16:09:52 -0700 Subject: [PATCH 215/219] Giving proper workspace description when the launcher is not loaded. Bug: 27326504 Change-Id: Ifc30221f756d75064a4baf5f3bfc71b8f590b4b1 Conflicts: src/com/android/launcher3/Workspace.java --- src/com/android/launcher3/Workspace.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 86c25b7029..bf33ccf79f 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -4476,7 +4476,11 @@ public class Workspace extends PagedView } nScreens--; } - return String.format(getContext().getString(R.string.workspace_scroll_format), + if (nScreens == 0) { + // When the workspace is not loaded, we do not know how many screen will be bound. + return getContext().getString(R.string.all_apps_home_button_label); + } + return getContext().getString(R.string.workspace_scroll_format, page + 1 - delta, nScreens); } From 9c6f32c2aa800e4ba6d5a0398a59d890a3b46faf Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Tue, 12 Apr 2016 14:17:58 -0700 Subject: [PATCH 216/219] [DO NOT MERGE] Address some spacing issues in all apps related to new support library issue 27581978 Change-Id: If7a1ea19aa586bb3de6bde960b16e59f86061227 (cherry picked from commit d797327b79c5ded53f698201af5abb7d779ddfa9) --- res/layout/all_apps_empty_search.xml | 2 +- res/layout/all_apps_icon.xml | 2 +- res/layout/all_apps_prediction_bar_icon.xml | 2 +- res/layout/all_apps_search_market.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/res/layout/all_apps_empty_search.xml b/res/layout/all_apps_empty_search.xml index 5439111a2a..e1635d638f 100644 --- a/res/layout/all_apps_empty_search.xml +++ b/res/layout/all_apps_empty_search.xml @@ -16,7 +16,7 @@ Date: Tue, 5 Apr 2016 16:38:39 -0700 Subject: [PATCH 217/219] Fixing wrong grid size definitions Bug: 27958565 Change-Id: Icabc651552bbf6483fedbaeb52745c48d418f9ea (cherry picked from commit 1ab22630a0c1e16873eb49d0021e0f3dbec4b0ba) --- .../android/launcher3/model/GridSizeMigrationTask.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/model/GridSizeMigrationTask.java b/src/com/android/launcher3/model/GridSizeMigrationTask.java index 9cab25a5ef..8117122055 100644 --- a/src/com/android/launcher3/model/GridSizeMigrationTask.java +++ b/src/com/android/launcher3/model/GridSizeMigrationTask.java @@ -954,13 +954,15 @@ public class GridSizeMigrationTask { // The following list defines all possible grid sizes (and intermediate steps // during migration). Note that at each step, dx <= 1 && dy <= 1. Any grid size // which is not in this list is not migrated. + // Note that the InvariantDeviceProfile defines (rows, cols) but the Points + // specified here are defined as (cols, rows). ArrayList gridSizeSteps = new ArrayList<>(); - gridSizeSteps.add(new Point(2, 3)); + gridSizeSteps.add(new Point(3, 2)); gridSizeSteps.add(new Point(3, 3)); - gridSizeSteps.add(new Point(3, 4)); + gridSizeSteps.add(new Point(4, 3)); gridSizeSteps.add(new Point(4, 4)); gridSizeSteps.add(new Point(5, 5)); - gridSizeSteps.add(new Point(5, 6)); + gridSizeSteps.add(new Point(6, 5)); gridSizeSteps.add(new Point(6, 6)); gridSizeSteps.add(new Point(7, 7)); From 0a197dbbf6987233942060fe4e3f25a4529b7da4 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 13 Apr 2016 15:04:30 -0700 Subject: [PATCH 218/219] Prompt to set URI wallpapers on lock screen (missed before). Change-Id: I5328a9861ce2843aba36ecad172eb0e364a816a0 --- .../src/com/android/launcher3/WallpaperCropActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java index 364cdb88de..2f21145637 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java @@ -473,7 +473,7 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb if (onBitmapCroppedHandler != null) { cropTask.setOnBitmapCropped(onBitmapCroppedHandler); } - cropTask.execute(); + NycWallpaperUtils.executeCropTaskAfterPrompt(this, cropTask, getOnDialogCancelListener()); } protected void updateWallpaperDimensions(int width, int height) { From fceb9ff0f5855432763d5dc15eeff8e7ce4df0c0 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 15 Apr 2016 17:45:39 -0700 Subject: [PATCH 219/219] Passing the full image and crop hint when setting the wallpaper Bug: 25454157 Change-Id: Ia0ae7dd4963b72cd7902622847deedfcb5a0eca2 --- .../gallery3d/common/BitmapCropTask.java | 67 ++++++---- .../src/com/android/launcher3/CropView.java | 25 ++-- .../launcher3/SavedWallpaperImages.java | 121 ++++++++++++++---- .../launcher3/WallpaperCropActivity.java | 39 ++++-- .../launcher3/WallpaperPickerActivity.java | 70 +++++++--- 5 files changed, 233 insertions(+), 89 deletions(-) diff --git a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java index 027e94708e..153fa90587 100644 --- a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java +++ b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java @@ -47,7 +47,7 @@ import java.io.InputStream; public class BitmapCropTask extends AsyncTask { public interface OnBitmapCroppedHandler { - public void onBitmapCropped(byte[] imageBytes); + public void onBitmapCropped(byte[] imageBytes, Rect cropHint); } public interface OnEndCropHandler { @@ -171,29 +171,42 @@ public class BitmapCropTask extends AsyncTask { public boolean cropBitmap(int whichWallpaper) { boolean failure = false; - - WallpaperManager wallpaperManager = null; - if (mSetWallpaper) { - wallpaperManager = WallpaperManager.getInstance(mContext.getApplicationContext()); - } - - if (mSetWallpaper && mNoCrop) { try { InputStream is = regenerateInputStream(); - if (is != null) { - if (!Utilities.isNycOrAbove()) { - wallpaperManager.setStream(is); - } else { - NycWallpaperUtils.setStream(mContext, is, null, true, whichWallpaper); - } - Utils.closeSilently(is); - } + setWallpaper(is, null, whichWallpaper); + Utils.closeSilently(is); } catch (IOException e) { Log.w(LOGTAG, "cannot write stream to wallpaper", e); failure = true; } return !failure; + } else if (mSetWallpaper && Utilities.isNycOrAbove() + && mRotation == 0 && mOutWidth > 0 && mOutHeight > 0) { + Rect hint = new Rect(); + mCropBounds.roundOut(hint); + + InputStream is = null; + try { + is = regenerateInputStream(); + if (is == null) { + Log.w(LOGTAG, "cannot get input stream for uri=" + mInUri.toString()); + failure = true; + return false; + } + WallpaperManager.getInstance(mContext).suggestDesiredDimensions(mOutWidth, mOutHeight); + setWallpaper(is, hint, whichWallpaper); + + if (mOnBitmapCroppedHandler != null) { + mOnBitmapCroppedHandler.onBitmapCropped(null, hint); + } + + failure = false; + } catch (IOException e) { + Log.w(LOGTAG, "cannot open region decoder for file: " + mInUri.toString(), e); + } finally { + Utils.closeSilently(is); + } } else { // Find crop bounds (scaled to original image size) Rect roundedTrueCrop = new Rect(); @@ -222,7 +235,6 @@ public class BitmapCropTask extends AsyncTask { mCropBounds.offset(-rotatedBounds[0]/2, -rotatedBounds[1]/2); inverseRotateMatrix.mapRect(mCropBounds); mCropBounds.offset(bounds.x/2, bounds.y/2); - } mCropBounds.roundOut(roundedTrueCrop); @@ -369,18 +381,13 @@ public class BitmapCropTask extends AsyncTask { ByteArrayOutputStream tmpOut = new ByteArrayOutputStream(2048); if (crop.compress(CompressFormat.JPEG, DEFAULT_COMPRESS_QUALITY, tmpOut)) { // If we need to set to the wallpaper, set it - if (mSetWallpaper && wallpaperManager != null) { + if (mSetWallpaper) { try { byte[] outByteArray = tmpOut.toByteArray(); - if (!Utilities.isNycOrAbove()) { - wallpaperManager.setStream(new ByteArrayInputStream(outByteArray)); - } else { - NycWallpaperUtils.setStream(mContext, - new ByteArrayInputStream(outByteArray), null, true, - whichWallpaper); - } + setWallpaper(new ByteArrayInputStream(outByteArray), null, whichWallpaper); if (mOnBitmapCroppedHandler != null) { - mOnBitmapCroppedHandler.onBitmapCropped(outByteArray); + mOnBitmapCroppedHandler.onBitmapCropped(outByteArray, + new Rect(0, 0, crop.getWidth(), crop.getHeight())); } } catch (IOException e) { Log.w(LOGTAG, "cannot write stream to wallpaper", e); @@ -409,4 +416,12 @@ public class BitmapCropTask extends AsyncTask { mOnEndCropHandler.run(cropSucceeded); } } + + private void setWallpaper(InputStream in, Rect crop, int whichWallpaper) throws IOException { + if (!Utilities.isNycOrAbove()) { + WallpaperManager.getInstance(mContext.getApplicationContext()).setStream(in); + } else { + NycWallpaperUtils.setStream(mContext, in, crop, true, whichWallpaper); + } + } } \ No newline at end of file diff --git a/WallpaperPicker/src/com/android/launcher3/CropView.java b/WallpaperPicker/src/com/android/launcher3/CropView.java index e98e23e981..c1578c150a 100644 --- a/WallpaperPicker/src/com/android/launcher3/CropView.java +++ b/WallpaperPicker/src/com/android/launcher3/CropView.java @@ -19,6 +19,7 @@ package com.android.launcher3; import android.content.Context; import android.graphics.Matrix; import android.graphics.Point; +import android.graphics.PointF; import android.graphics.RectF; import android.util.AttributeSet; import android.view.MotionEvent; @@ -148,12 +149,19 @@ public class CropView extends TiledImageView implements OnScaleGestureListener updateMinScale(w, h, mRenderer.source, false); } - public void setScale(float scale) { + public void setScaleAndCenter(float scale, float x, float y) { synchronized (mLock) { mRenderer.scale = scale; + mCenterX = x; + mCenterY = y; + updateCenter(); } } + public float getScale() { + return mRenderer.scale; + } + private void updateMinScale(int w, int h, TileSource source, boolean resetScale) { synchronized (mLock) { if (resetScale) { @@ -189,17 +197,6 @@ public class CropView extends TiledImageView implements OnScaleGestureListener public void onScaleEnd(ScaleGestureDetector detector) { } - /** - * Offsets wallpaper preview according to the state it will be displayed in upon returning home. - * @param offset Ranges from 0 to 1, where 0 is the leftmost parallax and 1 is the rightmost. - */ - public void setParallaxOffset(float offset, RectF crop) { - offset = Math.max(0, Math.min(offset, 1)); // Make sure the offset is in the correct range. - float screenWidth = getWidth() / mRenderer.scale; - mCenterX = screenWidth / 2 + offset * (crop.width() - screenWidth) + crop.left; - updateCenter(); - } - public void moveToLeft() { if (getWidth() == 0 || getHeight() == 0) { final ViewTreeObserver observer = getViewTreeObserver(); @@ -222,6 +219,10 @@ public class CropView extends TiledImageView implements OnScaleGestureListener mRenderer.centerY = Math.round(mCenterY); } + public PointF getCenter() { + return new PointF(mCenterX, mCenterY); + } + public void setTouchEnabled(boolean enabled) { mTouchEnabled = enabled; } diff --git a/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java b/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java index 64b0ac4662..34226f7ae2 100644 --- a/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java +++ b/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java @@ -25,6 +25,8 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.text.TextUtils; import android.util.Log; import android.util.Pair; import android.view.LayoutInflater; @@ -33,9 +35,14 @@ import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListAdapter; +import com.android.launcher3.WallpaperCropActivity.CropViewScaleAndOffsetProvider; +import com.android.photos.views.TiledImageRenderer.TileSource; + +import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; @@ -48,15 +55,42 @@ public class SavedWallpaperImages extends BaseAdapter implements ListAdapter { public static class SavedWallpaperTile extends WallpaperPickerActivity.FileWallpaperInfo { private int mDbId; - public SavedWallpaperTile(int dbId, File target, Drawable thumb) { + + // three floats representing scale, centerX and centerY of the crop view in order. + private Float[] mExtras; + public SavedWallpaperTile(int dbId, File target, Drawable thumb, Float[] extras) { super(target, thumb); mDbId = dbId; + mExtras = extras != null && extras.length == 3 ? extras : null; } @Override public void onDelete(WallpaperPickerActivity a) { a.getSavedImages().deleteImage(mDbId); } + + @Override + protected CropViewScaleAndOffsetProvider getCropViewScaleAndOffsetProvider() { + if (mExtras != null) { + return new CropViewScaleAndOffsetProvider() { + @Override + public void updateCropView(WallpaperCropActivity a, TileSource src) { + a.mCropView.setScaleAndCenter(mExtras[0], mExtras[1], mExtras[2]); + } + }; + } + return null; + } + + @Override + public void onSave(final WallpaperPickerActivity a) { + if (mExtras == null) { + super.onSave(a); + } else { + boolean shouldFadeOutOnFinish = a.getWallpaperParallaxOffset() == 0f; + a.cropImageAndSetWallpaper(Uri.fromFile(mFile), null, true, shouldFadeOutOnFinish); + } + } } public SavedWallpaperImages(Context context) { @@ -74,7 +108,8 @@ public class SavedWallpaperImages extends BaseAdapter implements ListAdapter { Cursor result = db.query(ImageDb.TABLE_NAME, new String[] { ImageDb.COLUMN_ID, ImageDb.COLUMN_IMAGE_THUMBNAIL_FILENAME, - ImageDb.COLUMN_IMAGE_FILENAME}, // cols to return + ImageDb.COLUMN_IMAGE_FILENAME, + ImageDb.COLUMN_EXTRAS}, // cols to return null, // select query null, // args to select query null, @@ -88,9 +123,25 @@ public class SavedWallpaperImages extends BaseAdapter implements ListAdapter { Bitmap thumb = BitmapFactory.decodeFile(file.getAbsolutePath()); if (thumb != null) { + + Float[] extras = null; + String extraStr = result.getString(3); + if (extraStr != null) { + String[] parts = extraStr.split(","); + extras = new Float[parts.length]; + for (int i = 0; i < parts.length; i++) { + try { + extras[i] = Float.parseFloat(parts[i]); + } catch (Exception e) { + extras = null; + break; + } + } + } + mImages.add(new SavedWallpaperTile(result.getInt(0), new File(mContext.getFilesDir(), result.getString(2)), - new BitmapDrawable(thumb))); + new BitmapDrawable(thumb), extras)); } } result.close(); @@ -155,34 +206,55 @@ public class SavedWallpaperImages extends BaseAdapter implements ListAdapter { public void writeImage(Bitmap thumbnail, byte[] imageBytes) { try { - File imageFile = File.createTempFile("wallpaper", "", mContext.getFilesDir()); - FileOutputStream imageFileStream = - mContext.openFileOutput(imageFile.getName(), Context.MODE_PRIVATE); - imageFileStream.write(imageBytes); - imageFileStream.close(); - - File thumbFile = File.createTempFile("wallpaperthumb", "", mContext.getFilesDir()); - FileOutputStream thumbFileStream = - mContext.openFileOutput(thumbFile.getName(), Context.MODE_PRIVATE); - thumbnail.compress(Bitmap.CompressFormat.JPEG, 95, thumbFileStream); - thumbFileStream.close(); - - SQLiteDatabase db = mDb.getWritableDatabase(); - ContentValues values = new ContentValues(); - values.put(ImageDb.COLUMN_IMAGE_THUMBNAIL_FILENAME, thumbFile.getName()); - values.put(ImageDb.COLUMN_IMAGE_FILENAME, imageFile.getName()); - db.insert(ImageDb.TABLE_NAME, null, values); + writeImage(thumbnail, new ByteArrayInputStream(imageBytes), null); } catch (IOException e) { Log.e(TAG, "Failed writing images to storage " + e); } } + public void writeImage(Bitmap thumbnail, Uri uri, Float[] extras) { + try { + writeImage(thumbnail, mContext.getContentResolver().openInputStream(uri), extras); + } catch (IOException e) { + Log.e(TAG, "Failed writing images to storage " + e); + } + } + + private void writeImage(Bitmap thumbnail, InputStream in, Float[] extras) throws IOException { + File imageFile = File.createTempFile("wallpaper", "", mContext.getFilesDir()); + FileOutputStream imageFileStream = + mContext.openFileOutput(imageFile.getName(), Context.MODE_PRIVATE); + byte[] buf = new byte[4096]; // 4k + int len; + while ((len = in.read(buf)) > 0) { + imageFileStream.write(buf, 0, len); + } + imageFileStream.close(); + in.close(); + + File thumbFile = File.createTempFile("wallpaperthumb", "", mContext.getFilesDir()); + FileOutputStream thumbFileStream = + mContext.openFileOutput(thumbFile.getName(), Context.MODE_PRIVATE); + thumbnail.compress(Bitmap.CompressFormat.JPEG, 95, thumbFileStream); + thumbFileStream.close(); + + SQLiteDatabase db = mDb.getWritableDatabase(); + ContentValues values = new ContentValues(); + values.put(ImageDb.COLUMN_IMAGE_THUMBNAIL_FILENAME, thumbFile.getName()); + values.put(ImageDb.COLUMN_IMAGE_FILENAME, imageFile.getName()); + if (extras != null) { + values.put(ImageDb.COLUMN_EXTRAS, TextUtils.join(",", extras)); + } + db.insert(ImageDb.TABLE_NAME, null, values); + } + static class ImageDb extends SQLiteOpenHelper { - final static int DB_VERSION = 1; + final static int DB_VERSION = 2; final static String TABLE_NAME = "saved_wallpaper_images"; final static String COLUMN_ID = "id"; final static String COLUMN_IMAGE_THUMBNAIL_FILENAME = "image_thumbnail"; final static String COLUMN_IMAGE_FILENAME = "image"; + final static String COLUMN_EXTRAS = "extras"; Context mContext; @@ -209,15 +281,20 @@ public class SavedWallpaperImages extends BaseAdapter implements ListAdapter { COLUMN_ID + " INTEGER NOT NULL, " + COLUMN_IMAGE_THUMBNAIL_FILENAME + " TEXT NOT NULL, " + COLUMN_IMAGE_FILENAME + " TEXT NOT NULL, " + + COLUMN_EXTRAS + " TEXT, " + "PRIMARY KEY (" + COLUMN_ID + " ASC) " + ");"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - if (oldVersion != newVersion) { + if (oldVersion == 1) { + // Add extras column + db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + COLUMN_EXTRAS + " TEXT;"); + } else if (oldVersion != newVersion) { // Delete all the records; they'll be repopulated as this is a cache db.execSQL("DELETE FROM " + TABLE_NAME); + onCreate(db); } } } diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java index 2f21145637..f6c53ec374 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java @@ -29,6 +29,7 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Matrix; import android.graphics.Point; +import android.graphics.PointF; import android.graphics.RectF; import android.net.Uri; import android.os.Build; @@ -269,13 +270,7 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb mCropView.moveToLeft(); } if (req.scaleAndOffsetProvider != null) { - TileSource src = req.result; - Point wallpaperSize = WallpaperUtils.getDefaultWallpaperSize( - getResources(), getWindowManager()); - RectF crop = Utils.getMaxCropRect(src.getImageWidth(), src.getImageHeight(), - wallpaperSize.x, wallpaperSize.y, false /* leftAligned */); - mCropView.setScale(req.scaleAndOffsetProvider.getScale(wallpaperSize, crop)); - mCropView.setParallaxOffset(req.scaleAndOffsetProvider.getParallaxOffset(), crop); + req.scaleAndOffsetProvider.updateCropView(this, req.result); } // Free last image @@ -502,8 +497,32 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb TileSource result; } - interface CropViewScaleAndOffsetProvider { - float getScale(Point wallpaperSize, RectF crop); - float getParallaxOffset(); + public static class CropViewScaleAndOffsetProvider { + public float getScale(Point wallpaperSize, RectF crop) { + return 1f; + } + + public float getParallaxOffset() { + return 0.5f; + } + + public void updateCropView(WallpaperCropActivity a, TileSource src) { + Point wallpaperSize = WallpaperUtils.getDefaultWallpaperSize( + a.getResources(), a.getWindowManager()); + RectF crop = Utils.getMaxCropRect(src.getImageWidth(), src.getImageHeight(), + wallpaperSize.x, wallpaperSize.y, false /* leftAligned */); + + float scale = getScale(wallpaperSize, crop); + PointF center = a.mCropView.getCenter(); + + // Offsets wallpaper preview according to the state it will be displayed in upon + // returning home. Offset ranges from 0 to 1, where 0 is the leftmost parallax and + // 1 is the rightmost. + // Make sure the offset is in the correct range. + float offset = Math.max(0, Math.min(getParallaxOffset(), 1)); + float screenWidth = a.mCropView.getWidth() / scale; + center.x = screenWidth / 2 + offset * (crop.width() - screenWidth) + crop.left; + a.mCropView.setScaleAndCenter(scale, center.x, center.y); + } } } diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index 5c6113f95a..40f0544a2d 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -31,10 +31,13 @@ import android.database.Cursor; import android.database.DataSetObserver; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.BitmapRegionDecoder; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Point; +import android.graphics.PointF; import android.graphics.PorterDuff; +import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; @@ -83,6 +86,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; public class WallpaperPickerActivity extends WallpaperCropActivity { @@ -174,12 +178,45 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { public void onSave(final WallpaperPickerActivity a) { boolean finishActivityWhenDone = true; BitmapCropTask.OnBitmapCroppedHandler h = new BitmapCropTask.OnBitmapCroppedHandler() { - public void onBitmapCropped(byte[] imageBytes) { + @Override + public void onBitmapCropped(byte[] imageBytes, Rect hint) { + Bitmap thumb = null; Point thumbSize = getDefaultThumbnailSize(a.getResources()); - // rotation is set to 0 since imageBytes has already been correctly rotated - Bitmap thumb = createThumbnail( - thumbSize, null, null, imageBytes, null, 0, 0, true); - a.getSavedImages().writeImage(thumb, imageBytes); + if (imageBytes != null) { + // rotation is set to 0 since imageBytes has already been correctly rotated + thumb = createThumbnail( + thumbSize, null, null, imageBytes, null, 0, 0, true); + a.getSavedImages().writeImage(thumb, imageBytes); + } else { + try { + // Generate thumb + Point size = getDefaultThumbnailSize(a.getResources()); + Rect finalCropped = new Rect(); + Utils.getMaxCropRect(hint.width(), hint.height(), size.x, size.y, false) + .roundOut(finalCropped); + finalCropped.offset(hint.left, hint.top); + + InputStream in = a.getContentResolver().openInputStream(mUri); + BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(in, true); + + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inSampleSize = finalCropped.width() / size.x; + thumb = decoder.decodeRegion(finalCropped, options); + decoder.recycle(); + Utils.closeSilently(in); + if (thumb != null) { + thumb = Bitmap.createScaledBitmap(thumb, size.x, size.y, true); + } + } catch (IOException e) { } + PointF center = a.mCropView.getCenter(); + + Float[] extras = new Float[] { + a.mCropView.getScale(), + center.x, + center.y + }; + a.getSavedImages().writeImage(thumb, mUri, extras); + } } }; boolean shouldFadeOutOnFinish = a.getWallpaperParallaxOffset() == 0f; @@ -196,7 +233,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } public static class FileWallpaperInfo extends WallpaperTileInfo { - private File mFile; + protected File mFile; public FileWallpaperInfo(File target, Drawable thumb) { mFile = target; @@ -207,7 +244,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { a.setWallpaperButtonEnabled(false); final BitmapRegionTileSource.UriBitmapSource bitmapSource = new BitmapRegionTileSource.UriBitmapSource(a.getContext(), Uri.fromFile(mFile)); - a.setCropViewTileSource(bitmapSource, false, true, null, new Runnable() { + a.setCropViewTileSource(bitmapSource, false, true, getCropViewScaleAndOffsetProvider(), + new Runnable() { @Override public void run() { @@ -217,6 +255,11 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } }); } + + protected CropViewScaleAndOffsetProvider getCropViewScaleAndOffsetProvider() { + return null; + } + @Override public void onSave(WallpaperPickerActivity a) { boolean shouldFadeOutOnFinish = a.getWallpaperParallaxOffset() == 0f; @@ -303,18 +346,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { LoadRequest req = new LoadRequest(); req.moveToLeft = false; req.touchEnabled = false; - req.scaleAndOffsetProvider = new CropViewScaleAndOffsetProvider() { - - @Override - public float getScale(Point wallpaperSize, RectF crop) { - return 1f; - } - - @Override - public float getParallaxOffset() { - return 0.5f; - } - }; + req.scaleAndOffsetProvider = new CropViewScaleAndOffsetProvider(); req.result = new DrawableTileSource(a.getContext(), defaultWallpaper, DrawableTileSource.MAX_PREVIEW_SIZE); a.onLoadRequestComplete(req, true);