From 677978c8aba8f577b39485b40e33902b2015429f Mon Sep 17 00:00:00 2001 From: Stefan Andonian Date: Thu, 11 Aug 2022 20:36:41 +0000 Subject: [PATCH 1/7] Fix for bug where expensive launcher animations were being paused and never resumed. Bug: 240623130 Test: Verified on device that the issue is not reproducible after fix. Change-Id: I7b1e2f70fd75b1eddf340a4f85465cc6d5b65f73 (cherry picked from commit 8b336195a6f287f03d17db02d961c1f2d85c4eda) --- .../src/com/android/launcher3/QuickstepTransitionManager.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index e1a3b729c1..9aeb3709ac 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -518,6 +518,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener appsView.setAlpha(startAlpha); SCALE_PROPERTY.set(appsView, startScale); appsView.setLayerType(View.LAYER_TYPE_NONE, null); + mLauncher.resumeExpensiveViewUpdates(); }; } else if (mLauncher.isInState(OVERVIEW)) { endListener = composeViewContentAnimator(launcherAnimator, alphas, scales); @@ -647,6 +648,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener overview.setFreezeViewVisibility(false); SCALE_PROPERTY.set(overview, 1f); mLauncher.getStateManager().reapplyState(); + mLauncher.resumeExpensiveViewUpdates(); }; } From 8f5b9dd8334f8156aacd31a4e90841a84158d252 Mon Sep 17 00:00:00 2001 From: Ats Jenk Date: Fri, 2 Dec 2022 11:42:17 -0800 Subject: [PATCH 2/7] Check for both proto flags for common logic Desktop mode has prototype 1 and prototype 2. Check for both flags when logic is shared. Bug: 260645044 Test: manual, check desktop mode 1 works Change-Id: I40e84440222a9d5f007c2450606cd7c8f9628da2 --- .../statehandlers/DesktopVisibilityController.java | 3 ++- .../src/com/android/quickstep/TaskShortcutFactory.java | 3 ++- .../src/com/android/quickstep/views/DesktopTaskView.java | 7 ++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java b/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java index 0c8952d705..a205d19f3c 100644 --- a/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java +++ b/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java @@ -42,7 +42,8 @@ public class DesktopVisibilityController { * Whether desktop mode is supported. */ private boolean isDesktopModeSupported() { - return SystemProperties.getBoolean("persist.wm.debug.desktop_mode", false); + return SystemProperties.getBoolean("persist.wm.debug.desktop_mode", false) + || SystemProperties.getBoolean("persist.wm.debug.desktop_mode_2", false); } /** diff --git a/quickstep/src/com/android/quickstep/TaskShortcutFactory.java b/quickstep/src/com/android/quickstep/TaskShortcutFactory.java index eae79dfa19..663525d0c5 100644 --- a/quickstep/src/com/android/quickstep/TaskShortcutFactory.java +++ b/quickstep/src/com/android/quickstep/TaskShortcutFactory.java @@ -303,7 +303,8 @@ public interface TaskShortcutFactory { private boolean isAvailable(BaseDraggingActivity activity, int displayId) { return ActivityManagerWrapper.getInstance().supportsFreeformMultiWindow(activity) - && !SystemProperties.getBoolean("persist.wm.debug.desktop_mode", false); + && !SystemProperties.getBoolean("persist.wm.debug.desktop_mode", false) + && !SystemProperties.getBoolean("persist.wm.debug.desktop_mode_2", false); } }; diff --git a/quickstep/src/com/android/quickstep/views/DesktopTaskView.java b/quickstep/src/com/android/quickstep/views/DesktopTaskView.java index 8c43fd108f..308249cb1e 100644 --- a/quickstep/src/com/android/quickstep/views/DesktopTaskView.java +++ b/quickstep/src/com/android/quickstep/views/DesktopTaskView.java @@ -59,9 +59,10 @@ import java.util.function.Consumer; // TODO(b/249371338): TaskView needs to be refactored to have better support for N tasks. public class DesktopTaskView extends TaskView { - /** Flag to indicate whether desktop mode is available on the device */ - public static final boolean DESKTOP_MODE_SUPPORTED = SystemProperties.getBoolean( - "persist.wm.debug.desktop_mode", false); + /** Flags to indicate whether desktop mode is available on the device */ + public static final boolean DESKTOP_MODE_SUPPORTED = + SystemProperties.getBoolean("persist.wm.debug.desktop_mode", false) + || SystemProperties.getBoolean("persist.wm.debug.desktop_mode_2", false); private static final String TAG = DesktopTaskView.class.getSimpleName(); From 11dc7602ed347d8caa461c509104274c43147fe2 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 8 Dec 2022 02:35:44 -0800 Subject: [PATCH 3/7] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Id4a3af2702e7226014db0af9728c33353e72da09 --- quickstep/res/values-ml/strings.xml | 15 +++++---------- quickstep/res/values-ta/strings.xml | 15 +++++---------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/quickstep/res/values-ml/strings.xml b/quickstep/res/values-ml/strings.xml index 311f37d527..1eff992681 100644 --- a/quickstep/res/values-ml/strings.xml +++ b/quickstep/res/values-ml/strings.xml @@ -78,10 +78,8 @@ "എല്ലാം സജ്ജീകരിച്ചു!" "ഹോമിലേക്ക് പോകാൻ മുകളിലേക്ക് സ്വൈപ്പ് ചെയ്യുക" "നിങ്ങളുടെ ഹോം സ്ക്രീനിലേക്ക് പോകാൻ ഹോം ബട്ടൺ ടാപ്പ് ചെയ്യുക" - - - - + "നിങ്ങൾക്ക് %1$s ഉപയോഗിച്ചു തുടങ്ങാം" + "ഉപകരണം" "സിസ്‌റ്റം നാവിഗേഷൻ ക്രമീകരണം" "പങ്കിടുക" "സ്ക്രീൻഷോട്ട്" @@ -94,8 +92,7 @@ "റദ്ദാക്കുക" "ഒഴിവാക്കുക" "സ്‌ക്രീൻ റൊട്ടേറ്റ് ചെയ്യുക" - - + "ടാസ്‌ക്ബാർ മാർഗ്ഗനിർദ്ദേശ വിൻഡോ" "ടാസ്ക്ക്ബാർ വിവര പാനൽ ദൃശ്യമായി" "ടാസ്ക്ക്ബാർ വിവര പാനൽ അടച്ചു" "ആപ്പുകൾ മാറാൻ ടാസ്ക്ക്ബാർ ഉപയോഗിക്കുക" @@ -112,10 +109,8 @@ "അടുത്തിടെയുള്ളവ" "അറിയിപ്പുകൾ" "ദ്രുത ക്രമീകരണം" - - - - + "ടാസ്‌ക്ബാർ" + "നാവിഗേഷൻ ബാർ" "മുകളിലേക്കോ ഇടത്തേക്കോ നീക്കുക" "താഴേക്കോ വലത്തേക്കോ നീക്കുക" diff --git a/quickstep/res/values-ta/strings.xml b/quickstep/res/values-ta/strings.xml index cb3f69a82e..b17d415d71 100644 --- a/quickstep/res/values-ta/strings.xml +++ b/quickstep/res/values-ta/strings.xml @@ -78,10 +78,8 @@ "அனைத்தையும் அமைத்துவிட்டீர்கள்!" "முகப்புத் திரைக்குச் செல்ல மேல்நோக்கி ஸ்வைப் செய்யுங்கள்" "முகப்புத் திரைக்குச் செல்வதற்கு முகப்பு பட்டனைத் தட்டவும்" - - - - + "உங்கள் %1$s சாதனத்தைப் பயன்படுத்தத் தயாராகிவிட்டீர்கள்" + "சாதனம்" "சிஸ்டம் வழிசெலுத்தல் அமைப்புகள்" "பகிர்" "ஸ்கிரீன்ஷாட்" @@ -94,8 +92,7 @@ "ரத்துசெய்" "தவிர்" "திரையைச் சுழற்றும்" - - + "செயல் பட்டியைப் பயன்படுத்தும் விதம்" "பணிப்பட்டியை எவ்வாறு பயன்படுத்துவது என்பது பற்றிய பலகம் காட்டப்படுகிறது" "பணிப்பட்டியை எவ்வாறு பயன்படுத்துவது என்பது பற்றிய பலகம் மூடப்பட்டது" "ஆப்ஸிற்கு இடையே மாற பணிப்பட்டியைப் பயன்படுத்தவும்" @@ -112,10 +109,8 @@ "சமீபத்தியவை" "அறிவிப்புகள்" "விரைவு அமைப்புகள்" - - - - + "செயல் பட்டி" + "வழிசெலுத்தல் பட்டி" "மேலே/இடதுபுறம் நகர்த்தும்" "கீழே/வலதுபுறம் நகர்த்தும்" From 5b235359bb7814f9ffea28ed1dee1385c73b0eaa Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 8 Dec 2022 02:37:29 -0800 Subject: [PATCH 4/7] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ifabaa6394d850ae49d470c20029d29f42ee1cc87 --- res/values-iw/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 6b4d129c1c..d79c022c7c 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -40,8 +40,8 @@ "לוחצים לחיצה ארוכה על הווידג\'ט כדי להזיז אותו במסך הבית" "הוספה למסך הבית" "הווידג\'ט %1$s נוסף למסך הבית" - "{count,plural, =1{ווידג\'ט אחד}two{# ווידג\'טים}many{# ווידג\'טים}other{# ווידג\'טים}}" - "{count,plural, =1{קיצור דרך אחד}two{# קיצורי דרך}many{# קיצורי דרך}other{# קיצורי דרך}}" + "{count,plural, =1{ווידג\'ט אחד}one{# ווידג\'טים}two{# ווידג\'טים}other{# ווידג\'טים}}" + "{count,plural, =1{קיצור דרך אחד}one{# קיצורי דרך}two{# קיצורי דרך}other{# קיצורי דרך}}" "%1$s, %2$s" "ווידג\'טים" "חיפוש" @@ -89,7 +89,7 @@ "זוהי אפליקציית מערכת ולא ניתן להסיר את התקנתה." "עריכת השם" "%1$s מושבתת" - "{count,plural, =1{לאפליקציה {app_name} יש התראה אחת}two{לאפליקציה {app_name} יש # התראות}many{לאפליקציה {app_name} יש # התראות}other{לאפליקציה {app_name} יש # התראות}}" + "{count,plural, =1{לאפליקציה {app_name} יש התראה אחת}one{לאפליקציה {app_name} יש # התראות}two{לאפליקציה {app_name} יש # התראות}other{לאפליקציה {app_name} יש # התראות}}" "‏דף %1$d מתוך %2$d" "‏מסך הבית %1$d מתוך %2$d" "מסך הבית חדש" From 77de0d5a28a73d56d5aa4f1d0b99b310f3426a69 Mon Sep 17 00:00:00 2001 From: Brian Isganitis Date: Thu, 8 Dec 2022 01:11:31 +0000 Subject: [PATCH 5/7] Add EDU lottie animations for persistent and transient. This CL introduces separate lottie assets for light and dark themes, as well as each step. Each asset contains all of the steps currently but is constrained to a min and max frame. In future CLs, we will optimize the storage these take up by using the global assets and controlling min and max frames programmatically, or trimming each individual asset. Additionally, we should only be importing one theme variant and then converting to the opposite programmatically, but the color mappings are not ready yet. Future polish to the EDU sheet, such as better handling the stashed taskbar, will be introduced in future CLs. Test: Manual in transient and persistent modes. Bug: 217261955 Change-Id: I5b219ea02e25de0c5c887b5b5640f909e1219287 --- .../res/drawable/taskbar_edu_splitscreen.png | Bin 5640 -> 0 bytes .../res/drawable/taskbar_edu_stashing.png | Bin 5640 -> 0 bytes .../res/drawable/taskbar_edu_switch_apps.png | Bin 5640 -> 0 bytes quickstep/res/layout/taskbar_edu.xml | 63 +------------- .../layout/taskbar_edu_pages_persistent.xml | 58 +++++++++++++ .../layout/taskbar_edu_pages_transient.xml | 78 ++++++++++++++++++ .../taskbar_edu_splitscreen_persistent.json | 1 + .../taskbar_edu_splitscreen_transient.json | 1 + .../taskbar_edu_stashing_transient.json | 1 + .../taskbar_edu_suggestions_persistent.json | 1 + .../taskbar_edu_suggestions_transient.json | 1 + .../taskbar_edu_splitscreen_persistent.json | 1 + .../taskbar_edu_splitscreen_transient.json | 1 + .../raw/taskbar_edu_stashing_transient.json | 1 + .../taskbar_edu_suggestions_persistent.json | 1 + .../taskbar_edu_suggestions_transient.json | 1 + quickstep/res/values/strings.xml | 15 ++-- .../taskbar/TaskbarEduController.java | 35 ++++++-- .../taskbar/TaskbarEduPagedView.java | 4 +- 19 files changed, 185 insertions(+), 78 deletions(-) delete mode 100644 quickstep/res/drawable/taskbar_edu_splitscreen.png delete mode 100644 quickstep/res/drawable/taskbar_edu_stashing.png delete mode 100644 quickstep/res/drawable/taskbar_edu_switch_apps.png create mode 100644 quickstep/res/layout/taskbar_edu_pages_persistent.xml create mode 100644 quickstep/res/layout/taskbar_edu_pages_transient.xml create mode 100644 quickstep/res/raw-night/taskbar_edu_splitscreen_persistent.json create mode 100644 quickstep/res/raw-night/taskbar_edu_splitscreen_transient.json create mode 100644 quickstep/res/raw-night/taskbar_edu_stashing_transient.json create mode 100644 quickstep/res/raw-night/taskbar_edu_suggestions_persistent.json create mode 100644 quickstep/res/raw-night/taskbar_edu_suggestions_transient.json create mode 100644 quickstep/res/raw/taskbar_edu_splitscreen_persistent.json create mode 100644 quickstep/res/raw/taskbar_edu_splitscreen_transient.json create mode 100644 quickstep/res/raw/taskbar_edu_stashing_transient.json create mode 100644 quickstep/res/raw/taskbar_edu_suggestions_persistent.json create mode 100644 quickstep/res/raw/taskbar_edu_suggestions_transient.json diff --git a/quickstep/res/drawable/taskbar_edu_splitscreen.png b/quickstep/res/drawable/taskbar_edu_splitscreen.png deleted file mode 100644 index f9d2a63a0eb3862cb49f26d23ca6bef4f43cf831..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5640 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 - - - - - - - - - - - - - - - - - - - - - - + launcher:pageIndicator="@+id/content_page_indicator" />