diff options
Diffstat (limited to 'libs')
132 files changed, 567 insertions, 1715 deletions
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsImpl.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsImpl.java index 55eabb039c01..c3d8f9a99d79 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsImpl.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsImpl.java @@ -16,12 +16,14 @@ package androidx.window.extensions; +import android.app.ActivityTaskManager; import android.app.ActivityThread; import android.app.Application; import android.content.Context; import android.window.TaskFragmentOrganizer; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.window.common.DeviceStateManagerFoldingFeatureProducer; import androidx.window.common.RawFoldingFeatureProducer; import androidx.window.extensions.area.WindowAreaComponent; @@ -111,9 +113,13 @@ public class WindowExtensionsImpl implements WindowExtensions { * {@link WindowExtensions#getWindowLayoutComponent()}. * @return {@link ActivityEmbeddingComponent} OEM implementation. */ - @NonNull + @Nullable public ActivityEmbeddingComponent getActivityEmbeddingComponent() { if (mSplitController == null) { + if (!ActivityTaskManager.supportsMultiWindow(getApplication())) { + // Disable AE for device that doesn't support multi window. + return null; + } synchronized (mLock) { if (mSplitController == null) { mSplitController = new SplitController( diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java index ccf95527efea..e03e1ecd6015 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java @@ -319,13 +319,17 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { return features; } + // We will transform the feature bounds to the Activity window, so using the rotation + // from the same source (WindowConfiguration) to make sure they are synchronized. + final int rotation = windowConfiguration.getDisplayRotation(); + for (CommonFoldingFeature baseFeature : storedFeatures) { Integer state = convertToExtensionState(baseFeature.getState()); if (state == null) { continue; } Rect featureRect = baseFeature.getRect(); - rotateRectToDisplayRotation(displayId, featureRect); + rotateRectToDisplayRotation(displayId, rotation, featureRect); transformToWindowSpaceRect(windowConfiguration, featureRect); if (isZero(featureRect)) { diff --git a/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SampleSidecarImpl.java b/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SampleSidecarImpl.java index 5bfb0ebdcaa8..15a329bd9509 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SampleSidecarImpl.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SampleSidecarImpl.java @@ -120,10 +120,12 @@ class SampleSidecarImpl extends StubSidecar { } List<SidecarDisplayFeature> features = new ArrayList<>(); + final int rotation = activity.getResources().getConfiguration().windowConfiguration + .getDisplayRotation(); for (CommonFoldingFeature baseFeature : mStoredFeatures) { SidecarDisplayFeature feature = new SidecarDisplayFeature(); Rect featureRect = baseFeature.getRect(); - rotateRectToDisplayRotation(displayId, featureRect); + rotateRectToDisplayRotation(displayId, rotation, featureRect); transformToWindowSpaceRect(activity, featureRect); feature.setRect(featureRect); feature.setType(baseFeature.getType()); diff --git a/libs/WindowManager/Jetpack/src/androidx/window/util/ExtensionHelper.java b/libs/WindowManager/Jetpack/src/androidx/window/util/ExtensionHelper.java index 9e2611f392a3..6b193fc53935 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/util/ExtensionHelper.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/util/ExtensionHelper.java @@ -16,8 +16,6 @@ package androidx.window.util; -import static android.view.Surface.ROTATION_0; -import static android.view.Surface.ROTATION_180; import static android.view.Surface.ROTATION_270; import static android.view.Surface.ROTATION_90; @@ -25,12 +23,14 @@ import android.app.WindowConfiguration; import android.content.Context; import android.graphics.Rect; import android.hardware.display.DisplayManagerGlobal; +import android.util.RotationUtils; import android.view.DisplayInfo; import android.view.Surface; import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.UiContext; +import androidx.annotation.VisibleForTesting; /** * Util class for both Sidecar and Extensions. @@ -44,47 +44,41 @@ public final class ExtensionHelper { /** * Rotates the input rectangle specified in default display orientation to the current display * rotation. + * + * @param displayId the display id. + * @param rotation the target rotation relative to the default display orientation. + * @param inOutRect the input/output Rect as specified in the default display orientation. */ - public static void rotateRectToDisplayRotation(int displayId, Rect inOutRect) { - DisplayManagerGlobal dmGlobal = DisplayManagerGlobal.getInstance(); - DisplayInfo displayInfo = dmGlobal.getDisplayInfo(displayId); - int rotation = displayInfo.rotation; + public static void rotateRectToDisplayRotation( + int displayId, @Surface.Rotation int rotation, @NonNull Rect inOutRect) { + final DisplayManagerGlobal dmGlobal = DisplayManagerGlobal.getInstance(); + final DisplayInfo displayInfo = dmGlobal.getDisplayInfo(displayId); - boolean isSideRotation = rotation == ROTATION_90 || rotation == ROTATION_270; - int displayWidth = isSideRotation ? displayInfo.logicalHeight : displayInfo.logicalWidth; - int displayHeight = isSideRotation ? displayInfo.logicalWidth : displayInfo.logicalHeight; - - inOutRect.intersect(0, 0, displayWidth, displayHeight); - - rotateBounds(inOutRect, displayWidth, displayHeight, rotation); + rotateRectToDisplayRotation(displayInfo, rotation, inOutRect); } - /** - * Rotates the input rectangle within parent bounds for a given delta. - */ - private static void rotateBounds(Rect inOutRect, int parentWidth, int parentHeight, - @Surface.Rotation int delta) { - int origLeft = inOutRect.left; - switch (delta) { - case ROTATION_0: - return; - case ROTATION_90: - inOutRect.left = inOutRect.top; - inOutRect.top = parentWidth - inOutRect.right; - inOutRect.right = inOutRect.bottom; - inOutRect.bottom = parentWidth - origLeft; - return; - case ROTATION_180: - inOutRect.left = parentWidth - inOutRect.right; - inOutRect.right = parentWidth - origLeft; - return; - case ROTATION_270: - inOutRect.left = parentHeight - inOutRect.bottom; - inOutRect.bottom = inOutRect.right; - inOutRect.right = parentHeight - inOutRect.top; - inOutRect.top = origLeft; - return; + @VisibleForTesting + static void rotateRectToDisplayRotation(@NonNull DisplayInfo displayInfo, + @Surface.Rotation int rotation, @NonNull Rect inOutRect) { + // The inOutRect is specified in the default display orientation, so here we need to get + // the display width and height in the default orientation to perform the intersection and + // rotation. + final boolean isSideRotation = + displayInfo.rotation == ROTATION_90 || displayInfo.rotation == ROTATION_270; + final int baseDisplayWidth = + isSideRotation ? displayInfo.logicalHeight : displayInfo.logicalWidth; + final int baseDisplayHeight = + isSideRotation ? displayInfo.logicalWidth : displayInfo.logicalHeight; + + final boolean success = inOutRect.intersect(0, 0, baseDisplayWidth, baseDisplayHeight); + if (!success) { + throw new IllegalArgumentException("inOutRect must intersect with the display." + + " inOutRect: " + inOutRect + + ", baseDisplayWidth: " + baseDisplayWidth + + ", baseDisplayHeight: " + baseDisplayHeight); } + + RotationUtils.rotateBounds(inOutRect, baseDisplayWidth, baseDisplayHeight, rotation); } /** Transforms rectangle from absolute coordinate space to the window coordinate space. */ diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/WindowExtensionsTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/WindowExtensionsTest.java index d189ae2cf72e..068269297193 100644 --- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/WindowExtensionsTest.java +++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/WindowExtensionsTest.java @@ -16,8 +16,11 @@ package androidx.window.extensions; +import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; + import static com.google.common.truth.Truth.assertThat; +import android.app.ActivityTaskManager; import android.platform.test.annotations.Presubmit; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -29,7 +32,7 @@ import org.junit.Test; import org.junit.runner.RunWith; /** - * Test class for {@link WindowExtensionsTest}. + * Test class for {@link WindowExtensions}. * * Build/Install/Run: * atest WMJetpackUnitTests:WindowExtensionsTest @@ -52,7 +55,11 @@ public class WindowExtensionsTest { @Test public void testGetActivityEmbeddingComponent() { - assertThat(mExtensions.getActivityEmbeddingComponent()).isNotNull(); + if (ActivityTaskManager.supportsMultiWindow(getInstrumentation().getContext())) { + assertThat(mExtensions.getActivityEmbeddingComponent()).isNotNull(); + } else { + assertThat(mExtensions.getActivityEmbeddingComponent()).isNull(); + } } @Test diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/util/ExtensionHelperTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/util/ExtensionHelperTest.java new file mode 100644 index 000000000000..ae783de228fb --- /dev/null +++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/util/ExtensionHelperTest.java @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package androidx.window.util; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; + +import android.graphics.Rect; +import android.platform.test.annotations.Presubmit; +import android.view.DisplayInfo; +import android.view.Surface; + +import androidx.annotation.NonNull; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.filters.SmallTest; + +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * Test class for {@link ExtensionHelper}. + * + * Build/Install/Run: + * atest WMJetpackUnitTests:ExtensionHelperTest + */ +@Presubmit +@SmallTest +@RunWith(AndroidJUnit4.class) +public class ExtensionHelperTest { + + private static final int MOCK_DISPLAY_HEIGHT = 1000; + private static final int MOCK_DISPLAY_WIDTH = 2000; + private static final int MOCK_FEATURE_LEFT = 100; + private static final int MOCK_FEATURE_RIGHT = 200; + + private static final int[] ROTATIONS = { + Surface.ROTATION_0, + Surface.ROTATION_90, + Surface.ROTATION_180, + Surface.ROTATION_270 + }; + + private static final DisplayInfo[] MOCK_DISPLAY_INFOS = { + getMockDisplayInfo(Surface.ROTATION_0), + getMockDisplayInfo(Surface.ROTATION_90), + getMockDisplayInfo(Surface.ROTATION_180), + getMockDisplayInfo(Surface.ROTATION_270), + }; + + @Test + public void testRotateRectToDisplayRotation() { + for (int rotation : ROTATIONS) { + final Rect expectedResult = getExpectedFeatureRectAfterRotation(rotation); + // The method should return correctly rotated Rect even if the requested rotation value + // differs from the rotation in DisplayInfo. This is because the WindowConfiguration is + // not always synced with DisplayInfo. + for (DisplayInfo displayInfo : MOCK_DISPLAY_INFOS) { + final Rect rect = getMockFeatureRect(); + ExtensionHelper.rotateRectToDisplayRotation(displayInfo, rotation, rect); + assertEquals( + "Result Rect should equal to expected for rotation: " + rotation + + "; displayInfo: " + displayInfo, + expectedResult, rect); + } + } + } + + @Test + public void testRotateRectToDisplayRotation_invalidInputRect() { + final Rect invalidRect = new Rect( + MOCK_DISPLAY_WIDTH + 10, 0, MOCK_DISPLAY_WIDTH + 10, MOCK_DISPLAY_HEIGHT); + assertThrows(IllegalArgumentException.class, + () -> ExtensionHelper.rotateRectToDisplayRotation( + MOCK_DISPLAY_INFOS[0], ROTATIONS[0], invalidRect)); + } + + + @NonNull + private static DisplayInfo getMockDisplayInfo(@Surface.Rotation int rotation) { + final DisplayInfo displayInfo = new DisplayInfo(); + displayInfo.rotation = rotation; + if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) { + displayInfo.logicalWidth = MOCK_DISPLAY_WIDTH; + displayInfo.logicalHeight = MOCK_DISPLAY_HEIGHT; + } else { + displayInfo.logicalWidth = MOCK_DISPLAY_HEIGHT; + displayInfo.logicalHeight = MOCK_DISPLAY_WIDTH; + } + return displayInfo; + } + + @NonNull + private static Rect getMockFeatureRect() { + return new Rect(MOCK_FEATURE_LEFT, 0, MOCK_FEATURE_RIGHT, MOCK_DISPLAY_HEIGHT); + } + + @NonNull + private static Rect getExpectedFeatureRectAfterRotation(@Surface.Rotation int rotation) { + switch (rotation) { + case Surface.ROTATION_0: + return new Rect( + MOCK_FEATURE_LEFT, 0, MOCK_FEATURE_RIGHT, MOCK_DISPLAY_HEIGHT); + case Surface.ROTATION_90: + return new Rect(0, MOCK_DISPLAY_WIDTH - MOCK_FEATURE_RIGHT, + MOCK_DISPLAY_HEIGHT, MOCK_DISPLAY_WIDTH - MOCK_FEATURE_LEFT); + case Surface.ROTATION_180: + return new Rect(MOCK_DISPLAY_WIDTH - MOCK_FEATURE_RIGHT, 0, + MOCK_DISPLAY_WIDTH - MOCK_FEATURE_LEFT, MOCK_DISPLAY_HEIGHT); + case Surface.ROTATION_270: + return new Rect(0, MOCK_FEATURE_LEFT, MOCK_DISPLAY_HEIGHT, + MOCK_FEATURE_RIGHT); + default: + throw new IllegalArgumentException("Unknown rotation value: " + rotation); + } + } +} diff --git a/libs/WindowManager/Shell/res/values-af/strings.xml b/libs/WindowManager/Shell/res/values-af/strings.xml index 1164d3778826..4f763425b601 100644 --- a/libs/WindowManager/Shell/res/values-af/strings.xml +++ b/libs/WindowManager/Shell/res/values-af/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Het dit"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Geen onlangse borrels nie"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Onlangse borrels en borrels wat toegemaak is, sal hier verskyn"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Beheer borrels enige tyd"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tik hier om te bestuur watter apps en gesprekke in borrels kan verskyn"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Borrel"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Bestuur"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Borrel is toegemaak."</string> diff --git a/libs/WindowManager/Shell/res/values-am/strings.xml b/libs/WindowManager/Shell/res/values-am/strings.xml index ffed367926e1..1e5f5f136315 100644 --- a/libs/WindowManager/Shell/res/values-am/strings.xml +++ b/libs/WindowManager/Shell/res/values-am/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ገባኝ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ምንም የቅርብ ጊዜ አረፋዎች የሉም"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"የቅርብ ጊዜ አረፋዎች እና የተሰናበቱ አረፋዎች እዚህ ብቅ ይላሉ"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"በማንኛውም ጊዜ ዓረፋዎችን ይቆጣጠሩ"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"የትኛዎቹ መተግበሪያዎች እና ውይይቶች ዓረፋ መፍጠር እንደሚችሉ ለማስተዳደር እዚህ ጋር መታ ያድርጉ"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"አረፋ"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"ያቀናብሩ"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"አረፋ ተሰናብቷል።"</string> diff --git a/libs/WindowManager/Shell/res/values-ar/strings.xml b/libs/WindowManager/Shell/res/values-ar/strings.xml index 4e9b76bc4948..9c52608a8d23 100644 --- a/libs/WindowManager/Shell/res/values-ar/strings.xml +++ b/libs/WindowManager/Shell/res/values-ar/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"حسنًا"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ليس هناك فقاعات محادثات"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ستظهر هنا أحدث فقاعات المحادثات وفقاعات المحادثات التي تم إغلاقها."</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"التحكّم في إظهار الفقاعات في أي وقت"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"انقر هنا للتحكّم في إظهار فقاعات التطبيقات والمحادثات التي تريدها."</string> <string name="notification_bubble_title" msgid="6082910224488253378">"فقاعة"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"إدارة"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"تم إغلاق الفقاعة."</string> diff --git a/libs/WindowManager/Shell/res/values-as/strings.xml b/libs/WindowManager/Shell/res/values-as/strings.xml index a583f349d1f1..e880b8744f40 100644 --- a/libs/WindowManager/Shell/res/values-as/strings.xml +++ b/libs/WindowManager/Shell/res/values-as/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"বুজি পালোঁ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"কোনো শেহতীয়া bubbles নাই"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"শেহতীয়া bubbles আৰু অগ্ৰাহ্য কৰা bubbles ইয়াত প্ৰদর্শিত হ\'ব"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"যিকোনো সময়তে বাবল নিয়ন্ত্ৰণ কৰক"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"কোনবোৰ এপ্ আৰু বাৰ্তালাপ বাবল হ’ব পাৰে সেয়া পৰিচালনা কৰিবলৈ ইয়াত টিপক"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"বাবল"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"পৰিচালনা কৰক"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"বাবল অগ্ৰাহ্য কৰা হৈছে"</string> diff --git a/libs/WindowManager/Shell/res/values-az/strings.xml b/libs/WindowManager/Shell/res/values-az/strings.xml index fb09258aef26..6e746fb761f0 100644 --- a/libs/WindowManager/Shell/res/values-az/strings.xml +++ b/libs/WindowManager/Shell/res/values-az/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Anladım"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Yumrucuqlar yoxdur"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Son yumrucuqlar və buraxılmış yumrucuqlar burada görünəcək"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Yumrucuqları idarə edin"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Bura toxunaraq yumrucuq göstərəcək tətbiq və söhbətləri idarə edin"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Qabarcıq"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"İdarə edin"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Qabarcıqdan imtina edilib."</string> diff --git a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml index a9ba12e6508a..3be326907cd2 100644 --- a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml +++ b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Važi"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nema nedavnih oblačića"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Ovde se prikazuju nedavni i odbačeni oblačići"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kontrolišite oblačiće u svakom trenutku"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Dodirnite ovde i odredite koje aplikacije i konverzacije mogu da imaju oblačić"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Oblačić"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Upravljajte"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Oblačić je odbačen."</string> diff --git a/libs/WindowManager/Shell/res/values-be/strings.xml b/libs/WindowManager/Shell/res/values-be/strings.xml index eef363be387b..85ae1c10617c 100644 --- a/libs/WindowManager/Shell/res/values-be/strings.xml +++ b/libs/WindowManager/Shell/res/values-be/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Зразумела"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Няма нядаўніх усплывальных апавяшчэнняў"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Нядаўнія і адхіленыя ўсплывальныя апавяшчэнні будуць паказаны тут"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Кіруйце наладамі ўсплывальных апавяшчэнняў у любы час"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Каб кіраваць усплывальнымі апавяшчэннямі для праграм і размоў, націсніце тут"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Усплывальнае апавяшчэнне"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Кіраваць"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Усплывальнае апавяшчэнне адхілена."</string> diff --git a/libs/WindowManager/Shell/res/values-bg/strings.xml b/libs/WindowManager/Shell/res/values-bg/strings.xml index 281bd9d5f37d..640fb2e0ef92 100644 --- a/libs/WindowManager/Shell/res/values-bg/strings.xml +++ b/libs/WindowManager/Shell/res/values-bg/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Разбрах"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Няма скорошни балончета"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Скорошните и отхвърлените балончета ще се показват тук"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Управление на балончетата по всяко време"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Докоснете тук, за да управл. кои прил. и разговори могат да показват балончета"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Балонче"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Управление"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Балончето е отхвърлено."</string> diff --git a/libs/WindowManager/Shell/res/values-bn/strings.xml b/libs/WindowManager/Shell/res/values-bn/strings.xml index 3dae948f96ea..e7c8886a99be 100644 --- a/libs/WindowManager/Shell/res/values-bn/strings.xml +++ b/libs/WindowManager/Shell/res/values-bn/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"বুঝেছি"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"কোনও সাম্প্রতিক বাবল নেই"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"সাম্প্রতিক ও বাতিল করা বাবল এখানে দেখা যাবে"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"যেকোনও সময় বাবল নিয়ন্ত্রণ করুন"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"কোন অ্যাপ ও কথোপকথনের জন্য বাবলের সুবিধা চান তা ম্যানেজ করতে এখানে ট্যাপ করুন"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"বাবল"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"ম্যানেজ করুন"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"বাবল বাতিল করা হয়েছে।"</string> diff --git a/libs/WindowManager/Shell/res/values-bs/strings.xml b/libs/WindowManager/Shell/res/values-bs/strings.xml index 8b7eb6143fb3..1335f8d897be 100644 --- a/libs/WindowManager/Shell/res/values-bs/strings.xml +++ b/libs/WindowManager/Shell/res/values-bs/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Razumijem"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nema nedavnih oblačića"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Nedavni i odbačeni oblačići će se pojaviti ovdje"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Upravljajte oblačićima u svakom trenutku"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Dodirnite ovdje da upravljate time koje aplikacije i razgovori mogu imati oblačić"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Oblačić"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Upravljaj"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Oblačić je odbačen."</string> diff --git a/libs/WindowManager/Shell/res/values-ca/strings.xml b/libs/WindowManager/Shell/res/values-ca/strings.xml index 2250f9d7132a..22fc21c64e09 100644 --- a/libs/WindowManager/Shell/res/values-ca/strings.xml +++ b/libs/WindowManager/Shell/res/values-ca/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Entesos"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"No hi ha bombolles recents"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Les bombolles recents i les ignorades es mostraran aquí"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controla les bombolles en qualsevol moment"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Toca aquí per gestionar quines aplicacions i converses poden fer servir bombolles"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bombolla"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Gestiona"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"La bombolla s\'ha ignorat."</string> diff --git a/libs/WindowManager/Shell/res/values-cs/strings.xml b/libs/WindowManager/Shell/res/values-cs/strings.xml index ebee2c181d58..a85fa7c9435d 100644 --- a/libs/WindowManager/Shell/res/values-cs/strings.xml +++ b/libs/WindowManager/Shell/res/values-cs/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Žádné nedávné bubliny"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Zde se budou zobrazovat nedávné bubliny a zavřené bubliny"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Nastavení bublin můžete kdykoli upravit"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Klepnutím sem lze spravovat, které aplikace a konverzace mohou vytvářet bubliny"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bublina"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Spravovat"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bublina byla zavřena."</string> diff --git a/libs/WindowManager/Shell/res/values-da/strings.xml b/libs/WindowManager/Shell/res/values-da/strings.xml index 4e4624371ab9..cd621f802d91 100644 --- a/libs/WindowManager/Shell/res/values-da/strings.xml +++ b/libs/WindowManager/Shell/res/values-da/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ingen seneste bobler"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Nye bobler og afviste bobler vises her"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Administrer bobler når som helst"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tryk her for at administrere, hvilke apps og samtaler der kan vises i bobler"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Boble"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Administrer"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Boblen blev lukket."</string> diff --git a/libs/WindowManager/Shell/res/values-de/strings.xml b/libs/WindowManager/Shell/res/values-de/strings.xml index 1d5182a14f97..366fdefc3013 100644 --- a/libs/WindowManager/Shell/res/values-de/strings.xml +++ b/libs/WindowManager/Shell/res/values-de/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Keine kürzlich geschlossenen Bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Hier werden aktuelle und geschlossene Bubbles angezeigt"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Bubble-Einstellungen festlegen"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tippe hier, um zu verwalten, welche Apps und Unterhaltungen als Bubble angezeigt werden können"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Verwalten"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble verworfen."</string> diff --git a/libs/WindowManager/Shell/res/values-el/strings.xml b/libs/WindowManager/Shell/res/values-el/strings.xml index 34a6a071286d..a449b9f3c665 100644 --- a/libs/WindowManager/Shell/res/values-el/strings.xml +++ b/libs/WindowManager/Shell/res/values-el/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Το κατάλαβα"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Δεν υπάρχουν πρόσφατα συννεφάκια"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Τα πρόσφατα συννεφάκια και τα συννεφάκια που παραβλέψατε θα εμφανίζονται εδώ."</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Ελέγξτε τα συννεφάκια ανά πάσα στιγμή."</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Πατήστε εδώ για τη διαχείριση εφαρμογών και συζητήσεων που προβάλλουν συννεφάκια"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Συννεφάκι"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Διαχείριση"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Το συννεφάκι παραβλέφθηκε."</string> diff --git a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml index c6e1c5f1a5a3..c7dd3882734b 100644 --- a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml +++ b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"No recent bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Recent bubbles and dismissed bubbles will appear here"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Control bubbles at any time"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tap here to manage which apps and conversations can bubble"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Manage"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble dismissed."</string> diff --git a/libs/WindowManager/Shell/res/values-en-rCA/strings.xml b/libs/WindowManager/Shell/res/values-en-rCA/strings.xml index e536930ec925..99da073cb2c2 100644 --- a/libs/WindowManager/Shell/res/values-en-rCA/strings.xml +++ b/libs/WindowManager/Shell/res/values-en-rCA/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Got it"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"No recent bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Recent bubbles and dismissed bubbles will appear here"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Control bubbles anytime"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tap here to manage which apps and conversations can bubble"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Manage"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble dismissed."</string> diff --git a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml index c6e1c5f1a5a3..c7dd3882734b 100644 --- a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml +++ b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"No recent bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Recent bubbles and dismissed bubbles will appear here"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Control bubbles at any time"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tap here to manage which apps and conversations can bubble"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Manage"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble dismissed."</string> diff --git a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml index c6e1c5f1a5a3..c7dd3882734b 100644 --- a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml +++ b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"No recent bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Recent bubbles and dismissed bubbles will appear here"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Control bubbles at any time"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tap here to manage which apps and conversations can bubble"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Manage"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble dismissed."</string> diff --git a/libs/WindowManager/Shell/res/values-en-rXC/strings.xml b/libs/WindowManager/Shell/res/values-en-rXC/strings.xml index 83631eb3ff41..cc19579c1216 100644 --- a/libs/WindowManager/Shell/res/values-en-rXC/strings.xml +++ b/libs/WindowManager/Shell/res/values-en-rXC/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Got it"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"No recent bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Recent bubbles and dismissed bubbles will appear here"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Control bubbles anytime"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tap here to manage which apps and conversations can bubble"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Manage"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble dismissed."</string> diff --git a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml index c0dfeefef0c0..80d10f26e4e9 100644 --- a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml +++ b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Entendido"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"No hay burbujas recientes"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Las burbujas recientes y las que se descartaron aparecerán aquí"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controla las burbujas"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Presiona para administrar las apps y conversaciones que pueden mostrar burbujas"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Cuadro"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Administrar"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Se descartó el cuadro."</string> diff --git a/libs/WindowManager/Shell/res/values-es/strings.xml b/libs/WindowManager/Shell/res/values-es/strings.xml index 0e66c9bbb819..13dfce03b775 100644 --- a/libs/WindowManager/Shell/res/values-es/strings.xml +++ b/libs/WindowManager/Shell/res/values-es/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Entendido"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"No hay burbujas recientes"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Las burbujas recientes y las cerradas aparecerán aquí"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controla las burbujas cuando quieras"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Toca aquí para gestionar qué aplicaciones y conversaciones pueden usar burbujas"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Burbuja"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Gestionar"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Burbuja cerrada."</string> diff --git a/libs/WindowManager/Shell/res/values-et/strings.xml b/libs/WindowManager/Shell/res/values-et/strings.xml index 201f336b6a96..269968f48c77 100644 --- a/libs/WindowManager/Shell/res/values-et/strings.xml +++ b/libs/WindowManager/Shell/res/values-et/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Selge"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Hiljutisi mulle pole"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Siin kuvatakse hiljutised ja suletud mullid."</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Juhtige mulle igal ajal"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Puudutage siin, et hallata, milliseid rakendusi ja vestlusi saab mullina kuvada"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Mull"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Halda"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Mullist loobuti."</string> diff --git a/libs/WindowManager/Shell/res/values-eu/strings.xml b/libs/WindowManager/Shell/res/values-eu/strings.xml index 84439546f72e..b4a8d57abc94 100644 --- a/libs/WindowManager/Shell/res/values-eu/strings.xml +++ b/libs/WindowManager/Shell/res/values-eu/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Ados"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ez dago azkenaldiko burbuilarik"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Azken burbuilak eta baztertutakoak agertuko dira hemen"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kontrolatu burbuilak edonoiz"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Sakatu hau burbuiletan zein aplikazio eta elkarrizketa ager daitezkeen kudeatzeko"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Burbuila"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Kudeatu"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Baztertu da globoa."</string> diff --git a/libs/WindowManager/Shell/res/values-fa/strings.xml b/libs/WindowManager/Shell/res/values-fa/strings.xml index 4f546e7a2c1b..434bfe11db4e 100644 --- a/libs/WindowManager/Shell/res/values-fa/strings.xml +++ b/libs/WindowManager/Shell/res/values-fa/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"متوجهام"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"هیچ حبابک جدیدی وجود ندارد"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"حبابکهای اخیر و حبابکهای ردشده اینجا ظاهر خواهند شد"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"کنترل حبابکها در هرزمانی"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"برای مدیریت اینکه کدام برنامهها و مکالمهها حباب داشته باشند، ضربه بزنید"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"حباب"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"مدیریت"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"حبابک رد شد."</string> diff --git a/libs/WindowManager/Shell/res/values-fi/strings.xml b/libs/WindowManager/Shell/res/values-fi/strings.xml index d8a18a033616..a04ef1252aa8 100644 --- a/libs/WindowManager/Shell/res/values-fi/strings.xml +++ b/libs/WindowManager/Shell/res/values-fi/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Okei"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ei viimeaikaisia kuplia"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Viimeaikaiset ja äskettäin ohitetut kuplat näkyvät täällä"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Muuta kuplien asetuksia milloin tahansa"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Valitse napauttamalla tästä, mitkä sovellukset ja keskustelut voivat kuplia"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Kupla"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Ylläpidä"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Kupla ohitettu."</string> diff --git a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml index b2077f9b05d9..fbc619144f71 100644 --- a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml +++ b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Aucune bulle récente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Les bulles récentes et les bulles ignorées s\'afficheront ici"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Gérez les bulles en tout temps"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Touchez ici pour gérer les applis et les conversations à inclure aux bulles"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bulle"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Gérer"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bulle ignorée."</string> diff --git a/libs/WindowManager/Shell/res/values-fr/strings.xml b/libs/WindowManager/Shell/res/values-fr/strings.xml index b1b83133584d..e1fe2917a729 100644 --- a/libs/WindowManager/Shell/res/values-fr/strings.xml +++ b/libs/WindowManager/Shell/res/values-fr/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Aucune bulle récente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Les bulles récentes et ignorées s\'afficheront ici"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Contrôlez les bulles à tout moment"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Appuyez ici pour gérer les applis et conversations s\'affichant dans des bulles"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bulle"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Gérer"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bulle fermée."</string> diff --git a/libs/WindowManager/Shell/res/values-gl/strings.xml b/libs/WindowManager/Shell/res/values-gl/strings.xml index fd90e31dc6c4..485a89502c86 100644 --- a/libs/WindowManager/Shell/res/values-gl/strings.xml +++ b/libs/WindowManager/Shell/res/values-gl/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Entendido"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Non hai burbullas recentes"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"As burbullas recentes e ignoradas aparecerán aquí."</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controlar as burbullas"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Toca para xestionar as aplicacións e conversas que poden aparecer en burbullas"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Burbulla"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Xestionar"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Ignorouse a burbulla."</string> diff --git a/libs/WindowManager/Shell/res/values-gu/strings.xml b/libs/WindowManager/Shell/res/values-gu/strings.xml index d7e34fb2888b..365faef85ff6 100644 --- a/libs/WindowManager/Shell/res/values-gu/strings.xml +++ b/libs/WindowManager/Shell/res/values-gu/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"સમજાઈ ગયું"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"તાજેતરના કોઈ બબલ નથી"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"એકદમ નવા બબલ અને છોડી દીધેલા બબલ અહીં દેખાશે"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"બબલને કોઈપણ સમયે નિયંત્રિત કરે છે"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"કઈ ઍપ અને વાતચીતોને બબલ કરવા માગો છો તે મેનેજ કરવા માટે, અહીં ટૅપ કરો"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"બબલ"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"મેનેજ કરો"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"બબલ છોડી દેવાયો."</string> diff --git a/libs/WindowManager/Shell/res/values-hi/strings.xml b/libs/WindowManager/Shell/res/values-hi/strings.xml index 679ea65bb882..76579d10b695 100644 --- a/libs/WindowManager/Shell/res/values-hi/strings.xml +++ b/libs/WindowManager/Shell/res/values-hi/strings.xml @@ -76,19 +76,14 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ठीक है"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"हाल ही के कोई बबल्स नहीं हैं"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"हाल ही के बबल्स और हटाए गए बबल्स यहां दिखेंगे"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"जब चाहें, बबल्स की सुविधा को कंट्रोल करें"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"किसी ऐप्लिकेशन और बातचीत के लिए बबल की सुविधा को मैनेज करने के लिए यहां टैप करें"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"बबल"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"मैनेज करें"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"बबल खारिज किया गया."</string> - <!-- no translation found for restart_button_description (4564728020654658478) --> - <skip /> - <!-- no translation found for user_aspect_ratio_settings_button_hint (734835849600713016) --> - <skip /> - <!-- no translation found for user_aspect_ratio_settings_button_description (4315566801697411684) --> - <skip /> + <string name="restart_button_description" msgid="4564728020654658478">"बेहतर व्यू पाने के लिए, टैप करके ऐप्लिकेशन को रीस्टार्ट करें"</string> + <string name="user_aspect_ratio_settings_button_hint" msgid="734835849600713016">"सेटिंग में जाकर इस ऐप्लिकेशन का आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) बदलें"</string> + <string name="user_aspect_ratio_settings_button_description" msgid="4315566801697411684">"आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) बदलें"</string> <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"क्या कैमरे से जुड़ी कोई समस्या है?\nफिर से फ़िट करने के लिए टैप करें"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"क्या समस्या ठीक नहीं हुई?\nपहले जैसा करने के लिए टैप करें"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"क्या कैमरे से जुड़ी कोई समस्या नहीं है? खारिज करने के लिए टैप करें."</string> diff --git a/libs/WindowManager/Shell/res/values-hr/strings.xml b/libs/WindowManager/Shell/res/values-hr/strings.xml index 88aa1b2b645d..de071f1b959d 100644 --- a/libs/WindowManager/Shell/res/values-hr/strings.xml +++ b/libs/WindowManager/Shell/res/values-hr/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Shvaćam"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nema nedavnih oblačića"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Ovdje će se prikazivati nedavni i odbačeni oblačići"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Upravljanje oblačićima u svakom trenutku"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Dodirnite ovdje da biste odredili koje aplikacije i razgovori mogu imati oblačić"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Oblačić"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Upravljanje"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Oblačić odbačen."</string> diff --git a/libs/WindowManager/Shell/res/values-hu/strings.xml b/libs/WindowManager/Shell/res/values-hu/strings.xml index 5a88bc4753a9..b5631bbf0152 100644 --- a/libs/WindowManager/Shell/res/values-hu/strings.xml +++ b/libs/WindowManager/Shell/res/values-hu/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Értem"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nincsenek buborékok a közelmúltból"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"A legutóbbi és az elvetett buborékok itt jelennek majd meg"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Buborékok vezérlése bármikor"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Ide koppintva jeleníthetők meg az alkalmazások és a beszélgetések buborékként"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Buborék"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Kezelés"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Buborék elvetve."</string> diff --git a/libs/WindowManager/Shell/res/values-hy/strings.xml b/libs/WindowManager/Shell/res/values-hy/strings.xml index 54b1213ad216..2d5d371df41e 100644 --- a/libs/WindowManager/Shell/res/values-hy/strings.xml +++ b/libs/WindowManager/Shell/res/values-hy/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Եղավ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ամպիկներ չկան"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Այստեղ կցուցադրվեն վերջերս օգտագործված և փակված ամպիկները, որոնք կկարողանաք հեշտությամբ վերաբացել"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Ամպիկների կարգավորումներ"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Հպեք այստեղ՝ ընտրելու, թե որ հավելվածների և զրույցների համար ամպիկներ ցուցադրել"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Պղպջակ"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Կառավարել"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Ամպիկը փակվեց։"</string> diff --git a/libs/WindowManager/Shell/res/values-in/strings.xml b/libs/WindowManager/Shell/res/values-in/strings.xml index 32167b30946b..90b1f152d035 100644 --- a/libs/WindowManager/Shell/res/values-in/strings.xml +++ b/libs/WindowManager/Shell/res/values-in/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Oke"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Tidak ada balon baru-baru ini"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Balon yang baru dipakai dan balon yang telah ditutup akan muncul di sini"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kontrol balon kapan saja"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Ketuk di sini untuk mengelola balon aplikasi dan percakapan"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Balon"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Kelola"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balon ditutup."</string> diff --git a/libs/WindowManager/Shell/res/values-is/strings.xml b/libs/WindowManager/Shell/res/values-is/strings.xml index 1304ae149425..813f9e6f4021 100644 --- a/libs/WindowManager/Shell/res/values-is/strings.xml +++ b/libs/WindowManager/Shell/res/values-is/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Ég skil"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Engar nýlegar blöðrur"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Nýlegar blöðrur og blöðrur sem þú hefur lokað birtast hér"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Hægt er að stjórna blöðrum hvenær sem er"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Ýttu hér til að stjórna því hvaða forrit og samtöl mega nota blöðrur."</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Blaðra"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Stjórna"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Blöðru lokað."</string> diff --git a/libs/WindowManager/Shell/res/values-it/strings.xml b/libs/WindowManager/Shell/res/values-it/strings.xml index dceac5c2722a..8918821a8f27 100644 --- a/libs/WindowManager/Shell/res/values-it/strings.xml +++ b/libs/WindowManager/Shell/res/values-it/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nessuna bolla recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Le bolle recenti e ignorate appariranno qui"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Gestisci le bolle in qualsiasi momento"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tocca qui per gestire le app e le conversazioni per cui mostrare le bolle"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Fumetto"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Gestisci"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Fumetto ignorato."</string> diff --git a/libs/WindowManager/Shell/res/values-iw/strings.xml b/libs/WindowManager/Shell/res/values-iw/strings.xml index 7cde568b9123..4d7a0936a3e0 100644 --- a/libs/WindowManager/Shell/res/values-iw/strings.xml +++ b/libs/WindowManager/Shell/res/values-iw/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"הבנתי"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"אין בועות מהזמן האחרון"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"בועות אחרונות ובועות שנסגרו יופיעו כאן"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"שליטה בבועות בכל זמן"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"אפשר להקיש כאן כדי לקבוע אילו אפליקציות ושיחות יוכלו להופיע בבועות"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"בועה"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"ניהול"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"הבועה נסגרה."</string> diff --git a/libs/WindowManager/Shell/res/values-ja/strings.xml b/libs/WindowManager/Shell/res/values-ja/strings.xml index 3b3c4e493e4c..96683590d097 100644 --- a/libs/WindowManager/Shell/res/values-ja/strings.xml +++ b/libs/WindowManager/Shell/res/values-ja/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"最近閉じたバブルはありません"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"最近表示されたバブルや閉じたバブルが、ここに表示されます"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"バブルはいつでも管理可能"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"バブルで表示するアプリや会話を管理するには、ここをタップします"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"バブル"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"管理"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ふきだしが非表示になっています。"</string> diff --git a/libs/WindowManager/Shell/res/values-ka/strings.xml b/libs/WindowManager/Shell/res/values-ka/strings.xml index 3c32e0e6fe8d..a949a18fd449 100644 --- a/libs/WindowManager/Shell/res/values-ka/strings.xml +++ b/libs/WindowManager/Shell/res/values-ka/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"გასაგებია"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ბოლო დროს გამოყენებული ბუშტები არ არის"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"აქ გამოჩნდება ბოლოდროინდელი ბუშტები და უარყოფილი ბუშტები"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ამოხტომის გაკონტროლება ნებისმიერ დროს"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"აქ შეეხეთ იმის სამართავად, თუ რომელი აპები და საუბრები ამოხტეს"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ბუშტი"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"მართვა"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ბუშტი დაიხურა."</string> diff --git a/libs/WindowManager/Shell/res/values-kk/strings.xml b/libs/WindowManager/Shell/res/values-kk/strings.xml index ac5f4bf60309..cbc924907cac 100644 --- a/libs/WindowManager/Shell/res/values-kk/strings.xml +++ b/libs/WindowManager/Shell/res/values-kk/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Түсінікті"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Жақындағы қалқыма хабарлар жоқ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Соңғы және жабылған қалқыма хабарлар осы жерде көрсетіледі."</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Қалқыма хабарларды кез келген уақытта басқарыңыз"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Қалқыма хабарда көрсетілетін қолданбалар мен әңгімелерді реттеу үшін осы жерді түртіңіз."</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Көпіршік"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Басқару"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Қалқыма хабар жабылды."</string> diff --git a/libs/WindowManager/Shell/res/values-km/strings.xml b/libs/WindowManager/Shell/res/values-km/strings.xml index adb229ab8039..3e36113995d9 100644 --- a/libs/WindowManager/Shell/res/values-km/strings.xml +++ b/libs/WindowManager/Shell/res/values-km/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"យល់ហើយ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"មិនមានពពុះថ្មីៗទេ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ពពុះថ្មីៗ និងពពុះដែលបានបិទនឹងបង្ហាញនៅទីនេះ"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"គ្រប់គ្រងផ្ទាំងអណ្ដែតនៅពេលណាក៏បាន"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ចុចត្រង់នេះ ដើម្បីគ្រប់គ្រងកម្មវិធី និងការសន្ទនាដែលអាចបង្ហាញជាផ្ទាំងអណ្ដែត"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ពពុះ"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"គ្រប់គ្រង"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"បានច្រានចោលសារលេចឡើង។"</string> diff --git a/libs/WindowManager/Shell/res/values-kn/strings.xml b/libs/WindowManager/Shell/res/values-kn/strings.xml index 33c50e7530a7..5e0dad8255b4 100644 --- a/libs/WindowManager/Shell/res/values-kn/strings.xml +++ b/libs/WindowManager/Shell/res/values-kn/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ಅರ್ಥವಾಯಿತು"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ಯಾವುದೇ ಇತ್ತೀಚಿನ ಬಬಲ್ಸ್ ಇಲ್ಲ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ಇತ್ತೀಚಿನ ಬಬಲ್ಸ್ ಮತ್ತು ವಜಾಗೊಳಿಸಿದ ಬಬಲ್ಸ್ ಇಲ್ಲಿ ಗೋಚರಿಸುತ್ತವೆ"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಬಬಲ್ಸ್ ಅನ್ನು ನಿಯಂತ್ರಿಸಿ"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ಯಾವ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಸಂಭಾಷಣೆಗಳನ್ನು ಬಬಲ್ ಮಾಡಬಹುದು ಎಂಬುದನ್ನು ನಿರ್ವಹಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ಬಬಲ್"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"ನಿರ್ವಹಿಸಿ"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ಬಬಲ್ ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string> diff --git a/libs/WindowManager/Shell/res/values-ko/strings.xml b/libs/WindowManager/Shell/res/values-ko/strings.xml index dc76769618aa..f1b34556954e 100644 --- a/libs/WindowManager/Shell/res/values-ko/strings.xml +++ b/libs/WindowManager/Shell/res/values-ko/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"확인"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"최근 대화창 없음"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"최근 대화창과 내가 닫은 대화창이 여기에 표시됩니다."</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"언제든지 대화창을 제어하세요"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"대화창을 만들 수 있는 앱과 대화를 관리하려면 여기를 탭하세요."</string> <string name="notification_bubble_title" msgid="6082910224488253378">"버블"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"관리"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"대화창을 닫았습니다."</string> diff --git a/libs/WindowManager/Shell/res/values-ky/strings.xml b/libs/WindowManager/Shell/res/values-ky/strings.xml index b1c0a6712093..200359aded72 100644 --- a/libs/WindowManager/Shell/res/values-ky/strings.xml +++ b/libs/WindowManager/Shell/res/values-ky/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Түшүндүм"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Азырынча эч нерсе жок"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Акыркы жана жабылган калкып чыкма билдирмелер ушул жерде көрүнөт"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Калкып чыкма билдирмелерди каалаган убакта көзөмөлдөңүз"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Калкып чыкма билдирме түрүндө көрүнө турган колдонмолор менен маектерди тандоо үчүн бул жерди таптаңыз"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Көбүк"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Башкаруу"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Калкып чыкма билдирме жабылды."</string> diff --git a/libs/WindowManager/Shell/res/values-lo/strings.xml b/libs/WindowManager/Shell/res/values-lo/strings.xml index 0b5da776df17..43835d5afa67 100644 --- a/libs/WindowManager/Shell/res/values-lo/strings.xml +++ b/libs/WindowManager/Shell/res/values-lo/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ເຂົ້າໃຈແລ້ວ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ບໍ່ມີຟອງຫຼ້າສຸດ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ຟອງຫຼ້າສຸດ ແລະ ຟອງທີ່ປິດໄປຈະປາກົດຢູ່ບ່ອນນີ້"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ຄວບຄຸມຟອງໄດ້ທຸກເວລາ"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ແຕະບ່ອນນີ້ເພື່ອຈັດການແອັບ ແລະ ການສົນທະນາທີ່ສາມາດສະແດງເປັນແບບຟອງໄດ້"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ຟອງ"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"ຈັດການ"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ປິດ Bubble ໄສ້ແລ້ວ."</string> diff --git a/libs/WindowManager/Shell/res/values-lt/strings.xml b/libs/WindowManager/Shell/res/values-lt/strings.xml index ecec41a10d36..0c6cc58aa1ec 100644 --- a/libs/WindowManager/Shell/res/values-lt/strings.xml +++ b/libs/WindowManager/Shell/res/values-lt/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Supratau"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nėra naujausių burbulų"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Naujausi ir atsisakyti burbulai bus rodomi čia"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Bet kada valdyti burbulus"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Palietę čia valdykite, kurie pokalbiai ir programos gali būti rodomi burbuluose"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Debesėlis"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Tvarkyti"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Debesėlio atsisakyta."</string> diff --git a/libs/WindowManager/Shell/res/values-lv/strings.xml b/libs/WindowManager/Shell/res/values-lv/strings.xml index d3a15bda9fd2..f86e937edd33 100644 --- a/libs/WindowManager/Shell/res/values-lv/strings.xml +++ b/libs/WindowManager/Shell/res/values-lv/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Labi"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nav nesen aizvērtu burbuļu"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Šeit būs redzami nesen rādītie burbuļi un aizvērtie burbuļi"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Pārvaldīt burbuļus jebkurā laikā"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Pieskarieties šeit, lai pārvaldītu, kuras lietotnes un sarunas var rādīt burbulī"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Burbulis"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Pārvaldīt"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Burbulis ir noraidīts."</string> diff --git a/libs/WindowManager/Shell/res/values-mk/strings.xml b/libs/WindowManager/Shell/res/values-mk/strings.xml index 008cff29ee9e..49e850fac1c0 100644 --- a/libs/WindowManager/Shell/res/values-mk/strings.xml +++ b/libs/WindowManager/Shell/res/values-mk/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Сфатив"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Нема неодамнешни балончиња"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Неодамнешните и отфрлените балончиња ќе се појавуваат тука"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Контролирајте ги балончињата во секое време"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Допрете тука за да одредите на кои апл. и разговори може да се појават балончиња"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Балонче"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Управувајте"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Балончето е отфрлено."</string> diff --git a/libs/WindowManager/Shell/res/values-ml/strings.xml b/libs/WindowManager/Shell/res/values-ml/strings.xml index 4e2f339b3989..fbb5514e4648 100644 --- a/libs/WindowManager/Shell/res/values-ml/strings.xml +++ b/libs/WindowManager/Shell/res/values-ml/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"മനസ്സിലായി"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"അടുത്തിടെയുള്ള ബബിളുകൾ ഒന്നുമില്ല"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"അടുത്തിടെയുള്ള ബബിളുകൾ, ഡിസ്മിസ് ചെയ്ത ബബിളുകൾ എന്നിവ ഇവിടെ ദൃശ്യമാവും"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ബബിളുകൾ ഏതുസമയത്തും നിയന്ത്രിക്കുക"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ഏതൊക്കെ ആപ്പുകളും സംഭാഷണങ്ങളും ബബിൾ ചെയ്യാനാകുമെന്നത് മാനേജ് ചെയ്യാൻ ഇവിടെ ടാപ്പ് ചെയ്യുക"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ബബിൾ"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"മാനേജ് ചെയ്യുക"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ബബിൾ ഡിസ്മിസ് ചെയ്തു."</string> diff --git a/libs/WindowManager/Shell/res/values-mn/strings.xml b/libs/WindowManager/Shell/res/values-mn/strings.xml index c2081cfb69d7..8274f4456c57 100644 --- a/libs/WindowManager/Shell/res/values-mn/strings.xml +++ b/libs/WindowManager/Shell/res/values-mn/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Ойлголоо"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Саяхны бөмбөлөг алга байна"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Саяхны бөмбөлгүүд болон үл хэрэгссэн бөмбөлгүүд энд харагдана"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Бөмбөлгүүдийг хүссэн үедээ хянах"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Ямар апп болон харилцан ярианууд бөмбөлгөөр харагдахыг энд удирдана уу"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Бөмбөлөг"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Удирдах"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Бөмбөлгийг үл хэрэгссэн."</string> diff --git a/libs/WindowManager/Shell/res/values-mr/strings.xml b/libs/WindowManager/Shell/res/values-mr/strings.xml index f563ec63c8ce..c1f3e123ac41 100644 --- a/libs/WindowManager/Shell/res/values-mr/strings.xml +++ b/libs/WindowManager/Shell/res/values-mr/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"समजले"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"अलीकडील कोणतेही बबल नाहीत"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"अलीकडील बबल आणि डिसमिस केलेले बबल येथे दिसतील"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"बबल कधीही नियंत्रित करा"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"कोणती ॲप्स आणि संभाषणे बबल होऊ शकतात हे व्यवस्थापित करण्यासाठी येथे टॅप करा"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"बबल"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"व्यवस्थापित करा"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"बबल डिसमिस केला."</string> diff --git a/libs/WindowManager/Shell/res/values-ms/strings.xml b/libs/WindowManager/Shell/res/values-ms/strings.xml index 054d2968e5a2..82d84e8da6d9 100644 --- a/libs/WindowManager/Shell/res/values-ms/strings.xml +++ b/libs/WindowManager/Shell/res/values-ms/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Tiada gelembung terbaharu"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Gelembung baharu dan gelembung yang diketepikan akan dipaparkan di sini"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kawal gelembung pada bila-bila masa"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Ketik di sini untuk mengurus apl dan perbualan yang boleh menggunakan gelembung"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Gelembung"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Urus"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Gelembung diketepikan."</string> diff --git a/libs/WindowManager/Shell/res/values-my/strings.xml b/libs/WindowManager/Shell/res/values-my/strings.xml index 8af8bf48a0d8..2e88ab341984 100644 --- a/libs/WindowManager/Shell/res/values-my/strings.xml +++ b/libs/WindowManager/Shell/res/values-my/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"နားလည်ပြီ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"လတ်တလော ပူဖောင်းကွက်များ မရှိပါ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"လတ်တလော ပူဖောင်းကွက်များနှင့် ပိတ်လိုက်သော ပူဖောင်းကွက်များကို ဤနေရာတွင် မြင်ရပါမည်"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ပူဖောင်းကွက်ကို အချိန်မရွေး ထိန်းချုပ်ရန်"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ပူဖောင်းကွက်သုံးနိုင်သည့် အက်ပ်နှင့် စကားဝိုင်းများ စီမံရန် ဤနေရာကို တို့ပါ"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ပူဖောင်းဖောက်သံ"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"စီမံရန်"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ပူဖောင်းကွက် ဖယ်လိုက်သည်။"</string> diff --git a/libs/WindowManager/Shell/res/values-nb/strings.xml b/libs/WindowManager/Shell/res/values-nb/strings.xml index 8ac35371ee8a..f7ea9ce78dd8 100644 --- a/libs/WindowManager/Shell/res/values-nb/strings.xml +++ b/libs/WindowManager/Shell/res/values-nb/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Greit"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ingen nylige bobler"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Nylige bobler og avviste bobler vises her"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kontroller bobler når som helst"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Trykk her for å administrere hvilke apper og samtaler som kan vises i bobler"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Boble"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Administrer"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Boblen er avvist."</string> diff --git a/libs/WindowManager/Shell/res/values-ne/strings.xml b/libs/WindowManager/Shell/res/values-ne/strings.xml index a46e356acce1..3f6dc046c10b 100644 --- a/libs/WindowManager/Shell/res/values-ne/strings.xml +++ b/libs/WindowManager/Shell/res/values-ne/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"बुझेँ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"हालैका बबलहरू छैनन्"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"हालैका बबल र खारेज गरिएका बबलहरू यहाँ देखिने छन्"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"जुनसुकै बेला बबलसम्बन्धी सुविधा नियन्त्रण गर्नुहोस्"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"कुन एप र कुराकानी बबल प्रयोग गर्न सक्छन् भन्ने कुराको व्यवस्थापन गर्न यहाँ ट्याप गर्नुहोस्"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"बबल"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"व्यवस्थापन गर्नुहोस्"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"बबल हटाइयो।"</string> diff --git a/libs/WindowManager/Shell/res/values-nl/strings.xml b/libs/WindowManager/Shell/res/values-nl/strings.xml index ed013153c80a..978ed3ccad3c 100644 --- a/libs/WindowManager/Shell/res/values-nl/strings.xml +++ b/libs/WindowManager/Shell/res/values-nl/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Geen recente bubbels"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Recente bubbels en gesloten bubbels zie je hier"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Bubbels beheren wanneer je wilt"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tik hier om te beheren welke apps en gesprekken als bubbel kunnen worden getoond"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubbel"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Beheren"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubbel gesloten."</string> diff --git a/libs/WindowManager/Shell/res/values-or/strings.xml b/libs/WindowManager/Shell/res/values-or/strings.xml index 8465907f3836..b66448b6308f 100644 --- a/libs/WindowManager/Shell/res/values-or/strings.xml +++ b/libs/WindowManager/Shell/res/values-or/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ବୁଝିଗଲି"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ବର୍ତ୍ତମାନ କୌଣସି ବବଲ୍ ନାହିଁ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ବର୍ତ୍ତମାନର ଏବଂ ଖାରଜ କରାଯାଇଥିବା ବବଲଗୁଡ଼ିକ ଏଠାରେ ଦେଖାଯିବ"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ଯେ କୌଣସି ସମୟରେ ବବଲଗୁଡ଼ିକ ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"କେଉଁ ଆପ୍ସ ଓ ବାର୍ତ୍ତାଳାପଗୁଡ଼ିକ ବବଲ ହୋଇପାରିବ ତାହା ପରିଚାଳନା କରିବାକୁ ଏଠାରେ ଟାପ କରନ୍ତୁ"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ବବଲ୍"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"ପରିଚାଳନା କରନ୍ତୁ"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ବବଲ୍ ଖାରଜ କରାଯାଇଛି।"</string> diff --git a/libs/WindowManager/Shell/res/values-pa/strings.xml b/libs/WindowManager/Shell/res/values-pa/strings.xml index 243fec3b4417..72cb92053e56 100644 --- a/libs/WindowManager/Shell/res/values-pa/strings.xml +++ b/libs/WindowManager/Shell/res/values-pa/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ਸਮਝ ਲਿਆ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ਕੋਈ ਹਾਲੀਆ ਬਬਲ ਨਹੀਂ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ਹਾਲੀਆ ਬਬਲ ਅਤੇ ਖਾਰਜ ਕੀਤੇ ਬਬਲ ਇੱਥੇ ਦਿਸਣਗੇ"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ਬਬਲ ਦੀ ਸੁਵਿਧਾ ਨੂੰ ਕਿਸੇ ਵੀ ਵੇਲੇ ਕੰਟਰੋਲ ਕਰੋ"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ਇਹ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ ਇੱਥੇ ਟੈਪ ਕਰੋ ਕਿ ਕਿਹੜੀਆਂ ਐਪਾਂ ਅਤੇ ਗੱਲਾਂਬਾਤਾਂ ਬਬਲ ਹੋ ਸਕਦੀਆਂ ਹਨ"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ਬੁਲਬੁਲਾ"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"ਪ੍ਰਬੰਧਨ ਕਰੋ"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ਬਬਲ ਨੂੰ ਖਾਰਜ ਕੀਤਾ ਗਿਆ।"</string> diff --git a/libs/WindowManager/Shell/res/values-pl/strings.xml b/libs/WindowManager/Shell/res/values-pl/strings.xml index 34bc1a08207f..24c1f1410fde 100644 --- a/libs/WindowManager/Shell/res/values-pl/strings.xml +++ b/libs/WindowManager/Shell/res/values-pl/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Brak ostatnich dymków"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Tutaj będą pojawiać się ostatnie i odrzucone dymki"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Zarządzaj dymkami, kiedy chcesz"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Kliknij tutaj, aby zarządzać wyświetlaniem aplikacji i rozmów jako dymków"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Dymek"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Zarządzaj"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Zamknięto dymek"</string> diff --git a/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml b/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml index 85f2fa48b81f..69002026f2e5 100644 --- a/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml +++ b/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Ok"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nenhum balão recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Os balões recentes e dispensados aparecerão aqui"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controle os balões a qualquer momento"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Toque aqui para gerenciar quais apps e conversas podem aparecer em balões"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bolha"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Gerenciar"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balão dispensado."</string> diff --git a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml index 083e2e7143dc..853c682b5089 100644 --- a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml +++ b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nenhum balão recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Os balões recentes e ignorados vão aparecer aqui."</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controle os balões em qualquer altura"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Toque aqui para gerir que apps e conversas podem aparecer em balões"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Balão"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Gerir"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balão ignorado."</string> diff --git a/libs/WindowManager/Shell/res/values-pt/strings.xml b/libs/WindowManager/Shell/res/values-pt/strings.xml index 85f2fa48b81f..69002026f2e5 100644 --- a/libs/WindowManager/Shell/res/values-pt/strings.xml +++ b/libs/WindowManager/Shell/res/values-pt/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Ok"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nenhum balão recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Os balões recentes e dispensados aparecerão aqui"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controle os balões a qualquer momento"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Toque aqui para gerenciar quais apps e conversas podem aparecer em balões"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bolha"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Gerenciar"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balão dispensado."</string> diff --git a/libs/WindowManager/Shell/res/values-ro/strings.xml b/libs/WindowManager/Shell/res/values-ro/strings.xml index 6e8d1160d08c..7356f7cf08d2 100644 --- a/libs/WindowManager/Shell/res/values-ro/strings.xml +++ b/libs/WindowManager/Shell/res/values-ro/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nu există baloane recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Baloanele recente și baloanele respinse vor apărea aici"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controlează baloanele oricând"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Atinge aici pentru a gestiona aplicațiile și conversațiile care pot apărea în balon"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Balon"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Gestionează"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balonul a fost respins."</string> diff --git a/libs/WindowManager/Shell/res/values-ru/strings.xml b/libs/WindowManager/Shell/res/values-ru/strings.xml index c3cd9594552a..61e3ec9b7da2 100644 --- a/libs/WindowManager/Shell/res/values-ru/strings.xml +++ b/libs/WindowManager/Shell/res/values-ru/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ОК"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Нет недавних всплывающих чатов"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Здесь будут появляться недавние и скрытые всплывающие чаты."</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Всплывающие чаты"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Укажите приложения и разговоры, для которых разрешены всплывающие чаты."</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Всплывающая подсказка"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Настроить"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Всплывающий чат закрыт."</string> diff --git a/libs/WindowManager/Shell/res/values-si/strings.xml b/libs/WindowManager/Shell/res/values-si/strings.xml index a1e246a95bf2..ac78385b9644 100644 --- a/libs/WindowManager/Shell/res/values-si/strings.xml +++ b/libs/WindowManager/Shell/res/values-si/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"තේරුණා"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"මෑත බුබුලු නැත"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"මෑත බුබුලු සහ ඉවත ලූ බුබුලු මෙහි දිස් වනු ඇත"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ඕනෑම වේලාවක බුබුලු පාලනය කරන්න"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"බුබුලු කළ හැකි යෙදුම් සහ සංවාද කළමනාකරණය කිරීමට මෙහි තට්ටු කරන්න"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"බුබුළු"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"කළමනා කරන්න"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"බුබුල ඉවත දමා ඇත."</string> diff --git a/libs/WindowManager/Shell/res/values-sk/strings.xml b/libs/WindowManager/Shell/res/values-sk/strings.xml index c27425d6948a..d659d51afc5f 100644 --- a/libs/WindowManager/Shell/res/values-sk/strings.xml +++ b/libs/WindowManager/Shell/res/values-sk/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Dobre"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Žiadne nedávne bubliny"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Tu sa budú zobrazovať nedávne a zavreté bubliny"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Ovládajte bubliny kedykoľvek"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Klepnite tu a spravujte, ktoré aplikácie a konverzácie môžu ovládať bubliny"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bublina"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Spravovať"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bublina bola zavretá."</string> diff --git a/libs/WindowManager/Shell/res/values-sl/strings.xml b/libs/WindowManager/Shell/res/values-sl/strings.xml index e3dcca899bf2..91871fbf94ec 100644 --- a/libs/WindowManager/Shell/res/values-sl/strings.xml +++ b/libs/WindowManager/Shell/res/values-sl/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"V redu"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ni nedavnih oblačkov"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Tukaj bodo prikazani tako nedavni kot tudi opuščeni oblački"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Upravljanje oblačkov"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Dotaknite se tukaj za upravljanje aplikacij in pogovorov, ki so lahko prikazani v oblačkih"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Mehurček"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Upravljanje"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Oblaček je bil opuščen."</string> diff --git a/libs/WindowManager/Shell/res/values-sq/strings.xml b/libs/WindowManager/Shell/res/values-sq/strings.xml index b5b2d1891cab..45eb04a45271 100644 --- a/libs/WindowManager/Shell/res/values-sq/strings.xml +++ b/libs/WindowManager/Shell/res/values-sq/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"E kuptova"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nuk ka flluska të fundit"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Flluskat e fundit dhe flluskat e hequra do të shfaqen këtu"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kontrollo flluskat në çdo moment"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Trokit këtu për të menaxhuar aplikacionet e bisedat që do të shfaqen në flluska"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Flluskë"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Menaxho"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Flluska u hoq."</string> diff --git a/libs/WindowManager/Shell/res/values-sr/strings.xml b/libs/WindowManager/Shell/res/values-sr/strings.xml index 3404bca2bb9d..368df542796f 100644 --- a/libs/WindowManager/Shell/res/values-sr/strings.xml +++ b/libs/WindowManager/Shell/res/values-sr/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Важи"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Нема недавних облачића"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Овде се приказују недавни и одбачени облачићи"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Контролишите облачиће у сваком тренутку"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Додирните овде и одредите које апликације и конверзације могу да имају облачић"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Облачић"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Управљајте"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Облачић је одбачен."</string> diff --git a/libs/WindowManager/Shell/res/values-sv/strings.xml b/libs/WindowManager/Shell/res/values-sv/strings.xml index 1f81e0fa5f64..35d5b7af2b62 100644 --- a/libs/WindowManager/Shell/res/values-sv/strings.xml +++ b/libs/WindowManager/Shell/res/values-sv/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Inga nya bubblor"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"De senaste bubblorna och ignorerade bubblor visas här"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Styr bubblor när som helst"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tryck här för att hantera vilka appar och konversationer som får visas i bubblor"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubbla"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Hantera"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubblan ignorerades."</string> diff --git a/libs/WindowManager/Shell/res/values-sw/strings.xml b/libs/WindowManager/Shell/res/values-sw/strings.xml index 8ec4e3415a51..52e0a6960948 100644 --- a/libs/WindowManager/Shell/res/values-sw/strings.xml +++ b/libs/WindowManager/Shell/res/values-sw/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Nimeelewa"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Hakuna viputo vya hivi majuzi"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Viputo vya hivi karibuni na vile vilivyoondolewa vitaonekana hapa"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Dhibiti viputo wakati wowote"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Gusa hapa ili udhibiti programu na mazungumzo yanayoweza kutumia viputo"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Kiputo"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Dhibiti"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Umeondoa kiputo."</string> diff --git a/libs/WindowManager/Shell/res/values-ta/strings.xml b/libs/WindowManager/Shell/res/values-ta/strings.xml index 6a8559dc262c..98a7d679014c 100644 --- a/libs/WindowManager/Shell/res/values-ta/strings.xml +++ b/libs/WindowManager/Shell/res/values-ta/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"சரி"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"சமீபத்திய குமிழ்கள் இல்லை"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"சமீபத்திய குமிழ்களும் நிராகரிக்கப்பட்ட குமிழ்களும் இங்கே தோன்றும்"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"எப்போது வேண்டுமானாலும் குமிழ்களைக் கட்டுப்படுத்துங்கள்"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"எந்தெந்த ஆப்ஸும் உரையாடல்களும் குமிழியாகலாம் என்பதை நிர்வகிக்க இங்கே தட்டுங்கள்"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"பபிள்"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"நிர்வகி"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"குமிழ் நிராகரிக்கப்பட்டது."</string> diff --git a/libs/WindowManager/Shell/res/values-te/strings.xml b/libs/WindowManager/Shell/res/values-te/strings.xml index 1c1e3cbd5697..70f810e21fcc 100644 --- a/libs/WindowManager/Shell/res/values-te/strings.xml +++ b/libs/WindowManager/Shell/res/values-te/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"అర్థమైంది"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ఇటీవలి బబుల్స్ ఏవీ లేవు"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ఇటీవలి బబుల్స్ మరియు తీసివేసిన బబుల్స్ ఇక్కడ కనిపిస్తాయి"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"బబుల్స్ను ఎప్పుడైనా కంట్రోల్ చేయండి"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ఏ యాప్లు, సంభాషణలను బబుల్ చేయాలో మేనేజ్ చేయడానికి ఇక్కడ ట్యాప్ చేయండి"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"బబుల్"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"మేనేజ్ చేయండి"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"బబుల్ విస్మరించబడింది."</string> diff --git a/libs/WindowManager/Shell/res/values-th/strings.xml b/libs/WindowManager/Shell/res/values-th/strings.xml index a0f0e275ba17..0efaab2d2f15 100644 --- a/libs/WindowManager/Shell/res/values-th/strings.xml +++ b/libs/WindowManager/Shell/res/values-th/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"รับทราบ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ไม่มีบับเบิลเมื่อเร็วๆ นี้"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"บับเบิลที่แสดงและที่ปิดไปเมื่อเร็วๆ นี้จะปรากฏที่นี่"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ควบคุมบับเบิลได้ทุกเมื่อ"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"แตะที่นี่เพื่อจัดการแอปและการสนทนาที่แสดงเป็นบับเบิลได้"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"บับเบิล"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"จัดการ"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ปิดบับเบิลแล้ว"</string> diff --git a/libs/WindowManager/Shell/res/values-tl/strings.xml b/libs/WindowManager/Shell/res/values-tl/strings.xml index 9bc17f091a30..e5d535015c52 100644 --- a/libs/WindowManager/Shell/res/values-tl/strings.xml +++ b/libs/WindowManager/Shell/res/values-tl/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Walang kamakailang bubble"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Lalabas dito ang mga kamakailang bubble at na-dismiss na bubble"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kontrolin ang mga bubble anumang oras"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Mag-tap dito para pamahalaan ang mga app at conversion na puwedeng mag-bubble"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Pamahalaan"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Na-dismiss na ang bubble."</string> diff --git a/libs/WindowManager/Shell/res/values-tr/strings.xml b/libs/WindowManager/Shell/res/values-tr/strings.xml index 059ec7340d69..8e7f1620354b 100644 --- a/libs/WindowManager/Shell/res/values-tr/strings.xml +++ b/libs/WindowManager/Shell/res/values-tr/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Anladım"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Son kapatılan baloncuk yok"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Son baloncuklar ve kapattığınız baloncuklar burada görünür"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Baloncukları istediğiniz zaman kontrol edin"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Buraya dokunarak baloncuk olarak gösterilecek uygulama ve görüşmeleri yönetin"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Baloncuk"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Yönet"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balon kapatıldı."</string> diff --git a/libs/WindowManager/Shell/res/values-uk/strings.xml b/libs/WindowManager/Shell/res/values-uk/strings.xml index a4a4a78a8755..5c7c6c4dae30 100644 --- a/libs/WindowManager/Shell/res/values-uk/strings.xml +++ b/libs/WindowManager/Shell/res/values-uk/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Зрозуміло"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Немає нещодавніх спливаючих чатів"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Тут з\'являтимуться нещодавні й закриті спливаючі чати"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Контроль спливаючих чатів"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Натисніть тут, щоб вибрати, для яких додатків і розмов дозволити спливаючі чати"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Спливаюче сповіщення"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Налаштувати"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Спливаюче сповіщення закрито."</string> diff --git a/libs/WindowManager/Shell/res/values-ur/strings.xml b/libs/WindowManager/Shell/res/values-ur/strings.xml index b25f13eed644..451d048ca825 100644 --- a/libs/WindowManager/Shell/res/values-ur/strings.xml +++ b/libs/WindowManager/Shell/res/values-ur/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"سمجھ آ گئی"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"کوئی حالیہ بلبلہ نہیں"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"حالیہ بلبلے اور برخاست شدہ بلبلے یہاں ظاہر ہوں گے"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"کسی بھی وقت بلبلے کو کنٹرول کریں"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"یہ نظم کرنے کے لیے یہاں تھپتھپائیں کہ کون سی ایپس اور گفتگوئیں بلبلہ سکتی ہیں"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"بلبلہ"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"نظم کریں"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"بلبلہ برخاست کر دیا گیا۔"</string> diff --git a/libs/WindowManager/Shell/res/values-uz/strings.xml b/libs/WindowManager/Shell/res/values-uz/strings.xml index 5acf7293a060..4211ea7a5e7d 100644 --- a/libs/WindowManager/Shell/res/values-uz/strings.xml +++ b/libs/WindowManager/Shell/res/values-uz/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Hech qanday bulutcha topilmadi"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Eng oxirgi va yopilgan bulutchali chatlar shu yerda chiqadi"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Bulutchalardagi bildirishnomalar"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Bulutchalarda bildirishnomalar chiqishiga ruxsat beruvchi ilova va suhbatlarni tanlang."</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Pufaklar"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Boshqarish"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bulutcha yopildi."</string> diff --git a/libs/WindowManager/Shell/res/values-vi/strings.xml b/libs/WindowManager/Shell/res/values-vi/strings.xml index 0777abc087fa..0a0205d8f591 100644 --- a/libs/WindowManager/Shell/res/values-vi/strings.xml +++ b/libs/WindowManager/Shell/res/values-vi/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Đã hiểu"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Không có bong bóng trò chuyện nào gần đây"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Bong bóng trò chuyện đã đóng và bong bóng trò chuyện gần đây sẽ xuất hiện ở đây"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kiểm soát bong bóng bất cứ lúc nào"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Nhấn vào đây để quản lý việc dùng bong bóng cho các ứng dụng và cuộc trò chuyện"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bong bóng"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Quản lý"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Đã đóng bong bóng."</string> diff --git a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml index cde5fe3045da..29dc077469e6 100644 --- a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml +++ b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"知道了"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"最近没有对话泡"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"此处会显示最近的对话泡和已关闭的对话泡"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"随时控制对话泡"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"点按此处即可管理哪些应用和对话可以显示对话泡"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"气泡"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"管理"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"已关闭对话泡。"</string> diff --git a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml index fcb0c91f41d5..0755d61e6a6d 100644 --- a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml +++ b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"知道了"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"沒有最近曾使用的小視窗"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"最近使用和關閉的小視窗會在這裡顯示"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"隨時控制對話氣泡"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"輕按這裡即可管理哪些應用程式和對話可以使用對話氣泡"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"氣泡"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"管理"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"對話氣泡已關閉。"</string> diff --git a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml index f272e91fe7a8..f93188343fdf 100644 --- a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml +++ b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"我知道了"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"最近沒有任何對話框"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"最近的對話框和已關閉的對話框會顯示在這裡"</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"你隨時可以控管對話框的各項設定"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"輕觸這裡即可管理哪些應用程式和對話可顯示對話框"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"泡泡"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"管理"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"已關閉泡泡。"</string> diff --git a/libs/WindowManager/Shell/res/values-zu/strings.xml b/libs/WindowManager/Shell/res/values-zu/strings.xml index c1ba6ee01cef..3ba0abee2a95 100644 --- a/libs/WindowManager/Shell/res/values-zu/strings.xml +++ b/libs/WindowManager/Shell/res/values-zu/strings.xml @@ -76,10 +76,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Ngiyezwa"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Awekho amabhamuza akamuva"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Amabhamuza akamuva namabhamuza asusiwe azobonakala lapha."</string> - <!-- no translation found for bubble_bar_education_manage_title (6148404487810835924) --> - <skip /> - <!-- no translation found for bubble_bar_education_manage_text (3199732148641842038) --> - <skip /> + <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Lawula amabhamuza noma nini"</string> + <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Thepha lapha ukuze ulawule ukuthi yimaphi ama-app kanye nezingxoxo ezingenza amabhamuza"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Ibhamuza"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Phatha"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Ibhamuza licashisiwe."</string> diff --git a/libs/WindowManager/Shell/res/values/dimen.xml b/libs/WindowManager/Shell/res/values/dimen.xml index 7edf2fc84f48..cba86c8b3dcf 100644 --- a/libs/WindowManager/Shell/res/values/dimen.xml +++ b/libs/WindowManager/Shell/res/values/dimen.xml @@ -428,9 +428,12 @@ <!-- The height of the handle menu's "Windowing" pill in desktop mode. --> <dimen name="desktop_mode_handle_menu_windowing_pill_height">52dp</dimen> - <!-- The height of the handle menu's "More Actions" pill in desktop mode. --> + <!-- The height of the handle menu's "More Actions" pill in desktop mode, but not freeform. --> <dimen name="desktop_mode_handle_menu_more_actions_pill_height">156dp</dimen> + <!-- The height of the handle menu's "More Actions" pill in freeform desktop windowing mode. --> + <dimen name="desktop_mode_handle_menu_more_actions_pill_freeform_height">104dp</dimen> + <!-- The top margin of the handle menu in desktop mode. --> <dimen name="desktop_mode_handle_menu_margin_top">4dp</dimen> diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java index 9aac694e41bf..04795768aefc 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java @@ -103,7 +103,7 @@ public class ShellTaskOrganizer extends TaskOrganizer implements default void onBackPressedOnTaskRoot(RunningTaskInfo taskInfo) {} /** Whether this task listener supports compat UI. */ default boolean supportCompatUI() { - // All TaskListeners should support compat UI except PIP. + // All TaskListeners should support compat UI except PIP and StageCoordinator. return true; } /** Attaches a child window surface to the task surface. */ diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java index 9a2b81243861..85ea8097a2c1 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java @@ -973,9 +973,9 @@ public class Bubble implements BubbleViewProvider { pw.print(" suppressNotif: "); pw.println(shouldSuppressNotification()); pw.print(" autoExpand: "); pw.println(shouldAutoExpand()); pw.print(" isDismissable: "); pw.println(mIsDismissable); - pw.println(" bubbleMetadataFlagListener null: " + (mBubbleMetadataFlagListener == null)); + pw.println(" bubbleMetadataFlagListener null?: " + (mBubbleMetadataFlagListener == null)); if (mExpandedView != null) { - mExpandedView.dump(pw); + mExpandedView.dump(pw, " "); } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java index 645a96153080..dfdc79ea7afa 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java @@ -1991,13 +1991,20 @@ public class BubbleController implements ConfigurationChangeListener, * Description of current bubble state. */ private void dump(PrintWriter pw, String prefix) { - pw.println("BubbleController state:"); + pw.print(prefix); pw.println("BubbleController state:"); + pw.print(prefix); pw.println(" currentUserId= " + mCurrentUserId); + pw.print(prefix); pw.println(" isStatusBarShade= " + mIsStatusBarShade); + pw.print(prefix); pw.println(" isShowingAsBubbleBar= " + isShowingAsBubbleBar()); + pw.println(); + mBubbleData.dump(pw); pw.println(); + if (mStackView != null) { mStackView.dump(pw); } pw.println(); + mImpl.mCachedState.dump(pw); } @@ -2246,8 +2253,7 @@ public class BubbleController implements ConfigurationChangeListener, pw.println("mIsStackExpanded: " + mIsStackExpanded); pw.println("mSelectedBubbleKey: " + mSelectedBubbleKey); - pw.print("mSuppressedBubbleKeys: "); - pw.println(mSuppressedBubbleKeys.size()); + pw.println("mSuppressedBubbleKeys: " + mSuppressedBubbleKeys.size()); for (String key : mSuppressedBubbleKeys) { pw.println(" suppressing: " + key); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleData.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleData.java index cc8f50e09fcb..c6f74af0284b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleData.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleData.java @@ -1231,29 +1231,30 @@ public class BubbleData { * Description of current bubble data state. */ public void dump(PrintWriter pw) { - pw.print("selected: "); + pw.println("BubbleData state:"); + pw.print(" selected: "); pw.println(mSelectedBubble != null ? mSelectedBubble.getKey() : "null"); - pw.print("expanded: "); + pw.print(" expanded: "); pw.println(mExpanded); - pw.print("stack bubble count: "); + pw.print("Stack bubble count: "); pw.println(mBubbles.size()); for (Bubble bubble : mBubbles) { bubble.dump(pw); } - pw.print("overflow bubble count: "); + pw.print("Overflow bubble count: "); pw.println(mOverflowBubbles.size()); for (Bubble bubble : mOverflowBubbles) { bubble.dump(pw); } - pw.print("summaryKeys: "); + pw.print("SummaryKeys: "); pw.println(mSuppressedGroupKeys.size()); for (String key : mSuppressedGroupKeys.keySet()) { - pw.println(" suppressing: " + key); + pw.println(" suppressing: " + key); } } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDebugConfig.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDebugConfig.java index 76662c47238f..1c0e0522d359 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDebugConfig.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDebugConfig.java @@ -77,20 +77,25 @@ public class BubbleDebugConfig { static String formatBubblesString(List<Bubble> bubbles, BubbleViewProvider selected) { StringBuilder sb = new StringBuilder(); - for (Bubble bubble : bubbles) { + for (int i = 0; i < bubbles.size(); i++) { + Bubble bubble = bubbles.get(i); if (bubble == null) { - sb.append(" <null> !!!!!\n"); + sb.append(" <null> !!!!!"); } else { boolean isSelected = (selected != null - && selected.getKey() != BubbleOverflow.KEY + && !BubbleOverflow.KEY.equals(selected.getKey()) && bubble == selected); String arrow = isSelected ? "=>" : " "; - sb.append(String.format("%s Bubble{act=%12d, showInShade=%d, key=%s}\n", + + sb.append(String.format("%s Bubble{act=%12d, showInShade=%d, key=%s}", arrow, bubble.getLastActivity(), (bubble.showInShade() ? 1 : 0), bubble.getKey())); } + if (i != bubbles.size() - 1) { + sb.append("\n"); + } } return sb.toString(); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java index e6986012dd88..37bcf1ddeac5 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java @@ -1094,9 +1094,9 @@ public class BubbleExpandedView extends LinearLayout { /** * Description of current expanded view state. */ - public void dump(@NonNull PrintWriter pw) { - pw.print("BubbleExpandedView"); - pw.print(" taskId: "); pw.println(mTaskId); - pw.print(" stackView: "); pw.println(mStackView); + public void dump(@NonNull PrintWriter pw, @NonNull String prefix) { + pw.print(prefix); pw.println("BubbleExpandedView:"); + pw.print(prefix); pw.print(" taskId: "); pw.println(mTaskId); + pw.print(prefix); pw.print(" stackView: "); pw.println(mStackView); } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java index 52c9bf8462ec..093ecb1e3ade 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java @@ -305,8 +305,7 @@ public class BubbleStackView extends FrameLayout String bubblesOnScreen = BubbleDebugConfig.formatBubblesString( getBubblesOnScreen(), getExpandedBubble()); - pw.print(" stack visibility : "); pw.println(getVisibility()); - pw.print(" bubbles on screen: "); pw.println(bubblesOnScreen); + pw.println(" bubbles on screen: "); pw.println(bubblesOnScreen); pw.print(" gestureInProgress: "); pw.println(mIsGestureInProgress); pw.print(" showingDismiss: "); pw.println(mDismissView.isShowing()); pw.print(" isExpansionAnimating: "); pw.println(mIsExpansionAnimating); @@ -314,7 +313,8 @@ public class BubbleStackView extends FrameLayout pw.print(" expandedContainerAlpha: "); pw.println(mExpandedViewContainer.getAlpha()); pw.print(" expandedContainerMatrix: "); pw.println(mExpandedViewContainer.getAnimationMatrix()); - + pw.print(" stack visibility : "); pw.println(getVisibility()); + pw.print(" temporarilyInvisible: "); pw.println(mTemporarilyInvisible); mStackAnimationController.dump(pw); mExpandedAnimationController.dump(pw); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayChangeController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayChangeController.java index 72702e7c2b88..b828aac39040 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayChangeController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayChangeController.java @@ -18,6 +18,7 @@ package com.android.wm.shell.common; import android.annotation.Nullable; import android.os.RemoteException; +import android.os.Trace; import android.util.Slog; import android.view.IDisplayChangeWindowCallback; import android.view.IDisplayChangeWindowController; @@ -40,6 +41,7 @@ import java.util.concurrent.CopyOnWriteArrayList; */ public class DisplayChangeController { private static final String TAG = DisplayChangeController.class.getSimpleName(); + private static final String HANDLE_DISPLAY_CHANGE_TRACE_TAG = "HandleRemoteDisplayChange"; private final ShellExecutor mMainExecutor; private final IWindowManager mWmService; @@ -81,9 +83,15 @@ public class DisplayChangeController { /** Query all listeners for changes that should happen on display change. */ void dispatchOnDisplayChange(WindowContainerTransaction outWct, int displayId, int fromRotation, int toRotation, DisplayAreaInfo newDisplayAreaInfo) { + if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { + Trace.beginSection("dispatchOnDisplayChange"); + } for (OnDisplayChangingListener c : mDisplayChangeListener) { c.onDisplayChange(displayId, fromRotation, toRotation, newDisplayAreaInfo, outWct); } + if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { + Trace.endSection(); + } } private void onDisplayChange(int displayId, int fromRotation, int toRotation, @@ -94,6 +102,10 @@ public class DisplayChangeController { callback.continueDisplayChange(t); } catch (RemoteException e) { Slog.e(TAG, "Failed to continue handling display change", e); + } finally { + if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { + Trace.endAsyncSection(HANDLE_DISPLAY_CHANGE_TRACE_TAG, callback.hashCode()); + } } } @@ -103,6 +115,9 @@ public class DisplayChangeController { @Override public void onDisplayChange(int displayId, int fromRotation, int toRotation, DisplayAreaInfo newDisplayAreaInfo, IDisplayChangeWindowCallback callback) { + if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { + Trace.beginAsyncSection(HANDLE_DISPLAY_CHANGE_TRACE_TAG, callback.hashCode()); + } mMainExecutor.execute(() -> DisplayChangeController.this .onDisplayChange(displayId, fromRotation, toRotation, newDisplayAreaInfo, callback)); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java index cbff4640239e..77aefc8f7e4a 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java @@ -208,7 +208,7 @@ class UserAspectRatioSettingsWindowManager extends CompatUIWindowManagerAbstract } private boolean getHasUserAspectRatioSettingsButton(@NonNull TaskInfo taskInfo) { - return taskInfo.topActivityEligibleForUserAspectRatioButton + return taskInfo.topActivityEligibleForUserAspectRatioButton && (taskInfo.topActivityBoundsLetterboxed || taskInfo.isUserFullscreenOverrideEnabled); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java index 1c2cee52d68d..998cd5d08c72 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java @@ -72,7 +72,6 @@ import com.android.wm.shell.compatui.CompatUIConfiguration; import com.android.wm.shell.compatui.CompatUIController; import com.android.wm.shell.compatui.CompatUIShellCommandHandler; import com.android.wm.shell.desktopmode.DesktopMode; -import com.android.wm.shell.desktopmode.DesktopModeController; import com.android.wm.shell.desktopmode.DesktopModeStatus; import com.android.wm.shell.desktopmode.DesktopModeTaskRepository; import com.android.wm.shell.desktopmode.DesktopTasksController; @@ -109,13 +108,13 @@ import com.android.wm.shell.unfold.UnfoldAnimationController; import com.android.wm.shell.unfold.UnfoldTransitionHandler; import com.android.wm.shell.windowdecor.WindowDecorViewModel; +import java.util.Optional; + import dagger.BindsOptionalOf; import dagger.Lazy; import dagger.Module; import dagger.Provides; -import java.util.Optional; - /** * Provides basic dependencies from {@link com.android.wm.shell}, these dependencies are only * accessible from components within the WM subcomponent (can be explicitly exposed to the @@ -800,30 +799,10 @@ public abstract class WMShellBaseModule { @WMSingleton @Provides static Optional<DesktopMode> provideDesktopMode( - Optional<DesktopModeController> desktopModeController, Optional<DesktopTasksController> desktopTasksController) { - if (DesktopModeStatus.isProto2Enabled()) { - return desktopTasksController.map(DesktopTasksController::asDesktopMode); - } - return desktopModeController.map(DesktopModeController::asDesktopMode); + return desktopTasksController.map(DesktopTasksController::asDesktopMode); } - @BindsOptionalOf - @DynamicOverride - abstract DesktopModeController optionalDesktopModeController(); - - @WMSingleton - @Provides - static Optional<DesktopModeController> provideDesktopModeController( - @DynamicOverride Optional<Lazy<DesktopModeController>> desktopModeController) { - // Use optional-of-lazy for the dependency that this provider relies on. - // Lazy ensures that this provider will not be the cause the dependency is created - // when it will not be returned due to the condition below. - if (DesktopModeStatus.isProto1Enabled()) { - return desktopModeController.map(Lazy::get); - } - return Optional.empty(); - } @BindsOptionalOf @DynamicOverride @@ -836,7 +815,7 @@ public abstract class WMShellBaseModule { // Use optional-of-lazy for the dependency that this provider relies on. // Lazy ensures that this provider will not be the cause the dependency is created // when it will not be returned due to the condition below. - if (DesktopModeStatus.isProto2Enabled()) { + if (DesktopModeStatus.isEnabled()) { return desktopTasksController.map(Lazy::get); } return Optional.empty(); @@ -853,7 +832,7 @@ public abstract class WMShellBaseModule { // Use optional-of-lazy for the dependency that this provider relies on. // Lazy ensures that this provider will not be the cause the dependency is created // when it will not be returned due to the condition below. - if (DesktopModeStatus.isAnyEnabled()) { + if (DesktopModeStatus.isEnabled()) { return desktopModeTaskRepository.map(Lazy::get); } return Optional.empty(); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java index c641e87e2055..e9f3e1a2647c 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java @@ -54,7 +54,6 @@ import com.android.wm.shell.common.annotations.ShellBackgroundThread; import com.android.wm.shell.common.annotations.ShellMainThread; import com.android.wm.shell.dagger.back.ShellBackAnimationModule; import com.android.wm.shell.dagger.pip.PipModule; -import com.android.wm.shell.desktopmode.DesktopModeController; import com.android.wm.shell.desktopmode.DesktopModeStatus; import com.android.wm.shell.desktopmode.DesktopModeTaskRepository; import com.android.wm.shell.desktopmode.DesktopTasksController; @@ -197,10 +196,9 @@ public abstract class WMShellModule { ShellController shellController, SyncTransactionQueue syncQueue, Transitions transitions, - Optional<DesktopModeController> desktopModeController, Optional<DesktopTasksController> desktopTasksController, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) { - if (DesktopModeStatus.isAnyEnabled()) { + if (DesktopModeStatus.isEnabled()) { return new DesktopModeWindowDecorViewModel( context, mainHandler, @@ -211,7 +209,6 @@ public abstract class WMShellModule { shellController, syncQueue, transitions, - desktopModeController, desktopTasksController, rootTaskDisplayAreaOrganizer); } @@ -353,13 +350,12 @@ public abstract class WMShellModule { @Nullable PipTransitionController pipTransitionController, Optional<RecentsTransitionHandler> recentsTransitionHandler, KeyguardTransitionHandler keyguardTransitionHandler, - Optional<DesktopModeController> desktopModeController, Optional<DesktopTasksController> desktopTasksController, Optional<UnfoldTransitionHandler> unfoldHandler, Transitions transitions) { return new DefaultMixedHandler(shellInit, transitions, splitScreenOptional, pipTransitionController, recentsTransitionHandler, - keyguardTransitionHandler, desktopModeController, desktopTasksController, + keyguardTransitionHandler, desktopTasksController, unfoldHandler); } @@ -471,24 +467,6 @@ public abstract class WMShellModule { @WMSingleton @Provides @DynamicOverride - static DesktopModeController provideDesktopModeController(Context context, - ShellInit shellInit, - ShellController shellController, - ShellTaskOrganizer shellTaskOrganizer, - RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer, - Transitions transitions, - @DynamicOverride DesktopModeTaskRepository desktopModeTaskRepository, - @ShellMainThread Handler mainHandler, - @ShellMainThread ShellExecutor mainExecutor - ) { - return new DesktopModeController(context, shellInit, shellController, shellTaskOrganizer, - rootTaskDisplayAreaOrganizer, transitions, desktopModeTaskRepository, mainHandler, - mainExecutor); - } - - @WMSingleton - @Provides - @DynamicOverride static DesktopTasksController provideDesktopTasksController( Context context, ShellInit shellInit, @@ -553,8 +531,7 @@ public abstract class WMShellModule { @ShellCreateTriggerOverride @Provides static Object provideIndependentShellComponentsToCreate( - DefaultMixedHandler defaultMixedHandler, - Optional<DesktopModeController> desktopModeController) { + DefaultMixedHandler defaultMixedHandler) { return new Object(); } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java deleted file mode 100644 index 5b24d7a60c4e..000000000000 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java +++ /dev/null @@ -1,557 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.wm.shell.desktopmode; - -import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; -import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; -import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; -import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; -import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; -import static android.view.WindowManager.TRANSIT_CHANGE; -import static android.view.WindowManager.TRANSIT_NONE; -import static android.view.WindowManager.TRANSIT_OPEN; -import static android.view.WindowManager.TRANSIT_TO_FRONT; - -import static com.android.wm.shell.common.ExecutorUtils.executeRemoteCallWithTaskPermission; -import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE; -import static com.android.wm.shell.sysui.ShellSharedConstants.KEY_EXTRA_SHELL_DESKTOP_MODE; - -import android.app.ActivityManager.RunningTaskInfo; -import android.app.WindowConfiguration; -import android.content.Context; -import android.content.res.TypedArray; -import android.database.ContentObserver; -import android.graphics.Region; -import android.net.Uri; -import android.os.Handler; -import android.os.IBinder; -import android.os.RemoteException; -import android.os.UserHandle; -import android.provider.Settings; -import android.util.ArraySet; -import android.view.SurfaceControl; -import android.view.WindowManager; -import android.window.DisplayAreaInfo; -import android.window.TransitionInfo; -import android.window.TransitionRequestInfo; -import android.window.WindowContainerTransaction; - -import androidx.annotation.BinderThread; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.android.internal.annotations.VisibleForTesting; -import com.android.internal.protolog.common.ProtoLog; -import com.android.wm.shell.RootTaskDisplayAreaOrganizer; -import com.android.wm.shell.ShellTaskOrganizer; -import com.android.wm.shell.common.ExternalInterfaceBinder; -import com.android.wm.shell.common.RemoteCallable; -import com.android.wm.shell.common.ShellExecutor; -import com.android.wm.shell.common.annotations.ExternalThread; -import com.android.wm.shell.common.annotations.ShellMainThread; -import com.android.wm.shell.sysui.ShellController; -import com.android.wm.shell.sysui.ShellInit; -import com.android.wm.shell.transition.Transitions; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.concurrent.Executor; -import java.util.function.Consumer; - -/** - * Handles windowing changes when desktop mode system setting changes - */ -public class DesktopModeController implements RemoteCallable<DesktopModeController>, - Transitions.TransitionHandler { - - private final Context mContext; - private final ShellController mShellController; - private final ShellTaskOrganizer mShellTaskOrganizer; - private final RootTaskDisplayAreaOrganizer mRootTaskDisplayAreaOrganizer; - private final Transitions mTransitions; - private final DesktopModeTaskRepository mDesktopModeTaskRepository; - private final ShellExecutor mMainExecutor; - private final DesktopModeImpl mDesktopModeImpl = new DesktopModeImpl(); - private final SettingsObserver mSettingsObserver; - - public DesktopModeController(Context context, - ShellInit shellInit, - ShellController shellController, - ShellTaskOrganizer shellTaskOrganizer, - RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer, - Transitions transitions, - DesktopModeTaskRepository desktopModeTaskRepository, - @ShellMainThread Handler mainHandler, - @ShellMainThread ShellExecutor mainExecutor) { - mContext = context; - mShellController = shellController; - mShellTaskOrganizer = shellTaskOrganizer; - mRootTaskDisplayAreaOrganizer = rootTaskDisplayAreaOrganizer; - mTransitions = transitions; - mDesktopModeTaskRepository = desktopModeTaskRepository; - mMainExecutor = mainExecutor; - mSettingsObserver = new SettingsObserver(mContext, mainHandler); - if (DesktopModeStatus.isProto1Enabled()) { - shellInit.addInitCallback(this::onInit, this); - } - } - - private void onInit() { - ProtoLog.d(WM_SHELL_DESKTOP_MODE, "Initialize DesktopModeController"); - mShellController.addExternalInterface(KEY_EXTRA_SHELL_DESKTOP_MODE, - this::createExternalInterface, this); - mSettingsObserver.observe(); - if (DesktopModeStatus.isActive(mContext)) { - updateDesktopModeActive(true); - } - mTransitions.addHandler(this); - } - - @Override - public Context getContext() { - return mContext; - } - - @Override - public ShellExecutor getRemoteCallExecutor() { - return mMainExecutor; - } - - /** - * Get connection interface between sysui and shell - */ - public DesktopMode asDesktopMode() { - return mDesktopModeImpl; - } - - /** - * Creates a new instance of the external interface to pass to another process. - */ - private ExternalInterfaceBinder createExternalInterface() { - return new IDesktopModeImpl(this); - } - - /** - * Adds a listener to find out about changes in the visibility of freeform tasks. - * - * @param listener the listener to add. - * @param callbackExecutor the executor to call the listener on. - */ - public void addVisibleTasksListener(DesktopModeTaskRepository.VisibleTasksListener listener, - Executor callbackExecutor) { - mDesktopModeTaskRepository.addVisibleTasksListener(listener, callbackExecutor); - } - - /** - * Adds a listener to track changes to corners of desktop mode tasks. - * @param listener the listener to add. - * @param callbackExecutor the executor to call the listener on. - */ - public void addTaskCornerListener(Consumer<Region> listener, - Executor callbackExecutor) { - mDesktopModeTaskRepository.setTaskCornerListener(listener, callbackExecutor); - } - - @VisibleForTesting - void updateDesktopModeActive(boolean active) { - ProtoLog.d(WM_SHELL_DESKTOP_MODE, "updateDesktopModeActive: active=%s", active); - - int displayId = mContext.getDisplayId(); - - ArrayList<RunningTaskInfo> runningTasks = mShellTaskOrganizer.getRunningTasks(displayId); - - WindowContainerTransaction wct = new WindowContainerTransaction(); - // Reset freeform windowing mode that is set per task level so tasks inherit it - clearFreeformForStandardTasks(runningTasks, wct); - if (active) { - moveHomeBehindVisibleTasks(runningTasks, wct); - setDisplayAreaWindowingMode(displayId, WINDOWING_MODE_FREEFORM, wct); - } else { - clearBoundsForStandardTasks(runningTasks, wct); - setDisplayAreaWindowingMode(displayId, WINDOWING_MODE_FULLSCREEN, wct); - } - if (Transitions.ENABLE_SHELL_TRANSITIONS) { - mTransitions.startTransition(TRANSIT_CHANGE, wct, null); - } else { - mRootTaskDisplayAreaOrganizer.applyTransaction(wct); - } - } - - private WindowContainerTransaction clearBoundsForStandardTasks( - ArrayList<RunningTaskInfo> runningTasks, WindowContainerTransaction wct) { - ProtoLog.v(WM_SHELL_DESKTOP_MODE, "prepareClearBoundsForTasks"); - for (RunningTaskInfo taskInfo : runningTasks) { - if (taskInfo.getActivityType() == ACTIVITY_TYPE_STANDARD) { - ProtoLog.v(WM_SHELL_DESKTOP_MODE, "clearing bounds for token=%s taskInfo=%s", - taskInfo.token, taskInfo); - wct.setBounds(taskInfo.token, null); - } - } - return wct; - } - - private void clearFreeformForStandardTasks(ArrayList<RunningTaskInfo> runningTasks, - WindowContainerTransaction wct) { - ProtoLog.v(WM_SHELL_DESKTOP_MODE, "prepareClearFreeformForTasks"); - for (RunningTaskInfo taskInfo : runningTasks) { - if (taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM - && taskInfo.getActivityType() == ACTIVITY_TYPE_STANDARD) { - ProtoLog.v(WM_SHELL_DESKTOP_MODE, - "clearing windowing mode for token=%s taskInfo=%s", taskInfo.token, - taskInfo); - wct.setWindowingMode(taskInfo.token, WINDOWING_MODE_UNDEFINED); - } - } - } - - private void moveHomeBehindVisibleTasks(ArrayList<RunningTaskInfo> runningTasks, - WindowContainerTransaction wct) { - ProtoLog.v(WM_SHELL_DESKTOP_MODE, "moveHomeBehindVisibleTasks"); - RunningTaskInfo homeTask = null; - ArrayList<RunningTaskInfo> visibleTasks = new ArrayList<>(); - for (RunningTaskInfo taskInfo : runningTasks) { - if (taskInfo.getActivityType() == ACTIVITY_TYPE_HOME) { - homeTask = taskInfo; - } else if (taskInfo.getActivityType() == ACTIVITY_TYPE_STANDARD - && taskInfo.isVisible()) { - visibleTasks.add(taskInfo); - } - } - if (homeTask == null) { - ProtoLog.w(WM_SHELL_DESKTOP_MODE, "moveHomeBehindVisibleTasks: home task not found"); - } else { - ProtoLog.v(WM_SHELL_DESKTOP_MODE, "moveHomeBehindVisibleTasks: visible tasks %d", - visibleTasks.size()); - wct.reorder(homeTask.getToken(), true /* onTop */); - for (RunningTaskInfo task : visibleTasks) { - wct.reorder(task.getToken(), true /* onTop */); - } - } - } - - private void setDisplayAreaWindowingMode(int displayId, - @WindowConfiguration.WindowingMode int windowingMode, WindowContainerTransaction wct) { - DisplayAreaInfo displayAreaInfo = mRootTaskDisplayAreaOrganizer.getDisplayAreaInfo( - displayId); - if (displayAreaInfo == null) { - ProtoLog.e(WM_SHELL_DESKTOP_MODE, - "unable to update windowing mode for display %d display not found", displayId); - return; - } - - ProtoLog.v(WM_SHELL_DESKTOP_MODE, - "setWindowingMode: displayId=%d current wmMode=%d new wmMode=%d", displayId, - displayAreaInfo.configuration.windowConfiguration.getWindowingMode(), - windowingMode); - - wct.setWindowingMode(displayAreaInfo.token, windowingMode); - } - - /** - * Show apps on desktop - */ - void showDesktopApps(int displayId) { - // Bring apps to front, ignoring their visibility status to always ensure they are on top. - WindowContainerTransaction wct = new WindowContainerTransaction(); - bringDesktopAppsToFront(displayId, wct); - - if (!wct.isEmpty()) { - if (Transitions.ENABLE_SHELL_TRANSITIONS) { - // TODO(b/268662477): add animation for the transition - mTransitions.startTransition(TRANSIT_NONE, wct, null /* handler */); - } else { - mShellTaskOrganizer.applyTransaction(wct); - } - } - } - - /** Get number of tasks that are marked as visible */ - int getVisibleTaskCount(int displayId) { - return mDesktopModeTaskRepository.getVisibleTaskCount(displayId); - } - - private void bringDesktopAppsToFront(int displayId, WindowContainerTransaction wct) { - final ArraySet<Integer> activeTasks = mDesktopModeTaskRepository.getActiveTasks(displayId); - ProtoLog.d(WM_SHELL_DESKTOP_MODE, "bringDesktopAppsToFront: tasks=%s", activeTasks.size()); - - final List<RunningTaskInfo> taskInfos = new ArrayList<>(); - for (Integer taskId : activeTasks) { - RunningTaskInfo taskInfo = mShellTaskOrganizer.getRunningTaskInfo(taskId); - if (taskInfo != null) { - taskInfos.add(taskInfo); - } - } - - if (taskInfos.isEmpty()) { - return; - } - - moveHomeTaskToFront(wct); - - ProtoLog.d(WM_SHELL_DESKTOP_MODE, - "bringDesktopAppsToFront: reordering all active tasks to the front"); - final List<Integer> allTasksInZOrder = - mDesktopModeTaskRepository.getFreeformTasksInZOrder(); - // Sort by z-order, bottom to top, so that the top-most task is reordered to the top last - // in the WCT. - taskInfos.sort(Comparator.comparingInt(task -> -allTasksInZOrder.indexOf(task.taskId))); - for (RunningTaskInfo task : taskInfos) { - wct.reorder(task.token, true); - } - } - - private void moveHomeTaskToFront(WindowContainerTransaction wct) { - for (RunningTaskInfo task : mShellTaskOrganizer.getRunningTasks(mContext.getDisplayId())) { - if (task.getActivityType() == ACTIVITY_TYPE_HOME) { - wct.reorder(task.token, true /* onTop */); - return; - } - } - } - - /** - * Update corner rects stored for a specific task - * @param taskId task to update - * @param taskCorners task's new corner handles - */ - public void onTaskCornersChanged(int taskId, Region taskCorners) { - mDesktopModeTaskRepository.updateTaskCorners(taskId, taskCorners); - } - - /** - * Remove corners saved for a task. Likely used due to task closure. - * @param taskId task to remove - */ - public void removeCornersForTask(int taskId) { - mDesktopModeTaskRepository.removeTaskCorners(taskId); - } - - /** - * Moves a specifc task to the front. - * @param taskInfo the task to show in front. - */ - public void moveTaskToFront(RunningTaskInfo taskInfo) { - WindowContainerTransaction wct = new WindowContainerTransaction(); - wct.reorder(taskInfo.token, true /* onTop */); - if (Transitions.ENABLE_SHELL_TRANSITIONS) { - mTransitions.startTransition(TRANSIT_TO_FRONT, wct, null); - } else { - mShellTaskOrganizer.applyTransaction(wct); - } - } - - /** - * Turn desktop mode on or off - * @param active the desired state for desktop mode setting - */ - public void setDesktopModeActive(boolean active) { - int value = active ? 1 : 0; - Settings.System.putInt(mContext.getContentResolver(), Settings.System.DESKTOP_MODE, value); - } - - /** - * Returns the windowing mode of the display area with the specified displayId. - * @param displayId - * @return - */ - public int getDisplayAreaWindowingMode(int displayId) { - return mRootTaskDisplayAreaOrganizer.getDisplayAreaInfo(displayId) - .configuration.windowConfiguration.getWindowingMode(); - } - - @Override - public boolean startAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info, - @NonNull SurfaceControl.Transaction startTransaction, - @NonNull SurfaceControl.Transaction finishTransaction, - @NonNull Transitions.TransitionFinishCallback finishCallback) { - // This handler should never be the sole handler, so should not animate anything. - return false; - } - - @Nullable - @Override - public WindowContainerTransaction handleRequest(@NonNull IBinder transition, - @NonNull TransitionRequestInfo request) { - RunningTaskInfo triggerTask = request.getTriggerTask(); - // Only do anything if we are in desktop mode and opening/moving-to-front a task/app in - // freeform - if (!DesktopModeStatus.isActive(mContext)) { - ProtoLog.d(WM_SHELL_DESKTOP_MODE, - "skip shell transition request: desktop mode not active"); - return null; - } - if (request.getType() != TRANSIT_OPEN && request.getType() != TRANSIT_TO_FRONT) { - ProtoLog.d(WM_SHELL_DESKTOP_MODE, - "skip shell transition request: unsupported type %s", - WindowManager.transitTypeToString(request.getType())); - return null; - } - if (triggerTask == null || triggerTask.getWindowingMode() != WINDOWING_MODE_FREEFORM) { - ProtoLog.d(WM_SHELL_DESKTOP_MODE, "skip shell transition request: not freeform task"); - return null; - } - ProtoLog.d(WM_SHELL_DESKTOP_MODE, "handle shell transition request: %s", request); - - WindowContainerTransaction wct = new WindowContainerTransaction(); - bringDesktopAppsToFront(triggerTask.displayId, wct); - wct.reorder(triggerTask.token, true /* onTop */); - - return wct; - } - - /** - * Applies the proper surface states (rounded corners) to tasks when desktop mode is active. - * This is intended to be used when desktop mode is part of another animation but isn't, itself, - * animating. - */ - public void syncSurfaceState(@NonNull TransitionInfo info, - SurfaceControl.Transaction finishTransaction) { - // Add rounded corners to freeform windows - final TypedArray ta = mContext.obtainStyledAttributes( - new int[]{android.R.attr.dialogCornerRadius}); - final int cornerRadius = ta.getDimensionPixelSize(0, 0); - ta.recycle(); - for (TransitionInfo.Change change: info.getChanges()) { - if (change.getTaskInfo().getWindowingMode() == WINDOWING_MODE_FREEFORM) { - finishTransaction.setCornerRadius(change.getLeash(), cornerRadius); - } - } - } - - /** - * A {@link ContentObserver} for listening to changes to {@link Settings.System#DESKTOP_MODE} - */ - private final class SettingsObserver extends ContentObserver { - - private final Uri mDesktopModeSetting = Settings.System.getUriFor( - Settings.System.DESKTOP_MODE); - - private final Context mContext; - - SettingsObserver(Context context, Handler handler) { - super(handler); - mContext = context; - } - - public void observe() { - // TODO(b/242867463): listen for setting change for all users - mContext.getContentResolver().registerContentObserver(mDesktopModeSetting, - false /* notifyForDescendants */, this /* observer */, UserHandle.USER_CURRENT); - } - - @Override - public void onChange(boolean selfChange, @Nullable Uri uri) { - if (mDesktopModeSetting.equals(uri)) { - ProtoLog.d(WM_SHELL_DESKTOP_MODE, "Received update for desktop mode setting"); - desktopModeSettingChanged(); - } - } - - private void desktopModeSettingChanged() { - boolean enabled = DesktopModeStatus.isActive(mContext); - updateDesktopModeActive(enabled); - } - } - - /** - * The interface for calls from outside the shell, within the host process. - */ - @ExternalThread - private final class DesktopModeImpl implements DesktopMode { - - @Override - public void addVisibleTasksListener( - DesktopModeTaskRepository.VisibleTasksListener listener, - Executor callbackExecutor) { - mMainExecutor.execute(() -> { - DesktopModeController.this.addVisibleTasksListener(listener, callbackExecutor); - }); - } - - @Override - public void addDesktopGestureExclusionRegionListener(Consumer<Region> listener, - Executor callbackExecutor) { - mMainExecutor.execute(() -> { - DesktopModeController.this.addTaskCornerListener(listener, callbackExecutor); - }); - } - } - - /** - * The interface for calls from outside the host process. - */ - @BinderThread - private static class IDesktopModeImpl extends IDesktopMode.Stub - implements ExternalInterfaceBinder { - - private DesktopModeController mController; - - IDesktopModeImpl(DesktopModeController controller) { - mController = controller; - } - - /** - * Invalidates this instance, preventing future calls from updating the controller. - */ - @Override - public void invalidate() { - mController = null; - } - - @Override - public void showDesktopApps(int displayId) { - executeRemoteCallWithTaskPermission(mController, "showDesktopApps", - controller -> controller.showDesktopApps(displayId)); - } - - @Override - public void showDesktopApp(int taskId) throws RemoteException { - // TODO - } - - @Override - public int getVisibleTaskCount(int displayId) throws RemoteException { - int[] result = new int[1]; - executeRemoteCallWithTaskPermission(mController, "getVisibleTaskCount", - controller -> result[0] = controller.getVisibleTaskCount(displayId), - true /* blocking */ - ); - return result[0]; - } - - @Override - public void onDesktopSplitSelectAnimComplete(RunningTaskInfo taskInfo) { - - } - - @Override - public void stashDesktopApps(int displayId) throws RemoteException { - // Stashing of desktop apps not needed. Apps always launch on desktop - } - - @Override - public void hideStashedDesktopApps(int displayId) throws RemoteException { - // Stashing of desktop apps not needed. Apps always launch on desktop - } - - @Override - public void setTaskListener(IDesktopTaskListener listener) throws RemoteException { - // TODO(b/261234402): move visibility from sysui state to listener - } - } -} diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeStatus.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeStatus.java index 517f9f2aba27..77831136b0bc 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeStatus.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeStatus.java @@ -16,14 +16,7 @@ package com.android.wm.shell.desktopmode; -import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE; - -import android.content.Context; import android.os.SystemProperties; -import android.os.UserHandle; -import android.provider.Settings; - -import com.android.internal.protolog.common.ProtoLog; /** * Constants for desktop mode feature @@ -31,13 +24,7 @@ import com.android.internal.protolog.common.ProtoLog; public class DesktopModeStatus { /** - * Flag to indicate whether desktop mode is available on the device - */ - private static final boolean IS_SUPPORTED = SystemProperties.getBoolean( - "persist.wm.debug.desktop_mode", false); - - /** - * Flag to indicate whether desktop mode proto 2 is available on the device + * Flag to indicate whether desktop mode proto is available on the device */ private static final boolean IS_PROTO2_ENABLED = SystemProperties.getBoolean( "persist.wm.debug.desktop_mode_2", false); @@ -64,28 +51,13 @@ public class DesktopModeStatus { "persist.wm.debug.desktop_stashing", false); /** - * Return {@code true} if desktop mode support is enabled - */ - public static boolean isProto1Enabled() { - return IS_SUPPORTED; - } - - /** * Return {@code true} is desktop windowing proto 2 is enabled */ - public static boolean isProto2Enabled() { + public static boolean isEnabled() { return IS_PROTO2_ENABLED; } /** - * Return {@code true} if proto 1 or 2 is enabled. - * Can be used to guard logic that is common for both prototypes. - */ - public static boolean isAnyEnabled() { - return isProto1Enabled() || isProto2Enabled(); - } - - /** * Return {@code true} if veiled resizing is active. If false, fluid resizing is used. */ public static boolean isVeiledResizeEnabled() { @@ -99,26 +71,4 @@ public class DesktopModeStatus { public static boolean isStashingEnabled() { return IS_STASHING_ENABLED; } - /** - * Check if desktop mode is active - * - * @return {@code true} if active - */ - public static boolean isActive(Context context) { - if (!isAnyEnabled()) { - return false; - } - if (isProto2Enabled()) { - // Desktop mode is always active in prototype 2 - return true; - } - try { - int result = Settings.System.getIntForUser(context.getContentResolver(), - Settings.System.DESKTOP_MODE, UserHandle.USER_CURRENT); - return result != 0; - } catch (Exception e) { - ProtoLog.e(WM_SHELL_DESKTOP_MODE, "Failed to read DESKTOP_MODE setting %s", e); - return false; - } - } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt index 236dec0f555b..b918c83a5c6b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt @@ -122,7 +122,7 @@ class DesktopTasksController( init { desktopMode = DesktopModeImpl() - if (DesktopModeStatus.isProto2Enabled()) { + if (DesktopModeStatus.isEnabled()) { shellInit.addInitCallback({ onInit() }, this) } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java index 22541bbd892a..a80241e0ac5c 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java @@ -68,7 +68,7 @@ public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener, private void onInit() { mShellTaskOrganizer.addListenerForType(this, TASK_LISTENER_TYPE_FREEFORM); - if (DesktopModeStatus.isAnyEnabled()) { + if (DesktopModeStatus.isEnabled()) { mShellTaskOrganizer.addFocusListener(this); } } @@ -90,7 +90,7 @@ public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener, t.apply(); } - if (DesktopModeStatus.isAnyEnabled()) { + if (DesktopModeStatus.isEnabled()) { mDesktopModeTaskRepository.ifPresent(repository -> { repository.addOrMoveFreeformTaskToTop(taskInfo.taskId); if (taskInfo.isVisible) { @@ -111,7 +111,7 @@ public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener, taskInfo.taskId); mTasks.remove(taskInfo.taskId); - if (DesktopModeStatus.isAnyEnabled()) { + if (DesktopModeStatus.isEnabled()) { mDesktopModeTaskRepository.ifPresent(repository -> { repository.removeFreeformTask(taskInfo.taskId); if (repository.removeActiveTask(taskInfo.taskId)) { @@ -135,7 +135,7 @@ public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener, taskInfo.taskId); mWindowDecorationViewModel.onTaskInfoChanged(taskInfo); state.mTaskInfo = taskInfo; - if (DesktopModeStatus.isAnyEnabled()) { + if (DesktopModeStatus.isEnabled()) { mDesktopModeTaskRepository.ifPresent(repository -> { if (taskInfo.isVisible) { if (repository.addActiveTask(taskInfo.displayId, taskInfo.taskId)) { @@ -154,7 +154,7 @@ public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener, ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TASK_ORG, "Freeform Task Focus Changed: #%d focused=%b", taskInfo.taskId, taskInfo.isFocused); - if (DesktopModeStatus.isAnyEnabled() && taskInfo.isFocused) { + if (DesktopModeStatus.isEnabled() && taskInfo.isFocused) { mDesktopModeTaskRepository.ifPresent(repository -> { repository.addOrMoveFreeformTaskToTop(taskInfo.taskId); }); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java index e3922d65215c..018d674e5427 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java @@ -1059,7 +1059,21 @@ public class PipTransition extends PipTransitionController { private void resetPrevPip(@NonNull TransitionInfo.Change prevPipTaskChange, @NonNull SurfaceControl.Transaction startTransaction) { final SurfaceControl leash = prevPipTaskChange.getLeash(); - startTransaction.remove(leash); + final Rect bounds = prevPipTaskChange.getEndAbsBounds(); + final Point offset = prevPipTaskChange.getEndRelOffset(); + bounds.offset(-offset.x, -offset.y); + + startTransaction.setWindowCrop(leash, null); + startTransaction.setMatrix(leash, 1, 0, 0, 1); + startTransaction.setCornerRadius(leash, 0); + startTransaction.setPosition(leash, bounds.left, bounds.top); + + if (mHasFadeOut && prevPipTaskChange.getTaskInfo().isVisible()) { + if (mPipAnimationController.getCurrentAnimator() != null) { + mPipAnimationController.getCurrentAnimator().cancel(); + } + startTransaction.setAlpha(leash, 1); + } mHasFadeOut = false; mCurrentPipTaskToken = null; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/OWNERS b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/OWNERS index ec09827fa4d1..6dabb3bf6f9a 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/OWNERS +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/OWNERS @@ -1,3 +1,4 @@ # WM shell sub-module pip owner hwwang@google.com mateuszc@google.com +gabiyev@google.com diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java index ac142e955b83..94e1b33dbf58 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java @@ -340,7 +340,7 @@ public class RecentTasksController implements TaskStackListenerCallback, continue; } - if (DesktopModeStatus.isProto2Enabled() && mDesktopModeTaskRepository.isPresent() + if (DesktopModeStatus.isEnabled() && mDesktopModeTaskRepository.isPresent() && mDesktopModeTaskRepository.get().isActiveTask(taskInfo.taskId)) { // Freeform tasks will be added as a separate entry freeformTasks.add(taskInfo); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java index 842b1bf9e8af..94fa485efd5c 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java @@ -228,6 +228,15 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, private final Toast mSplitUnsupportedToast; private SplitRequest mSplitRequest; + /** + * Since StageCoordinator only coordinates MainStage and SideStage, it shouldn't support + * CompatUI layouts. CompatUI is handled separately by MainStage and SideStage. + */ + @Override + public boolean supportCompatUI() { + return false; + } + class SplitRequest { @SplitPosition int mActivatePosition; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java index 986560bd6053..87ceaa42ef5b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java @@ -43,7 +43,6 @@ import android.window.WindowContainerTransaction; import com.android.internal.protolog.common.ProtoLog; import com.android.wm.shell.common.split.SplitScreenUtils; -import com.android.wm.shell.desktopmode.DesktopModeController; import com.android.wm.shell.desktopmode.DesktopModeStatus; import com.android.wm.shell.desktopmode.DesktopTasksController; import com.android.wm.shell.keyguard.KeyguardTransitionHandler; @@ -71,7 +70,6 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler, private RecentsTransitionHandler mRecentsHandler; private StageCoordinator mSplitHandler; private final KeyguardTransitionHandler mKeyguardHandler; - private DesktopModeController mDesktopModeController; private DesktopTasksController mDesktopTasksController; private UnfoldTransitionHandler mUnfoldHandler; @@ -141,7 +139,6 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler, @Nullable PipTransitionController pipTransitionController, Optional<RecentsTransitionHandler> recentsHandlerOptional, KeyguardTransitionHandler keyguardHandler, - Optional<DesktopModeController> desktopModeControllerOptional, Optional<DesktopTasksController> desktopTasksControllerOptional, Optional<UnfoldTransitionHandler> unfoldHandler) { mPlayer = player; @@ -161,7 +158,6 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler, if (mRecentsHandler != null) { mRecentsHandler.addMixer(this); } - mDesktopModeController = desktopModeControllerOptional.orElse(null); mDesktopTasksController = desktopTasksControllerOptional.orElse(null); mUnfoldHandler = unfoldHandler.orElse(null); }, this); @@ -244,7 +240,7 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler, @Override public Transitions.TransitionHandler handleRecentsRequest(WindowContainerTransaction outWCT) { if (mRecentsHandler != null && (mSplitHandler.isSplitScreenVisible() - || DesktopModeStatus.isActive(mPlayer.getContext()))) { + || DesktopModeStatus.isEnabled())) { return this; } return null; @@ -259,7 +255,7 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler, MixedTransition.TYPE_RECENTS_DURING_SPLIT, transition); mixed.mLeftoversHandler = mRecentsHandler; mActiveTransitions.add(mixed); - } else if (DesktopModeStatus.isActive(mPlayer.getContext())) { + } else if (DesktopModeStatus.isEnabled()) { ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " Got a recents request while " + "desktop mode is active, so treat it as Mixed."); final MixedTransition mixed = new MixedTransition( @@ -666,11 +662,6 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler, if (!consumed) { return false; } - //Sync desktop mode state (proto 1) - if (mDesktopModeController != null) { - mDesktopModeController.syncSurfaceState(info, finishTransaction); - return true; - } //Sync desktop mode state (proto 2) if (mDesktopTasksController != null) { mDesktopTasksController.syncSurfaceState(info, finishTransaction); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java index ce8191067ae9..c18973132364 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java @@ -64,7 +64,8 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL Handler handler, Choreographer choreographer, SyncTransactionQueue syncQueue) { - super(context, displayController, taskOrganizer, taskInfo, taskSurface); + super(context, displayController, taskOrganizer, taskInfo, taskSurface, + taskInfo.getConfiguration()); mHandler = handler; mChoreographer = choreographer; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java index 92b44d43567d..abd2ad49317b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java @@ -69,7 +69,6 @@ import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.SyncTransactionQueue; -import com.android.wm.shell.desktopmode.DesktopModeController; import com.android.wm.shell.desktopmode.DesktopModeStatus; import com.android.wm.shell.desktopmode.DesktopTasksController; import com.android.wm.shell.desktopmode.DesktopTasksController.SnapPosition; @@ -102,7 +101,6 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { private final Choreographer mMainChoreographer; private final DisplayController mDisplayController; private final SyncTransactionQueue mSyncQueue; - private final Optional<DesktopModeController> mDesktopModeController; private final Optional<DesktopTasksController> mDesktopTasksController; private boolean mTransitionDragActive; @@ -135,7 +133,6 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { ShellController shellController, SyncTransactionQueue syncQueue, Transitions transitions, - Optional<DesktopModeController> desktopModeController, Optional<DesktopTasksController> desktopTasksController, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer ) { @@ -149,7 +146,6 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { shellController, syncQueue, transitions, - desktopModeController, desktopTasksController, new DesktopModeWindowDecoration.Factory(), new InputMonitorFactory(), @@ -169,7 +165,6 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { ShellController shellController, SyncTransactionQueue syncQueue, Transitions transitions, - Optional<DesktopModeController> desktopModeController, Optional<DesktopTasksController> desktopTasksController, DesktopModeWindowDecoration.Factory desktopModeWindowDecorFactory, InputMonitorFactory inputMonitorFactory, @@ -185,7 +180,6 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { mDisplayController = displayController; mSyncQueue = syncQueue; mTransitions = transitions; - mDesktopModeController = desktopModeController; mDesktopTasksController = desktopTasksController; mDesktopModeWindowDecorFactory = desktopModeWindowDecorFactory; @@ -214,9 +208,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { public void onTaskStageChanged(int taskId, int stage, boolean visible) { if (visible) { DesktopModeWindowDecoration decor = mWindowDecorByTaskId.get(taskId); - if (decor != null && DesktopModeStatus.isActive(mContext) + if (decor != null && DesktopModeStatus.isEnabled() && decor.mTaskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) { - mDesktopModeController.ifPresent(c -> c.setDesktopModeActive(false)); mDesktopTasksController.ifPresent(c -> c.moveToSplit(decor.mTaskInfo)); } } @@ -376,7 +369,6 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { decoration.closeHandleMenu(); } } else if (id == R.id.desktop_button) { - mDesktopModeController.ifPresent(c -> c.setDesktopModeActive(true)); if (mDesktopTasksController.isPresent()) { final WindowContainerTransaction wct = new WindowContainerTransaction(); // App sometimes draws before the insets from WindowDecoration#relayout have @@ -387,7 +379,6 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { } decoration.closeHandleMenu(); } else if (id == R.id.fullscreen_button) { - mDesktopModeController.ifPresent(c -> c.setDesktopModeActive(false)); mDesktopTasksController.ifPresent(c -> c.moveToFullscreen(mTaskId)); decoration.closeHandleMenu(); } else if (id == R.id.split_screen_button) { @@ -465,7 +456,6 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { private void moveTaskToFront(RunningTaskInfo taskInfo) { if (!taskInfo.isFocused) { mDesktopTasksController.ifPresent(c -> c.moveTaskToFront(taskInfo)); - mDesktopModeController.ifPresent(c -> c.moveTaskToFront(taskInfo)); } } @@ -476,15 +466,10 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { @Override public boolean handleMotionEvent(@Nullable View v, MotionEvent e) { final RunningTaskInfo taskInfo = mTaskOrganizer.getRunningTaskInfo(mTaskId); - if (DesktopModeStatus.isProto2Enabled() + if (DesktopModeStatus.isEnabled() && taskInfo.getWindowingMode() == WINDOWING_MODE_FULLSCREEN) { return false; } - if (DesktopModeStatus.isProto1Enabled() && mDesktopModeController.isPresent() - && mDesktopModeController.get().getDisplayAreaWindowingMode(taskInfo.displayId) - == WINDOWING_MODE_FULLSCREEN) { - return false; - } if (mGestureDetector.onTouchEvent(e)) { return true; } @@ -634,7 +619,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { */ private void handleReceivedMotionEvent(MotionEvent ev, InputMonitor inputMonitor) { final DesktopModeWindowDecoration relevantDecor = getRelevantWindowDecor(ev); - if (DesktopModeStatus.isProto2Enabled()) { + if (DesktopModeStatus.isEnabled()) { if (relevantDecor == null || relevantDecor.mTaskInfo.getWindowingMode() != WINDOWING_MODE_FREEFORM || mTransitionDragActive) { @@ -643,14 +628,10 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { } handleEventOutsideFocusedCaption(ev, relevantDecor); // Prevent status bar from reacting to a caption drag. - if (DesktopModeStatus.isProto2Enabled()) { + if (DesktopModeStatus.isEnabled()) { if (mTransitionDragActive) { inputMonitor.pilferPointers(); } - } else if (DesktopModeStatus.isProto1Enabled()) { - if (mTransitionDragActive && !DesktopModeStatus.isActive(mContext)) { - inputMonitor.pilferPointers(); - } } } @@ -683,7 +664,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { mDragToDesktopAnimationStartBounds.set( relevantDecor.mTaskInfo.configuration.windowConfiguration.getBounds()); boolean dragFromStatusBarAllowed = false; - if (DesktopModeStatus.isProto2Enabled()) { + if (DesktopModeStatus.isEnabled()) { // In proto2 any full screen or multi-window task can be dragged to // freeform. final int windowingMode = relevantDecor.mTaskInfo.getWindowingMode(); @@ -708,10 +689,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { final int statusBarHeight = getStatusBarHeight( relevantDecor.mTaskInfo.displayId); if (ev.getY() > 2 * statusBarHeight) { - if (DesktopModeStatus.isProto2Enabled()) { + if (DesktopModeStatus.isEnabled()) { animateToDesktop(relevantDecor, ev); - } else if (DesktopModeStatus.isProto1Enabled()) { - mDesktopModeController.ifPresent(c -> c.setDesktopModeActive(true)); } mMoveToDesktopAnimator = null; return; @@ -902,7 +881,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { && taskInfo.isFocused) { return false; } - return DesktopModeStatus.isProto2Enabled() + return DesktopModeStatus.isEnabled() && taskInfo.getWindowingMode() != WINDOWING_MODE_PINNED && taskInfo.getActivityType() == ACTIVITY_TYPE_STANDARD && !taskInfo.configuration.windowConfiguration.isAlwaysOnTop() @@ -984,13 +963,11 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { @Override public void onTaskCornersChanged(int taskId, Region corner) { - mDesktopModeController.ifPresent(d -> d.onTaskCornersChanged(taskId, corner)); mDesktopTasksController.ifPresent(d -> d.onTaskCornersChanged(taskId, corner)); } @Override public void onTaskCornersRemoved(int taskId) { - mDesktopModeController.ifPresent(d -> d.removeCornersForTask(taskId)); mDesktopTasksController.ifPresent(d -> d.removeCornersForTask(taskId)); } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java index a75dce225624..e954f3b4a1d5 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java @@ -104,11 +104,12 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin ShellTaskOrganizer taskOrganizer, ActivityManager.RunningTaskInfo taskInfo, SurfaceControl taskSurface, + Configuration windowDecorConfig, Handler handler, Choreographer choreographer, SyncTransactionQueue syncQueue, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) { - super(context, displayController, taskOrganizer, taskInfo, taskSurface); + super(context, displayController, taskOrganizer, taskInfo, taskSurface, windowDecorConfig); mHandler = handler; mChoreographer = choreographer; @@ -118,17 +119,6 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin loadAppInfo(); } - @Override - protected Configuration getConfigurationWithOverrides( - ActivityManager.RunningTaskInfo taskInfo) { - Configuration configuration = taskInfo.getConfiguration(); - if (DesktopTasksController.isDesktopDensityOverrideSet()) { - // Density is overridden for desktop tasks. Keep system density for window decoration. - configuration.densityDpi = mContext.getResources().getConfiguration().densityDpi; - } - return configuration; - } - void setCaptionListeners( View.OnClickListener onCaptionButtonClickListener, View.OnTouchListener onCaptionTouchListener, @@ -194,6 +184,10 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin mRelayoutParams.mShadowRadiusId = shadowRadiusID; mRelayoutParams.mApplyStartTransactionOnDraw = applyStartTransactionOnDraw; + mRelayoutParams.mWindowDecorConfig = DesktopTasksController.isDesktopDensityOverrideSet() + ? mContext.getResources().getConfiguration() // Use system context + : mTaskInfo.configuration; // Use task configuration + mRelayoutParams.mCornerRadius = (int) ScreenDecorationsUtils.getWindowCornerRadius(mContext); relayout(mRelayoutParams, startT, finishT, wct, oldRootView, mResult); @@ -428,7 +422,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin .setOnTouchListener(mOnCaptionTouchListener) .setLayoutId(mRelayoutParams.mLayoutResId) .setCaptionPosition(mRelayoutParams.mCaptionX, mRelayoutParams.mCaptionY) - .setWindowingButtonsVisible(DesktopModeStatus.isProto2Enabled()) + .setWindowingButtonsVisible(DesktopModeStatus.isEnabled()) .build(); mHandleMenu.show(); } @@ -549,9 +543,6 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin } private int getDesktopModeWindowDecorLayoutId(int windowingMode) { - if (DesktopModeStatus.isProto1Enabled()) { - return R.layout.desktop_mode_app_controls_window_decor; - } return windowingMode == WINDOWING_MODE_FREEFORM ? R.layout.desktop_mode_app_controls_window_decor : R.layout.desktop_mode_focused_window_decor; @@ -617,12 +608,17 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin Choreographer choreographer, SyncTransactionQueue syncQueue, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) { + final Configuration windowDecorConfig = + DesktopTasksController.isDesktopDensityOverrideSet() + ? context.getResources().getConfiguration() // Use system context + : taskInfo.configuration; // Use task configuration return new DesktopModeWindowDecoration( context, displayController, taskOrganizer, taskInfo, taskSurface, + windowDecorConfig, handler, choreographer, syncQueue, diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleMenu.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleMenu.java index ac4a597c15d1..42b1240b0d49 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleMenu.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleMenu.java @@ -186,7 +186,12 @@ class HandleMenu { // More Actions pill setup. final View moreActionsPillView = mMoreActionsPill.mWindowViewHost.getView(); final Button closeBtn = moreActionsPillView.findViewById(R.id.close_button); - closeBtn.setOnClickListener(mOnClickListener); + if (mTaskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) { + closeBtn.setVisibility(View.GONE); + } else { + closeBtn.setVisibility(View.VISIBLE); + closeBtn.setOnClickListener(mOnClickListener); + } final Button selectBtn = moreActionsPillView.findViewById(R.id.select_button); selectBtn.setOnClickListener(mOnClickListener); } @@ -228,7 +233,6 @@ class HandleMenu { /** * Update pill layout, in case task changes have caused positioning to change. - * @param t */ void relayout(SurfaceControl.Transaction t) { if (mAppInfoPill != null) { @@ -236,7 +240,7 @@ class HandleMenu { t.setPosition(mAppInfoPill.mWindowSurface, mAppInfoPillPosition.x, mAppInfoPillPosition.y); // Only show windowing buttons in proto2. Proto1 uses a system-level mode only. - final boolean shouldShowWindowingPill = DesktopModeStatus.isProto2Enabled(); + final boolean shouldShowWindowingPill = DesktopModeStatus.isEnabled(); if (shouldShowWindowingPill) { t.setPosition(mWindowingPill.mWindowSurface, mWindowingPillPosition.x, mWindowingPillPosition.y); @@ -245,10 +249,12 @@ class HandleMenu { mMoreActionsPillPosition.x, mMoreActionsPillPosition.y); } } + /** * Check a passed MotionEvent if a click has occurred on any button on this caption * Note this should only be called when a regular onClick is not possible * (i.e. the button was clicked through status bar layer) + * * @param ev the MotionEvent to compare against. */ void checkClickEvent(MotionEvent ev) { @@ -267,6 +273,7 @@ class HandleMenu { * A valid menu input is one of the following: * An input that happens in the menu views. * Any input before the views have been laid out. + * * @param inputPoint the input to compare against. */ boolean isValidMenuInput(PointF inputPoint) { @@ -297,7 +304,6 @@ class HandleMenu { /** * Check if the views for handle menu can be seen. - * @return */ private boolean viewsLaidOut() { return mAppInfoPill.mWindowViewHost.getView().isLaidOut(); @@ -318,8 +324,7 @@ class HandleMenu { R.dimen.desktop_mode_handle_menu_app_info_pill_height); mWindowingPillHeight = loadDimensionPixelSize(resources, R.dimen.desktop_mode_handle_menu_windowing_pill_height); - mMoreActionsPillHeight = loadDimensionPixelSize(resources, - R.dimen.desktop_mode_handle_menu_more_actions_pill_height); + mMoreActionsPillHeight = shouldShowCloseButton(resources); mShadowRadius = loadDimensionPixelSize(resources, R.dimen.desktop_mode_handle_menu_shadow_radius); mCornerRadius = loadDimensionPixelSize(resources, @@ -333,6 +338,14 @@ class HandleMenu { return resources.getDimensionPixelSize(resourceId); } + private int shouldShowCloseButton(Resources resources) { + return (mTaskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) + ? loadDimensionPixelSize(resources, + R.dimen.desktop_mode_handle_menu_more_actions_pill_freeform_height) + : loadDimensionPixelSize(resources, + R.dimen.desktop_mode_handle_menu_more_actions_pill_height); + } + void close() { mAppInfoPill.releaseView(); mAppInfoPill = null; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java index 0b0d9d5086f4..8d76fc6c542b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java @@ -115,6 +115,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> SurfaceControl mCaptionContainerSurface; private WindowlessWindowManager mCaptionWindowManager; private SurfaceControlViewHost mViewHost; + private Configuration mWindowDecorConfig; private final Binder mOwner = new Binder(); private final Rect mCaptionInsetsRect = new Rect(); @@ -125,8 +126,9 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> DisplayController displayController, ShellTaskOrganizer taskOrganizer, RunningTaskInfo taskInfo, - SurfaceControl taskSurface) { - this(context, displayController, taskOrganizer, taskInfo, taskSurface, + SurfaceControl taskSurface, + Configuration windowDecorConfig) { + this(context, displayController, taskOrganizer, taskInfo, taskSurface, windowDecorConfig, SurfaceControl.Builder::new, SurfaceControl.Transaction::new, WindowContainerTransaction::new, new SurfaceControlViewHostFactory() {}); } @@ -137,6 +139,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> ShellTaskOrganizer taskOrganizer, RunningTaskInfo taskInfo, SurfaceControl taskSurface, + Configuration windowDecorConfig, Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier, Supplier<SurfaceControl.Transaction> surfaceControlTransactionSupplier, Supplier<WindowContainerTransaction> windowContainerTransactionSupplier, @@ -152,17 +155,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> mSurfaceControlViewHostFactory = surfaceControlViewHostFactory; mDisplay = mDisplayController.getDisplay(mTaskInfo.displayId); - mDecorWindowContext = mContext.createConfigurationContext( - getConfigurationWithOverrides(mTaskInfo)); - } - - /** - * Get {@link Configuration} from supplied {@link RunningTaskInfo}. - * - * Allows values to be overridden before returning the configuration. - */ - protected Configuration getConfigurationWithOverrides(RunningTaskInfo taskInfo) { - return taskInfo.getConfiguration(); + mWindowDecorConfig = windowDecorConfig; + mDecorWindowContext = mContext.createConfigurationContext(mWindowDecorConfig); } /** @@ -179,7 +173,6 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> RelayoutResult<T> outResult) { outResult.reset(); - final Configuration oldTaskConfig = mTaskInfo.getConfiguration(); if (params.mRunningTaskInfo != null) { mTaskInfo = params.mRunningTaskInfo; } @@ -198,8 +191,11 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> outResult.mRootView = rootView; rootView = null; // Clear it just in case we use it accidentally - final Configuration taskConfig = getConfigurationWithOverrides(mTaskInfo); - if (oldTaskConfig.densityDpi != taskConfig.densityDpi + + final int oldDensityDpi = mWindowDecorConfig.densityDpi; + mWindowDecorConfig = params.mWindowDecorConfig != null ? params.mWindowDecorConfig + : mTaskInfo.getConfiguration(); + if (oldDensityDpi != mWindowDecorConfig.densityDpi || mDisplay == null || mDisplay.getDisplayId() != mTaskInfo.displayId || oldLayoutResId != mLayoutResId) { @@ -209,7 +205,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> outResult.mRootView = null; return; } - mDecorWindowContext = mContext.createConfigurationContext(taskConfig); + mDecorWindowContext = mContext.createConfigurationContext(mWindowDecorConfig); if (params.mLayoutResId != 0) { outResult.mRootView = (T) LayoutInflater.from(mDecorWindowContext) .inflate(params.mLayoutResId, null); @@ -222,6 +218,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> } final Resources resources = mDecorWindowContext.getResources(); + final Configuration taskConfig = mTaskInfo.getConfiguration(); final Rect taskBounds = taskConfig.windowConfiguration.getBounds(); outResult.mWidth = taskBounds.width(); outResult.mHeight = taskBounds.height(); @@ -470,6 +467,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> int mCaptionX; int mCaptionY; + Configuration mWindowDecorConfig; + boolean mApplyStartTransactionOnDraw; void reset() { @@ -484,6 +483,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> mCaptionY = 0; mApplyStartTransactionOnDraw = false; + mWindowDecorConfig = null; } } diff --git a/libs/WindowManager/Shell/tests/flicker/Android.bp b/libs/WindowManager/Shell/tests/flicker/Android.bp index 434b008a8e83..eb650caf04e2 100644 --- a/libs/WindowManager/Shell/tests/flicker/Android.bp +++ b/libs/WindowManager/Shell/tests/flicker/Android.bp @@ -126,6 +126,7 @@ java_defaults { "flickertestapplib", "flickerlib", "flickerlib-helpers", + "flickerlib-trace_processor_shell", "platform-test-annotations", "wm-flicker-common-app-helpers", "wm-flicker-common-assertions", diff --git a/libs/WindowManager/Shell/tests/flicker/AndroidTestTemplate.xml b/libs/WindowManager/Shell/tests/flicker/AndroidTestTemplate.xml index 87b20ed6305e..5e6a6c9f56dc 100644 --- a/libs/WindowManager/Shell/tests/flicker/AndroidTestTemplate.xml +++ b/libs/WindowManager/Shell/tests/flicker/AndroidTestTemplate.xml @@ -73,7 +73,9 @@ <option name="shell-timeout" value="6600s"/> <option name="test-timeout" value="6000s"/> <option name="hidden-api-checks" value="false"/> + <!-- TODO(b/288396763): re-enable when PerfettoListener is fixed <option name="device-listeners" value="android.device.collectors.PerfettoListener"/> + --> <!-- PerfettoListener related arguments --> <option name="instrumentation-arg" key="perfetto_config_text_proto" value="true"/> <option name="instrumentation-arg" diff --git a/libs/WindowManager/Shell/tests/flicker/manifests/AndroidManifest.xml b/libs/WindowManager/Shell/tests/flicker/manifests/AndroidManifest.xml index 6a87de47def4..ae130b8f6f7d 100644 --- a/libs/WindowManager/Shell/tests/flicker/manifests/AndroidManifest.xml +++ b/libs/WindowManager/Shell/tests/flicker/manifests/AndroidManifest.xml @@ -45,9 +45,13 @@ <uses-permission android:name="android.permission.MANAGE_ACTIVITY_TASKS" /> <!-- Enable bubble notification--> <uses-permission android:name="android.permission.STATUS_BAR_SERVICE" /> + <!-- Allow the test to connect to perfetto trace processor --> + <uses-permission android:name="android.permission.INTERNET"/> - <!-- Allow the test to write directly to /sdcard/ --> - <application android:requestLegacyExternalStorage="true" android:largeHeap="true"> + <!-- Allow the test to write directly to /sdcard/ and connect to trace processor --> + <application android:requestLegacyExternalStorage="true" + android:networkSecurityConfig="@xml/network_security_config" + android:largeHeap="true"> <uses-library android:name="android.test.runner"/> <service android:name=".NotificationListener" diff --git a/libs/WindowManager/Shell/tests/flicker/res/xml/network_security_config.xml b/libs/WindowManager/Shell/tests/flicker/res/xml/network_security_config.xml new file mode 100644 index 000000000000..4bd9ca049f55 --- /dev/null +++ b/libs/WindowManager/Shell/tests/flicker/res/xml/network_security_config.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2023 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<network-security-config> + <domain-config cleartextTrafficPermitted="true"> + <domain includeSubdomains="true">localhost</domain> + </domain-config> +</network-security-config> diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeControllerTest.java deleted file mode 100644 index 605a762a395f..000000000000 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeControllerTest.java +++ /dev/null @@ -1,531 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.wm.shell.desktopmode; - -import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; -import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; -import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; -import static android.app.WindowConfiguration.WINDOW_CONFIG_BOUNDS; -import static android.view.Display.DEFAULT_DISPLAY; -import static android.view.WindowManager.TRANSIT_CHANGE; -import static android.view.WindowManager.TRANSIT_CLOSE; -import static android.view.WindowManager.TRANSIT_NONE; -import static android.view.WindowManager.TRANSIT_OPEN; -import static android.view.WindowManager.TRANSIT_TO_FRONT; -import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_REORDER; - -import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession; -import static com.android.wm.shell.desktopmode.DesktopTestHelpers.createFreeformTask; -import static com.android.wm.shell.desktopmode.DesktopTestHelpers.createFullscreenTask; -import static com.android.wm.shell.desktopmode.DesktopTestHelpers.createHomeTask; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.clearInvocations; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; -import static org.mockito.Mockito.when; - -import android.app.ActivityManager.RunningTaskInfo; -import android.os.Binder; -import android.os.Handler; -import android.os.IBinder; -import android.testing.AndroidTestingRunner; -import android.window.DisplayAreaInfo; -import android.window.TransitionRequestInfo; -import android.window.WindowContainerTransaction; -import android.window.WindowContainerTransaction.Change; -import android.window.WindowContainerTransaction.HierarchyOp; - -import androidx.test.filters.SmallTest; - -import com.android.dx.mockito.inline.extended.StaticMockitoSession; -import com.android.wm.shell.MockToken; -import com.android.wm.shell.RootTaskDisplayAreaOrganizer; -import com.android.wm.shell.ShellTaskOrganizer; -import com.android.wm.shell.ShellTestCase; -import com.android.wm.shell.TestShellExecutor; -import com.android.wm.shell.common.ShellExecutor; -import com.android.wm.shell.sysui.ShellController; -import com.android.wm.shell.sysui.ShellInit; -import com.android.wm.shell.transition.Transitions; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.Mockito; - -import java.util.ArrayList; -import java.util.Arrays; - -@SmallTest -@RunWith(AndroidTestingRunner.class) -public class DesktopModeControllerTest extends ShellTestCase { - - private static final int SECOND_DISPLAY = 2; - - @Mock - private ShellController mShellController; - @Mock - private ShellTaskOrganizer mShellTaskOrganizer; - @Mock - private RootTaskDisplayAreaOrganizer mRootTaskDisplayAreaOrganizer; - @Mock - private ShellExecutor mTestExecutor; - @Mock - private Handler mMockHandler; - @Mock - private Transitions mTransitions; - private DesktopModeController mController; - private DesktopModeTaskRepository mDesktopModeTaskRepository; - private ShellInit mShellInit; - private StaticMockitoSession mMockitoSession; - - @Before - public void setUp() { - mMockitoSession = mockitoSession().mockStatic(DesktopModeStatus.class).startMocking(); - when(DesktopModeStatus.isProto1Enabled()).thenReturn(true); - when(DesktopModeStatus.isActive(any())).thenReturn(true); - - mShellInit = Mockito.spy(new ShellInit(mTestExecutor)); - - mDesktopModeTaskRepository = new DesktopModeTaskRepository(); - - mController = createController(); - - when(mShellTaskOrganizer.getRunningTasks(anyInt())).thenReturn(new ArrayList<>()); - - mShellInit.init(); - clearInvocations(mShellTaskOrganizer); - clearInvocations(mRootTaskDisplayAreaOrganizer); - clearInvocations(mTransitions); - } - - @After - public void tearDown() { - mMockitoSession.finishMocking(); - } - - @Test - public void instantiate_addInitCallback() { - verify(mShellInit).addInitCallback(any(), any()); - } - - @Test - public void instantiate_flagOff_doNotAddInitCallback() { - when(DesktopModeStatus.isProto1Enabled()).thenReturn(false); - clearInvocations(mShellInit); - - createController(); - - verify(mShellInit, never()).addInitCallback(any(), any()); - } - - @Test - public void testDesktopModeEnabled_rootTdaSetToFreeform() { - DisplayAreaInfo displayAreaInfo = createMockDisplayArea(); - - mController.updateDesktopModeActive(true); - WindowContainerTransaction wct = getDesktopModeSwitchTransaction(); - - // 1 change: Root TDA windowing mode - assertThat(wct.getChanges().size()).isEqualTo(1); - // Verify WCT has a change for setting windowing mode to freeform - Change change = wct.getChanges().get(displayAreaInfo.token.asBinder()); - assertThat(change).isNotNull(); - assertThat(change.getWindowingMode()).isEqualTo(WINDOWING_MODE_FREEFORM); - } - - @Test - public void testDesktopModeDisabled_rootTdaSetToFullscreen() { - DisplayAreaInfo displayAreaInfo = createMockDisplayArea(); - - mController.updateDesktopModeActive(false); - WindowContainerTransaction wct = getDesktopModeSwitchTransaction(); - - // 1 change: Root TDA windowing mode - assertThat(wct.getChanges().size()).isEqualTo(1); - // Verify WCT has a change for setting windowing mode to fullscreen - Change change = wct.getChanges().get(displayAreaInfo.token.asBinder()); - assertThat(change).isNotNull(); - assertThat(change.getWindowingMode()).isEqualTo(WINDOWING_MODE_FULLSCREEN); - } - - @Test - public void testDesktopModeEnabled_windowingModeCleared() { - createMockDisplayArea(); - RunningTaskInfo freeformTask = createFreeformTask(); - RunningTaskInfo fullscreenTask = createFullscreenTask(); - RunningTaskInfo homeTask = createHomeTask(); - when(mShellTaskOrganizer.getRunningTasks(anyInt())).thenReturn(new ArrayList<>( - Arrays.asList(freeformTask, fullscreenTask, homeTask))); - - mController.updateDesktopModeActive(true); - WindowContainerTransaction wct = getDesktopModeSwitchTransaction(); - - // 2 changes: Root TDA windowing mode and 1 task - assertThat(wct.getChanges().size()).isEqualTo(2); - // No changes for tasks that are not standard or freeform - assertThat(wct.getChanges().get(fullscreenTask.token.asBinder())).isNull(); - assertThat(wct.getChanges().get(homeTask.token.asBinder())).isNull(); - // Standard freeform task has windowing mode cleared - Change change = wct.getChanges().get(freeformTask.token.asBinder()); - assertThat(change).isNotNull(); - assertThat(change.getWindowingMode()).isEqualTo(WINDOWING_MODE_UNDEFINED); - } - - @Test - public void testDesktopModeDisabled_windowingModeAndBoundsCleared() { - createMockDisplayArea(); - RunningTaskInfo freeformTask = createFreeformTask(); - RunningTaskInfo fullscreenTask = createFullscreenTask(); - RunningTaskInfo homeTask = createHomeTask(); - when(mShellTaskOrganizer.getRunningTasks(anyInt())).thenReturn(new ArrayList<>( - Arrays.asList(freeformTask, fullscreenTask, homeTask))); - - mController.updateDesktopModeActive(false); - WindowContainerTransaction wct = getDesktopModeSwitchTransaction(); - - // 3 changes: Root TDA windowing mode and 2 tasks - assertThat(wct.getChanges().size()).isEqualTo(3); - // No changes to home task - assertThat(wct.getChanges().get(homeTask.token.asBinder())).isNull(); - // Standard tasks have bounds cleared - assertThatBoundsCleared(wct.getChanges().get(freeformTask.token.asBinder())); - assertThatBoundsCleared(wct.getChanges().get(fullscreenTask.token.asBinder())); - // Freeform standard tasks have windowing mode cleared - assertThat(wct.getChanges().get( - freeformTask.token.asBinder()).getWindowingMode()).isEqualTo( - WINDOWING_MODE_UNDEFINED); - } - - @Test - public void testDesktopModeEnabled_homeTaskBehindVisibleTask() { - createMockDisplayArea(); - RunningTaskInfo fullscreenTask1 = createFullscreenTask(); - fullscreenTask1.isVisible = true; - RunningTaskInfo fullscreenTask2 = createFullscreenTask(); - fullscreenTask2.isVisible = false; - RunningTaskInfo homeTask = createHomeTask(); - when(mShellTaskOrganizer.getRunningTasks(anyInt())).thenReturn(new ArrayList<>( - Arrays.asList(fullscreenTask1, fullscreenTask2, homeTask))); - - mController.updateDesktopModeActive(true); - WindowContainerTransaction wct = getDesktopModeSwitchTransaction(); - - // Check that there are hierarchy changes for home task and visible task - assertThat(wct.getHierarchyOps()).hasSize(2); - // First show home task - HierarchyOp op1 = wct.getHierarchyOps().get(0); - assertThat(op1.getType()).isEqualTo(HIERARCHY_OP_TYPE_REORDER); - assertThat(op1.getContainer()).isEqualTo(homeTask.token.asBinder()); - - // Then visible task on top of it - HierarchyOp op2 = wct.getHierarchyOps().get(1); - assertThat(op2.getType()).isEqualTo(HIERARCHY_OP_TYPE_REORDER); - assertThat(op2.getContainer()).isEqualTo(fullscreenTask1.token.asBinder()); - } - - @Test - public void testShowDesktopApps_allAppsInvisible_bringsToFront() { - // Set up two active tasks on desktop, task2 is on top of task1. - RunningTaskInfo freeformTask1 = createFreeformTask(); - mDesktopModeTaskRepository.addActiveTask(DEFAULT_DISPLAY, freeformTask1.taskId); - mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(freeformTask1.taskId); - mDesktopModeTaskRepository.updateVisibleFreeformTasks( - DEFAULT_DISPLAY, freeformTask1.taskId, false /* visible */); - RunningTaskInfo freeformTask2 = createFreeformTask(); - mDesktopModeTaskRepository.addActiveTask(DEFAULT_DISPLAY, freeformTask2.taskId); - mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(freeformTask2.taskId); - mDesktopModeTaskRepository.updateVisibleFreeformTasks( - DEFAULT_DISPLAY, freeformTask2.taskId, false /* visible */); - when(mShellTaskOrganizer.getRunningTaskInfo(freeformTask1.taskId)).thenReturn( - freeformTask1); - when(mShellTaskOrganizer.getRunningTaskInfo(freeformTask2.taskId)).thenReturn( - freeformTask2); - - // Run show desktop apps logic - mController.showDesktopApps(DEFAULT_DISPLAY); - - final WindowContainerTransaction wct = getBringAppsToFrontTransaction(); - // Check wct has reorder calls - assertThat(wct.getHierarchyOps()).hasSize(2); - - // Task 1 appeared first, must be first reorder to top. - HierarchyOp op1 = wct.getHierarchyOps().get(0); - assertThat(op1.getType()).isEqualTo(HIERARCHY_OP_TYPE_REORDER); - assertThat(op1.getContainer()).isEqualTo(freeformTask1.token.asBinder()); - - // Task 2 appeared last, must be last reorder to top. - HierarchyOp op2 = wct.getHierarchyOps().get(1); - assertThat(op2.getType()).isEqualTo(HIERARCHY_OP_TYPE_REORDER); - assertThat(op2.getContainer()).isEqualTo(freeformTask2.token.asBinder()); - } - - @Test - public void testShowDesktopApps_appsAlreadyVisible_bringsToFront() { - final RunningTaskInfo task1 = createFreeformTask(); - mDesktopModeTaskRepository.addActiveTask(DEFAULT_DISPLAY, task1.taskId); - mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(task1.taskId); - mDesktopModeTaskRepository.updateVisibleFreeformTasks(DEFAULT_DISPLAY, task1.taskId, - true /* visible */); - when(mShellTaskOrganizer.getRunningTaskInfo(task1.taskId)).thenReturn(task1); - final RunningTaskInfo task2 = createFreeformTask(); - mDesktopModeTaskRepository.addActiveTask(DEFAULT_DISPLAY, task2.taskId); - mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(task2.taskId); - mDesktopModeTaskRepository.updateVisibleFreeformTasks(DEFAULT_DISPLAY, task2.taskId, - true /* visible */); - when(mShellTaskOrganizer.getRunningTaskInfo(task2.taskId)).thenReturn(task2); - - mController.showDesktopApps(DEFAULT_DISPLAY); - - final WindowContainerTransaction wct = getBringAppsToFrontTransaction(); - // Check wct has reorder calls - assertThat(wct.getHierarchyOps()).hasSize(2); - // Task 1 appeared first, must be first reorder to top. - HierarchyOp op1 = wct.getHierarchyOps().get(0); - assertThat(op1.getType()).isEqualTo(HIERARCHY_OP_TYPE_REORDER); - assertThat(op1.getContainer()).isEqualTo(task1.token.asBinder()); - - // Task 2 appeared last, must be last reorder to top. - HierarchyOp op2 = wct.getHierarchyOps().get(1); - assertThat(op2.getType()).isEqualTo(HIERARCHY_OP_TYPE_REORDER); - assertThat(op2.getContainer()).isEqualTo(task2.token.asBinder()); - } - - @Test - public void testShowDesktopApps_someAppsInvisible_reordersAll() { - final RunningTaskInfo task1 = createFreeformTask(); - mDesktopModeTaskRepository.addActiveTask(DEFAULT_DISPLAY, task1.taskId); - mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(task1.taskId); - mDesktopModeTaskRepository.updateVisibleFreeformTasks(DEFAULT_DISPLAY, task1.taskId, - false /* visible */); - when(mShellTaskOrganizer.getRunningTaskInfo(task1.taskId)).thenReturn(task1); - final RunningTaskInfo task2 = createFreeformTask(); - mDesktopModeTaskRepository.addActiveTask(DEFAULT_DISPLAY, task2.taskId); - mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(task2.taskId); - mDesktopModeTaskRepository.updateVisibleFreeformTasks(DEFAULT_DISPLAY, task2.taskId, - true /* visible */); - when(mShellTaskOrganizer.getRunningTaskInfo(task2.taskId)).thenReturn(task2); - - mController.showDesktopApps(DEFAULT_DISPLAY); - - final WindowContainerTransaction wct = getBringAppsToFrontTransaction(); - // Both tasks should be reordered to top, even if one was already visible. - assertThat(wct.getHierarchyOps()).hasSize(2); - final HierarchyOp op1 = wct.getHierarchyOps().get(0); - assertThat(op1.getType()).isEqualTo(HIERARCHY_OP_TYPE_REORDER); - assertThat(op1.getContainer()).isEqualTo(task1.token.asBinder()); - final HierarchyOp op2 = wct.getHierarchyOps().get(1); - assertThat(op2.getType()).isEqualTo(HIERARCHY_OP_TYPE_REORDER); - assertThat(op2.getContainer()).isEqualTo(task2.token.asBinder()); - } - - @Test - public void testShowDesktopApps_twoDisplays_bringsToFrontOnlyOneDisplay() { - RunningTaskInfo taskDefaultDisplay = createFreeformTask(DEFAULT_DISPLAY); - mDesktopModeTaskRepository.addActiveTask(DEFAULT_DISPLAY, taskDefaultDisplay.taskId); - mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(taskDefaultDisplay.taskId); - mDesktopModeTaskRepository.updateVisibleFreeformTasks( - DEFAULT_DISPLAY, taskDefaultDisplay.taskId, false /* visible */); - when(mShellTaskOrganizer.getRunningTaskInfo(taskDefaultDisplay.taskId)).thenReturn( - taskDefaultDisplay); - - RunningTaskInfo taskSecondDisplay = createFreeformTask(SECOND_DISPLAY); - mDesktopModeTaskRepository.addActiveTask(SECOND_DISPLAY, taskSecondDisplay.taskId); - mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(taskSecondDisplay.taskId); - mDesktopModeTaskRepository.updateVisibleFreeformTasks( - SECOND_DISPLAY, taskSecondDisplay.taskId, false /* visible */); - when(mShellTaskOrganizer.getRunningTaskInfo(taskSecondDisplay.taskId)).thenReturn( - taskSecondDisplay); - - mController.showDesktopApps(DEFAULT_DISPLAY); - - WindowContainerTransaction wct = getBringAppsToFrontTransaction(); - assertThat(wct.getHierarchyOps()).hasSize(1); - HierarchyOp op = wct.getHierarchyOps().get(0); - assertThat(op.getContainer()).isEqualTo(taskDefaultDisplay.token.asBinder()); - } - - @Test - public void testGetVisibleTaskCount_noTasks_returnsZero() { - assertThat(mController.getVisibleTaskCount(DEFAULT_DISPLAY)).isEqualTo(0); - } - - @Test - public void testGetVisibleTaskCount_twoTasks_bothVisible_returnsTwo() { - RunningTaskInfo task1 = createFreeformTask(); - mDesktopModeTaskRepository.addActiveTask(DEFAULT_DISPLAY, task1.taskId); - mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(task1.taskId); - mDesktopModeTaskRepository.updateVisibleFreeformTasks(DEFAULT_DISPLAY, task1.taskId, - true /* visible */); - - RunningTaskInfo task2 = createFreeformTask(); - mDesktopModeTaskRepository.addActiveTask(DEFAULT_DISPLAY, task2.taskId); - mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(task2.taskId); - mDesktopModeTaskRepository.updateVisibleFreeformTasks(DEFAULT_DISPLAY, task2.taskId, - true /* visible */); - - assertThat(mController.getVisibleTaskCount(DEFAULT_DISPLAY)).isEqualTo(2); - } - - @Test - public void testGetVisibleTaskCount_twoTasks_oneVisible_returnsOne() { - RunningTaskInfo task1 = createFreeformTask(); - mDesktopModeTaskRepository.addActiveTask(DEFAULT_DISPLAY, task1.taskId); - mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(task1.taskId); - mDesktopModeTaskRepository.updateVisibleFreeformTasks(DEFAULT_DISPLAY, task1.taskId, - true /* visible */); - - RunningTaskInfo task2 = createFreeformTask(); - mDesktopModeTaskRepository.addActiveTask(DEFAULT_DISPLAY, task2.taskId); - mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(task2.taskId); - mDesktopModeTaskRepository.updateVisibleFreeformTasks(DEFAULT_DISPLAY, task2.taskId, - false /* visible */); - - assertThat(mController.getVisibleTaskCount(DEFAULT_DISPLAY)).isEqualTo(1); - } - - @Test - public void testGetVisibleTaskCount_twoTasksVisibleOnDifferentDisplays_returnsOne() { - RunningTaskInfo taskDefaultDisplay = createFreeformTask(); - mDesktopModeTaskRepository.addActiveTask(DEFAULT_DISPLAY, taskDefaultDisplay.taskId); - mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(taskDefaultDisplay.taskId); - mDesktopModeTaskRepository.updateVisibleFreeformTasks(DEFAULT_DISPLAY, - taskDefaultDisplay.taskId, - true /* visible */); - - RunningTaskInfo taskSecondDisplay = createFreeformTask(); - mDesktopModeTaskRepository.addActiveTask(SECOND_DISPLAY, taskSecondDisplay.taskId); - mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(taskSecondDisplay.taskId); - mDesktopModeTaskRepository.updateVisibleFreeformTasks(SECOND_DISPLAY, - taskSecondDisplay.taskId, - true /* visible */); - - assertThat(mController.getVisibleTaskCount(SECOND_DISPLAY)).isEqualTo(1); - } - - @Test - public void testHandleTransitionRequest_desktopModeNotActive_returnsNull() { - when(DesktopModeStatus.isActive(any())).thenReturn(false); - WindowContainerTransaction wct = mController.handleRequest( - new Binder(), - new TransitionRequestInfo(TRANSIT_OPEN, null /* trigger */, null /* remote */)); - assertThat(wct).isNull(); - } - - @Test - public void testHandleTransitionRequest_unsupportedTransit_returnsNull() { - WindowContainerTransaction wct = mController.handleRequest( - new Binder(), - new TransitionRequestInfo(TRANSIT_CLOSE, null /* trigger */, null /* remote */)); - assertThat(wct).isNull(); - } - - @Test - public void testHandleTransitionRequest_notFreeform_returnsNull() { - RunningTaskInfo trigger = new RunningTaskInfo(); - trigger.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FULLSCREEN); - WindowContainerTransaction wct = mController.handleRequest( - new Binder(), - new TransitionRequestInfo(TRANSIT_TO_FRONT, trigger, null /* remote */)); - assertThat(wct).isNull(); - } - - @Test - public void testHandleTransitionRequest_taskOpen_returnsWct() { - RunningTaskInfo trigger = new RunningTaskInfo(); - trigger.token = new MockToken().token(); - trigger.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FREEFORM); - WindowContainerTransaction wct = mController.handleRequest( - mock(IBinder.class), - new TransitionRequestInfo(TRANSIT_OPEN, trigger, null /* remote */)); - assertThat(wct).isNotNull(); - } - - @Test - public void testHandleTransitionRequest_taskToFront_returnsWct() { - RunningTaskInfo trigger = new RunningTaskInfo(); - trigger.token = new MockToken().token(); - trigger.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FREEFORM); - WindowContainerTransaction wct = mController.handleRequest( - mock(IBinder.class), - new TransitionRequestInfo(TRANSIT_TO_FRONT, trigger, null /* remote */)); - assertThat(wct).isNotNull(); - } - - @Test - public void testHandleTransitionRequest_taskOpen_doesNotStartAnotherTransition() { - RunningTaskInfo trigger = new RunningTaskInfo(); - trigger.token = new MockToken().token(); - trigger.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FREEFORM); - mController.handleRequest( - mock(IBinder.class), - new TransitionRequestInfo(TRANSIT_OPEN, trigger, null /* remote */)); - verifyZeroInteractions(mTransitions); - } - - private DesktopModeController createController() { - return new DesktopModeController(mContext, mShellInit, mShellController, - mShellTaskOrganizer, mRootTaskDisplayAreaOrganizer, mTransitions, - mDesktopModeTaskRepository, mMockHandler, new TestShellExecutor()); - } - - private DisplayAreaInfo createMockDisplayArea() { - DisplayAreaInfo displayAreaInfo = new DisplayAreaInfo(new MockToken().token(), - mContext.getDisplayId(), 0); - when(mRootTaskDisplayAreaOrganizer.getDisplayAreaInfo(mContext.getDisplayId())) - .thenReturn(displayAreaInfo); - return displayAreaInfo; - } - - private WindowContainerTransaction getDesktopModeSwitchTransaction() { - ArgumentCaptor<WindowContainerTransaction> arg = ArgumentCaptor.forClass( - WindowContainerTransaction.class); - if (Transitions.ENABLE_SHELL_TRANSITIONS) { - verify(mTransitions).startTransition(eq(TRANSIT_CHANGE), arg.capture(), any()); - } else { - verify(mRootTaskDisplayAreaOrganizer).applyTransaction(arg.capture()); - } - return arg.getValue(); - } - - private WindowContainerTransaction getBringAppsToFrontTransaction() { - final ArgumentCaptor<WindowContainerTransaction> arg = ArgumentCaptor.forClass( - WindowContainerTransaction.class); - if (Transitions.ENABLE_SHELL_TRANSITIONS) { - verify(mTransitions).startTransition(eq(TRANSIT_NONE), arg.capture(), any()); - } else { - verify(mShellTaskOrganizer).applyTransaction(arg.capture()); - } - return arg.getValue(); - } - - private void assertThatBoundsCleared(Change change) { - assertThat((change.getWindowSetMask() & WINDOW_CONFIG_BOUNDS) != 0).isTrue(); - assertThat(change.getConfiguration().windowConfiguration.getBounds().isEmpty()).isTrue(); - } - -} diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt index 5d87cf8b25a6..be4a287bff9d 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt @@ -107,7 +107,7 @@ class DesktopTasksControllerTest : ShellTestCase() { @Before fun setUp() { mockitoSession = mockitoSession().mockStatic(DesktopModeStatus::class.java).startMocking() - whenever(DesktopModeStatus.isProto2Enabled()).thenReturn(true) + whenever(DesktopModeStatus.isEnabled()).thenReturn(true) shellInit = Mockito.spy(ShellInit(testExecutor)) desktopModeTaskRepository = DesktopModeTaskRepository() @@ -154,7 +154,7 @@ class DesktopTasksControllerTest : ShellTestCase() { @Test fun instantiate_flagOff_doNotAddInitCallback() { - whenever(DesktopModeStatus.isProto2Enabled()).thenReturn(false) + whenever(DesktopModeStatus.isEnabled()).thenReturn(false) clearInvocations(shellInit) createController() diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java index 9e9e1ca341eb..40ce7859cc7f 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java @@ -257,7 +257,7 @@ public class RecentTasksControllerTest extends ShellTestCase { public void testGetRecentTasks_hasActiveDesktopTasks_proto2Enabled_groupFreeformTasks() { StaticMockitoSession mockitoSession = mockitoSession().mockStatic( DesktopModeStatus.class).startMocking(); - when(DesktopModeStatus.isProto2Enabled()).thenReturn(true); + when(DesktopModeStatus.isEnabled()).thenReturn(true); ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1); ActivityManager.RecentTaskInfo t2 = makeTaskInfo(2); @@ -297,7 +297,7 @@ public class RecentTasksControllerTest extends ShellTestCase { public void testGetRecentTasks_hasActiveDesktopTasks_proto2Disabled_doNotGroupFreeformTasks() { StaticMockitoSession mockitoSession = mockitoSession().mockStatic( DesktopModeStatus.class).startMocking(); - when(DesktopModeStatus.isProto2Enabled()).thenReturn(false); + when(DesktopModeStatus.isEnabled()).thenReturn(false); ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1); ActivityManager.RecentTaskInfo t2 = makeTaskInfo(2); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.java index 7f0465a24a18..d8afe68bac22 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.java @@ -55,7 +55,6 @@ import com.android.wm.shell.TestRunningTaskInfoBuilder; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.SyncTransactionQueue; -import com.android.wm.shell.desktopmode.DesktopModeController; import com.android.wm.shell.desktopmode.DesktopTasksController; import com.android.wm.shell.sysui.ShellController; import com.android.wm.shell.sysui.ShellInit; @@ -88,7 +87,6 @@ public class DesktopModeWindowDecorViewModelTests extends ShellTestCase { @Mock private DisplayController mDisplayController; @Mock private DisplayLayout mDisplayLayout; @Mock private SyncTransactionQueue mSyncQueue; - @Mock private DesktopModeController mDesktopModeController; @Mock private DesktopTasksController mDesktopTasksController; @Mock private InputMonitor mInputMonitor; @Mock private InputManager mInputManager; @@ -121,7 +119,6 @@ public class DesktopModeWindowDecorViewModelTests extends ShellTestCase { mShellController, mSyncQueue, mTransitions, - Optional.of(mDesktopModeController), Optional.of(mDesktopTasksController), mDesktopModeWindowDecorFactory, mMockInputMonitorFactory, diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DragPositioningCallbackUtilityTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DragPositioningCallbackUtilityTest.kt index de46b31879ed..5c0e04aecf6c 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DragPositioningCallbackUtilityTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DragPositioningCallbackUtilityTest.kt @@ -76,7 +76,7 @@ class DragPositioningCallbackUtilityTest { minHeight = MIN_HEIGHT defaultMinSize = DEFAULT_MIN displayId = DISPLAY_ID - configuration.windowConfiguration.bounds = STARTING_BOUNDS + configuration.windowConfiguration.setBounds(STARTING_BOUNDS) } mockWindowDecoration.mDisplay = mockDisplay whenever(mockDisplay.displayId).thenAnswer { DISPLAY_ID } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/FluidResizeTaskPositionerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/FluidResizeTaskPositionerTest.kt index 6f0599aa8243..c0c4498e3ebf 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/FluidResizeTaskPositionerTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/FluidResizeTaskPositionerTest.kt @@ -88,7 +88,7 @@ class FluidResizeTaskPositionerTest : ShellTestCase() { minHeight = MIN_HEIGHT defaultMinSize = DEFAULT_MIN displayId = DISPLAY_ID - configuration.windowConfiguration.bounds = STARTING_BOUNDS + configuration.windowConfiguration.setBounds(STARTING_BOUNDS) } mockWindowDecoration.mDisplay = mockDisplay whenever(mockDisplay.displayId).thenAnswer { DISPLAY_ID } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/VeiledResizeTaskPositionerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/VeiledResizeTaskPositionerTest.kt index 3465ddd9d101..8913453aa578 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/VeiledResizeTaskPositionerTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/VeiledResizeTaskPositionerTest.kt @@ -104,7 +104,7 @@ class VeiledResizeTaskPositionerTest : ShellTestCase() { minHeight = MIN_HEIGHT defaultMinSize = DEFAULT_MIN displayId = DISPLAY_ID - configuration.windowConfiguration.bounds = STARTING_BOUNDS + configuration.windowConfiguration.setBounds(STARTING_BOUNDS) } mockDesktopWindowDecoration.mDisplay = mockDisplay whenever(mockDisplay.displayId).thenAnswer { DISPLAY_ID } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java index 7fc1c99bb44e..76bc25aa66ef 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java @@ -39,6 +39,7 @@ import static org.mockito.Mockito.when; import android.app.ActivityManager; import android.content.Context; +import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Point; @@ -116,6 +117,7 @@ public class WindowDecorationTests extends ShellTestCase { private SurfaceControl.Transaction mMockSurfaceControlFinishT; private SurfaceControl.Transaction mMockSurfaceControlAddWindowT; private WindowDecoration.RelayoutParams mRelayoutParams = new WindowDecoration.RelayoutParams(); + private Configuration mWindowConfiguration = new Configuration(); private int mCaptionMenuWidthId; private int mCaptionMenuShadowRadiusId; private int mCaptionMenuCornerRadiusId; @@ -296,6 +298,7 @@ public class WindowDecorationTests extends ShellTestCase { taskInfo.isFocused = true; // Density is 2. Shadow radius is 10px. Caption height is 64px. taskInfo.configuration.densityDpi = DisplayMetrics.DENSITY_DEFAULT * 2; + mWindowConfiguration.densityDpi = taskInfo.configuration.densityDpi; final SurfaceControl taskSurface = mock(SurfaceControl.class); final TestWindowDecoration windowDecor = createWindowDecoration(taskInfo, taskSurface); @@ -516,7 +519,7 @@ public class WindowDecorationTests extends ShellTestCase { private TestWindowDecoration createWindowDecoration( ActivityManager.RunningTaskInfo taskInfo, SurfaceControl testSurface) { return new TestWindowDecoration(mContext, mMockDisplayController, mMockShellTaskOrganizer, - taskInfo, testSurface, + taskInfo, testSurface, mWindowConfiguration, new MockObjectSupplier<>(mMockSurfaceControlBuilders, () -> createMockSurfaceControlBuilder(mock(SurfaceControl.class))), new MockObjectSupplier<>(mMockSurfaceControlTransactions, @@ -556,13 +559,15 @@ public class WindowDecorationTests extends ShellTestCase { TestWindowDecoration(Context context, DisplayController displayController, ShellTaskOrganizer taskOrganizer, ActivityManager.RunningTaskInfo taskInfo, SurfaceControl taskSurface, + Configuration windowConfiguration, Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier, Supplier<SurfaceControl.Transaction> surfaceControlTransactionSupplier, Supplier<WindowContainerTransaction> windowContainerTransactionSupplier, SurfaceControlViewHostFactory surfaceControlViewHostFactory) { super(context, displayController, taskOrganizer, taskInfo, taskSurface, - surfaceControlBuilderSupplier, surfaceControlTransactionSupplier, - windowContainerTransactionSupplier, surfaceControlViewHostFactory); + windowConfiguration, surfaceControlBuilderSupplier, + surfaceControlTransactionSupplier, windowContainerTransactionSupplier, + surfaceControlViewHostFactory); } @Override diff --git a/libs/androidfw/tests/ConfigDescription_test.cpp b/libs/androidfw/tests/ConfigDescription_test.cpp index ec478b0900ef..07bd17568993 100644 --- a/libs/androidfw/tests/ConfigDescription_test.cpp +++ b/libs/androidfw/tests/ConfigDescription_test.cpp @@ -159,17 +159,17 @@ TEST(ConfigDescriptionTest, TestGrammaticalGenderQualifier) { EXPECT_TRUE(TestParse("feminine", &config)); EXPECT_EQ(android::ResTable_config::GRAMMATICAL_GENDER_FEMININE, config.grammaticalInflection); EXPECT_EQ(SDK_U, config.sdkVersion); - EXPECT_EQ(std::string("feminine-v34"), config.toString().string()); + EXPECT_EQ(std::string("feminine-v34"), config.toString().c_str()); EXPECT_TRUE(TestParse("masculine", &config)); EXPECT_EQ(android::ResTable_config::GRAMMATICAL_GENDER_MASCULINE, config.grammaticalInflection); EXPECT_EQ(SDK_U, config.sdkVersion); - EXPECT_EQ(std::string("masculine-v34"), config.toString().string()); + EXPECT_EQ(std::string("masculine-v34"), config.toString().c_str()); EXPECT_TRUE(TestParse("neuter", &config)); EXPECT_EQ(android::ResTable_config::GRAMMATICAL_GENDER_NEUTER, config.grammaticalInflection); EXPECT_EQ(SDK_U, config.sdkVersion); - EXPECT_EQ(std::string("neuter-v34"), config.toString().string()); + EXPECT_EQ(std::string("neuter-v34"), config.toString().c_str()); } } // namespace android diff --git a/libs/androidfw/tests/ResTable_test.cpp b/libs/androidfw/tests/ResTable_test.cpp index 945981b981a0..faac51403203 100644 --- a/libs/androidfw/tests/ResTable_test.cpp +++ b/libs/androidfw/tests/ResTable_test.cpp @@ -468,7 +468,7 @@ TEST_P(ResTableParameterizedTest, ShouldLoadSparseEntriesSuccessfully) { String16 name(u"com.android.sparse:integer/foo_9"); uint32_t flags; uint32_t resid = - table.identifierForName(name.string(), name.size(), nullptr, 0, nullptr, 0, &flags); + table.identifierForName(name.c_str(), name.size(), nullptr, 0, nullptr, 0, &flags); ASSERT_NE(0u, resid); Res_value val; diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp index e2b541aa5ecb..ee3b2e48fe4b 100644 --- a/libs/hwui/renderthread/VulkanManager.cpp +++ b/libs/hwui/renderthread/VulkanManager.cpp @@ -25,6 +25,7 @@ #include <android/sync.h> #include <gui/TraceUtils.h> #include <include/gpu/ganesh/SkSurfaceGanesh.h> +#include <include/gpu/ganesh/vk/GrVkBackendSurface.h> #include <ui/FatVector.h> #include <vk/GrVkExtensions.h> #include <vk/GrVkTypes.h> @@ -599,7 +600,7 @@ nsecs_t VulkanManager::finishFrame(SkSurface* surface) { surface, SkSurfaces::BackendHandleAccess::kFlushRead); if (backendRenderTarget.isValid()) { GrVkImageInfo info; - if (backendRenderTarget.getVkImageInfo(&info)) { + if (GrBackendRenderTargets::GetVkImageInfo(backendRenderTarget, &info)) { image = info.fImage; } else { ALOGE("Frame boundary: backend is not vulkan"); |