diff --git a/go/quickstep/res/values-ro/strings.xml b/go/quickstep/res/values-ro/strings.xml
index 0be8cce..3d6f0d8 100644
--- a/go/quickstep/res/values-ro/strings.xml
+++ b/go/quickstep/res/values-ro/strings.xml
@@ -1,20 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_share_drop_target_label" msgid="5804774105974539508">"Trimiteți aplicația"</string>
-    <string name="action_listen" msgid="2370304050784689486">"Ascultați"</string>
-    <string name="action_translate" msgid="8028378961867277746">"Traduceți"</string>
+    <string name="app_share_drop_target_label" msgid="5804774105974539508">"Trimite aplicația"</string>
+    <string name="action_listen" msgid="2370304050784689486">"Ascultă"</string>
+    <string name="action_translate" msgid="8028378961867277746">"Tradu"</string>
     <string name="action_search" msgid="6269564710943755464">"Lens"</string>
     <string name="dialog_acknowledge" msgid="2804025517675853172">"OK"</string>
-    <string name="dialog_cancel" msgid="6464336969134856366">"ANULAȚI"</string>
+    <string name="dialog_cancel" msgid="6464336969134856366">"ANULEAZĂ"</string>
     <string name="dialog_settings" msgid="6564397136021186148">"SETĂRI"</string>
-    <string name="niu_actions_confirmation_title" msgid="3863451714863526143">"Traduceți sau ascultați textul de pe ecran"</string>
-    <string name="niu_actions_confirmation_text" msgid="2105271481950866089">"Informații precum textul de pe ecran, adresele web și capturile de ecran pot fi trimise la Google.\n\nCa să schimbați informațiile trimise, accesați "<b>"Setări &gt; Aplicații &gt; Aplicații prestabilite &gt; Aplicația asistent digital"</b>"."</string>
-    <string name="assistant_not_selected_title" msgid="5017072974603345228">"Alegeți un asistent pentru a folosi această funcție"</string>
-    <string name="assistant_not_selected_text" msgid="3244613673884359276">"Pentru a asculta sau a traduce text de pe ecran, alegeți o aplicație asistent digital în Setări"</string>
-    <string name="assistant_not_supported_title" msgid="1675788067597484142">"Schimbați asistentul pentru a folosi această funcție"</string>
-    <string name="assistant_not_supported_text" msgid="1708031078549268884">"Pentru a asculta sau a traduce text de pe ecran, schimbați aplicația asistent digital în Setări"</string>
-    <string name="tooltip_listen" msgid="7634466447860989102">"Atingeți aici pentru a asculta text de pe ecran"</string>
-    <string name="tooltip_translate" msgid="4184845868901542567">"Atingeți aici pentru a traduce text de pe ecran"</string>
+    <string name="niu_actions_confirmation_title" msgid="3863451714863526143">"Tradu sau ascultă textul de pe ecran"</string>
+    <string name="niu_actions_confirmation_text" msgid="2105271481950866089">"Informații precum textul de pe ecran, adresele web și capturile de ecran pot fi trimise la Google.\n\nCa să schimbi informațiile trimise, accesează "<b>"Setări &gt; Aplicații &gt; Aplicații prestabilite &gt; Aplicația asistent digital"</b>"."</string>
+    <string name="assistant_not_selected_title" msgid="5017072974603345228">"Alege un asistent pentru a folosi această funcție"</string>
+    <string name="assistant_not_selected_text" msgid="3244613673884359276">"Pentru a asculta sau a traduce text de pe ecran, alege o aplicație asistent digital în Setări"</string>
+    <string name="assistant_not_supported_title" msgid="1675788067597484142">"Schimbă asistentul pentru a folosi această funcție"</string>
+    <string name="assistant_not_supported_text" msgid="1708031078549268884">"Pentru a asculta sau a traduce text de pe ecran, schimbă aplicația asistent digital în Setări"</string>
+    <string name="tooltip_listen" msgid="7634466447860989102">"Atinge aici pentru a asculta text de pe ecran"</string>
+    <string name="tooltip_translate" msgid="4184845868901542567">"Atinge aici pentru a traduce text de pe ecran"</string>
     <string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Aplicația nu poate fi distribuită"</string>
 </resources>
diff --git a/quickstep/res/values-ro/strings.xml b/quickstep/res/values-ro/strings.xml
index fb661f2..ba4badf 100644
--- a/quickstep/res/values-ro/strings.xml
+++ b/quickstep/res/values-ro/strings.xml
@@ -19,11 +19,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="recent_task_option_pin" msgid="7929860679018978258">"Fixați"</string>
+    <string name="recent_task_option_pin" msgid="7929860679018978258">"Fixează"</string>
     <string name="recent_task_option_freeform" msgid="48863056265284071">"Formă liberă"</string>
     <string name="recents_empty_message" msgid="7040467240571714191">"Niciun element recent"</string>
     <string name="accessibility_app_usage_settings" msgid="6312864233673544149">"Setări de utilizare a aplicației"</string>
-    <string name="recents_clear_all" msgid="5328176793634888831">"Ștergeți tot"</string>
+    <string name="recents_clear_all" msgid="5328176793634888831">"Șterge tot"</string>
     <string name="accessibility_recent_apps" msgid="4058661986695117371">"Aplicații recente"</string>
     <string name="task_view_closed" msgid="9170038230110856166">"Activitatea s-a încheiat"</string>
     <string name="task_contents_description_with_remaining_time" msgid="4479688746574672685">"<xliff:g id="TASK_DESCRIPTION">%1$s</xliff:g>, <xliff:g id="REMAINING_TIME">%2$s</xliff:g>"</string>
@@ -31,75 +31,75 @@
     <string name="time_left_for_app" msgid="3111996412933644358">"Au mai rămas <xliff:g id="TIME">%1$s</xliff:g> astăzi"</string>
     <string name="title_app_suggestions" msgid="4185902664111965088">"Sugestii de aplicații"</string>
     <string name="all_apps_prediction_tip" msgid="2672336544844936186">"Aplicațiile estimate"</string>
-    <string name="hotseat_edu_title_migrate" msgid="306578144424489980">"Primiți sugestii de aplicații în rândul de jos al ecranului de pornire"</string>
-    <string name="hotseat_edu_title_migrate_landscape" msgid="3633942953997845243">"Primiți sugestii de aplicații în rândul de preferințe al ecranului de pornire"</string>
-    <string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"Accesați cu ușurință cele mai folosite aplicații direct din ecranul de pornire. Sugestiile se vor modifica în funcție de rutine. Aplicațiile din rândul de jos se vor muta în sus pe ecranul de pornire."</string>
-    <string name="hotseat_edu_message_migrate_landscape" msgid="4248943380443387697">"Accesați cu ușurință cele mai folosite aplicații direct din ecranul de pornire. Sugestiile se vor schimba în funcție de rutina dvs. Aplicațiile din rândul de preferințe se vor muta în ecranul de pornire."</string>
-    <string name="hotseat_edu_message_migrate_alt" msgid="3042360119039646356">"Accesați cu ușurință cele mai folosite aplicații, direct din ecranul de pornire. Sugestiile se vor modifica în funcție de rutine. Aplicațiile din rândul de jos se vor muta într-un dosar nou."</string>
-    <string name="hotseat_edu_accept" msgid="1611544083278999837">"Primiți sugestii de aplicații"</string>
+    <string name="hotseat_edu_title_migrate" msgid="306578144424489980">"Primește sugestii de aplicații în rândul de jos al ecranului de pornire"</string>
+    <string name="hotseat_edu_title_migrate_landscape" msgid="3633942953997845243">"Primește sugestii de aplicații în rândul de preferințe al ecranului de pornire"</string>
+    <string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"Accesează cu ușurință cele mai folosite aplicații direct din ecranul de pornire. Sugestiile se vor modifica în funcție de rutine. Aplicațiile din rândul de jos se vor muta în sus pe ecranul de pornire."</string>
+    <string name="hotseat_edu_message_migrate_landscape" msgid="4248943380443387697">"Accesează cu ușurință cele mai folosite aplicații direct din ecranul de pornire. Sugestiile se vor schimba în funcție de rutina ta. Aplicațiile din rândul de preferințe se vor muta în ecranul de pornire."</string>
+    <string name="hotseat_edu_message_migrate_alt" msgid="3042360119039646356">"Accesează cu ușurință cele mai folosite aplicații, direct din ecranul de pornire. Sugestiile se vor modifica în funcție de rutine. Aplicațiile din rândul de jos se vor muta într-un dosar nou."</string>
+    <string name="hotseat_edu_accept" msgid="1611544083278999837">"Primește sugestii de aplicații"</string>
     <string name="hotseat_edu_dismiss" msgid="2781161822780201689">"Nu, mulțumesc"</string>
     <string name="hotseat_prediction_settings" msgid="6246554993566070818">"Setări"</string>
     <string name="hotseat_auto_enrolled" msgid="522100018967146807">"Cele mai folosite aplicații apar aici și se modifică în funcție de rutine"</string>
-    <string name="hotseat_tip_no_empty_slots" msgid="1325212677738179185">"Trageți aplicații din rândul de jos pentru a primi sugestii de aplicații"</string>
+    <string name="hotseat_tip_no_empty_slots" msgid="1325212677738179185">"Trage aplicații din rândul de jos pentru a primi sugestii de aplicații"</string>
     <string name="hotseat_tip_gaps_filled" msgid="3035673010274223538">"Sugestiile de aplicații sunt adăugate în spațiile goale"</string>
     <string name="hotsaet_tip_prediction_enabled" msgid="2233554377501347650">"Sugestiile de aplicații au fost activate"</string>
     <string name="hotsaet_tip_prediction_disabled" msgid="1506426298884658491">"Sugestiile de aplicații au fost dezactivate"</string>
     <string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Aplicația estimată: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
-    <string name="back_gesture_feedback_swipe_too_far_from_edge" msgid="1711645592102201538">"Glisați dinspre marginea dreaptă îndepărtată sau dinspre marginea stângă îndepărtată."</string>
-    <string name="back_gesture_feedback_cancelled" msgid="3274382913290074496">"Glisați dinspre marginea dreaptă sau stângă spre mijlocul ecranului și eliberați."</string>
-    <string name="back_gesture_feedback_complete_with_overview_follow_up" msgid="9176400654037014471">"Ați învățat cum să glisați dinspre dreapta pentru a reveni. În continuare, aflați cum să comutați aplicațiile."</string>
-    <string name="back_gesture_feedback_complete_without_follow_up" msgid="6405649621667113830">"Ați finalizat gestul „înapoi”."</string>
-    <string name="back_gesture_feedback_swipe_in_nav_bar" msgid="1148198467090405643">"Nu glisați prea aproape de partea de jos a ecranului."</string>
-    <string name="back_gesture_tutorial_confirm_subtitle" msgid="5181305411668713250">"Schimbați sensibilitatea gestului „Înapoi” accesând Setările"</string>
-    <string name="back_gesture_intro_title" msgid="19551256430224428">"Glisați pentru a reveni"</string>
-    <string name="back_gesture_intro_subtitle" msgid="7912576483031802797">"Pentru a reveni la ultimul ecran, glisați de la marginea stângă sau dreaptă spre mijlocul ecranului."</string>
-    <string name="back_gesture_spoken_intro_subtitle" msgid="2162043199263088592">"Pentru a reveni la ultimul ecran, glisați cu două degete dinspre marginea stângă sau dreaptă spre mijlocul ecranului."</string>
-    <string name="home_gesture_feedback_swipe_too_far_from_edge" msgid="1446774096007065298">"Glisați în sus dinspre marginea de jos a ecranului."</string>
-    <string name="home_gesture_feedback_overview_detected" msgid="1557523944897393013">"Nu întrerupeți gestul înainte de a elibera."</string>
-    <string name="home_gesture_feedback_wrong_swipe_direction" msgid="6993979358080825438">"Glisați direct în sus."</string>
-    <string name="home_gesture_feedback_complete_with_follow_up" msgid="1427872029729605034">"Ați finalizat gestul „accesați ecranul de pornire”. În continuare, aflați cum să reveniți."</string>
-    <string name="home_gesture_feedback_complete_without_follow_up" msgid="8049099486868933882">"Ați finalizat gestul „accesați ecranul de pornire”."</string>
-    <string name="home_gesture_intro_title" msgid="836590312858441830">"Glisați pentru a accesa ecranul de pornire"</string>
-    <string name="home_gesture_intro_subtitle" msgid="2632238748497975326">"Glisați în sus din partea de jos a ecranului. Cu acest gest accesați întotdeauna ecranul de pornire."</string>
-    <string name="home_gesture_spoken_intro_subtitle" msgid="1030987707382031750">"Glisați în sus cu 2 degete din partea de jos. Cu acest gest accesați întotdeauna ecranul de pornire."</string>
-    <string name="overview_gesture_feedback_swipe_too_far_from_edge" msgid="3032757898111577225">"Glisați în sus dinspre marginea de jos a ecranului."</string>
-    <string name="overview_gesture_feedback_home_detected" msgid="1411130969354020489">"Încercați să țineți fereastra mai mult înainte s-o eliberați."</string>
-    <string name="overview_gesture_feedback_wrong_swipe_direction" msgid="6725820500906747925">"Glisați direct în sus, apoi întrerupeți."</string>
-    <string name="overview_gesture_feedback_complete_with_follow_up" msgid="3544611727467765026">"Ați învățat cum să folosiți gesturi. Pentru a dezactiva gesturile, accesați Setările."</string>
-    <string name="overview_gesture_feedback_complete_without_follow_up" msgid="3199486203448379152">"Ați finalizat gestul „comutați între aplicații”."</string>
-    <string name="overview_gesture_intro_title" msgid="2902054412868489378">"Glisați pentru a comuta între aplicații"</string>
-    <string name="overview_gesture_intro_subtitle" msgid="4968091015637850859">"Ca să comutați între aplicații, glisați în sus din partea de jos a ecranului, așteptați și eliberați."</string>
-    <string name="overview_gesture_spoken_intro_subtitle" msgid="3853371838260201751">"Ca să comutați între aplicații, glisați în sus cu 2 degete din partea de jos, așteptați și eliberați"</string>
+    <string name="back_gesture_feedback_swipe_too_far_from_edge" msgid="1711645592102201538">"Glisează dinspre marginea dreaptă îndepărtată sau dinspre marginea stângă îndepărtată."</string>
+    <string name="back_gesture_feedback_cancelled" msgid="3274382913290074496">"Glisează dinspre marginea dreaptă sau stângă spre mijlocul ecranului și eliberează."</string>
+    <string name="back_gesture_feedback_complete_with_overview_follow_up" msgid="9176400654037014471">"Ai învățat cum să glisezi din dreapta pentru a reveni. Acum află cum să comuți aplicațiile."</string>
+    <string name="back_gesture_feedback_complete_without_follow_up" msgid="6405649621667113830">"Ai finalizat gestul „înapoi”."</string>
+    <string name="back_gesture_feedback_swipe_in_nav_bar" msgid="1148198467090405643">"Nu glisa prea aproape de partea de jos a ecranului."</string>
+    <string name="back_gesture_tutorial_confirm_subtitle" msgid="5181305411668713250">"Schimbă sensibilitatea gestului „Înapoi” accesând Setările"</string>
+    <string name="back_gesture_intro_title" msgid="19551256430224428">"Glisează pentru a reveni"</string>
+    <string name="back_gesture_intro_subtitle" msgid="7912576483031802797">"Pentru a reveni la ultimul ecran, glisează de la marginea stângă sau dreaptă spre mijlocul ecranului."</string>
+    <string name="back_gesture_spoken_intro_subtitle" msgid="2162043199263088592">"Pentru a reveni la ultimul ecran, glisează cu două degete dinspre marginea stângă sau dreaptă spre mijlocul ecranului."</string>
+    <string name="home_gesture_feedback_swipe_too_far_from_edge" msgid="1446774096007065298">"Glisează în sus dinspre marginea de jos a ecranului."</string>
+    <string name="home_gesture_feedback_overview_detected" msgid="1557523944897393013">"Nu întrerupe gestul înainte de a elibera."</string>
+    <string name="home_gesture_feedback_wrong_swipe_direction" msgid="6993979358080825438">"Glisează direct în sus."</string>
+    <string name="home_gesture_feedback_complete_with_follow_up" msgid="1427872029729605034">"Ai finalizat gestul „accesează ecranul de pornire”. Acum află cum să revii."</string>
+    <string name="home_gesture_feedback_complete_without_follow_up" msgid="8049099486868933882">"Ai finalizat gestul „accesează ecranul de pornire”."</string>
+    <string name="home_gesture_intro_title" msgid="836590312858441830">"Glisează pentru a accesa ecranul de pornire"</string>
+    <string name="home_gesture_intro_subtitle" msgid="2632238748497975326">"Glisează în sus din partea de jos a ecranului. Cu acest gest accesezi mereu ecranul de pornire."</string>
+    <string name="home_gesture_spoken_intro_subtitle" msgid="1030987707382031750">"Glisează în sus cu două degete din partea de jos. Cu acest gest accesezi mereu ecranul de pornire."</string>
+    <string name="overview_gesture_feedback_swipe_too_far_from_edge" msgid="3032757898111577225">"Glisează în sus dinspre marginea de jos a ecranului."</string>
+    <string name="overview_gesture_feedback_home_detected" msgid="1411130969354020489">"Încearcă să ții fereastra mai mult înainte s-o eliberezi."</string>
+    <string name="overview_gesture_feedback_wrong_swipe_direction" msgid="6725820500906747925">"Glisează direct în sus, apoi întrerupe."</string>
+    <string name="overview_gesture_feedback_complete_with_follow_up" msgid="3544611727467765026">"Ai învățat să folosești gesturi. Pentru a dezactiva gesturile, accesează Setările."</string>
+    <string name="overview_gesture_feedback_complete_without_follow_up" msgid="3199486203448379152">"Ai finalizat gestul „comută între aplicații”."</string>
+    <string name="overview_gesture_intro_title" msgid="2902054412868489378">"Glisează pentru a comuta între aplicații"</string>
+    <string name="overview_gesture_intro_subtitle" msgid="4968091015637850859">"Ca să comuți între aplicații, glisează în sus din partea de jos a ecranului, așteaptă și eliberează."</string>
+    <string name="overview_gesture_spoken_intro_subtitle" msgid="3853371838260201751">"Ca să comuți între aplicații, glisează cu două degete de jos în sus, așteaptă și eliberează"</string>
     <string name="gesture_tutorial_confirm_title" msgid="6201516182040074092">"Gata"</string>
     <string name="gesture_tutorial_action_button_label" msgid="6249846312991332122">"Gata"</string>
     <string name="gesture_tutorial_action_button_label_settings" msgid="2923621047916486604">"Setări"</string>
-    <string name="gesture_tutorial_try_again" msgid="65962545858556697">"Reîncercați"</string>
+    <string name="gesture_tutorial_try_again" msgid="65962545858556697">"Reîncearcă"</string>
     <string name="gesture_tutorial_nice" msgid="2936275692616928280">"Bravo!"</string>
     <string name="gesture_tutorial_step" msgid="1279786122817620968">"Tutorialul <xliff:g id="CURRENT">%1$d</xliff:g> / <xliff:g id="TOTAL">%2$d</xliff:g>"</string>
     <string name="allset_title" msgid="5021126669778966707">"Gata!"</string>
-    <string name="allset_hint" msgid="2384632994739392447">"Glisați în sus pentru a accesa ecranul de pornire"</string>
-    <string name="allset_description" msgid="6350320429953234580">"Sunteți gata să folosiți telefonul"</string>
-    <string name="allset_description_tablet" msgid="7332070270570039247">"Sunteți gata să folosiți tableta"</string>
+    <string name="allset_hint" msgid="2384632994739392447">"Glisează în sus pentru a accesa ecranul de pornire"</string>
+    <string name="allset_description" msgid="6350320429953234580">"Ești gata să folosești telefonul"</string>
+    <string name="allset_description_tablet" msgid="7332070270570039247">"Ești gata să folosești tableta"</string>
     <string name="allset_navigation_settings" msgid="4713404605961476027"><annotation id="link">"Setările de navigare ale sistemului"</annotation></string>
-    <string name="action_share" msgid="2648470652637092375">"Distribuiți"</string>
+    <string name="action_share" msgid="2648470652637092375">"Distribuie"</string>
     <string name="action_screenshot" msgid="8171125848358142917">"Captură de ecran"</string>
     <string name="action_split" msgid="2098009717623550676">"Împărțit"</string>
-    <string name="toast_split_select_app" msgid="5453865907322018352">"Atingeți altă aplicație pentru a folosi ecranul împărțit"</string>
+    <string name="toast_split_select_app" msgid="5453865907322018352">"Atinge altă aplicație pentru ecranul împărțit"</string>
     <string name="toast_split_app_unsupported" msgid="3271526028981899666">"Aplicația nu acceptă ecranul împărțit."</string>
