Snap for 12433810 from 2b1208e803 to 25Q1-release
Change-Id: I9ff7544ceb67c387f5aa8f9867aae104d3d6bbdc
This commit is contained in:
@@ -433,3 +433,14 @@ flag {
|
||||
description: "Enables tracking active gesture logs in ProtoLog"
|
||||
bug: "293182501"
|
||||
}
|
||||
|
||||
|
||||
flag {
|
||||
name: "coordinate_workspace_scale"
|
||||
namespace: "launcher"
|
||||
description: "Ensure that the workspace and hotseat scale doesn't conflict and transitions smoothly between launching and closing apps"
|
||||
bug: "366403487"
|
||||
metadata {
|
||||
purpose: PURPOSE_BUGFIX
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"ሁልጊዜ የተግባር አሞሌ ያሳዩ"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"የአሰሳ ሁነታን ይለውጡ"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"የተግባር አሞሌ አካፋይ"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"የተግባር አሞሌ ትርፍ ፍሰት"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"ወደ ላይ/ግራ ይውሰዱ"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"ወደ ታች/ቀኝ ይውሰዱ"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{ተጨማሪ መተግበሪያ}one{ተጨማሪ መተግበሪያ}other{ተጨማሪ መተግበሪያዎች}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Uvek prikazuj traku zadataka"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Promeni režim navigacije"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Razdelnik trake zadataka"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"Preklopna traka zadataka"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Premesti gore levo"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Premesti dole desno"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{dodatna aplikacija}one{dodatna aplikacija}few{dodatne aplikacije}other{dodatnih aplikacija}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Заўсёды паказваць панэль задач"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Змяніць рэжым навігацыі"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Раздзяляльнік панэлі задач"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"Меню з пашырэннем панэлі задач"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Перамясціць уверх/улева"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Перамясціць уніз/управа"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{даступная праграма}one{даступная праграма}few{даступныя праграмы}many{даступных праграм}other{даступнай праграмы}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Uvijek prikaži traku zadataka"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Promijeni način navigacije"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Razdjelnik trake zadataka"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"Dodatni izbornik trake sa zadacima"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Premjesti gore lijevo"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Premjesti dolje desno"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{dodatna aplikacija}one{dodatna aplikacija}few{dodatne aplikacije}other{dodatnih aplikacija}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Barra de tareas visible"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Cambiar el modo de navegación"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Divisor de Barra de Tareas"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"Barra de tareas ampliada"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Mover arriba/a la izquierda"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Mover abajo/a la derecha"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{aplicación más}other{aplicaciones más}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Uvijek prikaži traku zadataka"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Promijeni način navigacije"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Razdjelnik trake sa zadacima"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"Dodatni izbornik trake sa zadacima"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Premjesti gore/lijevo"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Premjesti dolje/desno"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{dodatna aplikacija}one{dodatna aplikacija}few{dodatne aplikacije}other{dodatnih aplikacija}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Alltaf sýna forritastiku"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Breyta leiðsagnarstillingu"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Skipting forritastiku"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"Yfirflæði á forritastiku"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Færa efst/til vinstri"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Færa neðst/til hægri"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{forrit til viðbótar}one{forrit til viðbótar}other{forrit til viðbótar}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"常にタスクバーを表示する"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"ナビゲーション モードを変更"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"タスクバーの区切り"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"タスクバーのオーバフロー"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"上 / 左に移動"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"下 / 右に移動"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{個のその他のアプリ}other{個のその他のアプリ}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"ამოცანათა ზოლის მუდამ ჩვენება"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"შეცვალეთ ნავიგაციის რეჟიმი"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"ამოცანათა ზოლის გამყოფი"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"ამოცანათა ზოლის გადავსება"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"ზემოთ/მარცხნივ გადატანა"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"ქვემოთ/მარჯვნივ გადატანა"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{სხვა აპი}other{სხვა აპი}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Тапсырма жолағын үнемі көрсету"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Навигация режимін өзгерту"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Тапсырмалар жолағын бөлгіш"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"\"Тапсырмалар жолағы\" қосымша мәзірі"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Жоғары/солға жылжыту"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Төмен/оңға жылжыту"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{қосымша қолданба}other{қосымша қолданба}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"បង្ហាញរបារកិច្ចការជានិច្ច"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"ប្ដូរមុខងាររុករក"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"បន្ទាត់ខណ្ឌចែករបារកិច្ចការ"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"ម៉ឺនុយបន្ថែមរបារកិច្ចការ"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"ផ្លាស់ទីទៅខាងលើ/ឆ្វេង"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"ផ្លាស់ទីទៅខាងក្រោម/ស្ដាំ"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{កម្មវិធីច្រើនទៀត}other{កម្មវិធីច្រើនទៀត}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Такта ар дайым көрүнсүн"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Өтүү режимин өзгөртүү"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Тапшырмалар панелин бөлгүч"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"\"Тапшырмалар панели\" кошумча менюсу"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Жогорку/сол бурчка жылдыруу"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Төмөнкү/оң бурчка жылдыруу"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{колдонмо бар}other{колдонмо бар}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Visada rodyti užduočių juostą"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Keisti naršymo režimą"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Užduočių juostos daliklis"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"Užduočių juostos perpildymas"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Perkelti aukštyn, kairėn"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Perkelti žemyn, dešinėn"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{papildoma programa}one{papildoma programa}few{papildomos programos}many{papildomos programos}other{papildomų programų}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"ടാസ്ക്ബാർ എപ്പോഴും കാണിക്കൂ"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"നാവിഗേഷൻ മോഡ് മാറ്റുക"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"ടാസ്ക്ബാർ ഡിവൈഡർ"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"ടാസ്ക്ബാർ ഓവർഫ്ലോ"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"മുകളിലേക്കോ ഇടത്തേക്കോ നീക്കുക"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"താഴേക്കോ വലത്തേക്കോ നീക്കുക"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{കൂടുതൽ ആപ്പ്}other{കൂടുതൽ ആപ്പുകൾ}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Papar Bar Tugas selalu"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Tukar mod navigasi"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Pembahagi Bar Tugas"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"Limpahan Bar Tugas"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Alihkan ke atas/kiri"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Alihkan ke bawah/kanan"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{apl lagi}other{apl lagi}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"टास्कबार सधैँ देखाउनुहोस्"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"नेभिगेसन मोड बदल्नुहोस्"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"टास्कबार डिभाइडर"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"टास्कबार ओभरफ्लो"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"सिरान/बायाँतिर सार्नुहोस्"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"फेद/दायाँतिर सार्नुहोस्"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{थप एप}other{थप एपहरू}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Ver sempre Barra de tarefas"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Alterar modo de navegação"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Divisor da Barra de tarefas"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"Menu adicional da Barra de tarefas"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Mover para a parte superior esquerda"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Mover para a part superior direita"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{outra app}other{outras apps}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Sempre mostrar a Barra de tarefas"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Mudar o modo de navegação"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Separador da Barra de tarefas"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"Barra de tarefas flutuante"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Mover para cima/para a esquerda"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Mover para baixo/para a direita"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{outro app}one{outro app}other{outros apps}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Всегда показывать панель задач"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Изменить режим навигации"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Разделитель панели задач"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"Дополнительное меню панели задач"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Переместить вверх или влево"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Переместить вниз или вправо"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{дополнительное приложение}one{дополнительное приложение}few{дополнительных приложения}many{дополнительных приложений}other{дополнительного приложения}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"සෑම විටම කාර්ය තීරුව පෙන්වන්න"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"සංචාලන ප්රකාරය වෙනස් කරන්න"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"කාර්ය තීරු බෙදනය"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"කාර්ය තීරුව පිටාර යාම"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"ඉහළ/වම වෙත ගෙන යන්න"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"පහළ/දකුණ වෙත ගෙන යන්න"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{තව යෙදුම}one{තවත් යෙදුම්}other{තවත් යෙදුම්}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Stalen prikaz oprav. vrstice"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Spreminjanje načina navigacije"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Razdelilnik opravilne vrstice"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"Oblaček opravilne vrstice z dodatnimi elementi"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Premakni na vrh/levo"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Premakni na dno/desno"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{dodatna aplikacija}one{dodatna aplikacija}two{dodatni aplikaciji}few{dodatne aplikacije}other{dodatnih aplikacij}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Увек приказуј траку задатака"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Промени режим навигације"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Разделник траке задатака"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"Преклопна трака задатака"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Премести горе лево"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Премести доле десно"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{додатна апликација}one{додатна апликација}few{додатне апликације}other{додатних апликација}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"Visa alltid aktivitetsfältet"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"Ändra navigeringsläge"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"Avdelare för aktivitetsfältet"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"Fler alternativ för aktivitetsfältet"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"Flytta högst upp/till vänster"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"Flytta längst ned/till höger"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{app till}other{appar till}}"</string>
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
<string name="always_show_taskbar" msgid="3608801276107751229">"టాస్క్బార్ను నిరంతరం చూపండి"</string>
|
||||
<string name="change_navigation_mode" msgid="9088393078736808968">"నావిగేషన్ మోడ్ను మార్చండి"</string>
|
||||
<string name="taskbar_divider_a11y_title" msgid="6608690309720242080">"టాస్క్బార్ డివైడర్"</string>
|
||||
<!-- no translation found for taskbar_overflow_a11y_title (7960342079198820179) -->
|
||||
<skip />
|
||||
<string name="taskbar_overflow_a11y_title" msgid="7960342079198820179">"టాస్క్బార్ ఓవర్ఫ్లో"</string>
|
||||
<string name="move_drop_target_top_or_left" msgid="2988702185049595807">"ఎగువ/ఎడమ వైపునకు తరలించండి"</string>
|
||||
<string name="move_drop_target_bottom_or_right" msgid="5431393418797620162">"దిగువ/కుడి వైపునకు తరలించండి"</string>
|
||||
<string name="quick_switch_overflow" msgid="3679780650881041632">"{count,plural, =1{మరో యాప్}other{మరిన్ని యాప్లు}}"</string>
|
||||
|
||||
@@ -116,6 +116,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.graphics.ColorUtils;
|
||||
|
||||
import com.android.app.animation.Animations;
|
||||
import com.android.internal.jank.Cuj;
|
||||
import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener;
|
||||
import com.android.launcher3.LauncherAnimationRunner.RemoteAnimationFactory;
|
||||
@@ -574,23 +575,45 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener
|
||||
} else {
|
||||
List<View> viewsToAnimate = new ArrayList<>();
|
||||
Workspace<?> workspace = mLauncher.getWorkspace();
|
||||
workspace.forEachVisiblePage(
|
||||
view -> viewsToAnimate.add(((CellLayout) view).getShortcutsAndWidgets()));
|
||||
if (Flags.coordinateWorkspaceScale()) {
|
||||
viewsToAnimate.add(workspace);
|
||||
} else {
|
||||
workspace.forEachVisiblePage(
|
||||
view -> viewsToAnimate.add(((CellLayout) view).getShortcutsAndWidgets()));
|
||||
}
|
||||
|
||||
Hotseat hotseat = mLauncher.getHotseat();
|
||||
// Do not scale hotseat as a whole when taskbar is present, and scale QSB only if it's
|
||||
// not inline.
|
||||
if (mDeviceProfile.isTaskbarPresent) {
|
||||
if (!mDeviceProfile.isQsbInline) {
|
||||
viewsToAnimate.add(mLauncher.getHotseat().getQsb());
|
||||
viewsToAnimate.add(hotseat.getQsb());
|
||||
}
|
||||
} else {
|
||||
viewsToAnimate.add(mLauncher.getHotseat());
|
||||
viewsToAnimate.add(hotseat);
|
||||
}
|
||||
|
||||
viewsToAnimate.forEach(view -> {
|
||||
view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
|
||||
|
||||
ObjectAnimator scaleAnim = ObjectAnimator.ofFloat(view, SCALE_PROPERTY, scales)
|
||||
float[] scale = scales;
|
||||
if (Flags.coordinateWorkspaceScale()) {
|
||||
// Start the animation from the current value, instead of assuming the views are
|
||||
// in their resting state, so interrupted animations merge seamlessly.
|
||||
// TODO(b/367591368): ideally these animations would be refactored to be
|
||||
// controlled centrally so each instances doesn't need to care about this
|
||||
// coordination.
|
||||
scale = new float[]{view.getScaleX(), scales[1]};
|
||||
|
||||
// Cancel any ongoing animations. This is necessary to avoid a conflict between
|
||||
// e.g. the unfinished animation triggered when closing an app back to Home and
|
||||
// this animation caused by a launch.
|
||||
Animations.Companion.cancelOngoingAnimation(view);
|
||||
// Make sure to cache the current animation, so it can be properly interrupted.
|
||||
Animations.Companion.setOngoingAnimation(view, launcherAnimator);
|
||||
}
|
||||
|
||||
ObjectAnimator scaleAnim = ObjectAnimator.ofFloat(view, SCALE_PROPERTY, scale)
|
||||
.setDuration(CONTENT_SCALE_DURATION);
|
||||
scaleAnim.setInterpolator(DECELERATE_1_5);
|
||||
launcherAnimator.play(scaleAnim);
|
||||
@@ -600,6 +623,11 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener
|
||||
viewsToAnimate.forEach(view -> {
|
||||
SCALE_PROPERTY.set(view, 1f);
|
||||
view.setLayerType(View.LAYER_TYPE_NONE, null);
|
||||
|
||||
if (Flags.coordinateWorkspaceScale()) {
|
||||
// Reset the cached animation.
|
||||
Animations.Companion.setOngoingAnimation(view, null /* animation */);
|
||||
}
|
||||
});
|
||||
mLauncher.resumeExpensiveViewUpdates();
|
||||
};
|
||||
|
||||
+3
@@ -36,4 +36,7 @@ interface BubbleBarFlyoutPositioner {
|
||||
|
||||
/** The size of the flyout when collapsed. */
|
||||
val collapsedSize: Float
|
||||
|
||||
/** The color of the flyout when collapsed. */
|
||||
val collapsedColor: Int
|
||||
}
|
||||
|
||||
+101
-13
@@ -20,13 +20,18 @@ import android.content.Context
|
||||
import android.content.res.Configuration
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Color
|
||||
import android.graphics.Outline
|
||||
import android.graphics.Paint
|
||||
import android.graphics.Path
|
||||
import android.graphics.PointF
|
||||
import android.graphics.RectF
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewOutlineProvider
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.core.animation.ArgbEvaluator
|
||||
import com.android.launcher3.R
|
||||
import com.android.launcher3.popup.RoundedArrowDrawable
|
||||
|
||||
@@ -37,6 +42,8 @@ class BubbleBarFlyoutView(context: Context, private val positioner: BubbleBarFly
|
||||
private companion object {
|
||||
// the minimum progress of the expansion animation before the triangle is made visible.
|
||||
const val MIN_EXPANSION_PROGRESS_FOR_TRIANGLE = 0.1f
|
||||
// the minimum progress of the expansion animation before the content starts fading in.
|
||||
const val MIN_EXPANSION_PROGRESS_FOR_CONTENT_ALPHA = 0.75f
|
||||
}
|
||||
|
||||
private val sender: TextView by
|
||||
@@ -85,8 +92,11 @@ class BubbleBarFlyoutView(context: Context, private val positioner: BubbleBarFly
|
||||
context.resources.getDimensionPixelSize(R.dimen.bubblebar_flyout_max_width)
|
||||
}
|
||||
|
||||
/** The bounds of the background rect. */
|
||||
private val backgroundRect = RectF()
|
||||
private val cornerRadius: Float
|
||||
private val triangle: Path = Path()
|
||||
private val triangleOutline = Outline()
|
||||
private var backgroundColor = Color.BLACK
|
||||
/** Represents the progress of the expansion animation. 0 when collapsed. 1 when expanded. */
|
||||
private var expansionProgress = 0f
|
||||
@@ -96,6 +106,20 @@ class BubbleBarFlyoutView(context: Context, private val positioner: BubbleBarFly
|
||||
private var collapsedSize = 0f
|
||||
/** The corner radius of the flyout when it's collapsed. */
|
||||
private var collapsedCornerRadius = 0f
|
||||
/** The color of the flyout when collapsed. */
|
||||
private var collapsedColor = 0
|
||||
|
||||
/** The corner radius of the background according to the progress of the animation. */
|
||||
private val currentCornerRadius
|
||||
get() = collapsedCornerRadius + (cornerRadius - collapsedCornerRadius) * expansionProgress
|
||||
|
||||
/** Translation X of the background. */
|
||||
private val backgroundRectTx
|
||||
get() = translationToCollapsedPosition.x * (1 - expansionProgress)
|
||||
|
||||
/** Translation Y of the background. */
|
||||
private val backgroundRectTy
|
||||
get() = translationToCollapsedPosition.y * (1 - expansionProgress)
|
||||
|
||||
/**
|
||||
* The paint used to draw the background, whose color changes as the flyout transitions to the
|
||||
@@ -111,7 +135,7 @@ class BubbleBarFlyoutView(context: Context, private val positioner: BubbleBarFly
|
||||
ta.recycle()
|
||||
|
||||
setWillNotDraw(false)
|
||||
clipChildren = false
|
||||
clipChildren = true
|
||||
clipToPadding = false
|
||||
|
||||
val padding = context.resources.getDimensionPixelSize(R.dimen.bubblebar_flyout_padding)
|
||||
@@ -126,12 +150,24 @@ class BubbleBarFlyoutView(context: Context, private val positioner: BubbleBarFly
|
||||
triangleRadius.toFloat(),
|
||||
triangle,
|
||||
)
|
||||
triangleOutline.setPath(triangle)
|
||||
|
||||
outlineProvider =
|
||||
object : ViewOutlineProvider() {
|
||||
override fun getOutline(view: View, outline: Outline) {
|
||||
this@BubbleBarFlyoutView.getOutline(outline)
|
||||
}
|
||||
}
|
||||
clipToOutline = true
|
||||
|
||||
applyConfigurationColors(resources.configuration)
|
||||
}
|
||||
|
||||
/** Sets the data for the flyout and starts playing the expand animation. */
|
||||
fun showFromCollapsed(flyoutMessage: BubbleBarFlyoutMessage, expandAnimation: () -> Unit) {
|
||||
avatar.alpha = 0f
|
||||
sender.alpha = 0f
|
||||
message.alpha = 0f
|
||||
setData(flyoutMessage)
|
||||
val txToCollapsedPosition =
|
||||
if (positioner.isOnLeft) {
|
||||
@@ -145,6 +181,7 @@ class BubbleBarFlyoutView(context: Context, private val positioner: BubbleBarFly
|
||||
|
||||
collapsedSize = positioner.collapsedSize
|
||||
collapsedCornerRadius = collapsedSize / 2
|
||||
collapsedColor = positioner.collapsedColor
|
||||
|
||||
// post the request to start the expand animation to the looper so the view can measure
|
||||
// itself
|
||||
@@ -189,42 +226,64 @@ class BubbleBarFlyoutView(context: Context, private val positioner: BubbleBarFly
|
||||
/** Updates the flyout view with the progress of the animation. */
|
||||
fun updateExpansionProgress(fraction: Float) {
|
||||
expansionProgress = fraction
|
||||
|
||||
updateTranslationForAnimation(message)
|
||||
updateTranslationForAnimation(sender)
|
||||
updateTranslationForAnimation(avatar)
|
||||
|
||||
// start fading in the content only after we're past the threshold
|
||||
val alpha =
|
||||
((expansionProgress - MIN_EXPANSION_PROGRESS_FOR_CONTENT_ALPHA) /
|
||||
(1f - MIN_EXPANSION_PROGRESS_FOR_CONTENT_ALPHA))
|
||||
.coerceIn(0f, 1f)
|
||||
sender.alpha = alpha
|
||||
message.alpha = alpha
|
||||
avatar.alpha = alpha
|
||||
|
||||
invalidate()
|
||||
}
|
||||
|
||||
override fun onDraw(canvas: Canvas) {
|
||||
// interpolate the width, height, corner radius and translation based on the progress of the
|
||||
// animation
|
||||
// animation.
|
||||
// the background is drawn from the bottom left corner to the top right corner if we're
|
||||
// positioned on the left, and from the bottom right corner to the top left if we're
|
||||
// positioned on the right.
|
||||
|
||||
// the current width of the background rect according to the progress of the animation
|
||||
val currentWidth = collapsedSize + (width - collapsedSize) * expansionProgress
|
||||
val rectBottom = height - triangleHeight + triangleOverlap
|
||||
val currentHeight = collapsedSize + (rectBottom - collapsedSize) * expansionProgress
|
||||
val currentCornerRadius =
|
||||
collapsedCornerRadius + (cornerRadius - collapsedCornerRadius) * expansionProgress
|
||||
val tx = translationToCollapsedPosition.x * (1 - expansionProgress)
|
||||
val ty = translationToCollapsedPosition.y * (1 - expansionProgress)
|
||||
|
||||
canvas.save()
|
||||
canvas.translate(tx, ty)
|
||||
// draw the background starting from the bottom left if we're positioned left, or the bottom
|
||||
// right if we're positioned right.
|
||||
canvas.drawRoundRect(
|
||||
backgroundRect.set(
|
||||
if (positioner.isOnLeft) 0f else width.toFloat() - currentWidth,
|
||||
height.toFloat() - triangleHeight + triangleOverlap - currentHeight,
|
||||
if (positioner.isOnLeft) currentWidth else width.toFloat(),
|
||||
height.toFloat() - triangleHeight + triangleOverlap,
|
||||
)
|
||||
|
||||
backgroundPaint.color =
|
||||
ArgbEvaluator.getInstance().evaluate(expansionProgress, collapsedColor, backgroundColor)
|
||||
|
||||
canvas.save()
|
||||
canvas.translate(backgroundRectTx, backgroundRectTy)
|
||||
// draw the background starting from the bottom left if we're positioned left, or the bottom
|
||||
// right if we're positioned right.
|
||||
canvas.drawRoundRect(
|
||||
backgroundRect,
|
||||
currentCornerRadius,
|
||||
currentCornerRadius,
|
||||
backgroundPaint,
|
||||
)
|
||||
if (expansionProgress >= MIN_EXPANSION_PROGRESS_FOR_TRIANGLE) {
|
||||
drawTriangle(canvas, currentCornerRadius)
|
||||
drawTriangle(canvas)
|
||||
}
|
||||
canvas.restore()
|
||||
invalidateOutline()
|
||||
super.onDraw(canvas)
|
||||
}
|
||||
|
||||
private fun drawTriangle(canvas: Canvas, currentCornerRadius: Float) {
|
||||
private fun drawTriangle(canvas: Canvas) {
|
||||
canvas.save()
|
||||
val triangleX =
|
||||
if (positioner.isOnLeft) {
|
||||
@@ -237,9 +296,38 @@ class BubbleBarFlyoutView(context: Context, private val positioner: BubbleBarFly
|
||||
val triangleY = height - triangleHeight - 0.5f * triangleHeight * (1 - expansionProgress)
|
||||
canvas.translate(triangleX, triangleY)
|
||||
canvas.drawPath(triangle, backgroundPaint)
|
||||
triangleOutline.setPath(triangle)
|
||||
triangleOutline.offset(triangleX.toInt(), triangleY.toInt())
|
||||
canvas.restore()
|
||||
}
|
||||
|
||||
private fun getOutline(outline: Outline) {
|
||||
val path = Path()
|
||||
path.addRoundRect(
|
||||
backgroundRect,
|
||||
currentCornerRadius,
|
||||
currentCornerRadius,
|
||||
Path.Direction.CW,
|
||||
)
|
||||
if (expansionProgress >= MIN_EXPANSION_PROGRESS_FOR_TRIANGLE) {
|
||||
path.addPath(triangleOutline.mPath)
|
||||
}
|
||||
outline.setPath(path)
|
||||
outline.offset(backgroundRectTx.toInt(), backgroundRectTy.toInt())
|
||||
}
|
||||
|
||||
private fun updateTranslationForAnimation(view: View) {
|
||||
val tx =
|
||||
if (positioner.isOnLeft) {
|
||||
translationToCollapsedPosition.x - view.left
|
||||
} else {
|
||||
width - view.left - translationToCollapsedPosition.x
|
||||
}
|
||||
val ty = height - view.top + translationToCollapsedPosition.y
|
||||
view.translationX = tx * (1f - expansionProgress)
|
||||
view.translationY = ty * (1f - expansionProgress)
|
||||
}
|
||||
|
||||
private fun applyConfigurationColors(configuration: Configuration) {
|
||||
val nightModeFlags = configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
|
||||
val isNightModeOn = nightModeFlags == Configuration.UI_MODE_NIGHT_YES
|
||||
|
||||
@@ -21,6 +21,7 @@ import static com.android.app.animation.Interpolators.AGGRESSIVE_EASE_IN_OUT;
|
||||
import static com.android.app.animation.Interpolators.FINAL_FRAME;
|
||||
import static com.android.app.animation.Interpolators.INSTANT;
|
||||
import static com.android.app.animation.Interpolators.LINEAR;
|
||||
import static com.android.launcher3.Flags.enableLargeDesktopWindowingTile;
|
||||
import static com.android.launcher3.LauncherState.QUICK_SWITCH_FROM_HOME;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SPLIT_SELECTION_EXIT_HOME;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_FADE;
|
||||
@@ -31,6 +32,7 @@ import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TR
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TRANSLATE_Y;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.SKIP_OVERVIEW;
|
||||
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_HORIZONTAL_OFFSET;
|
||||
import static com.android.quickstep.views.RecentsView.DESKTOP_CAROUSEL_DETACH_PROGRESS;
|
||||
import static com.android.quickstep.views.RecentsView.RECENTS_GRID_PROGRESS;
|
||||
import static com.android.quickstep.views.RecentsView.RECENTS_SCALE_PROPERTY;
|
||||
import static com.android.quickstep.views.RecentsView.TASK_SECONDARY_TRANSLATION;
|
||||
@@ -76,6 +78,10 @@ public abstract class BaseRecentsViewStateController<T extends RecentsView>
|
||||
RECENTS_GRID_PROGRESS.set(mRecentsView,
|
||||
state.displayOverviewTasksAsGrid(mLauncher.getDeviceProfile()) ? 1f : 0f);
|
||||
TASK_THUMBNAIL_SPLASH_ALPHA.set(mRecentsView, state.showTaskThumbnailSplash() ? 1f : 0f);
|
||||
if (enableLargeDesktopWindowingTile()) {
|
||||
DESKTOP_CAROUSEL_DETACH_PROGRESS.set(mRecentsView,
|
||||
state.detachDesktopCarousel() ? 1f : 0f);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -142,6 +148,12 @@ public abstract class BaseRecentsViewStateController<T extends RecentsView>
|
||||
setter.setFloat(mRecentsView, RECENTS_GRID_PROGRESS,
|
||||
toState.displayOverviewTasksAsGrid(mLauncher.getDeviceProfile()) ? 1f : 0f,
|
||||
getOverviewInterpolator(fromState, toState));
|
||||
|
||||
if (enableLargeDesktopWindowingTile()) {
|
||||
setter.setFloat(mRecentsView, DESKTOP_CAROUSEL_DETACH_PROGRESS,
|
||||
toState.detachDesktopCarousel() ? 1f : 0f,
|
||||
getOverviewInterpolator(fromState, toState));
|
||||
}
|
||||
}
|
||||
|
||||
private Interpolator getOverviewInterpolator(LauncherState fromState, LauncherState toState) {
|
||||
|
||||
@@ -89,6 +89,11 @@ public class BackgroundAppState extends OverviewState {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean detachDesktopCarousel() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float getDepthUnchecked(Context context) {
|
||||
if (Launcher.getLauncher(context).areDesktopTasksVisible()) {
|
||||
|
||||
@@ -165,6 +165,11 @@ public class OverviewState extends LauncherState {
|
||||
return deviceProfile.isTablet;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean detachDesktopCarousel() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean disallowTaskbarGlobalDrag() {
|
||||
// Disable global drag in overview
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.quickstep.fallback;
|
||||
import static com.android.app.animation.Interpolators.FINAL_FRAME;
|
||||
import static com.android.app.animation.Interpolators.INSTANT;
|
||||
import static com.android.app.animation.Interpolators.LINEAR;
|
||||
import static com.android.launcher3.Flags.enableLargeDesktopWindowingTile;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_MODAL;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_SCALE;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TRANSLATE_X;
|
||||
@@ -26,6 +27,7 @@ import static com.android.launcher3.states.StateAnimationConfig.ANIM_SCRIM_FADE;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.SKIP_OVERVIEW;
|
||||
import static com.android.quickstep.fallback.RecentsState.OVERVIEW_SPLIT_SELECT;
|
||||
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_HORIZONTAL_OFFSET;
|
||||
import static com.android.quickstep.views.RecentsView.DESKTOP_CAROUSEL_DETACH_PROGRESS;
|
||||
import static com.android.quickstep.views.RecentsView.FULLSCREEN_PROGRESS;
|
||||
import static com.android.quickstep.views.RecentsView.RECENTS_GRID_PROGRESS;
|
||||
import static com.android.quickstep.views.RecentsView.RECENTS_SCALE_PROPERTY;
|
||||
@@ -116,6 +118,11 @@ public class FallbackRecentsStateController implements StateHandler<RecentsState
|
||||
getOverviewInterpolator(state));
|
||||
setter.setFloat(mRecentsView, TASK_THUMBNAIL_SPLASH_ALPHA,
|
||||
state.showTaskThumbnailSplash() ? 1f : 0f, getOverviewInterpolator(state));
|
||||
if (enableLargeDesktopWindowingTile()) {
|
||||
setter.setFloat(mRecentsView, DESKTOP_CAROUSEL_DETACH_PROGRESS,
|
||||
state.detachDesktopCarousel() ? 1f : 0f,
|
||||
getOverviewInterpolator(state));
|
||||
}
|
||||
|
||||
setter.setViewBackgroundColor(mRecentsViewContainer.getScrimView(),
|
||||
state.getScrimColor(mRecentsViewContainer.asContext()),
|
||||
|
||||
@@ -42,6 +42,7 @@ public class RecentsState implements BaseState<RecentsState> {
|
||||
private static final int FLAG_LIVE_TILE = BaseState.getFlag(6);
|
||||
private static final int FLAG_RECENTS_VIEW_VISIBLE = BaseState.getFlag(7);
|
||||
private static final int FLAG_TASK_THUMBNAIL_SPLASH = BaseState.getFlag(8);
|
||||
private static final int FLAG_DETACH_DESKTOP_CAROUSEL = BaseState.getFlag(9);
|
||||
|
||||
public static final RecentsState DEFAULT = new RecentsState(0,
|
||||
FLAG_DISABLE_RESTORE | FLAG_CLEAR_ALL_BUTTON | FLAG_OVERVIEW_ACTIONS | FLAG_SHOW_AS_GRID
|
||||
@@ -51,8 +52,8 @@ public class RecentsState implements BaseState<RecentsState> {
|
||||
| FLAG_SHOW_AS_GRID | FLAG_SCRIM | FLAG_LIVE_TILE | FLAG_RECENTS_VIEW_VISIBLE);
|
||||
public static final RecentsState BACKGROUND_APP = new BackgroundAppState(2,
|
||||
FLAG_DISABLE_RESTORE | FLAG_NON_INTERACTIVE | FLAG_FULL_SCREEN
|
||||
| FLAG_RECENTS_VIEW_VISIBLE
|
||||
| FLAG_TASK_THUMBNAIL_SPLASH);
|
||||
| FLAG_RECENTS_VIEW_VISIBLE | FLAG_TASK_THUMBNAIL_SPLASH
|
||||
| FLAG_DETACH_DESKTOP_CAROUSEL);
|
||||
public static final RecentsState HOME = new RecentsState(3, 0);
|
||||
public static final RecentsState BG_LAUNCHER = new LauncherState(4, 0);
|
||||
public static final RecentsState OVERVIEW_SPLIT_SELECT = new RecentsState(5,
|
||||
@@ -149,6 +150,11 @@ public class RecentsState implements BaseState<RecentsState> {
|
||||
return hasFlag(FLAG_TASK_THUMBNAIL_SPLASH);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean detachDesktopCarousel() {
|
||||
return hasFlag(FLAG_DETACH_DESKTOP_CAROUSEL);
|
||||
}
|
||||
|
||||
/**
|
||||
* True if the state has overview panel visible.
|
||||
*/
|
||||
|
||||
@@ -83,22 +83,22 @@ class RecentsViewUtils {
|
||||
|
||||
/** Returns the first [TaskView], with some tasks possibly hidden in the carousel. */
|
||||
fun getFirstTaskViewInCarousel(
|
||||
nonRunningTaskCategoryHidden: Boolean,
|
||||
nonRunningTaskCarouselHidden: Boolean,
|
||||
taskViews: Iterable<TaskView>,
|
||||
runningTaskView: TaskView?,
|
||||
): TaskView? =
|
||||
taskViews.firstOrNull {
|
||||
it.isVisibleInCarousel(runningTaskView, nonRunningTaskCategoryHidden)
|
||||
it.isVisibleInCarousel(runningTaskView, nonRunningTaskCarouselHidden)
|
||||
}
|
||||
|
||||
/** Returns the last [TaskView], with some tasks possibly hidden in the carousel. */
|
||||
fun getLastTaskViewInCarousel(
|
||||
nonRunningTaskCategoryHidden: Boolean,
|
||||
nonRunningTaskCarouselHidden: Boolean,
|
||||
taskViews: Iterable<TaskView>,
|
||||
runningTaskView: TaskView?,
|
||||
): TaskView? =
|
||||
taskViews.lastOrNull {
|
||||
it.isVisibleInCarousel(runningTaskView, nonRunningTaskCategoryHidden)
|
||||
it.isVisibleInCarousel(runningTaskView, nonRunningTaskCarouselHidden)
|
||||
}
|
||||
|
||||
/** Returns the current list of [TaskView] children. */
|
||||
@@ -109,28 +109,33 @@ class RecentsViewUtils {
|
||||
fun applyAttachAlpha(
|
||||
taskViews: Iterable<TaskView>,
|
||||
runningTaskView: TaskView?,
|
||||
runningTaskTileHidden: Boolean,
|
||||
nonRunningTaskCategoryHidden: Boolean,
|
||||
runningTaskAttachAlpha: Float,
|
||||
nonRunningTaskCarouselHidden: Boolean,
|
||||
) {
|
||||
taskViews.forEach { taskView ->
|
||||
val isVisible =
|
||||
if (taskView == runningTaskView) !runningTaskTileHidden
|
||||
else taskView.isVisibleInCarousel(runningTaskView, nonRunningTaskCategoryHidden)
|
||||
taskView.attachAlpha = if (isVisible) 1f else 0f
|
||||
taskView.attachAlpha =
|
||||
if (taskView == runningTaskView) {
|
||||
runningTaskAttachAlpha
|
||||
} else {
|
||||
if (taskView.isVisibleInCarousel(runningTaskView, nonRunningTaskCarouselHidden))
|
||||
1f
|
||||
else 0f
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun TaskView.isVisibleInCarousel(
|
||||
fun TaskView.isVisibleInCarousel(
|
||||
runningTaskView: TaskView?,
|
||||
nonRunningTaskCategoryHidden: Boolean,
|
||||
nonRunningTaskCarouselHidden: Boolean,
|
||||
): Boolean =
|
||||
if (!nonRunningTaskCategoryHidden) true
|
||||
else if (runningTaskView == null) true else getCategory() == runningTaskView.getCategory()
|
||||
if (!nonRunningTaskCarouselHidden) true
|
||||
else getCarouselType() == runningTaskView.getCarouselType()
|
||||
|
||||
private fun TaskView.getCategory(): TaskViewCategory =
|
||||
if (this is DesktopTaskView) TaskViewCategory.DESKTOP else TaskViewCategory.FULL_SCREEN
|
||||
/** Returns the carousel type of the TaskView, and default to fullscreen if it's null. */
|
||||
private fun TaskView?.getCarouselType(): TaskViewCarousel =
|
||||
if (this is DesktopTaskView) TaskViewCarousel.DESKTOP else TaskViewCarousel.FULL_SCREEN
|
||||
|
||||
private enum class TaskViewCategory {
|
||||
private enum class TaskViewCarousel {
|
||||
FULL_SCREEN,
|
||||
DESKTOP,
|
||||
}
|
||||
|
||||
@@ -23,8 +23,10 @@ import android.graphics.RectF
|
||||
import android.view.View
|
||||
import android.view.animation.PathInterpolator
|
||||
import androidx.core.graphics.transform
|
||||
import com.android.app.animation.Animations
|
||||
import com.android.app.animation.Interpolators
|
||||
import com.android.app.animation.Interpolators.LINEAR
|
||||
import com.android.launcher3.Flags
|
||||
import com.android.launcher3.LauncherAnimUtils.HOTSEAT_SCALE_PROPERTY_FACTORY
|
||||
import com.android.launcher3.LauncherAnimUtils.SCALE_INDEX_WORKSPACE_STATE
|
||||
import com.android.launcher3.LauncherAnimUtils.WORKSPACE_SCALE_PROPERTY_FACTORY
|
||||
@@ -44,9 +46,9 @@ import com.android.quickstep.views.RecentsView
|
||||
* the screen outwards radially. This is used in conjunction with the swipe up to home animation.
|
||||
*/
|
||||
class ScalingWorkspaceRevealAnim(
|
||||
launcher: QuickstepLauncher,
|
||||
private val launcher: QuickstepLauncher,
|
||||
siblingAnimation: RectFSpringAnim?,
|
||||
windowTargetRect: RectF?
|
||||
windowTargetRect: RectF?,
|
||||
) {
|
||||
companion object {
|
||||
private const val FADE_DURATION_MS = 200L
|
||||
@@ -86,25 +88,40 @@ class ScalingWorkspaceRevealAnim(
|
||||
launcher.workspace.stateTransitionAnimation.setScrim(
|
||||
PropertySetter.NO_ANIM_PROPERTY_SETTER,
|
||||
LauncherState.BACKGROUND_APP,
|
||||
setupConfig
|
||||
setupConfig,
|
||||
)
|
||||
|
||||
val workspace = launcher.workspace
|
||||
val hotseat = launcher.hotseat
|
||||
|
||||
var fromSize =
|
||||
if (Flags.coordinateWorkspaceScale()) {
|
||||
// Interrupt the current animation, if any.
|
||||
Animations.cancelOngoingAnimation(workspace)
|
||||
Animations.cancelOngoingAnimation(hotseat)
|
||||
|
||||
if (workspace.scaleX != MAX_SIZE) {
|
||||
workspace.scaleX
|
||||
} else {
|
||||
MIN_SIZE
|
||||
}
|
||||
} else {
|
||||
MIN_SIZE
|
||||
}
|
||||
|
||||
// Scale the Workspace and Hotseat around the same pivot.
|
||||
workspace.setPivotToScaleWithSelf(hotseat)
|
||||
animation.addFloat(
|
||||
workspace,
|
||||
WORKSPACE_SCALE_PROPERTY_FACTORY[SCALE_INDEX_WORKSPACE_STATE],
|
||||
MIN_SIZE,
|
||||
fromSize,
|
||||
MAX_SIZE,
|
||||
SCALE_INTERPOLATOR,
|
||||
)
|
||||
animation.addFloat(
|
||||
hotseat,
|
||||
HOTSEAT_SCALE_PROPERTY_FACTORY[SCALE_INDEX_WORKSPACE_STATE],
|
||||
MIN_SIZE,
|
||||
fromSize,
|
||||
MAX_SIZE,
|
||||
SCALE_INTERPOLATOR,
|
||||
)
|
||||
@@ -116,13 +133,13 @@ class ScalingWorkspaceRevealAnim(
|
||||
animation.setViewAlpha(
|
||||
workspace,
|
||||
MAX_ALPHA,
|
||||
Interpolators.clampToProgress(LINEAR, 0f, fadeClamp)
|
||||
Interpolators.clampToProgress(LINEAR, 0f, fadeClamp),
|
||||
)
|
||||
hotseat.alpha = MIN_ALPHA
|
||||
animation.setViewAlpha(
|
||||
hotseat,
|
||||
MAX_ALPHA,
|
||||
Interpolators.clampToProgress(LINEAR, 0f, fadeClamp)
|
||||
Interpolators.clampToProgress(LINEAR, 0f, fadeClamp),
|
||||
)
|
||||
|
||||
val transitionConfig = StateAnimationConfig()
|
||||
@@ -137,7 +154,7 @@ class ScalingWorkspaceRevealAnim(
|
||||
launcher.workspace.stateTransitionAnimation.setScrim(
|
||||
animation,
|
||||
LauncherState.NORMAL,
|
||||
transitionConfig
|
||||
transitionConfig,
|
||||
)
|
||||
|
||||
// To avoid awkward jumps in icon position, we want the sibling animation to always be
|
||||
@@ -164,7 +181,7 @@ class ScalingWorkspaceRevealAnim(
|
||||
1 / workspace.scaleX,
|
||||
1 / workspace.scaleY,
|
||||
transformed.centerX(),
|
||||
transformed.centerY()
|
||||
transformed.centerY(),
|
||||
)
|
||||
}
|
||||
)
|
||||
@@ -183,6 +200,12 @@ class ScalingWorkspaceRevealAnim(
|
||||
Runnable {
|
||||
workspace.setLayerType(View.LAYER_TYPE_NONE, null)
|
||||
hotseat.setLayerType(View.LAYER_TYPE_NONE, null)
|
||||
|
||||
if (Flags.coordinateWorkspaceScale()) {
|
||||
// Reset the cached animations.
|
||||
Animations.setOngoingAnimation(workspace, animation = null)
|
||||
Animations.setOngoingAnimation(hotseat, animation = null)
|
||||
}
|
||||
}
|
||||
)
|
||||
)
|
||||
@@ -193,6 +216,14 @@ class ScalingWorkspaceRevealAnim(
|
||||
}
|
||||
|
||||
fun start() {
|
||||
getAnimators().start()
|
||||
val animators = getAnimators()
|
||||
if (Flags.coordinateWorkspaceScale()) {
|
||||
// Make sure to cache the current animation, so it can be properly interrupted.
|
||||
// TODO(b/367591368): ideally these animations would be refactored to be controlled
|
||||
// centrally so each instances doesn't need to care about this coordination.
|
||||
Animations.setOngoingAnimation(launcher.workspace, animators)
|
||||
Animations.setOngoingAnimation(launcher.hotseat, animators)
|
||||
}
|
||||
animators.start()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -324,20 +324,13 @@ public abstract class RecentsView<
|
||||
new FloatProperty<RecentsView>("runningTaskAttachAlpha") {
|
||||
@Override
|
||||
public void setValue(RecentsView recentsView, float v) {
|
||||
TaskView runningTask = recentsView.getRunningTaskView();
|
||||
if (runningTask == null) {
|
||||
return;
|
||||
}
|
||||
runningTask.setAttachAlpha(v);
|
||||
recentsView.mRunningTaskAttachAlpha = v;
|
||||
recentsView.applyAttachAlpha();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Float get(RecentsView recentsView) {
|
||||
TaskView runningTask = recentsView.getRunningTaskView();
|
||||
if (runningTask == null) {
|
||||
return null;
|
||||
}
|
||||
return runningTask.getAttachAlpha();
|
||||
return recentsView.mRunningTaskAttachAlpha;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -463,6 +456,21 @@ public abstract class RecentsView<
|
||||
}
|
||||
};
|
||||
|
||||
public static final FloatProperty<RecentsView> DESKTOP_CAROUSEL_DETACH_PROGRESS =
|
||||
new FloatProperty<>("desktopCarouselDetachProgress") {
|
||||
@Override
|
||||
public void setValue(RecentsView view, float offset) {
|
||||
view.mDesktopCarouselDetachProgress = offset;
|
||||
view.applyAttachAlpha();
|
||||
view.updatePageOffsets();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Float get(RecentsView view) {
|
||||
return view.mDesktopCarouselDetachProgress;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Alpha of the task thumbnail splash, where being in BackgroundAppState has a value of 1, and
|
||||
* being in any other state has a value of 0.
|
||||
@@ -574,6 +582,7 @@ public abstract class RecentsView<
|
||||
private int mClampedScrollOffsetBound;
|
||||
|
||||
private float mAdjacentPageHorizontalOffset = 0;
|
||||
private float mDesktopCarouselDetachProgress = 0;
|
||||
protected float mTaskViewsSecondaryTranslation = 0;
|
||||
protected float mTaskViewsPrimarySplitTranslation = 0;
|
||||
protected float mTaskViewsSecondarySplitTranslation = 0;
|
||||
@@ -680,13 +689,13 @@ public abstract class RecentsView<
|
||||
protected int mRunningTaskViewId = -1;
|
||||
private int mTaskViewIdCount;
|
||||
protected boolean mRunningTaskTileHidden;
|
||||
private boolean mNonRunningTaskCategoryHidden;
|
||||
@Nullable
|
||||
private Task[] mTmpRunningTasks;
|
||||
protected int mFocusedTaskViewId = INVALID_TASK_ID;
|
||||
|
||||
private boolean mTaskIconScaledDown = false;
|
||||
private boolean mRunningTaskShowScreenshot = false;
|
||||
private float mRunningTaskAttachAlpha;
|
||||
|
||||
private boolean mOverviewStateEnabled;
|
||||
private boolean mHandleTaskStackChanges;
|
||||
@@ -2733,9 +2742,6 @@ public abstract class RecentsView<
|
||||
setEnableFreeScroll(false);
|
||||
setEnableDrawingLiveTile(false);
|
||||
setRunningTaskHidden(true);
|
||||
if (enableLargeDesktopWindowingTile()) {
|
||||
setNonRunningTaskCategoryHidden(true);
|
||||
}
|
||||
setTaskIconScaledDown(true);
|
||||
}
|
||||
|
||||
@@ -2859,6 +2865,14 @@ public abstract class RecentsView<
|
||||
animatorSet.play(
|
||||
ObjectAnimator.ofFloat(this, TASK_THUMBNAIL_SPLASH_ALPHA, splashAlpha));
|
||||
}
|
||||
if (enableLargeDesktopWindowingTile()) {
|
||||
if (animatorSet != null) {
|
||||
animatorSet.play(
|
||||
ObjectAnimator.ofFloat(this, DESKTOP_CAROUSEL_DETACH_PROGRESS, 0f));
|
||||
} else {
|
||||
DESKTOP_CAROUSEL_DETACH_PROGRESS.set(this, 0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2874,9 +2888,6 @@ public abstract class RecentsView<
|
||||
setEnableDrawingLiveTile(mCurrentGestureEndTarget == GestureState.GestureEndTarget.RECENTS);
|
||||
Log.d(TAG, "onGestureAnimationEnd - mEnableDrawingLiveTile: " + mEnableDrawingLiveTile);
|
||||
setRunningTaskHidden(false);
|
||||
if (enableLargeDesktopWindowingTile()) {
|
||||
setNonRunningTaskCategoryHidden(false);
|
||||
}
|
||||
animateUpTaskIconScale();
|
||||
animateActionsViewIn();
|
||||
|
||||
@@ -3028,6 +3039,9 @@ public abstract class RecentsView<
|
||||
*/
|
||||
public void setRunningTaskHidden(boolean isHidden) {
|
||||
mRunningTaskTileHidden = isHidden;
|
||||
// mRunningTaskAttachAlpha can be changed by RUNNING_TASK_ATTACH_ALPHA animation without
|
||||
// changing mRunningTaskTileHidden.
|
||||
mRunningTaskAttachAlpha = isHidden ? 0f : 1f;
|
||||
TaskView runningTask = getRunningTaskView();
|
||||
if (runningTask == null) {
|
||||
return;
|
||||
@@ -3039,18 +3053,11 @@ public abstract class RecentsView<
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides the tasks that has a different category (Fullscreen/Desktop) from the running task.
|
||||
*/
|
||||
public void setNonRunningTaskCategoryHidden(boolean isHidden) {
|
||||
mNonRunningTaskCategoryHidden = isHidden;
|
||||
updateMinAndMaxScrollX();
|
||||
applyAttachAlpha();
|
||||
}
|
||||
|
||||
private void applyAttachAlpha() {
|
||||
mUtils.applyAttachAlpha(getTaskViews(), getRunningTaskView(), mRunningTaskTileHidden,
|
||||
mNonRunningTaskCategoryHidden);
|
||||
// Only hide non running task carousel when it's fully off screen, otherwise it needs to
|
||||
// be visible to move to on screen.
|
||||
mUtils.applyAttachAlpha(getTaskViews(), getRunningTaskView(), mRunningTaskAttachAlpha,
|
||||
/*nonRunningTaskCarouselHidden=*/mDesktopCarouselDetachProgress == 1f);
|
||||
}
|
||||
|
||||
private void setRunningTaskViewShowScreenshot(boolean showScreenshot) {
|
||||
@@ -3800,7 +3807,7 @@ public abstract class RecentsView<
|
||||
translateTaskWhenDismissed(
|
||||
child,
|
||||
Math.abs(i - dismissedIndex),
|
||||
mIsRtl ? -scrollDiff : scrollDiff,
|
||||
scrollDiff,
|
||||
anim,
|
||||
splitTimings);
|
||||
needsCurveUpdates = true;
|
||||
@@ -4693,6 +4700,10 @@ public abstract class RecentsView<
|
||||
? (runningTask == null ? INVALID_PAGE : indexOfChild(runningTask))
|
||||
: mOffsetMidpointIndexOverride;
|
||||
int modalMidpoint = getCurrentPage();
|
||||
TaskView carouselHiddenMidpointTask = runningTask != null ? runningTask
|
||||
: mUtils.getFirstTaskViewInCarousel(/*nonRunningTaskCarouselHidden=*/true,
|
||||
getTaskViews(), null);
|
||||
int carouselHiddenMidpoint = indexOfChild(carouselHiddenMidpointTask);
|
||||
boolean shouldCalculateOffsetForAllTasks = showAsGrid
|
||||
&& (enableGridOnlyOverview() || enableLargeDesktopWindowingTile())
|
||||
&& mTaskModalness > 0;
|
||||
@@ -4712,6 +4723,7 @@ public abstract class RecentsView<
|
||||
float modalLeftOffsetSize = 0;
|
||||
float modalRightOffsetSize = 0;
|
||||
float gridOffsetSize = 0;
|
||||
float carouselHiddenOffsetSize = 0;
|
||||
|
||||
if (showAsGrid) {
|
||||
// In grid, we only focus the task on the side. The reference index used for offset
|
||||
@@ -4729,7 +4741,10 @@ public abstract class RecentsView<
|
||||
: 0;
|
||||
}
|
||||
|
||||
int primarySize = getPagedOrientationHandler().getPrimaryValue(getWidth(), getHeight());
|
||||
float maxOverscroll = primarySize * OverScroll.OVERSCROLL_DAMP_FACTOR;
|
||||
for (int i = 0; i < count; i++) {
|
||||
View child = getChildAt(i);
|
||||
float translation = i == midpoint
|
||||
? midpointOffsetSize
|
||||
: i < midpoint
|
||||
@@ -4739,16 +4754,31 @@ public abstract class RecentsView<
|
||||
gridOffsetSize = getHorizontalOffsetSize(i, modalMidpoint, modalOffset);
|
||||
gridOffsetSize = Math.abs(gridOffsetSize) * (i <= modalMidpoint ? 1 : -1);
|
||||
}
|
||||
if (enableLargeDesktopWindowingTile()) {
|
||||
if (child instanceof TaskView
|
||||
&& !mUtils.isVisibleInCarousel((TaskView) child,
|
||||
runningTask, /*nonRunningTaskCarouselHidden=*/true)) {
|
||||
// Increment carouselHiddenOffsetSize by maxOverscroll so it won't be on screen
|
||||
// even when user overscroll.
|
||||
carouselHiddenOffsetSize = (Math.abs(getMaxHorizontalOffsetSize(i,
|
||||
carouselHiddenMidpoint)) + maxOverscroll)
|
||||
* mDesktopCarouselDetachProgress;
|
||||
carouselHiddenOffsetSize = carouselHiddenOffsetSize * (
|
||||
i <= carouselHiddenMidpoint ? 1 : -1);
|
||||
} else {
|
||||
carouselHiddenOffsetSize = 0;
|
||||
}
|
||||
}
|
||||
float modalTranslation = i == modalMidpoint
|
||||
? modalMidpointOffsetSize
|
||||
: showAsGrid
|
||||
? gridOffsetSize
|
||||
: i < modalMidpoint ? modalLeftOffsetSize : modalRightOffsetSize;
|
||||
View child = getChildAt(i);
|
||||
boolean skipTranslationOffset = enableDesktopTaskAlphaAnimation()
|
||||
&& i == getRunningTaskIndex()
|
||||
&& child instanceof DesktopTaskView;
|
||||
float totalTranslationX = (skipTranslationOffset ? 0f : translation) + modalTranslation;
|
||||
float totalTranslationX = (skipTranslationOffset ? 0f : translation) + modalTranslation
|
||||
+ carouselHiddenOffsetSize;
|
||||
FloatProperty translationPropertyX = child instanceof TaskView
|
||||
? ((TaskView) child).getPrimaryTaskOffsetTranslationProperty()
|
||||
: getPagedOrientationHandler().getPrimaryViewTranslate();
|
||||
@@ -4805,6 +4835,14 @@ public abstract class RecentsView<
|
||||
return 0;
|
||||
}
|
||||
|
||||
return getMaxHorizontalOffsetSize(childIndex, midpointIndex) * offsetProgress;
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes the distance to offset the given child such that it is completely offscreen when
|
||||
* translating away from the given midpoint.
|
||||
*/
|
||||
private float getMaxHorizontalOffsetSize(int childIndex, int midpointIndex) {
|
||||
// First, get the position of the task relative to the midpoint. If there is no midpoint
|
||||
// then we just use the normal (centered) task position.
|
||||
RectF taskPosition = mTempRectF;
|
||||
@@ -4864,7 +4902,7 @@ public abstract class RecentsView<
|
||||
}
|
||||
distanceToOffscreen -= mLastComputedTaskEndPushOutDistance;
|
||||
}
|
||||
return distanceToOffscreen * offsetProgress;
|
||||
return distanceToOffscreen;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -5817,7 +5855,7 @@ public abstract class RecentsView<
|
||||
private int getFirstViewIndex() {
|
||||
final TaskView firstView;
|
||||
if (mShowAsGridLastOnLayout) {
|
||||
// For grid Overivew, it always start if a large tile (focused task or desktop task) if
|
||||
// For grid Overview, it always start if a large tile (focused task or desktop task) if
|
||||
// they exist, otherwise it start with the first task.
|
||||
TaskView firstLargeTaskView = mUtils.getFirstLargeTaskView(getTaskViews());
|
||||
if (firstLargeTaskView != null) {
|
||||
@@ -5826,7 +5864,8 @@ public abstract class RecentsView<
|
||||
firstView = getTaskViewAt(0);
|
||||
}
|
||||
} else {
|
||||
firstView = mUtils.getFirstTaskViewInCarousel(mNonRunningTaskCategoryHidden,
|
||||
firstView = mUtils.getFirstTaskViewInCarousel(
|
||||
/*nonRunningTaskCarouselHidden=*/mDesktopCarouselDetachProgress > 0,
|
||||
getTaskViews(), getRunningTaskView());
|
||||
}
|
||||
return indexOfChild(firstView);
|
||||
@@ -5847,7 +5886,8 @@ public abstract class RecentsView<
|
||||
lastView = mUtils.getLastLargeTaskView(getTaskViews());
|
||||
}
|
||||
} else {
|
||||
lastView = mUtils.getLastTaskViewInCarousel(mNonRunningTaskCategoryHidden,
|
||||
lastView = mUtils.getLastTaskViewInCarousel(
|
||||
/*nonRunningTaskCarouselHidden=*/mDesktopCarouselDetachProgress > 0,
|
||||
getTaskViews(), getRunningTaskView());
|
||||
}
|
||||
return indexOfChild(lastView);
|
||||
|
||||
+1
-1
@@ -98,7 +98,7 @@ class BubbleBarViewScreenshotTest(emulationSpec: DeviceEmulationSpec) {
|
||||
// if we're still expanding, wait with taking a screenshot
|
||||
val shouldWait: (ComponentActivity, View) -> Boolean = { _, _ -> bubbleBarView.isExpanding }
|
||||
// increase the frame limit to allow the animation to end before taking the screenshot
|
||||
screenshotRule.frameLimit = 50
|
||||
screenshotRule.frameLimit = 500
|
||||
screenshotRule.screenshotTest(
|
||||
"bubbleBarView_expanded_threeBubbles",
|
||||
checkView = shouldWait,
|
||||
|
||||
+93
-3
@@ -170,10 +170,100 @@ class BubbleBarFlyoutViewScreenshotTest(emulationSpec: DeviceEmulationSpec) {
|
||||
}
|
||||
}
|
||||
|
||||
private class FakeBubbleBarFlyoutPositioner(override val isOnLeft: Boolean) :
|
||||
BubbleBarFlyoutPositioner {
|
||||
@Test
|
||||
fun bubbleBarFlyoutView_collapsed_onLeft() {
|
||||
screenshotRule.screenshotTest("bubbleBarFlyoutView_collapsed_onLeft") { activity ->
|
||||
activity.actionBar?.hide()
|
||||
val flyout =
|
||||
BubbleBarFlyoutView(context, FakeBubbleBarFlyoutPositioner(isOnLeft = true))
|
||||
flyout.showFromCollapsed(
|
||||
BubbleBarFlyoutMessage(
|
||||
senderAvatar = ColorDrawable(Color.RED),
|
||||
senderName = "sender",
|
||||
message = "collapsed on left",
|
||||
isGroupChat = true,
|
||||
)
|
||||
) {}
|
||||
flyout.updateExpansionProgress(0f)
|
||||
flyout
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun bubbleBarFlyoutView_collapsed_onRight() {
|
||||
screenshotRule.screenshotTest("bubbleBarFlyoutView_collapsed_onRight") { activity ->
|
||||
activity.actionBar?.hide()
|
||||
val flyout =
|
||||
BubbleBarFlyoutView(context, FakeBubbleBarFlyoutPositioner(isOnLeft = false))
|
||||
flyout.showFromCollapsed(
|
||||
BubbleBarFlyoutMessage(
|
||||
senderAvatar = ColorDrawable(Color.RED),
|
||||
senderName = "sender",
|
||||
message = "collapsed on right",
|
||||
isGroupChat = true,
|
||||
)
|
||||
) {}
|
||||
flyout.updateExpansionProgress(0f)
|
||||
flyout
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun bubbleBarFlyoutView_90p_onLeft() {
|
||||
screenshotRule.screenshotTest("bubbleBarFlyoutView_90p_onLeft") { activity ->
|
||||
activity.actionBar?.hide()
|
||||
val flyout =
|
||||
BubbleBarFlyoutView(
|
||||
context,
|
||||
FakeBubbleBarFlyoutPositioner(
|
||||
isOnLeft = true,
|
||||
distanceToCollapsedPosition = PointF(100f, 100f),
|
||||
),
|
||||
)
|
||||
flyout.showFromCollapsed(
|
||||
BubbleBarFlyoutMessage(
|
||||
senderAvatar = ColorDrawable(Color.RED),
|
||||
senderName = "sender",
|
||||
message = "collapsed 90% on left",
|
||||
isGroupChat = true,
|
||||
)
|
||||
) {}
|
||||
flyout.updateExpansionProgress(0.9f)
|
||||
flyout
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun bubbleBarFlyoutView_80p_onRight() {
|
||||
screenshotRule.screenshotTest("bubbleBarFlyoutView_80p_onRight") { activity ->
|
||||
activity.actionBar?.hide()
|
||||
val flyout =
|
||||
BubbleBarFlyoutView(
|
||||
context,
|
||||
FakeBubbleBarFlyoutPositioner(
|
||||
isOnLeft = false,
|
||||
distanceToCollapsedPosition = PointF(200f, 100f),
|
||||
),
|
||||
)
|
||||
flyout.showFromCollapsed(
|
||||
BubbleBarFlyoutMessage(
|
||||
senderAvatar = ColorDrawable(Color.RED),
|
||||
senderName = "sender",
|
||||
message = "collapsed 80% on right",
|
||||
isGroupChat = true,
|
||||
)
|
||||
) {}
|
||||
flyout.updateExpansionProgress(0.8f)
|
||||
flyout
|
||||
}
|
||||
}
|
||||
|
||||
private class FakeBubbleBarFlyoutPositioner(
|
||||
override val isOnLeft: Boolean,
|
||||
override val distanceToCollapsedPosition: PointF = PointF(0f, 0f),
|
||||
) : BubbleBarFlyoutPositioner {
|
||||
override val targetTy = 0f
|
||||
override val distanceToCollapsedPosition = PointF(0f, 0f)
|
||||
override val collapsedSize = 30f
|
||||
override val collapsedColor = Color.BLUE
|
||||
}
|
||||
}
|
||||
|
||||
+2
@@ -17,6 +17,7 @@
|
||||
package com.android.launcher3.taskbar.bubbles.flyout
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.graphics.PointF
|
||||
import android.view.Gravity
|
||||
import android.widget.FrameLayout
|
||||
@@ -53,6 +54,7 @@ class BubbleBarFlyoutControllerTest {
|
||||
override val targetTy = 50f
|
||||
override val distanceToCollapsedPosition = PointF(100f, 200f)
|
||||
override val collapsedSize = 30f
|
||||
override val collapsedColor = Color.BLUE
|
||||
}
|
||||
flyoutController = BubbleBarFlyoutController(flyoutContainer, positioner)
|
||||
}
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"የተከፈለ ማያ ገፅ"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"የመተግበሪያ መረጃ ለ%1$s"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"የ%1$s የአጠቃቀም ቅንብሮች"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"አዲስ መስኮት"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"የመተግበሪያ ጥምረትን ያስቀምጡ"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ይህ የመተግበሪያ ጥምረት በዚህ መሣሪያ ላይ አይደገፍም"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Podeljeni ekran"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informacije o aplikaciji za: %1$s"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"Podešavanja potrošnje za %1$s"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Novi prozor"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Sačuvaj par aplikacija"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Ovaj par aplikacija nije podržan na ovom uređaju"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Падзелены экран"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Інфармацыя пра праграму для: %1$s"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s: налады выкарыстання"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Новае акно"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Захаваць спалучэнне праграм"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Дадзенае спалучэнне праграм не падтрымліваецца на гэтай прыладзе"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Podijeljeni ekran"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informacije o aplikaciji %1$s"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"Postavke korištenja za: %1$s"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Novi prozor"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Sačuvaj par aplikacija"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Par aplikacija nije podržan na uređaju"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Pantalla dividida"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Información de la aplicación %1$s"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"Ajustes de uso para %1$s"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Ventana nueva"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Guardar apps emparejadas"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"El dispositivo no admite esta aplicación emparejada"</string>
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
<string name="msg_missing_notification_access" msgid="281113995110910548">"برای نمایش «نقطههای اعلان»، اعلانهای برنامه را برای <xliff:g id="NAME">%1$s</xliff:g> روشن کنید"</string>
|
||||
<string name="title_change_settings" msgid="1376365968844349552">"تغییر تنظیمات"</string>
|
||||
<string name="notification_dots_service_title" msgid="4284221181793592871">"نمایش نقطههای اعلان"</string>
|
||||
<string name="developer_options_title" msgid="700788437593726194">"گزینههای برنامهنویس"</string>
|
||||
<string name="developer_options_title" msgid="700788437593726194">"گزینههای توسعهدهندگان"</string>
|
||||
<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>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Podijeljeni zaslon"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informacije o aplikaciji %1$s"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"Postavke upotrebe za %1$s"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Novi prozor"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Spremi par aplikacija"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Taj par aplikacija nije podržan na ovom uređaju"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Skipta skjá"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Upplýsingar um forrit fyrir %1$s"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"Notkunarstillingar fyrir %1$s"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nýr gluggi"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Vista forritapar"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Þetta forritapar er ekki stutt í þessu tæki"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"分割画面"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s のアプリ情報"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s の使用設定"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"新しいウィンドウ"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"アプリのペア設定を保存"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"このデバイスは、このアプリのペア設定に対応していません"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"ეკრანის გაყოფა"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s-ის აპის ინფო"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"გამოყენების პარამეტრები %1$s-ისთვის"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"ახალი ფანჯარა"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"აპთა წყვილის შენახვა"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ამ მოწყობილობაზე აღნიშნული აპთა წყვილი არ არის მხარდაჭერილი"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Экранды бөлу"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s қолданбасы туралы ақпарат"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s пайдалану параметрлері"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Жаңа терезе"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Қолданбаларды жұптау әрекетін сақтау"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Бұл құрылғы қолданбаларды жұптау функциясын қолдамайды."</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"មុខងារបំបែកអេក្រង់"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"ព័ត៌មានកម្មវិធីសម្រាប់ %1$s"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"ការកំណត់ការប្រើប្រាស់សម្រាប់ %1$s"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"វិនដូថ្មី"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"រក្សាទុកគូកម្មវិធី"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"មិនអាចប្រើគូកម្មវិធីនេះនៅលើឧបករណ៍នេះបានទេ"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Экранды бөлүү"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s колдонмосу жөнүндө маалымат"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s колдонмосун пайдалануу параметрлери"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Жаңы терезе"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Колдонмолорду сактап коюу"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Бул эки колдонмону бул түзмөктө бир маалда пайдаланууга болбойт"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Išskaidyto ekrano režimas"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Programos „%1$s“ informacija"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"„%1$s“ naudojimo nustatymai"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Naujas langas"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Išsaugoti programų porą"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Ši programų pora šiame įrenginyje nepalaikoma"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"സ്ക്രീൻ വിഭജന മോഡ്"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s എന്നതിന്റെ ആപ്പ് വിവരങ്ങൾ"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s എന്നതിനുള്ള ഉപയോഗ ക്രമീകരണം"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"പുതിയ വിന്ഡോ"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"ആപ്പ് ജോടി സംരക്ഷിക്കുക"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ഈ ഉപകരണത്തിൽ ഈ ആപ്പ് ജോടിക്ക് പിന്തുണയില്ല"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Skrin pisah"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Maklumat apl untuk %1$s"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"Tetapan penggunaan sebanyak %1$s"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Tetingkap Baharu"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Simpan gandingan apl"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Gandingan apl ini tidak disokong pada peranti ini"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"स्प्लिट स्क्रिन"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s का हकमा एपसम्बन्धी जानकारी"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s को प्रयोगसम्बन्धी सेटिङ"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"नयाँ विन्डो"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"एपको पेयर सेभ गर्नुहोस्"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"यस डिभाइसमा यो एप पेयर प्रयोग गर्न मिल्दैन"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Ecrã dividido"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informações da app para %1$s"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"Definições de utilização para %1$s"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nova janela"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Guardar par de apps"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Este par de apps não é suportado neste dispositivo"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Tela dividida"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informações do app %1$s"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"Configurações de uso de %1$s"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nova janela"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Salvar par de apps"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Este Par de apps não está disponível no dispositivo"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Разделить экран"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Сведения о приложении \"%1$s\""</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"Настройки использования приложения \"%1$s\""</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Новое окно"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Сохранить приложения"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Одновременно использовать эти два приложения на устройстве нельзя."</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"බෙදුම් තිරය"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s සඳහා යෙදුම් තතු"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s සඳහා භාවිත සැකසීම්"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"නව කවුළුව"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"යෙදුම් යුගල සුරකින්න"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"මෙම යෙදුම් යුගලය මෙම උපාංගයෙහි සහාය නොදක්වයි"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Razdeljen zaslon"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Podatki o aplikaciji za: %1$s"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"Nastavitve uporabe za »%1$s«"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Novo okno"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Shrani par aplikacij"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Ta par aplikacij ni podprt v tej napravi"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Подељени екран"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Информације о апликацији за: %1$s"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"Подешавања потрошње за %1$s"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Нови прозор"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Сачувај пар апликација"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Овај пар апликација није подржан на овом уређају"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"Delad skärm"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Appinformation för %1$s"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"Användningsinställningar för %1$s"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nytt fönster"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"Spara app-par"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"De här apparna som ska användas tillsammans stöds inte på den här enheten"</string>
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
<string name="recent_task_option_split_screen" msgid="6690461455618725183">"స్ప్లిట్ స్క్రీన్"</string>
|
||||
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s కోసం యాప్ సమాచారం"</string>
|
||||
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$sకు సంబంధించిన వినియోగ సెట్టింగ్లు"</string>
|
||||
<!-- no translation found for new_window_option_taskbar (6448780542727767211) -->
|
||||
<skip />
|
||||
<string name="new_window_option_taskbar" msgid="6448780542727767211">"కొత్త విండో"</string>
|
||||
<string name="save_app_pair" msgid="5647523853662686243">"యాప్ పెయిర్ను సేవ్ చేయండి"</string>
|
||||
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
|
||||
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ఈ పరికరంలో ఈ యాప్ పెయిర్ సపోర్ట్ చేయదు"</string>
|
||||
|
||||
@@ -71,6 +71,13 @@ public interface BaseState<T extends BaseState> {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* For this state, whether fullscreen and desktop quickswitch carousel are detached.
|
||||
*/
|
||||
default boolean detachDesktopCarousel() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* For this state, whether member variables and other forms of data state should be preserved
|
||||
* or wiped when the state is reapplied. (See {@link StateManager#reapplyState()})
|
||||
|
||||
Reference in New Issue
Block a user