diff --git a/quickstep/res/values-cs/strings.xml b/quickstep/res/values-cs/strings.xml index b8d24cf24e..101f86557a 100644 --- a/quickstep/res/values-cs/strings.xml +++ b/quickstep/res/values-cs/strings.xml @@ -33,14 +33,14 @@ "Návrhy aplikací pro vás" "Nechte si ve spodním řádku na ploše zobrazovat návrhy aplikací" "Nechte si na řádku oblíbených na ploše zobrazovat návrhy aplikací" - "Mějte nejpoužívanější aplikace k dispozici přímo na ploše. Návrhy se budou měnit v závislosti na sledech činností. Aplikace ve spodním řádku se přesunou na vaši plochu." - "Mějte nejpoužívanější aplikace k dispozici přímo na ploše. Návrhy se budou měnit v závislosti na sledech činností. Aplikace na řádku oblíbených se přesunou na plochu." - "Mějte nejpoužívanější aplikace k dispozici přímo na ploše. Návrhy se budou měnit v závislosti na sledech činností. Aplikace ve spodním řádku se přesunou do nové složky." + "Mějte nejpoužívanější aplikace k dispozici přímo na ploše. Návrhy se budou měnit podle vašich zvyklostí. Aplikace ve spodním řádku se přesunou nahoru na vaši plochu." + "Mějte nejpoužívanější aplikace k dispozici přímo na ploše. Návrhy se budou měnit podle vašich zvyklostí. Aplikace na řádku oblíbených se přesunou na plochu." + "Mějte nejpoužívanější aplikace k dispozici přímo na ploše. Návrhy se budou měnit podle vašich zvyklostí. Aplikace ve spodním řádku se přesunou do nové složky." "Zobrazovat návrhy aplikací" "Ne, díky" "Nastavení" "Zde se zobrazují nejpoužívanější aplikace (které se mění podle sledů činností)" - "Chcete-li získat návrhy aplikací, přetáhněte aplikace z dolního řádku" + "Návrhy aplikací získáte přetažením aplikací z dolního řádku" "Volné místo bylo vyplněno návrhy aplikací" "Návrhy aplikací jsou povoleny" "Návrhy aplikací jsou zakázány" diff --git a/quickstep/res/values-de/strings.xml b/quickstep/res/values-de/strings.xml index 1e0cd3d8a8..17849e0bed 100644 --- a/quickstep/res/values-de/strings.xml +++ b/quickstep/res/values-de/strings.xml @@ -24,7 +24,7 @@ "Keine kürzlich verwendeten Elemente" "Einstellungen zur App-Nutzung" "Alle Apps schließen" - "Zuletzt aktive Apps" + "Kürzlich geöffnete Apps" "%1$s, %2$s" "< 1 Min." "Heute noch %1$s" @@ -42,7 +42,7 @@ "Hier erscheinen die meistverwendeten Apps. Die Angaben können sich je nach deiner gewöhnlichen Nutzung ändern" "Ziehe Apps aus der unteren Reihe heraus, um Vorschläge für Apps zu erhalten" "App-Vorschläge in freiem Bereich hinzugefügt" - "Funktion \"App-Vorschläge\" aktiviert" + "Funktion „App-Vorschläge“ aktiviert" "Funktion \"App-Vorschläge\" deaktiviert" "Vorgeschlagene App: %1$s" "Wische vom äußersten linken Bildschirmrand." diff --git a/quickstep/res/values-fi/strings.xml b/quickstep/res/values-fi/strings.xml index 5c19b23658..e81906f95b 100644 --- a/quickstep/res/values-fi/strings.xml +++ b/quickstep/res/values-fi/strings.xml @@ -31,16 +31,16 @@ "Sovellusehdotukset" "Kaikki sovellukset" "Sovellusennusteet" - "Näytä sovellusehdotuksia aloitusnäytön alimmaisella rivillä" + "Näytä sovellusehdotuksia aloitusnäytön alimmalla rivillä" "Näytä sovellusehdotuksia aloitusnäytön Suosikit-rivillä" - "Voit avata käytetyimmät sovellukset kätevästi aloitusnäytöltä. Ehdotukset muuttuvat rutiiniesi perusteella. Alimmaisella rivillä olevat sovellukset siirretään aloitusnäytön yläosaan." + "Voit avata käytetyimmät sovellukset kätevästi aloitusnäytöltä. Ehdotukset muuttuvat rutiiniesi perusteella. Alimmalla rivillä olevat sovellukset siirretään aloitusnäytön yläosaan." "Voit avata käytetyimmät sovellukset kätevästi aloitusnäytöltä. Ehdotukset muuttuvat rutiiniesi perusteella. Suosikit-rivillä olevat sovellukset siirretään aloitusnäytölle." - "Voit avata käytetyimmät sovellukset kätevästi aloitusnäytöltä. Ehdotukset muuttuvat rutiiniesi perusteella. Alimmaisella rivillä olevat sovellukset siirretään uuteen kansioon." + "Voit avata käytetyimmät sovellukset kätevästi aloitusnäytöltä. Ehdotukset muuttuvat rutiiniesi perusteella. Alimmalla rivillä olevat sovellukset siirretään uuteen kansioon." "Näytä sovellusehdotuksia" "Ei kiitos" "Asetukset" "Käytetyimmät sovellukset näkyvät täällä ja muuttuvat rutiiniesi perusteella" - "Siirrä sovelluksia pois alimmaiselta riviltä, niin voit saada sovellusehdotuksia" + "Siirrä sovelluksia pois alimmalta riviltä, niin voit saada sovellusehdotuksia" "Sovellusehdotuksia lisätty tyhjään kohtaan" "Sovellusehdotukset käytössä" "Sovellusehdotukset on poistettu käytöstä" diff --git a/quickstep/res/values-hr/strings.xml b/quickstep/res/values-hr/strings.xml index 0e3444ade3..c3520cbcd5 100644 --- a/quickstep/res/values-hr/strings.xml +++ b/quickstep/res/values-hr/strings.xml @@ -28,10 +28,10 @@ "%1$s, %2$s" "< 1 min" "Još %1$s danas" - "Predložene aplikacije" + "Prijedlozi aplikacija" "Sve aplikacije" "Vaše predviđene aplikacije" - "Prijedloge aplikacija vidjet ćete u donjem retku početnog zaslona" + "Primajte prijedloge aplikacija u donjem retku početnog zaslona" "Primajte prijedloge aplikacija u retku omiljenih na početnom zaslonu" "Lako pristupite najčešće upotrebljavanim aplikacijama s početnog zaslona. Prijedlozi će se mijenjati na temelju vaših rutina. Aplikacije iz donjeg retka pomaknut će se na početni zaslon." "Lako pristupite najčešće upotrebljavanim aplikacijama s početnog zaslona. Prijedlozi će se mijenjati na temelju vaših rutina. Aplikacije koje se nalaze u retku omiljenih pomaknut će se na početni zaslon." diff --git a/quickstep/res/values-it/strings.xml b/quickstep/res/values-it/strings.xml index ea7454ae3c..b64926670a 100644 --- a/quickstep/res/values-it/strings.xml +++ b/quickstep/res/values-it/strings.xml @@ -19,7 +19,7 @@ - "Blocca" + "Blocca su schermo" "Forma libera" "Nessun elemento recente" "Impostazioni di utilizzo delle app" diff --git a/quickstep/res/values-iw/strings.xml b/quickstep/res/values-iw/strings.xml index 5b89d2c3db..ed69faaba5 100644 --- a/quickstep/res/values-iw/strings.xml +++ b/quickstep/res/values-iw/strings.xml @@ -33,16 +33,16 @@ "האפליקציות החזויות שלך" "קבלת הצעות לאפליקציות בשורה התחתונה של מסך הבית" "קבלת הצעות לאפליקציות בשורת המועדפות של מסך הבית" - "גישה נוחה לאפליקציות הכי נפוצות ישירות ממסך הבית. ההצעות ישתנו בהתאם להרגלי השימוש שלך. אפליקציות שמופיעות בשורה התחתונה יעברו למעלה למסך הבית." + "גישה נוחה לאפליקציות שנעשה בהן שימוש תכוף – ישירות ממסך הבית. ההצעות ישתנו בהתאם להרגלי השימוש שלך. אפליקציות שמופיעות בשורה התחתונה יעברו למעלה למסך הבית." "גישה נוחה לאפליקציות שהשתמשת בהן הכי הרבה, ישירות ממסך הבית. ההצעות ישתנו בהתאם להרגלי השימוש שלך. אפליקציות בשורת המועדפות יועברו למסך הבית." - "גישה נוחה לאפליקציות הכי נפוצות ישירות ממסך הבית. ההצעות ישתנו בהתאם להרגלי השימוש שלך. אפליקציות שמופיעות בשורה התחתונה יעברו למעלה למסך הבית." + "גישה נוחה לאפליקציות שנעשה בהן שימוש תכוף – ישירות ממסך הבית. ההצעות ישתנו בהתאם להרגלי השימוש שלך. אפליקציות שמופיעות בשורה התחתונה יעברו לתיקייה חדשה." "קבלת הצעות לאפליקציות" "לא, תודה" "הגדרות" "רוב האפליקציות הכי נפוצות מופיעות כאן ומשתנות בהתאם להרגלי השימוש שלך" - "יש לגרור אפליקציות מהשורה התחתונה כדי לקבל הצעות לאפליקציות" + "כדי לקבל הצעות נוספות לאפליקציות, צריך לגרור אפליקציות מהשורה התחתונה" "הצעות לאפליקציות נוספו לאזור ריק" - "ההצעות לאפליקציות מופעלות" + "התכונה \'הצעות לאפליקציות\' מופעלת" "ההצעות לאפליקציות מושבתות" "האפליקציות החזויות: %1$s" "חשוב להקפיד להחליק מהקצה הימני." diff --git a/quickstep/res/values-ja/strings.xml b/quickstep/res/values-ja/strings.xml index 0c2a03b64e..38accd1062 100644 --- a/quickstep/res/values-ja/strings.xml +++ b/quickstep/res/values-ja/strings.xml @@ -31,9 +31,9 @@ "アプリの候補" "すべてのアプリ" "予測されたアプリ" - "ホーム画面の一番下の行でアプリの候補を利用できます" + "ホーム画面の一番下にアプリの候補を表示できます" "ホーム画面のお気に入りの行でアプリの候補を利用できます" - "ホーム画面で、使用頻度の高いアプリに簡単にアクセスできるようになります。アプリの候補はルーティンに応じて変わります。一番下の行にあるアプリがホーム画面に移動します。" + "ホーム画面で、使用頻度の高いアプリに簡単にアクセスできるようになります。アプリの候補はルーティンに応じて変わります。一番下の行にあるアプリは上に移動します。" "ホーム画面で、使用頻度の高いアプリに簡単にアクセスできるようになります。アプリの候補はルーティンに応じて変わります。お気に入りの行にあるアプリがホーム画面に移動します。" "ホーム画面で、使用頻度の高いアプリに簡単にアクセスできるようになります。アプリの候補はルーティンに応じて変わります。一番下の行にあるアプリが新しいフォルダに移動します。" "アプリの候補を利用" @@ -42,7 +42,7 @@ "使用頻度の高いアプリがここに表示されます(ルーティンに応じて変わります)" "一番下の行からアプリをドラッグするとアプリの候補が表示されます" "空いたスペースにアプリの候補が追加されます" - "アプリの候補は有効です" + "アプリの候補表示が有効です" "アプリの候補は無効です" "予測されたアプリ: %1$s" "一番左端からスワイプしてください。" diff --git a/quickstep/res/values-kk/strings.xml b/quickstep/res/values-kk/strings.xml index 292f4cb037..52d8b91c5c 100644 --- a/quickstep/res/values-kk/strings.xml +++ b/quickstep/res/values-kk/strings.xml @@ -29,7 +29,7 @@ "< 1 мин" "Бүгін %1$s қалды" "Ұсынылған қолданбалар" - "Барлық қолданбалар" + "Барлық қолданба" "Ұсынылатын қолданбалар" "Негізгі экранның төменгі жолында қолданбаларды ұсыну" "Ұсынылған қолданбалар негізгі экранда таңдаулылар арасында көрсетілетін болады" @@ -42,7 +42,7 @@ "Жиі пайдаланылатын қолданбалар осы жерде көрсетіледі. Олар күнделікті әрекеттеріңізге сәйкес өзгереді." "Ұсынылған қолданбаларды көру үшін төменгі қатардан керектерін сүйреп шығарыңыз." "Ұсынылған қолданбалар бос орынға қосылды." - "\"Ұсынылған қолданбалар\" функциясы қосулы." + "Ұсынылған қолданбалар функциясы қосылды." "\"Ұсынылған қолданбалар\" функциясы өшірулі." "Болжалды қолданба: %1$s" "Сол жақтағы ең шеткі нүктеден бастап сырғытыңыз." diff --git a/quickstep/res/values-kn/strings.xml b/quickstep/res/values-kn/strings.xml index 437fdbaae0..306f153035 100644 --- a/quickstep/res/values-kn/strings.xml +++ b/quickstep/res/values-kn/strings.xml @@ -33,9 +33,9 @@ "ನಿಮ್ಮ ಮುನ್ಸೂಚಿತ ಆ್ಯಪ್‌ಗಳು" "ನಿಮ್ಮ ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ನ ಕೆಳಭಾಗದ ಸಾಲಿನಲ್ಲಿ ಆ್ಯಪ್ ಸಲಹೆಗಳನ್ನು ಪಡೆಯಿರಿ" "ನಿಮ್ಮ ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ನ ಮೆಚ್ಚಿನವುಗಳ ಸಾಲಿನಲ್ಲಿ ಆ್ಯಪ್ ಸಲಹೆಗಳನ್ನು ಪಡೆಯಿರಿ" - "ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿಯೇ ನೀವು ಹೆಚ್ಚು ಬಳಸಿದ ಆ್ಯಪ್‌ಗಳನ್ನು ಸುಲಭವಾಗಿ ಪ್ರವೇಶಿಸಿ. ನಿಮ್ಮ ದಿನಚರಿಯನ್ನು ಆಧರಿಸಿ ಸಲಹೆಗಳು ಬದಲಾಗುತ್ತವೆ. ಕೆಳಭಾಗದ ಸಾಲಿನಲ್ಲಿನ ಆ್ಯಪ್‌ಗಳು ನಿಮ್ಮ ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ ಚಲಿಸುತ್ತವೆ." - "ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿಯೇ ನೀವು ಹೆಚ್ಚು ಬಳಸಿದ ಆ್ಯಪ್‌ಗಳನ್ನು ಸುಲಭವಾಗಿ ಪ್ರವೇಶಿಸಿ. ನಿಮ್ಮ ದಿನಚರಿಯನ್ನು ಆಧರಿಸಿ ಸಲಹೆಗಳು ಬದಲಾಗುತ್ತವೆ. ಮೆಚ್ಚಿನವುಗಳ ಸಾಲಿನಲ್ಲಿನ ಆ್ಯಪ್‌ಗಳು ನಿಮ್ಮ ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ಗೆ ಚಲಿಸುತ್ತವೆ." - "ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿಯೇ ನೀವು ಹೆಚ್ಚು ಬಳಸಿದ ಆ್ಯಪ್‌ಗಳನ್ನು ಸುಲಭವಾಗಿ ಪ್ರವೇಶಿಸಿ. ನಿಮ್ಮ ದಿನಚರಿಯನ್ನು ಆಧರಿಸಿ ಸಲಹೆಗಳು ಬದಲಾಗುತ್ತವೆ. ಕೆಳಭಾಗದ ಸಾಲಿನಲ್ಲಿನ ಆ್ಯಪ್‌ಗಳು ಹೊಸ ಫೋಲ್ಡರ್‌ಗೆ ಚಲಿಸುತ್ತವೆ." + "ನೀವು ಹೆಚ್ಚು ಬಳಸಿದ ಆ್ಯಪ್‌ಗಳನ್ನು ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿಯೇ ಸುಲಭವಾಗಿ ಪ್ರವೇಶಿಸಿ. ನಿಮ್ಮ ದಿನಚರಿಯನ್ನು ಆಧರಿಸಿ ಸಲಹೆಗಳು ಬದಲಾಗುತ್ತವೆ. ಕೆಳಭಾಗದ ಸಾಲಿನಲ್ಲಿನ ಆ್ಯಪ್‌ಗಳು ನಿಮ್ಮ ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ ಚಲಿಸುತ್ತವೆ." + "ನೀವು ಹೆಚ್ಚು ಬಳಸಿದ ಆ್ಯಪ್‌ಗಳನ್ನು ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿಯೇ ಸುಲಭವಾಗಿ ಪ್ರವೇಶಿಸಿ. ನಿಮ್ಮ ದಿನಚರಿಯನ್ನು ಆಧರಿಸಿ ಸಲಹೆಗಳು ಬದಲಾಗುತ್ತವೆ. ಮೆಚ್ಚಿನವುಗಳ ಸಾಲಿನಲ್ಲಿನ ಆ್ಯಪ್‌ಗಳು ನಿಮ್ಮ ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ಗೆ ಚಲಿಸುತ್ತವೆ." + "ನೀವು ಹೆಚ್ಚು ಬಳಸಿದ ಆ್ಯಪ್‌ಗಳನ್ನು ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿಯೇ ಸುಲಭವಾಗಿ ಪ್ರವೇಶಿಸಿ. ನಿಮ್ಮ ದಿನಚರಿಯನ್ನು ಆಧರಿಸಿ ಸಲಹೆಗಳು ಬದಲಾಗುತ್ತವೆ. ಕೆಳಭಾಗದ ಸಾಲಿನಲ್ಲಿನ ಆ್ಯಪ್‌ಗಳು ಹೊಸ ಫೋಲ್ಡರ್‌ಗೆ ಚಲಿಸುತ್ತವೆ." "ಆ್ಯಪ್ ಸಲಹೆಗಳನ್ನು ಪಡೆಯಿರಿ" "ಬೇಡ" "ಸೆಟ್ಟಿಂಗ್‌ಗಳು" diff --git a/quickstep/res/values-ko/strings.xml b/quickstep/res/values-ko/strings.xml index b31dba9735..1666a5a1f7 100644 --- a/quickstep/res/values-ko/strings.xml +++ b/quickstep/res/values-ko/strings.xml @@ -57,7 +57,7 @@ "왼쪽에서 스와이프하여 뒤로 돌아가세요" "돌아가려면 오른쪽에서 스와이프하세요" "마지막 화면으로 돌아가려면 왼쪽 가장자리에서 화면 중앙으로 스와이프하세요" - "오른쪽 가장자리에서 화면 중앙으로 스와이프해도 마지막 화면으로 돌아갈 수도 있습니다. 지금 동작을 취해 보세요" + "오른쪽 가장자리에서 화면 중앙으로 스와이프해도 마지막 화면으로 돌아갈 수 있습니다. 지금 동작을 취해 보세요" "화면 하단 가장자리에서 위로 스와이프하세요." "손가락을 떼기 전에 멈추지 않아야 합니다." "위로 똑바르게 스와이프하세요." @@ -81,7 +81,7 @@ "설정 완료" "위로 스와이프하여 홈으로 이동" "휴대전화를 사용할 준비가 되었습니다." - "탐색 접근성 설정" + "접근성 탐색 설정" "공유" "스크린샷" "이 작업은 앱 또는 조직에서 허용되지 않습니다." diff --git a/quickstep/res/values-ky/strings.xml b/quickstep/res/values-ky/strings.xml index eb19e13102..7f6741596e 100644 --- a/quickstep/res/values-ky/strings.xml +++ b/quickstep/res/values-ky/strings.xml @@ -40,7 +40,7 @@ "Жок, рахмат" "Жөндөөлөр" "Көп иштетилген колдонмолор ушул жерде көрүнүп, тартиптин негизинде өзгөрөт" - "Сунуштарды алып туруу үчүн, ылдый жактагы тилкедеги колдонмолорду сүйрөп келиңиз" + "Сунуштарды алып туруу үчүн ылдый жактагы тилкедеги колдонмолорду сүйрөп келиңиз" "Сунушталган колдонмолор бош жерге кошулат" "Сунушталган колдонмолор функциясы иштетилди" "Сунушталган колдонмолор функциясы өчүрүлгөн" diff --git a/quickstep/res/values-mn/strings.xml b/quickstep/res/values-mn/strings.xml index 43d9a27cc3..1ef7299f70 100644 --- a/quickstep/res/values-mn/strings.xml +++ b/quickstep/res/values-mn/strings.xml @@ -31,9 +31,9 @@ "Санал болгож буй аппууд" "Бүх апп" "Таны таамагласан аппууд" - "Үндсэн нүүрнийхээ доод мөрөнд санал болгож буй аппуудыг аваарай" + "Үндсэн нүүрнийхээ доод мөрд санал болгож буй аппуудыг аваарай" "Үндсэн нүүрний дуртай мөрнөөсөө санал болгож буй аппуудыг аваарай" - "Хамгийн их ашигладаг аппууддаа Үндсэн нүүрнээс хялбархан хандаарай. Санал болгож буй аппуудыг таны хэвшлээс хамаарч өөрчилнө. Доод мөрөнд буй аппуудыг таны Үндсэн нүүр лүү дээш зөөнө." + "Хамгийн их ашигладаг аппууддаа Үндсэн нүүрнээс хялбархан хандаарай. Санал болгож буй аппуудыг таны хэвшлээс хамаарч өөрчилнө. Доод мөрд буй аппуудыг таны Үндсэн нүүр лүү дээш зөөнө." "Хамгийн их ашигладаг аппууддаа Үндсэн нүүрнээсээ хялбархан хандаарай. Санал болголтыг таны хэвшлээс хамааран өөрчилнө. Дуртай мөрөнд буй аппуудыг таны үндсэн нүүр лүү зөөнө." "Хамгийн их ашигладаг аппууддаа Үндсэн нүүрнээс хялбархан хандаарай. Санал болгож буй аппуудыг таны хэвшлээс хамаарч өөрчилнө. Доод мөрөнд буй аппуудыг шинэ фолдер луу зөөнө." "Санал болгож буй аппуудыг авах" diff --git a/quickstep/res/values-ne/strings.xml b/quickstep/res/values-ne/strings.xml index f1351f186d..dea056b557 100644 --- a/quickstep/res/values-ne/strings.xml +++ b/quickstep/res/values-ne/strings.xml @@ -31,16 +31,16 @@ "एपसम्बन्धी सुझावहरू" "सबै एपहरू" "तपाईंलाई चाहिने एपहरू" - "तपाईंको गृह स्क्रिनको पुछारको पङ्क्तिमा सिफारिस गरिएका एपहरू प्राप्त गर्नुहोस्" - "आफ्नो होम स्क्रिनको मन पर्ने नामक पङ्क्तिमा सिफारिस गरिएका एपहरू प्राप्त गर्नुहोस्" - "गृह स्क्रिनबाटै आफूले सबैभन्दा बढी प्रयोग गर्ने एप सजिलै चलाउनुहोस्। सिफारिस गरिने एपहरूको क्रम तपाईंले एप प्रयोग गर्ने समयतालिकाअनुसार बदलिने छ। फेदको पङ्क्तिमा रहेका एपहरू तपाईंको गृह स्क्रिनको सिरानमा सर्ने छन्।" + "आफ्नो होम स्क्रिनको पुछारको रोमा एपसम्बन्धी सिफारिस प्राप्त गर्नुहोस्" + "आफ्नो होम स्क्रिनको मन पर्ने नामक पङ्क्तिमा एपसम्बन्धी सिफारिस प्राप्त गर्नुहोस्" + "आफूले सबैभन्दा बढी प्रयोग गर्ने एप होम स्क्रिनबाट सजिलै चलाउनुहोस्। सिफारिस गरिने एपहरूको क्रम तपाईंले एप प्रयोग गर्ने समयतालिकाअनुसार बदलिने छ। फेदको रोमा रहेका एपहरू तपाईंको होम स्क्रिनको सिरानमा सर्ने छन्।" "आफूले सबैभन्दा बढी प्रयोग गर्ने एपहरू गृह स्क्रिनबाटै सजिलैसँग खोल्नुहोस्। सिफारिस गरिने एपहरूको क्रम तपाईंको दिनचर्याअनुसार बदलिने छ। मन पर्ने नामक पङ्क्तिमा रहेका एपहरू सारेर होम स्क्रिनमा लगिने छन्।" "गृह स्क्रिनबाटै आफूले सबैभन्दा बढी प्रयोग गर्ने एप सजिलै चलाउनुहोस्। सिफारिस गरिने एपहरूको क्रम तपाईंले एप प्रयोग गर्ने समयतालिकाअनुसार बदलिने छ। फेदको पङ्क्तिमा रहेका एपहरू एउटा नयाँ फोल्डरमा सर्ने छन्।" - "सिफारिस गरिएका एपहरू प्राप्त गर्नुहोस्" + "एपसम्बन्धी सिफारिस प्राप्त गर्नुहोस्" "पर्दैन धन्यवाद" "सेटिङ" "सबैभन्दा बढी प्रयोग हुने एपहरू यहाँ देखिन्छन् र यी एपहरूको क्रम तपाईंले एप प्रयोग गर्ने समयतालिकाअनुसार बदलिरहन्छ" - "सिफारिस गरिएका एपहरू प्राप्त गर्न फेदको पङ्क्तिमा रहेका एपहरू ड्र्याग गरी हटाउनुहोस्" + "एपसम्बन्धी सिफारिस प्राप्त गर्न फेदको रोमा रहेका एपहरू ड्र्याग गरी हटाउनुहोस्" "खाली ठाउँमा सिफारिस गरिएका एपहरू थपिए" "सिफारिस गरिएका एपहरू देखाउने सुविधा सक्षम पारिएका छन्" "सिफारिस गरिएका एपहरू देखाउने सुविधा असक्षम पारिएको छ" diff --git a/quickstep/res/values-ru/strings.xml b/quickstep/res/values-ru/strings.xml index 6d28815ef2..ef05954ce8 100644 --- a/quickstep/res/values-ru/strings.xml +++ b/quickstep/res/values-ru/strings.xml @@ -33,14 +33,14 @@ "Ваши рекомендуемые приложения" "Рекомендуемые приложения будут появляться в нижнем ряду на главном экране" "Рекомендуемые приложения будут появляться в разделе избранных на главном экране" - "Быстрый доступ к часто используемым приложениям на главном экране. Список меняется с учетом ваших привычек. Приложения из нижнего ряда будут перемещены вверх на главный экран." + "Приложения, которыми вы часто пользуетесь, будут доступны прямо на главном экране. Их список может меняться с учетом ваших предпочтений. Приложения из нижнего ряда будут перемещены выше на главном экране." "Включите функцию для быстрого доступа к часто используемым приложениям на главном экране. Список меняется с учетом ваших действий. Приложения из раздела избранных будут перемещены на главный экран." - "Быстрый доступ к часто используемым приложениям на главном экране. Список меняется с учетом ваших привычек. Приложения из нижнего ряда будут перемещены в новую папку." + "Приложения, которыми вы часто пользуетесь, будут доступны прямо на главном экране. Их список может меняться с учетом ваших предпочтений. Приложения из нижнего ряда будут перемещены в новую папку." "Показывать рекомендации" "Отмена" "Настройки" "Здесь появляются часто используемые приложения. Список меняется с учетом ваших привычек." - "Перетащите приложения из нижнего ряда, чтобы получить рекомендации" + "Перетащите приложения из нижнего ряда, чтобы получить рекомендации." "Рекомендуемые приложения будут появляться на свободных местах." "Функция \"Рекомендуемые приложения\" включена." "Функция \"Рекомендуемые приложения\" отключена." diff --git a/quickstep/res/values-sl/strings.xml b/quickstep/res/values-sl/strings.xml index 19982dfcb9..ed035aa74e 100644 --- a/quickstep/res/values-sl/strings.xml +++ b/quickstep/res/values-sl/strings.xml @@ -33,17 +33,17 @@ "Predvidene aplikacije" "Oglejte si predlagane aplikacije v spodnji vrstici začetnega zaslona" "Prejemajte predloge aplikacij v vrstici s priljubljenimi na začetnem zaslonu" - "Preprosto dostopajte do najpogosteje uporabljenih aplikacij kar na začetnem zaslonu. Predlogi se spreminjajo na podlagi dejanj, ki jih pogosto izvajate. Aplikacije se iz spodnje vrstice premaknejo na začetni zaslon." + "Preprosto dostopajte do najpogosteje uporabljenih aplikacij kar na začetnem zaslonu. Predlogi se spreminjajo na podlagi dejanj, ki jih pogosto izvajate. Aplikacije iz spodnje vrstice se premaknejo na začetni zaslon." "Preprosto dostopajte do najpogosteje uporabljenih aplikacij kar na začetnem zaslonu. Predlogi se spreminjajo na podlagi dejanj, ki jih pogosto izvajate. Aplikacije v vrstici s priljubljenimi bodo premaknjene na začetni zaslon." - "Preprosto dostopajte do najpogosteje uporabljenih aplikacij kar na začetnem zaslonu. Predlogi se spreminjajo na podlagi dejanj, ki jih pogosto izvajate. Aplikacije se iz spodnje vrstice premaknejo v novo mapo." + "Preprosto dostopajte do najpogosteje uporabljenih aplikacij kar na začetnem zaslonu. Predlogi se spreminjajo na podlagi dejanj, ki jih pogosto izvajate. Aplikacije iz spodnje vrstice se premaknejo v novo mapo." "Prikaži predlagane aplikacije" "Ne, hvala" "Nastavitve" "Tukaj so navedene najpogosteje uporabljene aplikacije in spremembe na podlagi rutin" - "Če si želite ogledati predlagane aplikacije, povlecite aplikacije iz spodnje vrstice" + "Če si želite ogledati predlagane aplikacije, povlecite aplikacije iz spodnje vrstice." "Predlagane aplikacije so bile dodane v prazni prostor" - "Predlogi aplikacij so omogočeni" - "Predlogi aplikacij so onemogočeni" + "Predlogi aplikacij so omogočeni." + "Predlogi aplikacij so onemogočeni." "Predvidena aplikacija: %1$s" "Pazite, da ne povlečete s skrajno levega roba." "Pazite, da povlečete z levega roba do sredine zaslona in dvignete prst." diff --git a/quickstep/res/values-sv/strings.xml b/quickstep/res/values-sv/strings.xml index 4b4407b423..1838643a64 100644 --- a/quickstep/res/values-sv/strings.xml +++ b/quickstep/res/values-sv/strings.xml @@ -51,8 +51,7 @@ "Se till att du sveper från den högra kanten till mitten av skärmen och sedan släpper." "Nu kan du svepa från vänster för att gå tillbaka." "Nu kan du svepa från höger för att gå tillbaka. Nu ska du få lära dig hur du byter mellan appar." - - + "Du är klar med rörelsen för att gå tillbaka." "Se till att du inte sveper för nära skärmens nederkant." "Öppna inställningarna om du vill ändra rörelsens känslighet" "Återgå genom att svepa från vänster" @@ -62,19 +61,15 @@ "Se till att du sveper från nederkanten på skärmen." "Se till att du sveper i en jämn rörelse innan du släpper." "Se till att du sveper rakt uppåt." - - - - + "Du är klar med rörelsen för att öppna startskärmen. Nu ska du få lära dig hur du går tillbaka." + "Du är klar med rörelsen för att öppna startskärmen." "Svep för att öppna startskärmen" "Svep uppåt från skärmens nederkant. Du kan alltid återgå startskärmen med den här rörelsen." "Se till att du sveper från nederkanten på skärmen." "Testa att trycka längre på fönstret innan du släpper." "Se till att du sveper rakt uppåt och sedan pausar." - - - - + "Du har lärt dig hur du använder rörelser. Om du vill inaktivera rörelser öppnar du inställningarna." + "Du är klar med rörelsen för att byta mellan appar." "Svep för att byta mellan appar" "Svep uppåt från skärmens nederkant. Håll fingret nedtryckt och släpp sedan." "Klart" diff --git a/quickstep/res/values-te/strings.xml b/quickstep/res/values-te/strings.xml index a0351a79e3..0d18e35745 100644 --- a/quickstep/res/values-te/strings.xml +++ b/quickstep/res/values-te/strings.xml @@ -31,11 +31,11 @@ "యాప్ సలహాలు" "అన్ని యాప్‌లు" "మీ సూచించబడిన యాప్‌లు" - "మీ హోమ్ స్క్రీన్‌ దిగువ వరుసలో యాప్ సలహాలను పొందండి" + "మీ మొదటి స్క్రీన్‌ దిగువ వరుసలో యాప్ సలహాలను పొందండి" "మీ హోమ్ స్క్రీన్‌లోని ఇష్టమైన వాటి వరుసలో యాప్ సూచ‌న‌లు పొందండి" - "మీరు ఎక్కువగా ఉపయోగించే యాప్‌లను నేరుగా హోమ్ స్క్రీన్‌లోనే సులభంగా యాక్సెస్ చేయండి. మీ రోజువారీ కార్యకలాపాలను బట్టి సూచనలు మారతాయి. దిగువ వరుసలోని యాప్‌లు మీ హోమ్ స్క్రీన్ పైకి చేరుకుంటాయి." - "మీరు ఎక్కువగా ఉపయోగించే యాప్‌లను నేరుగా హోమ్ స్క్రీన్‌లోనే సులభంగా యాక్సెస్ చేయండి. మీ రోజువారీ కార్యకలాపాలను బట్టి సూచనలు మారతాయి. ఇష్టమైన వాటి వరుసలోని యాప్‌లు మీ హోమ్ స్క్రీన్‌కు చేరుకుంటాయి." - "మీరు ఎక్కువగా ఉపయోగించే యాప్‌లను నేరుగా హోమ్ స్క్రీన్‌లోనే సులభంగా యాక్సెస్ చేయండి. మీ రోజువారీ కార్యకలాపాలను బట్టి సూచనలు మారతాయి. దిగువ వరుసలోని యాప్‌లు కొత్త ఫోల్డర్‌కు తరలించబడతాయి." + "మీరు ఎక్కువగా ఉపయోగించే యాప్‌లను నేరుగా మొదటి స్క్రీన్‌లోనే సులభంగా యాక్సెస్ చేయండి. మీ రోజువారీ కార్యకలాపాలను బట్టి సూచనలు మారతాయి. దిగువ వరుసలోని యాప్‌లు మీ మొదటి స్క్రీన్ పైకి చేరుకుంటాయి." + "మీరు ఎక్కువగా ఉపయోగించే యాప్‌లను నేరుగా మొదటి స్క్రీన్‌లోనే సులభంగా యాక్సెస్ చేయండి. మీ రోజువారీ కార్యకలాపాలను బట్టి సూచనలు మారతాయి. ఇష్టమైన వాటి వరుసలోని యాప్‌లు మీ మొదటి స్క్రీన్‌కు చేరుకుంటాయి." + "మీరు ఎక్కువగా ఉపయోగించే యాప్‌లను నేరుగా మొదటి స్క్రీన్‌లోనే సులభంగా యాక్సెస్ చేయండి. మీ రోజువారీ కార్యకలాపాలను బట్టి సూచనలు మారతాయి. దిగువ వరుసలోని యాప్‌లు కొత్త ఫోల్డర్‌కు తరలించబడతాయి." "యాప్ సూచ‌న‌లను పొందండి" "వద్దు" "సెట్టింగ్‌లు" diff --git a/quickstep/res/values-th/strings.xml b/quickstep/res/values-th/strings.xml index a13b43b776..1758589f8b 100644 --- a/quickstep/res/values-th/strings.xml +++ b/quickstep/res/values-th/strings.xml @@ -42,7 +42,7 @@ "แอปที่ใช้มากที่สุดจะปรากฎที่นี่และจะเปลี่ยนไปตามการใช้งานประจำ" "ลากแอปออกจากแถวล่างเพื่อดูแอปแนะนำ" "เพิ่มคำแนะนำเกี่ยวกับแอปในพื้นที่ว่างแล้ว" - "เปิดใช้คำแนะนำเกี่ยวกับแอปแล้ว" + "เปิดใช้แอปแนะนำแล้ว" "ปิดใช้คำแนะนำเกี่ยวกับแอปอยู่" "แอปที่คาดว่าจะใช้: %1$s" "ตรวจสอบว่าปัดจากขอบด้านซ้ายสุด" diff --git a/quickstep/res/values-zh-rTW/strings.xml b/quickstep/res/values-zh-rTW/strings.xml index f3cb45840c..51bb189cd8 100644 --- a/quickstep/res/values-zh-rTW/strings.xml +++ b/quickstep/res/values-zh-rTW/strings.xml @@ -31,16 +31,16 @@ "應用程式建議" "所有應用程式" "系統預測你會使用的應用程式" - "在主畫面的底部取得應用程式建議" + "在主畫面底部顯示應用程式建議" "在主畫面的收藏列取得應用程式建議" - "在主畫面上輕鬆存取最常使用的應用程式。應用程式建議會依據你的日常使用習慣而有所不同。系統會將底部列出的應用程式上移到主畫面。" - "在主畫面上輕鬆存取最常使用的應用程式。系統會根據你的日常使用習慣提供不同的應用程式建議,並在主畫面顯示收藏列中的應用程式。" - "在主畫面上輕鬆存取最常使用的應用程式。應用程式建議會根據日常安排有所不同。系統會將底部列出的應用程式移到新的資料夾。" + "你可以輕鬆地在主畫面上找到自己常用的應用程式。應用程式建議會依據你的日常使用習慣而有所不同。系統會將底部列出的應用程式上移到主畫面。" + "你可以輕鬆地在主畫面上找到自己常用的應用程式。系統會根據你的日常使用習慣提供不同的應用程式建議,並在主畫面顯示收藏列中的應用程式。" + "你可以輕鬆地在主畫面上找到自己常用的應用程式。應用程式建議會根據日常安排有所不同。系統會將底部列出的應用程式移到新的資料夾。" "取得應用程式建議" "不用了,謝謝" "設定" "最常使用的應用程式會顯示在這裡,顯示的項目會根據日常安排有所不同" - "將應用程式從底部列向外拖曳,即可取得應用程式建議" + "將底部列中顯示的應用程式拖曳出來,即可取得應用程式建議" "應用程式建議已新增到空白位置" "應用程式建議功能已啟用" "應用程式建議功能已停用" @@ -83,7 +83,7 @@ "你可以開始使用手機了" "無障礙工具的導覽設定" "分享" - "擷取螢幕畫面" + "螢幕截圖" "這個應用程式或貴機構不允許執行這個動作" "要略過手勢操作教學課程嗎?" "你之後可以在「%1$s」應用程式找到這些說明" diff --git a/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java b/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java index be98157b1b..1090099d2f 100644 --- a/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java +++ b/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java @@ -152,16 +152,18 @@ public abstract class LauncherAnimationRunner implements RemoteAnimationRunnerCo @UiThread public void setAnimation(AnimatorSet animation, Context context) { - setAnimation(animation, context, null); + setAnimation(animation, context, null, true); } /** * Sets the animation to play for this app launch + * @param skipFirstFrame Iff true, we skip the first frame of the animation. + * We set to false when skipping first frame causes jank. */ @UiThread public void setAnimation(AnimatorSet animation, Context context, - @Nullable Runnable onCompleteCallback) { + @Nullable Runnable onCompleteCallback, boolean skipFirstFrame) { if (mInitialized) { throw new IllegalStateException("Animation already initialized"); } @@ -187,10 +189,12 @@ public abstract class LauncherAnimationRunner implements RemoteAnimationRunnerCo }); mAnimator.start(); - // Because t=0 has the app icon in its original spot, we can skip the - // first frame and have the same movement one frame earlier. - mAnimator.setCurrentPlayTime( - Math.min(getSingleFrameMs(context), mAnimator.getTotalDuration())); + if (skipFirstFrame) { + // Because t=0 has the app icon in its original spot, we can skip the + // first frame and have the same movement one frame earlier. + mAnimator.setCurrentPlayTime( + Math.min(getSingleFrameMs(context), mAnimator.getTotalDuration())); + } } } } diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index 26d407fb96..65df237e5f 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -38,6 +38,7 @@ import static com.android.launcher3.config.FeatureFlags.KEYGUARD_ANIMATION; import static com.android.launcher3.config.FeatureFlags.SEPARATE_RECENTS_ACTIVITY; import static com.android.launcher3.dragndrop.DragLayer.ALPHA_INDEX_TRANSITIONS; import static com.android.launcher3.statehandlers.DepthController.DEPTH; +import static com.android.launcher3.util.DisplayController.getSingleFrameMs; import static com.android.quickstep.TaskUtils.taskIsATargetWithMode; import static com.android.quickstep.TaskViewUtils.findTaskViewToLaunch; import static com.android.systemui.shared.system.QuickStepContract.getWindowCornerRadius; @@ -340,12 +341,17 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener final int rotationChange = getRotationChange(appTargets); // Note: the targetBounds are relative to the launcher + int startDelay = getSingleFrameMs(mLauncher); Rect windowTargetBounds = getWindowTargetBounds(appTargets, rotationChange); - anim.play(getOpeningWindowAnimators(v, appTargets, wallpaperTargets, nonAppTargets, - windowTargetBounds, areAllTargetsTranslucent(appTargets), rotationChange)); + Animator windowAnimator = getOpeningWindowAnimators(v, appTargets, wallpaperTargets, + nonAppTargets, windowTargetBounds, areAllTargetsTranslucent(appTargets), + rotationChange); + windowAnimator.setStartDelay(startDelay); + anim.play(windowAnimator); if (launcherClosing) { + // Delay animation by a frame to avoid jank. Pair launcherContentAnimator = - getLauncherContentAnimator(true /* isAppOpening */); + getLauncherContentAnimator(true /* isAppOpening */, startDelay); anim.play(launcherContentAnimator.first); anim.addListener(new AnimatorListenerAdapter() { @Override @@ -436,8 +442,10 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener * * @param isAppOpening True when this is called when an app is opening. * False when this is called when an app is closing. + * @param startDelay Start delay duration. */ - private Pair getLauncherContentAnimator(boolean isAppOpening) { + private Pair getLauncherContentAnimator(boolean isAppOpening, + int startDelay) { AnimatorSet launcherAnimator = new AnimatorSet(); Runnable endListener; @@ -528,6 +536,8 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener mLauncher.getWorkspace().getPageIndicator().skipAnimationsToEnd(); }; } + + launcherAnimator.setStartDelay(startDelay); return new Pair<>(launcherAnimator, endListener); } @@ -633,7 +643,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener ? 0 : getWindowCornerRadius(mLauncher.getResources()); final float finalShadowRadius = appTargetsAreTranslucent ? 0 : mMaxShadowRadius; - appAnimator.addUpdateListener(new MultiValueUpdateListener() { + MultiValueUpdateListener listener = new MultiValueUpdateListener() { FloatProp mDx = new FloatProp(0, prop.dX, 0, prop.xDuration, AGGRESSIVE_EASE); FloatProp mDy = new FloatProp(0, prop.dY, 0, prop.yDuration, AGGRESSIVE_EASE); @@ -662,7 +672,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener ANIMATION_NAV_FADE_IN_DURATION, NAV_FADE_IN_INTERPOLATOR); @Override - public void onUpdate(float percent) { + public void onUpdate(float percent, boolean initOnly) { // Calculate the size of the scaled icon. float iconWidth = launcherIconBounds.width() * mIconScaleToFitScreen.value; float iconHeight = launcherIconBounds.height() * mIconScaleToFitScreen.value; @@ -707,6 +717,12 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener floatingIconBounds.right += offsetX; floatingIconBounds.bottom += offsetY; + if (initOnly) { + floatingView.update(mIconAlpha.value, 255, floatingIconBounds, percent, 0f, + mWindowRadius.value * scale, true /* isOpening */); + return; + } + ArrayList params = new ArrayList<>(); for (int i = appTargets.length - 1; i >= 0; i--) { RemoteAnimationTargetCompat target = appTargets[i]; @@ -779,7 +795,10 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener surfaceApplier.scheduleApply(params.toArray(new SurfaceParams[params.size()])); } - }); + }; + appAnimator.addUpdateListener(listener); + // Since we added a start delay, call update here to init the FloatingIconView properly. + listener.onUpdate(0, true /* initOnly */); animatorSet.playTogether(appAnimator, getBackgroundAnimator(appTargets)); return animatorSet; @@ -869,7 +888,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener ANIMATION_NAV_FADE_IN_DURATION, NAV_FADE_IN_INTERPOLATOR); @Override - public void onUpdate(float percent) { + public void onUpdate(float percent, boolean initOnly) { widgetBackgroundBounds.set(mDx.value - mWidth.value / 2f, mDy.value - mHeight.value / 2f, mDx.value + mWidth.value / 2f, mDy.value + mHeight.value / 2f); @@ -1128,7 +1147,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener DEACCEL_1_7); @Override - public void onUpdate(float percent) { + public void onUpdate(float percent, boolean initOnly) { SurfaceParams[] params = new SurfaceParams[appTargets.length]; for (int i = appTargets.length - 1; i >= 0; i--) { RemoteAnimationTargetCompat target = appTargets[i]; @@ -1278,8 +1297,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener if (mLauncher.isInState(LauncherState.ALL_APPS)) { Pair contentAnimator = - getLauncherContentAnimator(false /* isAppOpening */); - contentAnimator.first.setStartDelay(LAUNCHER_RESUME_START_DELAY); + getLauncherContentAnimator(false, LAUNCHER_RESUME_START_DELAY); anim.play(contentAnimator.first); anim.addListener(new AnimatorListenerAdapter() { @Override @@ -1328,27 +1346,32 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener final boolean launchingFromWidget = mV instanceof LauncherAppWidgetHostView; final boolean launchingFromRecents = isLaunchingFromRecents(mV, appTargets); + final boolean skipFirstFrame; if (launchingFromWidget) { composeWidgetLaunchAnimator(anim, (LauncherAppWidgetHostView) mV, appTargets, wallpaperTargets, nonAppTargets); addCujInstrumentation( anim, InteractionJankMonitorWrapper.CUJ_APP_LAUNCH_FROM_WIDGET); + skipFirstFrame = true; } else if (launchingFromRecents) { composeRecentsLaunchAnimator(anim, mV, appTargets, wallpaperTargets, nonAppTargets, launcherClosing); addCujInstrumentation( anim, InteractionJankMonitorWrapper.CUJ_APP_LAUNCH_FROM_RECENTS); + skipFirstFrame = true; } else { composeIconLaunchAnimator(anim, mV, appTargets, wallpaperTargets, nonAppTargets, launcherClosing); addCujInstrumentation(anim, InteractionJankMonitorWrapper.CUJ_APP_LAUNCH_FROM_ICON); + skipFirstFrame = false; } if (launcherClosing) { anim.addListener(mForceInvisibleListener); } - result.setAnimation(anim, mLauncher, mOnEndCallback::executeAllAndDestroy); + result.setAnimation(anim, mLauncher, mOnEndCallback::executeAllAndDestroy, + skipFirstFrame); } } diff --git a/quickstep/src/com/android/launcher3/appprediction/AppsDividerView.java b/quickstep/src/com/android/launcher3/appprediction/AppsDividerView.java index d17a5aed9b..63a569a65c 100644 --- a/quickstep/src/com/android/launcher3/appprediction/AppsDividerView.java +++ b/quickstep/src/com/android/launcher3/appprediction/AppsDividerView.java @@ -74,6 +74,8 @@ public class AppsDividerView extends View implements StateListener().addToIntent(homeIntent); + + Launcher.ACTIVITY_TRACKER.registerCallback(new HotseatActivityTracker()); startActivity(homeIntent); finish(); } diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 8f42993b62..a9daceefbb 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -349,6 +349,13 @@ public abstract class AbsSwipeUpHandler, } if (mActivity != null) { + if (mStateCallback.hasStates(STATE_GESTURE_COMPLETED)) { + // If the activity has restarted between setting the page scroll settling callback + // and actually receiving the callback, just mark the gesture completed + mGestureState.setState(STATE_RECENTS_SCROLLING_FINISHED); + return true; + } + // The launcher may have been recreated as a result of device rotation. int oldState = mStateCallback.getState() & ~LAUNCHER_UI_STATES; initStateCallbacks(); @@ -1717,13 +1724,12 @@ public abstract class AbsSwipeUpHandler, /** * Registers a callback to run when the activity is ready. - * @param intent The intent that will be used to start the activity if it doesn't exist already. */ - public void initWhenReady(Intent intent) { + public void initWhenReady() { // Preload the plan RecentsModel.INSTANCE.get(mContext).getTasks(null); - mActivityInitListener.register(intent); + mActivityInitListener.register(); } /** diff --git a/quickstep/src/com/android/quickstep/LauncherSwipeHandlerV2.java b/quickstep/src/com/android/quickstep/LauncherSwipeHandlerV2.java index 47d94ba2ad..19cad53bb1 100644 --- a/quickstep/src/com/android/quickstep/LauncherSwipeHandlerV2.java +++ b/quickstep/src/com/android/quickstep/LauncherSwipeHandlerV2.java @@ -190,6 +190,12 @@ public class LauncherSwipeHandlerV2 extends return new FloatingViewHomeAnimationFactory(floatingWidgetView) { + @Override + @Nullable + protected View getViewIgnoredInWorkspaceRevealAnimation() { + return hostView; + } + @Override public RectF getWindowTargetRect() { super.getWindowTargetRect(); @@ -387,6 +393,16 @@ public class LauncherSwipeHandlerV2 extends } private class LauncherHomeAnimationFactory extends HomeAnimationFactory { + + /** + * Returns a view which should be excluded from the Workspace animation, or null if there + * is no view to exclude. + */ + @Nullable + protected View getViewIgnoredInWorkspaceRevealAnimation() { + return null; + } + @NonNull @Override public AnimatorPlaybackController createActivityAnimationToHome() { @@ -400,7 +416,8 @@ public class LauncherSwipeHandlerV2 extends @Override public void playAtomicAnimation(float velocity) { if (!PROTOTYPE_APP_CLOSE.get()) { - new StaggeredWorkspaceAnim(mActivity, velocity, true /* animateOverviewScrim */) + new StaggeredWorkspaceAnim(mActivity, velocity, true /* animateOverviewScrim */, + getViewIgnoredInWorkspaceRevealAnimation()) .start(); } else if (shouldPlayAtomicWorkspaceReveal()) { new WorkspaceRevealAnim(mActivity, true).start(); diff --git a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java index dbdd75fc13..2beef0a7ce 100644 --- a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java +++ b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java @@ -184,9 +184,7 @@ public class OverviewCommandHelper { .newHandler(gestureState, cmd.createTime); interactionHandler.setGestureEndCallback( () -> onTransitionComplete(cmd, interactionHandler)); - - Intent intent = new Intent(interactionHandler.getLaunchIntent()); - interactionHandler.initWhenReady(intent); + interactionHandler.initWhenReady(); RecentsAnimationListener recentAnimListener = new RecentsAnimationListener() { @Override @@ -212,6 +210,7 @@ public class OverviewCommandHelper { cmd.mActiveCallbacks.addListener(recentAnimListener); mTaskAnimationManager.notifyRecentsAnimationState(recentAnimListener); } else { + Intent intent = new Intent(interactionHandler.getLaunchIntent()); intent.putExtra(INTENT_EXTRA_LOG_TRACE_ID, gestureState.getGestureId()); cmd.mActiveCallbacks = mTaskAnimationManager.startRecentsAnimation( gestureState, intent, interactionHandler); diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java index 0e85ec3760..3d66823c98 100644 --- a/quickstep/src/com/android/quickstep/RecentsActivity.java +++ b/quickstep/src/com/android/quickstep/RecentsActivity.java @@ -141,7 +141,7 @@ public final class RecentsActivity extends StatefulActivity { @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); - ACTIVITY_TRACKER.handleNewIntent(this, intent); + ACTIVITY_TRACKER.handleNewIntent(this); } /** @@ -214,7 +214,8 @@ public final class RecentsActivity extends StatefulActivity { AnimatorSet anim = composeRecentsLaunchAnimator(taskView, appTargets, wallpaperTargets, nonAppTargets); anim.addListener(resetStateListener()); - result.setAnimation(anim, RecentsActivity.this, onEndCallback::executeAllAndDestroy); + result.setAnimation(anim, RecentsActivity.this, onEndCallback::executeAllAndDestroy, + true /* skipFirstFrame */); }; final LauncherAnimationRunner wrapper = new WrappedLauncherAnimationRunner<>( @@ -386,7 +387,8 @@ public final class RecentsActivity extends StatefulActivity { anim.play(controller.getAnimationPlayer()); anim.setDuration(HOME_APPEAR_DURATION); result.setAnimation(anim, this, - () -> getStateManager().goToState(RecentsState.HOME, false)); + () -> getStateManager().goToState(RecentsState.HOME, false), + true /* skipFirstFrame */); } @Override diff --git a/quickstep/src/com/android/quickstep/TaskViewUtils.java b/quickstep/src/com/android/quickstep/TaskViewUtils.java index 59bd1ed9ea..3293810582 100644 --- a/quickstep/src/com/android/quickstep/TaskViewUtils.java +++ b/quickstep/src/com/android/quickstep/TaskViewUtils.java @@ -249,7 +249,7 @@ public final class TaskViewUtils { ANIMATION_NAV_FADE_IN_DURATION, NAV_FADE_IN_INTERPOLATOR); @Override - public void onUpdate(float percent) { + public void onUpdate(float percent, boolean initOnly) { final SurfaceParams.Builder navBuilder = new SurfaceParams.Builder(navBarTarget.leash); if (mNavFadeIn.value > mNavFadeIn.getStartValue()) { diff --git a/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java b/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java index 9878d4527a..725c7c45a5 100644 --- a/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java +++ b/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java @@ -389,8 +389,7 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC mInteractionHandler = mHandlerFactory.newHandler(mGestureState, touchTimeMs); mInteractionHandler.setGestureEndCallback(this::onInteractionGestureFinished); mMotionPauseDetector.setOnMotionPauseListener(mInteractionHandler.getMotionPauseListener()); - Intent intent = new Intent(mInteractionHandler.getLaunchIntent()); - mInteractionHandler.initWhenReady(intent); + mInteractionHandler.initWhenReady(); if (mTaskAnimationManager.isRecentsAnimationRunning()) { mActiveCallbacks = mTaskAnimationManager.continueRecentsAnimation(mGestureState); @@ -398,6 +397,7 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC mTaskAnimationManager.notifyRecentsAnimationState(mInteractionHandler); notifyGestureStarted(true /*isLikelyToStartNewTask*/); } else { + Intent intent = new Intent(mInteractionHandler.getLaunchIntent()); intent.putExtra(INTENT_EXTRA_LOG_TRACE_ID, mGestureState.getGestureId()); mActiveCallbacks = mTaskAnimationManager.startRecentsAnimation(mGestureState, intent, mInteractionHandler); diff --git a/quickstep/src/com/android/quickstep/util/ActivityInitListener.java b/quickstep/src/com/android/quickstep/util/ActivityInitListener.java index dfb8c1d548..b9879ab82b 100644 --- a/quickstep/src/com/android/quickstep/util/ActivityInitListener.java +++ b/quickstep/src/com/android/quickstep/util/ActivityInitListener.java @@ -26,7 +26,8 @@ import com.android.launcher3.util.ActivityTracker.SchedulerCallback; import java.util.function.BiPredicate; -public class ActivityInitListener implements SchedulerCallback { +public class ActivityInitListener implements + SchedulerCallback { private BiPredicate mOnInitListener; private final ActivityTracker mActivityTracker; @@ -47,6 +48,7 @@ public class ActivityInitListener implements SchedulerCa @Override public final boolean init(T activity, boolean alreadyOnHome) { if (!mIsRegistered) { + // Don't receive any more updates return false; } return handleInit(activity, alreadyOnHome); @@ -59,18 +61,17 @@ public class ActivityInitListener implements SchedulerCa /** * Registers the activity-created listener. If the activity is already created, then the * callback provided in the constructor will be called synchronously. - * @param intent The intent that will be used to initialize the activity, if the activity - * doesn't already exist. We add the callback as an extra on this intent. */ - public void register(Intent intent) { + public void register() { mIsRegistered = true; - mActivityTracker.runCallbackWhenActivityExists(this, intent); + mActivityTracker.registerCallback(this); } /** * After calling this, we won't {@link #init} even when the activity is ready. */ public void unregister() { + mActivityTracker.unregisterCallback(this); mIsRegistered = false; mOnInitListener = null; } @@ -82,9 +83,9 @@ public class ActivityInitListener implements SchedulerCa */ public void registerAndStartActivity(Intent intent, RemoteAnimationProvider animProvider, Context context, Handler handler, long duration) { - mIsRegistered = true; + register(); Bundle options = animProvider.toActivityOptions(handler, duration, context).toBundle(); - context.startActivity(addToIntent(new Intent(intent)), options); + context.startActivity(new Intent(intent), options); } } diff --git a/quickstep/src/com/android/quickstep/util/MultiValueUpdateListener.java b/quickstep/src/com/android/quickstep/util/MultiValueUpdateListener.java index b4ae1ca7fb..1c3c9c2fae 100644 --- a/quickstep/src/com/android/quickstep/util/MultiValueUpdateListener.java +++ b/quickstep/src/com/android/quickstep/util/MultiValueUpdateListener.java @@ -40,10 +40,14 @@ public abstract class MultiValueUpdateListener implements ValueAnimator.Animator newPercent = prop.mInterpolator.getInterpolation(newPercent); prop.value = prop.mEnd * newPercent + prop.mStart * (1 - newPercent); } - onUpdate(percent); + onUpdate(percent, false /* initOnly */); } - public abstract void onUpdate(float percent); + /** + * @param percent The total animation progress. + * @param initOnly When true, only does enough work to initialize the animation. + */ + public abstract void onUpdate(float percent, boolean initOnly); public final class FloatProp { diff --git a/quickstep/src/com/android/quickstep/util/RectFSpringAnim2.java b/quickstep/src/com/android/quickstep/util/RectFSpringAnim2.java index 93b34822ad..c331a136d9 100644 --- a/quickstep/src/com/android/quickstep/util/RectFSpringAnim2.java +++ b/quickstep/src/com/android/quickstep/util/RectFSpringAnim2.java @@ -280,7 +280,7 @@ public class RectFSpringAnim2 extends RectFSpringAnim { } @Override - public void onUpdate(float percent) {} + public void onUpdate(float percent, boolean initOnly) {} }; } diff --git a/quickstep/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java b/quickstep/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java index 49aec933b7..ccc587cd87 100644 --- a/quickstep/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java +++ b/quickstep/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java @@ -32,6 +32,8 @@ import android.animation.ValueAnimator; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.Nullable; + import com.android.launcher3.BaseQuickstepLauncher; import com.android.launcher3.CellLayout; import com.android.launcher3.DeviceProfile; @@ -68,15 +70,18 @@ public class StaggeredWorkspaceAnim { private final float mSpringTransY; private final AnimatorSet mAnimators = new AnimatorSet(); + private final @Nullable View mIgnoredView; - public StaggeredWorkspaceAnim(Launcher launcher, float velocity, boolean animateOverviewScrim) { - this(launcher, velocity, animateOverviewScrim, true); + public StaggeredWorkspaceAnim(Launcher launcher, float velocity, boolean animateOverviewScrim, + @Nullable View ignoredView) { + this(launcher, velocity, animateOverviewScrim, ignoredView, true); } public StaggeredWorkspaceAnim(Launcher launcher, float velocity, boolean animateOverviewScrim, - boolean staggerWorkspace) { + @Nullable View ignoredView, boolean staggerWorkspace) { prepareToAnimate(launcher, animateOverviewScrim); + mIgnoredView = ignoredView; mVelocity = velocity; // Scale the translationY based on the initial velocity to better sync the workspace items @@ -224,6 +229,7 @@ public class StaggeredWorkspaceAnim { * @param totalRows Total number of rows. */ private void addStaggeredAnimationForView(View v, int row, int totalRows) { + if (mIgnoredView != null && mIgnoredView == v) return; // Invert the rows, because we stagger starting from the bottom of the screen. int invertedRow = totalRows - row; // Add 1 to the inverted row so that the bottom most row has a start delay. diff --git a/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java b/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java index 1062652ed4..61a2eafe6d 100644 --- a/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java +++ b/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java @@ -298,16 +298,16 @@ public class SwipePipToHomeAnimator extends ValueAnimator { final float degree, positionX, positionY; if (mFromRotation == Surface.ROTATION_90) { degree = -90 * fraction; - positionX = fraction * (mDestinationBoundsTransformed.left - mAppBounds.left) - + mAppBounds.left; - positionY = fraction * (mDestinationBoundsTransformed.bottom - mAppBounds.top) - + mAppBounds.top; + positionX = fraction * (mDestinationBoundsTransformed.left - mStartBounds.left) + + mStartBounds.left; + positionY = fraction * (mDestinationBoundsTransformed.bottom - mStartBounds.top) + + mStartBounds.top; } else { degree = 90 * fraction; - positionX = fraction * (mDestinationBoundsTransformed.right - mAppBounds.left) - + mAppBounds.left; - positionY = fraction * (mDestinationBoundsTransformed.top - mAppBounds.top) - + mAppBounds.top; + positionX = fraction * (mDestinationBoundsTransformed.right - mStartBounds.left) + + mStartBounds.left; + positionY = fraction * (mDestinationBoundsTransformed.top - mStartBounds.top) + + mStartBounds.top; } return new RotatedPosition(degree, positionX, positionY); } diff --git a/quickstep/src/com/android/quickstep/views/AllAppsEduView.java b/quickstep/src/com/android/quickstep/views/AllAppsEduView.java index 00993e3658..f67940ab56 100644 --- a/quickstep/src/com/android/quickstep/views/AllAppsEduView.java +++ b/quickstep/src/com/android/quickstep/views/AllAppsEduView.java @@ -173,7 +173,7 @@ public class AllAppsEduView extends AbstractFloatingView { FloatProp mGradientAlpha = new FloatProp(0, 255, firstPart, secondPart * 0.3f, LINEAR); @Override - public void onUpdate(float progress) { + public void onUpdate(float progress, boolean initOnly) { temp.set(circleBoundsOg); temp.offset(0, (int) -mDeltaY.value); Utilities.scaleRectAboutCenter(temp, mCircleScale.value); diff --git a/res/drawable/work_apps_toggle_background.xml b/res/drawable/work_apps_toggle_background.xml index a04d269875..b7115f86b5 100644 --- a/res/drawable/work_apps_toggle_background.xml +++ b/res/drawable/work_apps_toggle_background.xml @@ -24,7 +24,7 @@ - + diff --git a/res/drawable/work_card.xml b/res/drawable/work_card.xml new file mode 100644 index 0000000000..0e4b05407e --- /dev/null +++ b/res/drawable/work_card.xml @@ -0,0 +1,27 @@ + + + + + + + + + diff --git a/res/drawable/work_card_btn.xml b/res/drawable/work_card_btn.xml new file mode 100644 index 0000000000..3c9391912a --- /dev/null +++ b/res/drawable/work_card_btn.xml @@ -0,0 +1,27 @@ + + + + + + + + + diff --git a/res/layout/add_item_confirmation_activity.xml b/res/layout/add_item_confirmation_activity.xml index 9439baf1b3..1aeda50c5e 100644 --- a/res/layout/add_item_confirmation_activity.xml +++ b/res/layout/add_item_confirmation_activity.xml @@ -26,79 +26,82 @@ android:importantForAccessibility="no"> - - - - - - -