-    <string name="blocked_by_policy" msgid="2071401072261365546">"Această acțiune nu este permisă de aplicație sau de organizația dvs."</string>
-    <string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Omiteți tutorialul de navigare?"</string>
-    <string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Îl puteți găsi mai târziu în aplicația <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="gesture_tutorial_action_button_label_cancel" msgid="3809842569351264108">"Anulați"</string>
-    <string name="gesture_tutorial_action_button_label_skip" msgid="394452764989751960">"Omiteți"</string>
-    <string name="accessibility_rotate_button" msgid="4771825231336502943">"Rotiți ecranul"</string>
+    <string name="blocked_by_policy" msgid="2071401072261365546">"Această acțiune nu este permisă de aplicație sau de organizația ta"</string>
+    <string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Omiți tutorialul de navigare?"</string>
+    <string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Îl poți găsi mai târziu în aplicația <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="gesture_tutorial_action_button_label_cancel" msgid="3809842569351264108">"Anulează"</string>
+    <string name="gesture_tutorial_action_button_label_skip" msgid="394452764989751960">"Omite"</string>
+    <string name="accessibility_rotate_button" msgid="4771825231336502943">"Rotește ecranul"</string>
     <string name="taskbar_edu_opened" msgid="3950252793551919129">"Panoul cu informații despre bara de activități s-a afișat"</string>
     <string name="taskbar_edu_closed" msgid="126643734478892862">"Panoul cu informații despre bara de activități s-a închis"</string>
-    <string name="taskbar_edu_switch_apps" msgid="6942863327845784813">"Folosiți bara de activități ca să comutați între aplicații"</string>
-    <string name="taskbar_edu_splitscreen" msgid="2663361731630346489">"Trageți în lateral ca să folosiți două aplicații deodată"</string>
-    <string name="taskbar_edu_stashing" msgid="5212374387411764031">"Atingeți lung oricând pentru a ascunde bara de activități"</string>
+    <string name="taskbar_edu_switch_apps" msgid="6942863327845784813">"Folosește bara de activități ca să comuți între aplicații"</string>
+    <string name="taskbar_edu_splitscreen" msgid="2663361731630346489">"Trage în lateral ca să folosești două aplicații deodată"</string>
+    <string name="taskbar_edu_stashing" msgid="5212374387411764031">"Atinge lung oricând pentru a ascunde bara de activități"</string>
     <string name="taskbar_edu_next" msgid="4007618274426775841">"Înainte"</string>
     <string name="taskbar_edu_previous" msgid="459202320127201702">"Înapoi"</string>
-    <string name="taskbar_edu_close" msgid="887022990168191073">"Închideți"</string>
+    <string name="taskbar_edu_close" msgid="887022990168191073">"Închide"</string>
     <string name="taskbar_edu_done" msgid="6880178093977704569">"Gata"</string>
     <string name="taskbar_button_home" msgid="2151398979630664652">"Ecran de pornire"</string>
     <string name="taskbar_button_a11y" msgid="5241161324875094465">"Accesibilitate"</string>
@@ -108,6 +108,6 @@
     <string name="taskbar_button_recents" msgid="7273376136216613134">"Recente"</string>
     <string name="taskbar_button_notifications" msgid="7471740351507357318">"Notificări"</string>
     <string name="taskbar_button_quick_settings" msgid="227662894293189391">"Setări rapide"</string>
-    <string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Mutați în stânga sus"</string>
-    <string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Mutați în dreapta jos"</string>
+    <string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Mută în stânga sus"</string>
+    <string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Mută în dreapta jos"</string>
 </resources>
diff --git a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java
index ec497ef..e21dcba 100644
--- a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java
+++ b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java
@@ -337,7 +337,7 @@
                 new SplitSelectStateController(this, mHandler, getStateManager(),
                         getDepthController());
         overviewPanel.init(mActionsView, controller);
-        mActionsView.updateDimension(getDeviceProfile());
+        mActionsView.updateDimension(getDeviceProfile(), overviewPanel.getLastComputedTaskSize());
         mActionsView.updateVerticalMargin(DisplayController.getNavigationMode(this));
 
         mAppTransitionManager = new QuickstepTransitionManager(this);
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
index 6b12e9c..439490e 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
@@ -839,6 +839,6 @@
         pw.println(String.format(
                 "%s\tmBindInProgress=%b", prefix, mBindingItems));
         mControllers.dumpLogs(prefix + "\t", pw);
-        mDeviceProfile.dump(this, prefix, pw);
+        mDeviceProfile.dump(prefix, pw);
     }
 }
diff --git a/quickstep/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java b/quickstep/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java
index 297a61a..b733007 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java
@@ -50,7 +50,8 @@
             return super.getVerticalProgress(launcher);
         }
         RecentsView recentsView = launcher.getOverviewPanel();
-        int transitionLength = LayoutUtils.getShelfTrackingDistance(launcher.getDeviceProfile(),
+        int transitionLength = LayoutUtils.getShelfTrackingDistance(launcher,
+                launcher.getDeviceProfile(),
                 recentsView.getPagedOrientationHandler());
         AllAppsTransitionController controller = launcher.getAllAppsController();
         float scrollRange = Math.max(controller.getShiftRange(), 1);
diff --git a/quickstep/src/com/android/launcher3/uioverrides/states/OverviewModalTaskState.java b/quickstep/src/com/android/launcher3/uioverrides/states/OverviewModalTaskState.java
index 0f02e26..0c49e5f 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/states/OverviewModalTaskState.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/states/OverviewModalTaskState.java
@@ -18,6 +18,8 @@
 import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_OVERVIEW;
 
 import android.content.Context;
+import android.graphics.Point;
+import android.graphics.Rect;
 
 import com.android.launcher3.BaseDraggingActivity;
 import com.android.launcher3.Launcher;
@@ -69,6 +71,13 @@
     }
 
     public static float[] getOverviewScaleAndOffsetForModalState(BaseDraggingActivity activity) {
-        return new float[] {activity.getDeviceProfile().overviewModalTaskScale, NO_OFFSET};
+        Point taskSize = activity.<RecentsView>getOverviewPanel().getSelectedTaskSize();
+        Rect modalTaskSize = new Rect();
+        activity.<RecentsView>getOverviewPanel().getModalTaskSize(modalTaskSize);
+
+        float scale = Math.min((float) modalTaskSize.height() / taskSize.y,
+                (float) modalTaskSize.width() / taskSize.x);
+
+        return new float[] {scale, NO_OFFSET};
     }
 }
diff --git a/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java b/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java
index c0810b9..6427e09 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java
@@ -65,9 +65,12 @@
 
     @Override
     public ScaleAndTranslation getWorkspaceScaleAndTranslation(Launcher launcher) {
+        RecentsView recentsView = launcher.getOverviewPanel();
+        float workspacePageHeight = launcher.getDeviceProfile().getCellLayoutHeight();
+        recentsView.getTaskSize(sTempRect);
+        float scale = (float) sTempRect.height() / workspacePageHeight;
         float parallaxFactor = 0.5f;
-        return new ScaleAndTranslation(launcher.getDeviceProfile().overviewTaskWorkspaceScale, 0,
-                -getDefaultSwipeHeight(launcher) * parallaxFactor);
+        return new ScaleAndTranslation(scale, 0, -getDefaultSwipeHeight(launcher) * parallaxFactor);
     }
 
     @Override
diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
index d06f64a..f294986 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
@@ -120,8 +120,8 @@
         mSwipeDetector = new BothAxesSwipeDetector(mLauncher, this);
         mRecentsView = mLauncher.getOverviewPanel();
         mXRange = mLauncher.getDeviceProfile().widthPx / 2f;
-        mYRange = LayoutUtils.getShelfTrackingDistance(mLauncher.getDeviceProfile(),
-                mRecentsView.getPagedOrientationHandler());
+        mYRange = LayoutUtils.getShelfTrackingDistance(
+            mLauncher, mLauncher.getDeviceProfile(), mRecentsView.getPagedOrientationHandler());
         mMaxYProgress = mLauncher.getDeviceProfile().heightPx / mYRange;
         mMotionPauseDetector = new MotionPauseDetector(mLauncher);
         mMotionPauseMinDisplacement = mLauncher.getResources().getDimension(
@@ -232,6 +232,7 @@
         mRecentsView.setFullscreenProgress(fromState.getOverviewFullscreenProgress());
         mLauncher.getActionsView().getVisibilityAlpha().setValue(
                 (fromState.getVisibleElements(mLauncher) & OVERVIEW_ACTIONS) != 0 ? 1f : 0f);
+        mRecentsView.setTaskIconScaledDown(true);
 
         float[] scaleAndOffset = toState.getOverviewScaleAndOffset(mLauncher);
         // As we drag right, animate the following properties:
@@ -321,6 +322,7 @@
         boolean verticalFling = mSwipeDetector.isFling(velocity.y);
         boolean noFling = !horizontalFling && !verticalFling;
         if (mMotionPauseDetector.isPaused() && noFling) {
+            // Going to Overview.
             cancelAnimations();
 
             StateAnimationConfig config = new StateAnimationConfig();
@@ -331,6 +333,8 @@
                 @Override
                 public void onAnimationEnd(Animator animation) {
                     onAnimationToStateCompleted(OVERVIEW);
+                    // Animate the icon after onAnimationToStateCompleted() so it doesn't clobber.
+                    mRecentsView.animateUpTaskIconScale();
                 }
             });
             overviewAnim.start();
diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java
index 7394945..9efbc34 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java
@@ -144,8 +144,8 @@
                     .createPlaybackController();
             mLauncher.getStateManager().setCurrentUserControlledAnimation(mCurrentAnimation);
             RecentsView recentsView = mLauncher.getOverviewPanel();
-            totalShift = LayoutUtils.getShelfTrackingDistance(mLauncher.getDeviceProfile(),
-                    recentsView.getPagedOrientationHandler());
+            totalShift = LayoutUtils.getShelfTrackingDistance(mLauncher,
+                    mLauncher.getDeviceProfile(), recentsView.getPagedOrientationHandler());
         } else {
             mCurrentAnimation = mLauncher.getStateManager()
                     .createAnimationToNewWorkspace(mToState, config);
diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
index 045530c..8f1872b 100644
--- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
+++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
@@ -2049,8 +2049,8 @@
 
         float scrollOffset = Math.abs(mRecentsView.getScrollOffset(mRecentsView.getCurrentPage()));
         int maxScrollOffset = mRecentsView.getPagedOrientationHandler().getPrimaryValue(
-                mActivity.getDeviceProfile().overviewTaskRect.width(),
-                mActivity.getDeviceProfile().overviewTaskRect.height());
+                mRecentsView.getLastComputedTaskSize().width(),
+                mRecentsView.getLastComputedTaskSize().height());
         maxScrollOffset += mRecentsView.getPageSpacing();
 
         float maxScaleProgress =
diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
index a922f58..6354282 100644
--- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
@@ -33,9 +33,12 @@
 import android.animation.ObjectAnimator;
 import android.annotation.TargetApi;
 import android.content.Context;
+import android.content.res.Resources;
 import android.graphics.Color;
+import android.graphics.PointF;
 import android.graphics.Rect;
 import android.os.Build;
+import android.view.Gravity;
 import android.view.MotionEvent;
 import android.view.View;
 
@@ -43,6 +46,7 @@
 import androidx.annotation.UiThread;
 
 import com.android.launcher3.DeviceProfile;
+import com.android.launcher3.R;
 import com.android.launcher3.anim.AnimatorPlaybackController;
 import com.android.launcher3.anim.PendingAnimation;
 import com.android.launcher3.statehandlers.DepthController;
@@ -105,8 +109,8 @@
         activity.getStateManager().goToState(startState, activityVisible);
     }
 
-    /** Gets swipe-up destination and length. */
-    public abstract int getSwipeUpDestinationAndLength(DeviceProfile dp, Context context,
+    public abstract int getSwipeUpDestinationAndLength(
+            DeviceProfile dp, Context context, Rect outRect,
             PagedOrientationHandler orientationHandler);
 
     /** Called when the animation to home has fully settled. */
@@ -211,6 +215,129 @@
     }
 
     /**
+     * Calculates the taskView size for the provided device configuration.
+     */
+    public final void calculateTaskSize(Context context, DeviceProfile dp, Rect outRect) {
+        Resources res = context.getResources();
+        float maxScale = res.getFloat(R.dimen.overview_max_scale);
+        if (dp.isTablet) {
+            Rect gridRect = new Rect();
+            calculateGridSize(dp, gridRect);
+
+            calculateTaskSizeInternal(context, dp, gridRect, maxScale, Gravity.CENTER, outRect);
+        } else {
+            int taskMargin = dp.overviewTaskMarginPx;
+            calculateTaskSizeInternal(context, dp,
+                    dp.overviewTaskThumbnailTopMarginPx,
+                    dp.getOverviewActionsClaimedSpace(),
+                    res.getDimensionPixelSize(R.dimen.overview_minimum_next_prev_size) + taskMargin,
+                    maxScale,
+                    Gravity.CENTER,
+                    outRect);
+        }
+    }
+
+    private void calculateTaskSizeInternal(Context context, DeviceProfile dp, int claimedSpaceAbove,
+            int claimedSpaceBelow, int minimumHorizontalPadding, float maxScale, int gravity,
+            Rect outRect) {
+        Rect insets = dp.getInsets();
+
+        Rect potentialTaskRect = new Rect(0, 0, dp.widthPx, dp.heightPx);
+        potentialTaskRect.inset(insets.left, insets.top, insets.right, insets.bottom);
+        potentialTaskRect.inset(
+                minimumHorizontalPadding,
+                claimedSpaceAbove,
+                minimumHorizontalPadding,
+                claimedSpaceBelow);
+
+        calculateTaskSizeInternal(context, dp, potentialTaskRect, maxScale, gravity, outRect);
+    }
+
+    private void calculateTaskSizeInternal(Context context, DeviceProfile dp,
+            Rect potentialTaskRect, float maxScale, int gravity, Rect outRect) {
+        PointF taskDimension = getTaskDimension(dp);
+
+        float scale = Math.min(
+                potentialTaskRect.width() / taskDimension.x,
+                potentialTaskRect.height() / taskDimension.y);
+        scale = Math.min(scale, maxScale);
+        int outWidth = Math.round(scale * taskDimension.x);
+        int outHeight = Math.round(scale * taskDimension.y);
+
+        Gravity.apply(gravity, outWidth, outHeight, potentialTaskRect, outRect);
+    }
+
+    private static PointF getTaskDimension(DeviceProfile dp) {
+        PointF dimension = new PointF();
+        getTaskDimension(dp, dimension);
+        return dimension;
+    }
+
+    /**
+     * Gets the dimension of the task in the current system state.
+     */
+    public static void getTaskDimension(DeviceProfile dp, PointF out) {
+        out.x = dp.widthPx;
+        out.y = dp.heightPx;
+        if (dp.isTablet) {
+            out.y -= dp.taskbarSize;
+        }
+    }
+
+    /**
+     * Calculates the overview grid size for the provided device configuration.
+     */
+    public final void calculateGridSize(DeviceProfile dp, Rect outRect) {
+        Rect insets = dp.getInsets();
+        int topMargin = dp.overviewTaskThumbnailTopMarginPx;
+        int bottomMargin = dp.getOverviewActionsClaimedSpace();
+        int sideMargin = dp.overviewGridSideMargin;
+
+        outRect.set(0, 0, dp.widthPx, dp.heightPx);
+        outRect.inset(Math.max(insets.left, sideMargin), insets.top + topMargin,
+                Math.max(insets.right, sideMargin), Math.max(insets.bottom, bottomMargin));
+    }
+
+    /**
+     * Calculates the overview grid non-focused task size for the provided device configuration.
+     */
+    public final void calculateGridTaskSize(Context context, DeviceProfile dp, Rect outRect,
+            PagedOrientationHandler orientedState) {
+        Resources res = context.getResources();
+        Rect taskRect = new Rect();
+        calculateTaskSize(context, dp, taskRect);
+
+        float rowHeight =
+                (taskRect.height() + dp.overviewTaskThumbnailTopMarginPx - dp.overviewRowSpacing)
+                        / 2f;
+
+        PointF taskDimension = getTaskDimension(dp);
+        float scale = (rowHeight - dp.overviewTaskThumbnailTopMarginPx) / taskDimension.y;
+        int outWidth = Math.round(scale * taskDimension.x);
+        int outHeight = Math.round(scale * taskDimension.y);
+
+        int gravity = Gravity.TOP;
+        gravity |= orientedState.getRecentsRtlSetting(res) ? Gravity.RIGHT : Gravity.LEFT;
+        Gravity.apply(gravity, outWidth, outHeight, taskRect, outRect);
+    }
+
+    /**
+     * Calculates the modal taskView size for the provided device configuration
+     */
+    public final void calculateModalTaskSize(Context context, DeviceProfile dp, Rect outRect) {
+        calculateTaskSize(context, dp, outRect);
+        float maxScale = context.getResources().getFloat(R.dimen.overview_modal_max_scale);
+        calculateTaskSizeInternal(
+                context, dp,
+                dp.overviewTaskMarginPx,
+                dp.heightPx - outRect.bottom - dp.getInsets().bottom,
+                Math.round((dp.availableWidthPx - outRect.width() * maxScale) / 2),
+                1f /*maxScale*/,
+                Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM,
+                outRect);
+    }
+
+    /**
      * Called when the gesture ends and the animation starts towards the given target. Used to add
      * an optional additional animation with the same duration.
      */
diff --git a/quickstep/src/com/android/quickstep/FallbackActivityInterface.java b/quickstep/src/com/android/quickstep/FallbackActivityInterface.java
index 2ca5a2e..ba61574 100644
--- a/quickstep/src/com/android/quickstep/FallbackActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/FallbackActivityInterface.java
@@ -60,13 +60,13 @@
 
     /** 2 */
     @Override
-    public int getSwipeUpDestinationAndLength(DeviceProfile dp, Context context,
+    public int getSwipeUpDestinationAndLength(DeviceProfile dp, Context context, Rect outRect,
             PagedOrientationHandler orientationHandler) {
+        calculateTaskSize(context, dp, outRect);
         if (dp.isVerticalBarLayout() && DisplayController.getNavigationMode(context) != NO_BUTTON) {
-            return dp.isSeascape()
-                    ? dp.overviewTaskRect.left : (dp.widthPx - dp.overviewTaskRect.right);
+            return dp.isSeascape() ? outRect.left : (dp.widthPx - outRect.right);
         } else {
-            return dp.heightPx - dp.overviewTaskRect.bottom;
+            return dp.heightPx - outRect.bottom;
         }
     }
 
diff --git a/quickstep/src/com/android/quickstep/LauncherActivityInterface.java b/quickstep/src/com/android/quickstep/LauncherActivityInterface.java
index d3065bd..c13b95f 100644
--- a/quickstep/src/com/android/quickstep/LauncherActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/LauncherActivityInterface.java
@@ -70,14 +70,14 @@
     }
 
     @Override
-    public int getSwipeUpDestinationAndLength(DeviceProfile dp, Context context,
+    public int getSwipeUpDestinationAndLength(DeviceProfile dp, Context context, Rect outRect,
             PagedOrientationHandler orientationHandler) {
+        calculateTaskSize(context, dp, outRect);
         if (dp.isVerticalBarLayout()
                 && DisplayController.getNavigationMode(context) != NavigationMode.NO_BUTTON) {
-            return dp.isSeascape()
-                    ? dp.overviewTaskRect.left : (dp.widthPx - dp.overviewTaskRect.right);
+            return dp.isSeascape() ? outRect.left : (dp.widthPx - outRect.right);
         } else {
-            return LayoutUtils.getShelfTrackingDistance(dp, orientationHandler);
+            return LayoutUtils.getShelfTrackingDistance(context, dp, orientationHandler);
         }
     }
 
diff --git a/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java b/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java
index d216a6a..528fb97 100644
--- a/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java
+++ b/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java
@@ -2,6 +2,7 @@
 
 import android.app.Activity;
 import android.content.Context;
+import android.graphics.Rect;
 import android.os.Bundle;
 
 import androidx.annotation.Nullable;
@@ -31,7 +32,8 @@
             }
 
             case TestProtocol.REQUEST_BACKGROUND_TO_OVERVIEW_SWIPE_HEIGHT: {
-                final float swipeHeight = LayoutUtils.getShelfTrackingDistance(mDeviceProfile,
+                final float swipeHeight =
+                        LayoutUtils.getShelfTrackingDistance(mContext, mDeviceProfile,
                                 PagedOrientationHandler.PORTRAIT);
                 response.putInt(TestProtocol.TEST_INFO_RESPONSE_FIELD, (int) swipeHeight);
                 return response;
@@ -41,8 +43,10 @@
                 if (!mDeviceProfile.isTablet) {
                     return null;
                 }
-                response.putInt(TestProtocol.TEST_INFO_RESPONSE_FIELD,
-                        mDeviceProfile.overviewTaskRect.height());
+                Rect focusedTaskRect = new Rect();
+                LauncherActivityInterface.INSTANCE.calculateTaskSize(mContext, mDeviceProfile,
+                        focusedTaskRect);
+                response.putInt(TestProtocol.TEST_INFO_RESPONSE_FIELD, focusedTaskRect.height());
                 return response;
             }
 
@@ -50,10 +54,10 @@
                 if (!mDeviceProfile.isTablet) {
                     return null;
                 }
-                boolean isRecentsRtl = PagedOrientationHandler.PORTRAIT.getRecentsRtlSetting(
-                        mContext.getResources());
-                response.putParcelable(TestProtocol.TEST_INFO_RESPONSE_FIELD,
-                        mDeviceProfile.getOverviewGridTaskRect(isRecentsRtl));
+                Rect gridTaskRect = new Rect();
+                LauncherActivityInterface.INSTANCE.calculateGridTaskSize(mContext, mDeviceProfile,
+                        gridTaskRect, PagedOrientationHandler.PORTRAIT);
+                response.putParcelable(TestProtocol.TEST_INFO_RESPONSE_FIELD, gridTaskRect);
                 return response;
             }
 
diff --git a/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java b/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java
index 3c15d0f..baeb514 100644
--- a/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java
+++ b/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java
@@ -49,6 +49,7 @@
 public abstract class SwipeUpAnimationLogic implements
         RecentsAnimationCallbacks.RecentsAnimationListener{
 
+    protected static final Rect TEMP_RECT = new Rect();
     protected final RemoteTargetGluer mTargetGluer;
 
     protected DeviceProfile mDp;
@@ -91,7 +92,7 @@
     protected void initTransitionEndpoints(DeviceProfile dp) {
         mDp = dp;
         mTransitionDragLength = mGestureState.getActivityInterface().getSwipeUpDestinationAndLength(
-                dp, mContext, mRemoteTargetHandles[0].getTaskViewSimulator()
+                dp, mContext, TEMP_RECT, mRemoteTargetHandles[0].getTaskViewSimulator()
                         .getOrientationState().getOrientationHandler());
         mDragLengthFactor = (float) dp.heightPx / mTransitionDragLength;
 
diff --git a/quickstep/src/com/android/quickstep/TaskShortcutFactory.java b/quickstep/src/com/android/quickstep/TaskShortcutFactory.java
index 092854f..69a295b 100644
--- a/quickstep/src/com/android/quickstep/TaskShortcutFactory.java
+++ b/quickstep/src/com/android/quickstep/TaskShortcutFactory.java
@@ -27,6 +27,7 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.view.View;
+import android.view.WindowInsets;
 import android.window.SplashScreen;
 
 import androidx.annotation.Nullable;
@@ -101,40 +102,10 @@
         }
     };
 
-    abstract class MultiWindowFactory implements TaskShortcutFactory {
-
-        private final int mIconRes;
-        private final int mTextRes;
-        private final LauncherEvent mLauncherEvent;
-
-        MultiWindowFactory(int iconRes, int textRes, LauncherEvent launcherEvent) {
-            mIconRes = iconRes;
-            mTextRes = textRes;
-            mLauncherEvent = launcherEvent;
-        }
-
-        protected abstract boolean isAvailable(BaseDraggingActivity activity, int displayId);
-        protected abstract ActivityOptions makeLaunchOptions(Activity activity);
-        protected abstract boolean onActivityStarted(BaseDraggingActivity activity);
-
-        @Override
-        public List<SystemShortcut> getShortcuts(BaseDraggingActivity activity,
-                TaskIdAttributeContainer taskContainer) {
-            final Task task  = taskContainer.getTask();
-            if (!task.isDockable) {
-                return null;
-            }
-            if (!isAvailable(activity, task.key.displayId)) {
-                return null;
-            }
-            return Collections.singletonList(new MultiWindowSystemShortcut(mIconRes,
-                    mTextRes, activity, taskContainer, this, mLauncherEvent));
-        }
-    }
-
     class SplitSelectSystemShortcut extends SystemShortcut {
         private final TaskView mTaskView;
         private final SplitPositionOption mSplitPositionOption;
+
         public SplitSelectSystemShortcut(BaseDraggingActivity target, TaskView taskView,
                 SplitPositionOption option) {
             super(option.iconResId, option.textResId, target, taskView.getItemInfo(), taskView);
@@ -148,19 +119,17 @@
         }
     }
 
-    class MultiWindowSystemShortcut extends SystemShortcut<BaseDraggingActivity> {
+    class FreeformSystemShortcut extends SystemShortcut<BaseDraggingActivity> {
 
         private Handler mHandler;
 
         private final RecentsView mRecentsView;
         private final TaskThumbnailView mThumbnailView;
         private final TaskView mTaskView;
-        private final MultiWindowFactory mFactory;
         private final LauncherEvent mLauncherEvent;
 
-        public MultiWindowSystemShortcut(int iconRes, int textRes, BaseDraggingActivity activity,
-                TaskIdAttributeContainer taskContainer, MultiWindowFactory factory,
-                LauncherEvent launcherEvent) {
+        public FreeformSystemShortcut(int iconRes, int textRes, BaseDraggingActivity activity,
+                TaskIdAttributeContainer taskContainer, LauncherEvent launcherEvent) {
             super(iconRes, textRes, activity, taskContainer.getItemInfo(),
                     taskContainer.getTaskView());
             mLauncherEvent = launcherEvent;
@@ -168,55 +137,30 @@
             mTaskView = taskContainer.getTaskView();
             mRecentsView = activity.getOverviewPanel();
             mThumbnailView = taskContainer.getThumbnailView();
-            mFactory = factory;
         }
 
         @Override
         public void onClick(View view) {
-            Task.TaskKey taskKey = mTaskView.getTask().key;
-            final int taskId = taskKey.id;
-
-            final View.OnLayoutChangeListener onLayoutChangeListener =
-                    new View.OnLayoutChangeListener() {
-                        @Override
-                        public void onLayoutChange(View v, int l, int t, int r, int b,
-                                int oldL, int oldT, int oldR, int oldB) {
-                            mTaskView.getRootView().removeOnLayoutChangeListener(this);
-                            mRecentsView.clearIgnoreResetTask(taskId);
-
-                            // Start animating in the side pages once launcher has been resized
-                            mRecentsView.dismissTask(mTaskView, false, false);
-                        }
-                    };
-
-            final DeviceProfile.OnDeviceProfileChangeListener onDeviceProfileChangeListener =
-                    new DeviceProfile.OnDeviceProfileChangeListener() {
-                        @Override
-                        public void onDeviceProfileChanged(DeviceProfile dp) {
-                            mTarget.removeOnDeviceProfileChangeListener(this);
-                            if (dp.isMultiWindowMode) {
-                                mTaskView.getRootView().addOnLayoutChangeListener(
-                                        onLayoutChangeListener);
-                            }
-                        }
-                    };
-
             dismissTaskMenuView(mTarget);
+            RecentsView rv = mTarget.getOverviewPanel();
+            rv.switchToScreenshot(() -> {
+                rv.finishRecentsAnimation(true /* toHome */, () -> {
+                    mTarget.returnToHomescreen();
+                    rv.getHandler().post(this::startActivity);
+                });
+            });
+        }
 
-            ActivityOptions options = mFactory.makeLaunchOptions(mTarget);
+        private void startActivity() {
+            final Task.TaskKey taskKey = mTaskView.getTask().key;
+            final int taskId = taskKey.id;
+            final ActivityOptions options = makeLaunchOptions(mTarget);
             if (options != null) {
                 options.setSplashScreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON);
             }
             if (options != null
                     && ActivityManagerWrapper.getInstance().startActivityFromRecents(taskId,
                             options)) {
-                if (!mFactory.onActivityStarted(mTarget)) {
-                    return;
-                }
-                // Add a device profile change listener to kick off animating the side tasks
-                // once we enter multiwindow mode and relayout
-                mTarget.addOnDeviceProfileChangeListener(onDeviceProfileChangeListener);
-
                 final Runnable animStartedListener = () -> {
                     // Hide the task view and wait for the window to be resized
                     // TODO: Consider animating in launcher and do an in-place start activity
@@ -255,6 +199,18 @@
                         .log(mLauncherEvent);
             }
         }
+
+        private ActivityOptions makeLaunchOptions(Activity activity) {
+            ActivityOptions activityOptions = ActivityOptionsCompat.makeFreeformOptions();
+            // Arbitrary bounds only because freeform is in dev mode right now
+            final View decorView = activity.getWindow().getDecorView();
+            final WindowInsets insets = decorView.getRootWindowInsets();
+            final Rect r = new Rect(0, 0, decorView.getWidth() / 2, decorView.getHeight() / 2);
+            r.offsetTo(insets.getSystemWindowInsetLeft() + 50,
+                    insets.getSystemWindowInsetTop() + 50);
+            activityOptions.setLaunchBounds(r);
+            return activityOptions;
+        }
     }
 
     /**
@@ -304,28 +260,26 @@
         }
     };
 
-    TaskShortcutFactory FREE_FORM = new MultiWindowFactory(R.drawable.ic_split_screen,
-            R.string.recent_task_option_freeform, LAUNCHER_SYSTEM_SHORTCUT_FREE_FORM_TAP) {
-
+    TaskShortcutFactory FREE_FORM = new TaskShortcutFactory() {
         @Override
-        protected boolean isAvailable(BaseDraggingActivity activity, int displayId) {
+        public List<SystemShortcut> getShortcuts(BaseDraggingActivity activity,
+                TaskIdAttributeContainer taskContainer) {
+            final Task task  = taskContainer.getTask();
+            if (!task.isDockable) {
+                return null;
+            }
+            if (!isAvailable(activity, task.key.displayId)) {
+                return null;
+            }
+
+            return Collections.singletonList(new FreeformSystemShortcut(R.drawable.ic_split_screen,
+                    R.string.recent_task_option_freeform, activity, taskContainer,
+                    LAUNCHER_SYSTEM_SHORTCUT_FREE_FORM_TAP));
+        }
+
+        private boolean isAvailable(BaseDraggingActivity activity, int displayId) {
             return ActivityManagerWrapper.getInstance().supportsFreeformMultiWindow(activity);
         }
-
-        @Override
-        protected ActivityOptions makeLaunchOptions(Activity activity) {
-            ActivityOptions activityOptions = ActivityOptionsCompat.makeFreeformOptions();
-            // Arbitrary bounds only because freeform is in dev mode right now
-            Rect r = new Rect(50, 50, 200, 200);
-            activityOptions.setLaunchBounds(r);
-            return activityOptions;
-        }
-
-        @Override
-        protected boolean onActivityStarted(BaseDraggingActivity activity) {
-            activity.returnToHomescreen();
-            return true;
-        }
     };
 
     TaskShortcutFactory PIN = new TaskShortcutFactory() {
diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java
index 149af98..bf1c998 100644
--- a/quickstep/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java
@@ -1015,7 +1015,7 @@
             pw.println("ProtoTrace:");
             pw.println("  file=" + ProtoTracer.INSTANCE.get(this).getTraceFile());
             if (createdOverviewActivity != null) {
-                createdOverviewActivity.getDeviceProfile().dump(this, "", pw);
+                createdOverviewActivity.getDeviceProfile().dump("", pw);
             }
             mTaskbarManager.dumpLogs("", pw);
         }
diff --git a/quickstep/src/com/android/quickstep/util/AnimatorControllerWithResistance.java b/quickstep/src/com/android/quickstep/util/AnimatorControllerWithResistance.java
index ded4fb0..7c83833 100644
--- a/quickstep/src/com/android/quickstep/util/AnimatorControllerWithResistance.java
+++ b/quickstep/src/com/android/quickstep/util/AnimatorControllerWithResistance.java
@@ -36,6 +36,7 @@
 import com.android.launcher3.anim.AnimatorPlaybackController;
 import com.android.launcher3.anim.PendingAnimation;
 import com.android.launcher3.touch.PagedOrientationHandler;
+import com.android.quickstep.LauncherActivityInterface;
 import com.android.quickstep.views.RecentsView;
 
 /**
@@ -154,9 +155,10 @@
      */
     public static <SCALE, TRANSLATION> PendingAnimation createRecentsResistanceAnim(
             RecentsParams<SCALE, TRANSLATION> params) {
-        Rect startRect = new Rect(params.dp.overviewTaskRect);
+        Rect startRect = new Rect();
         PagedOrientationHandler orientationHandler = params.recentsOrientedState
                 .getOrientationHandler();
+        LauncherActivityInterface.INSTANCE.calculateTaskSize(params.context, params.dp, startRect);
         long distanceToCover = startRect.bottom;
         PendingAnimation resistAnim = params.resistAnim != null
                 ? params.resistAnim
diff --git a/quickstep/src/com/android/quickstep/util/LayoutUtils.java b/quickstep/src/com/android/quickstep/util/LayoutUtils.java
index d4eb880..d0856be 100644
--- a/quickstep/src/com/android/quickstep/util/LayoutUtils.java
+++ b/quickstep/src/com/android/quickstep/util/LayoutUtils.java
@@ -16,6 +16,7 @@
 package com.android.quickstep.util;
 
 import android.content.Context;
+import android.graphics.Rect;
 import android.view.View;
 import android.view.ViewGroup;
 
@@ -23,6 +24,7 @@
 import com.android.launcher3.touch.PagedOrientationHandler;
 import com.android.launcher3.util.DisplayController;
 import com.android.launcher3.util.DisplayController.NavigationMode;
+import com.android.quickstep.LauncherActivityInterface;
 
 public class LayoutUtils {
 
@@ -37,12 +39,12 @@
         return swipeHeight;
     }
 
-    /**
-     *  Returns the shelf tracking distance.
-     */
-    public static int getShelfTrackingDistance(DeviceProfile dp,
+    public static int getShelfTrackingDistance(Context context, DeviceProfile dp,
             PagedOrientationHandler orientationHandler) {
-        return orientationHandler.getDistanceToBottomOfRect(dp, dp.overviewTaskRect);
+        // Track the bottom of the window.
+        Rect taskSize = new Rect();
+        LauncherActivityInterface.INSTANCE.calculateTaskSize(context, dp, taskSize);
+        return orientationHandler.getDistanceToBottomOfRect(dp, taskSize);
     }
 
     /**
diff --git a/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java b/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java
index 39e3797..dec934a 100644
--- a/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java
+++ b/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java
@@ -25,6 +25,7 @@
 import static com.android.launcher3.states.RotationHelper.ALLOW_ROTATION_PREFERENCE_KEY;
 import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
 import static com.android.launcher3.util.SettingsCache.ROTATION_SETTING_URI;
+import static com.android.quickstep.BaseActivityInterface.getTaskDimension;
 
 import static java.lang.annotation.RetentionPolicy.SOURCE;
 
@@ -397,8 +398,8 @@
      * Returns the scale and pivot so that the provided taskRect can fit the provided full size
      */
     public float getFullScreenScaleAndPivot(Rect taskView, DeviceProfile dp, PointF outPivot) {
-        float scale = Math.min(dp.taskDimension.x / taskView.width(),
-                dp.taskDimension.y / taskView.height());
+        getTaskDimension(dp, outPivot);
+        float scale = Math.min(outPivot.x / taskView.width(), outPivot.y / taskView.height());
         if (scale == 1) {
             outPivot.set(taskView.centerX(), taskView.centerY());
         } else {
diff --git a/quickstep/src/com/android/quickstep/util/TaskViewSimulator.java b/quickstep/src/com/android/quickstep/util/TaskViewSimulator.java
index 6f6474e..d37300c 100644
--- a/quickstep/src/com/android/quickstep/util/TaskViewSimulator.java
+++ b/quickstep/src/com/android/quickstep/util/TaskViewSimulator.java
@@ -145,8 +145,12 @@
         if (mDp == null) {
             return 1;
         }
-        mTaskRect.set(
-                mIsGridTask ? mDp.getOverviewGridTaskRect(mIsRecentsRtl) : mDp.overviewTaskRect);
+        if (mIsGridTask) {
+            mSizeStrategy.calculateGridTaskSize(mContext, mDp, mTaskRect,
+                    mOrientationState.getOrientationHandler());
+        } else {
+            mSizeStrategy.calculateTaskSize(mContext, mDp, mTaskRect);
+        }
 
         Rect fullTaskSize;
         if (mSplitBounds != null) {
diff --git a/quickstep/src/com/android/quickstep/views/OverviewActionsView.java b/quickstep/src/com/android/quickstep/views/OverviewActionsView.java
index c178175..62ec0ef 100644
--- a/quickstep/src/com/android/quickstep/views/OverviewActionsView.java
+++ b/quickstep/src/com/android/quickstep/views/OverviewActionsView.java
@@ -93,6 +93,7 @@
 
     @Nullable
     protected DeviceProfile mDp;
+    private final Rect mTaskSize = new Rect();
 
     public OverviewActionsView(Context context) {
         this(context, null);
@@ -243,15 +244,16 @@
         }
 
         // Align to bottom of task Rect.
-        return mDp.heightPx - mDp.overviewTaskRect.bottom - mDp.overviewActionsTopMarginPx
+        return mDp.heightPx - mTaskSize.bottom - mDp.overviewActionsTopMarginPx
                 - mDp.overviewActionsHeight;
     }
 
     /**
-     * Updates device profile for this view to draw with.
+     * Updates device profile and task size for this view to draw with.
      */
-    public void updateDimension(DeviceProfile dp) {
+    public void updateDimension(DeviceProfile dp, Rect taskSize) {
         mDp = dp;
+        mTaskSize.set(taskSize);
         updateVerticalMargin(DisplayController.getNavigationMode(getContext()));
 
         requestLayout();
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index dc886f6..cf93857 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -428,6 +428,9 @@
 
     @Nullable
     protected RemoteTargetHandle[] mRemoteTargetHandles;
+    protected final Rect mLastComputedTaskSize = new Rect();
+    protected final Rect mLastComputedGridSize = new Rect();
+    protected final Rect mLastComputedGridTaskSize = new Rect();
     // How much a task that is directly offscreen will be pushed out due to RecentsView scale/pivot.
     @Nullable
     protected Float mLastComputedTaskStartPushOutDistance = null;
@@ -1136,8 +1139,7 @@
         int targetScroll = getScrollForPage(indexOfChild(getFocusedTaskView()));
         if (!isClearAllHidden) {
             int clearAllWidth = mOrientationHandler.getPrimarySize(mClearAllButton);
-            int taskGridHorizontalDiff = mActivity.getDeviceProfile().overviewTaskRect.right
-                    - mActivity.getDeviceProfile().overviewGridRect.right;
+            int taskGridHorizontalDiff = mLastComputedTaskSize.right - mLastComputedGridSize.right;
             int clearAllFocusScrollDiff =  taskGridHorizontalDiff - clearAllWidth;
             targetScroll += mIsRtl ? clearAllFocusScrollDiff : -clearAllFocusScrollDiff;
         }
@@ -1676,7 +1678,7 @@
 
         // Update RecentsView and TaskView's DeviceProfile dependent layout.
         updateOrientationHandler();
-        mActionsView.updateDimension(dp);
+        mActionsView.updateDimension(dp, mLastComputedTaskSize);
     }
 
     private void updateOrientationHandler() {
@@ -1732,7 +1734,7 @@
     // Update task size and padding that are dependent on DeviceProfile and insets.
     private void updateSizeAndPadding() {
         DeviceProfile dp = mActivity.getDeviceProfile();
-        mTempRect.set(dp.overviewTaskRect);
+        getTaskSize(mTempRect);
         mTaskWidth = mTempRect.width();
         mTaskHeight = mTempRect.height();
 
@@ -1741,9 +1743,14 @@
                 dp.widthPx - mInsets.right - mTempRect.right,
                 dp.heightPx - mInsets.bottom - mTempRect.bottom);
 
-        mTaskGridVerticalDiff = dp.getOverviewGridTaskRect(mIsRtl).top - dp.overviewTaskRect.top;
+        mSizeStrategy.calculateGridSize(mActivity.getDeviceProfile(),
+                mLastComputedGridSize);
+        mSizeStrategy.calculateGridTaskSize(mActivity, mActivity.getDeviceProfile(),
+                mLastComputedGridTaskSize, mOrientationHandler);
+
+        mTaskGridVerticalDiff = mLastComputedGridTaskSize.top - mLastComputedTaskSize.top;
         mTopBottomRowHeightDiff =
-                dp.overviewGridTaskDimension.y + dp.overviewTaskThumbnailTopMarginPx
+                mLastComputedGridTaskSize.height() + dp.overviewTaskThumbnailTopMarginPx
                         + dp.overviewRowSpacing;
 
         // Force TaskView to update size from thumbnail
@@ -1785,6 +1792,34 @@
         updateGridProperties(isTaskDismissal);
     }
 
+    public void getTaskSize(Rect outRect) {
+        mSizeStrategy.calculateTaskSize(mActivity, mActivity.getDeviceProfile(), outRect);
+        mLastComputedTaskSize.set(outRect);
+    }
+
+    /**
+     * Returns the size of task selected to enter modal state.
+     */
+    public Point getSelectedTaskSize() {
+        mSizeStrategy.calculateTaskSize(mActivity, mActivity.getDeviceProfile(),
+                mTempRect);
+        return new Point(mTempRect.width(), mTempRect.height());
+    }
+
+    /** Gets the last computed task size */
+    public Rect getLastComputedTaskSize() {
+        return mLastComputedTaskSize;
+    }
+
+    public Rect getLastComputedGridTaskSize() {
+        return mLastComputedGridTaskSize;
+    }
+
+    /** Gets the task size for modal state. */
+    public void getModalTaskSize(Rect outRect) {
+        mSizeStrategy.calculateModalTaskSize(mActivity, mActivity.getDeviceProfile(), outRect);
+    }
+
     @Override
     protected boolean computeScrollHelper() {
         boolean scrolling = super.computeScrollHelper();
@@ -2417,8 +2452,7 @@
             return;
         }
 
-        DeviceProfile dp = mActivity.getDeviceProfile();
-        int taskTopMargin = dp.overviewTaskThumbnailTopMarginPx;
+        int taskTopMargin = mActivity.getDeviceProfile().overviewTaskThumbnailTopMarginPx;
 
         int topRowWidth = 0;
         int bottomRowWidth = 0;
@@ -2461,7 +2495,7 @@
                 gridTranslations[i] += mIsRtl ? taskWidthAndSpacing : -taskWidthAndSpacing;
 
                 // Center view vertically in case it's from different orientation.
-                taskView.setGridTranslationY((dp.overviewTaskRect.height() + taskTopMargin
+                taskView.setGridTranslationY((mLastComputedTaskSize.height() + taskTopMargin
                         - taskView.getLayoutParams().height) / 2f);
 
                 if (taskView == snappedTaskView) {
@@ -2577,11 +2611,11 @@
         // accordingly. Update longRowWidth if ClearAllButton has been moved.
         float clearAllShortTotalCompensation = 0;
         int longRowWidth = Math.max(topRowWidth, bottomRowWidth);
-        if (longRowWidth < dp.overviewGridRect.width()) {
-            float shortTotalCompensation = dp.overviewGridRect.width() - longRowWidth;
+        if (longRowWidth < mLastComputedGridSize.width()) {
+            float shortTotalCompensation = mLastComputedGridSize.width() - longRowWidth;
             clearAllShortTotalCompensation =
                     mIsRtl ? -shortTotalCompensation : shortTotalCompensation;
-            longRowWidth = dp.overviewGridRect.width();
+            longRowWidth = mLastComputedGridSize.width();
         }
 
         float clearAllTotalTranslationX =
@@ -2598,8 +2632,9 @@
         if (snappedTaskView != null) {
             int distanceFromClearAll = longRowWidth - snappedTaskRowWidth + mPageSpacing;
             // ClearAllButton should be off screen when snapped task is in its snapped position.
-            int minimumDistance = mTaskWidth - snappedTaskView.getLayoutParams().width
-                    + (dp.overviewGridRect.width() - mTaskWidth) / 2;
+            int minimumDistance =
+                    mTaskWidth - snappedTaskView.getLayoutParams().width
+                            + (mLastComputedGridSize.width() - mTaskWidth) / 2;
             if (distanceFromClearAll < minimumDistance) {
                 int distanceDifference = minimumDistance - distanceFromClearAll;
                 snappedTaskGridTranslationX += mIsRtl ? distanceDifference : -distanceDifference;
@@ -2614,9 +2649,9 @@
 
         mClearAllButton.setGridTranslationPrimary(
                 clearAllTotalTranslationX - snappedTaskGridTranslationX);
-        mClearAllButton.setGridScrollOffset(mIsRtl
-                ? dp.overviewTaskRect.left - dp.overviewGridRect.left
-                : dp.overviewTaskRect.right - dp.overviewGridRect.right);
+        mClearAllButton.setGridScrollOffset(
+                mIsRtl ? mLastComputedTaskSize.left - mLastComputedGridSize.left
+                        : mLastComputedTaskSize.right - mLastComputedGridSize.right);
 
         setGridProgress(mGridProgress);
     }
@@ -2869,8 +2904,8 @@
         boolean closeGapBetweenClearAll = false;
         boolean isClearAllHidden = isClearAllHidden();
         boolean snapToLastTask = false;
-        DeviceProfile dp = mActivity.getDeviceProfile();
-        boolean isLandscapeSplit = dp.isLandscape && isSplitSelectionActive();
+        boolean isLandscapeSplit =
+                mActivity.getDeviceProfile().isLandscape && isSplitSelectionActive();
         boolean isSplitPlaceholderFirstInGrid = isSplitPlaceholderFirstInGrid();
         boolean isSplitPlaceholderLastInGrid = isSplitPlaceholderLastInGrid();
         TaskView lastGridTaskView = showAsGrid ? getLastGridTaskView() : null;
@@ -3061,7 +3096,7 @@
                         dismissTranslationInterpolationEnd);
                 if (taskView == nextFocusedTaskView) {
                     // Enlarge the task to be focused next, and translate into focus position.
-                    float scale = mTaskWidth / (float) dp.overviewGridTaskDimension.x;
+                    float scale = mTaskWidth / (float) mLastComputedGridTaskSize.width();
                     anim.setFloat(taskView, TaskView.SNAPSHOT_SCALE, scale,
                             clampToProgress(LINEAR, animationStartProgress,
                                     dismissTranslationInterpolationEnd));
@@ -3317,7 +3352,7 @@
                         // Update various scroll-dependent UI.
                         dispatchScrollChanged();
                         updateActionsViewFocusedScroll();
-                        if (isClearAllHidden() && !dp.isTablet) {
+                        if (isClearAllHidden() && !mActivity.getDeviceProfile().isTablet) {
                             mActionsView.updateDisabledFlags(OverviewActionsView.DISABLED_SCROLLING,
                                     false);
                         }
@@ -3715,6 +3750,7 @@
         updateEmptyStateUi(changed);
 
         // Update the pivots such that when the task is scaled, it fills the full page
+        getTaskSize(mTempRect);
         updatePivots();
         setTaskModalness(mTaskModalness);
         mLastComputedTaskStartPushOutDistance = null;
@@ -3728,13 +3764,12 @@
     }
 
     private void updatePivots() {
-        DeviceProfile dp = mActivity.getDeviceProfile();
         if (mOverviewSelectEnabled) {
-            setPivotX(dp.overviewTaskRect.centerX());
-            setPivotY(dp.overviewTaskRect.bottom);
+            setPivotX(mLastComputedTaskSize.centerX());
+            setPivotY(mLastComputedTaskSize.bottom);
         } else {
-            getPagedViewOrientedState().getFullScreenScaleAndPivot(dp.overviewTaskRect, dp,
-                    mTempPointF);
+            getPagedViewOrientedState().getFullScreenScaleAndPivot(mTempRect,
+                    mActivity.getDeviceProfile(), mTempPointF);
             setPivotX(mTempPointF.x);
             setPivotY(mTempPointF.y);
         }
@@ -4007,8 +4042,8 @@
     }
 
     public void initiateSplitSelect(TaskView taskView) {
-        int defaultSplitPosition =
-                mOrientationHandler.getDefaultSplitPosition(mActivity.getDeviceProfile());
+        int defaultSplitPosition = mOrientationHandler
+                .getDefaultSplitPosition(mActivity.getDeviceProfile());
         initiateSplitSelect(taskView, defaultSplitPosition);
     }
 
@@ -4313,9 +4348,9 @@
      * Returns the scale up required on the view, so that it coves the screen completely
      */
     public float getMaxScaleForFullScreen() {
-        DeviceProfile dp = mActivity.getDeviceProfile();
-        return getPagedViewOrientedState().getFullScreenScaleAndPivot(dp.overviewTaskRect,
-                dp, mTempPointF);
+        getTaskSize(mTempRect);
+        return getPagedViewOrientedState().getFullScreenScaleAndPivot(
+                mTempRect, mActivity.getDeviceProfile(), mTempPointF);
     }
 
     public PendingAnimation createTaskLaunchAnimation(
@@ -4822,15 +4857,17 @@
         int lastGridTaskViewPosition =
                 getPositionInRow(lastGridTaskView, topRowIdArray, bottomRowIdArray);
         int taskViewPosition = getPositionInRow(taskView, topRowIdArray, bottomRowIdArray);
-        DeviceProfile dp = mActivity.getDeviceProfile();
-        Rect gridTaskRect = dp.getOverviewGridTaskRect(mIsRtl);
-        int gridTaskSizeAndSpacing = gridTaskRect.width() + mPageSpacing;
+        int gridTaskSizeAndSpacing = mLastComputedGridTaskSize.width() + mPageSpacing;
         int positionDiff = gridTaskSizeAndSpacing * (lastGridTaskViewPosition - taskViewPosition);
 
-        int lastTaskEnd = (mIsRtl ? dp.overviewGridRect.left : dp.overviewGridRect.right)
+        int lastTaskEnd = (mIsRtl
+                ? mLastComputedGridSize.left
+                : mLastComputedGridSize.right)
                 + (mIsRtl ? mPageSpacing : -mPageSpacing);
         int taskEnd = lastTaskEnd + (mIsRtl ? positionDiff : -positionDiff);
-        int normalTaskEnd = mIsRtl ? gridTaskRect.left : gridTaskRect.right;
+        int normalTaskEnd = mIsRtl
+                ? mLastComputedGridTaskSize.left
+                : mLastComputedGridTaskSize.right;
         return taskEnd - normalTaskEnd;
     }
 
@@ -5136,12 +5173,14 @@
             while ((taskView == null || isTaskViewFullyVisible(taskView)) && targetPage - 1 >= 0) {
                 taskView = getTaskViewAt(--targetPage);
             }
-            DeviceProfile dp = mActivity.getDeviceProfile();
-            Rect gridTaskRect = dp.getOverviewGridTaskRect(mIsRtl);
             // Target a scroll where targetPage is on left of screen but still fully visible.
-            int lastTaskEnd = (mIsRtl ? dp.overviewGridRect.left : dp.overviewGridRect.right)
+            int lastTaskEnd = (mIsRtl
+                    ? mLastComputedGridSize.left
+                    : mLastComputedGridSize.right)
                     + (mIsRtl ? mPageSpacing : -mPageSpacing);
-            int normalTaskEnd = mIsRtl ? gridTaskRect.left : gridTaskRect.right;
+            int normalTaskEnd = mIsRtl
+                    ? mLastComputedGridTaskSize.left
+                    : mLastComputedGridTaskSize.right;
             int targetScroll = getScrollForPage(targetPage) + normalTaskEnd - lastTaskEnd;
             // Find a page that is close to targetScroll while not over it.
             while (targetPage - 1 >= 0
diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java
index ba56af1..5602d88 100644
--- a/quickstep/src/com/android/quickstep/views/TaskView.java
+++ b/quickstep/src/com/android/quickstep/views/TaskView.java
@@ -1391,8 +1391,9 @@
         DeviceProfile deviceProfile = mActivity.getDeviceProfile();
         if (deviceProfile.isTablet) {
             final int thumbnailPadding = deviceProfile.overviewTaskThumbnailTopMarginPx;
-            final int taskWidth = deviceProfile.overviewTaskRect.width();
-            final int taskHeight = deviceProfile.overviewTaskRect.height();
+            final Rect lastComputedTaskSize = getRecentsView().getLastComputedTaskSize();
+            final int taskWidth = lastComputedTaskSize.width();
+            final int taskHeight = lastComputedTaskSize.height();
 
             int boxWidth;
             int boxHeight;
@@ -1403,9 +1404,10 @@
                 boxWidth = taskWidth;
                 boxHeight = taskHeight;
             } else {
-                // Otherwise task is in grid.
-                boxWidth = deviceProfile.overviewGridTaskDimension.x;
-                boxHeight = deviceProfile.overviewGridTaskDimension.y;
+                // Otherwise task is in grid, and should use lastComputedGridTaskSize.
+                Rect lastComputedGridTaskSize = getRecentsView().getLastComputedGridTaskSize();
+                boxWidth = lastComputedGridTaskSize.width();
+                boxHeight = lastComputedGridTaskSize.height();
             }
 
             // Bound width/height to the box size.
diff --git a/quickstep/tests/src/com/android/quickstep/DeviceProfilePhone3ButtonTest.kt b/quickstep/tests/src/com/android/quickstep/DeviceProfilePhone3ButtonTest.kt
index 588e346..3daf81d 100644
--- a/quickstep/tests/src/com/android/quickstep/DeviceProfilePhone3ButtonTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/DeviceProfilePhone3ButtonTest.kt
@@ -483,114 +483,4 @@
     fun hotseatBarEndOffset() {
         assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
     }
-
-    @Test
-    fun overviewGridRectLeft() {
-        assertThat(dp.overviewGridRect.left).isEqualTo(0)
-    }
-
-    @Test
-    fun overviewGridRectTop() {
-        assertThat(dp.overviewGridRect.top).isEqualTo(280)
-    }
-
-    @Test
-    fun overviewGridRectRight() {
-        assertThat(dp.overviewGridRect.right).isEqualTo(1440)
-    }
-
-    @Test
-    fun overviewGridRectBottom() {
-        assertThat(dp.overviewGridRect.bottom).isEqualTo(2768)
-    }
-
-    @Test
-    fun taskDimensionX() {
-        assertThat(dp.taskDimension.x).isEqualTo(1440)
-    }
-
-    @Test
-    fun taskDimensionY() {
-        assertThat(dp.taskDimension.y).isEqualTo(3120)
-    }
-
-    @Test
-    fun overviewTaskRectLeft() {
-        assertThat(dp.overviewTaskRect.left).isEqualTo(231)
-    }
-
-    @Test
-    fun overviewTaskRectTop() {
-        assertThat(dp.overviewTaskRect.top).isEqualTo(414)
-    }
-
-    @Test
-    fun overviewTaskRectRight() {
-        assertThat(dp.overviewTaskRect.right).isEqualTo(1209)
-    }
-
-    @Test
-    fun overviewTaskRectBottom() {
-        assertThat(dp.overviewTaskRect.bottom).isEqualTo(2533)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionX() {
-        assertThat(dp.overviewGridTaskDimension.x).isEqualTo(450)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionY() {
-        assertThat(dp.overviewGridTaskDimension.y).isEqualTo(976)
-    }
-
-    @Test
-    fun overviewModalTaskRectLeft() {
-        assertThat(dp.overviewModalTaskRect.left).isEqualTo(182)
-    }
-
-    @Test
-    fun overviewModalTaskRectTop() {
-        assertThat(dp.overviewModalTaskRect.top).isEqualTo(202)
-    }
-
-    @Test
-    fun overviewModalTaskRectRight() {
-        assertThat(dp.overviewModalTaskRect.right).isEqualTo(1258)
-    }
-
-    @Test
-    fun overviewModalTaskRectBottom() {
-        assertThat(dp.overviewModalTaskRect.bottom).isEqualTo(2533)
-    }
-
-    @Test
-    fun getGridTaskRectLeft() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).left).isEqualTo(759)
-    }
-
-    @Test
-    fun getGridTaskRectTop() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).top).isEqualTo(414)
-    }
-
-    @Test
-    fun getGridTaskRectRight() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).right).isEqualTo(1209)
-    }
-
-    @Test
-    fun getGridTaskRectBottom() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).bottom).isEqualTo(1390)
-    }
-
-    @Test
-    fun overviewTaskScale() {
-        assertThat(dp.overviewTaskWorkspaceScale).isEqualTo(0.86595833f)
-    }
-
-    @Test
-    fun overviewModalTaskScale() {
-        assertThat(dp.overviewModalTaskScale).isEqualTo(1.1000472f)
-    }
 }
\ No newline at end of file
diff --git a/quickstep/tests/src/com/android/quickstep/DeviceProfilePhoneTest.kt b/quickstep/tests/src/com/android/quickstep/DeviceProfilePhoneTest.kt
index f91d03d..e588c71 100644
--- a/quickstep/tests/src/com/android/quickstep/DeviceProfilePhoneTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/DeviceProfilePhoneTest.kt
@@ -483,114 +483,4 @@
     fun hotseatBarEndOffset() {
         assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
     }
-
-    @Test
-    fun overviewGridRectLeft() {
-        assertThat(dp.overviewGridRect.left).isEqualTo(0)
-    }
-
-    @Test
-    fun overviewGridRectTop() {
-        assertThat(dp.overviewGridRect.top).isEqualTo(280)
-    }
-
-    @Test
-    fun overviewGridRectRight() {
-        assertThat(dp.overviewGridRect.right).isEqualTo(1440)
-    }
-
-    @Test
-    fun overviewGridRectBottom() {
-        assertThat(dp.overviewGridRect.bottom).isEqualTo(2768)
-    }
-
-    @Test
-    fun taskDimensionX() {
-        assertThat(dp.taskDimension.x).isEqualTo(1440)
-    }
-
-    @Test
-    fun taskDimensionY() {
-        assertThat(dp.taskDimension.y).isEqualTo(3120)
-    }
-
-    @Test
-    fun overviewTaskRectLeft() {
-        assertThat(dp.overviewTaskRect.left).isEqualTo(231)
-    }
-
-    @Test
-    fun overviewTaskRectTop() {
-        assertThat(dp.overviewTaskRect.top).isEqualTo(414)
-    }
-
-    @Test
-    fun overviewTaskRectRight() {
-        assertThat(dp.overviewTaskRect.right).isEqualTo(1209)
-    }
-
-    @Test
-    fun overviewTaskRectBottom() {
-        assertThat(dp.overviewTaskRect.bottom).isEqualTo(2533)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionX() {
-        assertThat(dp.overviewGridTaskDimension.x).isEqualTo(450)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionY() {
-        assertThat(dp.overviewGridTaskDimension.y).isEqualTo(976)
-    }
-
-    @Test
-    fun overviewModalTaskRectLeft() {
-        assertThat(dp.overviewModalTaskRect.left).isEqualTo(182)
-    }
-
-    @Test
-    fun overviewModalTaskRectTop() {
-        assertThat(dp.overviewModalTaskRect.top).isEqualTo(202)
-    }
-
-    @Test
-    fun overviewModalTaskRectRight() {
-        assertThat(dp.overviewModalTaskRect.right).isEqualTo(1258)
-    }
-
-    @Test
-    fun overviewModalTaskRectBottom() {
-        assertThat(dp.overviewModalTaskRect.bottom).isEqualTo(2533)
-    }
-
-    @Test
-    fun getGridTaskRectLeft() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).left).isEqualTo(759)
-    }
-
-    @Test
-    fun getGridTaskRectTop() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).top).isEqualTo(414)
-    }
-
-    @Test
-    fun getGridTaskRectRight() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).right).isEqualTo(1209)
-    }
-
-    @Test
-    fun getGridTaskRectBottom() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).bottom).isEqualTo(1390)
-    }
-
-    @Test
-    fun overviewTaskScale() {
-        assertThat(dp.overviewTaskWorkspaceScale).isEqualTo(0.86595833f)
-    }
-
-    @Test
-    fun overviewModalTaskScale() {
-        assertThat(dp.overviewModalTaskScale).isEqualTo(1.1000472f)
-    }
 }
\ No newline at end of file
diff --git a/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletLandscape3ButtonTest.kt b/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletLandscape3ButtonTest.kt
index 2d9e263..3f8d2fb 100644
--- a/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletLandscape3ButtonTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletLandscape3ButtonTest.kt
@@ -483,114 +483,4 @@
     fun hotseatBarEndOffset() {
         assertThat(dp.hotseatBarEndOffset).isEqualTo(428)
     }
-
-    @Test
-    fun overviewGridRectLeft() {
-        assertThat(dp.overviewGridRect.left).isEqualTo(128)
-    }
-
-    @Test
-    fun overviewGridRectTop() {
-        assertThat(dp.overviewGridRect.top).isEqualTo(160)
-    }
-
-    @Test
-    fun overviewGridRectRight() {
-        assertThat(dp.overviewGridRect.right).isEqualTo(2432)
-    }
-
-    @Test
-    fun overviewGridRectBottom() {
-        assertThat(dp.overviewGridRect.bottom).isEqualTo(1340)
-    }
-
-    @Test
-    fun taskDimensionX() {
-        assertThat(dp.taskDimension.x).isEqualTo(2560)
-    }
-
-    @Test
-    fun taskDimensionY() {
-        assertThat(dp.taskDimension.y).isEqualTo(1480)
-    }
-
-    @Test
-    fun overviewTaskRectLeft() {
-        assertThat(dp.overviewTaskRect.left).isEqualTo(384)
-    }
-
-    @Test
-    fun overviewTaskRectTop() {
-        assertThat(dp.overviewTaskRect.top).isEqualTo(232)
-    }
-
-    @Test
-    fun overviewTaskRectRight() {
-        assertThat(dp.overviewTaskRect.right).isEqualTo(2176)
-    }
-
-    @Test
-    fun overviewTaskRectBottom() {
-        assertThat(dp.overviewTaskRect.bottom).isEqualTo(1268)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionX() {
-        assertThat(dp.overviewGridTaskDimension.x).isEqualTo(723)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionY() {
-        assertThat(dp.overviewGridTaskDimension.y).isEqualTo(418)
-    }
-
-    @Test
-    fun overviewModalTaskRectLeft() {
-        assertThat(dp.overviewModalTaskRect.left).isEqualTo(294)
-    }
-
-    @Test
-    fun overviewModalTaskRectTop() {
-        assertThat(dp.overviewModalTaskRect.top).isEqualTo(128)
-    }
-
-    @Test
-    fun overviewModalTaskRectRight() {
-        assertThat(dp.overviewModalTaskRect.right).isEqualTo(2266)
-    }
-
-    @Test
-    fun overviewModalTaskRectBottom() {
-        assertThat(dp.overviewModalTaskRect.bottom).isEqualTo(1268)
-    }
-
-    @Test
-    fun getGridTaskRectLeft() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).left).isEqualTo(1453)
-    }
-
-    @Test
-    fun getGridTaskRectTop() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).top).isEqualTo(232)
-    }
-
-    @Test
-    fun getGridTaskRectRight() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).right).isEqualTo(2176)
-    }
-
-    @Test
-    fun getGridTaskRectBottom() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).bottom).isEqualTo(650)
-    }
-
-    @Test
-    fun overviewTaskScale() {
-        assertThat(dp.overviewTaskWorkspaceScale).isEqualTo(0.7363184f)
-    }
-
-    @Test
-    fun overviewModalTaskScale() {
-        assertThat(dp.overviewModalTaskScale).isEqualTo(1.1003861f)
-    }
 }
\ No newline at end of file
diff --git a/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletLandscapeTest.kt b/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletLandscapeTest.kt
index 3add2c7..456ed2c 100644
--- a/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletLandscapeTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletLandscapeTest.kt
@@ -483,114 +483,4 @@
     fun hotseatBarEndOffset() {
         assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
     }
-
-    @Test
-    fun overviewGridRectLeft() {
-        assertThat(dp.overviewGridRect.left).isEqualTo(128)
-    }
-
-    @Test
-    fun overviewGridRectTop() {
-        assertThat(dp.overviewGridRect.top).isEqualTo(160)
-    }
-
-    @Test
-    fun overviewGridRectRight() {
-        assertThat(dp.overviewGridRect.right).isEqualTo(2432)
-    }
-
-    @Test
-    fun overviewGridRectBottom() {
-        assertThat(dp.overviewGridRect.bottom).isEqualTo(1416)
-    }
-
-    @Test
-    fun taskDimensionX() {
-        assertThat(dp.taskDimension.x).isEqualTo(2560)
-    }
-
-    @Test
-    fun taskDimensionY() {
-        assertThat(dp.taskDimension.y).isEqualTo(1480)
-    }
-
-    @Test
-    fun overviewTaskRectLeft() {
-        assertThat(dp.overviewTaskRect.left).isEqualTo(384)
-    }
-
-    @Test
-    fun overviewTaskRectTop() {
-        assertThat(dp.overviewTaskRect.top).isEqualTo(270)
-    }
-
-    @Test
-    fun overviewTaskRectRight() {
-        assertThat(dp.overviewTaskRect.right).isEqualTo(2176)
-    }
-
-    @Test
-    fun overviewTaskRectBottom() {
-        assertThat(dp.overviewTaskRect.bottom).isEqualTo(1306)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionX() {
-        assertThat(dp.overviewGridTaskDimension.x).isEqualTo(723)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionY() {
-        assertThat(dp.overviewGridTaskDimension.y).isEqualTo(418)
-    }
-
-    @Test
-    fun overviewModalTaskRectLeft() {
-        assertThat(dp.overviewModalTaskRect.left).isEqualTo(294)
-    }
-
-    @Test
-    fun overviewModalTaskRectTop() {
-        assertThat(dp.overviewModalTaskRect.top).isEqualTo(166)
-    }
-
-    @Test
-    fun overviewModalTaskRectRight() {
-        assertThat(dp.overviewModalTaskRect.right).isEqualTo(2266)
-    }
-
-    @Test
-    fun overviewModalTaskRectBottom() {
-        assertThat(dp.overviewModalTaskRect.bottom).isEqualTo(1306)
-    }
-
-    @Test
-    fun getGridTaskRectLeft() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).left).isEqualTo(1453)
-    }
-
-    @Test
-    fun getGridTaskRectTop() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).top).isEqualTo(270)
-    }
-
-    @Test
-    fun getGridTaskRectRight() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).right).isEqualTo(2176)
-    }
-
-    @Test
-    fun getGridTaskRectBottom() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).bottom).isEqualTo(688)
-    }
-
-    @Test
-    fun overviewTaskScale() {
-        assertThat(dp.overviewTaskWorkspaceScale).isEqualTo(0.7363184f)
-    }
-
-    @Test
-    fun overviewModalTaskScale() {
-        assertThat(dp.overviewModalTaskScale).isEqualTo(1.1003861f)
-    }
 }
\ No newline at end of file
diff --git a/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletPortrait3ButtonTest.kt b/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletPortrait3ButtonTest.kt
index 7f0d6ca..b53b36a 100644
--- a/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletPortrait3ButtonTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletPortrait3ButtonTest.kt
@@ -483,114 +483,4 @@
     fun hotseatBarEndOffset() {
         assertThat(dp.hotseatBarEndOffset).isEqualTo(428)
     }
-
-    @Test
-    fun overviewGridRectLeft() {
-        assertThat(dp.overviewGridRect.left).isEqualTo(128)
-    }
-
-    @Test
-    fun overviewGridRectTop() {
-        assertThat(dp.overviewGridRect.top).isEqualTo(160)
-    }
-
-    @Test
-    fun overviewGridRectRight() {
-        assertThat(dp.overviewGridRect.right).isEqualTo(1472)
-    }
-
-    @Test
-    fun overviewGridRectBottom() {
-        assertThat(dp.overviewGridRect.bottom).isEqualTo(2292)
-    }
-
-    @Test
-    fun taskDimensionX() {
-        assertThat(dp.taskDimension.x).isEqualTo(1600)
-    }
-
-    @Test
-    fun taskDimensionY() {
-        assertThat(dp.taskDimension.y).isEqualTo(2440)
-    }
-
-    @Test
-    fun overviewTaskRectLeft() {
-        assertThat(dp.overviewTaskRect.left).isEqualTo(240)
-    }
-
-    @Test
-    fun overviewTaskRectTop() {
-        assertThat(dp.overviewTaskRect.top).isEqualTo(372)
-    }
-
-    @Test
-    fun overviewTaskRectRight() {
-        assertThat(dp.overviewTaskRect.right).isEqualTo(1360)
-    }
-
-    @Test
-    fun overviewTaskRectBottom() {
-        assertThat(dp.overviewTaskRect.bottom).isEqualTo(2080)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionX() {
-        assertThat(dp.overviewGridTaskDimension.x).isEqualTo(494)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionY() {
-        assertThat(dp.overviewGridTaskDimension.y).isEqualTo(754)
-    }
-
-    @Test
-    fun overviewModalTaskRectLeft() {
-        assertThat(dp.overviewModalTaskRect.left).isEqualTo(184)
-    }
-
-    @Test
-    fun overviewModalTaskRectTop() {
-        assertThat(dp.overviewModalTaskRect.top).isEqualTo(201)
-    }
-
-    @Test
-    fun overviewModalTaskRectRight() {
-        assertThat(dp.overviewModalTaskRect.right).isEqualTo(1416)
-    }
-
-    @Test
-    fun overviewModalTaskRectBottom() {
-        assertThat(dp.overviewModalTaskRect.bottom).isEqualTo(2080)
-    }
-
-    @Test
-    fun getGridTaskRectLeft() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).left).isEqualTo(866)
-    }
-
-    @Test
-    fun getGridTaskRectTop() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).top).isEqualTo(372)
-    }
-
-    @Test
-    fun getGridTaskRectRight() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).right).isEqualTo(1360)
-    }
-
-    @Test
-    fun getGridTaskRectBottom() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).bottom).isEqualTo(1126)
-    }
-
-    @Test
-    fun overviewTaskScale() {
-        assertThat(dp.overviewTaskWorkspaceScale).isEqualTo(0.7686769f)
-    }
-
-    @Test
-    fun overviewModalTaskScale() {
-        assertThat(dp.overviewModalTaskScale).isEqualTo(1.1f)
-    }
 }
\ No newline at end of file
diff --git a/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletPortraitTest.kt b/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletPortraitTest.kt
index 1a709e6..4be3e45 100644
--- a/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletPortraitTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/DeviceProfileTabletPortraitTest.kt
@@ -483,114 +483,4 @@
     fun hotseatBarEndOffset() {
         assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
     }
-
-    @Test
-    fun overviewGridRectLeft() {
-        assertThat(dp.overviewGridRect.left).isEqualTo(128)
-    }
-
-    @Test
-    fun overviewGridRectTop() {
-        assertThat(dp.overviewGridRect.top).isEqualTo(160)
-    }
-
-    @Test
-    fun overviewGridRectRight() {
-        assertThat(dp.overviewGridRect.right).isEqualTo(1472)
-    }
-
-    @Test
-    fun overviewGridRectBottom() {
-        assertThat(dp.overviewGridRect.bottom).isEqualTo(2368)
-    }
-
-    @Test
-    fun taskDimensionX() {
-        assertThat(dp.taskDimension.x).isEqualTo(1600)
-    }
-
-    @Test
-    fun taskDimensionY() {
-        assertThat(dp.taskDimension.y).isEqualTo(2440)
-    }
-
-    @Test
-    fun overviewTaskRectLeft() {
-        assertThat(dp.overviewTaskRect.left).isEqualTo(240)
-    }
-
-    @Test
-    fun overviewTaskRectTop() {
-        assertThat(dp.overviewTaskRect.top).isEqualTo(410)
-    }
-
-    @Test
-    fun overviewTaskRectRight() {
-        assertThat(dp.overviewTaskRect.right).isEqualTo(1360)
-    }
-
-    @Test
-    fun overviewTaskRectBottom() {
-        assertThat(dp.overviewTaskRect.bottom).isEqualTo(2118)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionX() {
-        assertThat(dp.overviewGridTaskDimension.x).isEqualTo(494)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionY() {
-        assertThat(dp.overviewGridTaskDimension.y).isEqualTo(754)
-    }
-
-    @Test
-    fun overviewModalTaskRectLeft() {
-        assertThat(dp.overviewModalTaskRect.left).isEqualTo(184)
-    }
-
-    @Test
-    fun overviewModalTaskRectTop() {
-        assertThat(dp.overviewModalTaskRect.top).isEqualTo(239)
-    }
-
-    @Test
-    fun overviewModalTaskRectRight() {
-        assertThat(dp.overviewModalTaskRect.right).isEqualTo(1416)
-    }
-
-    @Test
-    fun overviewModalTaskRectBottom() {
-        assertThat(dp.overviewModalTaskRect.bottom).isEqualTo(2118)
-    }
-
-    @Test
-    fun getGridTaskRectLeft() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).left).isEqualTo(866)
-    }
-
-    @Test
-    fun getGridTaskRectTop() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).top).isEqualTo(410)
-    }
-
-    @Test
-    fun getGridTaskRectRight() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).right).isEqualTo(1360)
-    }
-
-    @Test
-    fun getGridTaskRectBottom() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).bottom).isEqualTo(1164)
-    }
-
-    @Test
-    fun overviewTaskScale() {
-        assertThat(dp.overviewTaskWorkspaceScale).isEqualTo(0.7686769f)
-    }
-
-    @Test
-    fun overviewModalTaskScale() {
-        assertThat(dp.overviewModalTaskScale).isEqualTo(1.1f)
-    }
 }
\ No newline at end of file
diff --git a/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelLandscape3ButtonTest.kt b/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelLandscape3ButtonTest.kt
index 0eeb23d..274ca95 100644
--- a/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelLandscape3ButtonTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelLandscape3ButtonTest.kt
@@ -483,114 +483,4 @@
     fun hotseatBarEndOffset() {
         assertThat(dp.hotseatBarEndOffset).isEqualTo(428)
     }
-
-    @Test
-    fun overviewGridRectLeft() {
-        assertThat(dp.overviewGridRect.left).isEqualTo(128)
-    }
-
-    @Test
-    fun overviewGridRectTop() {
-        assertThat(dp.overviewGridRect.top).isEqualTo(160)
-    }
-
-    @Test
-    fun overviewGridRectRight() {
-        assertThat(dp.overviewGridRect.right).isEqualTo(2432)
-    }
-
-    @Test
-    fun overviewGridRectBottom() {
-        assertThat(dp.overviewGridRect.bottom).isEqualTo(1340)
-    }
-
-    @Test
-    fun taskDimensionX() {
-        assertThat(dp.taskDimension.x).isEqualTo(2560)
-    }
-
-    @Test
-    fun taskDimensionY() {
-        assertThat(dp.taskDimension.y).isEqualTo(1480)
-    }
-
-    @Test
-    fun overviewTaskRectLeft() {
-        assertThat(dp.overviewTaskRect.left).isEqualTo(384)
-    }
-
-    @Test
-    fun overviewTaskRectTop() {
-        assertThat(dp.overviewTaskRect.top).isEqualTo(232)
-    }
-
-    @Test
-    fun overviewTaskRectRight() {
-        assertThat(dp.overviewTaskRect.right).isEqualTo(2176)
-    }
-
-    @Test
-    fun overviewTaskRectBottom() {
-        assertThat(dp.overviewTaskRect.bottom).isEqualTo(1268)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionX() {
-        assertThat(dp.overviewGridTaskDimension.x).isEqualTo(723)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionY() {
-        assertThat(dp.overviewGridTaskDimension.y).isEqualTo(418)
-    }
-
-    @Test
-    fun overviewModalTaskRectLeft() {
-        assertThat(dp.overviewModalTaskRect.left).isEqualTo(294)
-    }
-
-    @Test
-    fun overviewModalTaskRectTop() {
-        assertThat(dp.overviewModalTaskRect.top).isEqualTo(128)
-    }
-
-    @Test
-    fun overviewModalTaskRectRight() {
-        assertThat(dp.overviewModalTaskRect.right).isEqualTo(2266)
-    }
-
-    @Test
-    fun overviewModalTaskRectBottom() {
-        assertThat(dp.overviewModalTaskRect.bottom).isEqualTo(1268)
-    }
-
-    @Test
-    fun getGridTaskRectLeft() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).left).isEqualTo(1453)
-    }
-
-    @Test
-    fun getGridTaskRectTop() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).top).isEqualTo(232)
-    }
-
-    @Test
-    fun getGridTaskRectRight() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).right).isEqualTo(2176)
-    }
-
-    @Test
-    fun getGridTaskRectBottom() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).bottom).isEqualTo(650)
-    }
-
-    @Test
-    fun overviewTaskScale() {
-        assertThat(dp.overviewTaskWorkspaceScale).isEqualTo(0.8526749f)
-    }
-
-    @Test
-    fun overviewModalTaskScale() {
-        assertThat(dp.overviewModalTaskScale).isEqualTo(1.1003861f)
-    }
 }
\ No newline at end of file
diff --git a/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelLandscapeTest.kt b/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelLandscapeTest.kt
index 7bf53d7..ba3ef55 100644
--- a/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelLandscapeTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelLandscapeTest.kt
@@ -483,114 +483,4 @@
     fun hotseatBarEndOffset() {
         assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
     }
-
-    @Test
-    fun overviewGridRectLeft() {
-        assertThat(dp.overviewGridRect.left).isEqualTo(128)
-    }
-
-    @Test
-    fun overviewGridRectTop() {
-        assertThat(dp.overviewGridRect.top).isEqualTo(160)
-    }
-
-    @Test
-    fun overviewGridRectRight() {
-        assertThat(dp.overviewGridRect.right).isEqualTo(2432)
-    }
-
-    @Test
-    fun overviewGridRectBottom() {
-        assertThat(dp.overviewGridRect.bottom).isEqualTo(1416)
-    }
-
-    @Test
-    fun taskDimensionX() {
-        assertThat(dp.taskDimension.x).isEqualTo(2560)
-    }
-
-    @Test
-    fun taskDimensionY() {
-        assertThat(dp.taskDimension.y).isEqualTo(1480)
-    }
-
-    @Test
-    fun overviewTaskRectLeft() {
-        assertThat(dp.overviewTaskRect.left).isEqualTo(384)
-    }
-
-    @Test
-    fun overviewTaskRectTop() {
-        assertThat(dp.overviewTaskRect.top).isEqualTo(270)
-    }
-
-    @Test
-    fun overviewTaskRectRight() {
-        assertThat(dp.overviewTaskRect.right).isEqualTo(2176)
-    }
-
-    @Test
-    fun overviewTaskRectBottom() {
-        assertThat(dp.overviewTaskRect.bottom).isEqualTo(1306)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionX() {
-        assertThat(dp.overviewGridTaskDimension.x).isEqualTo(723)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionY() {
-        assertThat(dp.overviewGridTaskDimension.y).isEqualTo(418)
-    }
-
-    @Test
-    fun overviewModalTaskRectLeft() {
-        assertThat(dp.overviewModalTaskRect.left).isEqualTo(294)
-    }
-
-    @Test
-    fun overviewModalTaskRectTop() {
-        assertThat(dp.overviewModalTaskRect.top).isEqualTo(166)
-    }
-
-    @Test
-    fun overviewModalTaskRectRight() {
-        assertThat(dp.overviewModalTaskRect.right).isEqualTo(2266)
-    }
-
-    @Test
-    fun overviewModalTaskRectBottom() {
-        assertThat(dp.overviewModalTaskRect.bottom).isEqualTo(1306)
-    }
-
-    @Test
-    fun getGridTaskRectLeft() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).left).isEqualTo(1453)
-    }
-
-    @Test
-    fun getGridTaskRectTop() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).top).isEqualTo(270)
-    }
-
-    @Test
-    fun getGridTaskRectRight() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).right).isEqualTo(2176)
-    }
-
-    @Test
-    fun getGridTaskRectBottom() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).bottom).isEqualTo(688)
-    }
-
-    @Test
-    fun overviewTaskScale() {
-        assertThat(dp.overviewTaskWorkspaceScale).isEqualTo(0.8526749f)
-    }
-
-    @Test
-    fun overviewModalTaskScale() {
-        assertThat(dp.overviewModalTaskScale).isEqualTo(1.1003861f)
-    }
 }
\ No newline at end of file
diff --git a/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelPortrait3ButtonTest.kt b/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelPortrait3ButtonTest.kt
index 9b6d7d5..7dd95f9 100644
--- a/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelPortrait3ButtonTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelPortrait3ButtonTest.kt
@@ -483,114 +483,4 @@
     fun hotseatBarEndOffset() {
         assertThat(dp.hotseatBarEndOffset).isEqualTo(428)
     }
-
-    @Test
-    fun overviewGridRectLeft() {
-        assertThat(dp.overviewGridRect.left).isEqualTo(128)
-    }
-
-    @Test
-    fun overviewGridRectTop() {
-        assertThat(dp.overviewGridRect.top).isEqualTo(160)
-    }
-
-    @Test
-    fun overviewGridRectRight() {
-        assertThat(dp.overviewGridRect.right).isEqualTo(1472)
-    }
-
-    @Test
-    fun overviewGridRectBottom() {
-        assertThat(dp.overviewGridRect.bottom).isEqualTo(2292)
-    }
-
-    @Test
-    fun taskDimensionX() {
-        assertThat(dp.taskDimension.x).isEqualTo(1600)
-    }
-
-    @Test
-    fun taskDimensionY() {
-        assertThat(dp.taskDimension.y).isEqualTo(2440)
-    }
-
-    @Test
-    fun overviewTaskRectLeft() {
-        assertThat(dp.overviewTaskRect.left).isEqualTo(240)
-    }
-
-    @Test
-    fun overviewTaskRectTop() {
-        assertThat(dp.overviewTaskRect.top).isEqualTo(372)
-    }
-
-    @Test
-    fun overviewTaskRectRight() {
-        assertThat(dp.overviewTaskRect.right).isEqualTo(1360)
-    }
-
-    @Test
-    fun overviewTaskRectBottom() {
-        assertThat(dp.overviewTaskRect.bottom).isEqualTo(2080)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionX() {
-        assertThat(dp.overviewGridTaskDimension.x).isEqualTo(494)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionY() {
-        assertThat(dp.overviewGridTaskDimension.y).isEqualTo(754)
-    }
-
-    @Test
-    fun overviewModalTaskRectLeft() {
-        assertThat(dp.overviewModalTaskRect.left).isEqualTo(184)
-    }
-
-    @Test
-    fun overviewModalTaskRectTop() {
-        assertThat(dp.overviewModalTaskRect.top).isEqualTo(201)
-    }
-
-    @Test
-    fun overviewModalTaskRectRight() {
-        assertThat(dp.overviewModalTaskRect.right).isEqualTo(1416)
-    }
-
-    @Test
-    fun overviewModalTaskRectBottom() {
-        assertThat(dp.overviewModalTaskRect.bottom).isEqualTo(2080)
-    }
-
-    @Test
-    fun getGridTaskRectLeft() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).left).isEqualTo(866)
-    }
-
-    @Test
-    fun getGridTaskRectTop() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).top).isEqualTo(372)
-    }
-
-    @Test
-    fun getGridTaskRectRight() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).right).isEqualTo(1360)
-    }
-
-    @Test
-    fun getGridTaskRectBottom() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).bottom).isEqualTo(1126)
-    }
-
-    @Test
-    fun overviewTaskScale() {
-        assertThat(dp.overviewTaskWorkspaceScale).isEqualTo(0.7874597f)
-    }
-
-    @Test
-    fun overviewModalTaskScale() {
-        assertThat(dp.overviewModalTaskScale).isEqualTo(1.1f)
-    }
 }
\ No newline at end of file
diff --git a/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelPortraitTest.kt b/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelPortraitTest.kt
index 6702eb5..0c5968e 100644
--- a/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelPortraitTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/DeviceProfileTwoPanelPortraitTest.kt
@@ -483,114 +483,4 @@
     fun hotseatBarEndOffset() {
         assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
     }
-
-    @Test
-    fun overviewGridRectLeft() {
-        assertThat(dp.overviewGridRect.left).isEqualTo(128)
-    }
-
-    @Test
-    fun overviewGridRectTop() {
-        assertThat(dp.overviewGridRect.top).isEqualTo(160)
-    }
-
-    @Test
-    fun overviewGridRectRight() {
-        assertThat(dp.overviewGridRect.right).isEqualTo(1472)
-    }
-
-    @Test
-    fun overviewGridRectBottom() {
-        assertThat(dp.overviewGridRect.bottom).isEqualTo(2368)
-    }
-
-    @Test
-    fun taskDimensionX() {
-        assertThat(dp.taskDimension.x).isEqualTo(1600)
-    }
-
-    @Test
-    fun taskDimensionY() {
-        assertThat(dp.taskDimension.y).isEqualTo(2440)
-    }
-
-    @Test
-    fun overviewTaskRectLeft() {
-        assertThat(dp.overviewTaskRect.left).isEqualTo(240)
-    }
-
-    @Test
-    fun overviewTaskRectTop() {
-        assertThat(dp.overviewTaskRect.top).isEqualTo(410)
-    }
-
-    @Test
-    fun overviewTaskRectRight() {
-        assertThat(dp.overviewTaskRect.right).isEqualTo(1360)
-    }
-
-    @Test
-    fun overviewTaskRectBottom() {
-        assertThat(dp.overviewTaskRect.bottom).isEqualTo(2118)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionX() {
-        assertThat(dp.overviewGridTaskDimension.x).isEqualTo(494)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionY() {
-        assertThat(dp.overviewGridTaskDimension.y).isEqualTo(754)
-    }
-
-    @Test
-    fun overviewModalTaskRectLeft() {
-        assertThat(dp.overviewModalTaskRect.left).isEqualTo(184)
-    }
-
-    @Test
-    fun overviewModalTaskRectTop() {
-        assertThat(dp.overviewModalTaskRect.top).isEqualTo(239)
-    }
-
-    @Test
-    fun overviewModalTaskRectRight() {
-        assertThat(dp.overviewModalTaskRect.right).isEqualTo(1416)
-    }
-
-    @Test
-    fun overviewModalTaskRectBottom() {
-        assertThat(dp.overviewModalTaskRect.bottom).isEqualTo(2118)
-    }
-
-    @Test
-    fun getGridTaskRectLeft() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).left).isEqualTo(866)
-    }
-
-    @Test
-    fun getGridTaskRectTop() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).top).isEqualTo(410)
-    }
-
-    @Test
-    fun getGridTaskRectRight() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).right).isEqualTo(1360)
-    }
-
-    @Test
-    fun getGridTaskRectBottom() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).bottom).isEqualTo(1164)
-    }
-
-    @Test
-    fun overviewTaskScale() {
-        assertThat(dp.overviewTaskWorkspaceScale).isEqualTo(0.7874597f)
-    }
-
-    @Test
-    fun overviewModalTaskScale() {
-        assertThat(dp.overviewModalTaskScale).isEqualTo(1.1f)
-    }
 }
\ No newline at end of file
diff --git a/quickstep/tests/src/com/android/quickstep/DeviceProfileVerticalBar3ButtonTest.kt b/quickstep/tests/src/com/android/quickstep/DeviceProfileVerticalBar3ButtonTest.kt
index 7e0c5f3..2bad6bb 100644
--- a/quickstep/tests/src/com/android/quickstep/DeviceProfileVerticalBar3ButtonTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/DeviceProfileVerticalBar3ButtonTest.kt
@@ -483,114 +483,4 @@
     fun hotseatBarEndOffset() {
         assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
     }
-
-    @Test
-    fun overviewGridRectLeft() {
-        assertThat(dp.overviewGridRect.left).isEqualTo(0)
-    }
-
-    @Test
-    fun overviewGridRectTop() {
-        assertThat(dp.overviewGridRect.top).isEqualTo(280)
-    }
-
-    @Test
-    fun overviewGridRectRight() {
-        assertThat(dp.overviewGridRect.right).isEqualTo(3120)
-    }
-
-    @Test
-    fun overviewGridRectBottom() {
-        assertThat(dp.overviewGridRect.bottom).isEqualTo(1130)
-    }
-
-    @Test
-    fun taskDimensionX() {
-        assertThat(dp.taskDimension.x).isEqualTo(3120)
-    }
-
-    @Test
-    fun taskDimensionY() {
-        assertThat(dp.taskDimension.y).isEqualTo(1440)
-    }
-
-    @Test
-    fun overviewTaskRectLeft() {
-        assertThat(dp.overviewTaskRect.left).isEqualTo(747)
-    }
-
-    @Test
-    fun overviewTaskRectTop() {
-        assertThat(dp.overviewTaskRect.top).isEqualTo(280)
-    }
-
-    @Test
-    fun overviewTaskRectRight() {
-        assertThat(dp.overviewTaskRect.right).isEqualTo(2372)
-    }
-
-    @Test
-    fun overviewTaskRectBottom() {
-        assertThat(dp.overviewTaskRect.bottom).isEqualTo(1030)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionX() {
-        assertThat(dp.overviewGridTaskDimension.x).isEqualTo(631)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionY() {
-        assertThat(dp.overviewGridTaskDimension.y).isEqualTo(291)
-    }
-
-    @Test
-    fun overviewModalTaskRectLeft() {
-        assertThat(dp.overviewModalTaskRect.left).isEqualTo(666)
-    }
-
-    @Test
-    fun overviewModalTaskRectTop() {
-        assertThat(dp.overviewModalTaskRect.top).isEqualTo(205)
-    }
-
-    @Test
-    fun overviewModalTaskRectRight() {
-        assertThat(dp.overviewModalTaskRect.right).isEqualTo(2454)
-    }
-
-    @Test
-    fun overviewModalTaskRectBottom() {
-        assertThat(dp.overviewModalTaskRect.bottom).isEqualTo(1030)
-    }
-
-    @Test
-    fun getGridTaskRectLeft() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).left).isEqualTo(1741)
-    }
-
-    @Test
-    fun getGridTaskRectTop() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).top).isEqualTo(280)
-    }
-
-    @Test
-    fun getGridTaskRectRight() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).right).isEqualTo(2372)
-    }
-
-    @Test
-    fun getGridTaskRectBottom() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).bottom).isEqualTo(571)
-    }
-
-    @Test
-    fun overviewTaskScale() {
-        assertThat(dp.overviewTaskWorkspaceScale).isEqualTo(0.5597015f)
-    }
-
-    @Test
-    fun overviewModalTaskScale() {
-        assertThat(dp.overviewModalTaskScale).isEqualTo(1.1f)
-    }
 }
\ No newline at end of file
diff --git a/quickstep/tests/src/com/android/quickstep/DeviceProfileVerticalBarTest.kt b/quickstep/tests/src/com/android/quickstep/DeviceProfileVerticalBarTest.kt
index 9580458..6256a43 100644
--- a/quickstep/tests/src/com/android/quickstep/DeviceProfileVerticalBarTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/DeviceProfileVerticalBarTest.kt
@@ -483,114 +483,4 @@
     fun hotseatBarEndOffset() {
         assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
     }
-
-    @Test
-    fun overviewGridRectLeft() {
-        assertThat(dp.overviewGridRect.left).isEqualTo(0)
-    }
-
-    @Test
-    fun overviewGridRectTop() {
-        assertThat(dp.overviewGridRect.top).isEqualTo(280)
-    }
-
-    @Test
-    fun overviewGridRectRight() {
-        assertThat(dp.overviewGridRect.right).isEqualTo(3120)
-    }
-
-    @Test
-    fun overviewGridRectBottom() {
-        assertThat(dp.overviewGridRect.bottom).isEqualTo(1130)
-    }
-
-    @Test
-    fun taskDimensionX() {
-        assertThat(dp.taskDimension.x).isEqualTo(3120)
-    }
-
-    @Test
-    fun taskDimensionY() {
-        assertThat(dp.taskDimension.y).isEqualTo(1440)
-    }
-
-    @Test
-    fun overviewTaskRectLeft() {
-        assertThat(dp.overviewTaskRect.left).isEqualTo(747)
-    }
-
-    @Test
-    fun overviewTaskRectTop() {
-        assertThat(dp.overviewTaskRect.top).isEqualTo(280)
-    }
-
-    @Test
-    fun overviewTaskRectRight() {
-        assertThat(dp.overviewTaskRect.right).isEqualTo(2372)
-    }
-
-    @Test
-    fun overviewTaskRectBottom() {
-        assertThat(dp.overviewTaskRect.bottom).isEqualTo(1030)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionX() {
-        assertThat(dp.overviewGridTaskDimension.x).isEqualTo(631)
-    }
-
-    @Test
-    fun overviewGridTaskDimensionY() {
-        assertThat(dp.overviewGridTaskDimension.y).isEqualTo(291)
-    }
-
-    @Test
-    fun overviewModalTaskRectLeft() {
-        assertThat(dp.overviewModalTaskRect.left).isEqualTo(666)
-    }
-
-    @Test
-    fun overviewModalTaskRectTop() {
-        assertThat(dp.overviewModalTaskRect.top).isEqualTo(205)
-    }
-
-    @Test
-    fun overviewModalTaskRectRight() {
-        assertThat(dp.overviewModalTaskRect.right).isEqualTo(2454)
-    }
-
-    @Test
-    fun overviewModalTaskRectBottom() {
-        assertThat(dp.overviewModalTaskRect.bottom).isEqualTo(1030)
-    }
-
-    @Test
-    fun getGridTaskRectLeft() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).left).isEqualTo(1741)
-    }
-
-    @Test
-    fun getGridTaskRectTop() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).top).isEqualTo(280)
-    }
-
-    @Test
-    fun getGridTaskRectRight() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).right).isEqualTo(2372)
-    }
-
-    @Test
-    fun getGridTaskRectBottom() {
-        assertThat(dp.getOverviewGridTaskRect(isRecentsRtl).bottom).isEqualTo(571)
-    }
-
-    @Test
-    fun overviewTaskScale() {
-        assertThat(dp.overviewTaskWorkspaceScale).isEqualTo(0.5597015f)
-    }
-
-    @Test
-    fun overviewModalTaskScale() {
-        assertThat(dp.overviewModalTaskScale).isEqualTo(1.1f)
-    }
 }
\ No newline at end of file
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index ff4fe4f..302efcb 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -137,8 +137,7 @@
     <string name="item_removed" msgid="851119963877842327">"Elemento rimosso"</string>
     <string name="undo" msgid="4151576204245173321">"Annulla"</string>
     <string name="action_move" msgid="4339390619886385032">"Sposta elemento"</string>
-    <!-- no translation found for move_to_empty_cell_description (5254852678218206889) -->
-    <skip />
+    <string name="move_to_empty_cell_description" msgid="5254852678218206889">"Spostati alla riga <xliff:g id="NUMBER_0">%1$s</xliff:g> colonna <xliff:g id="NUMBER_1">%2$s</xliff:g> in <xliff:g id="STRING">%3$s</xliff:g>"</string>
     <string name="move_to_position" msgid="6750008980455459790">"Sposta nella posizione <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
     <string name="move_to_hotseat_position" msgid="6295412897075147808">"Sposta nella posizione <xliff:g id="NUMBER">%1$s</xliff:g> dei preferiti"</string>
     <string name="item_moved" msgid="4606538322571412879">"Elemento spostato"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 1b3d2b1..6061ea5 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -28,75 +28,75 @@
     <string name="shortcut_not_available" msgid="2536503539825726397">"Comanda rapidă nu este disponibilă"</string>
     <string name="home_screen" msgid="5629429142036709174">"Pagina de pornire"</string>
     <string name="recent_task_option_split_screen" msgid="6690461455618725183">"Ecran împărțit"</string>
-    <string name="split_screen_position_top" msgid="1504965011158689649">"Împărțiți în sus"</string>
-    <string name="split_screen_position_left" msgid="7537793098851830883">"Împărțiți în stânga"</string>
-    <string name="split_screen_position_right" msgid="1569377524925193369">"Împărțiți în dreapta"</string>
+    <string name="split_screen_position_top" msgid="1504965011158689649">"Împarte în sus"</string>
+    <string name="split_screen_position_left" msgid="7537793098851830883">"Împarte în stânga"</string>
+    <string name="split_screen_position_right" msgid="1569377524925193369">"Împarte în dreapta"</string>
     <string name="split_app_info_accessibility" msgid="5475288491241414932">"Informații despre aplicație pentru %1$s"</string>
-    <string name="long_press_widget_to_add" msgid="3587712543577675817">"Atingeți și țineți apăsat pentru a muta un widget."</string>
-    <string name="long_accessible_way_to_add" msgid="2733588281439571974">"Atingeți de două ori și țineți apăsat pentru a muta un widget sau folosiți acțiuni personalizate."</string>
+    <string name="long_press_widget_to_add" msgid="3587712543577675817">"Atinge și ține apăsat pentru a muta un widget."</string>
+    <string name="long_accessible_way_to_add" msgid="2733588281439571974">"Atinge de două ori și ține apăsat pentru a muta un widget sau folosește acțiuni personalizate."</string>
     <string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
     <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d lățime și %2$d înălțime"</string>
     <string name="widget_preview_context_description" msgid="9045841361655787574">"Widgetul <xliff:g id="WIDGET_NAME">%1$s</xliff:g>"</string>
-    <string name="add_item_request_drag_hint" msgid="8730547755622776606">"Atingeți lung widgetul pentru a-l muta pe ecranul de pornire"</string>
-    <string name="add_to_home_screen" msgid="9168649446635919791">"Adăugați pe ecranul de pornire"</string>
+    <string name="add_item_request_drag_hint" msgid="8730547755622776606">"Atinge lung widgetul pentru a-l muta pe ecranul de pornire"</string>
+    <string name="add_to_home_screen" msgid="9168649446635919791">"Adaugă pe ecranul de pornire"</string>
     <string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widgetul <xliff:g id="WIDGET_NAME">%1$s</xliff:g> a fost adăugat pe ecranul de pornire"</string>
     <string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}few{# widgeturi}other{# de widgeturi}}"</string>
     <string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# comandă rapidă}few{# comenzi rapide}other{# de comenzi rapide}}"</string>
     <string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g> <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
     <string name="widget_button_text" msgid="2880537293434387943">"Widgeturi"</string>
     <string name="widgets_full_sheet_search_bar_hint" msgid="8484659090860596457">"Căutare"</string>
-    <string name="widgets_full_sheet_cancel_button_description" msgid="5766167035728653605">"Ștergeți textul din caseta de căutare"</string>
+    <string name="widgets_full_sheet_cancel_button_description" msgid="5766167035728653605">"Șterge textul din caseta de căutare"</string>
     <string name="no_widgets_available" msgid="4337693382501046170">"Widgeturile și comenzile rapide nu sunt disponibile"</string>
     <string name="no_search_results" msgid="3787956167293097509">"Nu au fost găsite widgeturi sau comenzi rapide"</string>
     <string name="widgets_full_sheet_personal_tab" msgid="2743540105607120182">"Personale"</string>
     <string name="widgets_full_sheet_work_tab" msgid="3767150027110633765">"Serviciu"</string>
     <string name="widget_category_conversations" msgid="8894438636213590446">"Conversații"</string>
-    <string name="widget_education_header" msgid="4874760613775913787">"Informații utile la îndemâna dvs."</string>
-    <string name="widget_education_content" msgid="1731667670753497052">"Pentru a primi informații fără să deschideți aplicațiile, puteți adăuga widgeturi pe ecranul de pornire"</string>
-    <string name="reconfigurable_widget_education_tip" msgid="6336962690888067057">"Atingeți ca să schimbați setările pentru widgeturi"</string>
+    <string name="widget_education_header" msgid="4874760613775913787">"Informații utile la îndemâna ta"</string>
+    <string name="widget_education_content" msgid="1731667670753497052">"Pentru a primi informații fără să deschizi aplicațiile, poți adăuga widgeturi pe ecranul de pornire"</string>
+    <string name="reconfigurable_widget_education_tip" msgid="6336962690888067057">"Atinge ca să schimbi setările pentru widgeturi"</string>
     <string name="widget_education_close_button" msgid="8676165703104836580">"OK"</string>
-    <string name="widget_reconfigure_button_content_description" msgid="8811472721881205250">"Modificați setările pentru widgeturi"</string>
-    <string name="all_apps_search_bar_hint" msgid="1390553134053255246">"Căutați aplicații"</string>
+    <string name="widget_reconfigure_button_content_description" msgid="8811472721881205250">"Modifică setările pentru widgeturi"</string>
+    <string name="all_apps_search_bar_hint" msgid="1390553134053255246">"Caută aplicații"</string>
     <string name="all_apps_loading_message" msgid="5813968043155271636">"Se încarcă aplicații…"</string>
     <string name="all_apps_no_search_results" msgid="3200346862396363786">"Nu s-a găsit nicio aplicație pentru „<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
-    <string name="all_apps_search_market_message" msgid="1366263386197059176">"Căutați mai multe aplicații"</string>
+    <string name="all_apps_search_market_message" msgid="1366263386197059176">"Caută mai multe aplicații"</string>
     <string name="label_application" msgid="8531721983832654978">"Aplicație"</string>
     <string name="all_apps_label" msgid="5015784846527570951">"Toate aplicațiile"</string>
     <string name="notifications_header" msgid="1404149926117359025">"Notificări"</string>
-    <string name="long_press_shortcut_to_add" msgid="5405328730817637737">"Atingeți și țineți apăsat pentru a muta comanda rapidă."</string>
-    <string name="long_accessible_way_to_add_shortcut" msgid="2199537273817090740">"Atingeți de două ori și țineți apăsat pentru a muta o comandă rapidă sau folosiți acțiuni personalizate."</string>
+    <string name="long_press_shortcut_to_add" msgid="5405328730817637737">"Atinge și ține apăsat ca să muți comanda rapidă."</string>
+    <string name="long_accessible_way_to_add_shortcut" msgid="2199537273817090740">"Atinge de două ori și ține apăsat pentru a muta o comandă rapidă sau folosește acțiuni personalizate."</string>
     <string name="out_of_space" msgid="6455557115204099579">"Nu există spațiu liber pe acest ecran de pornire"</string>
     <string name="hotseat_out_of_space" msgid="7448809638125333693">"Spațiu epuizat în bara Preferate"</string>
     <string name="all_apps_button_label" msgid="8130441508702294465">"Lista de aplicații"</string>
     <string name="all_apps_search_results" msgid="5889367432531296759">"Rezultatele căutării"</string>
     <string name="all_apps_button_personal_label" msgid="1315764287305224468">"Lista de aplicații personale"</string>
     <string name="all_apps_button_work_label" msgid="7270707118948892488">"Lista de aplicații de serviciu"</string>
-    <string name="remove_drop_target_label" msgid="7812859488053230776">"Eliminați"</string>
-    <string name="uninstall_drop_target_label" msgid="4722034217958379417">"Dezinstalați"</string>
+    <string name="remove_drop_target_label" msgid="7812859488053230776">"Elimină"</string>
+    <string name="uninstall_drop_target_label" msgid="4722034217958379417">"Dezinstalează"</string>
     <string name="app_info_drop_target_label" msgid="692894985365717661">"Informații despre aplicații"</string>
-    <string name="install_drop_target_label" msgid="2539096853673231757">"Instalați"</string>
+    <string name="install_drop_target_label" msgid="2539096853673231757">"Instalează"</string>
     <string name="dismiss_prediction_label" msgid="3357562989568808658">"Nu sugera aplicația"</string>
     <string name="pin_prediction" msgid="4196423321649756498">"Fixează predicția"</string>
     <string name="permlab_install_shortcut" msgid="5632423390354674437">"instalează comenzi rapide"</string>
     <string name="permdesc_install_shortcut" msgid="923466509822011139">"Permite unei aplicații să adauge comenzi rapide fără intervenția utilizatorului."</string>
-    <string name="permlab_read_settings" msgid="5136500343007704955">"citiți setările și comenzile rapide de pe ecranul de pornire"</string>
+    <string name="permlab_read_settings" msgid="5136500343007704955">"citește setările și comenzile rapide de pe ecranul de pornire"</string>
     <string name="permdesc_read_settings" msgid="4208061150510996676">"Permite aplicației să citească setările și comenzile rapide de pe ecranul de pornire."</string>
-    <string name="permlab_write_settings" msgid="4820028712156303762">"scrieți setările și comenzile rapide de pe ecranul de pornire"</string>
+    <string name="permlab_write_settings" msgid="4820028712156303762">"scrie setările și comenzile rapide de pe ecranul de pornire"</string>
     <string name="permdesc_write_settings" msgid="726859348127868466">"Permite aplicației să modifice setările și comenzile rapide de pe ecranul de pornire."</string>
     <string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> nu are permisiunea de a apela"</string>
     <string name="gadget_error_text" msgid="740356548025791839">"Widgetul nu poate fi încărcat"</string>
     <string name="gadget_setup_text" msgid="8348374825537681407">"Setări pentru widget"</string>
-    <string name="gadget_complete_setup_text" msgid="309040266978007925">"Atingeți pentru a finaliza configurarea"</string>
+    <string name="gadget_complete_setup_text" msgid="309040266978007925">"Atinge pentru a finaliza configurarea"</string>
     <string name="uninstall_system_app_text" msgid="4172046090762920660">"Aceasta este o aplicație de sistem și nu poate fi dezinstalată."</string>
-    <string name="folder_hint_text" msgid="5174843001373488816">"Modificați numele"</string>
+    <string name="folder_hint_text" msgid="5174843001373488816">"Modifică numele"</string>
     <string name="disabled_app_label" msgid="6673129024321402780">"S-a dezactivat <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="dotted_app_label" msgid="1865617679843363410">"{count,plural, =1{{app_name} are # notificare}few{{app_name} are # notificări}other{{app_name} are # de notificări}}"</string>
     <string name="default_scroll_format" msgid="7475544710230993317">"Pagina %1$d din %2$d"</string>
     <string name="workspace_scroll_format" msgid="8458889198184077399">"Ecranul de pornire %1$d din %2$d"</string>
     <string name="workspace_new_page" msgid="257366611030256142">"Pagină nouă pe ecranul de pornire"</string>
     <string name="folder_opened" msgid="94695026776264709">"Dosar deschis, <xliff:g id="WIDTH">%1$d</xliff:g> pe <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
-    <string name="folder_tap_to_close" msgid="4625795376335528256">"Atingeți pentru a închide dosarul"</string>
-    <string name="folder_tap_to_rename" msgid="4017685068016979677">"Atingeți pentru a salva noul nume"</string>
+    <string name="folder_tap_to_close" msgid="4625795376335528256">"Atinge pentru a închide dosarul"</string>
+    <string name="folder_tap_to_rename" msgid="4017685068016979677">"Atinge pentru a salva noul nume"</string>
     <string name="folder_closed" msgid="4100806530910930934">"Dosar închis"</string>
     <string name="folder_renamed" msgid="1794088362165669656">"Dosar redenumit <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="folder_name_format_exact" msgid="8626242716117004803">"Dosar: <xliff:g id="NAME">%1$s</xliff:g>, <xliff:g id="SIZE">%2$d</xliff:g> elemente"</string>
@@ -105,58 +105,58 @@
     <string name="styles_wallpaper_button_text" msgid="8216961355289236794">"Imagine de fundal și stil"</string>
     <string name="settings_button_text" msgid="8873672322605444408">"Setări ecran de pornire"</string>
     <string name="msg_disabled_by_admin" msgid="6898038085516271325">"Dezactivată de administrator"</string>
-    <string name="allow_rotation_title" msgid="7222049633713050106">"Permiteți rotirea ecranului de pornire"</string>
+    <string name="allow_rotation_title" msgid="7222049633713050106">"Permite rotirea ecranului de pornire"</string>
     <string name="allow_rotation_desc" msgid="8662546029078692509">"Când telefonul este rotit"</string>
     <string name="notification_dots_title" msgid="9062440428204120317">"Puncte de notificare"</string>
     <string name="notification_dots_desc_on" msgid="1679848116452218908">"Activate"</string>
     <string name="notification_dots_desc_off" msgid="1760796511504341095">"Dezactivate"</string>
     <string name="title_missing_notification_access" msgid="7503287056163941064">"Este necesar accesul la notificări"</string>
-    <string name="msg_missing_notification_access" msgid="281113995110910548">"Pentru a afișa punctele de notificare, activați notificările din aplicație pentru <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="title_change_settings" msgid="1376365968844349552">"Modificați setările"</string>
-    <string name="notification_dots_service_title" msgid="4284221181793592871">"Afișați punctele de notificare"</string>
+    <string name="msg_missing_notification_access" msgid="281113995110910548">"Pentru a afișa punctele de notificare, activează notificările din aplicație pentru <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="title_change_settings" msgid="1376365968844349552">"Modifică setările"</string>
+    <string name="notification_dots_service_title" msgid="4284221181793592871">"Afișează punctele de notificare"</string>
     <string name="developer_options_title" msgid="700788437593726194">"Opțiuni dezvoltator"</string>
-    <string name="auto_add_shortcuts_label" msgid="4926805029653694105">"Adăugați pictograme de aplicații pe ecranul de pornire"</string>
+    <string name="auto_add_shortcuts_label" msgid="4926805029653694105">"Adaugă pictograme de aplicații pe ecranul de pornire"</string>
     <string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Pentru aplicații noi"</string>
     <string name="package_state_unknown" msgid="7592128424511031410">"Necunoscut"</string>
-    <string name="abandoned_clean_this" msgid="7610119707847920412">"Eliminați"</string>
-    <string name="abandoned_search" msgid="891119232568284442">"Căutați"</string>
+    <string name="abandoned_clean_this" msgid="7610119707847920412">"Elimină"</string>
+    <string name="abandoned_search" msgid="891119232568284442">"Caută"</string>
     <string name="abandoned_promises_title" msgid="7096178467971716750">"Aplicația nu este instalată"</string>
-    <string name="abandoned_promise_explanation" msgid="3990027586878167529">"Aplicația pentru această pictogramă nu este instalată. Puteți să ștergeți pictograma sau să căutați aplicația și s-o instalați manual."</string>
+    <string name="abandoned_promise_explanation" msgid="3990027586878167529">"Aplicația pentru această pictogramă nu este instalată. Poți să ștergi pictograma sau să cauți aplicația și s-o instalezi manual."</string>
     <string name="app_installing_title" msgid="5864044122733792085">"<xliff:g id="NAME">%1$s</xliff:g> se instalează, <xliff:g id="PROGRESS">%2$s</xliff:g> finalizat"</string>
     <string name="app_downloading_title" msgid="8336702962104482644">"<xliff:g id="NAME">%1$s</xliff:g> se descarcă (finalizat <xliff:g id="PROGRESS">%2$s</xliff:g>)"</string>
     <string name="app_waiting_download_title" msgid="7053938513995617849">"<xliff:g id="NAME">%1$s</xliff:g> așteaptă instalarea"</string>
     <string name="dialog_update_title" msgid="114234265740994042">"Este necesară actualizarea aplicației"</string>
-    <string name="dialog_update_message" msgid="4176784553982226114">"Aplicația pentru această pictogramă nu este actualizată. Puteți să actualizați manual ca să reactivați comanda rapidă sau să eliminați pictograma."</string>
-    <string name="dialog_update" msgid="2178028071796141234">"Actualizați"</string>
-    <string name="dialog_remove" msgid="6510806469849709407">"Eliminați"</string>
+    <string name="dialog_update_message" msgid="4176784553982226114">"Aplicația pentru această pictogramă nu este actualizată. Poți să actualizezi manual ca să reactivezi comanda rapidă sau să elimini pictograma."</string>
+    <string name="dialog_update" msgid="2178028071796141234">"Actualizează"</string>
+    <string name="dialog_remove" msgid="6510806469849709407">"Elimină"</string>
     <string name="widgets_list" msgid="796804551140113767">"Listă de widgeturi"</string>
     <string name="widgets_list_closed" msgid="6141506579418771922">"Lista de widgeturi este închisă"</string>
-    <string name="action_add_to_workspace" msgid="215894119683164916">"Adăugați pe ecranul de pornire"</string>
-    <string name="action_move_here" msgid="2170188780612570250">"Mutați elementul aici"</string>
+    <string name="action_add_to_workspace" msgid="215894119683164916">"Adaugă pe ecranul de pornire"</string>
+    <string name="action_move_here" msgid="2170188780612570250">"Mută elementul aici"</string>
     <string name="item_added_to_workspace" msgid="4211073925752213539">"Element adăugat pe ecranul de pornire"</string>
     <string name="item_removed" msgid="851119963877842327">"Element eliminat"</string>
-    <string name="undo" msgid="4151576204245173321">"Anulați"</string>
-    <string name="action_move" msgid="4339390619886385032">"Mutați elementul"</string>
-    <string name="move_to_empty_cell_description" msgid="5254852678218206889">"Mutați în rândul <xliff:g id="NUMBER_0">%1$s</xliff:g> coloana <xliff:g id="NUMBER_1">%2$s</xliff:g> din <xliff:g id="STRING">%3$s</xliff:g>"</string>
-    <string name="move_to_position" msgid="6750008980455459790">"Mutați pe poziția <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
-    <string name="move_to_hotseat_position" msgid="6295412897075147808">"Mutați în preferate, pe poziția <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
+    <string name="undo" msgid="4151576204245173321">"Anulează"</string>
+    <string name="action_move" msgid="4339390619886385032">"Mută elementul"</string>
+    <string name="move_to_empty_cell_description" msgid="5254852678218206889">"Mută în rândul <xliff:g id="NUMBER_0">%1$s</xliff:g> coloana <xliff:g id="NUMBER_1">%2$s</xliff:g> din <xliff:g id="STRING">%3$s</xliff:g>"</string>
+    <string name="move_to_position" msgid="6750008980455459790">"Mută pe poziția <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
+    <string name="move_to_hotseat_position" msgid="6295412897075147808">"Mută în preferate, pe poziția <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
     <string name="item_moved" msgid="4606538322571412879">"Element mutat"</string>
-    <string name="add_to_folder" msgid="9040534766770853243">"Adăugați în dosar: <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="add_to_folder_with_app" msgid="4534929978967147231">"Adăugați în dosarul cu <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="add_to_folder" msgid="9040534766770853243">"Adaugă în dosar: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="add_to_folder_with_app" msgid="4534929978967147231">"Adaugă în dosarul cu <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="added_to_folder" msgid="4793259502305558003">"Element adăugat în dosar"</string>
-    <string name="create_folder_with" msgid="4050141361160214248">"Creați dosar cu: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="create_folder_with" msgid="4050141361160214248">"Creează dosar cu: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="folder_created" msgid="6409794597405184510">"Dosar creat"</string>
-    <string name="action_move_to_workspace" msgid="39528912300293768">"Mutați pe ecranul de pornire"</string>
-    <string name="action_resize" msgid="1802976324781771067">"Redimensionați"</string>
-    <string name="action_increase_width" msgid="8773715375078513326">"Creșteți lățimea"</string>
-    <string name="action_increase_height" msgid="459390020612501122">"Creșteți înălțimea"</string>
-    <string name="action_decrease_width" msgid="1374549771083094654">"Reduceți lățimea"</string>
-    <string name="action_decrease_height" msgid="282377193880900022">"Reduceți înălțimea"</string>
+    <string name="action_move_to_workspace" msgid="39528912300293768">"Mută pe ecranul de pornire"</string>
+    <string name="action_resize" msgid="1802976324781771067">"Redimensionează"</string>
+    <string name="action_increase_width" msgid="8773715375078513326">"Crește lățimea"</string>
+    <string name="action_increase_height" msgid="459390020612501122">"Crește înălțimea"</string>
+    <string name="action_decrease_width" msgid="1374549771083094654">"Redu lățimea"</string>
+    <string name="action_decrease_height" msgid="282377193880900022">"Redu înălțimea"</string>
     <string name="widget_resized" msgid="9130327887929620">"Widgetul a fost redimensionat la lățimea <xliff:g id="NUMBER_0">%1$s</xliff:g> și înălțimea <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
     <string name="action_deep_shortcut" msgid="2864038805849372848">"Comenzi rapide"</string>
     <string name="shortcuts_menu_with_notifications_description" msgid="2676582286544232849">"Comenzi rapide și notificări"</string>
-    <string name="action_dismiss_notification" msgid="5909461085055959187">"Închideți"</string>
-    <string name="accessibility_close" msgid="2277148124685870734">"Închideți"</string>
+    <string name="action_dismiss_notification" msgid="5909461085055959187">"Închide"</string>
+    <string name="accessibility_close" msgid="2277148124685870734">"Închide"</string>
     <string name="notification_dismissed" msgid="6002233469409822874">"Notificare închisă"</string>
     <string name="all_apps_personal_tab" msgid="4190252696685155002">"Personale"</string>
     <string name="all_apps_work_tab" msgid="4884822796154055118">"Profesionale"</string>
@@ -164,14 +164,14 @@
     <string name="work_profile_edu_work_apps" msgid="7895468576497746520">"Aplicațiile pentru lucru sunt marcate și vizibile pentru administratorul IT"</string>
     <string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
     <string name="work_apps_paused_title" msgid="3040901117349444598">"Aplicațiile pentru lucru sunt întrerupte"</string>
-    <string name="work_apps_paused_body" msgid="261634750995824906">"Aplicațiile pentru lucru nu pot să vă trimită notificări, să folosească bateria sau să vă acceseze locația"</string>
-    <string name="work_apps_paused_content_description" msgid="5149623040804051095">"Aplicațiile pentru lucru sunt dezactivate. Acestea nu pot să vă trimită notificări, să folosească bateria sau să vă acceseze locația."</string>
+    <string name="work_apps_paused_body" msgid="261634750995824906">"Aplicațiile pentru lucru nu pot să-ți trimită notificări, să folosească bateria sau să-ți acceseze locația"</string>
+    <string name="work_apps_paused_content_description" msgid="5149623040804051095">"Aplicațiile pentru lucru sunt dezactivate. Acestea nu pot să-ți trimită notificări, să folosească bateria sau să-ți acceseze locația."</string>
     <string name="work_apps_paused_edu_banner" msgid="8872412121608402058">"Aplicațiile pentru lucru sunt marcate și vizibile pentru administratorul IT"</string>
     <string name="work_apps_paused_edu_accept" msgid="6377476824357318532">"OK"</string>
-    <string name="work_apps_pause_btn_text" msgid="4669288269140620646">"Întrerupeți aplicațiile pentru lucru"</string>
-    <string name="work_apps_enable_btn_text" msgid="1156432622148413741">"Activați aplicațiile pentru lucru"</string>
+    <string name="work_apps_pause_btn_text" msgid="4669288269140620646">"Întrerupe aplicațiile pentru lucru"</string>
+    <string name="work_apps_enable_btn_text" msgid="1156432622148413741">"Activează aplicațiile pentru lucru"</string>
     <string name="developer_options_filter_hint" msgid="5896817443635989056">"Filtru"</string>
-    <string name="search_pref_screen_title" msgid="3258959643336315962">"Căutați pe telefon"</string>
-    <string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Căutați pe tabletă"</string>
+    <string name="search_pref_screen_title" msgid="3258959643336315962">"Caută pe telefon"</string>
+    <string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Caută pe tabletă"</string>
     <string name="remote_action_failed" msgid="1383965239183576790">"Eșuare: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 8b42a8f..1d25371 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -71,7 +71,7 @@
     <string name="all_apps_search_results" msgid="5889367432531296759">"సెర్చ్ ఫలితాలు"</string>
     <string name="all_apps_button_personal_label" msgid="1315764287305224468">"వ్యక్తిగత యాప్‌ల లిస్ట్‌"</string>
     <string name="all_apps_button_work_label" msgid="7270707118948892488">"కార్యాలయ యాప్‌ల లిస్ట్‌"</string>
-    <string name="remove_drop_target_label" msgid="7812859488053230776">"తీసివేయి"</string>
+    <string name="remove_drop_target_label" msgid="7812859488053230776">"తీసివేయండి"</string>
     <string name="uninstall_drop_target_label" msgid="4722034217958379417">"అన్ఇన్‌స్టాల్ చేయండి"</string>
     <string name="app_info_drop_target_label" msgid="692894985365717661">"యాప్ సమాచారం"</string>
     <string name="install_drop_target_label" msgid="2539096853673231757">"ఇన్‌స్టాల్ చేయండి"</string>
@@ -118,7 +118,7 @@
     <string name="auto_add_shortcuts_label" msgid="4926805029653694105">"యాప్ చిహ్నాలను మొదటి స్క్రీన్‌కు జోడించండి"</string>
     <string name="auto_add_shortcuts_description" msgid="7117251166066978730">"కొత్త యాప్‌ల కోసం"</string>
     <string name="package_state_unknown" msgid="7592128424511031410">"తెలియదు"</string>
-    <string name="abandoned_clean_this" msgid="7610119707847920412">"తీసివేయి"</string>
+    <string name="abandoned_clean_this" msgid="7610119707847920412">"తీసివేయండి"</string>
     <string name="abandoned_search" msgid="891119232568284442">"సెర్చ్"</string>
     <string name="abandoned_promises_title" msgid="7096178467971716750">"ఈ యాప్ ఇన్‌స్టాల్ చేయబడలేదు"</string>
     <string name="abandoned_promise_explanation" msgid="3990027586878167529">"ఈ ఐకాన్‌కు చెందిన యాప్ ఇన్‌స్టాల్ చేయలేదు. మీరు దీన్ని తీసివేయవచ్చు లేదా ఆ యాప్ కోసం సెర్చ్ చేసి, దాన్ని మాన్యువల్‌గా ఇన్‌స్టాల్ చేయవచ్చు."</string>
@@ -155,7 +155,7 @@
     <string name="widget_resized" msgid="9130327887929620">"విడ్జెట్ పరిమాణం వెడల్పు <xliff:g id="NUMBER_0">%1$s</xliff:g>కి, ఎత్తు <xliff:g id="NUMBER_1">%2$s</xliff:g>కి మార్చబడింది"</string>
     <string name="action_deep_shortcut" msgid="2864038805849372848">"షార్ట్‌కట్స్"</string>
     <string name="shortcuts_menu_with_notifications_description" msgid="2676582286544232849">"షార్ట్‌కట్‌లు మరియు నోటిఫికేషన్‌లు"</string>
-    <string name="action_dismiss_notification" msgid="5909461085055959187">"తీసివేయి"</string>
+    <string name="action_dismiss_notification" msgid="5909461085055959187">"తీసివేయండి"</string>
     <string name="accessibility_close" msgid="2277148124685870734">"మూసివేస్తుంది"</string>
     <string name="notification_dismissed" msgid="6002233469409822874">"నోటిఫికేషన్ తీసివేయబడింది"</string>
     <string name="all_apps_personal_tab" msgid="4190252696685155002">"వ్యక్తిగతం"</string>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index dc80bc3..e8e318b 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -383,9 +383,6 @@
     <dimen name="overview_grid_side_margin">0dp</dimen>
     <dimen name="overview_grid_row_spacing">0dp</dimen>
     <dimen name="overview_page_spacing">0dp</dimen>
-    <dimen name="overview_minimum_next_prev_size">0dp</dimen>
-    <item name="overview_max_scale" format="float" type="dimen">0.0</item>
-    <item name="overview_modal_max_scale" format="float" type="dimen">0.0</item>
     <dimen name="split_placeholder_size">72dp</dimen>
     <dimen name="split_placeholder_inset">16dp</dimen>
     <dimen name="split_placeholder_icon_size">44dp</dimen>
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index d09642a..adf6216 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -34,7 +34,6 @@
 import android.graphics.PointF;
 import android.graphics.Rect;
 import android.util.DisplayMetrics;
-import android.view.Gravity;
 import android.view.Surface;
 
 import com.android.launcher3.CellLayout.ContainerType;
@@ -42,7 +41,6 @@
 import com.android.launcher3.icons.DotRenderer;
 import com.android.launcher3.icons.GraphicsUtils;
 import com.android.launcher3.icons.IconNormalizer;
-import com.android.launcher3.touch.PortraitPagedViewHandler;
 import com.android.launcher3.uioverrides.ApiWrapper;
 import com.android.launcher3.util.DisplayController;
 import com.android.launcher3.util.DisplayController.Info;
@@ -204,12 +202,6 @@
     public int overviewPageSpacing;
     public int overviewRowSpacing;
     public int overviewGridSideMargin;
-    public final Rect overviewGridRect = new Rect();
-    public final Rect overviewTaskRect = new Rect();
-    public final float overviewTaskWorkspaceScale;
-    public final Point overviewGridTaskDimension = new Point();
-    public final Rect overviewModalTaskRect = new Rect();
-    public final float overviewModalTaskScale;
 
     // Widgets
     public final PointF appWidgetScale = new PointF(1.0f, 1.0f);
@@ -236,9 +228,6 @@
     public DotRenderer mDotRendererWorkSpace;
     public DotRenderer mDotRendererAllApps;
 
-    // Tasks
-    public final PointF taskDimension = new PointF();
-
     // Taskbar
     public boolean isTaskbarPresent;
     // Whether Taskbar will inset the bottom of apps by taskbarSize.
@@ -492,104 +481,6 @@
         mDotRendererWorkSpace = new DotRenderer(iconSizePx, dotPath, DEFAULT_DOT_SIZE);
         mDotRendererAllApps = iconSizePx == allAppsIconSizePx ? mDotRendererWorkSpace :
                 new DotRenderer(allAppsIconSizePx, dotPath, DEFAULT_DOT_SIZE);
-
-        // Grid and Task size calculations
-        calculateGridSize();
-        getTaskDimension();
-        calculateTaskSize(res);
-        calculateGridTaskSize();
-        calculateModalTaskSize(res);
-        overviewModalTaskScale =
-                Math.min(overviewModalTaskRect.height() / (float) overviewTaskRect.height(),
-                        overviewModalTaskRect.width() / (float) overviewTaskRect.width());
-        overviewTaskWorkspaceScale = (float) overviewTaskRect.height() / getCellLayoutHeight();
-    }
-
-    private void calculateGridSize() {
-        int topMargin = overviewTaskThumbnailTopMarginPx;
-        int bottomMargin = getOverviewActionsClaimedSpace();
-        int sideMargin = overviewGridSideMargin;
-
-        overviewGridRect.set(0, 0, widthPx, heightPx);
-        overviewGridRect.inset(Math.max(mInsets.left, sideMargin), mInsets.top + topMargin,
-                Math.max(mInsets.right, sideMargin), Math.max(mInsets.bottom, bottomMargin));
-    }
-
-    private void calculateTaskSize(Resources res) {
-        int overviewMinNextPrevSize =
-                res.getDimensionPixelSize(R.dimen.overview_minimum_next_prev_size);
-        float overviewMaxScale = res.getFloat(R.dimen.overview_max_scale);
-        Rect containerRect = new Rect();
-        if (isTablet) {
-            containerRect.set(overviewGridRect);
-        } else {
-            int taskMargin = overviewTaskMarginPx;
-            containerRect.set(0, 0, widthPx, heightPx);
-            containerRect.inset(mInsets.left, mInsets.top, mInsets.right, mInsets.bottom);
-            int minimumHorizontalPadding = overviewMinNextPrevSize + taskMargin;
-            containerRect.inset(minimumHorizontalPadding, overviewTaskThumbnailTopMarginPx,
-                    minimumHorizontalPadding, getOverviewActionsClaimedSpace());
-        }
-        float scale = Math.min(
-                containerRect.width() / taskDimension.x,
-                containerRect.height() / taskDimension.y);
-        scale = Math.min(scale, overviewMaxScale);
-        int outWidth = Math.round(scale * taskDimension.x);
-        int outHeight = Math.round(scale * taskDimension.y);
-        Gravity.apply(Gravity.CENTER, outWidth, outHeight, containerRect, overviewTaskRect);
-    }
-
-    private void calculateGridTaskSize() {
-        float rowHeight =
-                (overviewTaskRect.height() + overviewTaskThumbnailTopMarginPx - overviewRowSpacing)
-                        / 2f;
-
-        float scale = (rowHeight - overviewTaskThumbnailTopMarginPx) / taskDimension.y;
-        overviewGridTaskDimension.set(
-                Math.round(scale * taskDimension.x), Math.round(scale * taskDimension.y));
-    }
-
-    /**
-     * Returns a Rect the size of a grid task with the correct positioning within the screen.
-     *
-     * @param isRecentsRtl is true when device is in LTR, false when in RTL, as grid tasks are only
-     *                     supported on tablets, which use PortraitPagedViewHandler.
-     */
-    public Rect getOverviewGridTaskRect(boolean isRecentsRtl) {
-        Rect outRect = new Rect();
-        int gravity = Gravity.TOP;
-        gravity |= isRecentsRtl ? Gravity.RIGHT : Gravity.LEFT;
-        Gravity.apply(gravity, overviewGridTaskDimension.x, overviewGridTaskDimension.y,
-                overviewTaskRect, outRect);
-        return outRect;
-    }
-
-    private void calculateModalTaskSize(Resources res) {
-        float overviewModalMaxScale = res.getFloat(R.dimen.overview_modal_max_scale);
-        Rect potentialTaskRect = new Rect(0, 0, widthPx, heightPx);
-        potentialTaskRect.inset(mInsets.left, mInsets.top, mInsets.right, mInsets.bottom);
-        int minimumHorizontalPadding = Math.round(
-                (availableWidthPx - overviewTaskRect.width() * overviewModalMaxScale) / 2);
-        potentialTaskRect.inset(
-                minimumHorizontalPadding,
-                overviewTaskMarginPx,
-                minimumHorizontalPadding,
-                heightPx - overviewTaskRect.bottom - mInsets.bottom);
-        float scale = Math.min(
-                potentialTaskRect.width() / taskDimension.x,
-                potentialTaskRect.height() / taskDimension.y);
-        int outWidth = Math.round(scale * taskDimension.x);
-        int outHeight = Math.round(scale * taskDimension.y);
-        Gravity.apply(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM, outWidth, outHeight,
-                potentialTaskRect, overviewModalTaskRect);
-    }
-
-    private void getTaskDimension() {
-        float taskHeight = heightPx;
-        if (isTablet) {
-            taskHeight -= taskbarSize;
-        }
-        taskDimension.set(widthPx, taskHeight);
     }
 
     /**
@@ -1354,8 +1245,7 @@
     }
 
     // LINT.IfChange
-    /** Dumps various DeviceProfile variables to the specified writer. */
-    public void dump(Context context, String prefix, PrintWriter writer) {
+    public void dump(String prefix, PrintWriter writer) {
         writer.println(prefix + "DeviceProfile:");
         writer.println(prefix + "\t1 dp = " + mMetrics.density + " px");
 
@@ -1401,12 +1291,9 @@
                 cellLayoutBorderSpacePx.x));
         writer.println(prefix + pxToDpStr("cellLayoutBorderSpacePx Vertical",
                 cellLayoutBorderSpacePx.y));
-        writer.println(
-                prefix + pxToDpStr("cellLayoutPaddingPx.left", cellLayoutPaddingPx.left));
-        writer.println(
-                prefix + pxToDpStr("cellLayoutPaddingPx.top", cellLayoutPaddingPx.top));
-        writer.println(
-                prefix + pxToDpStr("cellLayoutPaddingPx.right", cellLayoutPaddingPx.right));
+        writer.println(prefix + pxToDpStr("cellLayoutPaddingPx.left", cellLayoutPaddingPx.left));
+        writer.println(prefix + pxToDpStr("cellLayoutPaddingPx.top", cellLayoutPaddingPx.top));
+        writer.println(prefix + pxToDpStr("cellLayoutPaddingPx.right", cellLayoutPaddingPx.right));
         writer.println(
                 prefix + pxToDpStr("cellLayoutPaddingPx.bottom", cellLayoutPaddingPx.bottom));
 
@@ -1440,15 +1327,13 @@
         writer.println(prefix + pxToDpStr("allAppsBorderSpacePxX", allAppsBorderSpacePx.x));
         writer.println(prefix + pxToDpStr("allAppsBorderSpacePxY", allAppsBorderSpacePx.y));
         writer.println(prefix + "\tnumShownAllAppsColumns: " + numShownAllAppsColumns);
-        writer.println(
-                prefix + pxToDpStr("allAppsLeftRightPadding", allAppsLeftRightPadding));
+        writer.println(prefix + pxToDpStr("allAppsLeftRightPadding", allAppsLeftRightPadding));
         writer.println(prefix + pxToDpStr("allAppsLeftRightMargin", allAppsLeftRightMargin));
 
         writer.println(prefix + pxToDpStr("hotseatBarSizePx", hotseatBarSizePx));
         writer.println(prefix + "\tinv.hotseatColumnSpan: " + inv.hotseatColumnSpan[mTypeIndex]);
         writer.println(prefix + pxToDpStr("hotseatCellHeightPx", hotseatCellHeightPx));
-        writer.println(
-                prefix + pxToDpStr("hotseatBarBottomSpacePx", hotseatBarBottomSpacePx));
+        writer.println(prefix + pxToDpStr("hotseatBarBottomSpacePx", hotseatBarBottomSpacePx));
         writer.println(prefix + pxToDpStr("hotseatBarSidePaddingStartPx",
                 hotseatBarSidePaddingStartPx));
         writer.println(prefix + pxToDpStr("hotseatBarSidePaddingEndPx",
@@ -1459,12 +1344,9 @@
         writer.println(prefix + pxToDpStr("springLoadedHotseatBarTopMarginPx",
                 springLoadedHotseatBarTopMarginPx));
         writer.println(prefix + pxToDpStr("mHotseatBarPadding.top", mHotseatBarPadding.top));
-        writer.println(
-                prefix + pxToDpStr("mHotseatBarPadding.bottom", mHotseatBarPadding.bottom));
-        writer.println(
-                prefix + pxToDpStr("mHotseatBarPadding.left", mHotseatBarPadding.left));
-        writer.println(
-                prefix + pxToDpStr("mHotseatBarPadding.right", mHotseatBarPadding.right));
+        writer.println(prefix + pxToDpStr("mHotseatBarPadding.bottom", mHotseatBarPadding.bottom));
+        writer.println(prefix + pxToDpStr("mHotseatBarPadding.left", mHotseatBarPadding.left));
+        writer.println(prefix + pxToDpStr("mHotseatBarPadding.right", mHotseatBarPadding.right));
         writer.println(prefix + "\tnumShownHotseatIcons: " + numShownHotseatIcons);
         writer.println(prefix + pxToDpStr("hotseatBorderSpace", hotseatBorderSpace));
         writer.println(prefix + "\tisQsbInline: " + isQsbInline);
@@ -1479,14 +1361,12 @@
         writer.println(prefix + pxToDpStr("workspacePadding.left", workspacePadding.left));
         writer.println(prefix + pxToDpStr("workspacePadding.top", workspacePadding.top));
         writer.println(prefix + pxToDpStr("workspacePadding.right", workspacePadding.right));
-        writer.println(
-                prefix + pxToDpStr("workspacePadding.bottom", workspacePadding.bottom));
+        writer.println(prefix + pxToDpStr("workspacePadding.bottom", workspacePadding.bottom));
 
         writer.println(prefix + pxToDpStr("iconScale", iconScale));
         writer.println(prefix + pxToDpStr("cellScaleToFit ", cellScaleToFit));
         writer.println(prefix + pxToDpStr("extraSpace", extraSpace));
-        writer.println(
-                prefix + pxToDpStr("unscaled extraSpace", extraSpace / iconScale));
+        writer.println(prefix + pxToDpStr("unscaled extraSpace", extraSpace / iconScale));
 
         if (inv.devicePaddings != null) {
             int unscaledExtraSpace = (int) (extraSpace / iconScale);
@@ -1497,8 +1377,7 @@
         writer.println(prefix + pxToDpStr("workspaceBottomPadding", workspaceBottomPadding));
 
         writer.println(prefix + pxToDpStr("overviewTaskMarginPx", overviewTaskMarginPx));
-        writer.println(
-                prefix + pxToDpStr("overviewTaskMarginGridPx", overviewTaskMarginGridPx));
+        writer.println(prefix + pxToDpStr("overviewTaskMarginGridPx", overviewTaskMarginGridPx));
         writer.println(prefix + pxToDpStr("overviewTaskIconSizePx", overviewTaskIconSizePx));
         writer.println(prefix + pxToDpStr("overviewTaskIconDrawableSizePx",
                 overviewTaskIconDrawableSizePx));
@@ -1516,64 +1395,21 @@
         writer.println(prefix + pxToDpStr("overviewRowSpacing", overviewRowSpacing));
         writer.println(prefix + pxToDpStr("overviewGridSideMargin", overviewGridSideMargin));
 
-        writer.println(
-                prefix + pxToDpStr("dropTargetBarTopMarginPx", dropTargetBarTopMarginPx));
+        writer.println(prefix + pxToDpStr("dropTargetBarTopMarginPx", dropTargetBarTopMarginPx));
         writer.println(prefix + pxToDpStr("dropTargetBarSizePx", dropTargetBarSizePx));
-        writer.println(prefix
-                + pxToDpStr("dropTargetBarBottomMarginPx", dropTargetBarBottomMarginPx));
+        writer.println(
+                prefix + pxToDpStr("dropTargetBarBottomMarginPx", dropTargetBarBottomMarginPx));
 
-        writer.println(prefix
-                + pxToDpStr("workspaceSpringLoadShrunkTop", mWorkspaceSpringLoadShrunkTop));
+        writer.println(
+                prefix + pxToDpStr("workspaceSpringLoadShrunkTop", mWorkspaceSpringLoadShrunkTop));
         writer.println(prefix + pxToDpStr("workspaceSpringLoadShrunkBottom",
                 mWorkspaceSpringLoadShrunkBottom));
         writer.println(prefix + pxToDpStr("workspaceSpringLoadedMinNextPageVisiblePx",
                 workspaceSpringLoadedMinNextPageVisiblePx));
-        writer.println(prefix
-                + pxToDpStr("getWorkspaceSpringLoadScale()", getWorkspaceSpringLoadScale()));
+        writer.println(
+                prefix + pxToDpStr("getWorkspaceSpringLoadScale()", getWorkspaceSpringLoadScale()));
         writer.println(prefix + pxToDpStr("getCellLayoutHeight()", getCellLayoutHeight()));
         writer.println(prefix + pxToDpStr("getCellLayoutWidth()", getCellLayoutWidth()));
-
-        writer.println(prefix + pxToDpStr("overviewGridRect.left", overviewGridRect.left));
-        writer.println(prefix + pxToDpStr("overviewGridRect.top", overviewGridRect.top));
-        writer.println(prefix + pxToDpStr("overviewGridRect.right", overviewGridRect.right));
-        writer.println(prefix
-                + pxToDpStr("overviewGridRect.bottom", overviewGridRect.bottom));
-        writer.println(prefix + pxToDpStr("taskDimension.x", taskDimension.x));
-        writer.println(prefix + pxToDpStr("taskDimension.y", taskDimension.y));
-        writer.println(prefix + pxToDpStr("overviewTaskRect.left", overviewTaskRect.left));
-        writer.println(prefix + pxToDpStr("overviewTaskRect.top", overviewTaskRect.top));
-        writer.println(prefix + pxToDpStr("overviewTaskRect.right", overviewTaskRect.right));
-        writer.println(prefix
-                + pxToDpStr("overviewTaskRect.bottom", overviewTaskRect.bottom));
-        writer.println(prefix
-                + pxToDpStr("overviewGridTaskDimension.x", overviewGridTaskDimension.x));
-        writer.println(prefix
-                + pxToDpStr("overviewGridTaskDimension.y", overviewGridTaskDimension.y));
-        writer.println(prefix
-                + pxToDpStr("overviewModalTaskRect.left", overviewModalTaskRect.left));
-        writer.println(prefix
-                + pxToDpStr("overviewModalTaskRect.top", overviewModalTaskRect.top));
-        writer.println(prefix
-                + pxToDpStr("overviewModalTaskRect.right", overviewModalTaskRect.right));
-        writer.println(prefix
-                + pxToDpStr("overviewModalTaskRect.bottom", overviewModalTaskRect.bottom));
-        boolean isRecentsRtl =
-                PortraitPagedViewHandler.PORTRAIT.getRecentsRtlSetting(context.getResources());
-        writer.println(prefix
-                + pxToDpStr("getOverviewGridTaskRect(" + isRecentsRtl + ").left",
-                getOverviewGridTaskRect(isRecentsRtl).left));
-        writer.println(prefix
-                + pxToDpStr("getOverviewGridTaskRect(" + isRecentsRtl + ").top",
-                getOverviewGridTaskRect(isRecentsRtl).top));
-        writer.println(prefix
-                + pxToDpStr("getOverviewGridTaskRect(" + isRecentsRtl + ").right",
-                getOverviewGridTaskRect(isRecentsRtl).right));
-        writer.println(prefix
-                + pxToDpStr("getOverviewGridTaskRect(" + isRecentsRtl + ").bottom",
-                getOverviewGridTaskRect(isRecentsRtl).bottom));
-        writer.println(
-                prefix + pxToDpStr("overviewTaskWorkspaceScale", overviewTaskWorkspaceScale));
-        writer.println(prefix + pxToDpStr("overviewModalTaskScale", overviewModalTaskScale));
     }
     // LINT.ThenChange(
     //     packages/apps/Launcher3/quickstep/tests/src/com/android/quickstep/DeviceProfilePhoneTest.kt,
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 528613c..9c62251 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -3024,7 +3024,7 @@
         mDragLayer.dump(prefix, writer);
         mStateManager.dump(prefix, writer);
         mPopupDataProvider.dump(prefix, writer);
-        mDeviceProfile.dump(this, prefix, writer);
+        mDeviceProfile.dump(prefix, writer);
 
         try {
             FileLog.flushAll(writer);
diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
index a86faab..bdab03f 100644
--- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java
+++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
@@ -232,6 +232,7 @@
                 // Reset pull back progress and alpha after switching states.
                 ALL_APPS_PULL_BACK_TRANSLATION.set(this, 0f);
                 ALL_APPS_PULL_BACK_ALPHA.set(this, 1f);
+                mLauncher.getAppsView().getSearchUiManager().getEditText().hideKeyboard();
             });
         }
 
@@ -239,7 +240,6 @@
         if (Float.compare(mProgress, targetProgress) == 0) {
             setAlphas(toState, config, builder);
             // Fail fast
-            onProgressAnimationEnd();
             return;
         }
 
diff --git a/src/com/android/launcher3/model/LoaderCursor.java b/src/com/android/launcher3/model/LoaderCursor.java
index ae5b66a..87e8ebf 100644
--- a/src/com/android/launcher3/model/LoaderCursor.java
+++ b/src/com/android/launcher3/model/LoaderCursor.java
@@ -291,12 +291,16 @@
 
         // from the db
         if (TextUtils.isEmpty(info.title)) {
-            info.title = getTitle();
-        }
+            if (loadIcon) {
+                info.title = getTitle();
 
-        // fall back to the class name of the activity
-        if (info.title == null) {
-            info.title = componentName.getClassName();
+                // fall back to the class name of the activity
+                if (info.title == null) {
+                    info.title = componentName.getClassName();
+                }
+            } else {
+                info.title = "";
+            }
         }
 
         info.contentDescription = mPM.getUserBadgedLabel(info.title, info.user);
diff --git a/tests/src/com/android/launcher3/DeviceProfileBaseTest.kt b/tests/src/com/android/launcher3/DeviceProfileBaseTest.kt
index ba813c0..9a76336 100644
--- a/tests/src/com/android/launcher3/DeviceProfileBaseTest.kt
+++ b/tests/src/com/android/launcher3/DeviceProfileBaseTest.kt
@@ -37,7 +37,6 @@
     protected var transposeLayoutWithOrientation: Boolean = false
     protected var useTwoPanels: Boolean = false
     protected var isGestureMode: Boolean = true
-    protected var isRecentsRtl: Boolean = true
 
     @Before
     fun setUp() {
@@ -164,7 +163,7 @@
     fun dump(dp: DeviceProfile): StringWriter {
         val stringWriter = StringWriter()
         val printWriter = PrintWriter(stringWriter)
-        dp.dump(context, "", printWriter)
+        dp.dump("", printWriter)
         printWriter.flush()
         return stringWriter
     }
