From 04b90c0fcb316c830f7dc66475ff85c6760402f5 Mon Sep 17 00:00:00 2001 From: vadimt Date: Tue, 15 Oct 2019 10:47:51 -0700 Subject: [PATCH 01/41] Test tweaks for the memory activity recreation test Speeding up switching navigation mode by switching from latch (which is not fired) to polling. I'll figure out later why the latch doesn't work. Bug: 139137636 Change-Id: I28a9b2b9a3882919fd2a3280b9804afe1b44a46e --- .../quickstep/NavigationModeSwitchRule.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java b/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java index cd94704228..4ac815e9f7 100644 --- a/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java +++ b/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java @@ -49,7 +49,6 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; /** * Test rule that allows executing a test with Quickstep on and then Quickstep off. @@ -186,11 +185,18 @@ public class NavigationModeSwitchRule implements TestRule { }; targetContext.getMainExecutor().execute(() -> SYS_UI_NAVIGATION_MODE.addModeChangeListener(listener)); - latch.await(60, TimeUnit.SECONDS); + // b/139137636 +// latch.await(60, TimeUnit.SECONDS); targetContext.getMainExecutor().execute(() -> SYS_UI_NAVIGATION_MODE.removeModeChangeListener(listener)); - assertTrue(launcher, "Navigation mode didn't change to " + expectedMode, - currentSysUiNavigationMode() == expectedMode, description); + + Wait.atMost(() -> "Navigation mode didn't change to " + expectedMode, + () -> currentSysUiNavigationMode() == expectedMode, 60000 /* b/148422894 */, + launcher); + // b/139137636 +// assertTrue(launcher, "Navigation mode didn't change to " + expectedMode, +// currentSysUiNavigationMode() == expectedMode, description); + } Wait.atMost("Couldn't switch to " + overlayPackage, From 27409e23d1ba7ca94031de8ff0603c53b86cfcdc Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 26 Feb 2020 16:08:20 -0800 Subject: [PATCH 02/41] Removing SecondaryDisplayLauncher library as it is directly included in Launcher Change-Id: I97a1fad07f2f6d34fc31c720fcc1e03d0f56477e --- SecondaryDisplayLauncher/Android.mk | 39 --- SecondaryDisplayLauncher/AndroidManifest.xml | 40 --- .../res/drawable/ic_apps.xml | 22 -- .../res/drawable/ic_settings.xml | 22 -- .../secondary_display_launcher.xml | 56 ----- .../secondary_display_launcher.xml | 57 ----- .../res/layout/app_grid_item.xml | 35 --- .../res/layout/app_picker_dialog.xml | 34 --- .../res/layout/app_picker_layout.xml | 46 ---- .../res/layout/secondary_display_launcher.xml | 56 ----- .../res/menu/context_menu.xml | 23 -- .../res/values-af/strings.xml | 25 -- .../res/values-am/strings.xml | 25 -- .../res/values-ar/strings.xml | 25 -- .../res/values-as/strings.xml | 25 -- .../res/values-az/strings.xml | 25 -- .../res/values-b+sr+Latn/strings.xml | 25 -- .../res/values-be/strings.xml | 25 -- .../res/values-bg/strings.xml | 25 -- .../res/values-bn/strings.xml | 25 -- .../res/values-bs/strings.xml | 25 -- .../res/values-ca/strings.xml | 25 -- .../res/values-cs/strings.xml | 25 -- .../res/values-da/strings.xml | 25 -- .../res/values-de/strings.xml | 25 -- .../res/values-el/strings.xml | 25 -- .../res/values-en-rAU/strings.xml | 25 -- .../res/values-en-rGB/strings.xml | 25 -- .../res/values-en-rIN/strings.xml | 25 -- .../res/values-es-rUS/strings.xml | 25 -- .../res/values-es/strings.xml | 25 -- .../res/values-et/strings.xml | 25 -- .../res/values-eu/strings.xml | 25 -- .../res/values-fa/strings.xml | 25 -- .../res/values-fi/strings.xml | 25 -- .../res/values-fr-rCA/strings.xml | 25 -- .../res/values-fr/strings.xml | 25 -- .../res/values-gl/strings.xml | 25 -- .../res/values-gu/strings.xml | 25 -- .../res/values-hi/strings.xml | 25 -- .../res/values-hr/strings.xml | 25 -- .../res/values-hu/strings.xml | 25 -- .../res/values-hy/strings.xml | 25 -- .../res/values-in/strings.xml | 25 -- .../res/values-is/strings.xml | 25 -- .../res/values-it/strings.xml | 25 -- .../res/values-iw/strings.xml | 25 -- .../res/values-ja/strings.xml | 25 -- .../res/values-ka/strings.xml | 25 -- .../res/values-kk/strings.xml | 25 -- .../res/values-km/strings.xml | 25 -- .../res/values-kn/strings.xml | 25 -- .../res/values-ko/strings.xml | 25 -- .../res/values-ky/strings.xml | 25 -- .../res/values-lo/strings.xml | 25 -- .../res/values-lt/strings.xml | 25 -- .../res/values-lv/strings.xml | 25 -- .../res/values-mk/strings.xml | 25 -- .../res/values-ml/strings.xml | 25 -- .../res/values-mn/strings.xml | 25 -- .../res/values-mr/strings.xml | 25 -- .../res/values-ms/strings.xml | 25 -- .../res/values-my/strings.xml | 25 -- .../res/values-nb/strings.xml | 25 -- .../res/values-ne/strings.xml | 25 -- .../res/values-nl/strings.xml | 25 -- .../res/values-or/strings.xml | 25 -- .../res/values-pa/strings.xml | 25 -- .../res/values-pl/strings.xml | 25 -- .../res/values-pt-rPT/strings.xml | 25 -- .../res/values-pt/strings.xml | 25 -- .../res/values-ro/strings.xml | 25 -- .../res/values-ru/strings.xml | 25 -- .../res/values-si/strings.xml | 25 -- .../res/values-sk/strings.xml | 25 -- .../res/values-sl/strings.xml | 25 -- .../res/values-sq/strings.xml | 25 -- .../res/values-sr/strings.xml | 25 -- .../res/values-sv/strings.xml | 25 -- .../res/values-sw/strings.xml | 25 -- .../res/values-sw600dp/dimens.xml | 22 -- .../res/values-sw720dp/dimens.xml | 22 -- .../res/values-ta/strings.xml | 25 -- .../res/values-te/strings.xml | 25 -- .../res/values-th/strings.xml | 25 -- .../res/values-tl/strings.xml | 25 -- .../res/values-tr/strings.xml | 25 -- .../res/values-uk/strings.xml | 25 -- .../res/values-ur/strings.xml | 25 -- .../res/values-uz/strings.xml | 25 -- .../res/values-vi/strings.xml | 25 -- .../res/values-zh-rCN/strings.xml | 25 -- .../res/values-zh-rHK/strings.xml | 25 -- .../res/values-zh-rTW/strings.xml | 25 -- .../res/values-zu/strings.xml | 25 -- .../res/values/colors.xml | 22 -- .../res/values/dimens.xml | 31 --- .../res/values/strings.xml | 24 -- .../res/values/styles.xml | 30 --- .../src/com/android/launcher3/AppEntry.java | 58 ----- .../com/android/launcher3/AppListAdapter.java | 63 ----- .../android/launcher3/AppListViewModel.java | 126 ---------- .../launcher3/PinnedAppListViewModel.java | 120 --------- .../launcher3/PinnedAppPickerDialog.java | 74 ------ .../launcher3/SecondaryDisplayLauncher.java | 229 ------------------ 105 files changed, 3301 deletions(-) delete mode 100644 SecondaryDisplayLauncher/Android.mk delete mode 100644 SecondaryDisplayLauncher/AndroidManifest.xml delete mode 100644 SecondaryDisplayLauncher/res/drawable/ic_apps.xml delete mode 100644 SecondaryDisplayLauncher/res/drawable/ic_settings.xml delete mode 100644 SecondaryDisplayLauncher/res/layout-sw600dp/secondary_display_launcher.xml delete mode 100644 SecondaryDisplayLauncher/res/layout-sw720dp/secondary_display_launcher.xml delete mode 100644 SecondaryDisplayLauncher/res/layout/app_grid_item.xml delete mode 100644 SecondaryDisplayLauncher/res/layout/app_picker_dialog.xml delete mode 100644 SecondaryDisplayLauncher/res/layout/app_picker_layout.xml delete mode 100644 SecondaryDisplayLauncher/res/layout/secondary_display_launcher.xml delete mode 100644 SecondaryDisplayLauncher/res/menu/context_menu.xml delete mode 100644 SecondaryDisplayLauncher/res/values-af/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-am/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-ar/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-as/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-az/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-b+sr+Latn/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-be/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-bg/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-bn/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-bs/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-ca/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-cs/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-da/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-de/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-el/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-en-rAU/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-en-rGB/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-en-rIN/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-es-rUS/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-es/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-et/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-eu/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-fa/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-fi/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-fr-rCA/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-fr/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-gl/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-gu/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-hi/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-hr/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-hu/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-hy/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-in/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-is/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-it/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-iw/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-ja/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-ka/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-kk/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-km/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-kn/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-ko/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-ky/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-lo/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-lt/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-lv/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-mk/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-ml/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-mn/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-mr/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-ms/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-my/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-nb/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-ne/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-nl/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-or/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-pa/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-pl/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-pt-rPT/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-pt/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-ro/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-ru/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-si/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-sk/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-sl/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-sq/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-sr/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-sv/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-sw/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-sw600dp/dimens.xml delete mode 100644 SecondaryDisplayLauncher/res/values-sw720dp/dimens.xml delete mode 100644 SecondaryDisplayLauncher/res/values-ta/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-te/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-th/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-tl/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-tr/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-uk/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-ur/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-uz/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-vi/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-zh-rCN/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-zh-rHK/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-zh-rTW/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values-zu/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values/colors.xml delete mode 100644 SecondaryDisplayLauncher/res/values/dimens.xml delete mode 100644 SecondaryDisplayLauncher/res/values/strings.xml delete mode 100644 SecondaryDisplayLauncher/res/values/styles.xml delete mode 100644 SecondaryDisplayLauncher/src/com/android/launcher3/AppEntry.java delete mode 100644 SecondaryDisplayLauncher/src/com/android/launcher3/AppListAdapter.java delete mode 100644 SecondaryDisplayLauncher/src/com/android/launcher3/AppListViewModel.java delete mode 100644 SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppListViewModel.java delete mode 100644 SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppPickerDialog.java delete mode 100644 SecondaryDisplayLauncher/src/com/android/launcher3/SecondaryDisplayLauncher.java diff --git a/SecondaryDisplayLauncher/Android.mk b/SecondaryDisplayLauncher/Android.mk deleted file mode 100644 index 7f305bba57..0000000000 --- a/SecondaryDisplayLauncher/Android.mk +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (C) 2018 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. -# - -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) -LOCAL_USE_AAPT2 := true -LOCAL_AAPT2_ONLY := true -LOCAL_MODULE_TAGS := optional - -LOCAL_STATIC_ANDROID_LIBRARIES := com.google.android.material_material - -LOCAL_STATIC_JAVA_LIBRARIES := LauncherPluginLib - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PROGUARD_ENABLED := disabled - -LOCAL_SDK_VERSION := current -LOCAL_MIN_SDK_VERSION := 21 -LOCAL_MODULE := SecondaryDisplayLauncherLib -LOCAL_PRIVILEGED_MODULE := true - -include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/SecondaryDisplayLauncher/AndroidManifest.xml b/SecondaryDisplayLauncher/AndroidManifest.xml deleted file mode 100644 index ebf6b02cb8..0000000000 --- a/SecondaryDisplayLauncher/AndroidManifest.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/SecondaryDisplayLauncher/res/drawable/ic_apps.xml b/SecondaryDisplayLauncher/res/drawable/ic_apps.xml deleted file mode 100644 index db779c2d12..0000000000 --- a/SecondaryDisplayLauncher/res/drawable/ic_apps.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - diff --git a/SecondaryDisplayLauncher/res/drawable/ic_settings.xml b/SecondaryDisplayLauncher/res/drawable/ic_settings.xml deleted file mode 100644 index c269c3bafc..0000000000 --- a/SecondaryDisplayLauncher/res/drawable/ic_settings.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - diff --git a/SecondaryDisplayLauncher/res/layout-sw600dp/secondary_display_launcher.xml b/SecondaryDisplayLauncher/res/layout-sw600dp/secondary_display_launcher.xml deleted file mode 100644 index 46f1674e47..0000000000 --- a/SecondaryDisplayLauncher/res/layout-sw600dp/secondary_display_launcher.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - diff --git a/SecondaryDisplayLauncher/res/layout-sw720dp/secondary_display_launcher.xml b/SecondaryDisplayLauncher/res/layout-sw720dp/secondary_display_launcher.xml deleted file mode 100644 index 6653a77968..0000000000 --- a/SecondaryDisplayLauncher/res/layout-sw720dp/secondary_display_launcher.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - diff --git a/SecondaryDisplayLauncher/res/layout/app_grid_item.xml b/SecondaryDisplayLauncher/res/layout/app_grid_item.xml deleted file mode 100644 index ee5158ad32..0000000000 --- a/SecondaryDisplayLauncher/res/layout/app_grid_item.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - diff --git a/SecondaryDisplayLauncher/res/layout/app_picker_dialog.xml b/SecondaryDisplayLauncher/res/layout/app_picker_dialog.xml deleted file mode 100644 index 563a1afa78..0000000000 --- a/SecondaryDisplayLauncher/res/layout/app_picker_dialog.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - diff --git a/SecondaryDisplayLauncher/res/layout/app_picker_layout.xml b/SecondaryDisplayLauncher/res/layout/app_picker_layout.xml deleted file mode 100644 index 20f85b16a6..0000000000 --- a/SecondaryDisplayLauncher/res/layout/app_picker_layout.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - diff --git a/SecondaryDisplayLauncher/res/layout/secondary_display_launcher.xml b/SecondaryDisplayLauncher/res/layout/secondary_display_launcher.xml deleted file mode 100644 index 49cd499a50..0000000000 --- a/SecondaryDisplayLauncher/res/layout/secondary_display_launcher.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - diff --git a/SecondaryDisplayLauncher/res/menu/context_menu.xml b/SecondaryDisplayLauncher/res/menu/context_menu.xml deleted file mode 100644 index 626384229e..0000000000 --- a/SecondaryDisplayLauncher/res/menu/context_menu.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - diff --git a/SecondaryDisplayLauncher/res/values-af/strings.xml b/SecondaryDisplayLauncher/res/values-af/strings.xml deleted file mode 100644 index b544be7a3d..0000000000 --- a/SecondaryDisplayLauncher/res/values-af/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Kon nie die aktiwiteit begin nie" - "Voeg programkortpad by" - "Stel muurpapier" - diff --git a/SecondaryDisplayLauncher/res/values-am/strings.xml b/SecondaryDisplayLauncher/res/values-am/strings.xml deleted file mode 100644 index 71854ad624..0000000000 --- a/SecondaryDisplayLauncher/res/values-am/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "እንቅስቃሴውን ማስጀመር አልተቻለም" - "የመተግበሪያ አቋራጭ ያክሉ" - "ልጣፍ አዘጋጅ" - diff --git a/SecondaryDisplayLauncher/res/values-ar/strings.xml b/SecondaryDisplayLauncher/res/values-ar/strings.xml deleted file mode 100644 index ba81c118c2..0000000000 --- a/SecondaryDisplayLauncher/res/values-ar/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "تعذَّر تشغيل النشاط." - "إضافة اختصار التطبيق" - "تعيين الخلفية" - diff --git a/SecondaryDisplayLauncher/res/values-as/strings.xml b/SecondaryDisplayLauncher/res/values-as/strings.xml deleted file mode 100644 index d199a26829..0000000000 --- a/SecondaryDisplayLauncher/res/values-as/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "কাৰ্যকলাপটো লঞ্চ কৰিব পৰা নগ’ল" - "এপৰ শ্বর্টকাট যোগ কৰক" - "ৱালপেপাৰ ছেট কৰক" - diff --git a/SecondaryDisplayLauncher/res/values-az/strings.xml b/SecondaryDisplayLauncher/res/values-az/strings.xml deleted file mode 100644 index cee70a08d6..0000000000 --- a/SecondaryDisplayLauncher/res/values-az/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Fəaliyyəti başlatmaq mümkün olmadı" - "Tətbiq qısayolu əlavə edin" - "Divar kağızı ayarlayın" - diff --git a/SecondaryDisplayLauncher/res/values-b+sr+Latn/strings.xml b/SecondaryDisplayLauncher/res/values-b+sr+Latn/strings.xml deleted file mode 100644 index a8859d9ff8..0000000000 --- a/SecondaryDisplayLauncher/res/values-b+sr+Latn/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Pokretanje aktivnosti nije uspelo" - "Dodaj prečicu za aplikaciju" - "Podesite pozadinu" - diff --git a/SecondaryDisplayLauncher/res/values-be/strings.xml b/SecondaryDisplayLauncher/res/values-be/strings.xml deleted file mode 100644 index 3df3760378..0000000000 --- a/SecondaryDisplayLauncher/res/values-be/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Не ўдалося запусціць дзеянне" - "Дадаць ярлык праграмы" - "Устанавіць шпалеры" - diff --git a/SecondaryDisplayLauncher/res/values-bg/strings.xml b/SecondaryDisplayLauncher/res/values-bg/strings.xml deleted file mode 100644 index 4474815bde..0000000000 --- a/SecondaryDisplayLauncher/res/values-bg/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Активността не можа да бъде стартирана" - "Добавяне на пряк път към приложението" - "Задаване на тапет" - diff --git a/SecondaryDisplayLauncher/res/values-bn/strings.xml b/SecondaryDisplayLauncher/res/values-bn/strings.xml deleted file mode 100644 index 7322691709..0000000000 --- a/SecondaryDisplayLauncher/res/values-bn/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "অ্যাক্টিভিটি চালু করা যায়নি" - "অ্যাপ শর্টকাট যোগ করুন" - "ওয়ালপেপার সেট করুন" - diff --git a/SecondaryDisplayLauncher/res/values-bs/strings.xml b/SecondaryDisplayLauncher/res/values-bs/strings.xml deleted file mode 100644 index 1e59d334ab..0000000000 --- a/SecondaryDisplayLauncher/res/values-bs/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Pokretanje aktivnosti nije uspjelo" - "Dodaj prečicu aplikacije" - "Postavi pozadinsku sliku" - diff --git a/SecondaryDisplayLauncher/res/values-ca/strings.xml b/SecondaryDisplayLauncher/res/values-ca/strings.xml deleted file mode 100644 index c0274d142d..0000000000 --- a/SecondaryDisplayLauncher/res/values-ca/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "No s\'ha pogut iniciar l\'activitat" - "Afegeix una drecera d\'aplicació" - "Estableix el fons de pantalla" - diff --git a/SecondaryDisplayLauncher/res/values-cs/strings.xml b/SecondaryDisplayLauncher/res/values-cs/strings.xml deleted file mode 100644 index 92ed5fa56f..0000000000 --- a/SecondaryDisplayLauncher/res/values-cs/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Aktivitu nelze zahájit" - "Přidat zkratku aplikace" - "Nastavení tapety" - diff --git a/SecondaryDisplayLauncher/res/values-da/strings.xml b/SecondaryDisplayLauncher/res/values-da/strings.xml deleted file mode 100644 index 16bdb33f6f..0000000000 --- a/SecondaryDisplayLauncher/res/values-da/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Aktiviteten kunne ikke startes" - "Tilføj appgenvej" - "Angiv baggrund" - diff --git a/SecondaryDisplayLauncher/res/values-de/strings.xml b/SecondaryDisplayLauncher/res/values-de/strings.xml deleted file mode 100644 index 3617a5b209..0000000000 --- a/SecondaryDisplayLauncher/res/values-de/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Aktivität konnte nicht gestartet werden" - "App-Verknüpfung hinzufügen" - "Hintergrund festlegen" - diff --git a/SecondaryDisplayLauncher/res/values-el/strings.xml b/SecondaryDisplayLauncher/res/values-el/strings.xml deleted file mode 100644 index 8d19d09c9d..0000000000 --- a/SecondaryDisplayLauncher/res/values-el/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Δεν ήταν δυνατή η εκκίνηση της δραστηριότητας" - "Προσθήκη συντόμευσης εφαρμογής" - "Ορισμός ταπετσαρίας" - diff --git a/SecondaryDisplayLauncher/res/values-en-rAU/strings.xml b/SecondaryDisplayLauncher/res/values-en-rAU/strings.xml deleted file mode 100644 index 8d8c419b2d..0000000000 --- a/SecondaryDisplayLauncher/res/values-en-rAU/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Couldn\'t launch the activity" - "Add app shortcut" - "Set wallpaper" - diff --git a/SecondaryDisplayLauncher/res/values-en-rGB/strings.xml b/SecondaryDisplayLauncher/res/values-en-rGB/strings.xml deleted file mode 100644 index 8d8c419b2d..0000000000 --- a/SecondaryDisplayLauncher/res/values-en-rGB/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Couldn\'t launch the activity" - "Add app shortcut" - "Set wallpaper" - diff --git a/SecondaryDisplayLauncher/res/values-en-rIN/strings.xml b/SecondaryDisplayLauncher/res/values-en-rIN/strings.xml deleted file mode 100644 index 8d8c419b2d..0000000000 --- a/SecondaryDisplayLauncher/res/values-en-rIN/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Couldn\'t launch the activity" - "Add app shortcut" - "Set wallpaper" - diff --git a/SecondaryDisplayLauncher/res/values-es-rUS/strings.xml b/SecondaryDisplayLauncher/res/values-es-rUS/strings.xml deleted file mode 100644 index ff6772bf33..0000000000 --- a/SecondaryDisplayLauncher/res/values-es-rUS/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "No se pudo iniciar la actividad" - "Agregar acceso directo a app" - "Establecer fondo de pantalla" - diff --git a/SecondaryDisplayLauncher/res/values-es/strings.xml b/SecondaryDisplayLauncher/res/values-es/strings.xml deleted file mode 100644 index 0654dcb756..0000000000 --- a/SecondaryDisplayLauncher/res/values-es/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "No se ha podido iniciar la acción" - "Añadir acceso directo a la aplicación" - "Establecer fondo de pantalla" - diff --git a/SecondaryDisplayLauncher/res/values-et/strings.xml b/SecondaryDisplayLauncher/res/values-et/strings.xml deleted file mode 100644 index 3410fd44de..0000000000 --- a/SecondaryDisplayLauncher/res/values-et/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Tegevust ei saanud käivitada" - "Lisa rakenduse otsetee" - "Määra taustapilt" - diff --git a/SecondaryDisplayLauncher/res/values-eu/strings.xml b/SecondaryDisplayLauncher/res/values-eu/strings.xml deleted file mode 100644 index d7abe33d13..0000000000 --- a/SecondaryDisplayLauncher/res/values-eu/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Ezin izan da abiarazi jarduera" - "Gehitu aplikaziorako lasterbidea" - "Ezarri horma-papera" - diff --git a/SecondaryDisplayLauncher/res/values-fa/strings.xml b/SecondaryDisplayLauncher/res/values-fa/strings.xml deleted file mode 100644 index 4d3ec4d3f5..0000000000 --- a/SecondaryDisplayLauncher/res/values-fa/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "فعالیت راه‌اندازی نشد" - "افزودن میان‌بر برنامه" - "تنظیم کاغذدیواری" - diff --git a/SecondaryDisplayLauncher/res/values-fi/strings.xml b/SecondaryDisplayLauncher/res/values-fi/strings.xml deleted file mode 100644 index e56f67a10b..0000000000 --- a/SecondaryDisplayLauncher/res/values-fi/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Käynnistäminen epäonnistui" - "Lisää sovelluksen pikakuvake" - "Aseta taustakuva" - diff --git a/SecondaryDisplayLauncher/res/values-fr-rCA/strings.xml b/SecondaryDisplayLauncher/res/values-fr-rCA/strings.xml deleted file mode 100644 index f5c9ba55f4..0000000000 --- a/SecondaryDisplayLauncher/res/values-fr-rCA/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Impossible de lancer l\'activité" - "Ajouter un raccourci vers l\'application" - "Définir le fond d\'écran" - diff --git a/SecondaryDisplayLauncher/res/values-fr/strings.xml b/SecondaryDisplayLauncher/res/values-fr/strings.xml deleted file mode 100644 index daa186b46f..0000000000 --- a/SecondaryDisplayLauncher/res/values-fr/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Impossible de lancer l\'activité" - "Ajouter un raccourci vers l\'application" - "Configurer le fond d\'écran" - diff --git a/SecondaryDisplayLauncher/res/values-gl/strings.xml b/SecondaryDisplayLauncher/res/values-gl/strings.xml deleted file mode 100644 index 0bcf9696ca..0000000000 --- a/SecondaryDisplayLauncher/res/values-gl/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Non se puido iniciar a actividade" - "Engadir atallo da aplicación" - "Definir fondo de pantalla" - diff --git a/SecondaryDisplayLauncher/res/values-gu/strings.xml b/SecondaryDisplayLauncher/res/values-gu/strings.xml deleted file mode 100644 index 82b4444f39..0000000000 --- a/SecondaryDisplayLauncher/res/values-gu/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "પ્રવૃત્તિ લૉન્ચ કરી શકાઈ નથી" - "ઍપ શૉર્ટકટ ઉમેરો" - "વૉલપેપર સેટ કરો" - diff --git a/SecondaryDisplayLauncher/res/values-hi/strings.xml b/SecondaryDisplayLauncher/res/values-hi/strings.xml deleted file mode 100644 index 8adb519303..0000000000 --- a/SecondaryDisplayLauncher/res/values-hi/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "गतिविधि लॉन्च नहीं हो सकी" - "ऐप्लिकेशन शॉर्टकट जोड़ें" - "वॉलपेपर सेट करें" - diff --git a/SecondaryDisplayLauncher/res/values-hr/strings.xml b/SecondaryDisplayLauncher/res/values-hr/strings.xml deleted file mode 100644 index 87ac874601..0000000000 --- a/SecondaryDisplayLauncher/res/values-hr/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Pokretanje aktivnosti nije uspjelo" - "Dodajte aplikacijski prečac" - "Postavljanje pozadine" - diff --git a/SecondaryDisplayLauncher/res/values-hu/strings.xml b/SecondaryDisplayLauncher/res/values-hu/strings.xml deleted file mode 100644 index a8870fc439..0000000000 --- a/SecondaryDisplayLauncher/res/values-hu/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Nem sikerült elindítani a tevékenységet" - "Alkalmazás parancsikonjának hozzáadása" - "Háttérkép beállítása" - diff --git a/SecondaryDisplayLauncher/res/values-hy/strings.xml b/SecondaryDisplayLauncher/res/values-hy/strings.xml deleted file mode 100644 index a64233f01f..0000000000 --- a/SecondaryDisplayLauncher/res/values-hy/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Չհաջողվեց գործարկել գործողությունը" - "Ավելացնել հավելվածի դյուրանցումը" - "Դարձնել պաստառ" - diff --git a/SecondaryDisplayLauncher/res/values-in/strings.xml b/SecondaryDisplayLauncher/res/values-in/strings.xml deleted file mode 100644 index f51d23840f..0000000000 --- a/SecondaryDisplayLauncher/res/values-in/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Tidak dapat meluncurkan aktivitas" - "Tambahkan pintasan app" - "Setel wallpaper" - diff --git a/SecondaryDisplayLauncher/res/values-is/strings.xml b/SecondaryDisplayLauncher/res/values-is/strings.xml deleted file mode 100644 index e8b3e97c60..0000000000 --- a/SecondaryDisplayLauncher/res/values-is/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Ekki tókst að ræsa aðgerðina" - "Bæta við flýtileið forrita" - "Velja veggfóður" - diff --git a/SecondaryDisplayLauncher/res/values-it/strings.xml b/SecondaryDisplayLauncher/res/values-it/strings.xml deleted file mode 100644 index 4941515cbe..0000000000 --- a/SecondaryDisplayLauncher/res/values-it/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Impossibile avviare l\'attività" - "Aggiungi scorciatoia app" - "Imposta sfondo" - diff --git a/SecondaryDisplayLauncher/res/values-iw/strings.xml b/SecondaryDisplayLauncher/res/values-iw/strings.xml deleted file mode 100644 index 06b0c42bbd..0000000000 --- a/SecondaryDisplayLauncher/res/values-iw/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "לא ניתן היה להפעיל את הפעילות" - "הוספת קיצור דרך של אפליקציה" - "הגדרת טפט" - diff --git a/SecondaryDisplayLauncher/res/values-ja/strings.xml b/SecondaryDisplayLauncher/res/values-ja/strings.xml deleted file mode 100644 index 3ed7b2b110..0000000000 --- a/SecondaryDisplayLauncher/res/values-ja/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "アクティビティを開始できませんでした" - "アプリのショートカットを追加" - "壁紙を設定" - diff --git a/SecondaryDisplayLauncher/res/values-ka/strings.xml b/SecondaryDisplayLauncher/res/values-ka/strings.xml deleted file mode 100644 index ac85f70374..0000000000 --- a/SecondaryDisplayLauncher/res/values-ka/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "აქტივობის გაშვება ვერ მოხერხდა" - "აპის მალსახმობის დამატება" - "ფონის დაყენება" - diff --git a/SecondaryDisplayLauncher/res/values-kk/strings.xml b/SecondaryDisplayLauncher/res/values-kk/strings.xml deleted file mode 100644 index f9ac455687..0000000000 --- a/SecondaryDisplayLauncher/res/values-kk/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Әрекет іске қосылмады" - "Қолданба таңбашасын енгізу" - "Тұсқағаз орнату" - diff --git a/SecondaryDisplayLauncher/res/values-km/strings.xml b/SecondaryDisplayLauncher/res/values-km/strings.xml deleted file mode 100644 index afc050f37d..0000000000 --- a/SecondaryDisplayLauncher/res/values-km/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "មិនអាចចាប់ផ្តើមសកម្មភាពទេ" - "បញ្ចូល​ផ្លូវកាត់​កម្មវិធី" - "កំណត់​ផ្ទាំង​រូបភាព" - diff --git a/SecondaryDisplayLauncher/res/values-kn/strings.xml b/SecondaryDisplayLauncher/res/values-kn/strings.xml deleted file mode 100644 index 09c327fe45..0000000000 --- a/SecondaryDisplayLauncher/res/values-kn/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "ಚಟುವಟಿಕೆಯನ್ನು ಲಾಂಚ್‌ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ" - "ಆ್ಯಪ್‌ ಶಾರ್ಟ್‌ಕಟ್ ಸೇರಿಸಿ" - "ವಾಲ್‌ಪೇಪರ್ ಹೊಂದಿಸಿ" - diff --git a/SecondaryDisplayLauncher/res/values-ko/strings.xml b/SecondaryDisplayLauncher/res/values-ko/strings.xml deleted file mode 100644 index 6a02ac08ce..0000000000 --- a/SecondaryDisplayLauncher/res/values-ko/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "활동을 실행할 수 없음" - "앱 바로가기 추가" - "배경화면 설정" - diff --git a/SecondaryDisplayLauncher/res/values-ky/strings.xml b/SecondaryDisplayLauncher/res/values-ky/strings.xml deleted file mode 100644 index 56185fa7d5..0000000000 --- a/SecondaryDisplayLauncher/res/values-ky/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Аракет аткарылган жок" - "Колдонмого кыска жол кошуу" - "Тушкагаз орнотуу" - diff --git a/SecondaryDisplayLauncher/res/values-lo/strings.xml b/SecondaryDisplayLauncher/res/values-lo/strings.xml deleted file mode 100644 index 36a6275567..0000000000 --- a/SecondaryDisplayLauncher/res/values-lo/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "ບໍ່ສາມາດເປີດໃຊ້ການເຄື່ອນໄຫວໄດ້" - "ເພີ່ມທາງລັດແອັບ" - "ຕັ້ງເປັນຮູບພື້ນຫຼັງ" - diff --git a/SecondaryDisplayLauncher/res/values-lt/strings.xml b/SecondaryDisplayLauncher/res/values-lt/strings.xml deleted file mode 100644 index 8113eb61b6..0000000000 --- a/SecondaryDisplayLauncher/res/values-lt/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Nepavyko paleisti veiklos" - "Pridėti programos šaukinį" - "Nustatyti ekrano foną" - diff --git a/SecondaryDisplayLauncher/res/values-lv/strings.xml b/SecondaryDisplayLauncher/res/values-lv/strings.xml deleted file mode 100644 index e2679335d5..0000000000 --- a/SecondaryDisplayLauncher/res/values-lv/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Nevarēja palaist darbību" - "Pievienot lietotnes saīsni" - "Iestatīt fona tapeti" - diff --git a/SecondaryDisplayLauncher/res/values-mk/strings.xml b/SecondaryDisplayLauncher/res/values-mk/strings.xml deleted file mode 100644 index e2cca03eeb..0000000000 --- a/SecondaryDisplayLauncher/res/values-mk/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Не можеше да се стартува активноста" - "Додајте кратенка за апликација" - "Поставете го тапетот" - diff --git a/SecondaryDisplayLauncher/res/values-ml/strings.xml b/SecondaryDisplayLauncher/res/values-ml/strings.xml deleted file mode 100644 index 864245b9f6..0000000000 --- a/SecondaryDisplayLauncher/res/values-ml/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "ആക്‌റ്റിവിറ്റി പ്രകാശിപ്പിക്കാനായില്ല" - "ആപ്പ് കുറുക്കുവഴികൾ ചേർക്കുക" - "വാൾപേപ്പർ സജ്ജീകരിക്കുക" - diff --git a/SecondaryDisplayLauncher/res/values-mn/strings.xml b/SecondaryDisplayLauncher/res/values-mn/strings.xml deleted file mode 100644 index 85fb0209eb..0000000000 --- a/SecondaryDisplayLauncher/res/values-mn/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Үйл ажиллагааг эхлүүж чадсангүй" - "Аппын товчлол нэмэх" - "Ханын зураг тохируулах" - diff --git a/SecondaryDisplayLauncher/res/values-mr/strings.xml b/SecondaryDisplayLauncher/res/values-mr/strings.xml deleted file mode 100644 index 6e92a2f2a1..0000000000 --- a/SecondaryDisplayLauncher/res/values-mr/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "अ‍ॅक्टिव्हिटी लाँच करता आली नाही" - "अ‍ॅप शॉर्टकट जोडा" - "वॉलपेपर सेट करा" - diff --git a/SecondaryDisplayLauncher/res/values-ms/strings.xml b/SecondaryDisplayLauncher/res/values-ms/strings.xml deleted file mode 100644 index fd7805324c..0000000000 --- a/SecondaryDisplayLauncher/res/values-ms/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Tidak dapat melancarkan aktiviti" - "Tambah pintasan apl" - "Tetapkan kertas dinding" - diff --git a/SecondaryDisplayLauncher/res/values-my/strings.xml b/SecondaryDisplayLauncher/res/values-my/strings.xml deleted file mode 100644 index 1521402203..0000000000 --- a/SecondaryDisplayLauncher/res/values-my/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "လုပ်ဆောင်ချက်ကို စတင်၍မရပါ" - "အက်ပ်ဖြတ်လမ်းလင့်ခ်ထည့်ရန်" - "နောက်ခံ သတ်မှတ်ရန်" - diff --git a/SecondaryDisplayLauncher/res/values-nb/strings.xml b/SecondaryDisplayLauncher/res/values-nb/strings.xml deleted file mode 100644 index 945c87bb7d..0000000000 --- a/SecondaryDisplayLauncher/res/values-nb/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Kunne ikke starte aktiviteten" - "Legg til en appsnarvei" - "Angi bakgrunn" - diff --git a/SecondaryDisplayLauncher/res/values-ne/strings.xml b/SecondaryDisplayLauncher/res/values-ne/strings.xml deleted file mode 100644 index 9a5b0a0590..0000000000 --- a/SecondaryDisplayLauncher/res/values-ne/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "उक्त क्रियाकलाप सुरु गर्न सकिएन" - "अनुप्रयोगको सर्टकट थप्नुहोस्‌" - "वालपेपर सेट गर्नुहोस्" - diff --git a/SecondaryDisplayLauncher/res/values-nl/strings.xml b/SecondaryDisplayLauncher/res/values-nl/strings.xml deleted file mode 100644 index 8767708814..0000000000 --- a/SecondaryDisplayLauncher/res/values-nl/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Kan de activiteit niet starten" - "App-snelkoppeling toevoegen" - "Achtergrond instellen" - diff --git a/SecondaryDisplayLauncher/res/values-or/strings.xml b/SecondaryDisplayLauncher/res/values-or/strings.xml deleted file mode 100644 index 9bc5725aba..0000000000 --- a/SecondaryDisplayLauncher/res/values-or/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "ଗତିବିଧିକୁ ଲଞ୍ଚ କରାଯାଇପାରିଲା ନାହିଁ" - "ଆପ୍‌ ସର୍ଟକଟ୍‌ ଯୋଗ କରନ୍ତୁ" - "ୱାଲ୍‌‌ପେପର୍‌କୁ ସେଟ୍ କରନ୍ତୁ" - diff --git a/SecondaryDisplayLauncher/res/values-pa/strings.xml b/SecondaryDisplayLauncher/res/values-pa/strings.xml deleted file mode 100644 index c5dd582ce0..0000000000 --- a/SecondaryDisplayLauncher/res/values-pa/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "ਸਰਗਰਮੀ ਨੂੰ ਲਾਂਚ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" - "ਐਪ ਸ਼ਾਰਟਕੱਟ ਸ਼ਾਮਲ ਕਰੋ" - "ਵਾਲਪੇਪਰ ਸੈੱਟ ਕਰੋ" - diff --git a/SecondaryDisplayLauncher/res/values-pl/strings.xml b/SecondaryDisplayLauncher/res/values-pl/strings.xml deleted file mode 100644 index e8efaed2b0..0000000000 --- a/SecondaryDisplayLauncher/res/values-pl/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Nie udało się uruchomić aktywności" - "Dodaj skrót do aplikacji" - "Ustaw tapetę" - diff --git a/SecondaryDisplayLauncher/res/values-pt-rPT/strings.xml b/SecondaryDisplayLauncher/res/values-pt-rPT/strings.xml deleted file mode 100644 index 67c75574be..0000000000 --- a/SecondaryDisplayLauncher/res/values-pt-rPT/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Não foi possível iniciar a atividade." - "Adicionar atalho de aplicação" - "Definir imagem de fundo" - diff --git a/SecondaryDisplayLauncher/res/values-pt/strings.xml b/SecondaryDisplayLauncher/res/values-pt/strings.xml deleted file mode 100644 index 201fc07e52..0000000000 --- a/SecondaryDisplayLauncher/res/values-pt/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Não foi possível abrir a atividade" - "Adicionar atalho de apps" - "Definir plano de fundo" - diff --git a/SecondaryDisplayLauncher/res/values-ro/strings.xml b/SecondaryDisplayLauncher/res/values-ro/strings.xml deleted file mode 100644 index e2e21c5731..0000000000 --- a/SecondaryDisplayLauncher/res/values-ro/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Nu s-a putut lansa activitatea" - "Adăugați comanda rapidă pentru aplicație" - "Setați imaginea de fundal" - diff --git a/SecondaryDisplayLauncher/res/values-ru/strings.xml b/SecondaryDisplayLauncher/res/values-ru/strings.xml deleted file mode 100644 index 64ba00ef1f..0000000000 --- a/SecondaryDisplayLauncher/res/values-ru/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Не удалось запустить объект activity" - "Добавить ярлык приложения" - "Установить обои" - diff --git a/SecondaryDisplayLauncher/res/values-si/strings.xml b/SecondaryDisplayLauncher/res/values-si/strings.xml deleted file mode 100644 index ac492eb8ce..0000000000 --- a/SecondaryDisplayLauncher/res/values-si/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "ක්‍රියාකාරකම දියත් කිරීමට නොහැකි විය" - "යෙදුම් කෙටිමඟ එක් කරන්න" - "බිතුපත සකසන්න" - diff --git a/SecondaryDisplayLauncher/res/values-sk/strings.xml b/SecondaryDisplayLauncher/res/values-sk/strings.xml deleted file mode 100644 index 5e6fa7a613..0000000000 --- a/SecondaryDisplayLauncher/res/values-sk/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Aktivitu sa nepodarilo spustiť" - "Pridať odkaz do aplikácie" - "Nastaviť tapetu" - diff --git a/SecondaryDisplayLauncher/res/values-sl/strings.xml b/SecondaryDisplayLauncher/res/values-sl/strings.xml deleted file mode 100644 index f54dec9c8d..0000000000 --- a/SecondaryDisplayLauncher/res/values-sl/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Dejavnosti ni bilo mogoče zagnati" - "Dodaj bližnjico do aplikacije" - "Nastavi ozadje" - diff --git a/SecondaryDisplayLauncher/res/values-sq/strings.xml b/SecondaryDisplayLauncher/res/values-sq/strings.xml deleted file mode 100644 index e626dd1caf..0000000000 --- a/SecondaryDisplayLauncher/res/values-sq/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Aktiviteti nuk mund të hapej" - "Shto shkurtoren e aplikacionit" - "Cakto imazhin e sfondit" - diff --git a/SecondaryDisplayLauncher/res/values-sr/strings.xml b/SecondaryDisplayLauncher/res/values-sr/strings.xml deleted file mode 100644 index 94214f113b..0000000000 --- a/SecondaryDisplayLauncher/res/values-sr/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Покретање активности није успело" - "Додај пречицу за апликацију" - "Подесите позадину" - diff --git a/SecondaryDisplayLauncher/res/values-sv/strings.xml b/SecondaryDisplayLauncher/res/values-sv/strings.xml deleted file mode 100644 index 53e17ef685..0000000000 --- a/SecondaryDisplayLauncher/res/values-sv/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Det gick inte att starta aktiviteten" - "Lägg till appgenväg" - "Ange bakgrund" - diff --git a/SecondaryDisplayLauncher/res/values-sw/strings.xml b/SecondaryDisplayLauncher/res/values-sw/strings.xml deleted file mode 100644 index 490561a619..0000000000 --- a/SecondaryDisplayLauncher/res/values-sw/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Imeshindwa kuanzisha shughuli" - "Ongeza njia ya mkato ya programu" - "Weka mandhari" - diff --git a/SecondaryDisplayLauncher/res/values-sw600dp/dimens.xml b/SecondaryDisplayLauncher/res/values-sw600dp/dimens.xml deleted file mode 100644 index f33a8db400..0000000000 --- a/SecondaryDisplayLauncher/res/values-sw600dp/dimens.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - 400dp - 400dp - 60dp - diff --git a/SecondaryDisplayLauncher/res/values-sw720dp/dimens.xml b/SecondaryDisplayLauncher/res/values-sw720dp/dimens.xml deleted file mode 100644 index 524e52af71..0000000000 --- a/SecondaryDisplayLauncher/res/values-sw720dp/dimens.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - 660dp - 660dp - 70dp - diff --git a/SecondaryDisplayLauncher/res/values-ta/strings.xml b/SecondaryDisplayLauncher/res/values-ta/strings.xml deleted file mode 100644 index 6bb054a11a..0000000000 --- a/SecondaryDisplayLauncher/res/values-ta/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "நடவடிக்கையைத் துவக்க இயலவில்லை" - "ஆப்ஸ் ஷார்ட்கட்டைச் சேர்" - "வால்பேப்பரை அமை" - diff --git a/SecondaryDisplayLauncher/res/values-te/strings.xml b/SecondaryDisplayLauncher/res/values-te/strings.xml deleted file mode 100644 index 3dd3c9bddb..0000000000 --- a/SecondaryDisplayLauncher/res/values-te/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "కార్యకలాపాన్ని ప్రారంభించడం సాధ్యం కాలేదు" - "యాప్ షార్ట్‌కట్‌ని జోడించు" - "వాల్‌పేపర్‌ను సెట్ చేయండి" - diff --git a/SecondaryDisplayLauncher/res/values-th/strings.xml b/SecondaryDisplayLauncher/res/values-th/strings.xml deleted file mode 100644 index 6368950ad8..0000000000 --- a/SecondaryDisplayLauncher/res/values-th/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "เปิดกิจกรรมไม่ได้" - "เพิ่มทางลัดของแอป" - "ตั้งวอลเปเปอร์" - diff --git a/SecondaryDisplayLauncher/res/values-tl/strings.xml b/SecondaryDisplayLauncher/res/values-tl/strings.xml deleted file mode 100644 index 192e5c4f92..0000000000 --- a/SecondaryDisplayLauncher/res/values-tl/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Hindi mailunsad ang aktibidad" - "Magdagdag ng shortcut ng app" - "Magtakda ng wallpaper" - diff --git a/SecondaryDisplayLauncher/res/values-tr/strings.xml b/SecondaryDisplayLauncher/res/values-tr/strings.xml deleted file mode 100644 index e7ed9983ee..0000000000 --- a/SecondaryDisplayLauncher/res/values-tr/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "İşlem başlatılamadı" - "Uygulama kısayolu ekle" - "Duvar kağıdı ayarla" - diff --git a/SecondaryDisplayLauncher/res/values-uk/strings.xml b/SecondaryDisplayLauncher/res/values-uk/strings.xml deleted file mode 100644 index e4659952cd..0000000000 --- a/SecondaryDisplayLauncher/res/values-uk/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Не вдалося запустити активність" - "Розмістити ярлик додатка" - "Вибрати фоновий малюнок" - diff --git a/SecondaryDisplayLauncher/res/values-ur/strings.xml b/SecondaryDisplayLauncher/res/values-ur/strings.xml deleted file mode 100644 index e4c86417dc..0000000000 --- a/SecondaryDisplayLauncher/res/values-ur/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "سرگرمی کو شروع نہیں کیا جا سکا" - "ایپ شارٹ کٹ شامل کریں" - "وال پیپر سیٹ کریں" - diff --git a/SecondaryDisplayLauncher/res/values-uz/strings.xml b/SecondaryDisplayLauncher/res/values-uz/strings.xml deleted file mode 100644 index 585739d37f..0000000000 --- a/SecondaryDisplayLauncher/res/values-uz/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Faollik ishga tushmadi" - "Yorliq yaratish" - "Fonga rasm oʻrnatish" - diff --git a/SecondaryDisplayLauncher/res/values-vi/strings.xml b/SecondaryDisplayLauncher/res/values-vi/strings.xml deleted file mode 100644 index 15a1a44dde..0000000000 --- a/SecondaryDisplayLauncher/res/values-vi/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Không thể chạy hoạt động" - "Thêm lối tắt ứng dụng" - "Đặt hình nền" - diff --git a/SecondaryDisplayLauncher/res/values-zh-rCN/strings.xml b/SecondaryDisplayLauncher/res/values-zh-rCN/strings.xml deleted file mode 100644 index 3358499824..0000000000 --- a/SecondaryDisplayLauncher/res/values-zh-rCN/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "无法启动该操作组件" - "添加应用快捷方式" - "设置壁纸" - diff --git a/SecondaryDisplayLauncher/res/values-zh-rHK/strings.xml b/SecondaryDisplayLauncher/res/values-zh-rHK/strings.xml deleted file mode 100644 index bf76f29dec..0000000000 --- a/SecondaryDisplayLauncher/res/values-zh-rHK/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "無法啟動活動" - "新增應用程式捷徑" - "設定桌布" - diff --git a/SecondaryDisplayLauncher/res/values-zh-rTW/strings.xml b/SecondaryDisplayLauncher/res/values-zh-rTW/strings.xml deleted file mode 100644 index c02fe2cdce..0000000000 --- a/SecondaryDisplayLauncher/res/values-zh-rTW/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "無法啟動活動" - "新增應用程式捷徑" - "套用桌布" - diff --git a/SecondaryDisplayLauncher/res/values-zu/strings.xml b/SecondaryDisplayLauncher/res/values-zu/strings.xml deleted file mode 100644 index ad2f6b9cdb..0000000000 --- a/SecondaryDisplayLauncher/res/values-zu/strings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - "Ayikwazanga ukuqalisa umsebenzi" - "Engeza isinqamuleli sohlelo lokusebenza" - "Setha isithombe sangemuva" - diff --git a/SecondaryDisplayLauncher/res/values/colors.xml b/SecondaryDisplayLauncher/res/values/colors.xml deleted file mode 100644 index 66b41a2ba6..0000000000 --- a/SecondaryDisplayLauncher/res/values/colors.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - #884e8391 - diff --git a/SecondaryDisplayLauncher/res/values/dimens.xml b/SecondaryDisplayLauncher/res/values/dimens.xml deleted file mode 100644 index 7cca60719c..0000000000 --- a/SecondaryDisplayLauncher/res/values/dimens.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - 72dp - 24dp - 24dp - 64dp - 64dp - 24dp - 8dp - 8dp - - 300dp - 300dp - 20dp - 20dp - diff --git a/SecondaryDisplayLauncher/res/values/strings.xml b/SecondaryDisplayLauncher/res/values/strings.xml deleted file mode 100644 index b68918ac3f..0000000000 --- a/SecondaryDisplayLauncher/res/values/strings.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - Couldn\'t launch the activity - Add app shortcut - Set wallpaper - diff --git a/SecondaryDisplayLauncher/res/values/styles.xml b/SecondaryDisplayLauncher/res/values/styles.xml deleted file mode 100644 index 4e41a98fc8..0000000000 --- a/SecondaryDisplayLauncher/res/values/styles.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/AppEntry.java b/SecondaryDisplayLauncher/src/com/android/launcher3/AppEntry.java deleted file mode 100644 index 3017b81c1d..0000000000 --- a/SecondaryDisplayLauncher/src/com/android/launcher3/AppEntry.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Copyright (c) 2018 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.launcher3; - -import android.content.ComponentName; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.graphics.drawable.Drawable; - -/** An entry that represents a single activity that can be launched. */ -public class AppEntry { - - private String mLabel; - private Drawable mIcon; - private Intent mLaunchIntent; - - AppEntry(ResolveInfo info, PackageManager packageManager) { - mLabel = info.loadLabel(packageManager).toString(); - mIcon = info.loadIcon(packageManager); - mLaunchIntent = new Intent(); - mLaunchIntent.setComponent(new ComponentName(info.activityInfo.packageName, - info.activityInfo.name)); - } - - String getLabel() { - return mLabel; - } - - Drawable getIcon() { - return mIcon; - } - - Intent getLaunchIntent() { return mLaunchIntent; } - - ComponentName getComponentName() { - return mLaunchIntent.getComponent(); - } - - @Override - public String toString() { - return mLabel; - } -} diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/AppListAdapter.java b/SecondaryDisplayLauncher/src/com/android/launcher3/AppListAdapter.java deleted file mode 100644 index aa115cb575..0000000000 --- a/SecondaryDisplayLauncher/src/com/android/launcher3/AppListAdapter.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright (c) 2018 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.launcher3; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.ImageView; -import android.widget.TextView; - -import com.android.launcher3.R; - -import java.util.List; - -/** Adapter for available apps list. */ -public class AppListAdapter extends ArrayAdapter { - private final LayoutInflater mInflater; - - AppListAdapter(Context context) { - super(context, android.R.layout.simple_list_item_2); - mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - } - - void setData(List data) { - clear(); - if (data != null) { - addAll(data); - } - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - View view; - - if (convertView == null) { - view = mInflater.inflate(R.layout.app_grid_item, parent, false); - } else { - view = convertView; - } - - AppEntry item = getItem(position); - ((ImageView)view.findViewById(R.id.app_icon)).setImageDrawable(item.getIcon()); - ((TextView)view.findViewById(R.id.app_name)).setText(item.getLabel()); - - return view; - } -} diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/AppListViewModel.java b/SecondaryDisplayLauncher/src/com/android/launcher3/AppListViewModel.java deleted file mode 100644 index 914fd5e01a..0000000000 --- a/SecondaryDisplayLauncher/src/com/android/launcher3/AppListViewModel.java +++ /dev/null @@ -1,126 +0,0 @@ -/** - * Copyright (c) 2018 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.launcher3; - -import android.app.Application; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.os.AsyncTask; - -import androidx.lifecycle.AndroidViewModel; -import androidx.lifecycle.LiveData; - -import java.util.ArrayList; -import java.util.List; - -/** - * A view model that provides a list of activities that can be launched. - */ -public class AppListViewModel extends AndroidViewModel { - - private final AppListLiveData mLiveData; - private final PackageIntentReceiver - mPackageIntentReceiver; - - public AppListViewModel(Application application) { - super(application); - mLiveData = new AppListLiveData(application); - mPackageIntentReceiver = new PackageIntentReceiver(mLiveData, application); - } - - public LiveData> getAppList() { - return mLiveData; - } - - protected void onCleared() { - getApplication().unregisterReceiver(mPackageIntentReceiver); - } -} - -class AppListLiveData extends LiveData> { - - private final PackageManager mPackageManager; - private int mCurrentDataVersion; - - public AppListLiveData(Context context) { - mPackageManager = context.getPackageManager(); - loadData(); - } - - void loadData() { - final int loadDataVersion = ++mCurrentDataVersion; - - new AsyncTask>() { - @Override - protected List doInBackground(Void... voids) { - Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); - mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); - - List apps = mPackageManager.queryIntentActivities(mainIntent, - PackageManager.GET_META_DATA); - - List entries = new ArrayList<>(); - if (apps != null) { - for (ResolveInfo app : apps) { - AppEntry entry = new AppEntry(app, mPackageManager); - entries.add(entry); - } - } - return entries; - } - - @Override - protected void onPostExecute(List data) { - if (mCurrentDataVersion == loadDataVersion) { - setValue(data); - } - } - }.execute(); - } -} - -/** - * Receiver used to notify live data about app list changes. - */ -class PackageIntentReceiver extends BroadcastReceiver { - - private final AppListLiveData mLiveData; - - public PackageIntentReceiver(AppListLiveData liveData, Context context) { - mLiveData = liveData; - IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); - filter.addAction(Intent.ACTION_PACKAGE_REMOVED); - filter.addAction(Intent.ACTION_PACKAGE_CHANGED); - filter.addDataScheme("package"); - context.registerReceiver(this, filter); - - // Register for events related to sdcard installation. - IntentFilter sdFilter = new IntentFilter(); - sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE); - sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE); - context.registerReceiver(this, sdFilter); - } - - @Override - public void onReceive(Context context, Intent intent) { - mLiveData.loadData(); - } -} \ No newline at end of file diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppListViewModel.java b/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppListViewModel.java deleted file mode 100644 index 4f92038ae4..0000000000 --- a/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppListViewModel.java +++ /dev/null @@ -1,120 +0,0 @@ -/** - * Copyright (c) 2018 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.launcher3; - -import static com.android.launcher3.PinnedAppListViewModel.PINNED_APPS_KEY; - -import android.app.Application; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.os.AsyncTask; - -import androidx.lifecycle.AndroidViewModel; -import androidx.lifecycle.LiveData; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -/** - * A view model that provides a list of activities that were pinned by user to always display on - * home screen. - * The pinned activities are stored in {@link SharedPreferences} to keep the sample simple :). - */ -public class PinnedAppListViewModel extends AndroidViewModel { - - final static String PINNED_APPS_KEY = "pinned_apps"; - - private final PinnedAppListLiveData mLiveData; - - public PinnedAppListViewModel(Application application) { - super(application); - mLiveData = new PinnedAppListLiveData(application); - } - - public LiveData> getPinnedAppList() { - return mLiveData; - } -} - -class PinnedAppListLiveData extends LiveData> { - - private final Context mContext; - private final PackageManager mPackageManager; - // Store listener reference, so it won't be GC-ed. - private final SharedPreferences.OnSharedPreferenceChangeListener mChangeListener; - private int mCurrentDataVersion; - - public PinnedAppListLiveData(Context context) { - mContext = context; - mPackageManager = context.getPackageManager(); - - final SharedPreferences prefs = context.getSharedPreferences(PINNED_APPS_KEY, 0); - mChangeListener = (preferences, key) -> { - loadData(); - }; - prefs.registerOnSharedPreferenceChangeListener(mChangeListener); - - loadData(); - } - - private void loadData() { - final int loadDataVersion = ++mCurrentDataVersion; - - new AsyncTask>() { - @Override - protected List doInBackground(Void... voids) { - List entries = new ArrayList<>(); - - final SharedPreferences sp = mContext.getSharedPreferences(PINNED_APPS_KEY, 0); - final Set pinnedAppsComponents = sp.getStringSet(PINNED_APPS_KEY, null); - if (pinnedAppsComponents == null) { - return null; - } - - for (String componentString : pinnedAppsComponents) { - final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); - mainIntent.setComponent(ComponentName.unflattenFromString(componentString)); - mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); - - final List apps = mPackageManager.queryIntentActivities(mainIntent, - PackageManager.GET_META_DATA); - - if (apps != null) { - for (ResolveInfo app : apps) { - final AppEntry entry = new AppEntry(app, mPackageManager); - entries.add(entry); - } - } - } - - return entries; - } - - @Override - protected void onPostExecute(List data) { - if (mCurrentDataVersion == loadDataVersion) { - setValue(data); - } - } - }.execute(); - } -} \ No newline at end of file diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppPickerDialog.java b/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppPickerDialog.java deleted file mode 100644 index 02e6e4a9c6..0000000000 --- a/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppPickerDialog.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Copyright (c) 2018 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.launcher3; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.GridView; - -import androidx.fragment.app.DialogFragment; - -import com.android.launcher3.R; - -/** - * Callback to be invoked when an app was picked. - */ -interface AppPickedCallback { - void onAppPicked(AppEntry appEntry); -} - -/** - * Dialog that provides the user with a list of available apps to pin to the home screen. - */ -public class PinnedAppPickerDialog extends DialogFragment { - - private AppListAdapter mAppListAdapter; - private AppPickedCallback mAppPickerCallback; - - public PinnedAppPickerDialog() { - } - - public static PinnedAppPickerDialog newInstance(AppListAdapter appListAdapter, - AppPickedCallback callback) { - PinnedAppPickerDialog - frag = new PinnedAppPickerDialog(); - frag.mAppListAdapter = appListAdapter; - frag.mAppPickerCallback = callback; - return frag; - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - return inflater.inflate(R.layout.app_picker_dialog, container); - } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - GridView appGridView = view.findViewById(R.id.picker_app_grid); - appGridView.setAdapter(mAppListAdapter); - appGridView.setOnItemClickListener((adapterView, itemView, position, id) -> { - final AppEntry entry = mAppListAdapter.getItem(position); - mAppPickerCallback.onAppPicked(entry); - dismiss(); - }); - } -} \ No newline at end of file diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/SecondaryDisplayLauncher.java b/SecondaryDisplayLauncher/src/com/android/launcher3/SecondaryDisplayLauncher.java deleted file mode 100644 index 0a2f18f109..0000000000 --- a/SecondaryDisplayLauncher/src/com/android/launcher3/SecondaryDisplayLauncher.java +++ /dev/null @@ -1,229 +0,0 @@ -/** - * Copyright (c) 2018 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.launcher3; - -import static com.android.launcher3.PinnedAppListViewModel.PINNED_APPS_KEY; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.app.AlertDialog; -import android.app.Application; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.res.Configuration; -import android.os.Bundle; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewAnimationUtils; -import android.view.inputmethod.InputMethodManager; -import android.widget.GridView; -import android.widget.ImageButton; -import android.widget.PopupMenu; - -import androidx.fragment.app.FragmentActivity; -import androidx.fragment.app.FragmentManager; -import androidx.lifecycle.ViewModelProvider; -import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory; - -import com.google.android.material.circularreveal.cardview.CircularRevealCardView; -import com.google.android.material.floatingactionbutton.FloatingActionButton; - -import java.util.HashSet; -import java.util.Set; - -/** - * Secondary launcher activity. It's launch mode is configured as "singleTop" to allow showing on - * multiple displays and to ensure a single instance per each display. - */ -public class SecondaryDisplayLauncher extends FragmentActivity implements AppPickedCallback, - PopupMenu.OnMenuItemClickListener { - - private AppListAdapter mAppListAdapter; - private AppListAdapter mPinnedAppListAdapter; - private CircularRevealCardView mAppDrawerView; - private FloatingActionButton mFab; - - private boolean mAppDrawerShown; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.secondary_display_launcher); - - mAppDrawerView = findViewById(R.id.FloatingSheet); - mFab = findViewById(R.id.FloatingActionButton); - - mFab.setOnClickListener((View v) -> { - showAppDrawer(true); - }); - - final ViewModelProvider viewModelProvider = new ViewModelProvider(getViewModelStore(), - new AndroidViewModelFactory((Application) getApplicationContext())); - - mPinnedAppListAdapter = new AppListAdapter(this); - final GridView pinnedAppGridView = findViewById(R.id.pinned_app_grid); - pinnedAppGridView.setAdapter(mPinnedAppListAdapter); - pinnedAppGridView.setOnItemClickListener((adapterView, view, position, id) -> { - final AppEntry entry = mPinnedAppListAdapter.getItem(position); - launch(entry.getLaunchIntent()); - }); - final PinnedAppListViewModel pinnedAppListViewModel = - viewModelProvider.get(PinnedAppListViewModel.class); - pinnedAppListViewModel.getPinnedAppList().observe(this, data -> { - mPinnedAppListAdapter.setData(data); - }); - - mAppListAdapter = new AppListAdapter(this); - final GridView appGridView = findViewById(R.id.app_grid); - appGridView.setAdapter(mAppListAdapter); - appGridView.setOnItemClickListener((adapterView, view, position, id) -> { - final AppEntry entry = mAppListAdapter.getItem(position); - launch(entry.getLaunchIntent()); - }); - final AppListViewModel appListViewModel = viewModelProvider.get(AppListViewModel.class); - appListViewModel.getAppList().observe(this, data -> { - mAppListAdapter.setData(data); - }); - - ImageButton optionsButton = findViewById(R.id.OptionsButton); - optionsButton.setOnClickListener((View v) -> { - PopupMenu popup = new PopupMenu(this,v); - popup.setOnMenuItemClickListener(this); - MenuInflater inflater = popup.getMenuInflater(); - inflater.inflate(R.menu.context_menu, popup.getMenu()); - popup.show(); - }); - } - - @Override - public boolean onMenuItemClick(MenuItem item) { - // Respond to picking one of the popup menu items. - final int id = item.getItemId(); - if (id == R.id.add_app_shortcut) { - FragmentManager fm = getSupportFragmentManager(); - PinnedAppPickerDialog pickerDialogFragment = - PinnedAppPickerDialog.newInstance(mAppListAdapter, this); - pickerDialogFragment.show(fm, "fragment_app_picker"); - return true; - } else if (id == R.id.set_wallpaper) { - Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER); - startActivity(Intent.createChooser(intent, getString(R.string.set_wallpaper))); - return true; - } - - return true; - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - showAppDrawer(false); - } - - public void onBackPressed() { - // If the app drawer was shown - hide it. Otherwise, not doing anything since we don't want - // to close the launcher. - showAppDrawer(false); - } - - public void onNewIntent(Intent intent) { - super.onNewIntent(intent); - - if (Intent.ACTION_MAIN.equals(intent.getAction())) { - // Hide keyboard. - final View v = getWindow().peekDecorView(); - if (v != null && v.getWindowToken() != null) { - getSystemService(InputMethodManager.class).hideSoftInputFromWindow( - v.getWindowToken(), 0); - } - } - - // A new intent will bring the launcher to top. Hide the app drawer to reset the state. - showAppDrawer(false); - } - - void launch(Intent launchIntent) { - launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - try { - startActivity(launchIntent); - } catch (Exception e) { - final AlertDialog.Builder builder = - new AlertDialog.Builder(this, android.R.style.Theme_Material_Dialog_Alert); - builder.setTitle(R.string.couldnt_launch) - .setMessage(e.getLocalizedMessage()) - .setIcon(android.R.drawable.ic_dialog_alert) - .show(); - } - } - - /** - * Store the picked app to persistent pinned list and update the loader. - */ - @Override - public void onAppPicked(AppEntry appEntry) { - final SharedPreferences sp = getSharedPreferences(PINNED_APPS_KEY, 0); - Set pinnedApps = sp.getStringSet(PINNED_APPS_KEY, null); - if (pinnedApps == null) { - pinnedApps = new HashSet(); - } else { - // Always need to create a new object to make sure that the changes are persisted. - pinnedApps = new HashSet(pinnedApps); - } - pinnedApps.add(appEntry.getComponentName().flattenToString()); - - final SharedPreferences.Editor editor = sp.edit(); - editor.putStringSet(PINNED_APPS_KEY, pinnedApps); - editor.apply(); - } - - /** - * Show/hide app drawer card with animation. - */ - private void showAppDrawer(boolean show) { - if (show == mAppDrawerShown) { - return; - } - - final Animator animator = revealAnimator(mAppDrawerView, show); - if (show) { - mAppDrawerShown = true; - mAppDrawerView.setVisibility(View.VISIBLE); - mFab.setVisibility(View.INVISIBLE); - } else { - mAppDrawerShown = false; - animator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - super.onAnimationEnd(animation); - mAppDrawerView.setVisibility(View.INVISIBLE); - mFab.setVisibility(View.VISIBLE); - } - }); - } - animator.start(); - } - - /** - * Create reveal/hide animator for app list card. - */ - private Animator revealAnimator(View view, boolean open) { - final int radius = (int) Math.hypot((double) view.getWidth(), (double) view.getHeight()); - return ViewAnimationUtils.createCircularReveal(view, view.getRight(), view.getBottom(), - open ? 0 : radius, open ? radius : 0); - } -} From 3abc8511a51afe983b481bdf6631535aa8b94f28 Mon Sep 17 00:00:00 2001 From: vadimt Date: Thu, 5 Mar 2020 14:01:23 -0800 Subject: [PATCH 03/41] Enabling widget config tests after fixing flakiness Bug: 148867106 Change-Id: I8bbd9ef9b1ca574f79f3f76869051495b59734ce --- .../com/android/launcher3/ui/widget/AddConfigWidgetTest.java | 3 --- tests/tapl/com/android/launcher3/tapl/Widgets.java | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java index 4b1a06799b..de9757fa58 100644 --- a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java @@ -41,7 +41,6 @@ import com.android.launcher3.util.Wait.Condition; import com.android.launcher3.util.rule.ShellCommandRule; import org.junit.Before; -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -71,14 +70,12 @@ public class AddConfigWidgetTest extends AbstractLauncherUiTest { @Test @PortraitLandscape - @Ignore // b/148867106 public void testWidgetConfig() throws Throwable { runTest(true); } @Test @PortraitLandscape - @Ignore // b/148867106 public void testConfigCancelled() throws Throwable { runTest(false); } diff --git a/tests/tapl/com/android/launcher3/tapl/Widgets.java b/tests/tapl/com/android/launcher3/tapl/Widgets.java index 8659aa7a35..084138cb5d 100644 --- a/tests/tapl/com/android/launcher3/tapl/Widgets.java +++ b/tests/tapl/com/android/launcher3/tapl/Widgets.java @@ -115,7 +115,8 @@ public final class Widgets extends LauncherInstrumentation.VisibleContainer { int visibleDelta = maxWidth - widget.getVisibleBounds().width(); if (visibleDelta > 0) { Rect parentBounds = cell.getVisibleBounds(); - mLauncher.linearGesture(parentBounds.centerX() + visibleDelta, + mLauncher.linearGesture(parentBounds.centerX() + visibleDelta + + mLauncher.getTouchSlop(), parentBounds.centerY(), parentBounds.centerX(), parentBounds.centerY(), 10, true, GestureScope.INSIDE); } From bb2bf277c0b22ecb1dc64d9971978d3c958dda44 Mon Sep 17 00:00:00 2001 From: vadimt Date: Thu, 5 Mar 2020 17:22:18 -0800 Subject: [PATCH 04/41] Catching everything from dumpHprofData Change-Id: I79ced1d4bb3e6ea43ce6fa5bd07fe22b577006f9 --- tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java index c6192bc7b7..b1db2bca78 100644 --- a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java +++ b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java @@ -124,7 +124,7 @@ public abstract class AbstractLauncherUiTest { getInstrumentation().getTargetContext() .getFilesDir().getPath() + "/ActivityLeakHeapDump.hprof"); - } catch (IOException e) { + } catch (Throwable e) { Log.e(TAG, "dumpHprofData failed", e); } } From 16eca5500dab2f253f52920edaed477f5e43f413 Mon Sep 17 00:00:00 2001 From: vadimt Date: Thu, 5 Mar 2020 19:02:18 -0800 Subject: [PATCH 05/41] Enabling event verification for Launcher3 Will help investigating otherwise mysterious failures. Change-Id: I805ed136baf6d86921fdb4782304fcdafbd3af5c --- .../launcher3/tapl/AddToHomeScreenPrompt.java | 11 ++++++---- .../tapl/LauncherInstrumentation.java | 20 +++++++++---------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/tests/tapl/com/android/launcher3/tapl/AddToHomeScreenPrompt.java b/tests/tapl/com/android/launcher3/tapl/AddToHomeScreenPrompt.java index 468f54c0d9..5daac394b9 100644 --- a/tests/tapl/com/android/launcher3/tapl/AddToHomeScreenPrompt.java +++ b/tests/tapl/com/android/launcher3/tapl/AddToHomeScreenPrompt.java @@ -42,10 +42,13 @@ public class AddToHomeScreenPrompt { try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck()) { if (mLauncher.getNavigationModel() != LauncherInstrumentation.NavigationModel.THREE_BUTTON) { - mLauncher.expectEvent( - TestProtocol.SEQUENCE_TIS, LauncherInstrumentation.EVENT_TOUCH_DOWN_TIS); - mLauncher.expectEvent( - TestProtocol.SEQUENCE_TIS, LauncherInstrumentation.EVENT_TOUCH_UP_TIS); + if (!mLauncher.isLauncher3()) { + mLauncher.expectEvent( + TestProtocol.SEQUENCE_TIS, + LauncherInstrumentation.EVENT_TOUCH_DOWN_TIS); + mLauncher.expectEvent( + TestProtocol.SEQUENCE_TIS, LauncherInstrumentation.EVENT_TOUCH_UP_TIS); + } } mLauncher.waitForObjectInContainer( mWidgetCell.getParent().getParent().getParent().getParent(), diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java index 9b12a62bde..d894843261 100644 --- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java +++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java @@ -677,7 +677,7 @@ public final class LauncherInstrumentation { try (LauncherInstrumentation.Closable c = addContextLayer(action)) { mDevice.waitForIdle(); - if (getNavigationModel() == NavigationModel.TWO_BUTTON) { + if (!isLauncher3() && getNavigationModel() == NavigationModel.TWO_BUTTON) { expectEvent(TestProtocol.SEQUENCE_TIS, EVENT_TOUCH_DOWN_TIS); expectEvent(TestProtocol.SEQUENCE_TIS, EVENT_TOUCH_UP_TIS); } @@ -962,7 +962,7 @@ public final class LauncherInstrumentation { void clickLauncherObject(UiObject2 object) { expectEvent(TestProtocol.SEQUENCE_MAIN, LauncherInstrumentation.EVENT_TOUCH_DOWN); expectEvent(TestProtocol.SEQUENCE_MAIN, LauncherInstrumentation.EVENT_TOUCH_UP); - if (getNavigationModel() != NavigationModel.THREE_BUTTON) { + if (!isLauncher3() && getNavigationModel() != NavigationModel.THREE_BUTTON) { expectEvent(TestProtocol.SEQUENCE_TIS, LauncherInstrumentation.EVENT_TOUCH_DOWN_TIS); expectEvent(TestProtocol.SEQUENCE_TIS, LauncherInstrumentation.EVENT_TOUCH_UP_TIS); } @@ -1104,24 +1104,25 @@ public final class LauncherInstrumentation { public void sendPointer(long downTime, long currentTime, int action, Point point, GestureScope gestureScope) { + final boolean notLauncher3 = !isLauncher3(); switch (action) { case MotionEvent.ACTION_DOWN: if (gestureScope != GestureScope.OUTSIDE) { expectEvent(TestProtocol.SEQUENCE_MAIN, EVENT_TOUCH_DOWN); } - if (getNavigationModel() != NavigationModel.THREE_BUTTON) { + if (notLauncher3 && getNavigationModel() != NavigationModel.THREE_BUTTON) { expectEvent(TestProtocol.SEQUENCE_TIS, EVENT_TOUCH_DOWN_TIS); } break; case MotionEvent.ACTION_UP: - if (gestureScope != GestureScope.INSIDE) { + if (notLauncher3 && gestureScope != GestureScope.INSIDE) { expectEvent(TestProtocol.SEQUENCE_MAIN, EVENT_PILFER_POINTERS); } if (gestureScope != GestureScope.OUTSIDE) { expectEvent(TestProtocol.SEQUENCE_MAIN, gestureScope == GestureScope.INSIDE ? EVENT_TOUCH_UP : EVENT_TOUCH_CANCEL); } - if (getNavigationModel() != NavigationModel.THREE_BUTTON) { + if (notLauncher3 && getNavigationModel() != NavigationModel.THREE_BUTTON) { expectEvent(TestProtocol.SEQUENCE_TIS, EVENT_TOUCH_UP_TIS); } break; @@ -1276,11 +1277,6 @@ public final class LauncherInstrumentation { public Closable eventsCheck() { Assert.assertTrue("Nested event checking", !sCheckingEvents); - if ("com.android.launcher3".equals(getLauncherPackageName())) { - // Not checking specific Launcher3 event sequences. - return () -> { - }; - } sCheckingEvents = true; mExpectedPid = getPid(); if (sEventChecker == null) sEventChecker = new LogEventChecker(); @@ -1304,6 +1300,10 @@ public final class LauncherInstrumentation { }; } + boolean isLauncher3() { + return "com.android.launcher3".equals(getLauncherPackageName()); + } + void expectEvent(String sequence, Pattern expected) { if (sCheckingEvents) sEventChecker.expectPattern(sequence, expected); } From e90adc47ef114e129a14382f30d84910ef394348 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 6 Mar 2020 00:01:49 -0800 Subject: [PATCH 06/41] Fallback to predefined orientation handler if recents view isn't available Change-Id: Iaed42fb9ef598d65e1cf2d166cc343f888352d47 --- .../com/android/quickstep/FallbackSwipeHandler.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java index 65fba08831..ce67457658 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java @@ -41,6 +41,9 @@ import android.view.MotionEvent; import com.android.launcher3.R; import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.AnimatorPlaybackController; +import com.android.launcher3.touch.LandscapePagedViewHandler; +import com.android.launcher3.touch.PagedOrientationHandler; +import com.android.launcher3.touch.PortraitPagedViewHandler; import com.android.launcher3.util.ObjectWrapper; import com.android.quickstep.BaseActivityInterface.HomeAnimationFactory; import com.android.quickstep.GestureState.GestureEndTarget; @@ -470,8 +473,13 @@ public class FallbackSwipeHandler extends BaseSwipeUpHandler Date: Fri, 6 Mar 2020 10:50:43 -0800 Subject: [PATCH 07/41] OverviewActions: Renaming overview_actions_container and setActionsView Change-Id: Ie444101f246e0d00980b47ce39f6e74dade23f73 --- .../res/layout/fallback_recents_activity.xml | 2 +- .../src/com/android/quickstep/views/RecentsView.java | 5 ++--- res/layout/launcher.xml | 2 +- ...iew_actions_holder.xml => overview_actions_container.xml} | 0 4 files changed, 4 insertions(+), 5 deletions(-) rename res/layout/{overview_actions_holder.xml => overview_actions_container.xml} (100%) diff --git a/quickstep/recents_ui_overrides/res/layout/fallback_recents_activity.xml b/quickstep/recents_ui_overrides/res/layout/fallback_recents_activity.xml index 686189ea81..ffe906c179 100644 --- a/quickstep/recents_ui_overrides/res/layout/fallback_recents_activity.xml +++ b/quickstep/recents_ui_overrides/res/layout/fallback_recents_activity.xml @@ -31,6 +31,6 @@ + layout="@layout/overview_actions_container" /> diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java index 872e690acc..68ccb8c255 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java @@ -88,7 +88,6 @@ import com.android.launcher3.DeviceProfile; import com.android.launcher3.Insettable; import com.android.launcher3.InsettableFrameLayout; import com.android.launcher3.InvariantDeviceProfile; -import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.PagedView; import com.android.launcher3.R; @@ -479,7 +478,7 @@ public abstract class RecentsView extends PagedView impl mIPinnedStackAnimationListener.setActivity(mActivity); SystemUiProxy.INSTANCE.get(getContext()).setPinnedStackAnimationListener( mIPinnedStackAnimationListener); - addActionsView(); + setActionsView(); } @Override @@ -2105,7 +2104,7 @@ public abstract class RecentsView extends PagedView impl } } - private void addActionsView() { + private void setActionsView() { if (mActionsView == null && ENABLE_OVERVIEW_ACTIONS.get() && SysUINavigationMode.removeShelfFromOverview(mActivity)) { mActionsView = ((ViewGroup) getParent()).findViewById(R.id.overview_actions_view); diff --git a/res/layout/launcher.xml b/res/layout/launcher.xml index 196eb0f1cf..ab6c960be6 100644 --- a/res/layout/launcher.xml +++ b/res/layout/launcher.xml @@ -50,7 +50,7 @@ + layout="@layout/overview_actions_container" /> diff --git a/res/layout/overview_actions_holder.xml b/res/layout/overview_actions_container.xml similarity index 100% rename from res/layout/overview_actions_holder.xml rename to res/layout/overview_actions_container.xml From a579ddc9c813f314ab3dfd4e80a9c0cf1c77ec61 Mon Sep 17 00:00:00 2001 From: Samuel Fufa Date: Thu, 27 Feb 2020 16:59:19 -0800 Subject: [PATCH 08/41] Refactor logging to capture Target hierarchy Instead of creating a fixed number of targets, we now pass an ArrayList of targets to. Any class implementing LogContainerProviders#fillInLogContainerData can setup it's own target and add it to the ArrayList, It can also pass the ArrayList to other LogContainerProvider to capture full Target hierarchy. Bug: 147305863 Change-Id: I0063c692120fb9e1cff2d8902c5da972d0623418 --- .../appprediction/PredictionRowView.java | 33 +++- .../HotseatPredictionController.java | 6 +- ...EventDispatcherAppPredictionExtension.java | 4 +- .../logging/StatsLogCompatManager.java | 32 ++-- src/com/android/launcher3/BaseActivity.java | 9 +- src/com/android/launcher3/Hotseat.java | 15 +- src/com/android/launcher3/Launcher.java | 24 +-- .../launcher3/SecondaryDropTarget.java | 7 +- src/com/android/launcher3/Workspace.java | 25 +-- .../allapps/AllAppsContainerView.java | 14 +- .../allapps/AllAppsRecyclerView.java | 13 +- .../dragndrop/PinItemDragListener.java | 10 +- src/com/android/launcher3/folder/Folder.java | 28 ++- .../launcher3/logging/LoggerUtils.java | 10 ++ .../launcher3/logging/StatsLogUtils.java | 13 +- .../logging/UserEventDispatcher.java | 168 +++++++++--------- .../popup/PopupContainerWithArrow.java | 17 +- .../launcher3/widget/BaseWidgetSheet.java | 10 +- 18 files changed, 241 insertions(+), 197 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/PredictionRowView.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/PredictionRowView.java index 834e6cf0fb..8faec46580 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/PredictionRowView.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/PredictionRowView.java @@ -1,5 +1,5 @@ -/** - * Copyright (C) 2019 The Android Open Source Project +/* + * Copyright (C) 2012 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. @@ -16,8 +16,11 @@ package com.android.launcher3.appprediction; +import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound; +import static com.android.launcher3.logging.LoggerUtils.newContainerTarget; +import static com.android.launcher3.logging.LoggerUtils.newTarget; import android.annotation.TargetApi; import android.content.Context; @@ -44,6 +47,7 @@ import com.android.launcher3.ItemInfoWithIcon; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherSettings; +import com.android.launcher3.LauncherState; import com.android.launcher3.R; import com.android.launcher3.WorkspaceItemInfo; import com.android.launcher3.allapps.AllAppsStore; @@ -187,7 +191,7 @@ public class PredictionRowView extends LinearLayout implements public int getExpectedHeight() { return getVisibility() == GONE ? 0 : Launcher.getLauncher(getContext()).getDeviceProfile().allAppsCellHeightPx - + getPaddingTop() + getPaddingBottom(); + + getPaddingTop() + getPaddingBottom(); } @Override @@ -282,7 +286,8 @@ public class PredictionRowView extends LinearLayout implements mParent.onHeightUpdated(); } - private List processPredictedAppComponents(List components) { + private List processPredictedAppComponents( + List components) { if (getAppsStore().getApps().length == 0) { // Apps have not been bound yet. return Collections.emptyList(); @@ -309,16 +314,26 @@ public class PredictionRowView extends LinearLayout implements } @Override - public void fillInLogContainerData(View v, ItemInfo info, LauncherLogProto.Target target, - LauncherLogProto.Target targetParent) { + public void fillInLogContainerData(ItemInfo childInfo, LauncherLogProto.Target child, + ArrayList parents) { for (int i = 0; i < mPredictedApps.size(); i++) { ItemInfoWithIcon appInfo = mPredictedApps.get(i); - if (appInfo == info) { - targetParent.containerType = LauncherLogProto.ContainerType.PREDICTION; - target.predictedRank = i; + if (appInfo == childInfo) { + child.predictedRank = i; break; } } + parents.add(newContainerTarget(LauncherLogProto.ContainerType.PREDICTION)); + + // include where the prediction is coming this used to be Launcher#modifyUserEvent + LauncherLogProto.Target parent = newTarget(LauncherLogProto.Target.Type.CONTAINER); + LauncherState state = mLauncher.getStateManager().getState(); + if (state == LauncherState.ALL_APPS) { + parent.containerType = LauncherLogProto.ContainerType.ALLAPPS; + } else if (state == OVERVIEW) { + parent.containerType = LauncherLogProto.ContainerType.TASKSWITCHER; + } + parents.add(parent); } public void setTextAlpha(int textAlpha) { diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java index 0b054277e1..ff4bb74425 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java @@ -575,9 +575,9 @@ public class HotseatPredictionController implements DragController.DragListener, } @Override - public void fillInLogContainerData(View v, ItemInfo info, LauncherLogProto.Target target, - LauncherLogProto.Target targetParent) { - mHotseat.fillInLogContainerData(v, info, target, targetParent); + public void fillInLogContainerData(ItemInfo childInfo, LauncherLogProto.Target child, + ArrayList parents) { + mHotseat.fillInLogContainerData(childInfo, child, parents); } private class PinPrediction extends SystemShortcut { diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/logging/UserEventDispatcherAppPredictionExtension.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/logging/UserEventDispatcherAppPredictionExtension.java index b251f9e697..b9ef57eaa3 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/logging/UserEventDispatcherAppPredictionExtension.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/logging/UserEventDispatcherAppPredictionExtension.java @@ -23,6 +23,8 @@ import com.android.launcher3.ItemInfo; import com.android.launcher3.appprediction.PredictionUiStateManager; import com.android.launcher3.userevent.nano.LauncherLogProto; +import java.util.ArrayList; + /** * This class handles AOSP MetricsLogger function calls and logging around * quickstep interactions and app launches. @@ -41,7 +43,7 @@ public class UserEventDispatcherAppPredictionExtension extends UserEventDispatch @Override protected void onFillInLogContainerData( @NonNull ItemInfo itemInfo, @NonNull LauncherLogProto.Target target, - @NonNull LauncherLogProto.Target targetParent) { + @NonNull ArrayList targets) { PredictionUiStateManager.fillInPredictedRank(itemInfo, target); } } diff --git a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java index 53859ad5bf..22fe2e13eb 100644 --- a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java +++ b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java @@ -24,6 +24,8 @@ import static android.stats.launcher.nano.Launcher.LAUNCH_APP; import static android.stats.launcher.nano.Launcher.LAUNCH_TASK; import static android.stats.launcher.nano.Launcher.OVERVIEW; +import static com.android.launcher3.logging.UserEventDispatcher.makeTargetsList; + import android.content.Context; import android.content.Intent; import android.os.UserHandle; @@ -47,6 +49,8 @@ import com.android.systemui.shared.system.SysUiStatsLog; import com.google.protobuf.nano.MessageNano; +import java.util.ArrayList; + /** * This method calls the StatsLog hidden method until they are made available public. * @@ -61,7 +65,8 @@ public class StatsLogCompatManager extends StatsLogManager { private static final String TAG = "StatsLogCompatManager"; private static final boolean DEBUG = false; - public StatsLogCompatManager(Context context) { } + public StatsLogCompatManager(Context context) { + } @Override public void logAppLaunch(View v, Intent intent, @Nullable UserHandle userHandle) { @@ -120,14 +125,17 @@ public class StatsLogCompatManager extends StatsLogManager { return false; } - ItemInfo itemInfo = (ItemInfo) v.getTag(); Target child = new Target(); - Target parent = new Target(); - provider.fillInLogContainerData(v, itemInfo, child, parent); - extension.srcTarget[0] = new LauncherTarget(); - extension.srcTarget[1] = new LauncherTarget(); - copy(child, extension.srcTarget[0]); - copy(parent, extension.srcTarget[1]); + ArrayList targets = makeTargetsList(child); + targets.add(child); + provider.fillInLogContainerData((ItemInfo) v.getTag(), child, targets); + + int maxDepth = Math.min(SUPPORTED_TARGET_DEPTH, targets.size()); + extension.srcTarget = new LauncherTarget[maxDepth]; + for (int i = 0; i < maxDepth; i++) { + extension.srcTarget[i] = new LauncherTarget(); + copy(targets.get(i), extension.srcTarget[i]); + } return true; } @@ -238,10 +246,10 @@ public class StatsLogCompatManager extends StatsLogManager { @Override public void verify() { - if(!(StatsLogUtils.LAUNCHER_STATE_ALLAPPS == ALLAPPS && - StatsLogUtils.LAUNCHER_STATE_BACKGROUND == BACKGROUND && - StatsLogUtils.LAUNCHER_STATE_OVERVIEW == OVERVIEW && - StatsLogUtils.LAUNCHER_STATE_HOME == HOME)) { + if (!(StatsLogUtils.LAUNCHER_STATE_ALLAPPS == ALLAPPS + && StatsLogUtils.LAUNCHER_STATE_BACKGROUND == BACKGROUND + && StatsLogUtils.LAUNCHER_STATE_OVERVIEW == OVERVIEW + && StatsLogUtils.LAUNCHER_STATE_HOME == HOME)) { throw new IllegalStateException( "StatsLogUtil constants doesn't match enums in launcher.proto"); } diff --git a/src/com/android/launcher3/BaseActivity.java b/src/com/android/launcher3/BaseActivity.java index 217a41c083..814b72882b 100644 --- a/src/com/android/launcher3/BaseActivity.java +++ b/src/com/android/launcher3/BaseActivity.java @@ -40,7 +40,6 @@ import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.logging.StatsLogUtils; import com.android.launcher3.logging.StatsLogUtils.LogStateProvider; import com.android.launcher3.logging.UserEventDispatcher; -import com.android.launcher3.logging.UserEventDispatcher.UserEventDelegate; import com.android.launcher3.testing.TestLogging; import com.android.launcher3.testing.TestProtocol; import com.android.launcher3.userevent.nano.LauncherLogProto; @@ -52,8 +51,10 @@ import java.io.PrintWriter; import java.lang.annotation.Retention; import java.util.ArrayList; -public abstract class BaseActivity extends Activity - implements UserEventDelegate, LogStateProvider, ActivityContext { +/** + * Launcher BaseActivity + */ +public abstract class BaseActivity extends Activity implements LogStateProvider, ActivityContext { private static final String TAG = "BaseActivity"; @@ -155,7 +156,7 @@ public abstract class BaseActivity extends Activity public final UserEventDispatcher getUserEventDispatcher() { if (mUserEventDispatcher == null) { - mUserEventDispatcher = UserEventDispatcher.newInstance(this, this); + mUserEventDispatcher = UserEventDispatcher.newInstance(this); } return mUserEventDispatcher; } diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java index b89e727207..76cfe1c59e 100644 --- a/src/com/android/launcher3/Hotseat.java +++ b/src/com/android/launcher3/Hotseat.java @@ -16,12 +16,13 @@ package com.android.launcher3; +import static com.android.launcher3.logging.LoggerUtils.newContainerTarget; + import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; import android.view.Gravity; import android.view.MotionEvent; -import android.view.View; import android.view.ViewDebug; import android.view.ViewGroup; import android.widget.FrameLayout; @@ -32,6 +33,8 @@ import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.userevent.nano.LauncherLogProto.Target; import com.android.launcher3.views.Transposable; +import java.util.ArrayList; + public class Hotseat extends CellLayout implements LogContainerProvider, Insettable, Transposable { @ViewDebug.ExportedProperty(category = "launcher") @@ -75,10 +78,12 @@ public class Hotseat extends CellLayout implements LogContainerProvider, Insetta } @Override - public void fillInLogContainerData(View v, ItemInfo info, Target target, Target targetParent) { - target.gridX = info.cellX; - target.gridY = info.cellY; - targetParent.containerType = LauncherLogProto.ContainerType.HOTSEAT; + public void fillInLogContainerData(ItemInfo childInfo, Target child, + ArrayList parents) { + child.rank = childInfo.rank; + child.gridX = childInfo.cellX; + child.gridY = childInfo.cellY; + parents.add(newContainerTarget(LauncherLogProto.ContainerType.HOTSEAT)); } @Override diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 20ebc7a27d..b78d2f30de 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -30,7 +30,6 @@ import static com.android.launcher3.LauncherState.OVERVIEW_PEEK; import static com.android.launcher3.Utilities.postAsyncCallback; import static com.android.launcher3.dragndrop.DragLayer.ALPHA_INDEX_LAUNCHER_LOAD; import static com.android.launcher3.logging.LoggerUtils.newContainerTarget; -import static com.android.launcher3.logging.LoggerUtils.newTarget; import static com.android.launcher3.popup.SystemShortcut.APP_INFO; import static com.android.launcher3.popup.SystemShortcut.INSTALL; import static com.android.launcher3.popup.SystemShortcut.WIDGETS; @@ -110,7 +109,6 @@ import com.android.launcher3.keyboard.ViewGroupFocusHelper; import com.android.launcher3.logging.FileLog; import com.android.launcher3.logging.StatsLogUtils; import com.android.launcher3.logging.UserEventDispatcher; -import com.android.launcher3.logging.UserEventDispatcher.UserEventDelegate; import com.android.launcher3.model.AppLaunchTracker; import com.android.launcher3.model.BgDataModel.Callbacks; import com.android.launcher3.model.ModelWriter; @@ -126,7 +124,6 @@ import com.android.launcher3.testing.TestProtocol; import com.android.launcher3.touch.AllAppsSwipeController; import com.android.launcher3.touch.ItemClickHandler; import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper; -import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.userevent.nano.LauncherLogProto.Action; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; import com.android.launcher3.userevent.nano.LauncherLogProto.Target; @@ -183,8 +180,7 @@ import java.util.stream.Stream; * Default launcher application. */ public class Launcher extends BaseDraggingActivity implements LauncherExterns, - Callbacks, UserEventDelegate, - InvariantDeviceProfile.OnIDPChangeListener, PluginListener { + Callbacks, InvariantDeviceProfile.OnIDPChangeListener, PluginListener { public static final String TAG = "Launcher"; public static final ActivityTracker ACTIVITY_TRACKER = new ActivityTracker<>(); @@ -1889,24 +1885,6 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, return StatsLogUtils.LAUNCHER_STATE_HOME; } - @Override - public void modifyUserEvent(LauncherLogProto.LauncherEvent event) { - if (event.srcTarget != null && event.srcTarget.length > 0 && - event.srcTarget[1].containerType == ContainerType.PREDICTION) { - Target[] targets = new Target[3]; - targets[0] = event.srcTarget[0]; - targets[1] = event.srcTarget[1]; - targets[2] = newTarget(Target.Type.CONTAINER); - event.srcTarget = targets; - LauncherState state = mStateManager.getState(); - if (state == LauncherState.ALL_APPS) { - event.srcTarget[2].containerType = ContainerType.ALLAPPS; - } else if (state == OVERVIEW) { - event.srcTarget[2].containerType = ContainerType.TASKSWITCHER; - } - } - } - @Override public boolean startActivitySafely(View v, Intent intent, ItemInfo item, @Nullable String sourceContainer) { diff --git a/src/com/android/launcher3/SecondaryDropTarget.java b/src/com/android/launcher3/SecondaryDropTarget.java index 184113413b..2430d5e87d 100644 --- a/src/com/android/launcher3/SecondaryDropTarget.java +++ b/src/com/android/launcher3/SecondaryDropTarget.java @@ -41,6 +41,7 @@ import com.android.launcher3.util.PackageManagerHelper; import com.android.launcher3.util.Themes; import java.net.URISyntaxException; +import java.util.ArrayList; /** * Drop target which provides a secondary option for an item. @@ -322,9 +323,9 @@ public class SecondaryDropTarget extends ButtonDropTarget implements OnAlarmList } @Override - public void fillInLogContainerData(View v, ItemInfo info, Target target, - Target targetParent) { - mOriginal.fillInLogContainerData(v, info, target, targetParent); + public void fillInLogContainerData(ItemInfo childInfo, Target child, + ArrayList parents) { + mOriginal.fillInLogContainerData(childInfo, child, parents); } @Override diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 590c620020..fc1a074501 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -24,6 +24,7 @@ import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.LauncherState.SPRING_LOADED; import static com.android.launcher3.config.FeatureFlags.ADAPTIVE_ICON_WINDOW_ANIM; import static com.android.launcher3.dragndrop.DragLayer.ALPHA_INDEX_OVERLAY; +import static com.android.launcher3.logging.LoggerUtils.newContainerTarget; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -3309,17 +3310,21 @@ public class Workspace extends PagedView } @Override - public void fillInLogContainerData(View v, ItemInfo info, Target target, Target targetParent) { - target.gridX = info.cellX; - target.gridY = info.cellY; - target.pageIndex = getCurrentPage(); - targetParent.containerType = ContainerType.WORKSPACE; - if (info.container == LauncherSettings.Favorites.CONTAINER_HOTSEAT) { - target.rank = info.rank; - targetParent.containerType = ContainerType.HOTSEAT; - } else if (info.container >= 0) { - targetParent.containerType = ContainerType.FOLDER; + public void fillInLogContainerData(ItemInfo childInfo, Target child, + ArrayList parents) { + if (childInfo.container == LauncherSettings.Favorites.CONTAINER_HOTSEAT + || childInfo.container == LauncherSettings.Favorites.CONTAINER_HOTSEAT_PREDICTION) { + getHotseat().fillInLogContainerData(childInfo, child, parents); + return; + } else if (childInfo.container >= 0) { + FolderIcon icon = (FolderIcon) getHomescreenIconByItemId(childInfo.container); + icon.getFolder().fillInLogContainerData(childInfo, child, parents); + return; } + child.gridX = childInfo.cellX; + child.gridY = childInfo.cellY; + child.pageIndex = getCurrentPage(); + parents.add(newContainerTarget(ContainerType.WORKSPACE)); } /** diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index afb72172b8..a2957bc08d 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -18,6 +18,8 @@ package com.android.launcher3.allapps; import static android.view.View.MeasureSpec.EXACTLY; import static android.view.View.MeasureSpec.makeMeasureSpec; +import static com.android.launcher3.logging.LoggerUtils.newContainerTarget; + import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Canvas; @@ -65,6 +67,8 @@ import com.android.launcher3.views.RecyclerViewFastScroller; import com.android.launcher3.views.SpringRelativeLayout; import com.android.launcher3.views.WorkFooterContainer; +import java.util.ArrayList; + /** * The all apps view container. */ @@ -327,12 +331,10 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo } @Override - public void fillInLogContainerData(View v, ItemInfo info, Target target, Target targetParent) { - if (getApps().hasFilter()) { - targetParent.containerType = ContainerType.SEARCHRESULT; - } else { - targetParent.containerType = ContainerType.ALLAPPS; - } + public void fillInLogContainerData(ItemInfo childInfo, Target child, + ArrayList parents) { + parents.add(newContainerTarget( + getApps().hasFilter() ? ContainerType.SEARCHRESULT : ContainerType.ALLAPPS)); } @Override diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java index b6744cff58..c228ddf88c 100644 --- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java +++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java @@ -17,6 +17,8 @@ package com.android.launcher3.allapps; import static android.view.View.MeasureSpec.UNSPECIFIED; +import static com.android.launcher3.logging.LoggerUtils.newContainerTarget; + import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; @@ -40,6 +42,7 @@ import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; import com.android.launcher3.userevent.nano.LauncherLogProto.Target; import com.android.launcher3.views.RecyclerViewFastScroller; +import java.util.ArrayList; import java.util.List; /** @@ -145,12 +148,10 @@ public class AllAppsRecyclerView extends BaseRecyclerView implements LogContaine } @Override - public void fillInLogContainerData(View v, ItemInfo info, Target target, Target targetParent) { - if (mApps.hasFilter()) { - targetParent.containerType = ContainerType.SEARCHRESULT; - } else { - targetParent.containerType = ContainerType.ALLAPPS; - } + public void fillInLogContainerData(ItemInfo childInfo, Target child, + ArrayList parents) { + parents.add(newContainerTarget( + getApps().hasFilter() ? ContainerType.SEARCHRESULT : ContainerType.ALLAPPS)); } public void onSearchResultsChanged() { diff --git a/src/com/android/launcher3/dragndrop/PinItemDragListener.java b/src/com/android/launcher3/dragndrop/PinItemDragListener.java index 869dd948ba..77c630638b 100644 --- a/src/com/android/launcher3/dragndrop/PinItemDragListener.java +++ b/src/com/android/launcher3/dragndrop/PinItemDragListener.java @@ -16,6 +16,8 @@ package com.android.launcher3.dragndrop; +import static com.android.launcher3.logging.LoggerUtils.newContainerTarget; + import android.annotation.TargetApi; import android.appwidget.AppWidgetManager; import android.content.pm.LauncherApps.PinItemRequest; @@ -38,6 +40,8 @@ import com.android.launcher3.widget.PendingAddWidgetInfo; import com.android.launcher3.widget.PendingItemDragHelper; import com.android.launcher3.widget.WidgetAddFlowHandler; +import java.util.ArrayList; + /** * {@link DragSource} for handling drop from a different window. This object is initialized * in the source window and is passed on to the Launcher activity as an Intent extra. @@ -103,9 +107,9 @@ public class PinItemDragListener extends BaseItemDragListener { } @Override - public void fillInLogContainerData(View v, ItemInfo info, LauncherLogProto.Target target, - LauncherLogProto.Target targetParent) { - targetParent.containerType = LauncherLogProto.ContainerType.PINITEM; + public void fillInLogContainerData(ItemInfo childInfo, LauncherLogProto.Target child, + ArrayList parents) { + parents.add(newContainerTarget(LauncherLogProto.ContainerType.PINITEM)); } @Override diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java index 69f93de55e..2be8ff463d 100644 --- a/src/com/android/launcher3/folder/Folder.java +++ b/src/com/android/launcher3/folder/Folder.java @@ -27,6 +27,7 @@ import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.compat.AccessibilityManagerCompat.sendCustomAccessibilityEvent; import static com.android.launcher3.config.FeatureFlags.ALWAYS_USE_HARDWARE_OPTIMIZATION_FOR_FOLDER_ANIMATIONS; +import static com.android.launcher3.logging.LoggerUtils.newContainerTarget; import static com.android.launcher3.userevent.LauncherLogProto.Target.FromFolderLabelState.FROM_CUSTOM; import static com.android.launcher3.userevent.LauncherLogProto.Target.FromFolderLabelState.FROM_EMPTY; import static com.android.launcher3.userevent.LauncherLogProto.Target.FromFolderLabelState.FROM_FOLDER_LABEL_STATE_UNSPECIFIED; @@ -89,7 +90,6 @@ import com.android.launcher3.dragndrop.DragController; import com.android.launcher3.dragndrop.DragController.DragListener; import com.android.launcher3.dragndrop.DragLayer; import com.android.launcher3.dragndrop.DragOptions; -import com.android.launcher3.logging.LoggerUtils; import com.android.launcher3.pageindicators.PageIndicatorDots; import com.android.launcher3.userevent.LauncherLogProto.Action; import com.android.launcher3.userevent.LauncherLogProto.ContainerType; @@ -1459,12 +1459,24 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo } @Override - public void fillInLogContainerData(View v, ItemInfo info, LauncherLogProto.Target target, - LauncherLogProto.Target targetParent) { - target.gridX = info.cellX; - target.gridY = info.cellY; - target.pageIndex = mContent.getCurrentPage(); - targetParent.containerType = LauncherLogProto.ContainerType.FOLDER; + public void fillInLogContainerData(ItemInfo childInfo, LauncherLogProto.Target child, + ArrayList targets) { + child.gridX = childInfo.cellX; + child.gridY = childInfo.cellY; + child.pageIndex = mContent.getCurrentPage(); + + LauncherLogProto.Target target = newContainerTarget(LauncherLogProto.ContainerType.FOLDER); + target.pageIndex = mInfo.screenId; + target.gridX = mInfo.cellX; + target.gridY = mInfo.cellY; + targets.add(target); + + // continue to parent + if (mInfo.container == CONTAINER_HOTSEAT) { + mLauncher.getHotseat().fillInLogContainerData(mInfo, target, targets); + } else { + mLauncher.getWorkspace().fillInLogContainerData(mInfo, target, targets); + } } private class OnScrollHintListener implements OnAlarmListener { @@ -1597,7 +1609,7 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo } } else { mLauncher.getUserEventDispatcher().logActionTapOutside( - LoggerUtils.newContainerTarget(LauncherLogProto.ContainerType.FOLDER)); + newContainerTarget(LauncherLogProto.ContainerType.FOLDER)); close(true); return true; } diff --git a/src/com/android/launcher3/logging/LoggerUtils.java b/src/com/android/launcher3/logging/LoggerUtils.java index b004edf8fd..a9d10d775d 100644 --- a/src/com/android/launcher3/logging/LoggerUtils.java +++ b/src/com/android/launcher3/logging/LoggerUtils.java @@ -37,6 +37,7 @@ import com.android.launcher3.util.InstantAppResolver; import java.lang.reflect.Field; import java.lang.reflect.Modifier; +import java.util.ArrayList; /** * Helper methods for logging. @@ -255,4 +256,13 @@ public class LoggerUtils { event.action = action; return event; } + + /** + * Creates LauncherEvent using Action and ArrayList of Targets + */ + public static LauncherEvent newLauncherEvent(Action action, ArrayList targets) { + Target[] targetsArray = new Target[targets.size()]; + targets.toArray(targetsArray); + return newLauncherEvent(action, targetsArray); + } } diff --git a/src/com/android/launcher3/logging/StatsLogUtils.java b/src/com/android/launcher3/logging/StatsLogUtils.java index b02a0504ff..844961205e 100644 --- a/src/com/android/launcher3/logging/StatsLogUtils.java +++ b/src/com/android/launcher3/logging/StatsLogUtils.java @@ -5,11 +5,13 @@ import static com.android.launcher3.userevent.nano.LauncherLogProto.ContainerTyp import android.view.View; import android.view.ViewParent; +import androidx.annotation.Nullable; + import com.android.launcher3.ItemInfo; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; import com.android.launcher3.userevent.nano.LauncherLogProto.Target; -import androidx.annotation.Nullable; +import java.util.ArrayList; public class StatsLogUtils { @@ -35,14 +37,9 @@ public class StatsLogUtils { public interface LogContainerProvider { /** - * Copies data from the source to the destination proto. - * - * @param v source of the data - * @param info source of the data - * @param target dest of the data - * @param targetParent dest of the data + * Populates parent container targets for an item */ - void fillInLogContainerData(View v, ItemInfo info, Target target, Target targetParent); + void fillInLogContainerData(ItemInfo childInfo, Target child, ArrayList parents); } /** diff --git a/src/com/android/launcher3/logging/UserEventDispatcher.java b/src/com/android/launcher3/logging/UserEventDispatcher.java index afa3f6d9e7..513bf6256f 100644 --- a/src/com/android/launcher3/logging/UserEventDispatcher.java +++ b/src/com/android/launcher3/logging/UserEventDispatcher.java @@ -57,6 +57,7 @@ import com.android.launcher3.util.InstantAppResolver; import com.android.launcher3.util.LogConfig; import com.android.launcher3.util.ResourceBasedOverride; +import java.util.ArrayList; import java.util.Locale; import java.util.UUID; @@ -72,8 +73,10 @@ public class UserEventDispatcher implements ResourceBasedOverride { private static final boolean IS_VERBOSE = Utilities.isPropertyEnabled(LogConfig.USEREVENT); private static final String UUID_STORAGE = "uuid"; - public static UserEventDispatcher newInstance(Context context, - UserEventDelegate delegate) { + /** + * A factory method for UserEventDispatcher + */ + public static UserEventDispatcher newInstance(Context context) { SharedPreferences sharedPrefs = Utilities.getDevicePrefs(context); String uuidStr = sharedPrefs.getString(UUID_STORAGE, null); if (uuidStr == null) { @@ -82,41 +85,31 @@ public class UserEventDispatcher implements ResourceBasedOverride { } UserEventDispatcher ued = Overrides.getObject(UserEventDispatcher.class, context.getApplicationContext(), R.string.user_event_dispatcher_class); - ued.mDelegate = delegate; ued.mUuidStr = uuidStr; ued.mInstantAppResolver = InstantAppResolver.newInstance(context); return ued; } - public static UserEventDispatcher newInstance(Context context) { - return newInstance(context, null); - } - - public interface UserEventDelegate { - void modifyUserEvent(LauncherEvent event); - } /** * Fills in the container data on the given event if the given view is not null. * * @return whether container data was added. */ - public boolean fillInLogContainerData(LauncherLogProto.LauncherEvent event, @Nullable View v) { - // Fill in grid(x,y), pageIndex of the child and container type of the parent - LogContainerProvider provider = StatsLogUtils.getLaunchProviderRecursive(v); - if (v == null || !(v.getTag() instanceof ItemInfo) || provider == null) { + public boolean fillLogContainer(@Nullable View v, Target child, + @Nullable ArrayList targets) { + LogContainerProvider firstParent = StatsLogUtils.getLaunchProviderRecursive(v); + if (v == null || !(v.getTag() instanceof ItemInfo) || firstParent == null) { return false; } final ItemInfo itemInfo = (ItemInfo) v.getTag(); - final Target target = event.srcTarget[0]; - final Target targetParent = event.srcTarget[1]; - onFillInLogContainerData(itemInfo, target, targetParent); - provider.fillInLogContainerData(v, itemInfo, target, targetParent); + firstParent.fillInLogContainerData(itemInfo, child, targets); return true; } - protected void onFillInLogContainerData( - @NonNull ItemInfo itemInfo, @NonNull Target target, @NonNull Target targetParent) { } + protected void onFillInLogContainerData(@NonNull ItemInfo itemInfo, @NonNull Target target, + @NonNull ArrayList targets) { + } private boolean mSessionStarted; private long mElapsedContainerMillis; @@ -125,7 +118,6 @@ public class UserEventDispatcher implements ResourceBasedOverride { private String mUuidStr; protected InstantAppResolver mInstantAppResolver; private boolean mAppOrTaskLaunch; - private UserEventDelegate mDelegate; private boolean mPreviousHomeGesture; // APP_ICON SHORTCUT WIDGET @@ -136,16 +128,15 @@ public class UserEventDispatcher implements ResourceBasedOverride { // -------------------------------------------------------------- @Deprecated - public void logAppLaunch(View v, Intent intent, @Nullable UserHandle userHandle) { - LauncherEvent event = newLauncherEvent(newTouchAction(Action.Touch.TAP), - newItemTarget(v, mInstantAppResolver), newTarget(Target.Type.CONTAINER)); - - if (fillInLogContainerData(event, v)) { - if (mDelegate != null) { - mDelegate.modifyUserEvent(event); - } - fillIntentInfo(event.srcTarget[0], intent, userHandle); + public void logAppLaunch(View v, Intent intent, @Nullable UserHandle userHandle) { + Target itemTarget = newItemTarget(v, mInstantAppResolver); + Action action = newTouchAction(Action.Touch.TAP); + ArrayList targets = makeTargetsList(itemTarget); + if (fillLogContainer(v, itemTarget, targets)) { + onFillInLogContainerData((ItemInfo) v.getTag(), itemTarget, targets); + fillIntentInfo(itemTarget, intent, userHandle); } + LauncherEvent event = newLauncherEvent(action, targets); ItemInfo info = (ItemInfo) v.getTag(); if (info != null && Utilities.IS_DEBUG_DEVICE && FeatureFlags.ENABLE_HYBRID_HOTSEAT.get()) { FileLog.d(TAG, "appLaunch: packageName:" + info.getTargetComponent().getPackageName() @@ -194,8 +185,11 @@ public class UserEventDispatcher implements ResourceBasedOverride { public void logNotificationLaunch(View v, PendingIntent intent) { LauncherEvent event = newLauncherEvent(newTouchAction(Action.Touch.TAP), newItemTarget(v, mInstantAppResolver), newTarget(Target.Type.CONTAINER)); - if (fillInLogContainerData(event, v)) { - event.srcTarget[0].packageNameHash = (mUuidStr + intent.getCreatorPackage()).hashCode(); + Target itemTarget = newItemTarget(v, mInstantAppResolver); + ArrayList targets = makeTargetsList(itemTarget); + + if (fillLogContainer(v, itemTarget, targets)) { + itemTarget.packageNameHash = (mUuidStr + intent.getCreatorPackage()).hashCode(); } dispatchUserEvent(event, null); } @@ -241,50 +235,45 @@ public class UserEventDispatcher implements ResourceBasedOverride { LauncherEvent event = newLauncherEvent(newCommandAction(command), newItemTarget(itemView, mInstantAppResolver), newTarget(Target.Type.CONTAINER)); - if (fillInLogContainerData(event, itemView)) { + Target itemTarget = newItemTarget(itemView, mInstantAppResolver); + ArrayList targets = makeTargetsList(itemTarget); + + if (fillLogContainer(itemView, itemTarget, targets)) { // TODO: Remove the following two lines once fillInLogContainerData can take in a // container view. - event.srcTarget[0].type = Target.Type.CONTAINER; - event.srcTarget[0].containerType = srcContainerType; + itemTarget.type = Target.Type.CONTAINER; + itemTarget.containerType = srcContainerType; } dispatchUserEvent(event, null); } public void logActionOnControl(int action, int controlType) { - logActionOnControl(action, controlType, null, -1); + logActionOnControl(action, controlType, null); } public void logActionOnControl(int action, int controlType, int parentContainerType) { logActionOnControl(action, controlType, null, parentContainerType); } - public void logActionOnControl(int action, int controlType, @Nullable View controlInContainer) { - logActionOnControl(action, controlType, controlInContainer, -1); - } + /** + * Logs control action with proper parent hierarchy + */ + public void logActionOnControl(int actionType, int controlType, + @Nullable View controlInContainer, int... parentTypes) { + Target control = newTarget(Target.Type.CONTROL); + control.controlType = controlType; + Action action = newAction(actionType); - public void logActionOnControl(int action, int controlType, int parentContainer, - int grandParentContainer) { - LauncherEvent event = newLauncherEvent(newTouchAction(action), - newControlTarget(controlType), - newContainerTarget(parentContainer), - newContainerTarget(grandParentContainer)); - dispatchUserEvent(event, null); - } - - public void logActionOnControl(int action, int controlType, @Nullable View controlInContainer, - int parentContainerType) { - final LauncherEvent event = (controlInContainer == null && parentContainerType < 0) - ? newLauncherEvent(newTouchAction(action), newTarget(Target.Type.CONTROL)) - : newLauncherEvent(newTouchAction(action), newTarget(Target.Type.CONTROL), - newTarget(Target.Type.CONTAINER)); - event.srcTarget[0].controlType = controlType; + ArrayList targets = makeTargetsList(control); if (controlInContainer != null) { - fillInLogContainerData(event, controlInContainer); + fillLogContainer(controlInContainer, control, targets); } - if (parentContainerType >= 0) { - event.srcTarget[1].containerType = parentContainerType; + for (int parentContainerType : parentTypes) { + if (parentContainerType < 0) continue; + targets.add(newContainerTarget(parentContainerType)); } - if (action == Action.Touch.DRAGDROP) { + LauncherEvent event = newLauncherEvent(action, targets); + if (actionType == Action.Touch.DRAGDROP) { event.actionDurationMillis = SystemClock.uptimeMillis() - mActionDurationMillis; } dispatchUserEvent(event, null); @@ -375,15 +364,16 @@ public class UserEventDispatcher implements ResourceBasedOverride { * Logs proto lite version of LauncherEvent object to clearcut. */ public void logLauncherEvent( - com.android.launcher3.userevent.LauncherLogProto.LauncherEvent launcherEvent) { + com.android.launcher3.userevent.LauncherLogProto.LauncherEvent launcherEvent) { if (mPreviousHomeGesture) { mPreviousHomeGesture = false; } mAppOrTaskLaunch = false; launcherEvent.toBuilder() - .setElapsedContainerMillis(SystemClock.uptimeMillis() - mElapsedContainerMillis) - .setElapsedSessionMillis(SystemClock.uptimeMillis() - mElapsedSessionMillis).build(); + .setElapsedContainerMillis(SystemClock.uptimeMillis() - mElapsedContainerMillis) + .setElapsedSessionMillis( + SystemClock.uptimeMillis() - mElapsedSessionMillis).build(); if (!IS_VERBOSE) { return; } @@ -391,36 +381,35 @@ public class UserEventDispatcher implements ResourceBasedOverride { } public void logDeepShortcutsOpen(View icon) { - LogContainerProvider provider = StatsLogUtils.getLaunchProviderRecursive(icon); - if (icon == null || !(icon.getTag() instanceof ItemInfo || provider == null)) { - return; - } ItemInfo info = (ItemInfo) icon.getTag(); - LauncherEvent event = newLauncherEvent(newTouchAction(Action.Touch.LONGPRESS), - newItemTarget(info, mInstantAppResolver), newTarget(Target.Type.CONTAINER)); - provider.fillInLogContainerData(icon, info, event.srcTarget[0], event.srcTarget[1]); - dispatchUserEvent(event, null); - + Target child = newItemTarget(info, mInstantAppResolver); + ArrayList targets = makeTargetsList(child); + fillLogContainer(icon, child, targets); + dispatchUserEvent(newLauncherEvent(newTouchAction(Action.Touch.TAP), targets), null); resetElapsedContainerMillis("deep shortcut open"); } public void logDragNDrop(DropTarget.DragObject dragObj, View dropTargetAsView) { - LauncherEvent event = newLauncherEvent(newTouchAction(Action.Touch.DRAGDROP), - newItemTarget(dragObj.originalDragInfo, mInstantAppResolver), - newTarget(Target.Type.CONTAINER)); - event.destTarget = new Target[]{ - newItemTarget(dragObj.originalDragInfo, mInstantAppResolver), - newDropTarget(dropTargetAsView) - }; + Target srcChild = newItemTarget(dragObj.originalDragInfo, mInstantAppResolver); + ArrayList srcTargets = makeTargetsList(srcChild); - dragObj.dragSource.fillInLogContainerData(null, dragObj.originalDragInfo, - event.srcTarget[0], event.srcTarget[1]); + Target destChild = newItemTarget(dragObj.originalDragInfo, mInstantAppResolver); + ArrayList destTargets = makeTargetsList(destChild); + + dragObj.dragSource.fillInLogContainerData(dragObj.originalDragInfo, srcChild, srcTargets); if (dropTargetAsView instanceof LogContainerProvider) { - ((LogContainerProvider) dropTargetAsView).fillInLogContainerData(null, - dragObj.dragInfo, event.destTarget[0], event.destTarget[1]); - + ((LogContainerProvider) dropTargetAsView).fillInLogContainerData(dragObj.dragInfo, + destChild, destTargets); } + else { + destTargets.add(newDropTarget(dropTargetAsView)); + } + LauncherEvent event = newLauncherEvent(newTouchAction(Action.Touch.DRAGDROP), srcTargets); + Target[] destTargetsArray = new Target[destTargets.size()]; + destTargets.toArray(destTargetsArray); + event.destTarget = destTargetsArray; + event.actionDurationMillis = SystemClock.uptimeMillis() - mActionDurationMillis; dispatchUserEvent(event, null); } @@ -444,8 +433,6 @@ public class UserEventDispatcher implements ResourceBasedOverride { /** * Currently logs following containers: workspace, allapps, widget tray. - * - * @param reason */ public final void resetElapsedContainerMillis(String reason) { mElapsedContainerMillis = SystemClock.uptimeMillis(); @@ -515,4 +502,15 @@ public class UserEventDispatcher implements ResourceBasedOverride { } return result; } + + /** + * Constructs an ArrayList with targets + */ + public static ArrayList makeTargetsList(Target... targets) { + ArrayList result = new ArrayList<>(); + for (Target target : targets) { + result.add(target); + } + return result; + } } diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java index 445acca5c9..5af5ebb4f5 100644 --- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java +++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java @@ -18,6 +18,7 @@ package com.android.launcher3.popup; import static com.android.launcher3.Utilities.squaredHypot; import static com.android.launcher3.Utilities.squaredTouchSlop; +import static com.android.launcher3.logging.LoggerUtils.newContainerTarget; import static com.android.launcher3.notification.NotificationMainView.NOTIFICATION_ITEM_INFO; import static com.android.launcher3.popup.PopupPopulator.MAX_SHORTCUTS; import static com.android.launcher3.popup.PopupPopulator.MAX_SHORTCUTS_IF_NOTIFICATIONS; @@ -58,7 +59,6 @@ import com.android.launcher3.dot.DotInfo; import com.android.launcher3.dragndrop.DragController; import com.android.launcher3.dragndrop.DragOptions; import com.android.launcher3.dragndrop.DragView; -import com.android.launcher3.logging.LoggerUtils; import com.android.launcher3.notification.NotificationInfo; import com.android.launcher3.notification.NotificationItemView; import com.android.launcher3.notification.NotificationKeyData; @@ -172,7 +172,7 @@ public class PopupContainerWithArrow extends Arr BaseDragLayer dl = getPopupContainer(); if (!dl.isEventOverView(this, ev)) { mLauncher.getUserEventDispatcher().logActionTapOutside( - LoggerUtils.newContainerTarget(ContainerType.DEEPSHORTCUTS)); + newContainerTarget(ContainerType.DEEPSHORTCUTS)); close(true); // We let touches on the original icon go through so that users can launch @@ -485,14 +485,15 @@ public class PopupContainerWithArrow extends Arr } @Override - public void fillInLogContainerData(View v, ItemInfo info, Target target, Target targetParent) { - if (info == NOTIFICATION_ITEM_INFO) { - target.itemType = ItemType.NOTIFICATION; + public void fillInLogContainerData(ItemInfo childInfo, Target child, + ArrayList parents) { + if (childInfo == NOTIFICATION_ITEM_INFO) { + child.itemType = ItemType.NOTIFICATION; } else { - target.itemType = ItemType.DEEPSHORTCUT; - target.rank = info.rank; + child.itemType = ItemType.DEEPSHORTCUT; + child.rank = childInfo.rank; } - targetParent.containerType = ContainerType.DEEPSHORTCUTS; + parents.add(newContainerTarget(ContainerType.DEEPSHORTCUTS)); } @Override diff --git a/src/com/android/launcher3/widget/BaseWidgetSheet.java b/src/com/android/launcher3/widget/BaseWidgetSheet.java index df1a4696db..73a061594f 100644 --- a/src/com/android/launcher3/widget/BaseWidgetSheet.java +++ b/src/com/android/launcher3/widget/BaseWidgetSheet.java @@ -41,6 +41,8 @@ import com.android.launcher3.util.SystemUiController; import com.android.launcher3.util.Themes; import com.android.launcher3.views.AbstractSlideInView; +import java.util.ArrayList; + /** * Base class for various widgets popup */ @@ -144,9 +146,11 @@ abstract class BaseWidgetSheet extends AbstractSlideInView } @Override - public void fillInLogContainerData(View v, ItemInfo info, Target target, Target targetParent) { - targetParent.containerType = ContainerType.WIDGETS; - targetParent.cardinality = getElementsRowCount(); + public void fillInLogContainerData(ItemInfo childInfo, Target child, + ArrayList parents) { + Target target = newContainerTarget(ContainerType.WIDGETS); + target.cardinality = getElementsRowCount(); + parents.add(target); } @Override From 8687bc2131ce98ea0d058290dd21f03b5a429c82 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 27 Feb 2020 23:34:24 -0800 Subject: [PATCH 09/41] Initial changes to support blur - Add a new controller to update the background blur on either the launcher or app surfaces based on state or transition Bug: 149792636 Change-Id: I6103cd3d53a00c8025558dd49bb73137e2980014 --- .../res/values/colors.xml | 14 ++ .../res/values/config.xml | 21 +++ .../res/values/dimens.xml | 14 ++ .../LauncherAppTransitionManagerImpl.java | 5 +- .../states/BackgroundAppState.java | 8 + .../uioverrides/states/OverviewState.java | 6 + .../AppToOverviewAnimationProvider.java | 50 ++++-- .../quickstep/LauncherActivityInterface.java | 23 +++ .../quickstep/LauncherSwipeHandler.java | 5 +- .../android/quickstep/RecentsActivity.java | 6 +- .../com/android/quickstep/TaskViewUtils.java | 24 ++- .../util/AppWindowAnimationHelper.java | 21 ++- .../quickstep/views/LauncherRecentsView.java | 6 + .../android/quickstep/views/RecentsView.java | 18 +- .../launcher3/BaseQuickstepLauncher.java | 1 + .../QuickstepAppTransitionManagerImpl.java | 90 ++++++---- .../uioverrides/BackgroundBlurController.java | 160 ++++++++++++++++++ .../uioverrides/states/AllAppsState.java | 8 + .../quickstep/BaseActivityInterface.java | 5 + .../util/RemoteAnimationProvider.java | 22 +++ src/com/android/launcher3/Launcher.java | 22 ++- src/com/android/launcher3/LauncherState.java | 9 + .../folder/FolderAnimationManager.java | 9 + .../uioverrides/BackgroundBlurController.java | 57 +++++++ 24 files changed, 540 insertions(+), 64 deletions(-) create mode 100644 quickstep/recents_ui_overrides/res/values/config.xml create mode 100644 quickstep/src/com/android/launcher3/uioverrides/BackgroundBlurController.java create mode 100644 src_ui_overrides/com/android/launcher3/uioverrides/BackgroundBlurController.java diff --git a/quickstep/recents_ui_overrides/res/values/colors.xml b/quickstep/recents_ui_overrides/res/values/colors.xml index 7426e30396..361f5f70c0 100644 --- a/quickstep/recents_ui_overrides/res/values/colors.xml +++ b/quickstep/recents_ui_overrides/res/values/colors.xml @@ -1,4 +1,18 @@ + #fff diff --git a/quickstep/recents_ui_overrides/res/values/config.xml b/quickstep/recents_ui_overrides/res/values/config.xml new file mode 100644 index 0000000000..527eec6457 --- /dev/null +++ b/quickstep/recents_ui_overrides/res/values/config.xml @@ -0,0 +1,21 @@ + + + + 150 + 90 + 50 + 20 + \ No newline at end of file diff --git a/quickstep/recents_ui_overrides/res/values/dimens.xml b/quickstep/recents_ui_overrides/res/values/dimens.xml index 61c576e82b..20b148537f 100644 --- a/quickstep/recents_ui_overrides/res/values/dimens.xml +++ b/quickstep/recents_ui_overrides/res/values/dimens.xml @@ -1,4 +1,18 @@ + 1dp 20dp diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java index 772820719b..7bc656a570 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java @@ -91,8 +91,9 @@ public final class LauncherAppTransitionManagerImpl extends QuickstepAppTransiti AppWindowAnimationHelper helper = new AppWindowAnimationHelper(recentsView.getPagedViewOrientedState(), mLauncher); - anim.play(getRecentsWindowAnimator(taskView, skipLauncherChanges, appTargets, - wallpaperTargets, helper).setDuration(RECENTS_LAUNCH_DURATION)); + Animator recentsAnimator = getRecentsWindowAnimator(taskView, skipLauncherChanges, + appTargets, wallpaperTargets, mLauncher.getBackgroundBlurController(), helper); + anim.play(recentsAnimator.setDuration(RECENTS_LAUNCH_DURATION)); Animator childStateAnimation = null; // Found a visible recents task that matches the opening app, lets launch the app from there diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java index 48a2f323d4..5bac964b1a 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java @@ -15,8 +15,11 @@ */ package com.android.launcher3.uioverrides.states; +import android.content.Context; + import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.Launcher; +import com.android.launcher3.R; import com.android.launcher3.allapps.AllAppsTransitionController; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.quickstep.util.LayoutUtils; @@ -102,4 +105,9 @@ public class BackgroundAppState extends OverviewState { } return super.getHotseatScaleAndTranslation(launcher); } + + @Override + public int getBackgroundBlurRadius(Context context) { + return context.getResources().getInteger(R.integer.app_background_blur_radius); + } } diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/OverviewState.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/OverviewState.java index 7895bac4d2..bfbb6305b9 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/OverviewState.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/OverviewState.java @@ -35,6 +35,7 @@ import static com.android.launcher3.states.RotationHelper.REQUEST_ROTATE; import static com.android.quickstep.SysUINavigationMode.Mode.NO_BUTTON; import static com.android.quickstep.SysUINavigationMode.removeShelfFromOverview; +import android.content.Context; import android.graphics.Rect; import android.view.View; import android.view.accessibility.AccessibilityEvent; @@ -205,6 +206,11 @@ public class OverviewState extends LauncherState { return LayoutUtils.getDefaultSwipeHeight(launcher, launcher.getDeviceProfile()); } + @Override + public int getBackgroundBlurRadius(Context context) { + return context.getResources().getInteger(R.integer.overview_background_blur_radius); + } + @Override public void onBackPressed(Launcher launcher) { TaskView taskView = launcher.getOverviewPanel().getRunningTaskView(); diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java index 375f16013f..e1ff4f4525 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java @@ -15,13 +15,17 @@ */ package com.android.quickstep; +import static com.android.launcher3.LauncherState.BACKGROUND_APP; +import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN; import static com.android.launcher3.anim.Interpolators.TOUCH_RESPONSE_INTERPOLATOR; +import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING; import android.animation.Animator; import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.graphics.Rect; import android.util.Log; @@ -30,7 +34,9 @@ import android.view.View; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.BaseDraggingActivity; import com.android.launcher3.anim.AnimationSuccessListener; +import com.android.launcher3.uioverrides.BackgroundBlurController; import com.android.quickstep.util.AppWindowAnimationHelper; +import com.android.quickstep.util.AppWindowAnimationHelper.TransformParams; import com.android.quickstep.util.RemoteAnimationProvider; import com.android.quickstep.views.RecentsView; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; @@ -38,7 +44,7 @@ import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat; import com.android.systemui.shared.system.TransactionCompat; /** - * Provider for the atomic remote window animation from the app to the overview. + * Provider for the atomic (for 3-button mode) remote window animation from the app to the overview. * * @param activity that contains the overview */ @@ -48,15 +54,15 @@ final class AppToOverviewAnimationProvider imple private static final long RECENTS_LAUNCH_DURATION = 250; private static final String TAG = "AppToOverviewAnimationProvider"; - private final BaseActivityInterface mHelper; + private final BaseActivityInterface mActivityInterface; // The id of the currently running task that is transitioning to overview. private final int mTargetTaskId; private T mActivity; private RecentsView mRecentsView; - AppToOverviewAnimationProvider(BaseActivityInterface helper, int targetTaskId) { - mHelper = helper; + AppToOverviewAnimationProvider(BaseActivityInterface activityInterface, int targetTaskId) { + mActivityInterface = activityInterface; mTargetTaskId = targetTaskId; } @@ -70,7 +76,7 @@ final class AppToOverviewAnimationProvider imple activity.getOverviewPanel().showCurrentTask(mTargetTaskId); AbstractFloatingView.closeAllOpenViews(activity, wasVisible); BaseActivityInterface.AnimationFactory factory = - mHelper.prepareRecentsUI(wasVisible, + mActivityInterface.prepareRecentsUI(wasVisible, false /* animate activity */, (controller) -> { controller.dispatchOnStart(); ValueAnimator anim = controller.getAnimationPlayer() @@ -98,11 +104,18 @@ final class AppToOverviewAnimationProvider imple if (mRecentsView != null) { mRecentsView.setRunningTaskIconScaledDown(true); } + + BackgroundBlurController blurController = mActivityInterface.getBackgroundBlurController(); + if (blurController != null) { + // Update the surface to be the lowest closing app surface + blurController.setSurfaceToLauncher(mRecentsView); + } + AnimatorSet anim = new AnimatorSet(); anim.addListener(new AnimationSuccessListener() { @Override public void onAnimationSuccess(Animator animator) { - mHelper.onSwipeUpToRecentsComplete(); + mActivityInterface.onSwipeUpToRecentsComplete(); if (mRecentsView != null) { mRecentsView.animateUpRunningTaskIconScale(); } @@ -110,7 +123,8 @@ final class AppToOverviewAnimationProvider imple }); if (mActivity == null) { Log.e(TAG, "Animation created, before activity"); - anim.play(ValueAnimator.ofInt(0, 1).setDuration(RECENTS_LAUNCH_DURATION)); + anim.play(ValueAnimator.ofInt(0, 1).setDuration(RECENTS_LAUNCH_DURATION)) + .with(createBackgroundBlurAnimator(blurController)); return anim; } @@ -121,7 +135,8 @@ final class AppToOverviewAnimationProvider imple RemoteAnimationTargetCompat runningTaskTarget = targets.findTask(mTargetTaskId); if (runningTaskTarget == null) { Log.e(TAG, "No closing app"); - anim.play(ValueAnimator.ofInt(0, 1).setDuration(RECENTS_LAUNCH_DURATION)); + anim.play(ValueAnimator.ofInt(0, 1).setDuration(RECENTS_LAUNCH_DURATION)) + .with(createBackgroundBlurAnimator(blurController)); return anim; } @@ -138,11 +153,12 @@ final class AppToOverviewAnimationProvider imple clipHelper.updateSource(homeBounds, runningTaskTarget); Rect targetRect = new Rect(); - mHelper.getSwipeUpDestinationAndLength(mActivity.getDeviceProfile(), mActivity, targetRect); + mActivityInterface.getSwipeUpDestinationAndLength(mActivity.getDeviceProfile(), mActivity, + targetRect); clipHelper.updateTargetRect(targetRect); clipHelper.prepareAnimation(mActivity.getDeviceProfile(), false /* isOpening */); - AppWindowAnimationHelper.TransformParams params = new AppWindowAnimationHelper.TransformParams() + TransformParams params = new TransformParams() .setSyncTransactionApplier(new SyncRtSurfaceTransactionApplierCompat(rootView)); ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1); valueAnimator.setDuration(RECENTS_LAUNCH_DURATION); @@ -167,7 +183,8 @@ final class AppToOverviewAnimationProvider imple transaction.apply(); }); } - anim.play(valueAnimator); + anim.play(valueAnimator) + .with(createBackgroundBlurAnimator(blurController)); return anim; } @@ -179,4 +196,15 @@ final class AppToOverviewAnimationProvider imple long getRecentsLaunchDuration() { return RECENTS_LAUNCH_DURATION; } + + private Animator createBackgroundBlurAnimator(BackgroundBlurController blurController) { + if (blurController == null) { + // Dummy animation + return ValueAnimator.ofInt(0); + } + return ObjectAnimator.ofInt(blurController, BACKGROUND_BLUR, + BACKGROUND_APP.getBackgroundBlurRadius(mActivity), + OVERVIEW.getBackgroundBlurRadius(mActivity)) + .setDuration(RECENTS_LAUNCH_DURATION); + } } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java index ccc2150ce0..d402a75602 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java @@ -56,6 +56,8 @@ import com.android.launcher3.allapps.DiscoveryBounce; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.appprediction.PredictionUiStateManager; import com.android.launcher3.touch.PagedOrientationHandler; +import com.android.launcher3.uioverrides.BackgroundBlurController; +import com.android.launcher3.uioverrides.BackgroundBlurController.ClampedBlurProperty; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.views.FloatingIconView; import com.android.quickstep.SysUINavigationMode.Mode; @@ -327,8 +329,19 @@ public final class LauncherActivityInterface implements BaseActivityInterface } setupRecentsViewUi(); + mActivityInterface.getBackgroundBlurController().setSurfaceToLauncher(mRecentsView); if (mDeviceState.getNavMode() == TWO_BUTTONS) { // If the device is in two button mode, swiping up will show overview with predictions @@ -1015,7 +1016,9 @@ public class LauncherSwipeHandler HomeAnimationFactory homeAnimationFactory) { RectFSpringAnim anim = super.createWindowAnimationToHome(startProgress, homeAnimationFactory); - anim.addOnUpdateListener((r, p) -> updateSysUiFlags(Math.max(p, mCurrentShift.value))); + anim.addOnUpdateListener((r, p) -> { + updateSysUiFlags(Math.max(p, mCurrentShift.value)); + }); anim.addAnimatorListener(new AnimationSuccessListener() { @Override public void onAnimationStart(Animator animation) { diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java index 94b0051a51..f2e8f9663d 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java @@ -185,8 +185,10 @@ public final class RecentsActivity extends BaseRecentsActivity { boolean activityClosing = taskIsATargetWithMode(appTargets, getTaskId(), MODE_CLOSING); AppWindowAnimationHelper helper = new AppWindowAnimationHelper( mFallbackRecentsView.getPagedViewOrientedState(), this); - target.play(getRecentsWindowAnimator(taskView, !activityClosing, appTargets, - wallpaperTargets, helper).setDuration(RECENTS_LAUNCH_DURATION)); + Animator recentsAnimator = getRecentsWindowAnimator(taskView, !activityClosing, appTargets, + wallpaperTargets, null /* backgroundBlurController */, + helper); + target.play(recentsAnimator.setDuration(RECENTS_LAUNCH_DURATION)); // Found a visible recents task that matches the opening app, lets launch the app from there if (activityClosing) { diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java index 8d735915d9..38b86cea43 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java @@ -15,13 +15,17 @@ */ package com.android.quickstep; +import static com.android.launcher3.LauncherState.BACKGROUND_APP; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.anim.Interpolators.TOUCH_RESPONSE_INTERPOLATOR; import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE; +import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; +import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.content.ComponentName; import android.graphics.RectF; @@ -31,6 +35,7 @@ import com.android.launcher3.BaseActivity; import com.android.launcher3.BaseDraggingActivity; import com.android.launcher3.ItemInfo; import com.android.launcher3.Utilities; +import com.android.launcher3.uioverrides.BackgroundBlurController; import com.android.quickstep.util.AppWindowAnimationHelper; import com.android.quickstep.util.MultiValueUpdateListener; import com.android.quickstep.views.RecentsView; @@ -115,9 +120,11 @@ public final class TaskViewUtils { * @return Animator that controls the window of the opening targets for the recents launch * animation. */ - public static ValueAnimator getRecentsWindowAnimator(TaskView v, boolean skipViewChanges, + public static Animator getRecentsWindowAnimator(TaskView v, boolean skipViewChanges, RemoteAnimationTargetCompat[] appTargets, - RemoteAnimationTargetCompat[] wallpaperTargets, final AppWindowAnimationHelper inOutHelper) { + RemoteAnimationTargetCompat[] wallpaperTargets, + BackgroundBlurController backgroundBlurController, + final AppWindowAnimationHelper inOutHelper) { SyncRtSurfaceTransactionApplierCompat applier = new SyncRtSurfaceTransactionApplierCompat(v); final RemoteAnimationTargets targets = @@ -129,6 +136,7 @@ public final class TaskViewUtils { .setTargetSet(targets) .setLauncherOnTop(true); + AnimatorSet animatorSet = new AnimatorSet(); final RecentsView recentsView = v.getRecentsView(); final ValueAnimator appAnimator = ValueAnimator.ofFloat(0, 1); appAnimator.setInterpolator(TOUCH_RESPONSE_INTERPOLATOR); @@ -137,8 +145,6 @@ public final class TaskViewUtils { // Defer fading out the view until after the app window gets faded in final FloatProp mViewAlpha = new FloatProp(1f, 0f, 75, 75, LINEAR); final FloatProp mTaskAlpha = new FloatProp(0f, 1f, 0, 75, LINEAR); - - final RectF mThumbnailRect; { @@ -208,6 +214,14 @@ public final class TaskViewUtils { targets.release(); } }); - return appAnimator; + + if (backgroundBlurController != null) { + ObjectAnimator backgroundRadiusAnim = ObjectAnimator.ofInt(backgroundBlurController, + BACKGROUND_BLUR, BACKGROUND_APP.getBackgroundBlurRadius(v.getContext())); + animatorSet.playTogether(appAnimator, backgroundRadiusAnim); + } else { + animatorSet.play(appAnimator); + } + return animatorSet; } } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/AppWindowAnimationHelper.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/AppWindowAnimationHelper.java index 91af1563d2..681ce0237b 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/AppWindowAnimationHelper.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/AppWindowAnimationHelper.java @@ -17,6 +17,7 @@ package com.android.quickstep.util; import android.annotation.TargetApi; import android.content.Context; +import android.content.res.Resources; import android.graphics.Matrix; import android.graphics.Matrix.ScaleToFit; import android.graphics.Rect; @@ -104,9 +105,10 @@ public class AppWindowAnimationHelper { private TargetAlphaProvider mBaseAlphaCallback = (t, a) -> 1; public AppWindowAnimationHelper(PagedViewOrientedState orientedState, Context context) { + Resources res = context.getResources(); mOrientedState = orientedState; - mWindowCornerRadius = getWindowCornerRadius(context.getResources()); - mSupportsRoundedCornersOnWindows = supportsRoundedCornersOnWindows(context.getResources()); + mWindowCornerRadius = getWindowCornerRadius(res); + mSupportsRoundedCornersOnWindows = supportsRoundedCornersOnWindows(res); mTaskCornerRadius = TaskCornerRadius.get(context); mUseRoundedCornersOnWindows = mSupportsRoundedCornersOnWindows; } @@ -196,14 +198,15 @@ public class AppWindowAnimationHelper { SurfaceParams[] surfaceParams = new SurfaceParams[params.mTargetSet.unfilteredApps.length]; for (int i = 0; i < params.mTargetSet.unfilteredApps.length; i++) { RemoteAnimationTargetCompat app = params.mTargetSet.unfilteredApps[i]; + SurfaceParams.Builder builder = new SurfaceParams.Builder(app.leash); mTmpMatrix.setTranslate(app.position.x, app.position.y); Rect crop = mTmpRect; crop.set(app.sourceContainerBounds); crop.offsetTo(0, 0); float alpha; - int layer = RemoteAnimationProvider.getLayer(app, mBoostModeTargetLayers); float cornerRadius = 0f; float scale = Math.max(mCurrentRect.width(), mTargetRect.width()) / crop.width(); + int layer = RemoteAnimationProvider.getLayer(app, mBoostModeTargetLayers); if (app.mode == params.mTargetSet.targetMode) { alpha = mTaskAlphaCallback.getAlpha(app, params.mTargetAlpha); if (app.activityType != RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME) { @@ -239,10 +242,14 @@ public class AppWindowAnimationHelper { layer = Integer.MAX_VALUE; } } - // Since radius is in Surface space, but we draw the rounded corners in screen space, we - // have to undo the scale. - surfaceParams[i] = new SurfaceParams(app.leash, alpha, mTmpMatrix, crop, layer, - cornerRadius / scale); + builder.withAlpha(alpha) + .withMatrix(mTmpMatrix) + .withWindowCrop(crop) + .withLayer(layer) + // Since radius is in Surface space, but we draw the rounded corners in screen + // space, we have to undo the scale + .withCornerRadius(cornerRadius / scale); + surfaceParams[i] = builder.build(); } return surfaceParams; } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java index ab8b02f5ff..f60da18f93 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java @@ -48,6 +48,7 @@ import com.android.launcher3.anim.Interpolators; import com.android.launcher3.appprediction.PredictionUiStateManager; import com.android.launcher3.appprediction.PredictionUiStateManager.Client; import com.android.launcher3.states.RotationHelper; +import com.android.launcher3.uioverrides.BackgroundBlurController; import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper; import com.android.launcher3.util.TraceHelper; import com.android.launcher3.views.ScrimView; @@ -405,4 +406,9 @@ public class LauncherRecentsView extends RecentsView implements StateL mRecentsExtraViewContainer.setAlpha(alpha); } } + + @Override + protected BackgroundBlurController getBackgroundBlurController() { + return mActivity.getBackgroundBlurController(); + } } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java index 872e690acc..9a11f6e28f 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java @@ -22,6 +22,7 @@ import static com.android.launcher3.BaseActivity.STATE_HANDLER_INVISIBILITY_FLAG import static com.android.launcher3.InvariantDeviceProfile.CHANGE_FLAG_ICON_PARAMS; import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_X; +import static com.android.launcher3.LauncherState.BACKGROUND_APP; import static com.android.launcher3.Utilities.EDGE_NAV_BAR; import static com.android.launcher3.Utilities.squaredHypot; import static com.android.launcher3.Utilities.squaredTouchSlop; @@ -32,6 +33,7 @@ import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.config.FeatureFlags.ENABLE_OVERVIEW_ACTIONS; import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE; import static com.android.launcher3.config.FeatureFlags.UNSTABLE_SPRINGS; +import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR; import static com.android.launcher3.uioverrides.touchcontrollers.TaskViewTouchController.SUCCESS_TRANSITION_PROGRESS; import static com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch.TAP; import static com.android.launcher3.userevent.nano.LauncherLogProto.ControlType.CLEAR_ALL_BUTTON; @@ -103,6 +105,7 @@ import com.android.launcher3.dragndrop.DragLayer; import com.android.launcher3.graphics.RotationMode; import com.android.launcher3.states.RotationHelper; import com.android.launcher3.touch.PagedOrientationHandler.CurveProperties; +import com.android.launcher3.uioverrides.BackgroundBlurController; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch; @@ -1767,8 +1770,16 @@ public abstract class RecentsView extends PagedView impl appWindowAnimationHelper.fromTaskThumbnailView(tv.getThumbnail(), this); appWindowAnimationHelper.prepareAnimation(mActivity.getDeviceProfile(), true /* isOpening */); AnimatorSet anim = createAdjacentPageAnimForTaskLaunch(tv, appWindowAnimationHelper); + + BackgroundBlurController blurController = getBackgroundBlurController(); + if (blurController != null) { + ObjectAnimator backgroundBlur = ObjectAnimator.ofInt(blurController, BACKGROUND_BLUR, + BACKGROUND_APP.getBackgroundBlurRadius(mActivity)); + anim.play(backgroundBlur); + } anim.play(progressAnim); - anim.setDuration(duration).setInterpolator(interpolator); + anim.setDuration(duration) + .setInterpolator(interpolator); Consumer onTaskLaunchFinish = this::onTaskLaunched; @@ -2060,6 +2071,11 @@ public abstract class RecentsView extends PagedView impl super.removeView(view); } + @Nullable + protected BackgroundBlurController getBackgroundBlurController() { + return null; + } + private boolean isExtraCardView(View view, int index) { return !(view instanceof TaskView) && !(view instanceof ClearAllButton) && index <= mTaskViewStartIndex; diff --git a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java index fb0cd17d27..36624fb883 100644 --- a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java @@ -234,6 +234,7 @@ public abstract class BaseQuickstepLauncher extends Launcher return new StateHandler[] { getAllAppsController(), getWorkspace(), + getBackgroundBlurController(), new RecentsViewStateController(this), new BackButtonAlphaHandler(this)}; } diff --git a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java index 2df490eb7c..f69135937d 100644 --- a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java +++ b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java @@ -21,6 +21,7 @@ import static com.android.launcher3.BaseActivity.INVISIBLE_BY_APP_TRANSITIONS; import static com.android.launcher3.BaseActivity.INVISIBLE_BY_PENDING_FLAGS; import static com.android.launcher3.BaseActivity.PENDING_INVISIBLE_BY_WALLPAPER_ANIMATION; import static com.android.launcher3.LauncherState.ALL_APPS; +import static com.android.launcher3.LauncherState.BACKGROUND_APP; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.Utilities.postAsyncCallback; import static com.android.launcher3.allapps.AllAppsTransitionController.ALL_APPS_PROGRESS; @@ -29,6 +30,7 @@ import static com.android.launcher3.anim.Interpolators.DEACCEL_1_7; import static com.android.launcher3.anim.Interpolators.EXAGGERATED_EASE; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.dragndrop.DragLayer.ALPHA_INDEX_TRANSITIONS; +import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR; import static com.android.launcher3.views.FloatingIconView.SHAPE_PROGRESS_DURATION; import static com.android.quickstep.TaskUtils.taskIsATargetWithMode; import static com.android.systemui.shared.system.QuickStepContract.getWindowCornerRadius; @@ -66,6 +68,7 @@ import com.android.launcher3.anim.Interpolators; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.dragndrop.DragLayer; import com.android.launcher3.shortcuts.DeepShortcutView; +import com.android.launcher3.uioverrides.BackgroundBlurController; import com.android.launcher3.util.MultiValueAlpha; import com.android.launcher3.util.MultiValueAlpha.AlphaProperty; import com.android.launcher3.views.FloatingIconView; @@ -87,7 +90,7 @@ import java.lang.ref.WeakReference; /** * {@link LauncherAppTransitionManager} with Quickstep-specific app transitions for launching from - * home and/or all-apps. + * home and/or all-apps. Not used for 3p launchers. */ @TargetApi(Build.VERSION_CODES.O) @SuppressWarnings("unused") @@ -136,7 +139,7 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans // Progress = 0: All apps is fully pulled up, Progress = 1: All apps is fully pulled down. public static final float ALL_APPS_PROGRESS_OFF_SCREEN = 1.3059858f; - protected final Launcher mLauncher; + protected final BaseQuickstepLauncher mLauncher; private final DragLayer mDragLayer; private final AlphaProperty mDragLayerAlpha; @@ -168,7 +171,7 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans }; public QuickstepAppTransitionManagerImpl(Context context) { - mLauncher = Launcher.getLauncher(context); + mLauncher = Launcher.cast(Launcher.getLauncher(context)); mDragLayer = mLauncher.getDragLayer(); mDragLayerAlpha = mDragLayer.getAlphaProperty(ALPHA_INDEX_TRANSITIONS); mHandler = new Handler(Looper.getMainLooper()); @@ -402,9 +405,9 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans float[] alphas, float[] trans); /** - * @return Animator that controls the window of the opening targets. + * @return Animator that controls the window of the opening targets from app icons. */ - private ValueAnimator getOpeningWindowAnimators(View v, + private Animator getOpeningWindowAnimators(View v, RemoteAnimationTargetCompat[] appTargets, RemoteAnimationTargetCompat[] wallpaperTargets, Rect windowTargetBounds, boolean toggleVisibility) { @@ -458,6 +461,7 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans RectF currentBounds = new RectF(); RectF temp = new RectF(); + AnimatorSet animatorSet = new AnimatorSet(); ValueAnimator appAnimator = ValueAnimator.ofFloat(0, 1); appAnimator.setDuration(APP_LAUNCH_DURATION); appAnimator.setInterpolator(LINEAR); @@ -542,15 +546,10 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans SurfaceParams[] params = new SurfaceParams[appTargets.length]; for (int i = appTargets.length - 1; i >= 0; i--) { RemoteAnimationTargetCompat target = appTargets[i]; - Rect targetCrop; - final float alpha; - final float cornerRadius; + SurfaceParams.Builder builder = new SurfaceParams.Builder(target.leash); if (target.mode == MODE_OPENING) { matrix.setScale(scale, scale); matrix.postTranslate(transX0, transY0); - targetCrop = crop; - alpha = 1f - mIconAlpha.value; - cornerRadius = mWindowRadius.value; matrix.mapRect(currentBounds, targetBounds); if (mDeviceProfile.isVerticalBarLayout()) { currentBounds.right -= croppedWidth; @@ -558,22 +557,44 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans currentBounds.bottom -= croppedHeight; } floatingView.update(currentBounds, mIconAlpha.value, percent, 0f, - cornerRadius * scale, true /* isOpening */); + mWindowRadius.value * scale, true /* isOpening */); + builder.withMatrix(matrix) + .withWindowCrop(crop) + .withAlpha(1f - mIconAlpha.value) + .withCornerRadius(mWindowRadius.value); } else { matrix.setTranslate(target.position.x, target.position.y); - targetCrop = target.sourceContainerBounds; - alpha = 1f; - cornerRadius = 0; + builder.withMatrix(matrix) + .withWindowCrop(target.sourceContainerBounds) + .withAlpha(1f); } - - params[i] = new SurfaceParams(target.leash, alpha, matrix, targetCrop, - RemoteAnimationProvider.getLayer(target, MODE_OPENING), - cornerRadius); + builder.withLayer(RemoteAnimationProvider.getLayer(target, MODE_OPENING)); + params[i] = builder.build(); } surfaceApplier.scheduleApply(params); } }); - return appAnimator; + + // When launching an app from overview that doesn't map to a task, we still want to just + // blur the wallpaper instead of the launcher surface as well + boolean allowBlurringLauncher = mLauncher.getStateManager().getState() != OVERVIEW; + BackgroundBlurController blurController = mLauncher.getBackgroundBlurController(); + ObjectAnimator backgroundRadiusAnim = ObjectAnimator.ofInt(blurController, BACKGROUND_BLUR, + BACKGROUND_APP.getBackgroundBlurRadius(mLauncher)) + .setDuration(APP_LAUNCH_DURATION); + if (allowBlurringLauncher) { + blurController.setSurfaceToApp(RemoteAnimationProvider.findLowestOpaqueLayerTarget( + appTargets, MODE_OPENING)); + backgroundRadiusAnim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + blurController.setSurfaceToLauncher(mLauncher.getDragLayer()); + } + }); + } + + animatorSet.playTogether(appAnimator, backgroundRadiusAnim); + return animatorSet; } /** @@ -639,9 +660,12 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans SurfaceParams[] params = new SurfaceParams[appTargets.length]; for (int i = appTargets.length - 1; i >= 0; i--) { RemoteAnimationTargetCompat target = appTargets[i]; - params[i] = new SurfaceParams(target.leash, 1f, null, - target.sourceContainerBounds, - RemoteAnimationProvider.getLayer(target, MODE_OPENING), cornerRadius); + params[i] = new SurfaceParams.Builder(target.leash) + .withAlpha(1f) + .withWindowCrop(target.sourceContainerBounds) + .withLayer(RemoteAnimationProvider.getLayer(target, MODE_OPENING)) + .withCornerRadius(cornerRadius) + .build(); } surfaceApplier.scheduleApply(params); } @@ -672,25 +696,25 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans SurfaceParams[] params = new SurfaceParams[appTargets.length]; for (int i = appTargets.length - 1; i >= 0; i--) { RemoteAnimationTargetCompat target = appTargets[i]; - final float alpha; - final float cornerRadius; + SurfaceParams.Builder builder = new SurfaceParams.Builder(target.leash); if (target.mode == MODE_CLOSING) { matrix.setScale(mScale.value, mScale.value, target.sourceContainerBounds.centerX(), target.sourceContainerBounds.centerY()); matrix.postTranslate(0, mDy.value); matrix.postTranslate(target.position.x, target.position.y); - alpha = mAlpha.value; - cornerRadius = windowCornerRadius; + builder.withMatrix(matrix) + .withAlpha(mAlpha.value) + .withCornerRadius(windowCornerRadius); } else { matrix.setTranslate(target.position.x, target.position.y); - alpha = 1f; - cornerRadius = 0f; + builder.withMatrix(matrix) + .withAlpha(1f); } - params[i] = new SurfaceParams(target.leash, alpha, matrix, - target.sourceContainerBounds, - RemoteAnimationProvider.getLayer(target, MODE_CLOSING), - cornerRadius); + params[i] = builder + .withWindowCrop(target.sourceContainerBounds) + .withLayer(RemoteAnimationProvider.getLayer(target, MODE_CLOSING)) + .build(); } surfaceApplier.scheduleApply(params); } diff --git a/quickstep/src/com/android/launcher3/uioverrides/BackgroundBlurController.java b/quickstep/src/com/android/launcher3/uioverrides/BackgroundBlurController.java new file mode 100644 index 0000000000..9e4ada7cff --- /dev/null +++ b/quickstep/src/com/android/launcher3/uioverrides/BackgroundBlurController.java @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2020 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.launcher3.uioverrides; + +import static com.android.launcher3.anim.Interpolators.LINEAR; + +import android.util.IntProperty; +import android.view.View; +import com.android.launcher3.Launcher; +import com.android.launcher3.LauncherState; +import com.android.launcher3.LauncherStateManager; +import com.android.launcher3.R; +import com.android.launcher3.Utilities; +import com.android.launcher3.anim.AnimatorSetBuilder; +import com.android.launcher3.anim.PropertySetter; +import com.android.systemui.shared.system.RemoteAnimationTargetCompat; +import com.android.systemui.shared.system.SurfaceControlCompat; +import com.android.systemui.shared.system.TransactionCompat; + +/** + * Controls the blur, for the Launcher surface only. + */ +public class BackgroundBlurController implements LauncherStateManager.StateHandler { + + public static final IntProperty BACKGROUND_BLUR = + new IntProperty("backgroundBlur") { + @Override + public void setValue(BackgroundBlurController blurController, int blurRadius) { + blurController.setBackgroundBlurRadius(blurRadius); + } + + @Override + public Integer get(BackgroundBlurController blurController) { + return blurController.mBackgroundBlurRadius; + } + }; + + /** + * A property that updates the background blur within a given range of values (ie. even if the + * animator goes beyond 0..1, the interpolated value will still be bounded). + */ + public static class ClampedBlurProperty extends IntProperty { + private final int mMinValue; + private final int mMaxValue; + + public ClampedBlurProperty(int minValue, int maxValue) { + super(("backgroundBlurClamped")); + mMinValue = minValue; + mMaxValue = maxValue; + } + + @Override + public void setValue(BackgroundBlurController blurController, int blurRadius) { + blurController.setBackgroundBlurRadius(Utilities.boundToRange(blurRadius, + mMinValue, mMaxValue)); + } + + @Override + public Integer get(BackgroundBlurController blurController) { + return blurController.mBackgroundBlurRadius; + } + } + + private final Launcher mLauncher; + private SurfaceControlCompat mSurface; + private int mBackgroundBlurRadius; + + public BackgroundBlurController(Launcher l) { + mLauncher = l; + } + + /** + * @return the background blur adjustment for folders + */ + public int getFolderBackgroundBlurAdjustment() { + return mLauncher.getResources().getInteger( + R.integer.folder_background_blur_radius_adjustment); + } + + /** + * Sets the specified app target surface to apply the blur to. + */ + public void setSurfaceToApp(RemoteAnimationTargetCompat target) { + if (target != null) { + setSurface(target.leash); + } + } + + /** + * Sets the surface to apply the blur to as the launcher surface. + */ + public void setSurfaceToLauncher(View v) { + setSurface(v != null ? new SurfaceControlCompat(v) : null); + } + + private void setSurface(SurfaceControlCompat surface) { + if (mSurface != surface) { + mSurface = surface; + if (surface != null) { + setBackgroundBlurRadius(mBackgroundBlurRadius); + } else { + // If there is no surface, then reset the blur radius + setBackgroundBlurRadius(0); + } + } + } + + @Override + public void setState(LauncherState toState) { + if (mSurface == null) { + return; + } + + int toBackgroundBlurRadius = toState.getBackgroundBlurRadius(mLauncher); + if (mBackgroundBlurRadius != toBackgroundBlurRadius) { + setBackgroundBlurRadius(toBackgroundBlurRadius); + } + } + + @Override + public void setStateWithAnimation(LauncherState toState, AnimatorSetBuilder builder, + LauncherStateManager.AnimationConfig config) { + if (mSurface == null || !config.playNonAtomicComponent()) { + return; + } + + int toBackgroundBlurRadius = toState.getBackgroundBlurRadius(mLauncher); + if (mBackgroundBlurRadius != toBackgroundBlurRadius) { + PropertySetter propertySetter = config.getPropertySetter(builder); + propertySetter.setInt(this, BACKGROUND_BLUR, toBackgroundBlurRadius, LINEAR); + } + } + + private void setBackgroundBlurRadius(int blurRadius) { + // TODO: Do nothing if the shadows are not enabled + // Always update the background blur as it will be reapplied when a surface is next + // available + mBackgroundBlurRadius = blurRadius; + if (mSurface == null || !mSurface.isValid()) { + return; + } + new TransactionCompat() + .setBackgroundBlurRadius(mSurface, blurRadius) + .apply(); + } +} diff --git a/quickstep/src/com/android/launcher3/uioverrides/states/AllAppsState.java b/quickstep/src/com/android/launcher3/uioverrides/states/AllAppsState.java index b5e05ee9fa..971d917445 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/states/AllAppsState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/states/AllAppsState.java @@ -17,9 +17,12 @@ package com.android.launcher3.uioverrides.states; import static com.android.launcher3.anim.Interpolators.DEACCEL_2; +import android.content.Context; + import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; +import com.android.launcher3.R; import com.android.launcher3.allapps.AllAppsContainerView; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; import com.android.quickstep.SysUINavigationMode; @@ -84,6 +87,11 @@ public class AllAppsState extends LauncherState { return scaleAndTranslation; } + @Override + public int getBackgroundBlurRadius(Context context) { + return context.getResources().getInteger(R.integer.allapps_background_blur_radius); + } + @Override public PageAlphaProvider getWorkspacePageAlphaProvider(Launcher launcher) { return PAGE_ALPHA_PROVIDER; diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java index 1d71fe226b..be0bdd8cac 100644 --- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java +++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java @@ -33,6 +33,7 @@ import com.android.launcher3.BaseDraggingActivity; import com.android.launcher3.DeviceProfile; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.touch.PagedOrientationHandler; +import com.android.launcher3.uioverrides.BackgroundBlurController; import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.ShelfPeekAnim; import com.android.systemui.shared.recents.model.ThumbnailData; @@ -80,6 +81,10 @@ public interface BaseActivityInterface { @Nullable T getCreatedActivity(); + default @Nullable BackgroundBlurController getBackgroundBlurController() { + return null; + } + default boolean isResumed() { BaseDraggingActivity activity = getCreatedActivity(); return activity != null && activity.hasBeenResumed(); diff --git a/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java b/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java index 6210fc2008..6520c4f091 100644 --- a/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java +++ b/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java @@ -68,4 +68,26 @@ public interface RemoteAnimationProvider { ? Z_BOOST_BASE + target.prefixOrderIndex : target.prefixOrderIndex; } + + /** + * @return the target with the lowest opaque layer for a certain app animation, or null. + */ + static RemoteAnimationTargetCompat findLowestOpaqueLayerTarget( + RemoteAnimationTargetCompat[] appTargets, int mode) { + int lowestLayer = Integer.MAX_VALUE; + int lowestLayerIndex = -1; + for (int i = appTargets.length - 1; i >= 0; i--) { + RemoteAnimationTargetCompat target = appTargets[i]; + if (target.mode == mode && !target.isTranslucent) { + int layer = getLayer(target, mode); + if (layer < lowestLayer) { + lowestLayer = layer; + lowestLayerIndex = i; + } + } + } + return lowestLayerIndex != -1 + ? appTargets[lowestLayerIndex] + : null; + } } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 20ebc7a27d..c2c09367d1 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -78,6 +78,7 @@ import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; import android.view.accessibility.AccessibilityEvent; import android.view.animation.OvershootInterpolator; import android.widget.Toast; @@ -125,6 +126,7 @@ import com.android.launcher3.testing.TestLogging; import com.android.launcher3.testing.TestProtocol; import com.android.launcher3.touch.AllAppsSwipeController; import com.android.launcher3.touch.ItemClickHandler; +import com.android.launcher3.uioverrides.BackgroundBlurController; import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.userevent.nano.LauncherLogProto.Action; @@ -328,6 +330,9 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, private boolean mDeferOverlayCallbacks; private final Runnable mDeferredOverlayCallbacks = this::checkIfOverlayStillDeferred; + private BackgroundBlurController mBackgroundBlurController = + new BackgroundBlurController(this); + @Override protected void onCreate(Bundle savedInstanceState) { Object traceToken = TraceHelper.INSTANCE.beginSection(ON_CREATE_EVT, @@ -941,6 +946,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, NotificationListener.removeNotificationsChangedListener(); getStateManager().moveToRestState(); + getBackgroundBlurController().setSurfaceToLauncher(null); // Workaround for b/78520668, explicitly trim memory once UI is hidden onTrimMemory(TRIM_MEMORY_UI_HIDDEN); @@ -968,6 +974,13 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, if (!mDeferOverlayCallbacks) { mOverlayManager.onActivityStarted(this); } + mDragLayer.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawListener() { + @Override + public void onDraw() { + getBackgroundBlurController().setSurfaceToLauncher(mDragLayer); + mDragLayer.post(() -> mDragLayer.getViewTreeObserver().removeOnDrawListener(this)); + } + }); mAppWidgetHost.setListenIfResumed(true); TraceHelper.INSTANCE.endSection(traceToken); @@ -2710,7 +2723,8 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, } protected StateHandler[] createStateHandlers() { - return new StateHandler[] { getAllAppsController(), getWorkspace() }; + return new StateHandler[] { getAllAppsController(), getWorkspace(), + getBackgroundBlurController() }; } public TouchController[] createTouchControllers() { @@ -2739,8 +2753,12 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, return Stream.of(APP_INFO, WIDGETS, INSTALL); } + public BackgroundBlurController getBackgroundBlurController() { + return mBackgroundBlurController; + } + public static Launcher getLauncher(Context context) { - return (Launcher) fromContext(context); + return fromContext(context); } /** diff --git a/src/com/android/launcher3/LauncherState.java b/src/com/android/launcher3/LauncherState.java index 36440c9151..62b89276ab 100644 --- a/src/com/android/launcher3/LauncherState.java +++ b/src/com/android/launcher3/LauncherState.java @@ -41,6 +41,7 @@ import static com.android.launcher3.testing.TestProtocol.OVERVIEW_STATE_ORDINAL; import static com.android.launcher3.testing.TestProtocol.QUICK_SWITCH_STATE_ORDINAL; import static com.android.launcher3.testing.TestProtocol.SPRING_LOADED_STATE_ORDINAL; +import android.content.Context; import android.view.View; import android.view.animation.Interpolator; @@ -269,6 +270,14 @@ public abstract class LauncherState { return 0; } + /** + * The amount of blur to apply to the background of either the app or Launcher surface in this + * state. + */ + public int getBackgroundBlurRadius(Context context) { + return 0; + } + public String getDescription(Launcher launcher) { return launcher.getWorkspace().getCurrentPageDescription(); } diff --git a/src/com/android/launcher3/folder/FolderAnimationManager.java b/src/com/android/launcher3/folder/FolderAnimationManager.java index 1310d374ea..f72e67438b 100644 --- a/src/com/android/launcher3/folder/FolderAnimationManager.java +++ b/src/com/android/launcher3/folder/FolderAnimationManager.java @@ -21,6 +21,7 @@ import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; import static com.android.launcher3.folder.ClippedFolderIconLayoutRule.MAX_NUM_ITEMS_IN_PREVIEW; import static com.android.launcher3.graphics.IconShape.getShape; import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound; +import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -46,6 +47,7 @@ import com.android.launcher3.ShortcutAndWidgetContainer; import com.android.launcher3.Utilities; import com.android.launcher3.anim.PropertyResetListener; import com.android.launcher3.dragndrop.DragLayer; +import com.android.launcher3.uioverrides.BackgroundBlurController; import com.android.launcher3.util.Themes; import java.util.List; @@ -220,6 +222,13 @@ public class FolderAnimationManager { Animator z = getAnimator(mFolder, View.TRANSLATION_Z, -mFolder.getElevation(), 0); play(a, z, mIsOpening ? midDuration : 0, midDuration); + BackgroundBlurController blurController = mLauncher.getBackgroundBlurController(); + int stateBackgroundBlur = mLauncher.getStateManager().getState() + .getBackgroundBlurRadius(mLauncher); + int folderBackgroundBlurAdjustment = blurController.getFolderBackgroundBlurAdjustment(); + play(a, ObjectAnimator.ofInt(blurController, BACKGROUND_BLUR, mIsOpening + ? stateBackgroundBlur + folderBackgroundBlurAdjustment + : stateBackgroundBlur)); // Store clip variables CellLayout cellLayout = mContent.getCurrentCellLayout(); diff --git a/src_ui_overrides/com/android/launcher3/uioverrides/BackgroundBlurController.java b/src_ui_overrides/com/android/launcher3/uioverrides/BackgroundBlurController.java new file mode 100644 index 0000000000..232bad3be7 --- /dev/null +++ b/src_ui_overrides/com/android/launcher3/uioverrides/BackgroundBlurController.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2020 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.launcher3.uioverrides; + + +import android.util.IntProperty; +import android.view.View; +import com.android.launcher3.Launcher; +import com.android.launcher3.LauncherState; +import com.android.launcher3.LauncherStateManager; +import com.android.launcher3.anim.AnimatorSetBuilder; + +/** + * Controls the blur, for the Launcher surface only. + */ +public class BackgroundBlurController implements LauncherStateManager.StateHandler { + + public static final IntProperty BACKGROUND_BLUR = + new IntProperty("backgroundBlur") { + @Override + public void setValue(BackgroundBlurController blurController, int blurRadius) {} + + @Override + public Integer get(BackgroundBlurController blurController) { + return 0; + } + }; + + public BackgroundBlurController(Launcher l) {} + + public int getFolderBackgroundBlurAdjustment() { + return 0; + } + + public void setSurfaceToLauncher(View v) {} + + @Override + public void setState(LauncherState toState) {} + + @Override + public void setStateWithAnimation(LauncherState toState, AnimatorSetBuilder builder, + LauncherStateManager.AnimationConfig config) {} +} From 4c9ee63540dcd2c039831edb0816a56458e30f8f Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 6 Mar 2020 15:16:22 -0800 Subject: [PATCH 10/41] Converting some anonymous classes to lambda calls Change-Id: I386046a4a515d84801a8bbd11cfa090ba7adfd71 --- .../HotseatPredictionController.java | 9 +++----- .../NavBarToHomeTouchController.java | 8 ++----- ...ButtonNavbarToOverviewTouchController.java | 9 ++------ .../android/quickstep/views/RecentsView.java | 16 ++++++-------- .../launcher3/LauncherStateManager.java | 8 ++----- .../allapps/AllAppsTransitionController.java | 7 +------ .../anim/AnimationSuccessListener.java | 21 +++++++++++++++++++ .../anim/SpringAnimationBuilder.java | 13 ++++-------- 8 files changed, 41 insertions(+), 50 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java index 0b054277e1..c85786f01f 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java @@ -226,12 +226,9 @@ public class HotseatPredictionController implements DragController.DragListener, } } if (animate) { - animationSet.addListener(new AnimationSuccessListener() { - @Override - public void onAnimationSuccess(Animator animator) { - if (callback != null) callback.run(); - } - }); + if (callback != null) { + animationSet.addListener(AnimationSuccessListener.forRunnable(callback)); + } animationSet.start(); } else { if (callback != null) callback.run(); diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java index 19a2bae467..cebb0758da 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java @@ -219,12 +219,8 @@ public class NavBarToHomeTouchController implements TouchController, // Quickly return to the state we came from (we didn't move far). ValueAnimator anim = mCurrentAnimation.getAnimationPlayer(); anim.setFloatValues(progress, 0); - anim.addListener(new AnimationSuccessListener() { - @Override - public void onAnimationSuccess(Animator animator) { - onSwipeInteractionCompleted(mStartState); - } - }); + anim.addListener(AnimationSuccessListener.forRunnable( + () -> onSwipeInteractionCompleted(mStartState))); anim.setDuration(80).start(); } } diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java index ab634a4b12..7bae211c1a 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java @@ -24,7 +24,6 @@ import static com.android.launcher3.Utilities.EDGE_NAV_BAR; import static com.android.launcher3.anim.Interpolators.ACCEL_DEACCEL; import static com.android.launcher3.util.VibratorWrapper.OVERVIEW_HAPTIC; -import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.ValueAnimator; import android.graphics.PointF; @@ -177,12 +176,8 @@ public class NoButtonNavbarToOverviewTouchController extends FlingAndHoldTouchCo AnimatorSet anim = stateManager.createAtomicAnimation( stateManager.getState(), NORMAL, builder, ATOMIC_OVERVIEW_PEEK_COMPONENT, duration); - anim.addListener(new AnimationSuccessListener() { - @Override - public void onAnimationSuccess(Animator animator) { - onSwipeInteractionCompleted(NORMAL, Touch.SWIPE); - } - }); + anim.addListener(AnimationSuccessListener.forRunnable( + () -> onSwipeInteractionCompleted(NORMAL, Touch.SWIPE))); anim.start(); } } else { diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java index 872e690acc..d24528a6b9 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java @@ -88,7 +88,6 @@ import com.android.launcher3.DeviceProfile; import com.android.launcher3.Insettable; import com.android.launcher3.InsettableFrameLayout; import com.android.launcher3.InvariantDeviceProfile; -import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.PagedView; import com.android.launcher3.R; @@ -962,15 +961,12 @@ public abstract class RecentsView extends PagedView impl } AnimatorSet pa = setRecentsChangedOrientation(true); - pa.addListener(new AnimationSuccessListener() { - @Override - public void onAnimationSuccess(Animator animator) { - updateLayoutRotation(newRotation); - ((DragLayer)mActivity.getDragLayer()).recreateControllers(); - rotateAllChildTasks(); - setRecentsChangedOrientation(false).start(); - } - }); + pa.addListener(AnimationSuccessListener.forRunnable(() -> { + updateLayoutRotation(newRotation); + ((DragLayer) mActivity.getDragLayer()).recreateControllers(); + rotateAllChildTasks(); + setRecentsChangedOrientation(false).start(); + })); pa.start(); } diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java index 9f25729602..04c5ccb622 100644 --- a/src/com/android/launcher3/LauncherStateManager.java +++ b/src/com/android/launcher3/LauncherStateManager.java @@ -244,12 +244,8 @@ public class LauncherStateManager { } else if (!mConfig.userControlled && animated && mConfig.mTargetState == state) { // We are running the same animation as requested if (onCompleteRunnable != null) { - mConfig.mCurrentAnimation.addListener(new AnimationSuccessListener() { - @Override - public void onAnimationSuccess(Animator animator) { - onCompleteRunnable.run(); - } - }); + mConfig.mCurrentAnimation.addListener( + AnimationSuccessListener.forRunnable(onCompleteRunnable)); } return; } diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index 217916205d..b87c5b13ba 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -224,12 +224,7 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil } public AnimatorListenerAdapter getProgressAnimatorListener() { - return new AnimationSuccessListener() { - @Override - public void onAnimationSuccess(Animator animator) { - onProgressAnimationEnd(); - } - }; + return AnimationSuccessListener.forRunnable(this::onProgressAnimationEnd); } public void setupViews(AllAppsContainerView appsView) { diff --git a/src/com/android/launcher3/anim/AnimationSuccessListener.java b/src/com/android/launcher3/anim/AnimationSuccessListener.java index 9448632ac5..9905e81638 100644 --- a/src/com/android/launcher3/anim/AnimationSuccessListener.java +++ b/src/com/android/launcher3/anim/AnimationSuccessListener.java @@ -39,4 +39,25 @@ public abstract class AnimationSuccessListener extends AnimatorListenerAdapter { } public abstract void onAnimationSuccess(Animator animator); + + /** + * Returns an AnimationSuccessListener which runs the provided action on success + */ + public static AnimationSuccessListener forRunnable(Runnable r) { + return new RunnableSuccessListener(r); + } + + private static class RunnableSuccessListener extends AnimationSuccessListener { + + private final Runnable mRunnable; + + private RunnableSuccessListener(Runnable r) { + mRunnable = r; + } + + @Override + public void onAnimationSuccess(Animator animator) { + mRunnable.run(); + } + } } diff --git a/src/com/android/launcher3/anim/SpringAnimationBuilder.java b/src/com/android/launcher3/anim/SpringAnimationBuilder.java index 0f34c1e97e..f22a9f0ac6 100644 --- a/src/com/android/launcher3/anim/SpringAnimationBuilder.java +++ b/src/com/android/launcher3/anim/SpringAnimationBuilder.java @@ -15,16 +15,15 @@ */ package com.android.launcher3.anim; -import android.animation.Animator; import android.animation.ObjectAnimator; import android.content.Context; import android.util.FloatProperty; -import com.android.launcher3.util.DefaultDisplay; - import androidx.annotation.FloatRange; import androidx.dynamicanimation.animation.SpringForce; +import com.android.launcher3.util.DefaultDisplay; + /** * Utility class to build an object animator which follows the same path as a spring animation for * an underdamped spring. @@ -192,12 +191,8 @@ public class SpringAnimationBuilder extends FloatProperty { long durationMs = (long) (1000.0 * duration); ObjectAnimator animator = ObjectAnimator.ofFloat(mTarget, this, 0, (float) duration); animator.setDuration(durationMs).setInterpolator(Interpolators.LINEAR); - animator.addListener(new AnimationSuccessListener() { - @Override - public void onAnimationSuccess(Animator animator) { - mProperty.setValue(mTarget, mEndValue); - } - }); + animator.addListener(AnimationSuccessListener.forRunnable( + () -> mProperty.setValue(mTarget, mEndValue))); return animator; } From 65ced1b1d00bc6a6713b442162020df31d497f54 Mon Sep 17 00:00:00 2001 From: Andy Wickham Date: Sat, 7 Mar 2020 02:14:19 +0000 Subject: [PATCH 11/41] Dismisses system overlays for Home intent. Test: Used Facebook chatheads (not system bubble). Before the change, Home gesture didn't work. After the change, it does work :) Fixes: 146593239 Change-Id: Ib9c85de2f83f99d1ef53fb17fde5d0b3c514849a --- .../android/launcher3/BaseQuickstepLauncher.java | 8 ++++++++ src/com/android/launcher3/Launcher.java | 14 +++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java index fb0cd17d27..e56eb6c5c8 100644 --- a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java @@ -26,6 +26,7 @@ import static com.android.launcher3.allapps.DiscoveryBounce.HOME_BOUNCE_SEEN; import static com.android.launcher3.allapps.DiscoveryBounce.SHELF_BOUNCE_COUNT; import static com.android.launcher3.allapps.DiscoveryBounce.SHELF_BOUNCE_SEEN; import static com.android.quickstep.SysUINavigationMode.removeShelfFromOverview; +import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_HOME_KEY; import android.animation.AnimatorSet; import android.animation.ValueAnimator; @@ -229,6 +230,13 @@ public abstract class BaseQuickstepLauncher extends Launcher } } + @Override + protected void closeOpenViews(boolean animate) { + super.closeOpenViews(animate); + ActivityManagerWrapper.getInstance() + .closeSystemWindows(CLOSE_SYSTEM_WINDOWS_REASON_HOME_KEY); + } + @Override protected StateHandler[] createStateHandlers() { return new StateHandler[] { diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 20ebc7a27d..965b87bb6a 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1466,7 +1466,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, if (isActionMain) { if (!internalStateHandled) { // In all these cases, only animate if we're already on home - AbstractFloatingView.closeAllOpenViews(this, isStarted()); + closeOpenViews(isStarted()); if (!isInState(NORMAL)) { // Only change state, if not already the same. This prevents cancelling any @@ -2207,7 +2207,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, mWorkspace.postDelayed(new Runnable() { public void run() { if (mWorkspace != null) { - AbstractFloatingView.closeAllOpenViews(Launcher.this, false); + closeOpenViews(false); mWorkspace.snapToPage(newScreenIndex); mWorkspace.postDelayed(startBounceAnimRunnable, @@ -2695,7 +2695,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, if (!mDragController.isDragging() && !mWorkspace.isSwitchingState() && isInState(NORMAL)) { // Close any open floating views. - AbstractFloatingView.closeAllOpenViews(this); + closeOpenViews(); // Setting the touch point to (-1, -1) will show the options popup in the center of // the screen. @@ -2735,6 +2735,14 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, getStateManager().goToState(LauncherState.NORMAL); } + private void closeOpenViews() { + closeOpenViews(true); + } + + protected void closeOpenViews(boolean animate) { + AbstractFloatingView.closeAllOpenViews(this, animate); + } + public Stream getSupportedShortcuts() { return Stream.of(APP_INFO, WIDGETS, INSTALL); } From f538393e42896e5488ca10fccc4cf9409d7295e2 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Fri, 6 Mar 2020 12:53:42 -0800 Subject: [PATCH 12/41] [DO NOT MERGE] Turn off FOLDER_NAME_SUGGEST feature flag Bug: 150788630 Change-Id: I740d6b6f3ee1a33a95debfafa29b3caea24a03c3 --- src/com/android/launcher3/config/BaseFlags.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/config/BaseFlags.java b/src/com/android/launcher3/config/BaseFlags.java index 64d236fabe..cd7444bba9 100644 --- a/src/com/android/launcher3/config/BaseFlags.java +++ b/src/com/android/launcher3/config/BaseFlags.java @@ -109,7 +109,7 @@ public abstract class BaseFlags { "Rotate launcher UI instead of using transposed layout"); public static final TogglableFlag FOLDER_NAME_SUGGEST = new TogglableFlag( - "FOLDER_NAME_SUGGEST", true, + "FOLDER_NAME_SUGGEST", false, "Suggests folder names instead of blank text."); public static final TogglableFlag APP_SEARCH_IMPROVEMENTS = new TogglableFlag( From cfaa4889e65190b40ea988dd03421a01c9e06abc Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 25 Feb 2020 14:37:01 -0800 Subject: [PATCH 13/41] Enabling springs for start dismiss animation > Adding flag support for PendingAnimation which can be used to define custom behavior for various animations > Using SpringAnimationBuild for spring animation instead of SpringObjectanimator Change-Id: I41ca34b0574981bb3fc7894639a321c12e6feac1 --- .../NavBarToHomeTouchController.java | 3 +- .../NoButtonQuickSwitchTouchController.java | 7 +- .../PortraitOverviewStateTouchHelper.java | 2 +- .../TaskViewTouchController.java | 26 +- .../quickstep/LauncherSwipeHandler.java | 2 +- .../android/quickstep/views/RecentsView.java | 138 +++---- .../com/android/quickstep/views/TaskView.java | 6 +- .../PortraitStatesTouchController.java | 7 +- .../launcher3/LauncherStateManager.java | 4 +- .../allapps/AllAppsTransitionController.java | 12 - .../anim/AnimatorPlaybackController.java | 390 +++++++++--------- .../launcher3/anim/PendingAnimation.java | 90 ++++ .../launcher3/anim/SpringObjectAnimator.java | 308 -------------- .../launcher3/anim/SpringProperty.java | 54 +++ .../AbstractStateChangeTouchController.java | 4 +- .../launcher3/util/PendingAnimation.java | 63 --- 16 files changed, 417 insertions(+), 699 deletions(-) create mode 100644 src/com/android/launcher3/anim/PendingAnimation.java delete mode 100644 src/com/android/launcher3/anim/SpringObjectAnimator.java create mode 100644 src/com/android/launcher3/anim/SpringProperty.java delete mode 100644 src/com/android/launcher3/util/PendingAnimation.java diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java index 19a2bae467..e500f0fe3f 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java @@ -171,7 +171,8 @@ public class NavBarToHomeTouchController implements TouchController, } } anim.setDuration(accuracy); - mCurrentAnimation = AnimatorPlaybackController.wrap(anim, accuracy, this::clearState); + mCurrentAnimation = AnimatorPlaybackController.wrap(anim, accuracy) + .setOnCancelRunnable(this::clearState); } private void clearState() { diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java index 715529e355..52625dc74f 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java @@ -393,7 +393,7 @@ public class NoButtonQuickSwitchTouchController implements TouchController, xOverviewAnim.setFloatValues(startXProgress, endXProgress); xOverviewAnim.setDuration(xDuration) .setInterpolator(scrollInterpolatorForVelocity(velocity.x)); - mXOverviewAnim.dispatchOnStartWithVelocity(endXProgress, velocity.x); + mXOverviewAnim.dispatchOnStart(); boolean flingUpToNormal = verticalFling && velocity.y < 0 && targetState == NORMAL; @@ -414,7 +414,7 @@ public class NoButtonQuickSwitchTouchController implements TouchController, ValueAnimator yOverviewAnim = mYOverviewAnim.getAnimationPlayer(); yOverviewAnim.setFloatValues(startYProgress, endYProgress); yOverviewAnim.setDuration(yDuration); - mYOverviewAnim.dispatchOnStartWithVelocity(endYProgress, velocity.y); + mYOverviewAnim.dispatchOnStart(); ValueAnimator nonOverviewAnim = mNonOverviewAnim.getAnimationPlayer(); if (flingUpToNormal && !mIsHomeScreenVisible) { @@ -436,8 +436,7 @@ public class NoButtonQuickSwitchTouchController implements TouchController, float startProgress = mNonOverviewAnim.getProgressFraction(); float endProgress = canceled ? 0 : 1; nonOverviewAnim.setFloatValues(startProgress, endProgress); - mNonOverviewAnim.dispatchOnStartWithVelocity(endProgress, - horizontalFling ? velocity.x : velocity.y); + mNonOverviewAnim.dispatchOnStart(); } nonOverviewAnim.setDuration(Math.max(xDuration, yDuration)); diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitOverviewStateTouchHelper.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitOverviewStateTouchHelper.java index 1f5228a239..845699a761 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitOverviewStateTouchHelper.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitOverviewStateTouchHelper.java @@ -22,7 +22,7 @@ import android.view.MotionEvent; import android.view.animation.Interpolator; import com.android.launcher3.Launcher; -import com.android.launcher3.util.PendingAnimation; +import com.android.launcher3.anim.PendingAnimation; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java index e0532ac4cf..cc58fcfd57 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java @@ -16,17 +16,13 @@ package com.android.launcher3.uioverrides.touchcontrollers; import static com.android.launcher3.AbstractFloatingView.TYPE_ACCESSIBLE; -import static com.android.launcher3.anim.Interpolators.scrollInterpolatorForVelocity; import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE; -import static com.android.launcher3.config.FeatureFlags.UNSTABLE_SPRINGS; import static com.android.launcher3.touch.SingleAxisSwipeDetector.DIRECTION_BOTH; import static com.android.launcher3.touch.SingleAxisSwipeDetector.DIRECTION_NEGATIVE; import static com.android.launcher3.touch.SingleAxisSwipeDetector.DIRECTION_POSITIVE; -import static com.android.launcher3.util.DefaultDisplay.getSingleFrameMs; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; -import android.animation.ValueAnimator; import android.view.MotionEvent; import com.android.launcher3.AbstractFloatingView; @@ -35,12 +31,12 @@ import com.android.launcher3.LauncherAnimUtils; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.Interpolators; +import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.touch.BaseSwipeDetector; import com.android.launcher3.touch.PagedOrientationHandler; import com.android.launcher3.touch.SingleAxisSwipeDetector; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch; import com.android.launcher3.util.FlingBlockCheck; -import com.android.launcher3.util.PendingAnimation; import com.android.launcher3.util.TouchController; import com.android.launcher3.views.BaseDragLayer; import com.android.quickstep.SysUINavigationMode; @@ -218,8 +214,8 @@ public abstract class TaskViewTouchController if (mCurrentAnimation != null) { mCurrentAnimation.setOnCancelRunnable(null); } - mCurrentAnimation = AnimatorPlaybackController.wrap( - mPendingAnimation.anim, maxDuration, this::clearState); + mCurrentAnimation = AnimatorPlaybackController.wrap(mPendingAnimation, maxDuration) + .setOnCancelRunnable(this::clearState); onUserControlledAnimationCreated(mCurrentAnimation); mCurrentAnimation.getTarget().addListener(this); mCurrentAnimation.dispatchOnStart(); @@ -288,26 +284,16 @@ public abstract class TaskViewTouchController animationDuration *= LauncherAnimUtils.blockedFlingDurationFactor(velocity); } - float nextFrameProgress = Utilities.boundToRange(progress - + velocity * getSingleFrameMs(mActivity) / Math.abs(mEndDisplacement), 0f, 1f); - mCurrentAnimation.setEndAction(() -> onCurrentAnimationEnd(goingToEnd, logAction)); - - ValueAnimator anim = mCurrentAnimation.getAnimationPlayer(); - anim.setFloatValues(nextFrameProgress, goingToEnd ? 1f : 0f); - anim.setDuration(animationDuration); - anim.setInterpolator(scrollInterpolatorForVelocity(velocity)); if (ENABLE_QUICKSTEP_LIVE_TILE.get()) { - anim.addUpdateListener(valueAnimator -> { + mCurrentAnimation.getAnimationPlayer().addUpdateListener(valueAnimator -> { if (mRecentsView.getCurrentPage() != 0 || mCurrentAnimationIsGoingUp) { mRecentsView.redrawLiveTile(true); } }); } - if (UNSTABLE_SPRINGS.get()) { - mCurrentAnimation.dispatchOnStartWithVelocity(goingToEnd ? 1f : 0f, velocity); - } - anim.start(); + mCurrentAnimation.startWithVelocity(mActivity, goingToEnd, + velocity, mEndDisplacement, animationDuration); } private void onCurrentAnimationEnd(boolean wasSuccess, int logAction) { diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandler.java index 4b6241c4ab..3328abcaf5 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandler.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandler.java @@ -1000,7 +1000,7 @@ public class LauncherSwipeHandler mLauncherTransitionController.getAnimationPlayer().setDuration(Math.max(0, duration)); if (UNSTABLE_SPRINGS.get()) { - mLauncherTransitionController.dispatchOnStartWithVelocity(end, velocityPxPerMs.y); + mLauncherTransitionController.dispatchOnStart(); } mLauncherTransitionController.getAnimationPlayer().start(); mHasLauncherTransitionControllerStarted = true; diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java index 62d6604322..7eb327406c 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java @@ -16,12 +16,9 @@ package com.android.quickstep.views; -import static androidx.dynamicanimation.animation.DynamicAnimation.MIN_VISIBLE_CHANGE_PIXELS; - import static com.android.launcher3.BaseActivity.STATE_HANDLER_INVISIBILITY_FLAGS; import static com.android.launcher3.InvariantDeviceProfile.CHANGE_FLAG_ICON_PARAMS; import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; -import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_X; import static com.android.launcher3.LauncherState.BACKGROUND_APP; import static com.android.launcher3.Utilities.EDGE_NAV_BAR; import static com.android.launcher3.Utilities.squaredHypot; @@ -32,7 +29,6 @@ import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.config.FeatureFlags.ENABLE_OVERVIEW_ACTIONS; import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE; -import static com.android.launcher3.config.FeatureFlags.UNSTABLE_SPRINGS; import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR; import static com.android.launcher3.uioverrides.touchcontrollers.TaskViewTouchController.SUCCESS_TRANSITION_PROGRESS; import static com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch.TAP; @@ -46,7 +42,6 @@ import android.animation.AnimatorSet; import android.animation.LayoutTransition; import android.animation.LayoutTransition.TransitionListener; import android.animation.ObjectAnimator; -import android.animation.TimeInterpolator; import android.animation.ValueAnimator; import android.annotation.TargetApi; import android.app.ActivityManager; @@ -96,8 +91,10 @@ import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.AnimatorPlaybackController; +import com.android.launcher3.anim.PendingAnimation; +import com.android.launcher3.anim.PendingAnimation.EndState; import com.android.launcher3.anim.PropertyListBuilder; -import com.android.launcher3.anim.SpringObjectAnimator; +import com.android.launcher3.anim.SpringProperty; import com.android.launcher3.compat.AccessibilityManagerCompat; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.dragndrop.DragLayer; @@ -111,7 +108,6 @@ import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch; import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.DynamicResource; import com.android.launcher3.util.OverScroller; -import com.android.launcher3.util.PendingAnimation; import com.android.launcher3.util.Themes; import com.android.launcher3.util.ViewPool; import com.android.quickstep.RecentsAnimationController; @@ -623,7 +619,7 @@ public abstract class RecentsView extends PagedView impl protected void applyLoadPlan(ArrayList tasks) { if (mPendingAnimation != null) { - mPendingAnimation.addEndListener((onEndListener) -> applyLoadPlan(tasks)); + mPendingAnimation.addEndListener((endState) -> applyLoadPlan(tasks)); return; } @@ -1210,37 +1206,29 @@ public abstract class RecentsView extends PagedView impl } } - private void addDismissedTaskAnimations(View taskView, AnimatorSet anim, long duration) { - addAnim(ObjectAnimator.ofFloat(taskView, ALPHA, 0), duration, ACCEL_2, anim); + private void addDismissedTaskAnimations(View taskView, long duration, PendingAnimation anim) { + anim.add(ObjectAnimator.ofFloat(taskView, ALPHA, 0).setDuration(duration), ACCEL_2); FloatProperty secondaryViewTranslate = mOrientationHandler.getSecondaryViewTranslate(); int secondaryTaskDimension = mOrientationHandler.getSecondaryDimension(taskView); int verticalFactor = mOrientationHandler.getTaskDismissDirectionFactor(); - if (UNSTABLE_SPRINGS.get() && taskView instanceof TaskView) { - ResourceProvider rp = DynamicResource.provider(mActivity); - float dampingRatio = rp.getFloat(R.dimen.dismiss_task_trans_y_damping_ratio); - float stiffness = rp.getFloat(R.dimen.dismiss_task_trans_y_stiffness); - addAnim(new SpringObjectAnimator<>(taskView, secondaryViewTranslate, - MIN_VISIBLE_CHANGE_PIXELS, dampingRatio, - stiffness, 0, verticalFactor * secondaryTaskDimension), - duration, LINEAR, anim); - } else { - addAnim(ObjectAnimator.ofFloat(taskView, secondaryViewTranslate, - verticalFactor * secondaryTaskDimension), duration, LINEAR, anim); - } + ResourceProvider rp = DynamicResource.provider(mActivity); + SpringProperty sp = new SpringProperty(SpringProperty.FLAG_CAN_SPRING_ON_START) + .setDampingRatio(rp.getFloat(R.dimen.dismiss_task_trans_y_damping_ratio)) + .setStiffness(rp.getFloat(R.dimen.dismiss_task_trans_y_stiffness)); + + anim.add(ObjectAnimator.ofFloat(taskView, secondaryViewTranslate, + verticalFactor * secondaryTaskDimension).setDuration(duration), LINEAR, sp); } - private void removeTask(Task task, int index, PendingAnimation.OnEndListener onEndListener, - boolean shouldLog) { + private void removeTask(Task task, int index, EndState endState) { if (task != null) { ActivityManagerWrapper.getInstance().removeTask(task.key.id); - if (shouldLog) { - ComponentKey componentKey = TaskUtils.getLaunchComponentKeyForTask(task.key); - mActivity.getUserEventDispatcher().logTaskLaunchOrDismiss( - onEndListener.logAction, Direction.UP, index, componentKey); - mActivity.getStatsLogManager().logTaskDismiss(this, componentKey); - } + ComponentKey componentKey = TaskUtils.getLaunchComponentKeyForTask(task.key); + mActivity.getUserEventDispatcher().logTaskLaunchOrDismiss( + endState.logAction, Direction.UP, index, componentKey); + mActivity.getStatsLogManager().logTaskDismiss(this, componentKey); } } @@ -1249,12 +1237,11 @@ public abstract class RecentsView extends PagedView impl if (mPendingAnimation != null) { mPendingAnimation.finish(false, Touch.SWIPE); } - AnimatorSet anim = new AnimatorSet(); - PendingAnimation pendingAnimation = new PendingAnimation(anim); + PendingAnimation anim = new PendingAnimation(); int count = getPageCount(); if (count == 0) { - return pendingAnimation; + return anim; } int[] oldScroll = new int[count]; @@ -1273,7 +1260,7 @@ public abstract class RecentsView extends PagedView impl View child = getChildAt(i); if (child == taskView) { if (animateTaskView) { - addDismissedTaskAnimations(taskView, anim, duration); + addDismissedTaskAnimations(taskView, duration, anim); } } else { // If we just take newScroll - oldScroll, everything to the right of dragged task @@ -1297,20 +1284,15 @@ public abstract class RecentsView extends PagedView impl } int scrollDiff = newScroll[i] - oldScroll[i] + offset; if (scrollDiff != 0) { - if (UNSTABLE_SPRINGS.get() && child instanceof TaskView) { - ResourceProvider rp = DynamicResource.provider(mActivity); - float damping = rp.getFloat(R.dimen.dismiss_task_trans_x_damping_ratio); - float stiffness = rp.getFloat(R.dimen.dismiss_task_trans_x_stiffness); - - addAnim(new SpringObjectAnimator<>(child, VIEW_TRANSLATE_X, - MIN_VISIBLE_CHANGE_PIXELS, damping, - stiffness, 0, scrollDiff), duration, ACCEL, anim); - } else { - Property translationProperty = mOrientationHandler.getPrimaryViewTranslate(); - addAnim(ObjectAnimator.ofFloat(child, translationProperty, scrollDiff), - duration, ACCEL, anim); - } + Property translationProperty = mOrientationHandler.getPrimaryViewTranslate(); + ResourceProvider rp = DynamicResource.provider(mActivity); + SpringProperty sp = new SpringProperty(SpringProperty.FLAG_CAN_SPRING_ON_END) + .setDampingRatio( + rp.getFloat(R.dimen.dismiss_task_trans_x_damping_ratio)) + .setStiffness(rp.getFloat(R.dimen.dismiss_task_trans_x_stiffness)); + anim.add(ObjectAnimator.ofFloat(child, translationProperty, scrollDiff) + .setDuration(duration), ACCEL, sp); needsCurveUpdates = true; } } @@ -1319,7 +1301,7 @@ public abstract class RecentsView extends PagedView impl if (needsCurveUpdates) { ValueAnimator va = ValueAnimator.ofFloat(0, 1); va.addUpdateListener((a) -> updateCurveProperties()); - anim.play(va); + anim.add(va); } // Add a tiny bit of translation Z, so that it draws on top of other views @@ -1327,22 +1309,22 @@ public abstract class RecentsView extends PagedView impl taskView.setTranslationZ(0.1f); } - mPendingAnimation = pendingAnimation; - mPendingAnimation.addEndListener(new Consumer() { + mPendingAnimation = anim; + mPendingAnimation.addEndListener(new Consumer() { @Override - public void accept(PendingAnimation.OnEndListener onEndListener) { + public void accept(EndState endState) { if (ENABLE_QUICKSTEP_LIVE_TILE.get() && - taskView.isRunningTask() && onEndListener.isSuccess) { - finishRecentsAnimation(true /* toHome */, () -> onEnd(onEndListener)); + taskView.isRunningTask() && endState.isSuccess) { + finishRecentsAnimation(true /* toHome */, () -> onEnd(endState)); } else { - onEnd(onEndListener); + onEnd(endState); } } - private void onEnd(PendingAnimation.OnEndListener onEndListener) { - if (onEndListener.isSuccess) { + private void onEnd(EndState endState) { + if (endState.isSuccess) { if (shouldRemoveTask) { - removeTask(taskView.getTask(), draggedIndex, onEndListener, true); + removeTask(taskView.getTask(), draggedIndex, endState); } int pageToSnapTo = mCurrentPage; @@ -1364,24 +1346,23 @@ public abstract class RecentsView extends PagedView impl mPendingAnimation = null; } }); - return pendingAnimation; + return anim; } public PendingAnimation createAllTasksDismissAnimation(long duration) { if (FeatureFlags.IS_STUDIO_BUILD && mPendingAnimation != null) { throw new IllegalStateException("Another pending animation is still running"); } - AnimatorSet anim = new AnimatorSet(); - PendingAnimation pendingAnimation = new PendingAnimation(anim); + PendingAnimation anim = new PendingAnimation(); int count = getTaskViewCount(); for (int i = 0; i < count; i++) { - addDismissedTaskAnimations(getTaskViewAt(i), anim, duration); + addDismissedTaskAnimations(getTaskViewAt(i), duration, anim); } - mPendingAnimation = pendingAnimation; - mPendingAnimation.addEndListener((onEndListener) -> { - if (onEndListener.isSuccess) { + mPendingAnimation = anim; + mPendingAnimation.addEndListener((endState) -> { + if (endState.isSuccess) { // Remove all the task views now ActivityManagerWrapper.getInstance().removeAllRecentTasks(); removeTasksViewsAndClearAllButton(); @@ -1389,13 +1370,7 @@ public abstract class RecentsView extends PagedView impl } mPendingAnimation = null; }); - return pendingAnimation; - } - - private static void addAnim(Animator anim, long duration, - TimeInterpolator interpolator, AnimatorSet set) { - anim.setDuration(duration).setInterpolator(interpolator); - set.play(anim); + return anim; } private boolean snapToPageRelative(int pageCount, int delta, boolean cycle) { @@ -1412,8 +1387,8 @@ public abstract class RecentsView extends PagedView impl } private void runDismissAnimation(PendingAnimation pendingAnim) { - AnimatorPlaybackController controller = AnimatorPlaybackController.wrap( - pendingAnim.anim, DISMISS_TASK_DURATION); + AnimatorPlaybackController controller = + AnimatorPlaybackController.wrap(pendingAnim, DISMISS_TASK_DURATION); controller.dispatchOnStart(); controller.setEndAction(() -> pendingAnim.finish(true, Touch.SWIPE)); controller.getAnimationPlayer().setInterpolator(FAST_OUT_SLOW_IN); @@ -1738,7 +1713,7 @@ public abstract class RecentsView extends PagedView impl int count = getTaskViewCount(); if (count == 0) { - return new PendingAnimation(new AnimatorSet()); + return new PendingAnimation(); } int targetSysUiFlags = tv.getThumbnail().getSysUiStatusNavFlags(); @@ -1780,13 +1755,12 @@ public abstract class RecentsView extends PagedView impl anim.setDuration(duration) .setInterpolator(interpolator); - Consumer onTaskLaunchFinish = this::onTaskLaunched; - - mPendingAnimation = new PendingAnimation(anim); - mPendingAnimation.addEndListener((onEndListener) -> { - if (onEndListener.isSuccess) { + mPendingAnimation = new PendingAnimation(); + mPendingAnimation.add(anim); + mPendingAnimation.addEndListener((endState) -> { + if (endState.isSuccess) { Consumer onLaunchResult = (result) -> { - onTaskLaunchFinish.accept(result); + onTaskLaunched(result); if (!result) { tv.notifyTaskLaunchFailed(TAG); } @@ -1795,11 +1769,11 @@ public abstract class RecentsView extends PagedView impl Task task = tv.getTask(); if (task != null) { mActivity.getUserEventDispatcher().logTaskLaunchOrDismiss( - onEndListener.logAction, Direction.DOWN, indexOfChild(tv), + endState.logAction, Direction.DOWN, indexOfChild(tv), TaskUtils.getLaunchComponentKeyForTask(task.key)); } } else { - onTaskLaunchFinish.accept(false); + onTaskLaunched(false); } mPendingAnimation = null; }); diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java index e09e01ff9f..abc037eb6f 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java @@ -58,6 +58,7 @@ import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.Interpolators; +import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.logging.UserEventDispatcher; import com.android.launcher3.popup.SystemShortcut; import com.android.launcher3.states.RotationHelper; @@ -67,7 +68,6 @@ import com.android.launcher3.touch.PagedOrientationHandler; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch; -import com.android.launcher3.util.PendingAnimation; import com.android.launcher3.util.ViewPool.Reusable; import com.android.quickstep.RecentsModel; import com.android.quickstep.TaskIconCache; @@ -278,8 +278,8 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { public AnimatorPlaybackController createLaunchAnimationForRunningTask() { final PendingAnimation pendingAnimation = getRecentsView().createTaskLaunchAnimation( this, RECENTS_LAUNCH_DURATION, TOUCH_RESPONSE_INTERPOLATOR); - AnimatorPlaybackController currentAnimation = AnimatorPlaybackController.wrap( - pendingAnimation.anim, RECENTS_LAUNCH_DURATION); + AnimatorPlaybackController currentAnimation = + AnimatorPlaybackController.wrap(pendingAnimation, RECENTS_LAUNCH_DURATION); currentAnimation.setEndAction(() -> { pendingAnimation.finish(true, Touch.SWIPE); launchTask(false); diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java index fe830d221e..95e38e38fd 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java @@ -87,8 +87,7 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr protected boolean canInterceptTouch(MotionEvent ev) { if (mCurrentAnimation != null) { if (mFinishFastOnSecondTouch) { - // TODO: Animate to finish instead. - mCurrentAnimation.skipToEnd(); + mCurrentAnimation.getAnimationPlayer().end(); } AllAppsTransitionController allAppsController = mLauncher.getAllAppsController(); @@ -233,8 +232,8 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr cancelPendingAnim(); clearState(); }; - mCurrentAnimation = AnimatorPlaybackController.wrap( - mPendingAnimation.anim, maxAccuracy, onCancelRunnable); + mCurrentAnimation = AnimatorPlaybackController.wrap(mPendingAnimation, maxAccuracy) + .setOnCancelRunnable(onCancelRunnable); mLauncher.getStateManager().setCurrentUserControlledAnimation(mCurrentAnimation); totalShift = LayoutUtils.getShelfTrackingDistance(mLauncher, mLauncher.getDeviceProfile()); diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java index 9f25729602..a8f2025d26 100644 --- a/src/com/android/launcher3/LauncherStateManager.java +++ b/src/com/android/launcher3/LauncherStateManager.java @@ -376,8 +376,8 @@ public class LauncherStateManager { mConfig.animComponents = animComponents; mConfig.duration = duration; mConfig.playbackController = AnimatorPlaybackController.wrap( - createAnimationToNewWorkspaceInternal(state, builder, null), duration, - onCancelRunnable); + createAnimationToNewWorkspaceInternal(state, builder, null), duration) + .setOnCancelRunnable(onCancelRunnable); return mConfig.playbackController; } diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index 217916205d..32c65a3a22 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -12,7 +12,6 @@ import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_VERTICAL_PROGRE import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.anim.PropertySetter.NO_ANIM_PROPERTY_SETTER; -import static com.android.launcher3.config.FeatureFlags.UNSTABLE_SPRINGS; import static com.android.launcher3.util.SystemUiController.UI_STATE_ALL_APPS; import android.animation.Animator; @@ -31,11 +30,8 @@ import com.android.launcher3.R; import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.AnimatorSetBuilder; import com.android.launcher3.anim.PropertySetter; -import com.android.launcher3.anim.SpringObjectAnimator; -import com.android.launcher3.util.DynamicResource; import com.android.launcher3.util.Themes; import com.android.launcher3.views.ScrimView; -import com.android.systemui.plugins.ResourceProvider; /** * Handles AllApps view transition. @@ -185,14 +181,6 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil } public Animator createSpringAnimation(float... progressValues) { - if (UNSTABLE_SPRINGS.get()) { - ResourceProvider rp = DynamicResource.provider(mLauncher); - float damping = rp.getFloat(R.dimen.all_apps_spring_damping_ratio); - float stiffness = rp.getFloat(R.dimen.all_apps_spring_stiffness); - - return new SpringObjectAnimator<>(this, ALL_APPS_PROGRESS, 1f / mShiftRange, - damping, stiffness, progressValues); - } return ObjectAnimator.ofFloat(this, ALL_APPS_PROGRESS, progressValues); } diff --git a/src/com/android/launcher3/anim/AnimatorPlaybackController.java b/src/com/android/launcher3/anim/AnimatorPlaybackController.java index 1c277ab8c0..1fc21fd63e 100644 --- a/src/com/android/launcher3/anim/AnimatorPlaybackController.java +++ b/src/com/android/launcher3/anim/AnimatorPlaybackController.java @@ -16,7 +16,9 @@ package com.android.launcher3.anim; import static com.android.launcher3.anim.Interpolators.LINEAR; -import static com.android.launcher3.config.FeatureFlags.QUICKSTEP_SPRINGS; +import static com.android.launcher3.anim.Interpolators.clampToProgress; +import static com.android.launcher3.anim.Interpolators.scrollInterpolatorForVelocity; +import static com.android.launcher3.util.DefaultDisplay.getSingleFrameMs; import android.animation.Animator; import android.animation.Animator.AnimatorListener; @@ -24,17 +26,18 @@ import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.TimeInterpolator; import android.animation.ValueAnimator; -import android.util.Log; +import android.content.Context; +import android.util.FloatProperty; import androidx.annotation.Nullable; -import androidx.dynamicanimation.animation.DynamicAnimation; -import androidx.dynamicanimation.animation.SpringAnimation; + +import com.android.launcher3.Utilities; import java.util.ArrayList; import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.Consumer; /** * Helper class to control the playback of an {@link AnimatorSet}, with custom interpolators @@ -43,14 +46,7 @@ import java.util.Set; * Note: The implementation does not support start delays on child animations or * sequential playbacks. */ -public abstract class AnimatorPlaybackController implements ValueAnimator.AnimatorUpdateListener { - - private static final String TAG = "AnimatorPlaybackCtrler"; - private static boolean DEBUG = false; - - public static AnimatorPlaybackController wrap(AnimatorSet anim, long duration) { - return wrap(anim, duration, null); - } +public class AnimatorPlaybackController implements ValueAnimator.AnimatorUpdateListener { /** * Creates an animation controller for the provided animation. @@ -58,20 +54,41 @@ public abstract class AnimatorPlaybackController implements ValueAnimator.Animat * needs to be larger than the total number of pixels so that we don't have jittering due * to float (animation-fraction * total duration) to int conversion. */ - public static AnimatorPlaybackController wrap(AnimatorSet anim, long duration, - Runnable onCancelRunnable) { - + public static AnimatorPlaybackController wrap(AnimatorSet anim, long duration) { /** * TODO: use {@link AnimatorSet#setCurrentPlayTime(long)} once b/68382377 is fixed. */ - return new AnimatorPlaybackControllerVL(anim, duration, onCancelRunnable); + ArrayList childAnims = new ArrayList<>(); + addAnimationHoldersRecur(anim, SpringProperty.DEFAULT, childAnims); + + return new AnimatorPlaybackController(anim, duration, childAnims); } + public static AnimatorPlaybackController wrap(PendingAnimation anim, long duration) { + /** + * TODO: use {@link AnimatorSet#setCurrentPlayTime(long)} once b/68382377 is fixed. + */ + return new AnimatorPlaybackController(anim.anim, duration, anim.animHolders); + } + + private static final FloatProperty CURRENT_PLAY_TIME = + new FloatProperty("current-play-time") { + @Override + public void setValue(ValueAnimator animator, float v) { + animator.setCurrentPlayTime((long) v); + } + + @Override + public Float get(ValueAnimator animator) { + return (float) animator.getCurrentPlayTime(); + } + }; + private final ValueAnimator mAnimationPlayer; private final long mDuration; - protected final AnimatorSet mAnim; - private Set mSprings; + private final AnimatorSet mAnim; + private final Holder[] mChildAnimations; protected float mCurrentFraction; private Runnable mEndAction; @@ -79,22 +96,14 @@ public abstract class AnimatorPlaybackController implements ValueAnimator.Animat protected boolean mTargetCancelled = false; protected Runnable mOnCancelRunnable; - private OnAnimationEndDispatcher mEndListener; - private DynamicAnimation.OnAnimationEndListener mSpringEndListener; - // We need this variable to ensure the end listener is called immediately, otherwise we run into - // issues where the callback interferes with the states of the swipe detector. - private boolean mSkipToEnd = false; - - protected AnimatorPlaybackController(AnimatorSet anim, long duration, - Runnable onCancelRunnable) { + private AnimatorPlaybackController( + AnimatorSet anim, long duration, ArrayList childAnims) { mAnim = anim; mDuration = duration; - mOnCancelRunnable = onCancelRunnable; mAnimationPlayer = ValueAnimator.ofFloat(0, 1); mAnimationPlayer.setInterpolator(LINEAR); - mEndListener = new OnAnimationEndDispatcher(); - mAnimationPlayer.addListener(mEndListener); + mAnimationPlayer.addListener(new OnAnimationEndDispatcher()); mAnimationPlayer.addUpdateListener(this); mAnim.addListener(new AnimatorListenerAdapter() { @@ -119,14 +128,7 @@ public abstract class AnimatorPlaybackController implements ValueAnimator.Animat } }); - mSprings = new HashSet<>(); - mSpringEndListener = (animation, canceled, value, velocity1) -> { - if (canceled) { - mEndListener.onAnimationCancel(mAnimationPlayer); - } else { - mEndListener.onAnimationEnd(mAnimationPlayer); - } - }; + mChildAnimations = childAnims.toArray(new Holder[childAnims.size()]); } public AnimatorSet getTarget() { @@ -159,10 +161,69 @@ public abstract class AnimatorPlaybackController implements ValueAnimator.Animat mAnimationPlayer.start(); } + /** + * Starts playing the animation with the provided velocity optionally playing any + * physics based animations + */ + public void startWithVelocity(Context context, boolean goingToEnd, + float velocity, float scale, long animationDuration) { + float scaleInverse = 1 / Math.abs(scale); + float scaledVelocity = velocity * scaleInverse; + + float nextFrameProgress = Utilities.boundToRange(getProgressFraction() + + scaledVelocity * getSingleFrameMs(context), 0f, 1f); + + // Update setters for spring + int springFlag = goingToEnd + ? SpringProperty.FLAG_CAN_SPRING_ON_END + : SpringProperty.FLAG_CAN_SPRING_ON_START; + + long springDuration = animationDuration; + for (Holder h : mChildAnimations) { + if ((h.springProperty.flags & springFlag) != 0) { + SpringAnimationBuilder s = new SpringAnimationBuilder(h.anim, CURRENT_PLAY_TIME) + .setStartValue(clampDuration(mCurrentFraction)) + .setEndValue(goingToEnd ? h.anim.getDuration() : 0) + .setStartVelocity(scaledVelocity * h.anim.getDuration()) + .setMinimumVisibleChange(scaleInverse) + .setDampingRatio(h.springProperty.mDampingRatio) + .setStiffness(h.springProperty.mStiffness); + + long expectedDurationL = s.build(context).getDuration(); + springDuration = Math.max(expectedDurationL, springDuration); + + float expectedDuration = expectedDurationL; + h.setter = (a, l) -> + s.setValue(a, mAnimationPlayer.getCurrentPlayTime() / expectedDuration); + h.anim.setInterpolator(LINEAR); + } + } + + mAnimationPlayer.setFloatValues(nextFrameProgress, goingToEnd ? 1f : 0f); + + if (springDuration <= animationDuration) { + mAnimationPlayer.setDuration(animationDuration); + mAnimationPlayer.setInterpolator(scrollInterpolatorForVelocity(velocity)); + } else { + // Since spring requires more time to run, we let the other animations play with + // current time and interpolation and by clamping the duration. + mAnimationPlayer.setDuration(springDuration); + + float cutOff = animationDuration / (float) springDuration; + mAnimationPlayer.setInterpolator( + clampToProgress(scrollInterpolatorForVelocity(velocity), 0, cutOff)); + } + mAnimationPlayer.start(); + } + /** * Pauses the currently playing animation. */ public void pause() { + // Reset property setters + for (Holder h : mChildAnimations) { + h.reset(); + } mAnimationPlayer.cancel(); } @@ -176,7 +237,18 @@ public abstract class AnimatorPlaybackController implements ValueAnimator.Animat /** * Sets the current animation position and updates all the child animators accordingly. */ - public abstract void setPlayFraction(float fraction); + public void setPlayFraction(float fraction) { + mCurrentFraction = fraction; + // Let the animator report the progress but don't apply the progress to child + // animations if it has been cancelled. + if (mTargetCancelled) { + return; + } + long playPos = clampDuration(fraction); + for (Holder holder : mChildAnimations) { + holder.setter.set(holder.anim, playPos); + } + } public float getProgressFraction() { return mCurrentFraction; @@ -208,49 +280,6 @@ public abstract class AnimatorPlaybackController implements ValueAnimator.Animat } } - /** - * Starts playback and sets the spring. - */ - public void dispatchOnStartWithVelocity(float end, float velocity) { - if (!QUICKSTEP_SPRINGS.get()) { - dispatchOnStart(); - return; - } - - if (DEBUG) Log.d(TAG, "dispatchOnStartWithVelocity#end=" + end + ", velocity=" + velocity); - - for (Animator a : mAnim.getChildAnimations()) { - if (a instanceof SpringObjectAnimator) { - if (DEBUG) Log.d(TAG, "Found springAnimator=" + a); - SpringObjectAnimator springAnimator = (SpringObjectAnimator) a; - mSprings.add(springAnimator.getSpring()); - springAnimator.startSpring(end, velocity, mSpringEndListener); - } - } - - dispatchOnStart(); - } - - public void dispatchOnStart() { - dispatchOnStartRecursively(mAnim); - } - - private void dispatchOnStartRecursively(Animator animator) { - List listeners = animator instanceof SpringObjectAnimator - ? nonNullList(((SpringObjectAnimator) animator).getObjectAnimatorListeners()) - : nonNullList(animator.getListeners()); - - for (AnimatorListener l : listeners) { - l.onAnimationStart(animator); - } - - if (animator instanceof AnimatorSet) { - for (Animator anim : nonNullList(((AnimatorSet) animator).getChildAnimations())) { - dispatchOnStartRecursively(anim); - } - } - } - /** @see #dispatchOnCancelWithoutCancelRunnable(Runnable) */ public void dispatchOnCancelWithoutCancelRunnable() { dispatchOnCancelWithoutCancelRunnable(null); @@ -272,115 +301,47 @@ public abstract class AnimatorPlaybackController implements ValueAnimator.Animat setOnCancelRunnable(onCancel); } - public void dispatchOnCancel() { - dispatchOnCancelRecursively(mAnim); + + public AnimatorPlaybackController setOnCancelRunnable(Runnable runnable) { + mOnCancelRunnable = runnable; + return this; } - private void dispatchOnCancelRecursively(Animator animator) { - for (AnimatorListener l : nonNullList(animator.getListeners())) { - l.onAnimationCancel(animator); - } + public void dispatchOnStart() { + callListenerCommandRecursively(mAnim, AnimatorListener::onAnimationStart); + } - if (animator instanceof AnimatorSet) { - for (Animator anim : nonNullList(((AnimatorSet) animator).getChildAnimations())) { - dispatchOnCancelRecursively(anim); - } - } + public void dispatchOnCancel() { + callListenerCommandRecursively(mAnim, AnimatorListener::onAnimationCancel); } public void dispatchSetInterpolator(TimeInterpolator interpolator) { - dispatchSetInterpolatorRecursively(mAnim, interpolator); + callAnimatorCommandRecursively(mAnim, a -> a.setInterpolator(interpolator)); } - private void dispatchSetInterpolatorRecursively(Animator anim, TimeInterpolator interpolator) { - anim.setInterpolator(interpolator); + private static void callListenerCommandRecursively( + Animator anim, BiConsumer command) { + callAnimatorCommandRecursively(anim, a-> { + for (AnimatorListener l : nonNullList(a.getListeners())) { + command.accept(l, a); + } + }); + } + + private static void callAnimatorCommandRecursively(Animator anim, Consumer command) { + command.accept(anim); if (anim instanceof AnimatorSet) { for (Animator child : nonNullList(((AnimatorSet) anim).getChildAnimations())) { - dispatchSetInterpolatorRecursively(child, interpolator); + callAnimatorCommandRecursively(child, command); } } } - public void setOnCancelRunnable(Runnable runnable) { - mOnCancelRunnable = runnable; - } - - public void skipToEnd() { - mSkipToEnd = true; - for (SpringAnimation spring : mSprings) { - if (spring.canSkipToEnd()) { - spring.skipToEnd(); - } - } - mAnimationPlayer.end(); - mSkipToEnd = false; - } - - public static class AnimatorPlaybackControllerVL extends AnimatorPlaybackController { - - private final ValueAnimator[] mChildAnimations; - - private AnimatorPlaybackControllerVL(AnimatorSet anim, long duration, - Runnable onCancelRunnable) { - super(anim, duration, onCancelRunnable); - - // Build animation list - ArrayList childAnims = new ArrayList<>(); - getAnimationsRecur(mAnim, childAnims); - mChildAnimations = childAnims.toArray(new ValueAnimator[childAnims.size()]); - } - - private void getAnimationsRecur(AnimatorSet anim, ArrayList out) { - long forceDuration = anim.getDuration(); - TimeInterpolator forceInterpolator = anim.getInterpolator(); - for (Animator child : anim.getChildAnimations()) { - if (forceDuration > 0) { - child.setDuration(forceDuration); - } - if (forceInterpolator != null) { - child.setInterpolator(forceInterpolator); - } - if (child instanceof ValueAnimator) { - out.add((ValueAnimator) child); - } else if (child instanceof AnimatorSet) { - getAnimationsRecur((AnimatorSet) child, out); - } else { - throw new RuntimeException("Unknown animation type " + child); - } - } - } - - @Override - public void setPlayFraction(float fraction) { - mCurrentFraction = fraction; - // Let the animator report the progress but don't apply the progress to child - // animations if it has been cancelled. - if (mTargetCancelled) { - return; - } - long playPos = clampDuration(fraction); - for (ValueAnimator anim : mChildAnimations) { - anim.setCurrentPlayTime(Math.min(playPos, anim.getDuration())); - } - } - } - - private boolean isAnySpringRunning() { - for (SpringAnimation spring : mSprings) { - if (spring.isRunning()) { - return true; - } - } - return false; - } - /** * Only dispatches the on end actions once the animator and all springs have completed running. */ private class OnAnimationEndDispatcher extends AnimationSuccessListener { - boolean mAnimatorDone = false; - boolean mSpringsDone = false; boolean mDispatched = false; @Override @@ -391,39 +352,76 @@ public abstract class AnimatorPlaybackController implements ValueAnimator.Animat @Override public void onAnimationSuccess(Animator animator) { - if (mSprings.isEmpty()) { - mSpringsDone = mAnimatorDone = true; - } - if (isAnySpringRunning()) { - mAnimatorDone = true; - } else { - mSpringsDone = true; - } - // We wait for the spring (if any) to finish running before completing the end callback. - if (!mDispatched && (mSkipToEnd || (mAnimatorDone && mSpringsDone))) { - dispatchOnEndRecursively(mAnim); + if (!mDispatched) { + callListenerCommandRecursively(mAnim, AnimatorListener::onAnimationEnd); if (mEndAction != null) { mEndAction.run(); } mDispatched = true; } } - - private void dispatchOnEndRecursively(Animator animator) { - for (AnimatorListener l : nonNullList(animator.getListeners())) { - l.onAnimationEnd(animator); - } - - if (animator instanceof AnimatorSet) { - for (Animator anim : nonNullList(((AnimatorSet) animator).getChildAnimations())) { - dispatchOnEndRecursively(anim); - } - } - } } private static List nonNullList(ArrayList list) { return list == null ? Collections.emptyList() : list; } + + /** + * Interface for setting position of value animator + */ + private interface PositionSetter { + + PositionSetter DEFAULT = (anim, playPos) -> + anim.setCurrentPlayTime(Math.min(playPos, anim.getDuration())); + + void set(ValueAnimator anim, long position); + } + + /** + * Holder class for various child animations + */ + static class Holder { + + public final ValueAnimator anim; + + public final SpringProperty springProperty; + + public final TimeInterpolator interpolator; + + public PositionSetter setter; + + Holder(Animator anim, SpringProperty springProperty) { + this.anim = (ValueAnimator) anim; + this.springProperty = springProperty; + this.interpolator = this.anim.getInterpolator(); + this.setter = PositionSetter.DEFAULT; + } + + public void reset() { + anim.setInterpolator(interpolator); + setter = PositionSetter.DEFAULT; + } + } + + static void addAnimationHoldersRecur( + Animator anim, SpringProperty springProperty, ArrayList out) { + long forceDuration = anim.getDuration(); + TimeInterpolator forceInterpolator = anim.getInterpolator(); + if (anim instanceof ValueAnimator) { + out.add(new Holder(anim, springProperty)); + } else if (anim instanceof AnimatorSet) { + for (Animator child : ((AnimatorSet) anim).getChildAnimations()) { + if (forceDuration > 0) { + child.setDuration(forceDuration); + } + if (forceInterpolator != null) { + child.setInterpolator(forceInterpolator); + } + addAnimationHoldersRecur(child, springProperty, out); + } + } else { + throw new RuntimeException("Unknown animation type " + anim); + } + } } diff --git a/src/com/android/launcher3/anim/PendingAnimation.java b/src/com/android/launcher3/anim/PendingAnimation.java new file mode 100644 index 0000000000..562d160b50 --- /dev/null +++ b/src/com/android/launcher3/anim/PendingAnimation.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2018 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.launcher3.anim; + +import static com.android.launcher3.anim.AnimatorPlaybackController.addAnimationHoldersRecur; + +import android.animation.Animator; +import android.animation.AnimatorSet; +import android.animation.TimeInterpolator; +import android.annotation.TargetApi; +import android.os.Build; + +import com.android.launcher3.anim.AnimatorPlaybackController.Holder; + +import java.util.ArrayList; +import java.util.function.Consumer; + +/** + * Utility class to keep track of a running animation. + * + * This class allows attaching end callbacks to an animation is intended to be used with + * {@link com.android.launcher3.anim.AnimatorPlaybackController}, since in that case + * AnimationListeners are not properly dispatched. + * + * TODO: Find a better name + */ +@TargetApi(Build.VERSION_CODES.O) +public class PendingAnimation { + + private final ArrayList> mEndListeners = new ArrayList<>(); + + /** package private **/ + final AnimatorSet anim = new AnimatorSet(); + final ArrayList animHolders = new ArrayList<>(); + + /** + * Utility method to sent an interpolator on an animation and add it to the list + */ + public void add(Animator anim, TimeInterpolator interpolator) { + add(anim, interpolator, SpringProperty.DEFAULT); + } + + public void add(Animator anim, TimeInterpolator interpolator, SpringProperty springProperty) { + anim.setInterpolator(interpolator); + add(anim, springProperty); + } + + public void add(Animator anim) { + add(anim, SpringProperty.DEFAULT); + } + + public void add(Animator a, SpringProperty springProperty) { + anim.play(a); + addAnimationHoldersRecur(a, springProperty, animHolders); + } + + public void finish(boolean isSuccess, int logAction) { + for (Consumer listeners : mEndListeners) { + listeners.accept(new EndState(isSuccess, logAction)); + } + mEndListeners.clear(); + } + + public void addEndListener(Consumer listener) { + mEndListeners.add(listener); + } + + public static class EndState { + public boolean isSuccess; + public int logAction; + + public EndState(boolean isSuccess, int logAction) { + this.isSuccess = isSuccess; + this.logAction = logAction; + } + } +} diff --git a/src/com/android/launcher3/anim/SpringObjectAnimator.java b/src/com/android/launcher3/anim/SpringObjectAnimator.java deleted file mode 100644 index 27b9c18cd4..0000000000 --- a/src/com/android/launcher3/anim/SpringObjectAnimator.java +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright (C) 2019 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.launcher3.anim; - -import static androidx.dynamicanimation.animation.FloatPropertyCompat.createFloatPropertyCompat; - -import static com.android.launcher3.config.FeatureFlags.QUICKSTEP_SPRINGS; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.ObjectAnimator; -import android.animation.TimeInterpolator; -import android.animation.ValueAnimator; -import android.os.Handler; -import android.os.Looper; -import android.util.FloatProperty; -import android.util.Log; - -import androidx.dynamicanimation.animation.DynamicAnimation.OnAnimationEndListener; -import androidx.dynamicanimation.animation.SpringAnimation; -import androidx.dynamicanimation.animation.SpringForce; - -import java.util.ArrayList; - - -/** - * This animator allows for an object's property to be be controlled by an {@link ObjectAnimator} or - * a {@link SpringAnimation}. It extends ValueAnimator so it can be used in an AnimatorSet. - */ -public class SpringObjectAnimator extends ValueAnimator { - - private static final String TAG = "SpringObjectAnimator"; - private static boolean DEBUG = false; - - private ObjectAnimator mObjectAnimator; - private float[] mValues; - - private SpringAnimation mSpring; - private SpringProperty mProperty; - - private ArrayList mListeners; - private boolean mSpringEnded = true; - private boolean mAnimatorEnded = true; - private boolean mEnded = true; - - public SpringObjectAnimator(T object, FloatProperty property, float minimumVisibleChange, - float damping, float stiffness, float... values) { - mSpring = new SpringAnimation(object, createFloatPropertyCompat(property)); - mSpring.setMinimumVisibleChange(minimumVisibleChange); - mSpring.setSpring(new SpringForce(0) - .setDampingRatio(damping) - .setStiffness(stiffness)); - mSpring.setStartVelocity(0.01f); - mProperty = new SpringProperty<>(property, mSpring); - mObjectAnimator = ObjectAnimator.ofFloat(object, mProperty, values); - mValues = values; - mListeners = new ArrayList<>(); - setFloatValues(values); - - // We use this listener and track mListeners so that we can sync the animator and spring - // listeners. - mObjectAnimator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animation) { - mAnimatorEnded = false; - mEnded = false; - for (AnimatorListener l : mListeners) { - l.onAnimationStart(animation); - } - } - - @Override - public void onAnimationEnd(Animator animation) { - mAnimatorEnded = true; - tryEnding(); - } - - @Override - public void onAnimationCancel(Animator animation) { - for (AnimatorListener l : mListeners) { - l.onAnimationCancel(animation); - } - mSpring.cancel(); - } - }); - - mSpring.addUpdateListener((animation, value, velocity) -> { - mSpringEnded = false; - mEnded = false; - }); - mSpring.addEndListener((animation, canceled, value, velocity) -> { - mSpringEnded = true; - tryEnding(); - }); - } - - private void tryEnding() { - if (DEBUG) { - Log.d(TAG, "tryEnding#mAnimatorEnded=" + mAnimatorEnded + ", mSpringEnded=" - + mSpringEnded + ", mEnded=" + mEnded); - } - - // If springs are disabled, ignore value of mSpringEnded - if (mAnimatorEnded && (mSpringEnded || !QUICKSTEP_SPRINGS.get()) && !mEnded) { - for (AnimatorListener l : mListeners) { - l.onAnimationEnd(this); - } - mEnded = true; - } - } - - public SpringAnimation getSpring() { - return mSpring; - } - - /** - * Initializes and sets up the spring to take over controlling the object. - */ - public void startSpring(float end, float velocity, OnAnimationEndListener endListener) { - // Cancel the spring so we can set new start velocity and final position. We need to remove - // the listener since the spring is not actually ending. - mSpring.removeEndListener(endListener); - mSpring.cancel(); - mSpring.addEndListener(endListener); - - mProperty.switchToSpring(); - - float startValue = end == 0 ? mValues[1] : mValues[0]; - float endValue = end == 0 ? mValues[0] : mValues[1]; - - // Ensures that the velocity matches the direction of the values. - velocity = Math.signum(endValue - startValue) * Math.abs(velocity); - mSpring.setStartVelocity(velocity); - - new Handler(Looper.getMainLooper()).postDelayed(() -> { - mSpring.animateToFinalPosition(endValue); - }, getStartDelay()); - } - - @Override - public void addListener(AnimatorListener listener) { - mListeners.add(listener); - } - - public ArrayList getObjectAnimatorListeners() { - return mObjectAnimator.getListeners(); - } - - @Override - public ArrayList getListeners() { - return mListeners; - } - - @Override - public void removeAllListeners() { - mListeners.clear(); - } - - @Override - public void removeListener(AnimatorListener listener) { - mListeners.remove(listener); - } - - @Override - public void addPauseListener(AnimatorPauseListener listener) { - mObjectAnimator.addPauseListener(listener); - } - - @Override - public void cancel() { - mObjectAnimator.cancel(); - mSpring.cancel(); - } - - @Override - public void end() { - mObjectAnimator.end(); - } - - @Override - public long getDuration() { - return mObjectAnimator.getDuration(); - } - - @Override - public TimeInterpolator getInterpolator() { - return mObjectAnimator.getInterpolator(); - } - - @Override - public long getStartDelay() { - return mObjectAnimator.getStartDelay(); - } - - @Override - public long getTotalDuration() { - return mObjectAnimator.getTotalDuration(); - } - - @Override - public boolean isPaused() { - return mObjectAnimator.isPaused(); - } - - @Override - public boolean isRunning() { - return mObjectAnimator.isRunning(); - } - - @Override - public boolean isStarted() { - return mObjectAnimator.isStarted(); - } - - @Override - public void pause() { - mObjectAnimator.pause(); - } - - @Override - public void removePauseListener(AnimatorPauseListener listener) { - mObjectAnimator.removePauseListener(listener); - } - - @Override - public void resume() { - mObjectAnimator.resume(); - } - - @Override - public ValueAnimator setDuration(long duration) { - return mObjectAnimator.setDuration(duration); - } - - @Override - public void setInterpolator(TimeInterpolator value) { - mObjectAnimator.setInterpolator(value); - } - - @Override - public void setStartDelay(long startDelay) { - mObjectAnimator.setStartDelay(startDelay); - } - - @Override - public void setTarget(Object target) { - mObjectAnimator.setTarget(target); - } - - @Override - public void start() { - mObjectAnimator.start(); - } - - @Override - public void setCurrentFraction(float fraction) { - mObjectAnimator.setCurrentFraction(fraction); - } - - @Override - public void setCurrentPlayTime(long playTime) { - mObjectAnimator.setCurrentPlayTime(playTime); - } - - public static class SpringProperty extends FloatProperty { - - boolean useSpring = false; - final FloatProperty mProperty; - final SpringAnimation mSpring; - - public SpringProperty(FloatProperty property, SpringAnimation spring) { - super(property.getName()); - mProperty = property; - mSpring = spring; - } - - public void switchToSpring() { - useSpring = true; - } - - @Override - public Float get(T object) { - return mProperty.get(object); - } - - @Override - public void setValue(T object, float progress) { - if (useSpring) { - mSpring.animateToFinalPosition(progress); - } else { - mProperty.setValue(object, progress); - } - } - } -} diff --git a/src/com/android/launcher3/anim/SpringProperty.java b/src/com/android/launcher3/anim/SpringProperty.java new file mode 100644 index 0000000000..caedd6c658 --- /dev/null +++ b/src/com/android/launcher3/anim/SpringProperty.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2020 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.launcher3.anim; + +import androidx.dynamicanimation.animation.SpringForce; + +/** + * Utility class to store configurations for spring animation + */ +public class SpringProperty { + + public static final SpringProperty DEFAULT = new SpringProperty(); + + // Play spring when the animation is going towards the end + public static final int FLAG_CAN_SPRING_ON_END = 1 << 0; + // Play spring when animation is going towards the start (in reverse direction) + public static final int FLAG_CAN_SPRING_ON_START = 1 << 1; + + public final int flags; + + float mDampingRatio = SpringForce.DAMPING_RATIO_MEDIUM_BOUNCY; + float mStiffness = SpringForce.STIFFNESS_MEDIUM; + + public SpringProperty() { + this(0); + } + + public SpringProperty(int flags) { + this.flags = flags; + } + + public SpringProperty setDampingRatio(float dampingRatio) { + mDampingRatio = dampingRatio; + return this; + } + + public SpringProperty setStiffness(float stiffness) { + mStiffness = stiffness; + return this; + } +} diff --git a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java index 34d69e9eec..4e9878105d 100644 --- a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java +++ b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java @@ -42,11 +42,11 @@ import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.AnimatorSetBuilder; +import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch; import com.android.launcher3.util.FlingBlockCheck; -import com.android.launcher3.util.PendingAnimation; import com.android.launcher3.util.TouchController; /** @@ -434,7 +434,7 @@ public abstract class AbstractStateChangeTouchController maybeUpdateAtomicAnim(mFromState, targetState, targetState == mToState ? 1f : 0f); updateSwipeCompleteAnimation(anim, Math.max(duration, getRemainingAtomicDuration()), targetState, velocity, fling); - mCurrentAnimation.dispatchOnStartWithVelocity(endProgress, progressVelocity); + mCurrentAnimation.dispatchOnStart(); if (fling && targetState == LauncherState.ALL_APPS && !UNSTABLE_SPRINGS.get()) { mLauncher.getAppsView().addSpringFromFlingUpdateListener(anim, velocity); } diff --git a/src/com/android/launcher3/util/PendingAnimation.java b/src/com/android/launcher3/util/PendingAnimation.java deleted file mode 100644 index 617a38bbed..0000000000 --- a/src/com/android/launcher3/util/PendingAnimation.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2018 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.launcher3.util; - -import android.animation.AnimatorSet; -import android.annotation.TargetApi; -import android.os.Build; - -import java.util.ArrayList; -import java.util.function.Consumer; - -/** - * Utility class to keep track of a running animation. - * - * This class allows attaching end callbacks to an animation is intended to be used with - * {@link com.android.launcher3.anim.AnimatorPlaybackController}, since in that case - * AnimationListeners are not properly dispatched. - */ -@TargetApi(Build.VERSION_CODES.O) -public class PendingAnimation { - - private final ArrayList> mEndListeners = new ArrayList<>(); - - public final AnimatorSet anim; - - public PendingAnimation(AnimatorSet anim) { - this.anim = anim; - } - - public void finish(boolean isSuccess, int logAction) { - for (Consumer listeners : mEndListeners) { - listeners.accept(new OnEndListener(isSuccess, logAction)); - } - mEndListeners.clear(); - } - - public void addEndListener(Consumer listener) { - mEndListeners.add(listener); - } - - public static class OnEndListener { - public boolean isSuccess; - public int logAction; - - public OnEndListener(boolean isSuccess, int logAction) { - this.isSuccess = isSuccess; - this.logAction = logAction; - } - } -} From bf48cd480cd131c370760117681917dedd784c51 Mon Sep 17 00:00:00 2001 From: Andy Wickham Date: Tue, 3 Mar 2020 01:15:27 +0000 Subject: [PATCH 14/41] Removes iconloaderlib from Launcher3. (It's now in frameworks/libs/systemui) Bug: 138964382 Test: builds Change-Id: Ic60adfb2ebdcf1a72b440df26023b861fd6e62d5 --- iconloaderlib/Android.bp | 44 -- iconloaderlib/AndroidManifest.xml | 20 - iconloaderlib/build.gradle | 38 -- .../adaptive_icon_drawable_wrapper.xml | 22 - .../res/drawable/ic_instant_app_badge.xml | 39 -- iconloaderlib/res/values/colors.xml | 21 - iconloaderlib/res/values/config.xml | 27 - iconloaderlib/res/values/dimens.xml | 19 - .../launcher3/icons/BaseIconFactory.java | 396 ------------ .../android/launcher3/icons/BitmapInfo.java | 72 --- .../launcher3/icons/BitmapRenderer.java | 70 --- .../launcher3/icons/ColorExtractor.java | 127 ---- .../android/launcher3/icons/DotRenderer.java | 143 ----- .../launcher3/icons/FixedScaleDrawable.java | 53 -- .../launcher3/icons/GraphicsUtils.java | 85 --- .../launcher3/icons/IconNormalizer.java | 411 ------------- .../launcher3/icons/ShadowGenerator.java | 167 ----- .../launcher3/icons/cache/BaseIconCache.java | 582 ------------------ .../launcher3/icons/cache/CachingLogic.java | 65 -- .../icons/cache/HandlerRunnable.java | 67 -- .../icons/cache/IconCacheUpdateHandler.java | 3 + .../android/launcher3/util/ComponentKey.java | 59 -- .../launcher3/util/NoLocaleSQLiteHelper.java | 58 -- .../launcher3/util/SQLiteCacheHelper.java | 125 ---- .../android/launcher3/icons/IconFactory.java | 89 --- .../launcher3/icons/SimpleIconCache.java | 114 ---- 26 files changed, 3 insertions(+), 2913 deletions(-) delete mode 100644 iconloaderlib/Android.bp delete mode 100644 iconloaderlib/AndroidManifest.xml delete mode 100644 iconloaderlib/build.gradle delete mode 100644 iconloaderlib/res/drawable-v26/adaptive_icon_drawable_wrapper.xml delete mode 100644 iconloaderlib/res/drawable/ic_instant_app_badge.xml delete mode 100644 iconloaderlib/res/values/colors.xml delete mode 100644 iconloaderlib/res/values/config.xml delete mode 100644 iconloaderlib/res/values/dimens.xml delete mode 100644 iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java delete mode 100644 iconloaderlib/src/com/android/launcher3/icons/BitmapInfo.java delete mode 100644 iconloaderlib/src/com/android/launcher3/icons/BitmapRenderer.java delete mode 100644 iconloaderlib/src/com/android/launcher3/icons/ColorExtractor.java delete mode 100644 iconloaderlib/src/com/android/launcher3/icons/DotRenderer.java delete mode 100644 iconloaderlib/src/com/android/launcher3/icons/FixedScaleDrawable.java delete mode 100644 iconloaderlib/src/com/android/launcher3/icons/GraphicsUtils.java delete mode 100644 iconloaderlib/src/com/android/launcher3/icons/IconNormalizer.java delete mode 100644 iconloaderlib/src/com/android/launcher3/icons/ShadowGenerator.java delete mode 100644 iconloaderlib/src/com/android/launcher3/icons/cache/BaseIconCache.java delete mode 100644 iconloaderlib/src/com/android/launcher3/icons/cache/CachingLogic.java delete mode 100644 iconloaderlib/src/com/android/launcher3/icons/cache/HandlerRunnable.java delete mode 100644 iconloaderlib/src/com/android/launcher3/util/ComponentKey.java delete mode 100644 iconloaderlib/src/com/android/launcher3/util/NoLocaleSQLiteHelper.java delete mode 100644 iconloaderlib/src/com/android/launcher3/util/SQLiteCacheHelper.java delete mode 100644 iconloaderlib/src_full_lib/com/android/launcher3/icons/IconFactory.java delete mode 100644 iconloaderlib/src_full_lib/com/android/launcher3/icons/SimpleIconCache.java diff --git a/iconloaderlib/Android.bp b/iconloaderlib/Android.bp deleted file mode 100644 index f12d16e42a..0000000000 --- a/iconloaderlib/Android.bp +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2018 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. - -android_library { - name: "iconloader_base", - sdk_version: "28", - min_sdk_version: "21", - static_libs: [ - "androidx.core_core", - ], - resource_dirs: [ - "res", - ], - srcs: [ - "src/**/*.java", - ], -} - -android_library { - name: "iconloader", - sdk_version: "system_current", - min_sdk_version: "21", - static_libs: [ - "androidx.core_core", - ], - resource_dirs: [ - "res", - ], - srcs: [ - "src/**/*.java", - "src_full_lib/**/*.java", - ], -} diff --git a/iconloaderlib/AndroidManifest.xml b/iconloaderlib/AndroidManifest.xml deleted file mode 100644 index b30258da2a..0000000000 --- a/iconloaderlib/AndroidManifest.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - diff --git a/iconloaderlib/build.gradle b/iconloaderlib/build.gradle deleted file mode 100644 index d7a62e1114..0000000000 --- a/iconloaderlib/build.gradle +++ /dev/null @@ -1,38 +0,0 @@ -apply plugin: 'com.android.library' - -android { - compileSdkVersion COMPILE_SDK - buildToolsVersion BUILD_TOOLS_VERSION - - defaultConfig { - minSdkVersion 25 - targetSdkVersion 28 - versionCode 1 - versionName "1.0" - } - - sourceSets { - main { - java.srcDirs = ['src', 'src_full_lib'] - manifest.srcFile 'AndroidManifest.xml' - res.srcDirs = ['res'] - } - } - - lintOptions { - abortOnError false - } - - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } -} - -dependencies { - implementation "androidx.core:core:${ANDROID_X_VERSION}" -} diff --git a/iconloaderlib/res/drawable-v26/adaptive_icon_drawable_wrapper.xml b/iconloaderlib/res/drawable-v26/adaptive_icon_drawable_wrapper.xml deleted file mode 100644 index 9f13cf5719..0000000000 --- a/iconloaderlib/res/drawable-v26/adaptive_icon_drawable_wrapper.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - diff --git a/iconloaderlib/res/drawable/ic_instant_app_badge.xml b/iconloaderlib/res/drawable/ic_instant_app_badge.xml deleted file mode 100644 index b74317e5f2..0000000000 --- a/iconloaderlib/res/drawable/ic_instant_app_badge.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - diff --git a/iconloaderlib/res/values/colors.xml b/iconloaderlib/res/values/colors.xml deleted file mode 100644 index 873b2fc5fb..0000000000 --- a/iconloaderlib/res/values/colors.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - #FFFFFF - diff --git a/iconloaderlib/res/values/config.xml b/iconloaderlib/res/values/config.xml deleted file mode 100644 index 68c2d2e3aa..0000000000 --- a/iconloaderlib/res/values/config.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - 56dp - false - app_icons.db - - \ No newline at end of file diff --git a/iconloaderlib/res/values/dimens.xml b/iconloaderlib/res/values/dimens.xml deleted file mode 100644 index e8c0c44f72..0000000000 --- a/iconloaderlib/res/values/dimens.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - 24dp - diff --git a/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java b/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java deleted file mode 100644 index 31a923e314..0000000000 --- a/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java +++ /dev/null @@ -1,396 +0,0 @@ -package com.android.launcher3.icons; - -import static android.graphics.Paint.DITHER_FLAG; -import static android.graphics.Paint.FILTER_BITMAP_FLAG; - -import static com.android.launcher3.icons.ShadowGenerator.BLUR_FACTOR; - -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.PaintFlagsDrawFilter; -import android.graphics.Rect; -import android.graphics.RectF; -import android.graphics.drawable.AdaptiveIconDrawable; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.os.Process; -import android.os.UserHandle; - -import androidx.annotation.NonNull; - -/** - * This class will be moved to androidx library. There shouldn't be any dependency outside - * this package. - */ -public class BaseIconFactory implements AutoCloseable { - - private static final String TAG = "BaseIconFactory"; - private static final int DEFAULT_WRAPPER_BACKGROUND = Color.WHITE; - static final boolean ATLEAST_OREO = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O; - static final boolean ATLEAST_P = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P; - - private static final float ICON_BADGE_SCALE = 0.444f; - - private final Rect mOldBounds = new Rect(); - protected final Context mContext; - private final Canvas mCanvas; - private final PackageManager mPm; - private final ColorExtractor mColorExtractor; - private boolean mDisableColorExtractor; - private boolean mBadgeOnLeft = false; - - protected final int mFillResIconDpi; - protected final int mIconBitmapSize; - - private IconNormalizer mNormalizer; - private ShadowGenerator mShadowGenerator; - private final boolean mShapeDetection; - - private Drawable mWrapperIcon; - private int mWrapperBackgroundColor = DEFAULT_WRAPPER_BACKGROUND; - - protected BaseIconFactory(Context context, int fillResIconDpi, int iconBitmapSize, - boolean shapeDetection) { - mContext = context.getApplicationContext(); - mShapeDetection = shapeDetection; - mFillResIconDpi = fillResIconDpi; - mIconBitmapSize = iconBitmapSize; - - mPm = mContext.getPackageManager(); - mColorExtractor = new ColorExtractor(); - - mCanvas = new Canvas(); - mCanvas.setDrawFilter(new PaintFlagsDrawFilter(DITHER_FLAG, FILTER_BITMAP_FLAG)); - clear(); - } - - protected BaseIconFactory(Context context, int fillResIconDpi, int iconBitmapSize) { - this(context, fillResIconDpi, iconBitmapSize, false); - } - - protected void clear() { - mWrapperBackgroundColor = DEFAULT_WRAPPER_BACKGROUND; - mDisableColorExtractor = false; - mBadgeOnLeft = false; - } - - public ShadowGenerator getShadowGenerator() { - if (mShadowGenerator == null) { - mShadowGenerator = new ShadowGenerator(mIconBitmapSize); - } - return mShadowGenerator; - } - - public IconNormalizer getNormalizer() { - if (mNormalizer == null) { - mNormalizer = new IconNormalizer(mContext, mIconBitmapSize, mShapeDetection); - } - return mNormalizer; - } - - @SuppressWarnings("deprecation") - public BitmapInfo createIconBitmap(Intent.ShortcutIconResource iconRes) { - try { - Resources resources = mPm.getResourcesForApplication(iconRes.packageName); - if (resources != null) { - final int id = resources.getIdentifier(iconRes.resourceName, null, null); - // do not stamp old legacy shortcuts as the app may have already forgotten about it - return createBadgedIconBitmap( - resources.getDrawableForDensity(id, mFillResIconDpi), - Process.myUserHandle() /* only available on primary user */, - false /* do not apply legacy treatment */); - } - } catch (Exception e) { - // Icon not found. - } - return null; - } - - public BitmapInfo createIconBitmap(Bitmap icon) { - if (mIconBitmapSize != icon.getWidth() || mIconBitmapSize != icon.getHeight()) { - icon = createIconBitmap(new BitmapDrawable(mContext.getResources(), icon), 1f); - } - - return BitmapInfo.of(icon, extractColor(icon)); - } - - public BitmapInfo createBadgedIconBitmap(Drawable icon, UserHandle user, - boolean shrinkNonAdaptiveIcons) { - return createBadgedIconBitmap(icon, user, shrinkNonAdaptiveIcons, false, null); - } - - public BitmapInfo createBadgedIconBitmap(Drawable icon, UserHandle user, - int iconAppTargetSdk) { - return createBadgedIconBitmap(icon, user, iconAppTargetSdk, false); - } - - public BitmapInfo createBadgedIconBitmap(Drawable icon, UserHandle user, - int iconAppTargetSdk, boolean isInstantApp) { - return createBadgedIconBitmap(icon, user, iconAppTargetSdk, isInstantApp, null); - } - - public BitmapInfo createBadgedIconBitmap(Drawable icon, UserHandle user, - int iconAppTargetSdk, boolean isInstantApp, float[] scale) { - boolean shrinkNonAdaptiveIcons = ATLEAST_P || - (ATLEAST_OREO && iconAppTargetSdk >= Build.VERSION_CODES.O); - return createBadgedIconBitmap(icon, user, shrinkNonAdaptiveIcons, isInstantApp, scale); - } - - public Bitmap createScaledBitmapWithoutShadow(Drawable icon, int iconAppTargetSdk) { - boolean shrinkNonAdaptiveIcons = ATLEAST_P || - (ATLEAST_OREO && iconAppTargetSdk >= Build.VERSION_CODES.O); - return createScaledBitmapWithoutShadow(icon, shrinkNonAdaptiveIcons); - } - - /** - * Creates bitmap using the source drawable and various parameters. - * The bitmap is visually normalized with other icons and has enough spacing to add shadow. - * - * @param icon source of the icon - * @param user info can be used for a badge - * @param shrinkNonAdaptiveIcons {@code true} if non adaptive icons should be treated - * @param isInstantApp info can be used for a badge - * @param scale returns the scale result from normalization - * @return a bitmap suitable for disaplaying as an icon at various system UIs. - */ - public BitmapInfo createBadgedIconBitmap(@NonNull Drawable icon, UserHandle user, - boolean shrinkNonAdaptiveIcons, boolean isInstantApp, float[] scale) { - if (scale == null) { - scale = new float[1]; - } - icon = normalizeAndWrapToAdaptiveIcon(icon, shrinkNonAdaptiveIcons, null, scale); - Bitmap bitmap = createIconBitmap(icon, scale[0]); - if (ATLEAST_OREO && icon instanceof AdaptiveIconDrawable) { - mCanvas.setBitmap(bitmap); - getShadowGenerator().recreateIcon(Bitmap.createBitmap(bitmap), mCanvas); - mCanvas.setBitmap(null); - } - - if (isInstantApp) { - badgeWithDrawable(bitmap, mContext.getDrawable(R.drawable.ic_instant_app_badge)); - } - if (user != null) { - BitmapDrawable drawable = new FixedSizeBitmapDrawable(bitmap); - Drawable badged = mPm.getUserBadgedIcon(drawable, user); - if (badged instanceof BitmapDrawable) { - bitmap = ((BitmapDrawable) badged).getBitmap(); - } else { - bitmap = createIconBitmap(badged, 1f); - } - } - int color = extractColor(bitmap); - return icon instanceof BitmapInfo.Extender - ? ((BitmapInfo.Extender) icon).getExtendedInfo(bitmap, color, this) - : BitmapInfo.of(bitmap, color); - } - - public Bitmap createScaledBitmapWithoutShadow(Drawable icon, boolean shrinkNonAdaptiveIcons) { - RectF iconBounds = new RectF(); - float[] scale = new float[1]; - icon = normalizeAndWrapToAdaptiveIcon(icon, shrinkNonAdaptiveIcons, iconBounds, scale); - return createIconBitmap(icon, - Math.min(scale[0], ShadowGenerator.getScaleForBounds(iconBounds))); - } - - /** - * Switches badging to left/right - */ - public void setBadgeOnLeft(boolean badgeOnLeft) { - mBadgeOnLeft = badgeOnLeft; - } - - /** - * Sets the background color used for wrapped adaptive icon - */ - public void setWrapperBackgroundColor(int color) { - mWrapperBackgroundColor = (Color.alpha(color) < 255) ? DEFAULT_WRAPPER_BACKGROUND : color; - } - - /** - * Disables the dominant color extraction for all icons loaded. - */ - public void disableColorExtraction() { - mDisableColorExtractor = true; - } - - private Drawable normalizeAndWrapToAdaptiveIcon(@NonNull Drawable icon, - boolean shrinkNonAdaptiveIcons, RectF outIconBounds, float[] outScale) { - if (icon == null) { - return null; - } - float scale = 1f; - - if (shrinkNonAdaptiveIcons && ATLEAST_OREO) { - if (mWrapperIcon == null) { - mWrapperIcon = mContext.getDrawable(R.drawable.adaptive_icon_drawable_wrapper) - .mutate(); - } - AdaptiveIconDrawable dr = (AdaptiveIconDrawable) mWrapperIcon; - dr.setBounds(0, 0, 1, 1); - boolean[] outShape = new boolean[1]; - scale = getNormalizer().getScale(icon, outIconBounds, dr.getIconMask(), outShape); - if (!(icon instanceof AdaptiveIconDrawable) && !outShape[0]) { - FixedScaleDrawable fsd = ((FixedScaleDrawable) dr.getForeground()); - fsd.setDrawable(icon); - fsd.setScale(scale); - icon = dr; - scale = getNormalizer().getScale(icon, outIconBounds, null, null); - - ((ColorDrawable) dr.getBackground()).setColor(mWrapperBackgroundColor); - } - } else { - scale = getNormalizer().getScale(icon, outIconBounds, null, null); - } - - outScale[0] = scale; - return icon; - } - - /** - * Adds the {@param badge} on top of {@param target} using the badge dimensions. - */ - public void badgeWithDrawable(Bitmap target, Drawable badge) { - mCanvas.setBitmap(target); - badgeWithDrawable(mCanvas, badge); - mCanvas.setBitmap(null); - } - - /** - * Adds the {@param badge} on top of {@param target} using the badge dimensions. - */ - public void badgeWithDrawable(Canvas target, Drawable badge) { - int badgeSize = getBadgeSizeForIconSize(mIconBitmapSize); - if (mBadgeOnLeft) { - badge.setBounds(0, mIconBitmapSize - badgeSize, badgeSize, mIconBitmapSize); - } else { - badge.setBounds(mIconBitmapSize - badgeSize, mIconBitmapSize - badgeSize, - mIconBitmapSize, mIconBitmapSize); - } - badge.draw(target); - } - - private Bitmap createIconBitmap(Drawable icon, float scale) { - return createIconBitmap(icon, scale, mIconBitmapSize); - } - - /** - * @param icon drawable that should be flattened to a bitmap - * @param scale the scale to apply before drawing {@param icon} on the canvas - */ - public Bitmap createIconBitmap(@NonNull Drawable icon, float scale, int size) { - Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); - if (icon == null) { - return bitmap; - } - mCanvas.setBitmap(bitmap); - mOldBounds.set(icon.getBounds()); - - if (ATLEAST_OREO && icon instanceof AdaptiveIconDrawable) { - int offset = Math.max((int) Math.ceil(BLUR_FACTOR * size), - Math.round(size * (1 - scale) / 2 )); - icon.setBounds(offset, offset, size - offset, size - offset); - icon.draw(mCanvas); - } else { - if (icon instanceof BitmapDrawable) { - BitmapDrawable bitmapDrawable = (BitmapDrawable) icon; - Bitmap b = bitmapDrawable.getBitmap(); - if (bitmap != null && b.getDensity() == Bitmap.DENSITY_NONE) { - bitmapDrawable.setTargetDensity(mContext.getResources().getDisplayMetrics()); - } - } - int width = size; - int height = size; - - int intrinsicWidth = icon.getIntrinsicWidth(); - int intrinsicHeight = icon.getIntrinsicHeight(); - if (intrinsicWidth > 0 && intrinsicHeight > 0) { - // Scale the icon proportionally to the icon dimensions - final float ratio = (float) intrinsicWidth / intrinsicHeight; - if (intrinsicWidth > intrinsicHeight) { - height = (int) (width / ratio); - } else if (intrinsicHeight > intrinsicWidth) { - width = (int) (height * ratio); - } - } - final int left = (size - width) / 2; - final int top = (size - height) / 2; - icon.setBounds(left, top, left + width, top + height); - mCanvas.save(); - mCanvas.scale(scale, scale, size / 2, size / 2); - icon.draw(mCanvas); - mCanvas.restore(); - - } - icon.setBounds(mOldBounds); - mCanvas.setBitmap(null); - return bitmap; - } - - @Override - public void close() { - clear(); - } - - public BitmapInfo makeDefaultIcon(UserHandle user) { - return createBadgedIconBitmap(getFullResDefaultActivityIcon(mFillResIconDpi), - user, Build.VERSION.SDK_INT); - } - - public static Drawable getFullResDefaultActivityIcon(int iconDpi) { - return Resources.getSystem().getDrawableForDensity( - Build.VERSION.SDK_INT >= Build.VERSION_CODES.O - ? android.R.drawable.sym_def_app_icon : android.R.mipmap.sym_def_app_icon, - iconDpi); - } - - /** - * Badges the provided source with the badge info - */ - public BitmapInfo badgeBitmap(Bitmap source, BitmapInfo badgeInfo) { - Bitmap icon = BitmapRenderer.createHardwareBitmap(mIconBitmapSize, mIconBitmapSize, (c) -> { - getShadowGenerator().recreateIcon(source, c); - badgeWithDrawable(c, new FixedSizeBitmapDrawable(badgeInfo.icon)); - }); - return BitmapInfo.of(icon, badgeInfo.color); - } - - private int extractColor(Bitmap bitmap) { - return mDisableColorExtractor ? 0 : mColorExtractor.findDominantColorByHue(bitmap); - } - - /** - * Returns the correct badge size given an icon size - */ - public static int getBadgeSizeForIconSize(int iconSize) { - return (int) (ICON_BADGE_SCALE * iconSize); - } - - /** - * An extension of {@link BitmapDrawable} which returns the bitmap pixel size as intrinsic size. - * This allows the badging to be done based on the action bitmap size rather than - * the scaled bitmap size. - */ - private static class FixedSizeBitmapDrawable extends BitmapDrawable { - - public FixedSizeBitmapDrawable(Bitmap bitmap) { - super(null, bitmap); - } - - @Override - public int getIntrinsicHeight() { - return getBitmap().getWidth(); - } - - @Override - public int getIntrinsicWidth() { - return getBitmap().getWidth(); - } - } -} diff --git a/iconloaderlib/src/com/android/launcher3/icons/BitmapInfo.java b/iconloaderlib/src/com/android/launcher3/icons/BitmapInfo.java deleted file mode 100644 index d33f9b1112..0000000000 --- a/iconloaderlib/src/com/android/launcher3/icons/BitmapInfo.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2017 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.launcher3.icons; - -import android.graphics.Bitmap; -import android.graphics.Bitmap.Config; - -import androidx.annotation.NonNull; - -public class BitmapInfo { - - public static final Bitmap LOW_RES_ICON = Bitmap.createBitmap(1, 1, Config.ALPHA_8); - public static final BitmapInfo LOW_RES_INFO = fromBitmap(LOW_RES_ICON); - - public final Bitmap icon; - public final int color; - - public BitmapInfo(Bitmap icon, int color) { - this.icon = icon; - this.color = color; - } - - /** - * Ideally icon should not be null, except in cases when generating hardware bitmap failed - */ - public final boolean isNullOrLowRes() { - return icon == null || icon == LOW_RES_ICON; - } - - public final boolean isLowRes() { - return LOW_RES_ICON == icon; - } - - public static BitmapInfo fromBitmap(@NonNull Bitmap bitmap) { - return of(bitmap, 0); - } - - public static BitmapInfo of(@NonNull Bitmap bitmap, int color) { - return new BitmapInfo(bitmap, color); - } - - /** - * Interface to be implemented by drawables to provide a custom BitmapInfo - */ - public interface Extender { - - /** - * Called for creating a custom BitmapInfo - */ - default BitmapInfo getExtendedInfo(Bitmap bitmap, int color, BaseIconFactory iconFactory) { - return BitmapInfo.of(bitmap, color); - } - - /** - * Notifies the drawable that it will be drawn directly in the UI, without any preprocessing - */ - default void prepareToDrawOnUi() { } - } -} diff --git a/iconloaderlib/src/com/android/launcher3/icons/BitmapRenderer.java b/iconloaderlib/src/com/android/launcher3/icons/BitmapRenderer.java deleted file mode 100644 index 5751ed95cb..0000000000 --- a/iconloaderlib/src/com/android/launcher3/icons/BitmapRenderer.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2017 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.launcher3.icons; - -import android.annotation.TargetApi; -import android.graphics.Bitmap; -import android.graphics.Bitmap.Config; -import android.graphics.Canvas; -import android.graphics.Picture; -import android.graphics.Rect; -import android.graphics.RectF; -import android.os.Build; -import android.os.Build.VERSION_CODES; - -/** - * Interface representing a bitmap draw operation. - */ -public interface BitmapRenderer { - - boolean USE_HARDWARE_BITMAP = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P; - - static Bitmap createSoftwareBitmap(int width, int height, BitmapRenderer renderer) { - GraphicsUtils.noteNewBitmapCreated(); - Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - renderer.draw(new Canvas(result)); - return result; - } - - @TargetApi(Build.VERSION_CODES.P) - static Bitmap createHardwareBitmap(int width, int height, BitmapRenderer renderer) { - if (!USE_HARDWARE_BITMAP) { - return createSoftwareBitmap(width, height, renderer); - } - - GraphicsUtils.noteNewBitmapCreated(); - Picture picture = new Picture(); - renderer.draw(picture.beginRecording(width, height)); - picture.endRecording(); - return Bitmap.createBitmap(picture); - } - - /** - * Returns a bitmap from subset of the source bitmap. The new bitmap may be the - * same object as source, or a copy may have been made. - */ - static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height) { - if (Build.VERSION.SDK_INT >= VERSION_CODES.O && source.getConfig() == Config.HARDWARE) { - return createHardwareBitmap(width, height, c -> c.drawBitmap(source, - new Rect(x, y, x + width, y + height), new RectF(0, 0, width, height), null)); - } else { - GraphicsUtils.noteNewBitmapCreated(); - return Bitmap.createBitmap(source, x, y, width, height); - } - } - - void draw(Canvas out); -} diff --git a/iconloaderlib/src/com/android/launcher3/icons/ColorExtractor.java b/iconloaderlib/src/com/android/launcher3/icons/ColorExtractor.java deleted file mode 100644 index 87bda825cc..0000000000 --- a/iconloaderlib/src/com/android/launcher3/icons/ColorExtractor.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) 2017 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.launcher3.icons; - -import android.graphics.Bitmap; -import android.graphics.Color; -import android.util.SparseArray; -import java.util.Arrays; - -/** - * Utility class for extracting colors from a bitmap. - */ -public class ColorExtractor { - - private final int NUM_SAMPLES = 20; - private final float[] mTmpHsv = new float[3]; - private final float[] mTmpHueScoreHistogram = new float[360]; - private final int[] mTmpPixels = new int[NUM_SAMPLES]; - private final SparseArray mTmpRgbScores = new SparseArray<>(); - - /** - * This picks a dominant color, looking for high-saturation, high-value, repeated hues. - * @param bitmap The bitmap to scan - */ - public int findDominantColorByHue(Bitmap bitmap) { - return findDominantColorByHue(bitmap, NUM_SAMPLES); - } - - /** - * This picks a dominant color, looking for high-saturation, high-value, repeated hues. - * @param bitmap The bitmap to scan - */ - public int findDominantColorByHue(Bitmap bitmap, int samples) { - final int height = bitmap.getHeight(); - final int width = bitmap.getWidth(); - int sampleStride = (int) Math.sqrt((height * width) / samples); - if (sampleStride < 1) { - sampleStride = 1; - } - - // This is an out-param, for getting the hsv values for an rgb - float[] hsv = mTmpHsv; - Arrays.fill(hsv, 0); - - // First get the best hue, by creating a histogram over 360 hue buckets, - // where each pixel contributes a score weighted by saturation, value, and alpha. - float[] hueScoreHistogram = mTmpHueScoreHistogram; - Arrays.fill(hueScoreHistogram, 0); - float highScore = -1; - int bestHue = -1; - - int[] pixels = mTmpPixels; - Arrays.fill(pixels, 0); - int pixelCount = 0; - - for (int y = 0; y < height; y += sampleStride) { - for (int x = 0; x < width; x += sampleStride) { - int argb = bitmap.getPixel(x, y); - int alpha = 0xFF & (argb >> 24); - if (alpha < 0x80) { - // Drop mostly-transparent pixels. - continue; - } - // Remove the alpha channel. - int rgb = argb | 0xFF000000; - Color.colorToHSV(rgb, hsv); - // Bucket colors by the 360 integer hues. - int hue = (int) hsv[0]; - if (hue < 0 || hue >= hueScoreHistogram.length) { - // Defensively avoid array bounds violations. - continue; - } - if (pixelCount < samples) { - pixels[pixelCount++] = rgb; - } - float score = hsv[1] * hsv[2]; - hueScoreHistogram[hue] += score; - if (hueScoreHistogram[hue] > highScore) { - highScore = hueScoreHistogram[hue]; - bestHue = hue; - } - } - } - - SparseArray rgbScores = mTmpRgbScores; - rgbScores.clear(); - int bestColor = 0xff000000; - highScore = -1; - // Go back over the RGB colors that match the winning hue, - // creating a histogram of weighted s*v scores, for up to 100*100 [s,v] buckets. - // The highest-scoring RGB color wins. - for (int i = 0; i < pixelCount; i++) { - int rgb = pixels[i]; - Color.colorToHSV(rgb, hsv); - int hue = (int) hsv[0]; - if (hue == bestHue) { - float s = hsv[1]; - float v = hsv[2]; - int bucket = (int) (s * 100) + (int) (v * 10000); - // Score by cumulative saturation * value. - float score = s * v; - Float oldTotal = rgbScores.get(bucket); - float newTotal = oldTotal == null ? score : oldTotal + score; - rgbScores.put(bucket, newTotal); - if (newTotal > highScore) { - highScore = newTotal; - // All the colors in the winning bucket are very similar. Last in wins. - bestColor = rgb; - } - } - } - return bestColor; - } -} diff --git a/iconloaderlib/src/com/android/launcher3/icons/DotRenderer.java b/iconloaderlib/src/com/android/launcher3/icons/DotRenderer.java deleted file mode 100644 index 97a0fd3ffc..0000000000 --- a/iconloaderlib/src/com/android/launcher3/icons/DotRenderer.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (C) 2017 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.launcher3.icons; - -import static android.graphics.Paint.ANTI_ALIAS_FLAG; -import static android.graphics.Paint.FILTER_BITMAP_FLAG; - -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.PathMeasure; -import android.graphics.Rect; -import android.graphics.RectF; -import android.util.Log; -import android.view.ViewDebug; - -/** - * Used to draw a notification dot on top of an icon. - */ -public class DotRenderer { - - private static final String TAG = "DotRenderer"; - - // The dot size is defined as a percentage of the app icon size. - private static final float SIZE_PERCENTAGE = 0.228f; - - private final float mCircleRadius; - private final Paint mCirclePaint = new Paint(ANTI_ALIAS_FLAG | FILTER_BITMAP_FLAG); - - private final Bitmap mBackgroundWithShadow; - private final float mBitmapOffset; - - // Stores the center x and y position as a percentage (0 to 1) of the icon size - private final float[] mRightDotPosition; - private final float[] mLeftDotPosition; - - public DotRenderer(int iconSizePx, Path iconShapePath, int pathSize) { - int size = Math.round(SIZE_PERCENTAGE * iconSizePx); - ShadowGenerator.Builder builder = new ShadowGenerator.Builder(Color.TRANSPARENT); - builder.ambientShadowAlpha = 88; - mBackgroundWithShadow = builder.setupBlurForSize(size).createPill(size, size); - mCircleRadius = builder.radius; - - mBitmapOffset = -mBackgroundWithShadow.getHeight() * 0.5f; // Same as width. - - // Find the points on the path that are closest to the top left and right corners. - mLeftDotPosition = getPathPoint(iconShapePath, pathSize, -1); - mRightDotPosition = getPathPoint(iconShapePath, pathSize, 1); - } - - private static float[] getPathPoint(Path path, float size, float direction) { - float halfSize = size / 2; - // Small delta so that we don't get a zero size triangle - float delta = 1; - - float x = halfSize + direction * halfSize; - Path trianglePath = new Path(); - trianglePath.moveTo(halfSize, halfSize); - trianglePath.lineTo(x + delta * direction, 0); - trianglePath.lineTo(x, -delta); - trianglePath.close(); - - trianglePath.op(path, Path.Op.INTERSECT); - float[] pos = new float[2]; - new PathMeasure(trianglePath, false).getPosTan(0, pos, null); - - pos[0] = pos[0] / size; - pos[1] = pos[1] / size; - return pos; - } - - public float[] getLeftDotPosition() { - return mLeftDotPosition; - } - - public float[] getRightDotPosition() { - return mRightDotPosition; - } - - /** - * Draw a circle on top of the canvas according to the given params. - */ - public void draw(Canvas canvas, DrawParams params) { - if (params == null) { - Log.e(TAG, "Invalid null argument(s) passed in call to draw."); - return; - } - canvas.save(); - - Rect iconBounds = params.iconBounds; - float[] dotPosition = params.leftAlign ? mLeftDotPosition : mRightDotPosition; - float dotCenterX = iconBounds.left + iconBounds.width() * dotPosition[0]; - float dotCenterY = iconBounds.top + iconBounds.height() * dotPosition[1]; - - // Ensure dot fits entirely in canvas clip bounds. - Rect canvasBounds = canvas.getClipBounds(); - float offsetX = params.leftAlign - ? Math.max(0, canvasBounds.left - (dotCenterX + mBitmapOffset)) - : Math.min(0, canvasBounds.right - (dotCenterX - mBitmapOffset)); - float offsetY = Math.max(0, canvasBounds.top - (dotCenterY + mBitmapOffset)); - - // We draw the dot relative to its center. - canvas.translate(dotCenterX + offsetX, dotCenterY + offsetY); - canvas.scale(params.scale, params.scale); - - mCirclePaint.setColor(Color.BLACK); - canvas.drawBitmap(mBackgroundWithShadow, mBitmapOffset, mBitmapOffset, mCirclePaint); - mCirclePaint.setColor(params.color); - canvas.drawCircle(0, 0, mCircleRadius, mCirclePaint); - canvas.restore(); - } - - public static class DrawParams { - /** The color (possibly based on the icon) to use for the dot. */ - @ViewDebug.ExportedProperty(category = "notification dot", formatToHexString = true) - public int color; - /** The bounds of the icon that the dot is drawn on top of. */ - @ViewDebug.ExportedProperty(category = "notification dot") - public Rect iconBounds = new Rect(); - /** The progress of the animation, from 0 to 1. */ - @ViewDebug.ExportedProperty(category = "notification dot") - public float scale; - /** Whether the dot should align to the top left of the icon rather than the top right. */ - @ViewDebug.ExportedProperty(category = "notification dot") - public boolean leftAlign; - } -} diff --git a/iconloaderlib/src/com/android/launcher3/icons/FixedScaleDrawable.java b/iconloaderlib/src/com/android/launcher3/icons/FixedScaleDrawable.java deleted file mode 100644 index 516965ec2b..0000000000 --- a/iconloaderlib/src/com/android/launcher3/icons/FixedScaleDrawable.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.android.launcher3.icons; - -import android.content.res.Resources; -import android.content.res.Resources.Theme; -import android.graphics.Canvas; -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.DrawableWrapper; -import android.util.AttributeSet; - -import org.xmlpull.v1.XmlPullParser; - -/** - * Extension of {@link DrawableWrapper} which scales the child drawables by a fixed amount. - */ -public class FixedScaleDrawable extends DrawableWrapper { - - // TODO b/33553066 use the constant defined in MaskableIconDrawable - private static final float LEGACY_ICON_SCALE = .7f * .6667f; - private float mScaleX, mScaleY; - - public FixedScaleDrawable() { - super(new ColorDrawable()); - mScaleX = LEGACY_ICON_SCALE; - mScaleY = LEGACY_ICON_SCALE; - } - - @Override - public void draw(Canvas canvas) { - int saveCount = canvas.save(); - canvas.scale(mScaleX, mScaleY, - getBounds().exactCenterX(), getBounds().exactCenterY()); - super.draw(canvas); - canvas.restoreToCount(saveCount); - } - - @Override - public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs) { } - - @Override - public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme) { } - - public void setScale(float scale) { - float h = getIntrinsicHeight(); - float w = getIntrinsicWidth(); - mScaleX = scale * LEGACY_ICON_SCALE; - mScaleY = scale * LEGACY_ICON_SCALE; - if (h > w && w > 0) { - mScaleX *= w / h; - } else if (w > h && h > 0) { - mScaleY *= h / w; - } - } -} diff --git a/iconloaderlib/src/com/android/launcher3/icons/GraphicsUtils.java b/iconloaderlib/src/com/android/launcher3/icons/GraphicsUtils.java deleted file mode 100644 index 22f1f2357e..0000000000 --- a/iconloaderlib/src/com/android/launcher3/icons/GraphicsUtils.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2018 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.launcher3.icons; - -import android.graphics.Bitmap; -import android.graphics.Rect; -import android.graphics.Region; -import android.graphics.RegionIterator; -import android.util.Log; - -import androidx.annotation.ColorInt; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -public class GraphicsUtils { - - private static final String TAG = "GraphicsUtils"; - - public static Runnable sOnNewBitmapRunnable = () -> { }; - - /** - * Set the alpha component of {@code color} to be {@code alpha}. Unlike the support lib version, - * it bounds the alpha in valid range instead of throwing an exception to allow for safer - * interpolation of color animations - */ - @ColorInt - public static int setColorAlphaBound(int color, int alpha) { - if (alpha < 0) { - alpha = 0; - } else if (alpha > 255) { - alpha = 255; - } - return (color & 0x00ffffff) | (alpha << 24); - } - - /** - * Compresses the bitmap to a byte array for serialization. - */ - public static byte[] flattenBitmap(Bitmap bitmap) { - // Try go guesstimate how much space the icon will take when serialized - // to avoid unnecessary allocations/copies during the write (4 bytes per pixel). - int size = bitmap.getWidth() * bitmap.getHeight() * 4; - ByteArrayOutputStream out = new ByteArrayOutputStream(size); - try { - bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); - out.flush(); - out.close(); - return out.toByteArray(); - } catch (IOException e) { - Log.w(TAG, "Could not write bitmap"); - return null; - } - } - - public static int getArea(Region r) { - RegionIterator itr = new RegionIterator(r); - int area = 0; - Rect tempRect = new Rect(); - while (itr.next(tempRect)) { - area += tempRect.width() * tempRect.height(); - } - return area; - } - - /** - * Utility method to track new bitmap creation - */ - public static void noteNewBitmapCreated() { - sOnNewBitmapRunnable.run(); - } -} diff --git a/iconloaderlib/src/com/android/launcher3/icons/IconNormalizer.java b/iconloaderlib/src/com/android/launcher3/icons/IconNormalizer.java deleted file mode 100644 index de39e79fec..0000000000 --- a/iconloaderlib/src/com/android/launcher3/icons/IconNormalizer.java +++ /dev/null @@ -1,411 +0,0 @@ -/* - * Copyright (C) 2015 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.launcher3.icons; - -import android.annotation.TargetApi; -import android.content.Context; -import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Matrix; -import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffXfermode; -import android.graphics.Rect; -import android.graphics.RectF; -import android.graphics.Region; -import android.graphics.drawable.AdaptiveIconDrawable; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.util.Log; - -import java.nio.ByteBuffer; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -public class IconNormalizer { - - private static final String TAG = "IconNormalizer"; - private static final boolean DEBUG = false; - // Ratio of icon visible area to full icon size for a square shaped icon - private static final float MAX_SQUARE_AREA_FACTOR = 375.0f / 576; - // Ratio of icon visible area to full icon size for a circular shaped icon - private static final float MAX_CIRCLE_AREA_FACTOR = 380.0f / 576; - - private static final float CIRCLE_AREA_BY_RECT = (float) Math.PI / 4; - - // Slope used to calculate icon visible area to full icon size for any generic shaped icon. - private static final float LINEAR_SCALE_SLOPE = - (MAX_CIRCLE_AREA_FACTOR - MAX_SQUARE_AREA_FACTOR) / (1 - CIRCLE_AREA_BY_RECT); - - private static final int MIN_VISIBLE_ALPHA = 40; - - // Shape detection related constants - private static final float BOUND_RATIO_MARGIN = .05f; - private static final float PIXEL_DIFF_PERCENTAGE_THRESHOLD = 0.005f; - private static final float SCALE_NOT_INITIALIZED = 0; - - // Ratio of the diameter of an normalized circular icon to the actual icon size. - public static final float ICON_VISIBLE_AREA_FACTOR = 0.92f; - - private final int mMaxSize; - private final Bitmap mBitmap; - private final Canvas mCanvas; - private final Paint mPaintMaskShape; - private final Paint mPaintMaskShapeOutline; - private final byte[] mPixels; - - private final RectF mAdaptiveIconBounds; - private float mAdaptiveIconScale; - - private boolean mEnableShapeDetection; - - // for each y, stores the position of the leftmost x and the rightmost x - private final float[] mLeftBorder; - private final float[] mRightBorder; - private final Rect mBounds; - private final Path mShapePath; - private final Matrix mMatrix; - - /** package private **/ - IconNormalizer(Context context, int iconBitmapSize, boolean shapeDetection) { - // Use twice the icon size as maximum size to avoid scaling down twice. - mMaxSize = iconBitmapSize * 2; - mBitmap = Bitmap.createBitmap(mMaxSize, mMaxSize, Bitmap.Config.ALPHA_8); - mCanvas = new Canvas(mBitmap); - mPixels = new byte[mMaxSize * mMaxSize]; - mLeftBorder = new float[mMaxSize]; - mRightBorder = new float[mMaxSize]; - mBounds = new Rect(); - mAdaptiveIconBounds = new RectF(); - - mPaintMaskShape = new Paint(); - mPaintMaskShape.setColor(Color.RED); - mPaintMaskShape.setStyle(Paint.Style.FILL); - mPaintMaskShape.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XOR)); - - mPaintMaskShapeOutline = new Paint(); - mPaintMaskShapeOutline.setStrokeWidth( - 2 * context.getResources().getDisplayMetrics().density); - mPaintMaskShapeOutline.setStyle(Paint.Style.STROKE); - mPaintMaskShapeOutline.setColor(Color.BLACK); - mPaintMaskShapeOutline.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); - - mShapePath = new Path(); - mMatrix = new Matrix(); - mAdaptiveIconScale = SCALE_NOT_INITIALIZED; - mEnableShapeDetection = shapeDetection; - } - - private static float getScale(float hullArea, float boundingArea, float fullArea) { - float hullByRect = hullArea / boundingArea; - float scaleRequired; - if (hullByRect < CIRCLE_AREA_BY_RECT) { - scaleRequired = MAX_CIRCLE_AREA_FACTOR; - } else { - scaleRequired = MAX_SQUARE_AREA_FACTOR + LINEAR_SCALE_SLOPE * (1 - hullByRect); - } - - float areaScale = hullArea / fullArea; - // Use sqrt of the final ratio as the images is scaled across both width and height. - return areaScale > scaleRequired ? (float) Math.sqrt(scaleRequired / areaScale) : 1; - } - - /** - * @param d Should be AdaptiveIconDrawable - * @param size Canvas size to use - */ - @TargetApi(Build.VERSION_CODES.O) - public static float normalizeAdaptiveIcon(Drawable d, int size, @Nullable RectF outBounds) { - Rect tmpBounds = new Rect(d.getBounds()); - d.setBounds(0, 0, size, size); - - Path path = ((AdaptiveIconDrawable) d).getIconMask(); - Region region = new Region(); - region.setPath(path, new Region(0, 0, size, size)); - - Rect hullBounds = region.getBounds(); - int hullArea = GraphicsUtils.getArea(region); - - if (outBounds != null) { - float sizeF = size; - outBounds.set( - hullBounds.left / sizeF, - hullBounds.top / sizeF, - 1 - (hullBounds.right / sizeF), - 1 - (hullBounds.bottom / sizeF)); - } - d.setBounds(tmpBounds); - return getScale(hullArea, hullArea, size * size); - } - - /** - * Returns if the shape of the icon is same as the path. - * For this method to work, the shape path bounds should be in [0,1]x[0,1] bounds. - */ - private boolean isShape(Path maskPath) { - // Condition1: - // If width and height of the path not close to a square, then the icon shape is - // not same as the mask shape. - float iconRatio = ((float) mBounds.width()) / mBounds.height(); - if (Math.abs(iconRatio - 1) > BOUND_RATIO_MARGIN) { - if (DEBUG) { - Log.d(TAG, "Not same as mask shape because width != height. " + iconRatio); - } - return false; - } - - // Condition 2: - // Actual icon (white) and the fitted shape (e.g., circle)(red) XOR operation - // should generate transparent image, if the actual icon is equivalent to the shape. - - // Fit the shape within the icon's bounding box - mMatrix.reset(); - mMatrix.setScale(mBounds.width(), mBounds.height()); - mMatrix.postTranslate(mBounds.left, mBounds.top); - maskPath.transform(mMatrix, mShapePath); - - // XOR operation - mCanvas.drawPath(mShapePath, mPaintMaskShape); - - // DST_OUT operation around the mask path outline - mCanvas.drawPath(mShapePath, mPaintMaskShapeOutline); - - // Check if the result is almost transparent - return isTransparentBitmap(); - } - - /** - * Used to determine if certain the bitmap is transparent. - */ - private boolean isTransparentBitmap() { - ByteBuffer buffer = ByteBuffer.wrap(mPixels); - buffer.rewind(); - mBitmap.copyPixelsToBuffer(buffer); - - int y = mBounds.top; - // buffer position - int index = y * mMaxSize; - // buffer shift after every row, width of buffer = mMaxSize - int rowSizeDiff = mMaxSize - mBounds.right; - - int sum = 0; - for (; y < mBounds.bottom; y++) { - index += mBounds.left; - for (int x = mBounds.left; x < mBounds.right; x++) { - if ((mPixels[index] & 0xFF) > MIN_VISIBLE_ALPHA) { - sum++; - } - index++; - } - index += rowSizeDiff; - } - - float percentageDiffPixels = ((float) sum) / (mBounds.width() * mBounds.height()); - return percentageDiffPixels < PIXEL_DIFF_PERCENTAGE_THRESHOLD; - } - - /** - * Returns the amount by which the {@param d} should be scaled (in both dimensions) so that it - * matches the design guidelines for a launcher icon. - * - * We first calculate the convex hull of the visible portion of the icon. - * This hull then compared with the bounding rectangle of the hull to find how closely it - * resembles a circle and a square, by comparing the ratio of the areas. Note that this is not an - * ideal solution but it gives satisfactory result without affecting the performance. - * - * This closeness is used to determine the ratio of hull area to the full icon size. - * Refer {@link #MAX_CIRCLE_AREA_FACTOR} and {@link #MAX_SQUARE_AREA_FACTOR} - * - * @param outBounds optional rect to receive the fraction distance from each edge. - */ - public synchronized float getScale(@NonNull Drawable d, @Nullable RectF outBounds, - @Nullable Path path, @Nullable boolean[] outMaskShape) { - if (BaseIconFactory.ATLEAST_OREO && d instanceof AdaptiveIconDrawable) { - if (mAdaptiveIconScale == SCALE_NOT_INITIALIZED) { - mAdaptiveIconScale = normalizeAdaptiveIcon(d, mMaxSize, mAdaptiveIconBounds); - } - if (outBounds != null) { - outBounds.set(mAdaptiveIconBounds); - } - return mAdaptiveIconScale; - } - int width = d.getIntrinsicWidth(); - int height = d.getIntrinsicHeight(); - if (width <= 0 || height <= 0) { - width = width <= 0 || width > mMaxSize ? mMaxSize : width; - height = height <= 0 || height > mMaxSize ? mMaxSize : height; - } else if (width > mMaxSize || height > mMaxSize) { - int max = Math.max(width, height); - width = mMaxSize * width / max; - height = mMaxSize * height / max; - } - - mBitmap.eraseColor(Color.TRANSPARENT); - d.setBounds(0, 0, width, height); - d.draw(mCanvas); - - ByteBuffer buffer = ByteBuffer.wrap(mPixels); - buffer.rewind(); - mBitmap.copyPixelsToBuffer(buffer); - - // Overall bounds of the visible icon. - int topY = -1; - int bottomY = -1; - int leftX = mMaxSize + 1; - int rightX = -1; - - // Create border by going through all pixels one row at a time and for each row find - // the first and the last non-transparent pixel. Set those values to mLeftBorder and - // mRightBorder and use -1 if there are no visible pixel in the row. - - // buffer position - int index = 0; - // buffer shift after every row, width of buffer = mMaxSize - int rowSizeDiff = mMaxSize - width; - // first and last position for any row. - int firstX, lastX; - - for (int y = 0; y < height; y++) { - firstX = lastX = -1; - for (int x = 0; x < width; x++) { - if ((mPixels[index] & 0xFF) > MIN_VISIBLE_ALPHA) { - if (firstX == -1) { - firstX = x; - } - lastX = x; - } - index++; - } - index += rowSizeDiff; - - mLeftBorder[y] = firstX; - mRightBorder[y] = lastX; - - // If there is at least one visible pixel, update the overall bounds. - if (firstX != -1) { - bottomY = y; - if (topY == -1) { - topY = y; - } - - leftX = Math.min(leftX, firstX); - rightX = Math.max(rightX, lastX); - } - } - - if (topY == -1 || rightX == -1) { - // No valid pixels found. Do not scale. - return 1; - } - - convertToConvexArray(mLeftBorder, 1, topY, bottomY); - convertToConvexArray(mRightBorder, -1, topY, bottomY); - - // Area of the convex hull - float area = 0; - for (int y = 0; y < height; y++) { - if (mLeftBorder[y] <= -1) { - continue; - } - area += mRightBorder[y] - mLeftBorder[y] + 1; - } - - mBounds.left = leftX; - mBounds.right = rightX; - - mBounds.top = topY; - mBounds.bottom = bottomY; - - if (outBounds != null) { - outBounds.set(((float) mBounds.left) / width, ((float) mBounds.top) / height, - 1 - ((float) mBounds.right) / width, - 1 - ((float) mBounds.bottom) / height); - } - if (outMaskShape != null && mEnableShapeDetection && outMaskShape.length > 0) { - outMaskShape[0] = isShape(path); - } - // Area of the rectangle required to fit the convex hull - float rectArea = (bottomY + 1 - topY) * (rightX + 1 - leftX); - return getScale(area, rectArea, width * height); - } - - /** - * Modifies {@param xCoordinates} to represent a convex border. Fills in all missing values - * (except on either ends) with appropriate values. - * @param xCoordinates map of x coordinate per y. - * @param direction 1 for left border and -1 for right border. - * @param topY the first Y position (inclusive) with a valid value. - * @param bottomY the last Y position (inclusive) with a valid value. - */ - private static void convertToConvexArray( - float[] xCoordinates, int direction, int topY, int bottomY) { - int total = xCoordinates.length; - // The tangent at each pixel. - float[] angles = new float[total - 1]; - - int first = topY; // First valid y coordinate - int last = -1; // Last valid y coordinate which didn't have a missing value - - float lastAngle = Float.MAX_VALUE; - - for (int i = topY + 1; i <= bottomY; i++) { - if (xCoordinates[i] <= -1) { - continue; - } - int start; - - if (lastAngle == Float.MAX_VALUE) { - start = first; - } else { - float currentAngle = (xCoordinates[i] - xCoordinates[last]) / (i - last); - start = last; - // If this position creates a concave angle, keep moving up until we find a - // position which creates a convex angle. - if ((currentAngle - lastAngle) * direction < 0) { - while (start > first) { - start --; - currentAngle = (xCoordinates[i] - xCoordinates[start]) / (i - start); - if ((currentAngle - angles[start]) * direction >= 0) { - break; - } - } - } - } - - // Reset from last check - lastAngle = (xCoordinates[i] - xCoordinates[start]) / (i - start); - // Update all the points from start. - for (int j = start; j < i; j++) { - angles[j] = lastAngle; - xCoordinates[j] = xCoordinates[start] + lastAngle * (j - start); - } - last = i; - } - } - - /** - * @return The diameter of the normalized circle that fits inside of the square (size x size). - */ - public static int getNormalizedCircleSize(int size) { - float area = size * size * MAX_CIRCLE_AREA_FACTOR; - return (int) Math.round(Math.sqrt((4 * area) / Math.PI)); - } -} diff --git a/iconloaderlib/src/com/android/launcher3/icons/ShadowGenerator.java b/iconloaderlib/src/com/android/launcher3/icons/ShadowGenerator.java deleted file mode 100644 index 770272728d..0000000000 --- a/iconloaderlib/src/com/android/launcher3/icons/ShadowGenerator.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (C) 2016 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.launcher3.icons; - -import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound; - -import android.graphics.Bitmap; -import android.graphics.BlurMaskFilter; -import android.graphics.BlurMaskFilter.Blur; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffXfermode; -import android.graphics.RectF; - -/** - * Utility class to add shadows to bitmaps. - */ -public class ShadowGenerator { - public static final float BLUR_FACTOR = 0.5f/48; - - // Percent of actual icon size - public static final float KEY_SHADOW_DISTANCE = 1f/48; - private static final int KEY_SHADOW_ALPHA = 61; - // Percent of actual icon size - private static final float HALF_DISTANCE = 0.5f; - private static final int AMBIENT_SHADOW_ALPHA = 30; - - private final int mIconSize; - - private final Paint mBlurPaint; - private final Paint mDrawPaint; - private final BlurMaskFilter mDefaultBlurMaskFilter; - - public ShadowGenerator(int iconSize) { - mIconSize = iconSize; - mBlurPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); - mDrawPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); - mDefaultBlurMaskFilter = new BlurMaskFilter(mIconSize * BLUR_FACTOR, Blur.NORMAL); - } - - public synchronized void recreateIcon(Bitmap icon, Canvas out) { - recreateIcon(icon, mDefaultBlurMaskFilter, AMBIENT_SHADOW_ALPHA, KEY_SHADOW_ALPHA, out); - } - - public synchronized void recreateIcon(Bitmap icon, BlurMaskFilter blurMaskFilter, - int ambientAlpha, int keyAlpha, Canvas out) { - int[] offset = new int[2]; - mBlurPaint.setMaskFilter(blurMaskFilter); - Bitmap shadow = icon.extractAlpha(mBlurPaint, offset); - - // Draw ambient shadow - mDrawPaint.setAlpha(ambientAlpha); - out.drawBitmap(shadow, offset[0], offset[1], mDrawPaint); - - // Draw key shadow - mDrawPaint.setAlpha(keyAlpha); - out.drawBitmap(shadow, offset[0], offset[1] + KEY_SHADOW_DISTANCE * mIconSize, mDrawPaint); - - // Draw the icon - mDrawPaint.setAlpha(255); - out.drawBitmap(icon, 0, 0, mDrawPaint); - } - - /** - * Returns the minimum amount by which an icon with {@param bounds} should be scaled - * so that the shadows do not get clipped. - */ - public static float getScaleForBounds(RectF bounds) { - float scale = 1; - - // For top, left & right, we need same space. - float minSide = Math.min(Math.min(bounds.left, bounds.right), bounds.top); - if (minSide < BLUR_FACTOR) { - scale = (HALF_DISTANCE - BLUR_FACTOR) / (HALF_DISTANCE - minSide); - } - - float bottomSpace = BLUR_FACTOR + KEY_SHADOW_DISTANCE; - if (bounds.bottom < bottomSpace) { - scale = Math.min(scale, (HALF_DISTANCE - bottomSpace) / (HALF_DISTANCE - bounds.bottom)); - } - return scale; - } - - public static class Builder { - - public final RectF bounds = new RectF(); - public final int color; - - public int ambientShadowAlpha = AMBIENT_SHADOW_ALPHA; - - public float shadowBlur; - - public float keyShadowDistance; - public int keyShadowAlpha = KEY_SHADOW_ALPHA; - public float radius; - - public Builder(int color) { - this.color = color; - } - - public Builder setupBlurForSize(int height) { - shadowBlur = height * 1f / 24; - keyShadowDistance = height * 1f / 16; - return this; - } - - public Bitmap createPill(int width, int height) { - return createPill(width, height, height / 2f); - } - - public Bitmap createPill(int width, int height, float r) { - radius = r; - - int centerX = Math.round(width / 2f + shadowBlur); - int centerY = Math.round(radius + shadowBlur + keyShadowDistance); - int center = Math.max(centerX, centerY); - bounds.set(0, 0, width, height); - bounds.offsetTo(center - width / 2f, center - height / 2f); - - int size = center * 2; - return BitmapRenderer.createHardwareBitmap(size, size, this::drawShadow); - } - - public void drawShadow(Canvas c) { - Paint p = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); - p.setColor(color); - - // Key shadow - p.setShadowLayer(shadowBlur, 0, keyShadowDistance, - setColorAlphaBound(Color.BLACK, keyShadowAlpha)); - c.drawRoundRect(bounds, radius, radius, p); - - // Ambient shadow - p.setShadowLayer(shadowBlur, 0, 0, - setColorAlphaBound(Color.BLACK, ambientShadowAlpha)); - c.drawRoundRect(bounds, radius, radius, p); - - if (Color.alpha(color) < 255) { - // Clear any content inside the pill-rect for translucent fill. - p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); - p.clearShadowLayer(); - p.setColor(Color.BLACK); - c.drawRoundRect(bounds, radius, radius, p); - - p.setXfermode(null); - p.setColor(color); - c.drawRoundRect(bounds, radius, radius, p); - } - } - } -} diff --git a/iconloaderlib/src/com/android/launcher3/icons/cache/BaseIconCache.java b/iconloaderlib/src/com/android/launcher3/icons/cache/BaseIconCache.java deleted file mode 100644 index 4c634cbc26..0000000000 --- a/iconloaderlib/src/com/android/launcher3/icons/cache/BaseIconCache.java +++ /dev/null @@ -1,582 +0,0 @@ -/* - * Copyright (C) 2018 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.launcher3.icons.cache; - -import static com.android.launcher3.icons.BaseIconFactory.getFullResDefaultActivityIcon; -import static com.android.launcher3.icons.BitmapInfo.LOW_RES_ICON; -import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound; - -import android.content.ComponentName; -import android.content.ContentValues; -import android.content.Context; -import android.content.pm.ActivityInfo; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Resources; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteException; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.os.Handler; -import android.os.LocaleList; -import android.os.Looper; -import android.os.Process; -import android.os.UserHandle; -import android.text.TextUtils; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; - -import com.android.launcher3.icons.BaseIconFactory; -import com.android.launcher3.icons.BitmapInfo; -import com.android.launcher3.icons.BitmapRenderer; -import com.android.launcher3.icons.GraphicsUtils; -import com.android.launcher3.util.ComponentKey; -import com.android.launcher3.util.SQLiteCacheHelper; - -import java.util.AbstractMap; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.function.Supplier; - -public abstract class BaseIconCache { - - private static final String TAG = "BaseIconCache"; - private static final boolean DEBUG = false; - - private static final int INITIAL_ICON_CACHE_CAPACITY = 50; - - // Empty class name is used for storing package default entry. - public static final String EMPTY_CLASS_NAME = "."; - - public static class CacheEntry { - - @NonNull - public BitmapInfo bitmap = BitmapInfo.LOW_RES_INFO; - public CharSequence title = ""; - public CharSequence contentDescription = ""; - } - - private final HashMap mDefaultIcons = new HashMap<>(); - - protected final Context mContext; - protected final PackageManager mPackageManager; - - private final Map mCache; - protected final Handler mWorkerHandler; - - protected int mIconDpi; - protected IconDB mIconDb; - protected LocaleList mLocaleList = LocaleList.getEmptyLocaleList(); - protected String mSystemState = ""; - - private final String mDbFileName; - private final BitmapFactory.Options mDecodeOptions; - private final Looper mBgLooper; - - public BaseIconCache(Context context, String dbFileName, Looper bgLooper, - int iconDpi, int iconPixelSize, boolean inMemoryCache) { - mContext = context; - mDbFileName = dbFileName; - mPackageManager = context.getPackageManager(); - mBgLooper = bgLooper; - mWorkerHandler = new Handler(mBgLooper); - - if (inMemoryCache) { - mCache = new HashMap<>(INITIAL_ICON_CACHE_CAPACITY); - } else { - // Use a dummy cache - mCache = new AbstractMap() { - @Override - public Set> entrySet() { - return Collections.emptySet(); - } - - @Override - public CacheEntry put(ComponentKey key, CacheEntry value) { - return value; - } - }; - } - - if (BitmapRenderer.USE_HARDWARE_BITMAP && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - mDecodeOptions = new BitmapFactory.Options(); - mDecodeOptions.inPreferredConfig = Bitmap.Config.HARDWARE; - } else { - mDecodeOptions = null; - } - - updateSystemState(); - mIconDpi = iconDpi; - mIconDb = new IconDB(context, dbFileName, iconPixelSize); - } - - /** - * Returns the persistable serial number for {@param user}. Subclass should implement proper - * caching strategy to avoid making binder call every time. - */ - protected abstract long getSerialNumberForUser(UserHandle user); - - /** - * Return true if the given app is an instant app and should be badged appropriately. - */ - protected abstract boolean isInstantApp(ApplicationInfo info); - - /** - * Opens and returns an icon factory. The factory is recycled by the caller. - */ - protected abstract BaseIconFactory getIconFactory(); - - public void updateIconParams(int iconDpi, int iconPixelSize) { - mWorkerHandler.post(() -> updateIconParamsBg(iconDpi, iconPixelSize)); - } - - private synchronized void updateIconParamsBg(int iconDpi, int iconPixelSize) { - mIconDpi = iconDpi; - mDefaultIcons.clear(); - mIconDb.clear(); - mIconDb.close(); - mIconDb = new IconDB(mContext, mDbFileName, iconPixelSize); - mCache.clear(); - } - - private Drawable getFullResIcon(Resources resources, int iconId) { - if (resources != null && iconId != 0) { - try { - return resources.getDrawableForDensity(iconId, mIconDpi); - } catch (Resources.NotFoundException e) { } - } - return getFullResDefaultActivityIcon(mIconDpi); - } - - public Drawable getFullResIcon(String packageName, int iconId) { - try { - return getFullResIcon(mPackageManager.getResourcesForApplication(packageName), iconId); - } catch (PackageManager.NameNotFoundException e) { } - return getFullResDefaultActivityIcon(mIconDpi); - } - - public Drawable getFullResIcon(ActivityInfo info) { - try { - return getFullResIcon(mPackageManager.getResourcesForApplication(info.applicationInfo), - info.getIconResource()); - } catch (PackageManager.NameNotFoundException e) { } - return getFullResDefaultActivityIcon(mIconDpi); - } - - private BitmapInfo makeDefaultIcon(UserHandle user) { - try (BaseIconFactory li = getIconFactory()) { - return li.makeDefaultIcon(user); - } - } - - /** - * Remove any records for the supplied ComponentName. - */ - public synchronized void remove(ComponentName componentName, UserHandle user) { - mCache.remove(new ComponentKey(componentName, user)); - } - - /** - * Remove any records for the supplied package name from memory. - */ - private void removeFromMemCacheLocked(String packageName, UserHandle user) { - HashSet forDeletion = new HashSet<>(); - for (ComponentKey key: mCache.keySet()) { - if (key.componentName.getPackageName().equals(packageName) - && key.user.equals(user)) { - forDeletion.add(key); - } - } - for (ComponentKey condemned: forDeletion) { - mCache.remove(condemned); - } - } - - /** - * Removes the entries related to the given package in memory and persistent DB. - */ - public synchronized void removeIconsForPkg(String packageName, UserHandle user) { - removeFromMemCacheLocked(packageName, user); - long userSerial = getSerialNumberForUser(user); - mIconDb.delete( - IconDB.COLUMN_COMPONENT + " LIKE ? AND " + IconDB.COLUMN_USER + " = ?", - new String[]{packageName + "/%", Long.toString(userSerial)}); - } - - public IconCacheUpdateHandler getUpdateHandler() { - updateSystemState(); - return new IconCacheUpdateHandler(this); - } - - /** - * Refreshes the system state definition used to check the validity of the cache. It - * incorporates all the properties that can affect the cache like the list of enabled locale - * and system-version. - */ - private void updateSystemState() { - mLocaleList = mContext.getResources().getConfiguration().getLocales(); - mSystemState = mLocaleList.toLanguageTags() + "," + Build.VERSION.SDK_INT; - } - - protected String getIconSystemState(String packageName) { - return mSystemState; - } - - /** - * Adds an entry into the DB and the in-memory cache. - * @param replaceExisting if true, it will recreate the bitmap even if it already exists in - * the memory. This is useful then the previous bitmap was created using - * old data. - */ - @VisibleForTesting - public synchronized void addIconToDBAndMemCache(T object, CachingLogic cachingLogic, - PackageInfo info, long userSerial, boolean replaceExisting) { - UserHandle user = cachingLogic.getUser(object); - ComponentName componentName = cachingLogic.getComponent(object); - - final ComponentKey key = new ComponentKey(componentName, user); - CacheEntry entry = null; - if (!replaceExisting) { - entry = mCache.get(key); - // We can't reuse the entry if the high-res icon is not present. - if (entry == null || entry.bitmap.isNullOrLowRes()) { - entry = null; - } - } - if (entry == null) { - entry = new CacheEntry(); - entry.bitmap = cachingLogic.loadIcon(mContext, object); - } - // Icon can't be loaded from cachingLogic, which implies alternative icon was loaded - // (e.g. fallback icon, default icon). So we drop here since there's no point in caching - // an empty entry. - if (entry.bitmap.isNullOrLowRes()) return; - entry.title = cachingLogic.getLabel(object); - entry.contentDescription = mPackageManager.getUserBadgedLabel(entry.title, user); - if (cachingLogic.addToMemCache()) mCache.put(key, entry); - - ContentValues values = newContentValues(entry.bitmap, entry.title.toString(), - componentName.getPackageName(), cachingLogic.getKeywords(object, mLocaleList)); - addIconToDB(values, componentName, info, userSerial, - cachingLogic.getLastUpdatedTime(object, info)); - } - - /** - * Updates {@param values} to contain versioning information and adds it to the DB. - * @param values {@link ContentValues} containing icon & title - */ - private void addIconToDB(ContentValues values, ComponentName key, - PackageInfo info, long userSerial, long lastUpdateTime) { - values.put(IconDB.COLUMN_COMPONENT, key.flattenToString()); - values.put(IconDB.COLUMN_USER, userSerial); - values.put(IconDB.COLUMN_LAST_UPDATED, lastUpdateTime); - values.put(IconDB.COLUMN_VERSION, info.versionCode); - mIconDb.insertOrReplace(values); - } - - public synchronized BitmapInfo getDefaultIcon(UserHandle user) { - if (!mDefaultIcons.containsKey(user)) { - mDefaultIcons.put(user, makeDefaultIcon(user)); - } - return mDefaultIcons.get(user); - } - - public boolean isDefaultIcon(BitmapInfo icon, UserHandle user) { - return getDefaultIcon(user).icon == icon.icon; - } - - /** - * Retrieves the entry from the cache. If the entry is not present, it creates a new entry. - * This method is not thread safe, it must be called from a synchronized method. - */ - protected CacheEntry cacheLocked( - @NonNull ComponentName componentName, @NonNull UserHandle user, - @NonNull Supplier infoProvider, @NonNull CachingLogic cachingLogic, - boolean usePackageIcon, boolean useLowResIcon) { - assertWorkerThread(); - ComponentKey cacheKey = new ComponentKey(componentName, user); - CacheEntry entry = mCache.get(cacheKey); - if (entry == null || (entry.bitmap.isLowRes() && !useLowResIcon)) { - entry = new CacheEntry(); - if (cachingLogic.addToMemCache()) { - mCache.put(cacheKey, entry); - } - - // Check the DB first. - T object = null; - boolean providerFetchedOnce = false; - - if (!getEntryFromDB(cacheKey, entry, useLowResIcon)) { - object = infoProvider.get(); - providerFetchedOnce = true; - - if (object != null) { - entry.bitmap = cachingLogic.loadIcon(mContext, object); - } else { - if (usePackageIcon) { - CacheEntry packageEntry = getEntryForPackageLocked( - componentName.getPackageName(), user, false); - if (packageEntry != null) { - if (DEBUG) Log.d(TAG, "using package default icon for " + - componentName.toShortString()); - entry.bitmap = packageEntry.bitmap; - entry.title = packageEntry.title; - entry.contentDescription = packageEntry.contentDescription; - } - } - if (entry.bitmap == null) { - if (DEBUG) Log.d(TAG, "using default icon for " + - componentName.toShortString()); - entry.bitmap = getDefaultIcon(user); - } - } - } - - if (TextUtils.isEmpty(entry.title)) { - if (object == null && !providerFetchedOnce) { - object = infoProvider.get(); - providerFetchedOnce = true; - } - if (object != null) { - entry.title = cachingLogic.getLabel(object); - entry.contentDescription = mPackageManager.getUserBadgedLabel( - cachingLogic.getDescription(object, entry.title), user); - } - } - } - return entry; - } - - public synchronized void clear() { - assertWorkerThread(); - mIconDb.clear(); - } - - /** - * Adds a default package entry in the cache. This entry is not persisted and will be removed - * when the cache is flushed. - */ - protected synchronized void cachePackageInstallInfo(String packageName, UserHandle user, - Bitmap icon, CharSequence title) { - removeFromMemCacheLocked(packageName, user); - - ComponentKey cacheKey = getPackageKey(packageName, user); - CacheEntry entry = mCache.get(cacheKey); - - // For icon caching, do not go through DB. Just update the in-memory entry. - if (entry == null) { - entry = new CacheEntry(); - } - if (!TextUtils.isEmpty(title)) { - entry.title = title; - } - if (icon != null) { - BaseIconFactory li = getIconFactory(); - entry.bitmap = li.createIconBitmap(icon); - li.close(); - } - if (!TextUtils.isEmpty(title) && entry.bitmap.icon != null) { - mCache.put(cacheKey, entry); - } - } - - private static ComponentKey getPackageKey(String packageName, UserHandle user) { - ComponentName cn = new ComponentName(packageName, packageName + EMPTY_CLASS_NAME); - return new ComponentKey(cn, user); - } - - /** - * Gets an entry for the package, which can be used as a fallback entry for various components. - * This method is not thread safe, it must be called from a synchronized method. - */ - protected CacheEntry getEntryForPackageLocked(String packageName, UserHandle user, - boolean useLowResIcon) { - assertWorkerThread(); - ComponentKey cacheKey = getPackageKey(packageName, user); - CacheEntry entry = mCache.get(cacheKey); - - if (entry == null || (entry.bitmap.isLowRes() && !useLowResIcon)) { - entry = new CacheEntry(); - boolean entryUpdated = true; - - // Check the DB first. - if (!getEntryFromDB(cacheKey, entry, useLowResIcon)) { - try { - int flags = Process.myUserHandle().equals(user) ? 0 : - PackageManager.GET_UNINSTALLED_PACKAGES; - PackageInfo info = mPackageManager.getPackageInfo(packageName, flags); - ApplicationInfo appInfo = info.applicationInfo; - if (appInfo == null) { - throw new NameNotFoundException("ApplicationInfo is null"); - } - - BaseIconFactory li = getIconFactory(); - // Load the full res icon for the application, but if useLowResIcon is set, then - // only keep the low resolution icon instead of the larger full-sized icon - BitmapInfo iconInfo = li.createBadgedIconBitmap( - appInfo.loadIcon(mPackageManager), user, appInfo.targetSdkVersion, - isInstantApp(appInfo)); - li.close(); - - entry.title = appInfo.loadLabel(mPackageManager); - entry.contentDescription = mPackageManager.getUserBadgedLabel(entry.title, user); - entry.bitmap = BitmapInfo.of( - useLowResIcon ? LOW_RES_ICON : iconInfo.icon, iconInfo.color); - - // Add the icon in the DB here, since these do not get written during - // package updates. - ContentValues values = newContentValues( - iconInfo, entry.title.toString(), packageName, null); - addIconToDB(values, cacheKey.componentName, info, getSerialNumberForUser(user), - info.lastUpdateTime); - - } catch (NameNotFoundException e) { - if (DEBUG) Log.d(TAG, "Application not installed " + packageName); - entryUpdated = false; - } - } - - // Only add a filled-out entry to the cache - if (entryUpdated) { - mCache.put(cacheKey, entry); - } - } - return entry; - } - - protected boolean getEntryFromDB(ComponentKey cacheKey, CacheEntry entry, boolean lowRes) { - Cursor c = null; - try { - c = mIconDb.query( - lowRes ? IconDB.COLUMNS_LOW_RES : IconDB.COLUMNS_HIGH_RES, - IconDB.COLUMN_COMPONENT + " = ? AND " + IconDB.COLUMN_USER + " = ?", - new String[]{ - cacheKey.componentName.flattenToString(), - Long.toString(getSerialNumberForUser(cacheKey.user))}); - if (c.moveToNext()) { - // Set the alpha to be 255, so that we never have a wrong color - entry.bitmap = BitmapInfo.of(LOW_RES_ICON, setColorAlphaBound(c.getInt(0), 255)); - entry.title = c.getString(1); - if (entry.title == null) { - entry.title = ""; - entry.contentDescription = ""; - } else { - entry.contentDescription = mPackageManager.getUserBadgedLabel( - entry.title, cacheKey.user); - } - - if (!lowRes) { - byte[] data = c.getBlob(2); - try { - entry.bitmap = BitmapInfo.of( - BitmapFactory.decodeByteArray(data, 0, data.length, mDecodeOptions), - entry.bitmap.color); - } catch (Exception e) { } - } - return true; - } - } catch (SQLiteException e) { - Log.d(TAG, "Error reading icon cache", e); - } finally { - if (c != null) { - c.close(); - } - } - return false; - } - - /** - * Returns a cursor for an arbitrary query to the cache db - */ - public synchronized Cursor queryCacheDb(String[] columns, String selection, - String[] selectionArgs) { - return mIconDb.query(columns, selection, selectionArgs); - } - - /** - * Cache class to store the actual entries on disk - */ - public static final class IconDB extends SQLiteCacheHelper { - private static final int RELEASE_VERSION = 27; - - public static final String TABLE_NAME = "icons"; - public static final String COLUMN_ROWID = "rowid"; - public static final String COLUMN_COMPONENT = "componentName"; - public static final String COLUMN_USER = "profileId"; - public static final String COLUMN_LAST_UPDATED = "lastUpdated"; - public static final String COLUMN_VERSION = "version"; - public static final String COLUMN_ICON = "icon"; - public static final String COLUMN_ICON_COLOR = "icon_color"; - public static final String COLUMN_LABEL = "label"; - public static final String COLUMN_SYSTEM_STATE = "system_state"; - public static final String COLUMN_KEYWORDS = "keywords"; - - public static final String[] COLUMNS_HIGH_RES = new String[] { - IconDB.COLUMN_ICON_COLOR, IconDB.COLUMN_LABEL, IconDB.COLUMN_ICON }; - public static final String[] COLUMNS_LOW_RES = new String[] { - IconDB.COLUMN_ICON_COLOR, IconDB.COLUMN_LABEL }; - - public IconDB(Context context, String dbFileName, int iconPixelSize) { - super(context, dbFileName, (RELEASE_VERSION << 16) + iconPixelSize, TABLE_NAME); - } - - @Override - protected void onCreateTable(SQLiteDatabase db) { - db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" - + COLUMN_COMPONENT + " TEXT NOT NULL, " - + COLUMN_USER + " INTEGER NOT NULL, " - + COLUMN_LAST_UPDATED + " INTEGER NOT NULL DEFAULT 0, " - + COLUMN_VERSION + " INTEGER NOT NULL DEFAULT 0, " - + COLUMN_ICON + " BLOB, " - + COLUMN_ICON_COLOR + " INTEGER NOT NULL DEFAULT 0, " - + COLUMN_LABEL + " TEXT, " - + COLUMN_SYSTEM_STATE + " TEXT, " - + COLUMN_KEYWORDS + " TEXT, " - + "PRIMARY KEY (" + COLUMN_COMPONENT + ", " + COLUMN_USER + ") " - + ");"); - } - } - - private ContentValues newContentValues(BitmapInfo bitmapInfo, String label, - String packageName, @Nullable String keywords) { - ContentValues values = new ContentValues(); - values.put(IconDB.COLUMN_ICON, - bitmapInfo.isLowRes() ? null : GraphicsUtils.flattenBitmap(bitmapInfo.icon)); - values.put(IconDB.COLUMN_ICON_COLOR, bitmapInfo.color); - - values.put(IconDB.COLUMN_LABEL, label); - values.put(IconDB.COLUMN_SYSTEM_STATE, getIconSystemState(packageName)); - values.put(IconDB.COLUMN_KEYWORDS, keywords); - return values; - } - - private void assertWorkerThread() { - if (Looper.myLooper() != mBgLooper) { - throw new IllegalStateException("Cache accessed on wrong thread " + Looper.myLooper()); - } - } -} diff --git a/iconloaderlib/src/com/android/launcher3/icons/cache/CachingLogic.java b/iconloaderlib/src/com/android/launcher3/icons/cache/CachingLogic.java deleted file mode 100644 index c12e9dcc15..0000000000 --- a/iconloaderlib/src/com/android/launcher3/icons/cache/CachingLogic.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2018 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.launcher3.icons.cache; - -import android.content.ComponentName; -import android.content.Context; -import android.content.pm.PackageInfo; -import android.os.LocaleList; -import android.os.UserHandle; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.android.launcher3.icons.BitmapInfo; - -public interface CachingLogic { - - ComponentName getComponent(T object); - - UserHandle getUser(T object); - - CharSequence getLabel(T object); - - default CharSequence getDescription(T object, CharSequence fallback) { - return fallback; - } - - @NonNull - BitmapInfo loadIcon(Context context, T object); - - /** - * Provides a option list of keywords to associate with this object - */ - @Nullable - default String getKeywords(T object, LocaleList localeList) { - return null; - } - - /** - * Returns the timestamp the entry was last updated in cache. - */ - default long getLastUpdatedTime(T object, PackageInfo info) { - return info.lastUpdateTime; - } - - /** - * Returns true the object should be added to mem cache; otherwise returns false. - */ - default boolean addToMemCache() { - return true; - } -} diff --git a/iconloaderlib/src/com/android/launcher3/icons/cache/HandlerRunnable.java b/iconloaderlib/src/com/android/launcher3/icons/cache/HandlerRunnable.java deleted file mode 100644 index ee52934543..0000000000 --- a/iconloaderlib/src/com/android/launcher3/icons/cache/HandlerRunnable.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2018 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.launcher3.icons.cache; - -import android.os.Handler; - -/** - * A runnable that can be posted to a {@link Handler} which can be canceled. - */ -public abstract class HandlerRunnable implements Runnable { - - private final Handler mHandler; - private final Runnable mEndRunnable; - - private boolean mEnded = false; - private boolean mCanceled = false; - - public HandlerRunnable(Handler handler, Runnable endRunnable) { - mHandler = handler; - mEndRunnable = endRunnable; - } - - /** - * Cancels this runnable from being run, only if it has not already run. - */ - public void cancel() { - mHandler.removeCallbacks(this); - // TODO: This can actually cause onEnd to be called twice if the handler is already running - // this runnable - // NOTE: This is currently run on whichever thread the caller is run on. - mCanceled = true; - onEnd(); - } - - /** - * @return whether this runnable was canceled. - */ - protected boolean isCanceled() { - return mCanceled; - } - - /** - * To be called by the implemention of this runnable. The end callback is done on whichever - * thread the caller is calling from. - */ - public void onEnd() { - if (!mEnded) { - mEnded = true; - if (mEndRunnable != null) { - mEndRunnable.run(); - } - } - } -} diff --git a/iconloaderlib/src/com/android/launcher3/icons/cache/IconCacheUpdateHandler.java b/iconloaderlib/src/com/android/launcher3/icons/cache/IconCacheUpdateHandler.java index aec1cddce4..7b8070a6e1 100644 --- a/iconloaderlib/src/com/android/launcher3/icons/cache/IconCacheUpdateHandler.java +++ b/iconloaderlib/src/com/android/launcher3/icons/cache/IconCacheUpdateHandler.java @@ -1,3 +1,4 @@ +<<<<<<< HEAD (cc6caf Merge "Let launcher to provide its own OverscrollPlugin" int) /* * Copyright (C) 2018 The Android Open Source Project * @@ -312,3 +313,5 @@ public class IconCacheUpdateHandler { void onPackageIconsUpdated(HashSet updatedPackages, UserHandle user); } } +======= +>>>>>>> CHANGE (805b52 Removes iconloaderlib from Launcher3.) diff --git a/iconloaderlib/src/com/android/launcher3/util/ComponentKey.java b/iconloaderlib/src/com/android/launcher3/util/ComponentKey.java deleted file mode 100644 index 34bed94270..0000000000 --- a/iconloaderlib/src/com/android/launcher3/util/ComponentKey.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.android.launcher3.util; - -/** - * Copyright (C) 2015 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. - */ - -import android.content.ComponentName; -import android.os.UserHandle; - -import java.util.Arrays; - -public class ComponentKey { - - public final ComponentName componentName; - public final UserHandle user; - - private final int mHashCode; - - public ComponentKey(ComponentName componentName, UserHandle user) { - if (componentName == null || user == null) { - throw new NullPointerException(); - } - this.componentName = componentName; - this.user = user; - mHashCode = Arrays.hashCode(new Object[] {componentName, user}); - - } - - @Override - public int hashCode() { - return mHashCode; - } - - @Override - public boolean equals(Object o) { - ComponentKey other = (ComponentKey) o; - return other.componentName.equals(componentName) && other.user.equals(user); - } - - /** - * Encodes a component key as a string of the form [flattenedComponentString#userId]. - */ - @Override - public String toString() { - return componentName.flattenToString() + "#" + user; - } -} \ No newline at end of file diff --git a/iconloaderlib/src/com/android/launcher3/util/NoLocaleSQLiteHelper.java b/iconloaderlib/src/com/android/launcher3/util/NoLocaleSQLiteHelper.java deleted file mode 100644 index fe864a2847..0000000000 --- a/iconloaderlib/src/com/android/launcher3/util/NoLocaleSQLiteHelper.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2018 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.launcher3.util; - -import static android.database.sqlite.SQLiteDatabase.NO_LOCALIZED_COLLATORS; - -import android.content.Context; -import android.content.ContextWrapper; -import android.database.DatabaseErrorHandler; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.database.sqlite.SQLiteDatabase.OpenParams; -import android.database.sqlite.SQLiteOpenHelper; -import android.os.Build; - -/** - * Extension of {@link SQLiteOpenHelper} which avoids creating default locale table by - * A context wrapper which creates databases without support for localized collators. - */ -public abstract class NoLocaleSQLiteHelper extends SQLiteOpenHelper { - - private static final boolean ATLEAST_P = - Build.VERSION.SDK_INT >= Build.VERSION_CODES.P; - - public NoLocaleSQLiteHelper(Context context, String name, int version) { - super(ATLEAST_P ? context : new NoLocalContext(context), name, null, version); - if (ATLEAST_P) { - setOpenParams(new OpenParams.Builder().addOpenFlags(NO_LOCALIZED_COLLATORS).build()); - } - } - - private static class NoLocalContext extends ContextWrapper { - public NoLocalContext(Context base) { - super(base); - } - - @Override - public SQLiteDatabase openOrCreateDatabase( - String name, int mode, CursorFactory factory, DatabaseErrorHandler errorHandler) { - return super.openOrCreateDatabase( - name, mode | Context.MODE_NO_LOCALIZED_COLLATORS, factory, errorHandler); - } - } -} diff --git a/iconloaderlib/src/com/android/launcher3/util/SQLiteCacheHelper.java b/iconloaderlib/src/com/android/launcher3/util/SQLiteCacheHelper.java deleted file mode 100644 index 49de4bd1bf..0000000000 --- a/iconloaderlib/src/com/android/launcher3/util/SQLiteCacheHelper.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.android.launcher3.util; - -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteException; -import android.database.sqlite.SQLiteFullException; -import android.database.sqlite.SQLiteOpenHelper; -import android.util.Log; - -/** - * An extension of {@link SQLiteOpenHelper} with utility methods for a single table cache DB. - * Any exception during write operations are ignored, and any version change causes a DB reset. - */ -public abstract class SQLiteCacheHelper { - private static final String TAG = "SQLiteCacheHelper"; - - private static final boolean IN_MEMORY_CACHE = false; - - private final String mTableName; - private final MySQLiteOpenHelper mOpenHelper; - - private boolean mIgnoreWrites; - - public SQLiteCacheHelper(Context context, String name, int version, String tableName) { - if (IN_MEMORY_CACHE) { - name = null; - } - mTableName = tableName; - mOpenHelper = new MySQLiteOpenHelper(context, name, version); - - mIgnoreWrites = false; - } - - /** - * @see SQLiteDatabase#delete(String, String, String[]) - */ - public void delete(String whereClause, String[] whereArgs) { - if (mIgnoreWrites) { - return; - } - try { - mOpenHelper.getWritableDatabase().delete(mTableName, whereClause, whereArgs); - } catch (SQLiteFullException e) { - onDiskFull(e); - } catch (SQLiteException e) { - Log.d(TAG, "Ignoring sqlite exception", e); - } - } - - /** - * @see SQLiteDatabase#insertWithOnConflict(String, String, ContentValues, int) - */ - public void insertOrReplace(ContentValues values) { - if (mIgnoreWrites) { - return; - } - try { - mOpenHelper.getWritableDatabase().insertWithOnConflict( - mTableName, null, values, SQLiteDatabase.CONFLICT_REPLACE); - } catch (SQLiteFullException e) { - onDiskFull(e); - } catch (SQLiteException e) { - Log.d(TAG, "Ignoring sqlite exception", e); - } - } - - private void onDiskFull(SQLiteFullException e) { - Log.e(TAG, "Disk full, all write operations will be ignored", e); - mIgnoreWrites = true; - } - - /** - * @see SQLiteDatabase#query(String, String[], String, String[], String, String, String) - */ - public Cursor query(String[] columns, String selection, String[] selectionArgs) { - return mOpenHelper.getReadableDatabase().query( - mTableName, columns, selection, selectionArgs, null, null, null); - } - - public void clear() { - mOpenHelper.clearDB(mOpenHelper.getWritableDatabase()); - } - - public void close() { - mOpenHelper.close(); - } - - protected abstract void onCreateTable(SQLiteDatabase db); - - /** - * A private inner class to prevent direct DB access. - */ - private class MySQLiteOpenHelper extends NoLocaleSQLiteHelper { - - public MySQLiteOpenHelper(Context context, String name, int version) { - super(context, name, version); - } - - @Override - public void onCreate(SQLiteDatabase db) { - onCreateTable(db); - } - - @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - if (oldVersion != newVersion) { - clearDB(db); - } - } - - @Override - public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { - if (oldVersion != newVersion) { - clearDB(db); - } - } - - private void clearDB(SQLiteDatabase db) { - db.execSQL("DROP TABLE IF EXISTS " + mTableName); - onCreate(db); - } - } -} diff --git a/iconloaderlib/src_full_lib/com/android/launcher3/icons/IconFactory.java b/iconloaderlib/src_full_lib/com/android/launcher3/icons/IconFactory.java deleted file mode 100644 index 48f11fde3b..0000000000 --- a/iconloaderlib/src_full_lib/com/android/launcher3/icons/IconFactory.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (C) 2018 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.launcher3.icons; - -import android.content.Context; - -/** - * Wrapper class to provide access to {@link BaseIconFactory} and also to provide pool of this class - * that are threadsafe. - */ -public class IconFactory extends BaseIconFactory { - - private static final Object sPoolSync = new Object(); - private static IconFactory sPool; - private static int sPoolId = 0; - - /** - * Return a new Message instance from the global pool. Allows us to - * avoid allocating new objects in many cases. - */ - public static IconFactory obtain(Context context) { - int poolId; - synchronized (sPoolSync) { - if (sPool != null) { - IconFactory m = sPool; - sPool = m.next; - m.next = null; - return m; - } - poolId = sPoolId; - } - - return new IconFactory(context, - context.getResources().getConfiguration().densityDpi, - context.getResources().getDimensionPixelSize(R.dimen.default_icon_bitmap_size), - poolId); - } - - public static void clearPool() { - synchronized (sPoolSync) { - sPool = null; - sPoolId++; - } - } - - private final int mPoolId; - - private IconFactory next; - - private IconFactory(Context context, int fillResIconDpi, int iconBitmapSize, int poolId) { - super(context, fillResIconDpi, iconBitmapSize); - mPoolId = poolId; - } - - /** - * Recycles a LauncherIcons that may be in-use. - */ - public void recycle() { - synchronized (sPoolSync) { - if (sPoolId != mPoolId) { - return; - } - // Clear any temporary state variables - clear(); - - next = sPool; - sPool = this; - } - } - - @Override - public void close() { - recycle(); - } -} diff --git a/iconloaderlib/src_full_lib/com/android/launcher3/icons/SimpleIconCache.java b/iconloaderlib/src_full_lib/com/android/launcher3/icons/SimpleIconCache.java deleted file mode 100644 index 1337975f19..0000000000 --- a/iconloaderlib/src_full_lib/com/android/launcher3/icons/SimpleIconCache.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (C) 2018 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.launcher3.icons; - -import static android.content.Intent.ACTION_MANAGED_PROFILE_ADDED; -import static android.content.Intent.ACTION_MANAGED_PROFILE_REMOVED; - -import android.annotation.TargetApi; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.ApplicationInfo; -import android.os.Build; -import android.os.Handler; -import android.os.HandlerThread; -import android.os.Looper; -import android.os.UserHandle; -import android.os.UserManager; -import android.util.SparseLongArray; - -import com.android.launcher3.icons.cache.BaseIconCache; - -/** - * Wrapper class to provide access to {@link BaseIconFactory} and also to provide pool of this class - * that are threadsafe. - */ -@TargetApi(Build.VERSION_CODES.P) -public class SimpleIconCache extends BaseIconCache { - - private static SimpleIconCache sIconCache = null; - private static final Object CACHE_LOCK = new Object(); - - private final SparseLongArray mUserSerialMap = new SparseLongArray(2); - private final UserManager mUserManager; - - public SimpleIconCache(Context context, String dbFileName, Looper bgLooper, int iconDpi, - int iconPixelSize, boolean inMemoryCache) { - super(context, dbFileName, bgLooper, iconDpi, iconPixelSize, inMemoryCache); - mUserManager = context.getSystemService(UserManager.class); - - // Listen for user cache changes. - IntentFilter filter = new IntentFilter(ACTION_MANAGED_PROFILE_ADDED); - filter.addAction(ACTION_MANAGED_PROFILE_REMOVED); - context.registerReceiver(new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - resetUserCache(); - } - }, filter, null, new Handler(bgLooper), 0); - } - - @Override - protected long getSerialNumberForUser(UserHandle user) { - synchronized (mUserSerialMap) { - int index = mUserSerialMap.indexOfKey(user.getIdentifier()); - if (index >= 0) { - return mUserSerialMap.valueAt(index); - } - long serial = mUserManager.getSerialNumberForUser(user); - mUserSerialMap.put(user.getIdentifier(), serial); - return serial; - } - } - - private void resetUserCache() { - synchronized (mUserSerialMap) { - mUserSerialMap.clear(); - } - } - - @Override - protected boolean isInstantApp(ApplicationInfo info) { - return info.isInstantApp(); - } - - @Override - protected BaseIconFactory getIconFactory() { - return IconFactory.obtain(mContext); - } - - public static SimpleIconCache getIconCache(Context context) { - synchronized (CACHE_LOCK) { - if (sIconCache != null) { - return sIconCache; - } - boolean inMemoryCache = - context.getResources().getBoolean(R.bool.simple_cache_enable_im_memory); - String dbFileName = context.getString(R.string.cache_db_name); - - HandlerThread bgThread = new HandlerThread("simple-icon-cache"); - bgThread.start(); - - sIconCache = new SimpleIconCache(context.getApplicationContext(), dbFileName, - bgThread.getLooper(), context.getResources().getConfiguration().densityDpi, - context.getResources().getDimensionPixelSize(R.dimen.default_icon_bitmap_size), - inMemoryCache); - return sIconCache; - } - } -} From 8caa787906b49427afed77e7bd63b72d9bbbe8a7 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Mon, 9 Mar 2020 12:50:38 -0700 Subject: [PATCH 15/41] [DO NOT MERGE] Fix some visual jumps when swiping home All caused by running the transform progress from 0 to 1 instead of starting at whatever the progress was before ending the gesture, e.g.: - When swiping to home without animating into an icon, the corner radius was set back to the window corner radius. - Before this change, the clip didn't update throughout the animation, making the window slightly bigger than the floating icon view; after this change, the clip jumped to show the insets again before clipping back down during the home animation. Partial backport of ag/Ie48f4b665a5bf3cbef76bdf7f043febe99fb84a0 Bug: 150680980 Change-Id: Ida65097f0ef7d2e11d48b84ecdd353ef89078015 --- .../src/com/android/quickstep/BaseSwipeUpHandler.java | 7 ++++++- .../com/android/quickstep/util/ClipAnimationHelper.java | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java index 5cce53ebf1..e5d2b411a8 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java @@ -386,6 +386,10 @@ public abstract class BaseSwipeUpHandler Date: Mon, 9 Mar 2020 12:57:11 -0700 Subject: [PATCH 16/41] [DO NOT MERGE] Initiailize APP_SEARCH_IMRPOVEMENT flag outside DEBUG builds. This is addressing a bug where flags are only changed on debug build devices or initially when changes. When nexuslauncher restarts the flag is no longer retrieved. Change-Id: Ieb6f460a271c918ee4e493b34692244f39cb3740 --- src/com/android/launcher3/config/BaseFlags.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/android/launcher3/config/BaseFlags.java b/src/com/android/launcher3/config/BaseFlags.java index cd7444bba9..b264b798c0 100644 --- a/src/com/android/launcher3/config/BaseFlags.java +++ b/src/com/android/launcher3/config/BaseFlags.java @@ -132,6 +132,7 @@ public abstract class BaseFlags { } } } + APP_SEARCH_IMPROVEMENTS.initialize(context); } static List getTogglableFlags() { From b365cc43878e0cb4e6d4b998c10cd590adc4cb8d Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Mon, 9 Mar 2020 13:20:04 -0700 Subject: [PATCH 17/41] Fix crash when dumping before user unlocks Bug: 150864182 Bug: 151050221 Change-Id: I29ba2ef66b4359a47f866d02306498537c45236e --- .../src/com/android/quickstep/TouchInteractionService.java | 4 +++- .../com/android/quickstep/RecentsAnimationDeviceState.java | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java index 4598cdf459..0f6333693f 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java @@ -760,7 +760,9 @@ public class TouchInteractionService extends Service implements PluginListener mListeners; public DeviceFlag(String key, boolean defaultValue, String description) { super(key, getDeviceValue(key, defaultValue), description); @@ -40,18 +43,34 @@ public class DeviceFlag extends DebugFlag { return super.appendProps(src).append(", mDefaultValueInCode=").append(mDefaultValueInCode); } + @Override + public void initialize(Context context) { + super.initialize(context); + if (mListeners == null) { + mListeners = new ArrayList<>(); + registerDeviceConfigChangedListener(context); + } + } + @Override public void addChangeListener(Context context, Runnable r) { + mListeners.add(r); + } + + private void registerDeviceConfigChangedListener(Context context) { DeviceConfig.addOnPropertiesChangedListener( NAMESPACE_LAUNCHER, context.getMainExecutor(), properties -> { - if (!NAMESPACE_LAUNCHER.equals(properties.getNamespace())) { + if (!NAMESPACE_LAUNCHER.equals(properties.getNamespace()) + || !properties.getKeyset().contains(key)) { return; } defaultValue = getDeviceValue(key, mDefaultValueInCode); initialize(context); - r.run(); + for (Runnable r: mListeners) { + r.run(); + } }); } diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index ed28df0748..a6f9e6b2e5 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -93,8 +93,9 @@ public final class FeatureFlags { public static final BooleanFlag FAKE_LANDSCAPE_UI = getDebugFlag( "FAKE_LANDSCAPE_UI", false, "Rotate launcher UI instead of using transposed layout"); - public static final BooleanFlag FOLDER_NAME_SUGGEST = getDebugFlag( - "FOLDER_NAME_SUGGEST", true, "Suggests folder names instead of blank text."); + public static final BooleanFlag FOLDER_NAME_SUGGEST = new DeviceFlag( + "FOLDER_NAME_SUGGEST", true, + "Suggests folder names instead of blank text."); public static final BooleanFlag APP_SEARCH_IMPROVEMENTS = new DeviceFlag( "APP_SEARCH_IMPROVEMENTS", false, From 79a352169f0197f5d0ea2be32cd8cf2f7dbef1ad Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Mon, 9 Mar 2020 16:31:21 -0700 Subject: [PATCH 19/41] Show drag handle indictor in 2 zone model Note this is just the tiny arrow we show in accessibility mode, will probably need to get some updated visual treatment going forward. Bug: 143361609 Change-Id: I65975727f101984429aadc35a650826e36d9c9aa --- .../src/com/android/quickstep/views/ShelfScrimView.java | 7 +++++++ src/com/android/launcher3/views/ScrimView.java | 6 +++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/quickstep/src/com/android/quickstep/views/ShelfScrimView.java b/quickstep/src/com/android/quickstep/views/ShelfScrimView.java index 1ce3549f39..14c458ed53 100644 --- a/quickstep/src/com/android/quickstep/views/ShelfScrimView.java +++ b/quickstep/src/com/android/quickstep/views/ShelfScrimView.java @@ -237,6 +237,13 @@ public class ShelfScrimView extends ScrimView } } + @Override + protected boolean shouldDragHandleBeVisible() { + boolean twoZoneSwipeModel = FeatureFlags.ENABLE_OVERVIEW_ACTIONS.get() + && SysUINavigationMode.removeShelfFromOverview(mLauncher); + return twoZoneSwipeModel || super.shouldDragHandleBeVisible(); + } + @Override protected void onDraw(Canvas canvas) { drawBackground(canvas); diff --git a/src/com/android/launcher3/views/ScrimView.java b/src/com/android/launcher3/views/ScrimView.java index 8ce98f2777..70d6c7e6a8 100644 --- a/src/com/android/launcher3/views/ScrimView.java +++ b/src/com/android/launcher3/views/ScrimView.java @@ -336,7 +336,7 @@ public class ScrimView extends View implements Insettable, O } private void updateDragHandleVisibility(Drawable recycle) { - boolean visible = mLauncher.getDeviceProfile().isVerticalBarLayout() || mAM.isEnabled(); + boolean visible = shouldDragHandleBeVisible(); boolean wasVisible = mDragHandle != null; if (visible != wasVisible) { if (visible) { @@ -352,6 +352,10 @@ public class ScrimView extends View implements Insettable, O } } + protected boolean shouldDragHandleBeVisible() { + return mLauncher.getDeviceProfile().isVerticalBarLayout() || mAM.isEnabled(); + } + @Override public boolean dispatchHoverEvent(MotionEvent event) { return mAccessibilityHelper.dispatchHoverEvent(event) || super.dispatchHoverEvent(event); From 9a32222ce76b37911e42fdfa500d3e47623d459d Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 9 Mar 2020 19:32:09 -0700 Subject: [PATCH 20/41] Import translations. DO NOT MERGE Auto-generated-cl: translation import Change-Id: I4cb33e7020ee7cb582982fecba72dfd7f2c70469 --- SecondaryDisplayLauncher/res/values-ar/strings.xml | 2 +- quickstep/res/values-es/strings.xml | 2 +- quickstep/res/values-mk/strings.xml | 2 +- res/values-ar/strings.xml | 4 ++-- res/values-ca/strings.xml | 8 ++++---- res/values-hy/strings.xml | 2 +- res/values-it/strings.xml | 2 +- res/values-ky/strings.xml | 4 ++-- res/values-ta/strings.xml | 6 +++--- res/values-vi/strings.xml | 6 +++--- 10 files changed, 19 insertions(+), 19 deletions(-) diff --git a/SecondaryDisplayLauncher/res/values-ar/strings.xml b/SecondaryDisplayLauncher/res/values-ar/strings.xml index aa34c7d166..9a8adf5e0f 100644 --- a/SecondaryDisplayLauncher/res/values-ar/strings.xml +++ b/SecondaryDisplayLauncher/res/values-ar/strings.xml @@ -19,7 +19,7 @@ - "تعذَّر تشغيل النشاط." + "تعذَّر تفعيل النشاط." "إضافة اختصار التطبيق" "ضبط الخلفية" diff --git a/quickstep/res/values-es/strings.xml b/quickstep/res/values-es/strings.xml index 329286b3bf..e47688053f 100644 --- a/quickstep/res/values-es/strings.xml +++ b/quickstep/res/values-es/strings.xml @@ -23,7 +23,7 @@ "Fijar" "Formato libre" "Aplicaciones recientes" - "No hay elementos recientes" + "No hay nada reciente" "Cerrar" "Ajustes de uso de la aplicación" "Borrar todo" diff --git a/quickstep/res/values-mk/strings.xml b/quickstep/res/values-mk/strings.xml index 9f11521df3..8ca743f52b 100644 --- a/quickstep/res/values-mk/strings.xml +++ b/quickstep/res/values-mk/strings.xml @@ -26,7 +26,7 @@ "Нема неодамнешни ставки" "Затвори" "Поставки за користење на апликациите" - "Исчисти ги сите" + "Избриши ги сите" "Неодамнешни апликации" "%1$s, %2$s" "< 1 минута" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index a80ecb0b14..cdf41444c5 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -92,8 +92,8 @@ "نقاط الإشعارات" "مفعّل" "غير مفعّل" - "يلزم تفعيل الوصول إلى الإشعارات" - "لعرض نقاط الإشعارات، يجب تشغيل إشعارات التطبيق في %1$s" + "يلزم تمكين الوصول إلى الإشعارات" + "لعرض نقاط الإشعارات، يجب تفعيل إشعارات التطبيق في %1$s" "تغيير الإعدادات" "عرض نقاط الإشعارات" "إضافة رمز إلى الشاشة الرئيسية" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 50f92daf28..4dee552ab2 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -47,7 +47,7 @@ "No hi ha més espai a la safata Preferits." "Llista d\'aplicacions" "Llista d\'aplicacions personals" - "Llista d\'aplicacions per a la feina" + "Llista d\'aplicacions de treball" "Inici" "Suprimeix" "Desinstal·la" @@ -132,9 +132,9 @@ "S\'ha ignorat la notificació" "Personal" "Feina" - "Perfil professional" - "Cerca aplicacions per a la feina aquí" - "Totes les aplicacions per a la feina tenen una insígnia que indica que estan protegides per la teva organització. Mou les aplicacions a la pantalla d\'inici per poder-hi accedir més fàcilment." + "Perfil de treball" + "Cerca aplicacions de treball aquí" + "Totes les aplicacions de treball tenen una insígnia que indica que estan protegides per la teva organització. Mou les aplicacions a la pantalla d\'inici per poder-hi accedir més fàcilment." "Gestionat per la teva organització" "Les notificacions i les aplicacions estan desactivades" "Tanca" diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index c81d55a908..d1e8c9a234 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -51,7 +51,7 @@ "Հիմնական" "Ապատեղադրել" "Հեռացնել" - "Հավելվածի տվյալներ" + "Հավելվածի մասին" "Տեղադրել" "տեղադրել դյուրանցումներ" "Ծրագրին թույլ է տալիս ավելացնել դյուրանցումներ՝ առանց օգտագործողի միջամտության:" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 8c4e3c5281..17206cbb1b 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -87,7 +87,7 @@ "Con il telefono ruotato" "Indicatori di notifica" "On" - "Off" + "OFF" "Accesso alle notifiche necessario" "Per mostrare gli indicatori di notifica, attiva le notifiche per l\'app %1$s" "Modifica impostazioni" diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml index 046a66253e..c032a525f6 100644 --- a/res/values-ky/strings.xml +++ b/res/values-ky/strings.xml @@ -89,7 +89,7 @@ "Күйүк" "Өчүк" "Эскертмелерге уруксат берилиши керек" - "Эскертме белгилерин көрсөтүү максатында, %1$s үчүн колдонмонун эскертмелерин күйгүзүү керек" + "Эскертме белгилерин көрсөтүү максатында, %1$s үчүн колдонмонун билдирмелерин күйгүзүү керек" "Жөндөөлөрдү өзгөртүү" "Билдирмелер белгилерин көрсөтүү" "Башкы экранга сүрөтчө кошуу" @@ -112,7 +112,7 @@ "Муну жылдыруу" "%1$s катарга %2$s тилкеге жылдыруу" "%1$s орунга жылдыруу" - "Сүйүктүүлөргө %1$s жылдыруу" + "Тандалмаларга %1$s жылдыруу" "Нерсе жылдырылды" "Куржунга кошуу: %1$s" "%1$s куржунуна кошуу" diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index e73cb89857..e3efdebf2b 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -28,9 +28,9 @@ "பாதுகாப்புப் பயன்முறையில் விட்ஜெட்கள் முடக்கப்பட்டுள்ளன" "ஷார்ட்கட் இல்லை" "முகப்புத் திரை" - "தனிப்பயன் செயல்கள்" + "பிரத்தியேக செயல்கள்" "விட்ஜெட்டைத் தேர்வுசெய்ய தொட்டுப் பிடிக்கவும்." - "விட்ஜெட்டைத் தேர்ந்தெடுக்க இருமுறை தட்டிப் பிடிக்கவும் அல்லது தனிப்பயன் செயல்களைப் பயன்படுத்தவும்." + "விட்ஜெட்டைத் தேர்ந்தெடுக்க இருமுறை தட்டிப் பிடிக்கவும் அல்லது பிரத்தியேக செயல்களைப் பயன்படுத்தவும்." "%1$d × %2$d" "%1$d அகலத்திற்கு %2$d உயரம்" "நீங்களே சேர்க்க, தொட்டுப் பிடித்திருக்கவும்" @@ -42,7 +42,7 @@ "ஆப்ஸ்" "அறிவிப்புகள்" "ஷார்ட்கட்டைச் சேர்க்க, தொட்டு பிடித்திருக்கவும்." - "ஷார்ட்கட்டைச் சேர்க்க, இருமுறை தட்டிப் பிடித்திருக்கவும் (அ) தனிப்பயன் செயல்களைப் பயன்படுத்தவும்." + "ஷார்ட்கட்டைச் சேர்க்க, இருமுறை தட்டிப் பிடித்திருக்கவும் (அ) பிரத்தியேக செயல்களைப் பயன்படுத்தவும்." "முகப்புத் திரையில் இடமில்லை." "பிடித்தவை ட்ரேயில் இடமில்லை" "ஆப்ஸின் பட்டியல்" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index f3519a50ce..3718963540 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -25,11 +25,11 @@ "Ứng dụng chưa được cài đặt." "Ứng dụng không có sẵn" "Ứng dụng đã tải xuống bị tắt ở chế độ An toàn" - "Tiện ích con bị vô hiệu hóa ở chế độ an toàn" + "Tiện ích bị vô hiệu hóa ở chế độ an toàn" "Lối tắt không khả dụng" "Màn hình chính" "Tác vụ tùy chỉnh" - "Chạm và giữ để chọn tiện ích con." + "Chạm và giữ để chọn tiện ích." "Nhấn đúp và giữ để chọn tiện ích hoặc sử dụng tác vụ tùy chỉnh." "%1$d × %2$d" "Rộng %1$d x cao %2$d" @@ -60,7 +60,7 @@ "ghi cài đặt và lối tắt trên Màn hình chính" "Cho phép ứng dụng thay đổi cài đặt và lối tắt trên Màn hình chính." "%1$s không được phép thực hiện cuộc gọi điện thoại" - "Sự cố khi tải tiện ích con" + "Sự cố khi tải tiện ích" "Thiết lập" "Đây là ứng dụng hệ thống và không thể gỡ cài đặt." "Thư mục chưa đặt tên" From 83730697f8416f8124bb0a6593aba5334f38546e Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 9 Mar 2020 19:37:07 -0700 Subject: [PATCH 21/41] Import translations. DO NOT MERGE Auto-generated-cl: translation import Change-Id: I833e37768c8b22a17cd5e36ac7b01ac024f3bbfc --- SecondaryDisplayLauncher/res/values-ar/strings.xml | 2 +- quickstep/res/values-es/strings.xml | 2 +- quickstep/res/values-mk/strings.xml | 2 +- res/values-ar/strings.xml | 4 ++-- res/values-ca/strings.xml | 8 ++++---- res/values-hy/strings.xml | 2 +- res/values-it/strings.xml | 2 +- res/values-ky/strings.xml | 4 ++-- res/values-ta/strings.xml | 6 +++--- res/values-vi/strings.xml | 6 +++--- 10 files changed, 19 insertions(+), 19 deletions(-) diff --git a/SecondaryDisplayLauncher/res/values-ar/strings.xml b/SecondaryDisplayLauncher/res/values-ar/strings.xml index aa34c7d166..9a8adf5e0f 100644 --- a/SecondaryDisplayLauncher/res/values-ar/strings.xml +++ b/SecondaryDisplayLauncher/res/values-ar/strings.xml @@ -19,7 +19,7 @@ - "تعذَّر تشغيل النشاط." + "تعذَّر تفعيل النشاط." "إضافة اختصار التطبيق" "ضبط الخلفية" diff --git a/quickstep/res/values-es/strings.xml b/quickstep/res/values-es/strings.xml index 329286b3bf..e47688053f 100644 --- a/quickstep/res/values-es/strings.xml +++ b/quickstep/res/values-es/strings.xml @@ -23,7 +23,7 @@ "Fijar" "Formato libre" "Aplicaciones recientes" - "No hay elementos recientes" + "No hay nada reciente" "Cerrar" "Ajustes de uso de la aplicación" "Borrar todo" diff --git a/quickstep/res/values-mk/strings.xml b/quickstep/res/values-mk/strings.xml index 9f11521df3..8ca743f52b 100644 --- a/quickstep/res/values-mk/strings.xml +++ b/quickstep/res/values-mk/strings.xml @@ -26,7 +26,7 @@ "Нема неодамнешни ставки" "Затвори" "Поставки за користење на апликациите" - "Исчисти ги сите" + "Избриши ги сите" "Неодамнешни апликации" "%1$s, %2$s" "< 1 минута" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 2fbdae131e..aae55afe1c 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -91,8 +91,8 @@ "نقاط الإشعارات" "مفعّل" "غير مفعّل" - "يلزم تفعيل الوصول إلى الإشعارات" - "لعرض نقاط الإشعارات، يجب تشغيل إشعارات التطبيق في %1$s" + "يلزم تمكين الوصول إلى الإشعارات" + "لعرض نقاط الإشعارات، يجب تفعيل إشعارات التطبيق في %1$s" "تغيير الإعدادات" "عرض نقاط الإشعارات" "إضافة رمز إلى الشاشة الرئيسية" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 4ef9ec3a2c..abd0405858 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -46,7 +46,7 @@ "No hi ha més espai a la safata Preferits." "Llista d\'aplicacions" "Llista d\'aplicacions personals" - "Llista d\'aplicacions per a la feina" + "Llista d\'aplicacions de treball" "Inici" "Suprimeix" "Desinstal·la" @@ -131,9 +131,9 @@ "S\'ha ignorat la notificació" "Personal" "Feina" - "Perfil professional" - "Cerca aplicacions per a la feina aquí" - "Totes les aplicacions per a la feina tenen una insígnia que indica que estan protegides per la teva organització. Mou les aplicacions a la pantalla d\'inici per poder-hi accedir més fàcilment." + "Perfil de treball" + "Cerca aplicacions de treball aquí" + "Totes les aplicacions de treball tenen una insígnia que indica que estan protegides per la teva organització. Mou les aplicacions a la pantalla d\'inici per poder-hi accedir més fàcilment." "Gestionat per la teva organització" "Les notificacions i les aplicacions estan desactivades" "Tanca" diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index 93404e6f5f..fc04ca3bac 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -50,7 +50,7 @@ "Հիմնական" "Ապատեղադրել" "Հեռացնել" - "Հավելվածի տվյալներ" + "Հավելվածի մասին" "Տեղադրել" "տեղադրել դյուրանցումներ" "Ծրագրին թույլ է տալիս ավելացնել դյուրանցումներ՝ առանց օգտագործողի միջամտության:" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index aaceb531f6..1807817eaf 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -86,7 +86,7 @@ "Con il telefono ruotato" "Indicatori di notifica" "On" - "Off" + "OFF" "Accesso alle notifiche necessario" "Per mostrare gli indicatori di notifica, attiva le notifiche per l\'app %1$s" "Modifica impostazioni" diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml index d52446c83c..b266e8ee43 100644 --- a/res/values-ky/strings.xml +++ b/res/values-ky/strings.xml @@ -88,7 +88,7 @@ "Күйүк" "Өчүк" "Эскертмелерге уруксат берилиши керек" - "Эскертме белгилерин көрсөтүү максатында, %1$s үчүн колдонмонун эскертмелерин күйгүзүү керек" + "Эскертме белгилерин көрсөтүү максатында, %1$s үчүн колдонмонун билдирмелерин күйгүзүү керек" "Жөндөөлөрдү өзгөртүү" "Билдирмелер белгилерин көрсөтүү" "Башкы экранга сүрөтчө кошуу" @@ -111,7 +111,7 @@ "Муну жылдыруу" "%1$s катарга %2$s тилкеге жылдыруу" "%1$s орунга жылдыруу" - "Сүйүктүүлөргө %1$s жылдыруу" + "Тандалмаларга %1$s жылдыруу" "Нерсе жылдырылды" "Куржунга кошуу: %1$s" "%1$s куржунуна кошуу" diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index 799b6b8f67..019fa1d56c 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -27,9 +27,9 @@ "பாதுகாப்புப் பயன்முறையில் விட்ஜெட்கள் முடக்கப்பட்டுள்ளன" "ஷார்ட்கட் இல்லை" "முகப்புத் திரை" - "தனிப்பயன் செயல்கள்" + "பிரத்தியேக செயல்கள்" "விட்ஜெட்டைத் தேர்வுசெய்ய தொட்டுப் பிடிக்கவும்." - "விட்ஜெட்டைத் தேர்ந்தெடுக்க இருமுறை தட்டிப் பிடிக்கவும் அல்லது தனிப்பயன் செயல்களைப் பயன்படுத்தவும்." + "விட்ஜெட்டைத் தேர்ந்தெடுக்க இருமுறை தட்டிப் பிடிக்கவும் அல்லது பிரத்தியேக செயல்களைப் பயன்படுத்தவும்." "%1$d × %2$d" "%1$d அகலத்திற்கு %2$d உயரம்" "நீங்களே சேர்க்க, தொட்டுப் பிடித்திருக்கவும்" @@ -41,7 +41,7 @@ "ஆப்ஸ்" "அறிவிப்புகள்" "ஷார்ட்கட்டைச் சேர்க்க, தொட்டு பிடித்திருக்கவும்." - "ஷார்ட்கட்டைச் சேர்க்க, இருமுறை தட்டிப் பிடித்திருக்கவும் (அ) தனிப்பயன் செயல்களைப் பயன்படுத்தவும்." + "ஷார்ட்கட்டைச் சேர்க்க, இருமுறை தட்டிப் பிடித்திருக்கவும் (அ) பிரத்தியேக செயல்களைப் பயன்படுத்தவும்." "முகப்புத் திரையில் இடமில்லை." "பிடித்தவை ட்ரேயில் இடமில்லை" "ஆப்ஸின் பட்டியல்" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 4dc58b9947..a0a122a855 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -24,11 +24,11 @@ "Ứng dụng chưa được cài đặt." "Ứng dụng không có sẵn" "Ứng dụng đã tải xuống bị tắt ở chế độ An toàn" - "Tiện ích con bị vô hiệu hóa ở chế độ an toàn" + "Tiện ích bị vô hiệu hóa ở chế độ an toàn" "Lối tắt không khả dụng" "Màn hình chính" "Tác vụ tùy chỉnh" - "Chạm và giữ để chọn tiện ích con." + "Chạm và giữ để chọn tiện ích." "Nhấn đúp và giữ để chọn tiện ích hoặc sử dụng tác vụ tùy chỉnh." "%1$d × %2$d" "Rộng %1$d x cao %2$d" @@ -59,7 +59,7 @@ "ghi cài đặt và lối tắt trên Màn hình chính" "Cho phép ứng dụng thay đổi cài đặt và lối tắt trên Màn hình chính." "%1$s không được phép thực hiện cuộc gọi điện thoại" - "Sự cố khi tải tiện ích con" + "Sự cố khi tải tiện ích" "Thiết lập" "Đây là ứng dụng hệ thống và không thể gỡ cài đặt." "Thư mục chưa đặt tên" From a066cb4430989496e80770bbac04c68b2d515f2b Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 9 Mar 2020 19:41:30 -0700 Subject: [PATCH 22/41] Import translations. DO NOT MERGE Auto-generated-cl: translation import Change-Id: I91780ce30d4eb9825d415e2825b9a94e2a4fade8 --- .../res/values-ar/strings.xml | 4 +- .../res/values-en-rCA/strings.xml | 25 +++ .../res/values-en-rXC/strings.xml | 25 +++ quickstep/res/values-af/config.xml | 22 +++ quickstep/res/values-af/strings.xml | 1 - quickstep/res/values-am/config.xml | 22 +++ quickstep/res/values-am/strings.xml | 1 - quickstep/res/values-ar/config.xml | 22 +++ quickstep/res/values-ar/strings.xml | 1 - quickstep/res/values-as/config.xml | 22 +++ quickstep/res/values-as/strings.xml | 1 - quickstep/res/values-az/config.xml | 22 +++ quickstep/res/values-az/strings.xml | 1 - quickstep/res/values-b+sr+Latn/config.xml | 22 +++ quickstep/res/values-b+sr+Latn/strings.xml | 1 - quickstep/res/values-be/config.xml | 22 +++ quickstep/res/values-be/strings.xml | 1 - quickstep/res/values-bg/config.xml | 22 +++ quickstep/res/values-bg/strings.xml | 1 - quickstep/res/values-bn/config.xml | 22 +++ quickstep/res/values-bn/strings.xml | 1 - quickstep/res/values-bs/config.xml | 22 +++ quickstep/res/values-bs/strings.xml | 1 - quickstep/res/values-ca/config.xml | 22 +++ quickstep/res/values-ca/strings.xml | 1 - quickstep/res/values-cs/config.xml | 22 +++ quickstep/res/values-cs/strings.xml | 1 - quickstep/res/values-da/config.xml | 22 +++ quickstep/res/values-da/strings.xml | 1 - quickstep/res/values-de/config.xml | 22 +++ quickstep/res/values-de/strings.xml | 1 - quickstep/res/values-el/config.xml | 22 +++ quickstep/res/values-el/strings.xml | 1 - quickstep/res/values-en-rAU/config.xml | 22 +++ quickstep/res/values-en-rAU/strings.xml | 1 - quickstep/res/values-en-rCA/config.xml | 22 +++ quickstep/res/values-en-rCA/strings.xml | 36 +++++ quickstep/res/values-en-rGB/config.xml | 22 +++ quickstep/res/values-en-rGB/strings.xml | 1 - quickstep/res/values-en-rIN/config.xml | 22 +++ quickstep/res/values-en-rIN/strings.xml | 1 - quickstep/res/values-en-rXC/config.xml | 22 +++ quickstep/res/values-en-rXC/strings.xml | 36 +++++ quickstep/res/values-es-rUS/config.xml | 22 +++ quickstep/res/values-es-rUS/strings.xml | 1 - quickstep/res/values-es/config.xml | 22 +++ quickstep/res/values-es/strings.xml | 3 +- quickstep/res/values-et/config.xml | 22 +++ quickstep/res/values-et/strings.xml | 1 - quickstep/res/values-eu/config.xml | 22 +++ quickstep/res/values-eu/strings.xml | 1 - quickstep/res/values-fa/config.xml | 22 +++ quickstep/res/values-fa/strings.xml | 1 - quickstep/res/values-fi/config.xml | 22 +++ quickstep/res/values-fi/strings.xml | 1 - quickstep/res/values-fr-rCA/config.xml | 22 +++ quickstep/res/values-fr-rCA/strings.xml | 1 - quickstep/res/values-fr/config.xml | 22 +++ quickstep/res/values-fr/strings.xml | 1 - quickstep/res/values-gl/config.xml | 22 +++ quickstep/res/values-gl/strings.xml | 1 - quickstep/res/values-gu/config.xml | 22 +++ quickstep/res/values-gu/strings.xml | 1 - quickstep/res/values-hi/config.xml | 22 +++ quickstep/res/values-hi/strings.xml | 1 - quickstep/res/values-hr/config.xml | 22 +++ quickstep/res/values-hr/strings.xml | 1 - quickstep/res/values-hu/config.xml | 22 +++ quickstep/res/values-hu/strings.xml | 1 - quickstep/res/values-hy/config.xml | 22 +++ quickstep/res/values-hy/strings.xml | 1 - quickstep/res/values-in/config.xml | 22 +++ quickstep/res/values-in/strings.xml | 1 - quickstep/res/values-is/config.xml | 22 +++ quickstep/res/values-is/strings.xml | 1 - quickstep/res/values-it/config.xml | 22 +++ quickstep/res/values-it/strings.xml | 1 - quickstep/res/values-iw/config.xml | 22 +++ quickstep/res/values-iw/strings.xml | 1 - quickstep/res/values-ja/config.xml | 22 +++ quickstep/res/values-ja/strings.xml | 1 - quickstep/res/values-ka/config.xml | 22 +++ quickstep/res/values-ka/strings.xml | 1 - quickstep/res/values-kk/config.xml | 22 +++ quickstep/res/values-kk/strings.xml | 1 - quickstep/res/values-km/config.xml | 22 +++ quickstep/res/values-km/strings.xml | 1 - quickstep/res/values-kn/config.xml | 22 +++ quickstep/res/values-kn/strings.xml | 1 - quickstep/res/values-ko/config.xml | 22 +++ quickstep/res/values-ko/strings.xml | 1 - quickstep/res/values-ky/config.xml | 22 +++ quickstep/res/values-ky/strings.xml | 1 - quickstep/res/values-lo/config.xml | 22 +++ quickstep/res/values-lo/strings.xml | 1 - quickstep/res/values-lt/config.xml | 22 +++ quickstep/res/values-lt/strings.xml | 1 - quickstep/res/values-lv/config.xml | 22 +++ quickstep/res/values-lv/strings.xml | 1 - quickstep/res/values-mk/config.xml | 22 +++ quickstep/res/values-mk/strings.xml | 3 +- quickstep/res/values-ml/config.xml | 22 +++ quickstep/res/values-ml/strings.xml | 1 - quickstep/res/values-mn/config.xml | 22 +++ quickstep/res/values-mn/strings.xml | 1 - quickstep/res/values-mr/config.xml | 22 +++ quickstep/res/values-mr/strings.xml | 1 - quickstep/res/values-ms/config.xml | 22 +++ quickstep/res/values-ms/strings.xml | 1 - quickstep/res/values-my/config.xml | 22 +++ quickstep/res/values-my/strings.xml | 1 - quickstep/res/values-nb/config.xml | 22 +++ quickstep/res/values-nb/strings.xml | 1 - quickstep/res/values-ne/config.xml | 22 +++ quickstep/res/values-ne/strings.xml | 1 - quickstep/res/values-nl/config.xml | 22 +++ quickstep/res/values-nl/strings.xml | 1 - quickstep/res/values-or/config.xml | 22 +++ quickstep/res/values-or/strings.xml | 1 - quickstep/res/values-pa/config.xml | 22 +++ quickstep/res/values-pa/strings.xml | 1 - quickstep/res/values-pl/config.xml | 22 +++ quickstep/res/values-pl/strings.xml | 1 - quickstep/res/values-pt-rPT/config.xml | 22 +++ quickstep/res/values-pt-rPT/strings.xml | 1 - quickstep/res/values-pt/config.xml | 22 +++ quickstep/res/values-pt/strings.xml | 1 - quickstep/res/values-ro/config.xml | 22 +++ quickstep/res/values-ro/strings.xml | 1 - quickstep/res/values-ru/config.xml | 22 +++ quickstep/res/values-ru/strings.xml | 1 - quickstep/res/values-si/config.xml | 22 +++ quickstep/res/values-si/strings.xml | 1 - quickstep/res/values-sk/config.xml | 22 +++ quickstep/res/values-sk/strings.xml | 1 - quickstep/res/values-sl/config.xml | 22 +++ quickstep/res/values-sl/strings.xml | 1 - quickstep/res/values-sq/config.xml | 22 +++ quickstep/res/values-sq/strings.xml | 1 - quickstep/res/values-sr/config.xml | 22 +++ quickstep/res/values-sr/strings.xml | 1 - quickstep/res/values-sv/config.xml | 22 +++ quickstep/res/values-sv/strings.xml | 1 - quickstep/res/values-sw/config.xml | 22 +++ quickstep/res/values-sw/strings.xml | 1 - quickstep/res/values-ta/strings.xml | 1 - quickstep/res/values-te/config.xml | 22 +++ quickstep/res/values-te/strings.xml | 1 - quickstep/res/values-th/config.xml | 22 +++ quickstep/res/values-th/strings.xml | 1 - quickstep/res/values-tl/config.xml | 22 +++ quickstep/res/values-tl/strings.xml | 1 - quickstep/res/values-tr/config.xml | 22 +++ quickstep/res/values-tr/strings.xml | 1 - quickstep/res/values-uk/config.xml | 22 +++ quickstep/res/values-uk/strings.xml | 1 - quickstep/res/values-ur/config.xml | 22 +++ quickstep/res/values-ur/strings.xml | 1 - quickstep/res/values-uz/config.xml | 22 +++ quickstep/res/values-uz/strings.xml | 1 - quickstep/res/values-vi/config.xml | 22 +++ quickstep/res/values-vi/strings.xml | 1 - quickstep/res/values-zh-rCN/config.xml | 22 +++ quickstep/res/values-zh-rCN/strings.xml | 1 - quickstep/res/values-zh-rHK/config.xml | 22 +++ quickstep/res/values-zh-rHK/strings.xml | 1 - quickstep/res/values-zh-rTW/config.xml | 22 +++ quickstep/res/values-zh-rTW/strings.xml | 1 - quickstep/res/values-zu/config.xml | 22 +++ quickstep/res/values-zu/strings.xml | 1 - res/values-af/strings.xml | 17 ++- res/values-am/strings.xml | 16 +- res/values-ar/strings.xml | 21 +-- res/values-as/strings.xml | 17 ++- res/values-az/strings.xml | 16 +- res/values-b+sr+Latn/strings.xml | 17 ++- res/values-be/strings.xml | 17 ++- res/values-bg/strings.xml | 17 ++- res/values-bn/strings.xml | 18 ++- res/values-bs/strings.xml | 16 +- res/values-ca/strings.xml | 20 +-- res/values-cs/strings.xml | 17 ++- res/values-da/strings.xml | 17 ++- res/values-de/strings.xml | 17 ++- res/values-el/strings.xml | 16 +- res/values-en-rAU/strings.xml | 16 +- res/values-en-rCA/strings.xml | 144 ++++++++++++++++++ res/values-en-rGB/strings.xml | 16 +- res/values-en-rIN/strings.xml | 16 +- res/values-en-rXC/strings.xml | 144 ++++++++++++++++++ res/values-es-rUS/strings.xml | 17 ++- res/values-es/strings.xml | 17 ++- res/values-et/strings.xml | 17 ++- res/values-eu/strings.xml | 16 +- res/values-fa/strings.xml | 17 ++- res/values-fi/strings.xml | 17 ++- res/values-fr-rCA/strings.xml | 17 ++- res/values-fr/strings.xml | 16 +- res/values-gl/strings.xml | 16 +- res/values-gu/strings.xml | 18 ++- res/values-hi/strings.xml | 16 +- res/values-hr/strings.xml | 16 +- res/values-hu/strings.xml | 17 ++- res/values-hy/strings.xml | 18 ++- res/values-in/strings.xml | 16 +- res/values-is/strings.xml | 17 ++- res/values-it/strings.xml | 19 +-- res/values-iw/strings.xml | 17 ++- res/values-ja/strings.xml | 17 ++- res/values-ka/strings.xml | 17 ++- res/values-kk/strings.xml | 17 ++- res/values-km/strings.xml | 16 +- res/values-kn/strings.xml | 16 +- res/values-ko/strings.xml | 17 ++- res/values-ky/strings.xml | 20 +-- res/values-lo/strings.xml | 17 ++- res/values-lt/strings.xml | 17 ++- res/values-lv/strings.xml | 17 ++- res/values-mk/strings.xml | 20 +-- res/values-ml/strings.xml | 17 ++- res/values-mn/strings.xml | 17 ++- res/values-mr/strings.xml | 23 +-- res/values-ms/strings.xml | 17 ++- res/values-my/strings.xml | 16 +- res/values-nb/strings.xml | 17 ++- res/values-ne/strings.xml | 17 ++- res/values-nl/strings.xml | 17 ++- res/values-or/strings.xml | 21 +-- res/values-pa/strings.xml | 17 ++- res/values-pl/strings.xml | 19 +-- res/values-pt-rPT/strings.xml | 16 +- res/values-pt/strings.xml | 16 +- res/values-ro/strings.xml | 16 +- res/values-ru/strings.xml | 17 ++- res/values-si/strings.xml | 17 ++- res/values-sk/strings.xml | 16 +- res/values-sl/strings.xml | 17 ++- res/values-sq/strings.xml | 16 +- res/values-sr/strings.xml | 17 ++- res/values-sv/strings.xml | 17 ++- res/values-sw/strings.xml | 16 +- res/values-ta/strings.xml | 33 ++-- res/values-te/strings.xml | 16 +- res/values-th/strings.xml | 16 +- res/values-tl/strings.xml | 17 ++- res/values-tr/strings.xml | 17 ++- res/values-uk/strings.xml | 17 ++- res/values-ur/strings.xml | 17 ++- res/values-uz/strings.xml | 17 ++- res/values-vi/strings.xml | 25 +-- res/values-zh-rCN/strings.xml | 17 ++- res/values-zh-rHK/strings.xml | 17 ++- res/values-zh-rTW/strings.xml | 17 ++- res/values-zu/strings.xml | 16 +- 254 files changed, 3013 insertions(+), 736 deletions(-) create mode 100644 SecondaryDisplayLauncher/res/values-en-rCA/strings.xml create mode 100644 SecondaryDisplayLauncher/res/values-en-rXC/strings.xml create mode 100644 quickstep/res/values-af/config.xml create mode 100644 quickstep/res/values-am/config.xml create mode 100644 quickstep/res/values-ar/config.xml create mode 100644 quickstep/res/values-as/config.xml create mode 100644 quickstep/res/values-az/config.xml create mode 100644 quickstep/res/values-b+sr+Latn/config.xml create mode 100644 quickstep/res/values-be/config.xml create mode 100644 quickstep/res/values-bg/config.xml create mode 100644 quickstep/res/values-bn/config.xml create mode 100644 quickstep/res/values-bs/config.xml create mode 100644 quickstep/res/values-ca/config.xml create mode 100644 quickstep/res/values-cs/config.xml create mode 100644 quickstep/res/values-da/config.xml create mode 100644 quickstep/res/values-de/config.xml create mode 100644 quickstep/res/values-el/config.xml create mode 100644 quickstep/res/values-en-rAU/config.xml create mode 100644 quickstep/res/values-en-rCA/config.xml create mode 100644 quickstep/res/values-en-rCA/strings.xml create mode 100644 quickstep/res/values-en-rGB/config.xml create mode 100644 quickstep/res/values-en-rIN/config.xml create mode 100644 quickstep/res/values-en-rXC/config.xml create mode 100644 quickstep/res/values-en-rXC/strings.xml create mode 100644 quickstep/res/values-es-rUS/config.xml create mode 100644 quickstep/res/values-es/config.xml create mode 100644 quickstep/res/values-et/config.xml create mode 100644 quickstep/res/values-eu/config.xml create mode 100644 quickstep/res/values-fa/config.xml create mode 100644 quickstep/res/values-fi/config.xml create mode 100644 quickstep/res/values-fr-rCA/config.xml create mode 100644 quickstep/res/values-fr/config.xml create mode 100644 quickstep/res/values-gl/config.xml create mode 100644 quickstep/res/values-gu/config.xml create mode 100644 quickstep/res/values-hi/config.xml create mode 100644 quickstep/res/values-hr/config.xml create mode 100644 quickstep/res/values-hu/config.xml create mode 100644 quickstep/res/values-hy/config.xml create mode 100644 quickstep/res/values-in/config.xml create mode 100644 quickstep/res/values-is/config.xml create mode 100644 quickstep/res/values-it/config.xml create mode 100644 quickstep/res/values-iw/config.xml create mode 100644 quickstep/res/values-ja/config.xml create mode 100644 quickstep/res/values-ka/config.xml create mode 100644 quickstep/res/values-kk/config.xml create mode 100644 quickstep/res/values-km/config.xml create mode 100644 quickstep/res/values-kn/config.xml create mode 100644 quickstep/res/values-ko/config.xml create mode 100644 quickstep/res/values-ky/config.xml create mode 100644 quickstep/res/values-lo/config.xml create mode 100644 quickstep/res/values-lt/config.xml create mode 100644 quickstep/res/values-lv/config.xml create mode 100644 quickstep/res/values-mk/config.xml create mode 100644 quickstep/res/values-ml/config.xml create mode 100644 quickstep/res/values-mn/config.xml create mode 100644 quickstep/res/values-mr/config.xml create mode 100644 quickstep/res/values-ms/config.xml create mode 100644 quickstep/res/values-my/config.xml create mode 100644 quickstep/res/values-nb/config.xml create mode 100644 quickstep/res/values-ne/config.xml create mode 100644 quickstep/res/values-nl/config.xml create mode 100644 quickstep/res/values-or/config.xml create mode 100644 quickstep/res/values-pa/config.xml create mode 100644 quickstep/res/values-pl/config.xml create mode 100644 quickstep/res/values-pt-rPT/config.xml create mode 100644 quickstep/res/values-pt/config.xml create mode 100644 quickstep/res/values-ro/config.xml create mode 100644 quickstep/res/values-ru/config.xml create mode 100644 quickstep/res/values-si/config.xml create mode 100644 quickstep/res/values-sk/config.xml create mode 100644 quickstep/res/values-sl/config.xml create mode 100644 quickstep/res/values-sq/config.xml create mode 100644 quickstep/res/values-sr/config.xml create mode 100644 quickstep/res/values-sv/config.xml create mode 100644 quickstep/res/values-sw/config.xml create mode 100644 quickstep/res/values-te/config.xml create mode 100644 quickstep/res/values-th/config.xml create mode 100644 quickstep/res/values-tl/config.xml create mode 100644 quickstep/res/values-tr/config.xml create mode 100644 quickstep/res/values-uk/config.xml create mode 100644 quickstep/res/values-ur/config.xml create mode 100644 quickstep/res/values-uz/config.xml create mode 100644 quickstep/res/values-vi/config.xml create mode 100644 quickstep/res/values-zh-rCN/config.xml create mode 100644 quickstep/res/values-zh-rHK/config.xml create mode 100644 quickstep/res/values-zh-rTW/config.xml create mode 100644 quickstep/res/values-zu/config.xml create mode 100644 res/values-en-rCA/strings.xml create mode 100644 res/values-en-rXC/strings.xml diff --git a/SecondaryDisplayLauncher/res/values-ar/strings.xml b/SecondaryDisplayLauncher/res/values-ar/strings.xml index ba81c118c2..9a8adf5e0f 100644 --- a/SecondaryDisplayLauncher/res/values-ar/strings.xml +++ b/SecondaryDisplayLauncher/res/values-ar/strings.xml @@ -19,7 +19,7 @@ - "تعذَّر تشغيل النشاط." + "تعذَّر تفعيل النشاط." "إضافة اختصار التطبيق" - "تعيين الخلفية" + "ضبط الخلفية" diff --git a/SecondaryDisplayLauncher/res/values-en-rCA/strings.xml b/SecondaryDisplayLauncher/res/values-en-rCA/strings.xml new file mode 100644 index 0000000000..8d8c419b2d --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-en-rCA/strings.xml @@ -0,0 +1,25 @@ + + + + + "Couldn\'t launch the activity" + "Add app shortcut" + "Set wallpaper" + diff --git a/SecondaryDisplayLauncher/res/values-en-rXC/strings.xml b/SecondaryDisplayLauncher/res/values-en-rXC/strings.xml new file mode 100644 index 0000000000..da69193348 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-en-rXC/strings.xml @@ -0,0 +1,25 @@ + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎Couldn\'t launch the activity‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‏‏‎‏‏‎Add app shortcut‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎Set wallpaper‎‏‎‎‏‎" + diff --git a/quickstep/res/values-af/config.xml b/quickstep/res/values-af/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-af/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-af/strings.xml b/quickstep/res/values-af/strings.xml index 64b8e2c3b1..9a4f265234 100644 --- a/quickstep/res/values-af/strings.xml +++ b/quickstep/res/values-af/strings.xml @@ -22,7 +22,6 @@ "Verdeelde skerm" "Speld vas" "Vormvry" - "Oorsig" "Geen onlangse items nie" "Maak toe" "Programgebruikinstellings" diff --git a/quickstep/res/values-am/config.xml b/quickstep/res/values-am/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-am/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-am/strings.xml b/quickstep/res/values-am/strings.xml index 3daa92226c..1cf0e8c267 100644 --- a/quickstep/res/values-am/strings.xml +++ b/quickstep/res/values-am/strings.xml @@ -22,7 +22,6 @@ "የተከፈለ ማያ ገጽ" "ሰካ" "ነጻ ቅጽ" - "ማጠቃለያ" "ምንም የቅርብ ጊዜ ንጥሎች የሉም" "ዝጋ" "የመተግበሪያ አጠቃቀም ቅንብሮች" diff --git a/quickstep/res/values-ar/config.xml b/quickstep/res/values-ar/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ar/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ar/strings.xml b/quickstep/res/values-ar/strings.xml index b036bc1ebd..051bcb8700 100644 --- a/quickstep/res/values-ar/strings.xml +++ b/quickstep/res/values-ar/strings.xml @@ -22,7 +22,6 @@ "تقسيم الشاشة" "تثبيت" "شكل مجاني" - "نظرة عامة" "ليست هناك عناصر تم استخدامها مؤخرًا" "إغلاق" "إعدادات استخدام التطبيق" diff --git a/quickstep/res/values-as/config.xml b/quickstep/res/values-as/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-as/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-as/strings.xml b/quickstep/res/values-as/strings.xml index c188493e59..dbbf213933 100644 --- a/quickstep/res/values-as/strings.xml +++ b/quickstep/res/values-as/strings.xml @@ -22,7 +22,6 @@ "বিভাজিত স্ক্ৰীণ" "পিন" "Freeform" - "অৱলোকন" "কোনো শেহতীয়া বস্তু নাই" "বন্ধ কৰক" "এপে ব্যৱহাৰ কৰা ডেটাৰ ছেটিংসমূহ" diff --git a/quickstep/res/values-az/config.xml b/quickstep/res/values-az/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-az/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-az/strings.xml b/quickstep/res/values-az/strings.xml index aa8fa536ac..7c333c6fd9 100644 --- a/quickstep/res/values-az/strings.xml +++ b/quickstep/res/values-az/strings.xml @@ -22,7 +22,6 @@ "Bölünmüş ekran" "Sancın" "Sərbəst rejim" - "İcmal" "Son elementlər yoxdur" "Bağlayın" "Tətbiq istifadə ayarları" diff --git a/quickstep/res/values-b+sr+Latn/config.xml b/quickstep/res/values-b+sr+Latn/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-b+sr+Latn/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-b+sr+Latn/strings.xml b/quickstep/res/values-b+sr+Latn/strings.xml index fbbe9d2dc5..45a707fa1d 100644 --- a/quickstep/res/values-b+sr+Latn/strings.xml +++ b/quickstep/res/values-b+sr+Latn/strings.xml @@ -22,7 +22,6 @@ "Podeljeni ekran" "Zakači" "Slobodni oblik" - "Pregled" "Nema nedavnih stavki" "Zatvori" "Podešavanja korišćenja aplikacije" diff --git a/quickstep/res/values-be/config.xml b/quickstep/res/values-be/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-be/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-be/strings.xml b/quickstep/res/values-be/strings.xml index c4a277267c..8af6021493 100644 --- a/quickstep/res/values-be/strings.xml +++ b/quickstep/res/values-be/strings.xml @@ -22,7 +22,6 @@ "Падзяліць экран" "Замацаваць" "Адвольная форма" - "Агляд" "Няма новых элементаў" "Закрыць" "Налады выкарыстання праграмы" diff --git a/quickstep/res/values-bg/config.xml b/quickstep/res/values-bg/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-bg/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-bg/strings.xml b/quickstep/res/values-bg/strings.xml index 9e8c54a9c7..58fe8f7ac9 100644 --- a/quickstep/res/values-bg/strings.xml +++ b/quickstep/res/values-bg/strings.xml @@ -22,7 +22,6 @@ "Разделен екран" "Фиксиране" "Свободна форма" - "Общ преглед" "Няма скорошни елементи" "Затваряне" "Настройки за използването на приложенията" diff --git a/quickstep/res/values-bn/config.xml b/quickstep/res/values-bn/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-bn/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-bn/strings.xml b/quickstep/res/values-bn/strings.xml index 57f92e5a0c..46a7614c51 100644 --- a/quickstep/res/values-bn/strings.xml +++ b/quickstep/res/values-bn/strings.xml @@ -22,7 +22,6 @@ "স্ক্রিন স্প্লিট করুন" "পিন করুন" "ফ্রি-ফর্ম" - "এক নজরে" "কোনো সাম্প্রতিক আইটেম নেই" "বন্ধ করুন" "অ্যাপ ব্যবহারের সেটিংস" diff --git a/quickstep/res/values-bs/config.xml b/quickstep/res/values-bs/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-bs/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-bs/strings.xml b/quickstep/res/values-bs/strings.xml index 7968f7cc68..6d1ce43559 100644 --- a/quickstep/res/values-bs/strings.xml +++ b/quickstep/res/values-bs/strings.xml @@ -22,7 +22,6 @@ "Način rada podijeljenog ekrana" "Zakači" "Slobodan oblik" - "Pregled" "Nema nedavnih stavki" "Zatvaranje" "Postavke korištenja aplikacije" diff --git a/quickstep/res/values-ca/config.xml b/quickstep/res/values-ca/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ca/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ca/strings.xml b/quickstep/res/values-ca/strings.xml index 6420aa8cb8..cf1f8c0486 100644 --- a/quickstep/res/values-ca/strings.xml +++ b/quickstep/res/values-ca/strings.xml @@ -22,7 +22,6 @@ "Pantalla dividida" "Fixa" "Format lliure" - "Aplicacions recents" "No hi ha cap element recent" "Tanca" "Configuració d\'ús d\'aplicacions" diff --git a/quickstep/res/values-cs/config.xml b/quickstep/res/values-cs/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-cs/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-cs/strings.xml b/quickstep/res/values-cs/strings.xml index 194ff87dc5..4dabea8d93 100644 --- a/quickstep/res/values-cs/strings.xml +++ b/quickstep/res/values-cs/strings.xml @@ -22,7 +22,6 @@ "Rozdělená obrazovka" "PIN" "Neomezený režim" - "Přehled" "Žádné nedávné položky" "Zavřít" "Nastavení využití aplikací" diff --git a/quickstep/res/values-da/config.xml b/quickstep/res/values-da/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-da/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-da/strings.xml b/quickstep/res/values-da/strings.xml index b43a76eb94..40c0bbea64 100644 --- a/quickstep/res/values-da/strings.xml +++ b/quickstep/res/values-da/strings.xml @@ -22,7 +22,6 @@ "Opdel skærm" "Fastgør" "Frit format" - "Oversigt" "Ingen nye elementer" "Luk" "Indstillinger for appforbrug" diff --git a/quickstep/res/values-de/config.xml b/quickstep/res/values-de/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-de/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-de/strings.xml b/quickstep/res/values-de/strings.xml index 449cc8c11d..7eb7e1338a 100644 --- a/quickstep/res/values-de/strings.xml +++ b/quickstep/res/values-de/strings.xml @@ -22,7 +22,6 @@ "Splitscreen" "Anpinnen" "Freeform-Modus" - "Übersicht" "Keine kürzlich verwendeten Elemente" "Schließen" "Einstellungen zur App-Nutzung" diff --git a/quickstep/res/values-el/config.xml b/quickstep/res/values-el/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-el/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-el/strings.xml b/quickstep/res/values-el/strings.xml index 87268df749..c65a8849d2 100644 --- a/quickstep/res/values-el/strings.xml +++ b/quickstep/res/values-el/strings.xml @@ -22,7 +22,6 @@ "Διαχωρισμός οθόνης" "Καρφίτσωμα" "Ελεύθερη μορφή" - "Επισκόπηση" "Δεν υπάρχουν πρόσφατα στοιχεία" "Κλείσιμο" "Ρυθμίσεις χρήσης εφαρμογής" diff --git a/quickstep/res/values-en-rAU/config.xml b/quickstep/res/values-en-rAU/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-en-rAU/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-en-rAU/strings.xml b/quickstep/res/values-en-rAU/strings.xml index 2d1418e5f4..1405b614d4 100644 --- a/quickstep/res/values-en-rAU/strings.xml +++ b/quickstep/res/values-en-rAU/strings.xml @@ -22,7 +22,6 @@ "Split screen" "Pin" "Freeform" - "Overview" "No recent items" "Close" "App usage settings" diff --git a/quickstep/res/values-en-rCA/config.xml b/quickstep/res/values-en-rCA/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-en-rCA/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-en-rCA/strings.xml b/quickstep/res/values-en-rCA/strings.xml new file mode 100644 index 0000000000..1405b614d4 --- /dev/null +++ b/quickstep/res/values-en-rCA/strings.xml @@ -0,0 +1,36 @@ + + + + + "Split screen" + "Pin" + "Freeform" + "No recent items" + "Close" + "App usage settings" + "Clear all" + "Recent apps" + "%1$s, %2$s" + "< 1 minute" + "%1$s left today" + "App suggestions" + "All apps" + "Your predicted apps" + diff --git a/quickstep/res/values-en-rGB/config.xml b/quickstep/res/values-en-rGB/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-en-rGB/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-en-rGB/strings.xml b/quickstep/res/values-en-rGB/strings.xml index 2d1418e5f4..1405b614d4 100644 --- a/quickstep/res/values-en-rGB/strings.xml +++ b/quickstep/res/values-en-rGB/strings.xml @@ -22,7 +22,6 @@ "Split screen" "Pin" "Freeform" - "Overview" "No recent items" "Close" "App usage settings" diff --git a/quickstep/res/values-en-rIN/config.xml b/quickstep/res/values-en-rIN/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-en-rIN/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-en-rIN/strings.xml b/quickstep/res/values-en-rIN/strings.xml index 2d1418e5f4..1405b614d4 100644 --- a/quickstep/res/values-en-rIN/strings.xml +++ b/quickstep/res/values-en-rIN/strings.xml @@ -22,7 +22,6 @@ "Split screen" "Pin" "Freeform" - "Overview" "No recent items" "Close" "App usage settings" diff --git a/quickstep/res/values-en-rXC/config.xml b/quickstep/res/values-en-rXC/config.xml new file mode 100644 index 0000000000..c3e7d6fb59 --- /dev/null +++ b/quickstep/res/values-en-rXC/config.xml @@ -0,0 +1,22 @@ + + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity‎‏‎‎‏‎" + + diff --git a/quickstep/res/values-en-rXC/strings.xml b/quickstep/res/values-en-rXC/strings.xml new file mode 100644 index 0000000000..2803d6d3f1 --- /dev/null +++ b/quickstep/res/values-en-rXC/strings.xml @@ -0,0 +1,36 @@ + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‎‎‏‎‎Split screen‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‎‏‎‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‏‏‎‏‎‎‏‎‎Pin‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎Freeform‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‏‎No recent items‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎Close‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‏‎‏‎‏‎‏‎App usage settings‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎Clear all‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎Recent apps‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎, ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‎< 1 minute‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ left today‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎App suggestions‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‏‏‏‎All apps‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎Your predicted apps‎‏‎‎‏‎" + diff --git a/quickstep/res/values-es-rUS/config.xml b/quickstep/res/values-es-rUS/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-es-rUS/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-es-rUS/strings.xml b/quickstep/res/values-es-rUS/strings.xml index 5f5d0bdfe9..04176380ee 100644 --- a/quickstep/res/values-es-rUS/strings.xml +++ b/quickstep/res/values-es-rUS/strings.xml @@ -22,7 +22,6 @@ "Pantalla dividida" "Fijar" "Formato libre" - "Recientes" "No hay elementos recientes" "Cerrar" "Configuración de uso de la app" diff --git a/quickstep/res/values-es/config.xml b/quickstep/res/values-es/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-es/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-es/strings.xml b/quickstep/res/values-es/strings.xml index 329286b3bf..9618a33760 100644 --- a/quickstep/res/values-es/strings.xml +++ b/quickstep/res/values-es/strings.xml @@ -22,8 +22,7 @@ "Dividir pantalla" "Fijar" "Formato libre" - "Aplicaciones recientes" - "No hay elementos recientes" + "No hay nada reciente" "Cerrar" "Ajustes de uso de la aplicación" "Borrar todo" diff --git a/quickstep/res/values-et/config.xml b/quickstep/res/values-et/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-et/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-et/strings.xml b/quickstep/res/values-et/strings.xml index 0577b0f562..a6d179e6f8 100644 --- a/quickstep/res/values-et/strings.xml +++ b/quickstep/res/values-et/strings.xml @@ -22,7 +22,6 @@ "Jagatud ekraan" "Kinnita" "Vabavorm" - "Ülevaade" "Hiljutisi üksusi pole" "Sule" "Rakenduse kasutuse seaded" diff --git a/quickstep/res/values-eu/config.xml b/quickstep/res/values-eu/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-eu/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-eu/strings.xml b/quickstep/res/values-eu/strings.xml index c2d149e362..424ce88379 100644 --- a/quickstep/res/values-eu/strings.xml +++ b/quickstep/res/values-eu/strings.xml @@ -22,7 +22,6 @@ "Zatitu pantaila" "Ainguratu" "Modu librea" - "Ikuspegi orokorra" "Ez dago azkenaldi honetako ezer" "Itxi" "Aplikazioen erabileraren ezarpenak" diff --git a/quickstep/res/values-fa/config.xml b/quickstep/res/values-fa/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-fa/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-fa/strings.xml b/quickstep/res/values-fa/strings.xml index cc26695a60..0aab8ba2ed 100644 --- a/quickstep/res/values-fa/strings.xml +++ b/quickstep/res/values-fa/strings.xml @@ -22,7 +22,6 @@ "تقسیم صفحه" "پین" "Freeform" - "نمای کلی" "بدون موارد اخیر" "بستن" "تنظیمات استفاده از برنامه" diff --git a/quickstep/res/values-fi/config.xml b/quickstep/res/values-fi/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-fi/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-fi/strings.xml b/quickstep/res/values-fi/strings.xml index f43433e3a1..cebfaa7834 100644 --- a/quickstep/res/values-fi/strings.xml +++ b/quickstep/res/values-fi/strings.xml @@ -22,7 +22,6 @@ "Jaettu näyttö" "Kiinnitä" "Vapaamuotoinen" - "Viimeisimmät" "Ei viimeaikaisia kohteita" "Sulje" "Sovelluksen käyttöasetukset" diff --git a/quickstep/res/values-fr-rCA/config.xml b/quickstep/res/values-fr-rCA/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-fr-rCA/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-fr-rCA/strings.xml b/quickstep/res/values-fr-rCA/strings.xml index a9a1cffb6d..dd815b2d4b 100644 --- a/quickstep/res/values-fr-rCA/strings.xml +++ b/quickstep/res/values-fr-rCA/strings.xml @@ -22,7 +22,6 @@ "Écran divisé" "Épingler" "Forme libre" - "Aperçu" "Aucun élément récent" "Fermer" "Paramètres d\'utilisation de l\'application" diff --git a/quickstep/res/values-fr/config.xml b/quickstep/res/values-fr/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-fr/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-fr/strings.xml b/quickstep/res/values-fr/strings.xml index 01dcff202d..4ad572752c 100644 --- a/quickstep/res/values-fr/strings.xml +++ b/quickstep/res/values-fr/strings.xml @@ -22,7 +22,6 @@ "Écran partagé" "Épingler" "Format libre" - "Aperçu" "Aucun élément récent" "Fermer" "Paramètres de consommation de l\'application" diff --git a/quickstep/res/values-gl/config.xml b/quickstep/res/values-gl/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-gl/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-gl/strings.xml b/quickstep/res/values-gl/strings.xml index 356d10d5da..8051134b4c 100644 --- a/quickstep/res/values-gl/strings.xml +++ b/quickstep/res/values-gl/strings.xml @@ -22,7 +22,6 @@ "Pantalla dividida" "Fixar" "Forma libre" - "Visión xeral" "Non hai elementos recentes" "Pecha a aplicación" "Configuración do uso de aplicacións" diff --git a/quickstep/res/values-gu/config.xml b/quickstep/res/values-gu/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-gu/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-gu/strings.xml b/quickstep/res/values-gu/strings.xml index 660ad87acc..a0e60d3bc0 100644 --- a/quickstep/res/values-gu/strings.xml +++ b/quickstep/res/values-gu/strings.xml @@ -22,7 +22,6 @@ "સ્ક્રીનને વિભાજિત કરો" "પિન કરો" "ફ્રિફોર્મ" - "ઝલક" "તાજેતરની કોઈ આઇટમ નથી" "બંધ કરો" "ઍપ વપરાશનું સેટિંગ" diff --git a/quickstep/res/values-hi/config.xml b/quickstep/res/values-hi/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-hi/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-hi/strings.xml b/quickstep/res/values-hi/strings.xml index 387d509587..bddaafdacc 100644 --- a/quickstep/res/values-hi/strings.xml +++ b/quickstep/res/values-hi/strings.xml @@ -22,7 +22,6 @@ "स्क्रीन को दो हिस्सों में बाँटना (स्प्लिट स्क्रीन)" "पिन करना" "फ़्रीफ़ॉर्म" - "खास जानकारी" "हाल ही में इस्तेमाल किया गया कोई ऐप्लिकेशन नहीं है" "बंद करें" "ऐप्लिकेशन इस्तेमाल की सेटिंग" diff --git a/quickstep/res/values-hr/config.xml b/quickstep/res/values-hr/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-hr/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-hr/strings.xml b/quickstep/res/values-hr/strings.xml index ab56e57b50..234e7335f2 100644 --- a/quickstep/res/values-hr/strings.xml +++ b/quickstep/res/values-hr/strings.xml @@ -22,7 +22,6 @@ "Podijeljeni zaslon" "Prikvači" "Slobodni oblik" - "Pregled" "Nema nedavnih stavki" "Zatvori" "Postavke upotrebe aplikacija" diff --git a/quickstep/res/values-hu/config.xml b/quickstep/res/values-hu/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-hu/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-hu/strings.xml b/quickstep/res/values-hu/strings.xml index dec6ea0158..391ef4fd53 100644 --- a/quickstep/res/values-hu/strings.xml +++ b/quickstep/res/values-hu/strings.xml @@ -22,7 +22,6 @@ "Osztott képernyő" "Rögzítés" "Szabad forma" - "Áttekintés" "Nincsenek mostanában használt elemek" "Bezárás" "Alkalmazáshasználati beállítások" diff --git a/quickstep/res/values-hy/config.xml b/quickstep/res/values-hy/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-hy/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-hy/strings.xml b/quickstep/res/values-hy/strings.xml index 1656a1444d..5ad522a3ae 100644 --- a/quickstep/res/values-hy/strings.xml +++ b/quickstep/res/values-hy/strings.xml @@ -22,7 +22,6 @@ "Տրոհել էկրանը" "Ամրացնել" "Կամայական ձև" - "Ընդհանուր տեղեկություններ" "Վերջին տարրեր չկան" "Փակել" "Հավելվածի օգտագործման կարգավորումներ" diff --git a/quickstep/res/values-in/config.xml b/quickstep/res/values-in/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-in/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-in/strings.xml b/quickstep/res/values-in/strings.xml index 6824d16b40..30bd0de193 100644 --- a/quickstep/res/values-in/strings.xml +++ b/quickstep/res/values-in/strings.xml @@ -22,7 +22,6 @@ "Layar terpisah" "Pasang pin" "Format bebas" - "Ringkasan" "Tidak ada item yang baru dibuka" "Tutup" "Setelan penggunaan aplikasi" diff --git a/quickstep/res/values-is/config.xml b/quickstep/res/values-is/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-is/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-is/strings.xml b/quickstep/res/values-is/strings.xml index f60a2c6802..9eaafc217c 100644 --- a/quickstep/res/values-is/strings.xml +++ b/quickstep/res/values-is/strings.xml @@ -22,7 +22,6 @@ "Skipta skjá" "Festa" "Frjálst snið" - "Yfirlit" "Engin nýleg atriði" "Loka" "Notkunarstillingar forrits" diff --git a/quickstep/res/values-it/config.xml b/quickstep/res/values-it/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-it/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-it/strings.xml b/quickstep/res/values-it/strings.xml index 559fdb4b6e..4f799b47b6 100644 --- a/quickstep/res/values-it/strings.xml +++ b/quickstep/res/values-it/strings.xml @@ -22,7 +22,6 @@ "Schermo diviso" "Blocca" "Forma libera" - "Panoramica" "Nessun elemento recente" "Chiudi" "Impostazioni di utilizzo delle app" diff --git a/quickstep/res/values-iw/config.xml b/quickstep/res/values-iw/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-iw/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-iw/strings.xml b/quickstep/res/values-iw/strings.xml index 58cab4e0a9..42e2bf39dc 100644 --- a/quickstep/res/values-iw/strings.xml +++ b/quickstep/res/values-iw/strings.xml @@ -22,7 +22,6 @@ "מסך מפוצל" "הצמדה" "מצב חופשי" - "מסכים אחרונים" "אין פריטים אחרונים" "סגירה" "הגדרות שימוש באפליקציה" diff --git a/quickstep/res/values-ja/config.xml b/quickstep/res/values-ja/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ja/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ja/strings.xml b/quickstep/res/values-ja/strings.xml index d3fecde208..b8a4c775e2 100644 --- a/quickstep/res/values-ja/strings.xml +++ b/quickstep/res/values-ja/strings.xml @@ -22,7 +22,6 @@ "分割画面" "固定" "フリーフォーム" - "概要" "最近のアイテムはありません" "閉じる" "アプリの使用状況の設定" diff --git a/quickstep/res/values-ka/config.xml b/quickstep/res/values-ka/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ka/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ka/strings.xml b/quickstep/res/values-ka/strings.xml index 67b03a754f..efa68576b5 100644 --- a/quickstep/res/values-ka/strings.xml +++ b/quickstep/res/values-ka/strings.xml @@ -22,7 +22,6 @@ "ეკრანის გაყოფა" "ჩამაგრება" "თავისუფალი ფორმა" - "მიმოხილვა" "ბოლოს გამოყენებული ერთეულები არ არის" "დახურვა" "აპების გამოყენების პარამეტრები" diff --git a/quickstep/res/values-kk/config.xml b/quickstep/res/values-kk/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-kk/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-kk/strings.xml b/quickstep/res/values-kk/strings.xml index a9fcbedb20..759da276f0 100644 --- a/quickstep/res/values-kk/strings.xml +++ b/quickstep/res/values-kk/strings.xml @@ -22,7 +22,6 @@ "Экранды бөлу" "Бекіту" "Еркін форма" - "Шолу" "Соңғы элементтер жоқ" "Жабу" "Қолданбаны пайдалану параметрлері" diff --git a/quickstep/res/values-km/config.xml b/quickstep/res/values-km/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-km/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-km/strings.xml b/quickstep/res/values-km/strings.xml index c422041e7a..5961a5c788 100644 --- a/quickstep/res/values-km/strings.xml +++ b/quickstep/res/values-km/strings.xml @@ -22,7 +22,6 @@ "មុខងារ​បំបែកអេក្រង់" "ដៅ" "មុខងារទម្រង់សេរី" - "ទិដ្ឋភាពរួម" "មិនមានធាតុថ្មីៗទេ" "បិទ" "ការកំណត់​ការប្រើប្រាស់​កម្មវិធី" diff --git a/quickstep/res/values-kn/config.xml b/quickstep/res/values-kn/config.xml new file mode 100644 index 0000000000..e5da1fa94e --- /dev/null +++ b/quickstep/res/values-kn/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxಚಟುವಟಿಕೆ" + + diff --git a/quickstep/res/values-kn/strings.xml b/quickstep/res/values-kn/strings.xml index 52782610b9..3a75ea4c61 100644 --- a/quickstep/res/values-kn/strings.xml +++ b/quickstep/res/values-kn/strings.xml @@ -22,7 +22,6 @@ "ಪರದೆಯನ್ನು ಬೇರ್ಪಡಿಸಿ" "ಪಿನ್ ಮಾಡಿ" "ಮುಕ್ತಸ್ವರೂಪ" - "ಅವಲೋಕನ" "ಯಾವುದೇ ಇತ್ತೀಚಿನ ಐಟಂಗಳಿಲ್ಲ" "ಮುಚ್ಚಿ" "ಆ್ಯಪ್‌ ಬಳಕೆಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳು" diff --git a/quickstep/res/values-ko/config.xml b/quickstep/res/values-ko/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ko/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ko/strings.xml b/quickstep/res/values-ko/strings.xml index 7a8e6a1f9a..02dec4a12e 100644 --- a/quickstep/res/values-ko/strings.xml +++ b/quickstep/res/values-ko/strings.xml @@ -22,7 +22,6 @@ "화면 분할" "고정" "자유 형식" - "최근 사용" "최근 항목이 없습니다." "닫기" "앱 사용 설정" diff --git a/quickstep/res/values-ky/config.xml b/quickstep/res/values-ky/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ky/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ky/strings.xml b/quickstep/res/values-ky/strings.xml index 4018e57dcc..02bb7e4b86 100644 --- a/quickstep/res/values-ky/strings.xml +++ b/quickstep/res/values-ky/strings.xml @@ -22,7 +22,6 @@ "Экранды бөлүү" "Кадап коюу" "Эркин форма режими" - "Сереп салуу" "Акыркы колдонмолор жок" "Жабуу" "Колдонмону пайдалануу жөндөөлөрү" diff --git a/quickstep/res/values-lo/config.xml b/quickstep/res/values-lo/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-lo/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-lo/strings.xml b/quickstep/res/values-lo/strings.xml index e406b7083d..a9b1fc65df 100644 --- a/quickstep/res/values-lo/strings.xml +++ b/quickstep/res/values-lo/strings.xml @@ -22,7 +22,6 @@ "ແບ່ງໜ້າຈໍ" "ປັກໝຸດ" "ຮູບແບບອິດສະຫລະ" - "ພາບຮວມ" "ບໍ່ມີລາຍການຫຼ້າສຸດ" "ປິດ" "ການຕັ້ງຄ່າການນຳໃຊ້ແອັບ" diff --git a/quickstep/res/values-lt/config.xml b/quickstep/res/values-lt/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-lt/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-lt/strings.xml b/quickstep/res/values-lt/strings.xml index ed1fc373e2..fb805cd19e 100644 --- a/quickstep/res/values-lt/strings.xml +++ b/quickstep/res/values-lt/strings.xml @@ -22,7 +22,6 @@ "Skaidyti ekraną" "Prisegti" "Laisva forma" - "Apžvalga" "Nėra jokių naujausių elementų" "Uždaryti" "Programos naudojimo nustatymai" diff --git a/quickstep/res/values-lv/config.xml b/quickstep/res/values-lv/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-lv/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-lv/strings.xml b/quickstep/res/values-lv/strings.xml index 85ce0e017d..2a7061d4be 100644 --- a/quickstep/res/values-lv/strings.xml +++ b/quickstep/res/values-lv/strings.xml @@ -22,7 +22,6 @@ "Sadalīt ekrānu" "Piespraust" "Brīva forma" - "Pārskats" "Nav nesenu vienumu." "Aizvērt" "Lietotņu izmantošanas iestatījumi" diff --git a/quickstep/res/values-mk/config.xml b/quickstep/res/values-mk/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-mk/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-mk/strings.xml b/quickstep/res/values-mk/strings.xml index 9f11521df3..41f5e9a76a 100644 --- a/quickstep/res/values-mk/strings.xml +++ b/quickstep/res/values-mk/strings.xml @@ -22,11 +22,10 @@ "Поделен екран" "Прикачување" "Freeform" - "Преглед" "Нема неодамнешни ставки" "Затвори" "Поставки за користење на апликациите" - "Исчисти ги сите" + "Избриши ги сите" "Неодамнешни апликации" "%1$s, %2$s" "< 1 минута" diff --git a/quickstep/res/values-ml/config.xml b/quickstep/res/values-ml/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ml/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ml/strings.xml b/quickstep/res/values-ml/strings.xml index 2e02e80fa8..bf5af52f31 100644 --- a/quickstep/res/values-ml/strings.xml +++ b/quickstep/res/values-ml/strings.xml @@ -22,7 +22,6 @@ "സ്‌ക്രീൻ വിഭജിക്കുക" "പിൻ ചെയ്യുക" "ഫ്രീഫോം" - "അവലോകനം" "സമീപകാല ഇനങ്ങൾ ഒന്നുമില്ല" "അവസാനിപ്പിക്കുക" "ആപ്പ് ഉപയോഗ ക്രമീകരണം" diff --git a/quickstep/res/values-mn/config.xml b/quickstep/res/values-mn/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-mn/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-mn/strings.xml b/quickstep/res/values-mn/strings.xml index 5de8602022..658c93e7fb 100644 --- a/quickstep/res/values-mn/strings.xml +++ b/quickstep/res/values-mn/strings.xml @@ -22,7 +22,6 @@ "Дэлгэцийг хуваах" "Тогтоох" "Чөлөөтэй хувьсах" - "Тойм" "Сүүлийн үеийн зүйл алга" "Хаах" "Апп ашиглалтын тохиргоо" diff --git a/quickstep/res/values-mr/config.xml b/quickstep/res/values-mr/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-mr/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-mr/strings.xml b/quickstep/res/values-mr/strings.xml index cccece749c..bbabdfe23b 100644 --- a/quickstep/res/values-mr/strings.xml +++ b/quickstep/res/values-mr/strings.xml @@ -22,7 +22,6 @@ "विभाजित स्क्रीन" "पिन करा" "फ्रीफॉर्म" - "अवलोकन" "कोणतेही अलीकडील आयटम नाहीत" "बंद" "अ‍ॅप वापर सेटिंग्ज" diff --git a/quickstep/res/values-ms/config.xml b/quickstep/res/values-ms/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ms/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ms/strings.xml b/quickstep/res/values-ms/strings.xml index 2542963769..90306580c8 100644 --- a/quickstep/res/values-ms/strings.xml +++ b/quickstep/res/values-ms/strings.xml @@ -22,7 +22,6 @@ "Skrin pisah" "Semat" "Bentuk bebas" - "Ikhtisar" "Tiada item terbaharu" "Tutup" "Tetapan penggunaan apl" diff --git a/quickstep/res/values-my/config.xml b/quickstep/res/values-my/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-my/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-my/strings.xml b/quickstep/res/values-my/strings.xml index 7683e05990..1799e24893 100644 --- a/quickstep/res/values-my/strings.xml +++ b/quickstep/res/values-my/strings.xml @@ -22,7 +22,6 @@ "မျက်နှာပြင် ခွဲ၍ပြသခြင်း" "ပင်ထိုးခြင်း" "အလွတ်ပုံစံ" - "အနှစ်ချုပ်" "မကြာမီကဖွင့်ထားသည်များ မရှိပါ" "ပိတ်ရန်" "အက်ပ်အသုံးပြုမှု ဆက်တင်များ" diff --git a/quickstep/res/values-nb/config.xml b/quickstep/res/values-nb/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-nb/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-nb/strings.xml b/quickstep/res/values-nb/strings.xml index 01bbb6a75d..48574806d9 100644 --- a/quickstep/res/values-nb/strings.xml +++ b/quickstep/res/values-nb/strings.xml @@ -22,7 +22,6 @@ "Delt skjerm" "Fest" "Fritt format" - "Oversikt" "Ingen nylige elementer" "Lukk" "Innstillinger for appbruk" diff --git a/quickstep/res/values-ne/config.xml b/quickstep/res/values-ne/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ne/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ne/strings.xml b/quickstep/res/values-ne/strings.xml index 60e9bd5313..ee0aac2068 100644 --- a/quickstep/res/values-ne/strings.xml +++ b/quickstep/res/values-ne/strings.xml @@ -22,7 +22,6 @@ "स्क्रिन विभाजन गर्नुहोस्" "पिन गर्नुहोस्" "फ्रिफर्म" - "परिदृश्य" "हालसालैको कुनै पनि वस्तु छैन" "बन्द गर्नुहोस्" "अनुप्रयोगको उपयोगका सेटिङहरू" diff --git a/quickstep/res/values-nl/config.xml b/quickstep/res/values-nl/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-nl/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-nl/strings.xml b/quickstep/res/values-nl/strings.xml index 8032567e1c..fb0219072a 100644 --- a/quickstep/res/values-nl/strings.xml +++ b/quickstep/res/values-nl/strings.xml @@ -22,7 +22,6 @@ "Gesplitst scherm" "Vastzetten" "Vrije vorm" - "Overzicht" "Geen recente items" "Sluiten" "Instellingen voor app-gebruik" diff --git a/quickstep/res/values-or/config.xml b/quickstep/res/values-or/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-or/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-or/strings.xml b/quickstep/res/values-or/strings.xml index 2ebec4e7c7..202c5d7355 100644 --- a/quickstep/res/values-or/strings.xml +++ b/quickstep/res/values-or/strings.xml @@ -22,7 +22,6 @@ "ସ୍କ୍ରୀନ୍‌କୁ ଭାଗ କରନ୍ତୁ" "ପିନ୍‍" "ଫ୍ରିଫର୍ମ" - "ସଂକ୍ଷିପ୍ତ ବିବରଣ" "କୌଣସି ସାମ୍ପ୍ରତିକ ଆଇଟମ୍ ନାହିଁ" "ବନ୍ଦ କରନ୍ତୁ" "ଆପ୍‍ ବ୍ୟବହାର ସେଟିଂସ୍‍" diff --git a/quickstep/res/values-pa/config.xml b/quickstep/res/values-pa/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-pa/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-pa/strings.xml b/quickstep/res/values-pa/strings.xml index 58c0d2afa4..ed77e2f31b 100644 --- a/quickstep/res/values-pa/strings.xml +++ b/quickstep/res/values-pa/strings.xml @@ -22,7 +22,6 @@ "ਸਪਲਿਟ ਸਕ੍ਰੀਨ" "ਪਿੰਨ ਕਰੋ" "ਫ੍ਰੀਫਾਰਮ" - "ਰੂਪ-ਰੇਖਾ" "ਕੋਈ ਹਾਲੀਆ ਆਈਟਮਾਂ ਨਹੀਂ" "ਬੰਦ ਕਰੋ" "ਐਪ ਵਰਤੋਂ ਦੀਆਂ ਸੈਟਿੰਗਾਂ" diff --git a/quickstep/res/values-pl/config.xml b/quickstep/res/values-pl/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-pl/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-pl/strings.xml b/quickstep/res/values-pl/strings.xml index d83160dffb..eac032f882 100644 --- a/quickstep/res/values-pl/strings.xml +++ b/quickstep/res/values-pl/strings.xml @@ -22,7 +22,6 @@ "Podziel ekran" "Przypnij" "Tryb dowolny" - "Przegląd" "Brak ostatnich elementów" "Zamknij" "Ustawienia użycia aplikacji" diff --git a/quickstep/res/values-pt-rPT/config.xml b/quickstep/res/values-pt-rPT/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-pt-rPT/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-pt-rPT/strings.xml b/quickstep/res/values-pt-rPT/strings.xml index 2fd34d636c..9272afac8b 100644 --- a/quickstep/res/values-pt-rPT/strings.xml +++ b/quickstep/res/values-pt-rPT/strings.xml @@ -22,7 +22,6 @@ "Ecrã dividido" "Fixar" "Forma livre" - "Vista geral" "Nenhum item recente" "Fechar" "Definições de utilização de aplicações" diff --git a/quickstep/res/values-pt/config.xml b/quickstep/res/values-pt/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-pt/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-pt/strings.xml b/quickstep/res/values-pt/strings.xml index 673dfe2e73..9dd17199fb 100644 --- a/quickstep/res/values-pt/strings.xml +++ b/quickstep/res/values-pt/strings.xml @@ -22,7 +22,6 @@ "Tela dividida" "Fixar" "Forma livre" - "Visão geral" "Nenhum item recente" "Fechar" "Configurações de uso do app" diff --git a/quickstep/res/values-ro/config.xml b/quickstep/res/values-ro/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ro/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ro/strings.xml b/quickstep/res/values-ro/strings.xml index 2ac783eb0e..19cab617ec 100644 --- a/quickstep/res/values-ro/strings.xml +++ b/quickstep/res/values-ro/strings.xml @@ -22,7 +22,6 @@ "Ecran împărțit" "Fixați" "Formă liberă" - "Recente" "Niciun element recent" "Închideți" "Setări de utilizare a aplicației" diff --git a/quickstep/res/values-ru/config.xml b/quickstep/res/values-ru/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ru/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ru/strings.xml b/quickstep/res/values-ru/strings.xml index 5dd89a644b..ecaf248098 100644 --- a/quickstep/res/values-ru/strings.xml +++ b/quickstep/res/values-ru/strings.xml @@ -22,7 +22,6 @@ "Разделить экран" "Блокировать" "Произвольная форма" - "Обзор" "Здесь пока ничего нет." "Закрыть" "Настройки использования приложения" diff --git a/quickstep/res/values-si/config.xml b/quickstep/res/values-si/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-si/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-si/strings.xml b/quickstep/res/values-si/strings.xml index f6584c4dca..917de7bd6c 100644 --- a/quickstep/res/values-si/strings.xml +++ b/quickstep/res/values-si/strings.xml @@ -22,7 +22,6 @@ "බෙදුම් තිරය" "අමුණන්න" "Freeform" - "දළ විශ්ලේෂණය" "මෑත අයිතම නැත" "වසන්න" "යෙදුම් භාවිත සැකසීම්" diff --git a/quickstep/res/values-sk/config.xml b/quickstep/res/values-sk/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-sk/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-sk/strings.xml b/quickstep/res/values-sk/strings.xml index 8a9c7365f2..c7003bd892 100644 --- a/quickstep/res/values-sk/strings.xml +++ b/quickstep/res/values-sk/strings.xml @@ -22,7 +22,6 @@ "Rozdeliť obrazovku" "Pripnúť" "Voľný režim" - "Prehľad" "Žiadne nedávne položky" "Zavrieť" "Nastavenia využívania aplikácie" diff --git a/quickstep/res/values-sl/config.xml b/quickstep/res/values-sl/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-sl/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-sl/strings.xml b/quickstep/res/values-sl/strings.xml index 15f8f89cc7..e2c67f23c5 100644 --- a/quickstep/res/values-sl/strings.xml +++ b/quickstep/res/values-sl/strings.xml @@ -22,7 +22,6 @@ "Razdeljen zaslon" "Pripni" "Prosta oblika" - "Pregled" "Ni nedavnih elementov" "Zapri" "Nastavitve uporabe aplikacij" diff --git a/quickstep/res/values-sq/config.xml b/quickstep/res/values-sq/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-sq/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-sq/strings.xml b/quickstep/res/values-sq/strings.xml index d8f5f28b42..90f8d8a9eb 100644 --- a/quickstep/res/values-sq/strings.xml +++ b/quickstep/res/values-sq/strings.xml @@ -22,7 +22,6 @@ "Ekrani i ndarë" "Gozhdo" "Formë e lirë" - "Përmbledhja" "Nuk ka asnjë artikull të fundit" "Mbyll" "Cilësimet e përdorimit të aplikacionit" diff --git a/quickstep/res/values-sr/config.xml b/quickstep/res/values-sr/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-sr/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-sr/strings.xml b/quickstep/res/values-sr/strings.xml index b721641446..38869d503c 100644 --- a/quickstep/res/values-sr/strings.xml +++ b/quickstep/res/values-sr/strings.xml @@ -22,7 +22,6 @@ "Подељени екран" "Закачи" "Слободни облик" - "Преглед" "Нема недавних ставки" "Затвори" "Подешавања коришћења апликације" diff --git a/quickstep/res/values-sv/config.xml b/quickstep/res/values-sv/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-sv/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-sv/strings.xml b/quickstep/res/values-sv/strings.xml index ba7ebcdec7..ec079ee54f 100644 --- a/quickstep/res/values-sv/strings.xml +++ b/quickstep/res/values-sv/strings.xml @@ -22,7 +22,6 @@ "Delad skärm" "Fäst" "Fritt format" - "Översikt" "Listan med de senaste åtgärderna är tom" "Stäng" "Inställningar för appanvändning" diff --git a/quickstep/res/values-sw/config.xml b/quickstep/res/values-sw/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-sw/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-sw/strings.xml b/quickstep/res/values-sw/strings.xml index 24db429093..2aea027f1f 100644 --- a/quickstep/res/values-sw/strings.xml +++ b/quickstep/res/values-sw/strings.xml @@ -22,7 +22,6 @@ "Gawa skrini" "Bandika" "Muundo huru" - "Muhtasari" "Hakuna vipengee vya hivi karibuni" "Funga" "Mipangilio ya matumizi ya programu" diff --git a/quickstep/res/values-ta/strings.xml b/quickstep/res/values-ta/strings.xml index 97d51cd35f..760e24ed9e 100644 --- a/quickstep/res/values-ta/strings.xml +++ b/quickstep/res/values-ta/strings.xml @@ -22,7 +22,6 @@ "திரைப் பிரிப்பு" "பின் செய்தல்" "குறிப்பிட்ட வடிவமில்லாத பயன்முறை" - "மேலோட்டப் பார்வை" "சமீபத்தியவை எதுவுமில்லை" "மூடும்" "ஆப்ஸ் உபயோக அமைப்புகள்" diff --git a/quickstep/res/values-te/config.xml b/quickstep/res/values-te/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-te/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-te/strings.xml b/quickstep/res/values-te/strings.xml index 24b37f75d4..eafe58c047 100644 --- a/quickstep/res/values-te/strings.xml +++ b/quickstep/res/values-te/strings.xml @@ -22,7 +22,6 @@ "స్క్రీన్‌ని విభజించు" "పిన్ చేయి" "సంప్రదాయేతర" - "అవలోకనం" "ఇటీవలి అంశాలు ఏవీ లేవు" "మూసివేయండి" "యాప్ వినియోగ సెట్టింగ్‌లు" diff --git a/quickstep/res/values-th/config.xml b/quickstep/res/values-th/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-th/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-th/strings.xml b/quickstep/res/values-th/strings.xml index 0f6821bf19..d9a98de23d 100644 --- a/quickstep/res/values-th/strings.xml +++ b/quickstep/res/values-th/strings.xml @@ -22,7 +22,6 @@ "แยกหน้าจอ" "ตรึง" "รูปแบบอิสระ" - "ภาพรวม" "ไม่มีรายการล่าสุด" "ปิด" "การตั้งค่าการใช้แอป" diff --git a/quickstep/res/values-tl/config.xml b/quickstep/res/values-tl/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-tl/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-tl/strings.xml b/quickstep/res/values-tl/strings.xml index 491bac5bd9..c09304c0ae 100644 --- a/quickstep/res/values-tl/strings.xml +++ b/quickstep/res/values-tl/strings.xml @@ -22,7 +22,6 @@ "Hatiin ang screen" "I-pin" "Freeform" - "Overview" "Walang kamakailang item" "Isara" "Mga setting ng paggamit ng app" diff --git a/quickstep/res/values-tr/config.xml b/quickstep/res/values-tr/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-tr/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-tr/strings.xml b/quickstep/res/values-tr/strings.xml index ec6d88405c..0b23c7ad01 100644 --- a/quickstep/res/values-tr/strings.xml +++ b/quickstep/res/values-tr/strings.xml @@ -22,7 +22,6 @@ "Bölünmüş ekran" "Sabitle" "Serbest çalışma" - "Genel bakış" "Yeni öğe yok" "Kapat" "Uygulama kullanım ayarları" diff --git a/quickstep/res/values-uk/config.xml b/quickstep/res/values-uk/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-uk/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-uk/strings.xml b/quickstep/res/values-uk/strings.xml index 77360625db..8585cec391 100644 --- a/quickstep/res/values-uk/strings.xml +++ b/quickstep/res/values-uk/strings.xml @@ -22,7 +22,6 @@ "Розділити екран" "Закріпити" "Довільна форма" - "Огляд" "Немає нещодавніх додатків" "Закрити" "Налаштування використання додатка" diff --git a/quickstep/res/values-ur/config.xml b/quickstep/res/values-ur/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ur/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ur/strings.xml b/quickstep/res/values-ur/strings.xml index 87b303f2af..4af12306c7 100644 --- a/quickstep/res/values-ur/strings.xml +++ b/quickstep/res/values-ur/strings.xml @@ -22,7 +22,6 @@ "اسپلٹ اسکرین وضع" "پن کریں" "فری فارم" - "مجموعی جائزہ" "کوئی حالیہ آئٹم نہیں" "بند کریں" "ایپ کے استعمال کی ترتیبات" diff --git a/quickstep/res/values-uz/config.xml b/quickstep/res/values-uz/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-uz/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-uz/strings.xml b/quickstep/res/values-uz/strings.xml index 67c8e91c00..dfc315e875 100644 --- a/quickstep/res/values-uz/strings.xml +++ b/quickstep/res/values-uz/strings.xml @@ -22,7 +22,6 @@ "Ekranni ikkiga ajratish" "Mahkamlash" "Erkin shakl" - "Nazar" "Yaqinda ishlatilgan ilovalar yo‘q" "Yopish" "Ilovadan foydalanish sozlamalari" diff --git a/quickstep/res/values-vi/config.xml b/quickstep/res/values-vi/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-vi/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-vi/strings.xml b/quickstep/res/values-vi/strings.xml index 34c89efcf1..a25b88db79 100644 --- a/quickstep/res/values-vi/strings.xml +++ b/quickstep/res/values-vi/strings.xml @@ -22,7 +22,6 @@ "Chia đôi màn hình" "Ghim" "Dạng tự do" - "Tổng quan" "Không có mục gần đây nào" "Đóng" "Cài đặt mức sử dụng ứng dụng" diff --git a/quickstep/res/values-zh-rCN/config.xml b/quickstep/res/values-zh-rCN/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-zh-rCN/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-zh-rCN/strings.xml b/quickstep/res/values-zh-rCN/strings.xml index 0e83977fa3..30dce2326d 100644 --- a/quickstep/res/values-zh-rCN/strings.xml +++ b/quickstep/res/values-zh-rCN/strings.xml @@ -22,7 +22,6 @@ "分屏" "固定" "自由窗口" - "概览" "近期没有任何内容" "关闭" "应用使用设置" diff --git a/quickstep/res/values-zh-rHK/config.xml b/quickstep/res/values-zh-rHK/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-zh-rHK/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-zh-rHK/strings.xml b/quickstep/res/values-zh-rHK/strings.xml index ac7e8e9002..de99075afe 100644 --- a/quickstep/res/values-zh-rHK/strings.xml +++ b/quickstep/res/values-zh-rHK/strings.xml @@ -22,7 +22,6 @@ "分割畫面" "固定" "自由形式" - "概覽" "最近沒有任何項目" "關閉" "應用程式使用情況設定" diff --git a/quickstep/res/values-zh-rTW/config.xml b/quickstep/res/values-zh-rTW/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-zh-rTW/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-zh-rTW/strings.xml b/quickstep/res/values-zh-rTW/strings.xml index 3323bfd57d..b07c5c9e31 100644 --- a/quickstep/res/values-zh-rTW/strings.xml +++ b/quickstep/res/values-zh-rTW/strings.xml @@ -22,7 +22,6 @@ "分割畫面" "固定" "自由形式" - "總覽" "最近沒有任何項目" "關閉" "應用程式使用情況設定" diff --git a/quickstep/res/values-zu/config.xml b/quickstep/res/values-zu/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-zu/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-zu/strings.xml b/quickstep/res/values-zu/strings.xml index 0f1d99d7b6..98b27505f5 100644 --- a/quickstep/res/values-zu/strings.xml +++ b/quickstep/res/values-zu/strings.xml @@ -22,7 +22,6 @@ "Hlukanisa isikrini" "Phina" "I-Freeform" - "Buka konke" "Azikho izinto zakamuva" "Vala" "Izilungiselelo zokusetshenziswa kohlelo lokusebenza" diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index ca59afa558..082e8f23be 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Werk" "Program is nie geïnstalleer nie." "Program is nie beskikbaar nie" @@ -63,7 +62,7 @@ "Kon nie legstuk laai nie" "Stel op" "Dit is \'n stelselprogram en kan nie gedeïnstalleer word nie." - "Naamlose vouer" + "Wysig naam" "Het %1$s gedeaktiveer" %1$s, het %2$d kennisgewings @@ -133,11 +132,13 @@ "Persoonlik" "Werk" "Werkprofiel" - "Kry werkprogramme hier" - "Elke werkprogram het \'n kenteken en word deur jou organisasie veilig gehou. Skuif programme na jou tuisskerm toe vir makliker toegang." - "Bestuur deur jou organisasie" - "Kennisgewings en programme is af" - "Maak toe" - "Toe" + "Persoonlike programme is privaat en kan nie deur IT gesien word nie" + "Werkprogramme het kentekens en kan deur IT gesien word" + "Volgende" + "Het dit" + "Werkprogramme: Aan" + "Werkprogramme: Onderbreek" + "Werkprogramme is onderbreek" + "Jy sal nie enige werkkennisgewings kry nie en jou IT-admin kan nie jou ligging sien nie" "Misluk: %1$s" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 0396df6179..e12d68d25a 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -62,7 +62,7 @@ "ፍርግም የመጫን ችግር" "ማዋቀሪያ" "ይህ የስርዓት መተግበሪያ ነው እና ማራገፍ አይቻልም።" - "ስም-አልባ አቃፊ" + "ስም ያርትዑ" "%1$s ተሰናክሏል" %1$s%2$d ማሳወቂያ አለው @@ -132,11 +132,13 @@ "የግል" "ሥራ" "የሥራ መገለጫ" - "የስራ መተግበሪያዎችን እዚህ ያግኙ" - "እያንዳንዱ የሥራ መተግበሪያ ባጅ አለው፣ እና በድርጅትዎ ደህንነቱ ተጠብቋል። ለቀለለ መዳረሻ መተግበሪያዎችን ወደ የእርስዎ መነሻ ማያ ገጽ ይውሰዷቸው።" - "በእርስዎ ድርጅት የሚተዳደር" - "ማሳወቂያዎች እና መተግበሪያዎች ጠፍተዋል" - "ዝጋ" - "ዝግ" + "የግል መተግበሪያዎች የግል ናቸው፣ እና በአይቲ ሊታዩ አይችሉም" + "የስራ መተግበሪያዎች ባጅ ያላቸው ሲሆን በአይቲ ሊታዩ የሚችሉ ናቸው" + "ቀጣይ" + "ገባኝ" + "የስራ መተግበሪያዎች፦ በርተዋል" + "የስራ መተግበሪያዎች፦ ባሉበት ቆመዋል" + "የስራ መተግበሪያዎች ባሉበት ቆመዋል" + "ምንም የስራ ማሳወቂያዎችን አያገኙም፣ እና የአይቲ አስተዳዳሪዎ አካባቢዎን ማየት አይችልም" "አልተሳካም፦ %1$s" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index a80ecb0b14..b974cb8500 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "العمل" "لم يتم تثبيت التطبيق." "التطبيق ليس متاحًا" @@ -63,7 +62,7 @@ "حدثت مشكلة أثناء تحميل الأداة" "الإعداد" "هذا تطبيق نظام وتتعذر إزالته." - "مجلد بدون اسم" + "تعديل الاسم" "تم إيقاف %1$s" يتضمن تطبيق %1$s %2$d إشعار.​ @@ -92,8 +91,8 @@ "نقاط الإشعارات" "مفعّل" "غير مفعّل" - "يلزم تفعيل الوصول إلى الإشعارات" - "لعرض نقاط الإشعارات، يجب تشغيل إشعارات التطبيق في %1$s" + "يلزم تمكين الوصول إلى الإشعارات" + "لعرض نقاط الإشعارات، يجب تفعيل إشعارات التطبيق في %1$s" "تغيير الإعدادات" "عرض نقاط الإشعارات" "إضافة رمز إلى الشاشة الرئيسية" @@ -137,11 +136,13 @@ "شخصية" "للعمل" "الملف الشخصي للعمل" - "البحث عن تطبيقات العمل هنا" - "يحتوي كل تطبيق للعمل على شارة ويظل تحت حماية مؤسستك. يمكنك نقل التطبيقات إلى شاشتك الرئيسية لتسهيل الوصول إليها." - "ملف شخصي للعمل تديره مؤسستك" - "الإشعارات والتطبيقات متوقفة." - "إغلاق" - "تمّ الإغلاق" + "التطبيقات الشخصية خاصة ولا يمكن لمشرف تكنولوجيا المعلومات الاطّلاع عليها." + "تحمل تطبيقات العمل شارة وتكون مرئية لمشرف تكنولوجيا المعلومات." + "التالي" + "حسنًا" + "تطبيقات العمل: قيد التشغيل" + "تطبيقات العمل: متوقفة مؤقتًا" + "تم إيقاف تطبيقات العمل مؤقتًا." + "لن تحصل على أي إشعارات عمل ولن يتمكّن مشرف تكنولوجيا المعلومات لديك من معرفة موقعك الجغرافي." "تعذَّر %1$s." diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml index 2984603818..c0f5fc1706 100644 --- a/res/values-as/strings.xml +++ b/res/values-as/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "কৰ্মস্থান" "এপটো ইনষ্টল কৰা নহ\'ল।" "এপটো নাই" @@ -63,7 +62,7 @@ "ৱিজেট ল\'ড কৰাত সমস্য়া" "ছেটআপ কৰক" "এইটো এটা ছিষ্টেম এপ আৰু ইয়াক আনইনষ্টল কৰিব নোৱৰি" - "নামবিহীন ফ\'ল্ডাৰ" + "নাম সম্পাদনা কৰক" "%1$s অক্ষম কৰা হ’ল" %1$s%2$dটা জাননী আছে @@ -133,11 +132,13 @@ "ব্যক্তিগত" "কৰ্মস্থান" "কৰ্মস্থানৰ প্ৰ\'ফাইল" - "ইয়াত কৰ্মস্থানৰ এপ্ বিচাৰি পাওক" - "কৰ্মস্থানৰ প্ৰতিটো এপৰে একোটা প্ৰতীক আছে আৰু তাক আপোনাৰ প্ৰতিষ্ঠানে সুৰক্ষিত কৰি ৰাখে। ব্যৱহাৰ কৰাত সুবিধা হ\'বলৈ এপসমূহ আপোনাৰ গৃহ স্ক্ৰীণলৈ স্থানান্তৰ কৰক।" - "আপোনাৰ প্ৰতিষ্ঠানৰ দ্বাৰা পৰিচালিত" - "জাননী আৰু এপসমূহ অফ হৈ আছে" - "বন্ধ কৰক" - "বন্ধ" + "ব্যক্তিগত এপ্‌সমূহ গোপনীয় আৰু সেইবোৰ আইটিয়ে দেখা নাপায়" + "কাম সম্পর্কীয় এপ্‌সমূহত বেজ লগোৱা থাকে আৰু সেইবোৰ আইটিৰ বাবে দৃশ্যমান হয়" + "পৰৱৰ্তী" + "বুজি পালোঁ" + "কাম সম্পর্কীয় এপ্‌সমূহ: অন হৈ আছে" + "কাম সম্পর্কীয় এপ্‌সমূহ: পজ হৈ আছে" + "কাম সম্পর্কীয় এপ্‌সমূহ পজ হৈ আছে" + "আপুনি কোনো কৰ্মস্থান সম্পৰ্কীয় জাননী লাভ নকৰে আৰু আপোনাৰ আইটি প্ৰশাসকে আপোনাৰ অৱস্থান দেখা নাপায়" "বিফল: %1$s" diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index 7c1ce8447d..080e9e4e6e 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -62,7 +62,7 @@ "Vidcet yükləmə problemi" "Quraşdırma" "Bu sistem tətbiqi olduğu üçün sistemdən silinə bilməz." - "Adsız Qovluq" + "Adı redaktə edin" "%1$s deaktiv edildi" %1$s tətbiqində %2$d bildiriş var @@ -132,11 +132,13 @@ "Şəxsi" "İş" "İş profili" - "Burada iş tətbiqləri axtarın" - "Hər bir iş tətbiqində təşkilat tərəfindən qorunduğunu göstərən narıncı nişan var. Tətbiqləri daha asan giriş üçün Əsas Səhifə Ekranına köçürün." - "Təşkilatınız tərəfindən idarə olunur" - "Bildiriş və tətbiqlər deaktivdir" - "Bağlayın" - "Bağlıdır" + "Fərdi tətbiqlər şəxsi hesab olunur və İT admininə göstərilmir" + "İş tətbiqləri nişanlanıb və İT admininə göstərilir" + "Növbəti" + "Anladım" + "İş tətbiqləri: Aktivdir" + "İş tətbiqləri: Pauza verilib" + "İş tətbiqlərinə pauza verilib" + "Hər hansı iş bildirişi almayacaqsınız, İT admininiz isə məkanınızı görə bilməyəcək" "Alınmadı: %1$s" diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index 883003c5c0..41db7e0515 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Work" "Aplikacija nije instalirana." "Aplikacija nije dostupna" @@ -63,7 +62,7 @@ "Problem pri učitavanju vidžeta" "Podešavanje" "Ovo je sistemska aplikacija i ne može da se deinstalira." - "Neimenovani direktorijum" + "Izmenite naziv" "Aplikacija %1$s je onemogućena" %1$s, ima %2$d obaveštenje @@ -134,11 +133,13 @@ "Lične" "Poslovne" "Profil za Work" - "Pronađite poslovne aplikacije ovde" - "Svaka poslovna aplikacija ima značku i štiti je vaša organizacija. Premestite aplikacije na početni ekran da biste im lakše pristupali." - "Ovim upravlja organizacija" - "Obaveštenja i aplikacije su isključeni" - "Zatvori" - "Zatvoreno" + "Lične aplikacije su privatne i IT administrator ne može da ih vidi" + "Aplikacije za posao imaju značku i IT administrator može da ih vidi" + "Dalje" + "Važi" + "Aplikacije za posao: Uključene" + "Aplikacije za posao: Pauzirane" + "Aplikacije za posao su pauzirane" + "Nećete dobijati nikakva obaveštenja za Work, a IT administrator ne može da vidi lokaciju" "Nije uspelo: %1$s" diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index b4cf913de4..58812298d9 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Працоўная" "Праграма не ўсталявана." "Праграма недаступная" @@ -63,7 +62,7 @@ "Праблема загрузкі віджэта" "Наладжванне" "Гэта сістэмная праграма, яе нельга выдаліць." - "Папка без назвы" + "Змяніць назву" "%1$s адключана" %1$s, мае %2$d апавяшчэнне @@ -135,11 +134,13 @@ "Асабістыя" "Праца" "Працоўны профіль" - "Знайдзіце працоўныя праграмы тут" - "Кожная працоўная праграма мае значок і знаходзіцца пад аховай вашай арганізацыі. Для больш простага доступу перамясціце праграмы на Галоўны экран." - "Пад кіраваннем вашай арганізацыі" - "Апавяшчэнні і праграмы выключаны" - "Закрыць" - "Закрытыя" + "Асабістыя праграмы з\'яўляюцца прыватнымі, ІТ-адміністратар іх не бачыць" + "Працоўныя праграмы пазначаны, і іх бачыць ІТ-адміністратар" + "Далей" + "Зразумела" + "Працоўныя праграмы: уключаны" + "Працоўныя праграмы: прыпынены" + "Працоўныя праграмы прыпынены" + "Вы не будзеце бачыць ніякіх працоўных апавяшчэнняў, і ваш IT-адміністратар не ўбачыць звесткі пра ваша месцазнаходжанне" "Не ўдалося: %1$s" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 408f205004..e599606e54 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Работа" "Приложението не е инсталирано." "Приложението не е налично" @@ -63,7 +62,7 @@ "Проблем при зареждане на приспособлението" "Настройване" "Това е системно приложение и не може да се деинсталира." - "Папка без име" + "Редактиране на името" "Деактивирахте %1$s" %1$s – има %2$d известия @@ -133,11 +132,13 @@ "Лични" "Служебни" "Служебен потребителски профил" - "Тук можете да намерите служебните приложения" - "Всяко служебно приложение има значка и организацията ви се грижи за сигурността му. За по-лесен достъп преместете приложенията на началния си екран." - "Управлява се от организацията ви" - "Известията и приложенията са изключени" - "Затваряне" - "Затворено" + "Личните приложения са частни и не могат да бъдат видяни от системния администратор" + "Служебните приложения са означени със значка и са видими от системния администратор" + "Напред" + "Разбрах" + "Служебни приложения: Вкл." + "Служебни приложения: На пауза" + "Служебните приложения са поставени на пауза" + "Няма да получавате служебни известия и системният ви администратор не може да вижда местоположението ви" "Неуспешно: %1$s" diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml index 09608b5426..f16a95f72f 100644 --- a/res/values-bn/strings.xml +++ b/res/values-bn/strings.xml @@ -62,7 +62,7 @@ "উইজেট লোড হতে সমস্যা হয়েছে" "সেটআপ" "এটি একটি সিস্টেম অ্যাপ্লিকেশান এবং আনইনস্টল করা যাবে না৷" - "নামবিহীন ফোল্ডার" + "নাম এডিট করুন" "%1$s অক্ষম করা হয়েছে" %1$s, %2$dটি বিজ্ঞপ্তি আছে @@ -92,7 +92,7 @@ "সেটিংস পরিবর্তন করুন" "বিজ্ঞপ্তির ডট দেখুন" "হোম স্ক্রিনে আইকন যোগ করুন" - "নতুন অ্যাপ্লিকেশানগুলির জন্যে" + "নতুন অ্যাপের জন্য" "অজানা" "সরান" "সার্চ" @@ -132,11 +132,13 @@ "ব্যক্তিগত" "অফিস" "অফিসের প্রোফাইল" - "এখানে কাজের অ্যাপ্সগুলি খুঁজুন" - "প্রতিটি কাজের অ্যাপে একটি করে ব্যাজ রয়েছে এবং অ্যাপগুলি আপনার প্রতিষ্ঠানের দ্বারা সুরক্ষিত। সহজে অ্যাক্সেস করার জন্য অ্যাপগুলি হোম স্ক্রিনে রাখুন।" - "আপনার প্রতিষ্ঠানের দ্বারা পরিচালিত" - "বিজ্ঞপ্তি এবং অ্যাপ বন্ধ আছে" - "বন্ধ করুন" - "বন্ধ" + "ব্যক্তিগত অ্যাপগুলি ব্যক্তিগত এবং আইটি ব্যক্তিরা দেখতে পাবেন না" + "অফিসের অ্যাপগুলি ব্যাজ করা হয়েছে এবং আইটি ব্যক্তিরা দেখতে পাবেন" + "পরের" + "বুঝেছি" + "অফিসের অ্যাপ: চালু আছে" + "অফিসের অ্যাপ: বন্ধ আছে" + "অফিসের অ্যাপ বন্ধ করা আছে" + "আপনি কোনও অফিস সংক্রান্ত বিজ্ঞপ্তি পাবেন না এবং আপনার আইটি অ্যাডমিন আপনার লোকেশন দেখতে পাবে না" "কাজটি করা যায়নি: %1$s" diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index 65ad91e9b0..1370531374 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -62,7 +62,7 @@ "Problem pri učitavanju dodatka" "Postavljanje" "Ovo je sistemska aplikacija i ne može se deinstalirati." - "Neimenovani folder" + "Uređivanje naziva" "Aplikacija %1$s je onemogućena" Aplikacija %1$s ima%2$d obavještenje​ @@ -133,11 +133,13 @@ "Lične" "Poslovne" "Radni profil" - "Pronađite poslovne aplikacije ovdje" - "Svaka poslovna aplikacija ima značku i osigurava je vaša organizacija. Premjestite aplikacije na Početni ekran, radi lakšeg pristupa." - "Upravlja vaša organizacija" - "Notifikacije i aplikacije su isključene" - "Zatvori" - "Zatvoreno" + "Lične aplikacije su privatne i IT administrator ih ne može vidjeti" + "Poslovne aplikacije su označene značkom i IT administrator ih može vidjeti" + "Sljedeće" + "Razumijem" + "Poslovne aplikacije: uključene" + "Poslovne aplikacije: pauzirane" + "Poslovne aplikacije su pauzirane" + "Nećete dobijati poslovna obavještenja, a vaš IT administrator ne može vidjeti vašu lokaciju" "Nije uspjelo: %1$s" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 4ef9ec3a2c..25e00f51f2 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -46,7 +46,7 @@ "No hi ha més espai a la safata Preferits." "Llista d\'aplicacions" "Llista d\'aplicacions personals" - "Llista d\'aplicacions per a la feina" + "Llista d\'aplicacions de treball" "Inici" "Suprimeix" "Desinstal·la" @@ -62,7 +62,7 @@ "S\'ha produït un problema en carregar el widget" "Configuració" "Aquesta aplicació és una aplicació del sistema i no es pot desinstal·lar." - "Carpeta sense nom" + "Edita el nom" "S\'ha desactivat %1$s" %1$s​ té %2$d notificacions @@ -131,12 +131,14 @@ "S\'ha ignorat la notificació" "Personal" "Feina" - "Perfil professional" - "Cerca aplicacions per a la feina aquí" - "Totes les aplicacions per a la feina tenen una insígnia que indica que estan protegides per la teva organització. Mou les aplicacions a la pantalla d\'inici per poder-hi accedir més fàcilment." - "Gestionat per la teva organització" - "Les notificacions i les aplicacions estan desactivades" - "Tanca" - "S\'ha tancat" + "Perfil de treball" + "Les aplicacions personals són privades i l\'equip de TI no les pot veure" + "Les aplicacions de treball tenen una insígnia i són visibles per l\'equip de TI" + "Següent" + "Entesos" + "Aplicacions de treball: activades" + "Aplicacions de treball: en pausa" + "Les aplicacions de treball s\'han posat en pausa" + "No rebràs cap notificació de la feina i l\'administrador de TI no podrà veure la ubicació" "Error: %1$s" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 692b57d46e..aefaf2d524 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Práce" "Aplikace není nainstalována." "Aplikace není k dispozici." @@ -63,7 +62,7 @@ "Problém s načtením widgetu" "Nastavení" "Toto je systémová aplikace a nelze ji odinstalovat." - "Složka bez názvu" + "Upravit název" "Aplikace %1$s je zakázána" Aplikace %1$s%2$d oznámení @@ -135,11 +134,13 @@ "Osobní" "Pracovní" "Pracovní profil" - "Zde naleznete pracovní aplikace" - "Každá pracovní aplikace má odznak a je zabezpečena vaší organizací. Aplikace si můžete pro jednoduchost přesunout na plochu." - "Spravováno vaší organizací" - "Oznámení a aplikace jsou vypnuty" - "Zavřít" - "Zavřeno" + "Osobní aplikace jsou soukromé a oddělení IT je nemůže zobrazit" + "Pracovní aplikace jsou označeny odznakem a může je zobrazit oddělení IT" + "Další" + "Rozumím" + "Pracovní aplikace: zapnuto" + "Pracovní aplikace: pozastaveno" + "Pracovní aplikace jsou pozastaveny" + "Nebudete dostávat žádná pracovní oznámení a správce IT nemůže zjistit vaši polohu" "Selhalo: %1$s" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index dc17516bce..6cc00e9322 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Arbejde" "Appen er ikke installeret." "Appen er ikke tilgængelig" @@ -63,7 +62,7 @@ "Der er problemer med indlæsning af widgetten" "Konfigurer" "Dette er en systemapp, som ikke kan afinstalleres." - "Unavngiven mappe" + "Rediger navn" "%1$s er deaktiveret" %1$s, har %2$d notifikation @@ -133,11 +132,13 @@ "Personlige" "Arbejde" "Arbejdsprofil" - "Find arbejdsapps her" - "Alle arbejdsapps har et badge og beskyttes af din organisation. Flyt apps til din startskærm, så du nemmere kan få adgang til dem." - "Administreret af din organisation" - "Notifikationer og apps er slået fra" - "Luk" - "Lukket" + "Personlige apps er private og ikke synlige for it-medarbejderne" + "Arbejdsapps er markeret og synlige for it-medarbejderne" + "Næste" + "OK" + "Arbejdsapps: Til" + "Arbejdsapps: Sat på pause" + "Dine arbejdsapps er sat på pause" + "Du får ikke arbejdsnotifikationer, og din it-administrator kan ikke se din placering" "Mislykket: %1$s" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index a345babd5c..49b0cbb48b 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Arbeit" "App ist nicht installiert." "App nicht verfügbar" @@ -63,7 +62,7 @@ "Problem beim Laden des Widgets" "Einrichten" "Dies ist eine Systemanwendung, die nicht deinstalliert werden kann." - "Unbenannter Ordner" + "Name bearbeiten" "%1$s deaktiviert" %1$s, hat %2$d Benachrichtigungen @@ -133,11 +132,13 @@ "Privat" "Geschäftlich" "Arbeitsprofil" - "Hier findest du Apps für die Arbeit" - "Jede App für die Arbeit ist mit einem Logo gekennzeichnet. Deine Organisation kümmert sich um den entsprechenden Schutz. Damit du leichter auf Apps zugreifen kannst, verschiebe sie auf deinen Startbildschirm." - "Wird von deiner Organisation verwaltet" - "Benachrichtigungen und Apps sind deaktiviert" - "Schließen" - "Geschlossen" + "Private Apps sind persönlich und für IT-Mitarbeiter nicht sichtbar" + "Geschäftliche Apps sind entsprechend gekennzeichnet und für IT-Mitarbeiter sichtbar" + "Weiter" + "OK" + "Geschäftliche Apps: aktiviert" + "Geschäftliche Apps: pausiert" + "Geschäftliche Apps sind pausiert" + "Du bekommst keine geschäftlichen Benachrichtigungen und dein IT-Admin kann deinen Standort nicht sehen" "Fehler: %1$s" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index d80e905d8c..c955b6f2c6 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -62,7 +62,7 @@ "Παρουσιάστηκε πρόβλημα στη φόρτωση του γραφικού στοιχείου" "Ρύθμιση" "Αυτή είναι μια εφαρμογή συστήματος και δεν είναι δυνατή η κατάργηση της εγκατάστασής της." - "Φάκελος χωρίς όνομα" + "Επεξεργασία ονόματος" "Η εφαρμογή %1$s είναι απενεργοποιημένη" Η εφαρμογή %1$s, έχει %2$d ειδοποιήσεις @@ -132,11 +132,13 @@ "Προσωπικές" "Εργασίας" "Προφίλ εργασίας" - "Βρείτε όλες τις εφαρμογές εργασίας εδώ" - "Κάθε εφαρμογή εργασίας φέρει ένα σήμα και διατηρείται ασφαλής από τον οργανισμό σας. Μετακινήστε τις εφαρμογές εργασίας στην Αρχική οθόνη, για να έχετε πιο εύκολη πρόσβαση." - "Διαχειριζόμενο από τον οργανισμό σας" - "Οι ειδοποιήσεις και οι εφαρμογές είναι απενεργοποιημένες" - "Κλείσιμο" - "Κλειστή" + "Οι προσωπικές εφαρμογές είναι ιδιωτικές και δεν είναι ορατές στον διαχειριστή IT" + "Οι εφαρμογές εργασίας φέρουν σήμα και είναι ορατές στον διαχειριστή IT" + "Επόμενο" + "Το κατάλαβα" + "Εφαρμογές εργασίας: Ενεργές" + "Εφαρμογές εργασίας: Σε παύση" + "Οι εφαρμογές εργασίας τέθηκαν σε παύση." + "Δεν θα λαμβάνετε ειδοποιήσεις εργασίας και ο διαχειριστής IT σας δεν θα μπορεί να δει την τοποθεσία σας." "Αποτυχία: %1$s" diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index 7adc2187ec..f806ec5996 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -62,7 +62,7 @@ "Problem loading widget" "Setup" "This is a system app and can\'t be uninstalled." - "Unnamed Folder" + "Edit Name" "Disabled %1$s" %1$s, has %2$d notifications @@ -132,11 +132,13 @@ "Personal" "Work" "Work profile" - "Find work apps here" - "Each work app has a badge and is kept secure by your organisation. Move apps to your Home screen for easier access." - "Managed by your organisation" - "Notifications and apps are off" - "Close" - "Closed" + "Personal apps are private and can\'t be seen by IT" + "Work apps are badged and visible to IT" + "Next" + "OK" + "Work apps: On" + "Work apps: Paused" + "Work apps are paused" + "You won\'t get any work notifications, and your IT admin can\'t see your location" "Failed: %1$s" diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml new file mode 100644 index 0000000000..f806ec5996 --- /dev/null +++ b/res/values-en-rCA/strings.xml @@ -0,0 +1,144 @@ + + + + + "Launcher3" + "Work" + "App isn\'t installed." + "App isn\'t available" + "Downloaded app disabled in Safe mode" + "Widgets disabled in Safe mode" + "Shortcut isn\'t available" + "Home screen" + "Customised actions" + "Touch & hold to pick up a widget." + "Double-tap & hold to pick up a widget or use customised actions." + "%1$d × %2$d" + "%1$d wide by %2$d high" + "Touch & hold to place manually" + "Add automatically" + "Search apps" + "Loading apps…" + "No apps found matching \'%1$s\'" + "Search for more apps" + "App" + "Notifications" + "Touch & hold to pick up a shortcut." + "Double-tap & hold to pick up a shortcut or use custom actions." + "No more room on this Home screen." + "No more room in the Favourites tray" + "Apps list" + "Personal apps list" + "Work apps list" + "Home" + "Remove" + "Uninstall" + "App info" + "Install" + "install shortcuts" + "Allows an app to add shortcuts without user intervention." + "read Home settings and shortcuts" + "Allows the app to read the settings and shortcuts in Home." + "write Home settings and shortcuts" + "Allows the app to change the settings and shortcuts in Home." + "%1$s is not allowed to make phone calls" + "Problem loading widget" + "Setup" + "This is a system app and can\'t be uninstalled." + "Edit Name" + "Disabled %1$s" + + %1$s, has %2$d notifications + %1$s, has %2$d notification + + "Page %1$d of %2$d" + "Home screen %1$d of %2$d" + "New home screen page" + "Folder opened, %1$d by %2$d" + "Tap to close folder" + "Tap to save rename" + "Folder closed" + "Folder renamed to %1$s" + "Folder: %1$s" + "Widgets" + "Wallpapers" + "Styles & wallpapers" + "Home settings" + "Disabled by your admin" + "Allow Home screen rotation" + "When phone is rotated" + "Notification dots" + "On" + "Off" + "Notification access needed" + "To show Notification Dots, turn on app notifications for %1$s" + "Change settings" + "Show notification dots" + "Add icon to Home screen" + "For new apps" + "Unknown" + "Remove" + "Search" + "This app is not installed" + "The app for this icon isn\'t installed. You can remove it, or search for the app and install it manually." + "%1$s downloading, %2$s complete" + "%1$s waiting to install" + "%1$s widgets" + "Widgets list" + "Widgets list closed" + "Add to Home screen" + "Move item here" + "Item added to home screen" + "Item removed" + "Undo" + "Move item" + "Move to row %1$s column %2$s" + "Move to position %1$s" + "Move to favourites position %1$s" + "Item moved" + "Add to folder: %1$s" + "Add to folder with %1$s" + "Item added to folder" + "Create folder with: %1$s" + "Folder created" + "Move to Home screen" + "Re-size" + "Increase width" + "Increase height" + "Decrease width" + "Decrease height" + "Widget re-sized to width %1$s height %2$s" + "Short cuts" + "Shortcuts and notifications" + "Dismiss" + "Notification dismissed" + "Personal" + "Work" + "Work profile" + "Personal apps are private and can\'t be seen by IT" + "Work apps are badged and visible to IT" + "Next" + "OK" + "Work apps: On" + "Work apps: Paused" + "Work apps are paused" + "You won\'t get any work notifications, and your IT admin can\'t see your location" + "Failed: %1$s" + diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 7adc2187ec..f806ec5996 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -62,7 +62,7 @@ "Problem loading widget" "Setup" "This is a system app and can\'t be uninstalled." - "Unnamed Folder" + "Edit Name" "Disabled %1$s" %1$s, has %2$d notifications @@ -132,11 +132,13 @@ "Personal" "Work" "Work profile" - "Find work apps here" - "Each work app has a badge and is kept secure by your organisation. Move apps to your Home screen for easier access." - "Managed by your organisation" - "Notifications and apps are off" - "Close" - "Closed" + "Personal apps are private and can\'t be seen by IT" + "Work apps are badged and visible to IT" + "Next" + "OK" + "Work apps: On" + "Work apps: Paused" + "Work apps are paused" + "You won\'t get any work notifications, and your IT admin can\'t see your location" "Failed: %1$s" diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 7adc2187ec..f806ec5996 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -62,7 +62,7 @@ "Problem loading widget" "Setup" "This is a system app and can\'t be uninstalled." - "Unnamed Folder" + "Edit Name" "Disabled %1$s" %1$s, has %2$d notifications @@ -132,11 +132,13 @@ "Personal" "Work" "Work profile" - "Find work apps here" - "Each work app has a badge and is kept secure by your organisation. Move apps to your Home screen for easier access." - "Managed by your organisation" - "Notifications and apps are off" - "Close" - "Closed" + "Personal apps are private and can\'t be seen by IT" + "Work apps are badged and visible to IT" + "Next" + "OK" + "Work apps: On" + "Work apps: Paused" + "Work apps are paused" + "You won\'t get any work notifications, and your IT admin can\'t see your location" "Failed: %1$s" diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml new file mode 100644 index 0000000000..bf909c39fd --- /dev/null +++ b/res/values-en-rXC/strings.xml @@ -0,0 +1,144 @@ + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎Launcher3‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎Work‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‏‎‎App isn\'t installed.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎App isn\'t available‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‏‎‏‏‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‏‏‏‎Downloaded app disabled in Safe mode‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎Widgets disabled in Safe mode‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‎Shortcut isn\'t available‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‎‎‎‎‏‎Home screen‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎Custom actions‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎Touch & hold to pick up a widget.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎Double-tap & hold to pick up a widget or use custom actions.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎%1$d × %2$d‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‎‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‏‏‏‏‎‎%1$d wide by %2$d high‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‎‏‏‎Touch & hold to place manually‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‎‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎Add automatically‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‎Search apps‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎Loading apps…‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‏‎‏‎‎‎‎‎‎‏‎‏‎‎No apps found matching \"‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎\"‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‎‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎Search for more apps‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‎‎‎‎‏‎‎App‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎Notifications‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎Touch & hold to pick up a shortcut.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‏‏‏‏‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎Double-tap & hold to pick up a shortcut or use custom actions.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎No more room on this Home screen.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‏‏‎‏‎No more room in the Favorites tray‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎Apps list‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‎‎‎‏‎‏‎‎‎Personal apps list‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎Work apps list‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‎Home‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‎Remove‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎Uninstall‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‏‎‏‎‎‎‏‎‏‏‎‏‏‎‏‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎App info‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎Install‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‎‎‎‏‎‏‎install shortcuts‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‎‎‎‏‏‎Allows an app to add shortcuts without user intervention.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎read Home settings and shortcuts‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎Allows the app to read the settings and shortcuts in Home.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‎‏‏‎write Home settings and shortcuts‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎‎‎‎‏‎Allows the app to change the settings and shortcuts in Home.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ is not allowed to make phone calls‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎Problem loading widget‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎Setup‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎This is a system app and can\'t be uninstalled.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎Edit Name‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎Disabled ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎, has ‎‏‎‎‏‏‎%2$d‎‏‎‎‏‏‏‎ notifications‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎, has ‎‏‎‎‏‏‎%2$d‎‏‎‎‏‏‏‎ notification‎‏‎‎‏‎ + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‎Page %1$d of %2$d‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎Home screen %1$d of %2$d‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‎‏‎‎‎‏‏‎‏‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎New home screen page‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎Folder opened, ‎‏‎‎‏‏‎%1$d‎‏‎‎‏‏‏‎ by ‎‏‎‎‏‏‎%2$d‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎Tap to close folder‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‎Tap to save rename‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‎‎Folder closed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‏‎‎‎‎‎‎‏‏‏‏‎‎‎‏‏‎‎‎‎Folder renamed to ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎Folder: ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎Widgets‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‎‏‎‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎Wallpapers‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎Styles & wallpapers‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‏‏‎‎‎‎Home settings‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎Disabled by your admin‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎Allow Home screen rotation‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎When phone is rotated‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‎Notification dots‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎On‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‏‏‎Off‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎Notification access needed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‏‎‎‎To show Notification Dots, turn on app notifications for ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎‎‎Change settings‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‏‏‎Show notification dots‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎‏‎‏‏‎Add icon to Home screen‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎For new apps‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‏‎‎Unknown‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‎‏‏‏‎‎‎Remove‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎Search‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎This app is not installed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‏‎The app for this icon isn\'t installed. You can remove it, or search for the app and install it manually.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ downloading, ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎ complete‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ waiting to install‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ widgets‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎Widgets list‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‎‎‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‏‎‎Widgets list closed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎Add to Home screen‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‏‎‎Move item here‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎Item added to home screen‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎Item removed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‎‎‏‎‎‏‎Undo‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎Move item‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‏‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‎Move to row ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ column ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎Move to position ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎Move to favorites position ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‏‏‏‏‎Item moved‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‎‏‏‎Add to folder: ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‎Add to folder with ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎Item added to folder‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‏‏‏‎‏‎‎‎‎Create folder with: ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‎Folder created‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎‏‏‎‏‎Move to Home screen‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‏‎‏‏‏‎‏‎‏‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‎‏‏‏‎‏‏‎Resize‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎Increase width‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎‎Increase height‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎‎Decrease width‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎Decrease height‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‎‎‎Widget resized to width ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ height ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‎‎Shortcuts‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‏‎‎‎‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‏‎Shortcuts and notifications‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎Dismiss‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‎‎Notification dismissed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‏‎‏‎‎Personal‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎Work‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‎‎Work profile‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎‎‎Personal apps are private & can\'t be seen by IT‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‎Work apps are badged & visible to IT‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‎‎‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎Next‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‏‎Got it‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‎Work apps: On‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‎‏‎‏‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎Work apps: Paused‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎Work apps are paused‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎You won\'t get any work notifications, and your IT admin can\'t see your location‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‎‎Failed: ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index d10c84b9ca..3ffbd4f2e4 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Trabajo" "No se instaló la aplicación." "La aplicación no está disponible." @@ -63,7 +62,7 @@ "Problema al cargar el widget" "Configuración" "Esta es una aplicación del sistema y no se puede desinstalar." - "Carpeta sin nombre" + "Editar nombre" "Se inhabilitó %1$s" %1$s tiene %2$d notificaciones @@ -133,11 +132,13 @@ "Personales" "Laborales" "Perfil de trabajo" - "Apps de trabajo" - "Cada app de trabajo tiene una insignia y está protegida por tu organización. Transfiere las apps a la pantalla principal para acceder a ellas con mayor facilidad." - "Administrado por tu organización" - "Las notificaciones y las apps están desactivadas" - "Cerrar" - "Cerrado" + "Las apps personales son privadas y el administrador de TI no las puede ver" + "Las apps de trabajo tienen una insignia y el administrador de TI las puede ver" + "Siguiente" + "Entendido" + "Apps de trabajo: activadas" + "Apps de trabajo: detenidas" + "Las apps de trabajo están detenidas" + "No recibirás notificaciones sobre el trabajo y el administrador de TI no puede ver tu ubicación" "Error: %1$s" diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 09b1239972..625d20c566 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Trabajo" "La aplicación no está instalada." "La aplicación no está disponible" @@ -63,7 +62,7 @@ "Problema al cargar el widget" "Configuración" "Esta aplicación es del sistema y no se puede desinstalar." - "Carpeta sin nombre" + "Editar nombre" "Se ha inhabilitado %1$s" %1$s tiene %2$d notificaciones @@ -133,11 +132,13 @@ "Personal" "Trabajo" "Perfil de trabajo" - "Aplicaciones de trabajo" - "Cada aplicación de trabajo tiene una insignia y está protegida por tu organización. Mueve las aplicaciones a la pantalla de inicio para acceder a ellas más fácilmente." - "Administrada por tu organización" - "Las notificaciones y las aplicaciones están desactivadas" - "Cerrar" - "Cerrada" + "Las aplicaciones personales son privadas y el administrador de TI no puede verlas" + "Las aplicaciones personales tienen una insignia y son visibles para el administrador de TI" + "Siguiente" + "Listo" + "Aplicaciones de trabajo: activadas" + "Aplicaciones de trabajo: en pausa" + "Se han pausado las aplicaciones de trabajo" + "No recibirás ninguna notificación de trabajo y tu administrador de TI no podrá ver tu ubicación" "Se ha producido un error: %1$s" diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index 1e470e15a7..7a966a4d2c 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Töö" "Rakendus pole installitud." "Rakendus ei ole saadaval" @@ -63,7 +62,7 @@ "Probleem vidina laadimisel" "Seadistamine" "See on süsteemirakendus ja seda ei saa desinstallida." - "Nimetu kaust" + "Muuda nime" "Rakendus %1$s on keelatud" %1$s, %2$d märguannet @@ -133,11 +132,13 @@ "Isiklik" "Töö" "Tööprofiil" - "Töörakendused leiate siit" - "Igal töörakendusel on märk ja teie organisatsioon tagab selle turvalisuse. Teisaldage rakendused avaekraanile, et neile oleks lihtsam juurde pääseda." - "Haldab teie organisatsioon" - "Märguanded ja rakendused on välja lülitatud" - "Sule" - "Suletud" + "Isiklikud rakendused on privaatsed ja IT-haldur ei näe neid" + "Töörakendustel on märk ja IT-haldur näeb neid" + "Järgmine" + "Selge" + "Töörakendused: sees" + "Töörakendused: peatatud" + "Töörakendused on peatatud" + "Te ei saa töökoha märguandeid ja IT-haldur ei näe teie asukohta" "Nurjus: %1$s" diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 10aebe7ad6..902566b947 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -62,7 +62,7 @@ "Arazo bat izan da widgeta kargatzean" "Konfigurazioa" "Sistema-aplikazioa da hau eta ezin da desinstalatu." - "Izenik gabeko karpeta" + "Editatu izena" "%1$s desgaituta dago" %1$s aplikazioak %2$d jakinarazpen ditu @@ -132,11 +132,13 @@ "Pertsonalak" "Lanekoak" "Laneko profila" - "Hemen dituzu laneko aplikazioak" - "Laneko aplikazio bakoitzak bereizgarri bat dauka eta erakundeak babesten du. Aplikazioak errazago atzitzeko, eraman itzazu hasierako pantailara." - "Erakundeak kudeatzen du" - "Jakinarazpenak eta aplikazioak desaktibatuta daude" - "Itxi" - "Itxita" + "Aplikazio pertsonalak pribatuak dira, eta IKT sailekoek ezin dituzte ikusi" + "Laneko aplikazioek bereizgarriak dituzte, eta IKT sailekoek ikusi egin ditzakete" + "Hurrengoa" + "Ados" + "Laneko aplikazioak: aktibatuta" + "Laneko aplikazioak: pausatuta" + "Pausatu egin dira laneko aplikazioak" + "Ez duzu jasoko laneko jakinarazpenik, eta IKT saileko administratzaileak ezingo du ikusi zure kokapena" "Huts egin du: %1$s" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 926cdb9b1c..dbef3f9207 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "کاری" "برنامه نصب نشده است." "برنامه در دسترس نیست" @@ -63,7 +62,7 @@ "مشکل در بارگیری ابزارک" "تنظیم" "این برنامه سیستمی است و حذف نصب نمی‌شود." - "پوشه بی‌نام" + "ویرایش نام" "%1$s غیرفعال شد" %1$s، %2$d اعلان دارد @@ -133,11 +132,13 @@ "شخصی" "محل کار" "نمایه کاری" - "اینجا برنامه‌های کاری را پیدا کنید" - "همه برنامه‌های کاری نشانی دارند و توسط سازمانتان ایمن نگه داشته می‌شوند. برنامه‌های کاری را برای دسترسی آسان‌تر به صفحه اصلی انتقال دهید." - "توسط سازمانتان مدیریت می‌شود" - "اعلان‌ها و برنامه‌ها خاموش هستند" - "بستن" - "بسته‌شده" + "برنامه‌های شخصی خصوصی هستند و تیم فناوری اطلاعات نمی‌تواند آن‌ها را ببیند" + "برنامه‌های کاری دارای نشان هستند و تیم فناوری اطلاعات می‌تواند آن‌ها ببیند" + "بعدی" + "متوجه‌ام" + "برنامه‌های کاری: روشن" + "برنامه‌های کاری: موقتاً متوقف" + "برنامه‌های کاری موقتاً متوقف می‌شوند" + "اعلان‌های کاری را دریافت نخواهید کرد، و سرپرست فناوری و اطلاعات نمی‌تواند مکانتان را ببیند" "ناموفق بود: %1$s" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index f87441ff3d..670870637c 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Työ" "Sovellusta ei ole asennettu." "Sovellus ei ole käytettävissä" @@ -63,7 +62,7 @@ "Ongelma ladattaessa widgetiä" "Asetus" "Tämä on järjestelmäsovellus, eikä sitä voi poistaa." - "Nimetön kansio" + "Muokkaa nimeä" "%1$s poistettiin käytöstä" %1$s: %2$d ilmoitusta @@ -133,11 +132,13 @@ "Henkilökohtaiset" "Työsovellukset" "Työprofiili" - "Etsi työsovelluksia tästä" - "Kaikki työsovellukset on merkitty, ja organisaatiosi vastaa niiden suojaamisesta. Voit siirtää työsovelluksia aloitusnäytölle käytön helpottamiseksi." - "Organisaatiosi hallinnoima" - "Ilmoitukset ja sovellukset ovat poissa käytöstä" - "Sulje" - "Suljettu" + "Henkilökohtaiset sovellukset ovat yksityisiä ja IT-osasto ei näe niitä" + "Työsovellukset ovat merkittyjä ja IT-osasto näkee ne" + "Seuraava" + "Selvä" + "Työsovellukset: Päällä" + "Työsovellukset: Keskeytetty" + "Työsovellukset on keskeytetty" + "Et saa työilmoituksia ja IT-järjestelmänvalvojasi ei näe sijaintiasi" "Epäonnistui: %1$s" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 5ac514d448..a4cbca1866 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -20,7 +20,6 @@ "Lanceur3" - "Travail" "L\'application n\'est pas installée." "Application indisponible" @@ -63,7 +62,7 @@ "Problème lors du chargement du widget" "Configuration" "Impossible de désinstaller cette application, car il s\'agit d\'une application système." - "Dossier sans nom" + "Modifier le nom" "L\'application %1$s est désactivée" %1$s a %2$d notification @@ -133,11 +132,13 @@ "Personnel" "Travail" "Profil professionnel" - "Trouvez ici des applications professionnelles" - "Chaque application professionnelle comporte un badge, ce qui signifie qu\'elle est sécurisée par votre organisation. Vous pouvez déplacer vos applications vers l\'écran d\'accueil afin d\'y accéder plus facilement." - "Géré par votre organisation" - "Les notifications et les applications sont désactivées" - "Fermer" - "Fermé" + "Les applications personnelles restent privées, et le service informatique ne peut pas les voir" + "Les applications professionnelles sont identifiées par un badge, et le service informatique peut les voir" + "Suivant" + "OK" + "Applications professionnelles : activées" + "Applications professionnelles : interrompues" + "Les applications professionnelles sont interrompues" + "Vous ne recevrez aucune notification professionnelle, et votre administrateur informatique ne pourra pas voir votre position" "Échec : %1$s" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 65db47e8a7..3c66dc7abd 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -62,7 +62,7 @@ "Problème lors du chargement du widget." "Configuration" "Impossible de désinstaller cette application, car il s\'agit d\'une application système." - "Dossier sans nom" + "Modifier le nom" "%1$s est désactivé." %1$s comporte %2$d notification @@ -132,11 +132,13 @@ "Personnelles" "Professionnelles" "Profil professionnel" - "Retrouvez ici vos applications professionnelles" - "Les applications professionnelles sont accompagnées d\'un badge et sont sécurisées par votre organisation. Vous pouvez les déplacer vers votre écran d\'accueil pour y accéder plus facilement." - "Géré par votre organisation" - "Notifications et applications désactivées" - "Fermer" - "Fermé" + "Vos applications personnelles sont privées, et votre service informatique n\'y a pas accès" + "Vos applications professionnelles portent un badge et sont visibles de votre service informatique" + "Suivant" + "OK" + "Applications professionnelles activées" + "Applications professionnelles en veille" + "Applications professionnelles en veille" + "Vous ne recevrez pas de notifications professionnelles, et votre administrateur informatique n\'aura pas accès à votre position" "Échec : %1$s" diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index ca5ba3c5e4..bf2d59f835 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -62,7 +62,7 @@ "Produciuse un problema ao cargar o widget" "Configuración" "Esta aplicación é do sistema e non se pode desinstalar." - "Cartafol sen nome" + "Edita o nome" "Desactivouse %1$s" A aplicación %1$s ten %2$d notificacións @@ -132,11 +132,13 @@ "Persoal" "Traballo" "Perfil de traballo" - "Buscar aplicacións do traballo aquí" - "As aplicacións do traballo teñen unha insignia e están protexidas pola túa organización. Traslada as aplicacións á pantalla de inicio para acceder a elas de forma máis fácil." - "Perfil xestionado pola túa organización" - "As notificacións e as aplicacións están desactivadas" - "Pechar" - "Pechada" + "As aplicación persoais son privadas e o persoal de TI non as pode ver" + "As aplicacións do traballo inclúen insignias e o persoal de TI pode velas" + "Seguinte" + "De acordo" + "Aplicacións do traballo: activadas" + "Aplicacións do traballo: en pausa" + "Puxéronse en pausa as aplicacións do traballo" + "Non recibirás notificacións do traballo e o administrador de TI non poderá ver a túa localización" "Erro: %1$s" diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml index 3228dea004..fe3d4a8704 100644 --- a/res/values-gu/strings.xml +++ b/res/values-gu/strings.xml @@ -62,7 +62,7 @@ "વિજેટ લોડ કરવામાં સમસ્યા" "સેટઅપ" "આ એક સિસ્ટમ ઍપ્લિકેશન છે અને અનઇન્સ્ટોલ કરી શકાતી નથી." - "અનામી ફોલ્ડર" + "નામમાં ફેરફાર કરો" "%1$s અક્ષમ કરી" %1$sના %2$d નોટિફિકેશન છે @@ -80,7 +80,7 @@ "વિજેટ્સ" "વૉલપેપર્સ" "શૈલીઓ અને વૉલપેપર" - "હોમ સેટિંગ્સ" + "હોમ સેટિંગ" "તમારા વ્યવસ્થાપક દ્વારા અક્ષમ કરેલ" "હોમ સ્ક્રીનને ફેરવવાની મંજૂરી આપો" "જ્યારે ફોન ફેરવવામાં આવે ત્યારે" @@ -132,11 +132,13 @@ "મનગમતી ઍપ" "કાર્યાલયની ઍપ" "કાર્યાલયની પ્રોફાઇલ" - "કાર્ય ઍપને અહીંથી મેળવો" - "દરેક કાર્ય ઍપ પાસે એક બૅજ હોય છે અને તમારી સંસ્થા દ્વારા તેને સુરક્ષિત રાખવામાં આવે છે. વધુ સરળ ઍક્સેસ માટે ઍપને તમારી હોમ સ્ક્રીન પર ખસેડો." - "તમારી સંસ્થા દ્વારા મેનેજ કરેલ" - "નોટિફિકેશન અને ઍપ બંધ છે" - "બંધ કરો" - "બંધ" + "વ્યક્તિગત ઍપ ખાનગી હોય છે અને તે IT ટીમ દ્વારા જોઈ શકાતી નથી" + "ઑફિસ માટેની ઍપ બૅજ કરવામાં આવી છે અને તે IT ટીમને દેખાય છે" + "આગળ" + "સમજાઈ ગયું" + "ઑફિસ માટેની ઍપ: ચાલુ" + "ઑફિસ માટેની ઍપ: થોભાવેલ" + "ઑફિસ માટેની ઍપ થોભાવવામાં આવેલ છે" + "તમને ઑફિસ સંબંધી કોઈ નોટિફિકેશન મળશે નહીં અને તમારા IT વ્યવસ્થાપક તમારું સ્થાન જોઈ શકશે નહીં" "નિષ્ફળ: %1$s" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 8fa02c0165..4aeec3064f 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -62,7 +62,7 @@ "विजेट लोड करने में समस्‍या" "सेटअप" "यह एक सिस्टम ऐप्लिकेशन है और इसे अनइंस्टॉल नहीं किया जा सकता." - "अनामित फ़ोल्डर" + "नाम में बदलाव करें" "%1$s अक्षम है" %1$s की %2$d सूचना है @@ -132,11 +132,13 @@ "निजी ऐप" "काम से जुड़े ऐप" "वर्क प्रोफ़ाइल" - "काम से जुड़े सभी ऐप्लिकेशन यहां पाएं" - "काम से जुड़े हर ऐप्लिकेशन पर एक बैज (निशान) होता है और इन ऐप्लिकेशन की सुरक्षा आपका संगठन करता है. आसानी से इस्तेमाल करने के लिए ऐप्लिकेशन को अपनी होम स्क्रीन पर ले जाएं." - "आपका संगठन प्रबंधित कर रहा है" - "सूचनाएं और ऐप्लिकेशन बंद हैं" - "बंद करें" - "बंद कर दिया गया" + "निजी ऐप्लिकेशन के इस्तेमाल का डेटा आईटी टीम नहीं देख सकती" + "ऑफ़िस के काम से जुड़े ऐप्लिकेशन बैज किए गए हैं और आईटी टीम को दिख रहे हैं" + "आगे बढ़ें" + "ठीक है" + "ऑफ़िस के काम से जुड़े ऐप्लिकेशन: चालू हैं" + "ऑफ़िस के काम से जुड़े ऐप्लिकेशन: रोके गए" + "ऑफ़िस के काम से जुड़े ऐप्लिकेशन रोके गए" + "आपको काम से जुड़ी सूचनाएं नहीं मिलेंगी. साथ ही, आपका आईटी एडमिन आपकी जगह की जानकारी नहीं देख पाएगा" "पूरा नहीं हुआ: %1$s" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index b738bc0739..0b193f7aa9 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -62,7 +62,7 @@ "Problem pri učitavanju widgeta" "Postavljanje" "Ovo je aplikacija sustava i ne može se ukloniti." - "Neimenovana mapa" + "Uređivanje naziva" "Aplikacija %1$s onemogućena" %1$s, ima %2$d obavijest @@ -133,11 +133,13 @@ "Osobno" "Posao" "Radni profil" - "Ovdje možete pronaći radne aplikacije" - "Svaka radna aplikacija ima značku i štiti je vaša organizacija. Premjestite aplikacije na početni zaslon radi lakšeg pristupa." - "Pod upravljanjem vaše organizacije" - "Obavijesti i aplikacije isključeni su" - "Zatvori" - "Zatvoreno" + "Osobne su aplikacije privatne i IT ih ne može vidjeti" + "Poslovne su aplikacije označene i IT ih može vidjeti" + "Dalje" + "Shvaćam" + "Poslovne aplikacije: uključene" + "Poslovne aplikacije: pauzirane" + "Pauzirane su poslovne lokacije" + "Nećete primati obavijesti s radnog profila i vaš IT administrator neće moći vidjeti vašu lokaciju" "Nije uspjelo: %1$s" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 3327590a45..58429354aa 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Munka" "Az alkalmazás nincs telepítve." "Az alkalmazás nem érhető el" @@ -63,7 +62,7 @@ "Probléma történt a modul betöltésekor" "Beállítás" "Ez egy rendszeralkalmazás, és nem lehet eltávolítani." - "Névtelen mappa" + "Név módosítása" "A(z) %1$s letiltva" A(z) %1$s %2$d értesítéssel rendelkezik @@ -133,11 +132,13 @@ "Személyes" "Munkahelyi" "Munkaprofil" - "Itt kereshet munkahelyi alkalmazásokat" - "A munkahelyi alkalmazásoknál jelvény található, és biztonságukról az Ön szervezete gondoskodik. A könnyebb hozzáférés érdekében helyezze át az alkalmazásokat a kezdőképernyőre." - "Az Ön szervezete kezeli" - "Az értesítések és az alkalmazások ki vannak kapcsolva" - "Bezárás" - "Bezárva" + "A személyes alkalmazások privát jellegűek, az informatikai részleg nem láthatja őket" + "A munkahelyi alkalmazások jelvénnyel vannak ellátva, az informatikai részleg láthatja őket" + "Tovább" + "Értem" + "Munkahelyi alkalmazások: Bekapcsolva" + "Munkahelyi alkalmazások: Szüneteltetve" + "A munkahelyi alkalmazások szüneteltetve vannak" + "Nem kap majd munkahelyi értesítéseket, és a rendszergazdája nem láthatja a tartózkodási helyét" "Sikertelen: %1$s" diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index 93404e6f5f..ef62ea39d9 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -50,7 +50,7 @@ "Հիմնական" "Ապատեղադրել" "Հեռացնել" - "Հավելվածի տվյալներ" + "Հավելվածի մասին" "Տեղադրել" "տեղադրել դյուրանցումներ" "Ծրագրին թույլ է տալիս ավելացնել դյուրանցումներ՝ առանց օգտագործողի միջամտության:" @@ -62,7 +62,7 @@ "Վիջեթի բեռնման խնդիր կա" "Կարգավորում" "Սա համակարգային ծրագիր է և չի կարող ապատեղադրվել:" - "Անանուն պանակ" + "Փոխել անունը" "%1$s հավելվածն անջատված է" %1$s, ունի %2$d ծանուցում @@ -132,11 +132,13 @@ "Անձնական" "Աշխատանքային" "Աշխատանքային պրոֆիլ" - "Գտեք աշխատանքային հավելվածներ այստեղ" - "Աշխատանքային հավելվածները նշված են հատուկ նշանով: Նման հավելվածների անվտանգությունը ապահովում է ձեր կազմակերպությունը։ Հարմարության համար աշխատանքային հավելվածները կարող եք տեղափոխել հիմնական էկրան։" - "Կառավարվում է ձեր կազմակերպության կողմից" - "Ծանուցումներն ու հավելվածներն անջատված են" - "Փակել" - "Փակվեց" + "Անձնական հավելվածները տեսանելի չեն ՏՏ ադմինիստրատորին" + "Աշխատանքային հավելվածները նշանակներ ունեն և տեսանելի են ՏՏ ադմինիստրատորին" + "Առաջ" + "Եղավ" + "Աշխատանքային հավելվածներ՝ միացված են" + "Աշխատանքային հավելվածներ՝ դադարեցված են" + "Աշխատանքային հավելվածները դադարեցված են" + "Դուք աշխատանքային ծանուցումներ չեք ստանա, իսկ ձեր ՏՏ ադմինիստրատորը չի տեսնի ձեր գտնվելու վայրը։" "Չհաջողվեց կատարել գործողությունը (%1$s)" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 92c7accaa8..9cc50f3e9b 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -62,7 +62,7 @@ "Masalah memuat widget" "Siapkan" "Ini adalah aplikasi sistem dan tidak dapat dicopot pemasangannya." - "Folder Tanpa Nama" + "Sunting Nama" "%1$s dinonaktifkan" %1$s, memiliki %2$d notifikasi @@ -132,11 +132,13 @@ "Pribadi" "Kantor" "Profil kerja" - "Temukan aplikasi kerja di sini" - "Setiap aplikasi kerja memiliki badge dan dibuat tetap aman oleh organisasi. Pindahkan aplikasi ke Layar utama untuk memudahkan akses." - "Dikelola oleh organisasi" - "Notifikasi dan aplikasi nonaktif" - "Tutup" - "Ditutup" + "Aplikasi pribadi bersifat pribadi & tidak dapat dilihat oleh IT" + "Aplikasi kerja memiliki badge & terlihat oleh IT" + "Berikutnya" + "Oke" + "Aplikasi kerja: Aktif" + "Aplikasi kerja: Dijeda" + "Aplikasi kerja dijeda" + "Anda tidak akan mendapatkan notifikasi profil kerja, dan admin IT tidak dapat melihat lokasi Anda" "Gagal: %1$s" diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index d66ca3243a..a8e58ff3c2 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Vinna" "Forritið er ekki uppsett." "Forritið er ekki í boði" @@ -63,7 +62,7 @@ "Vandamál við að hlaða græju" "Uppsetning" "Þetta er kerfisforrit sem ekki er hægt að fjarlægja." - "Ónefnd mappa" + "Breyta nafni" "Óvirkt %1$s" %1$s, er með %2$d tilkynningu @@ -133,11 +132,13 @@ "Persónulegt" "Vinna" "Vinnusnið" - "Hér finnurðu vinnuforrit" - "Öll vinnuforrit eru með merki og fyrirtækið þitt tryggir öryggi þeirra. Færðu forrit yfir á heimaskjáinn til að fá auðveldari aðgang að þeim." - "Stjórnað af fyrirtækinu þínu" - "Slökkt er á tilkynningum og forritum" - "Loka" - "Lokað" + "Forrit einstaklinga eru einkamál og ekki sýnileg kerfisstjórn" + "Vinnuforrit eru merkt og sýnileg kerfisstjórn" + "Áfram" + "Ég skil" + "Vinnuforrit: Kveikt" + "Vinnuforrit: Hlé" + "Hlé gert á vinnuforritum" + "Þú færð engar vinnutilkynningar og kerfisstjórinn getur ekki séð staðsetninguna" "Mistókst: %1$s" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 8c4e3c5281..7efffd43bb 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Lavoro" "App non installata." "App non disponibile" @@ -63,7 +62,7 @@ "Errore durante il caricamento del widget" "Configurazione" "Questa è un\'app di sistema e non può essere disinstallata." - "Cartella senza nome" + "Modifica nome" "App %1$s disattivata" %1$s, ha %2$d notifiche @@ -87,7 +86,7 @@ "Con il telefono ruotato" "Indicatori di notifica" "On" - "Off" + "OFF" "Accesso alle notifiche necessario" "Per mostrare gli indicatori di notifica, attiva le notifiche per l\'app %1$s" "Modifica impostazioni" @@ -133,11 +132,13 @@ "Personali" "Lavoro" "Profilo di lavoro" - "Qui puoi trovare le tue app di lavoro" - "Ogni app di lavoro è contrassegnata da un badge e viene tenuta al sicuro dalla tua organizzazione. Sposta le app nella schermata Home per accedervi più facilmente." - "Gestito dalla tua organizzazione" - "Le notifiche e le app non sono attive" - "Chiudi" - "Chiusa" + "Le app personali sono private e non possono essere visualizzate dall\'amministratore IT" + "Le app di lavoro sono contrassegnate e visibili all\'amministratore IT" + "Avanti" + "OK" + "App di lavoro: attive" + "App di lavoro: in pausa" + "Le app di lavoro sono in pausa" + "Non riceverai notifiche di lavoro e il tuo amministratore IT non potrà visualizzare la tua posizione" "Operazione non riuscita: %1$s" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index c25e8795f7..d371e4a486 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "עבודה" "האפליקציה לא מותקנת." "האפליקציה אינה זמינה" @@ -63,7 +62,7 @@ "בעיה בטעינת ווידג\'ט" "הגדרה" "זוהי אפליקציית מערכת ולא ניתן להסיר את התקנתה." - "תיקיה ללא שם" + "עריכת השם" "%1$s מושבתת" לאפליקציה %1$s יש %2$d התראות @@ -135,11 +134,13 @@ "אישיות" "עבודה" "פרופיל עבודה" - "ניתן למצוא כאן את אפליקציות העבודה" - "לכל אפליקציית עבודה יש תג ואבטחתה מטופלת בידי הארגון. אפשר להעביר אפליקציות אל מסך דף הבית כדי להקל את הגישה אליהן." - "מנוהל בידי הארגון" - "התראות ואפליקציות כבויות" - "סגירה" - "סגור" + "‏אפליקציות אישיות הן פרטיות ואינן מוצגות ל-IT" + "‏אפליקציות לעבודה מתויגות ומוצגות ל-IT" + "הבא" + "הבנתי" + "אפליקציות לעבודה: פועלות" + "אפליקציות לעבודה: מושהות" + "האפליקציות לעבודה מושהות" + "‏לא ישלחו אליך התראות לגבי עבודה ומנהל ה-IT לא יוכל לראות את המיקום שלך." "הפעולה נכשלה: %1$s" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 354f02032e..f46aad81de 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "仕事用" "このアプリはインストールされていません。" "このアプリは使用できません" @@ -63,7 +62,7 @@ "ウィジェットを表示できません" "セットアップ" "このシステムアプリはアンインストールできません。" - "名前のないフォルダ" + "名前の編集" "「%1$s」は無効です" %1$s の通知が %2$d 件あります @@ -133,11 +132,13 @@ "個人用" "仕事用" "仕事用プロファイル" - "ここには仕事用アプリが表示されます" - "仕事用アプリにはバッジが表示され、組織によって安全に保護されています。仕事用アプリをホーム画面に移動すると、簡単にアクセスできます。" - "組織によって管理されています" - "通知とアプリは OFF です" - "閉じる" - "終了" + "個人用アプリは非公開であり、IT は確認できません" + "仕事用アプリにはバッジが付き、IT に公開されます" + "次へ" + "OK" + "仕事用アプリ: ON" + "仕事用アプリ: 一時停止" + "仕事用アプリの一時停止" + "仕事用プロファイルの通知は届かず、IT 管理者は位置情報を確認できません" "失敗: %1$s" diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml index e9afef9077..ef538d3119 100644 --- a/res/values-ka/strings.xml +++ b/res/values-ka/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "სამუშაო" "აპი არ არის დაყენებული." "აპი მიუწვდომელია" @@ -63,7 +62,7 @@ "პრობლემა ვიჯეტის ჩატვირთვისას" "დაყენება" "ეს სისტემური აპია და მისი წაშლა შეუძლებელია." - "უსახელო საქაღალდე" + "სახელის რედაქტირება" "%1$s გაითიშა" %1$s-ში არის %2$d შეტყობინება @@ -133,11 +132,13 @@ "პირადი" "სამსახური" "სამსახურის პროფილი" - "აქ თავმოყრილია სამსახურის აპები" - "სამსახურის თითოეულ აპს აქვს ბეჯი, რაც ნიშნავს, რომ მათ უსაფრთხოებას თქვენი ორგანიზაცია უზრუნველყოფს. მარტივი წვდომისთვის, შეგიძლიათ სამსახურის აპები მთავარი ეკრანზე გადაიტანოთ." - "იმართება თქვენი ორგანიზაციის მიერ" - "შეტყობინებები და აპები გამორთულია" - "დახურვა" - "დახურული" + "პირადი აპები კონფიდენციალურია და IT ვერ ხედავს" + "სამსახურის აპები ბეჯით არის მონიშნული და ხილულია IT-ისთვის" + "შემდეგ" + "გასაგებია" + "სამსახურის აპები: ჩართულია" + "სამსახურის აპები: დაპაუზებულია" + "სამსახურის აპები დაპაუზებულია" + "სამსახურის შეტყობინებებს არ მიიღებთ და თქვენი IT ადმინისტრატორი თქვენს მდებარეობას ვერ ხედავს" "ვერ მოხერხდა: %1$s" diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml index 1cd9045b76..e62b03c940 100644 --- a/res/values-kk/strings.xml +++ b/res/values-kk/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Жұмыс" "Қолданба орнатылмаған." "Қолданба қол жетімді емес" @@ -63,7 +62,7 @@ "Виджетті жүктеу барысында мәселе орын алды" "Орнату" "Бұл жүйе қолданбасы, сондықтан оны алу мүмкін емес." - "Атауы жоқ қалта" + "Атын өңдеу" "%1$s өшірілді" %1$s қолданбасында %2$d хабарландыру бар @@ -133,11 +132,13 @@ "Жеке" "Жұмыс" "Жұмыс профилі" - "Жұмыс қолданбалары осы жерде берілген" - "Әрбір жұмыс қолданбасында танымбелгі бар. Ол оның қауіпсіздігі ұйым арқылы қамтамасыз етілетінін білдіреді. Жұмыс қолданбаларына оңай кіру үшін, оларды Негізгі экранға жылжытуға болады." - "Ұйым арқылы басқарылады" - "Хабарландырулар мен қолданбалар өшірулі" - "Жабу" - "Жабық" + "Жеке қолданбалар құпия сақталады және оларды әкімші көрмейді." + "Жеке қолданбаларға танымбелгілер қойылады және әкімшіге көрсетіледі." + "Келесі" + "Түсінікті" + "Жұмыс қолданбалары: қосулы" + "Жұмыс қолданбалары: кідіртілді" + "Жұмыс қолданбалары кідіртілді" + "Ешқандай жұмыс қолданбасының хабарландыруын алмайсыз және әкімшіңіз геодерегіңізді көре алмайды." "Қате шықты: %1$s" diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index 973804200a..84c7ab2571 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -62,7 +62,7 @@ "បញ្ហា​ក្នុង​ការ​ផ្ទុក​ធាតុ​​ក្រាហ្វិក" "រៀបចំ" "នេះ​​​ជា​កម្មវិធី​ប្រព័ន្ធ មិន​អាច​លុប​បាន​ទេ។" - "ថត​គ្មាន​ឈ្មោះ" + "កែ​ឈ្មោះ" "បានបិទដំណើរការ %1$s" %1$s, មាន​ការជូនដំណឹង %2$d @@ -132,11 +132,13 @@ "ផ្ទាល់ខ្លួន" "ការងារ" "កម្រងព័ត៌មានការងារ" - "ស្វែង​រក​កម្មវិធី​ការងារ​នៅទីនេះ" - "កម្មវិធី​ការងារ​នីមួយៗ​មាន​ស្លាកមួយ និងត្រូវ​បានរក្សាទុក​យ៉ាងមានសុវត្ថិភាព​ដោយស្ថាប័ន​របស់អ្នក។ សូម​ផ្លាស់ទី​កម្មវិធី​ទៅកាន់​អេក្រង់​ដើម​របស់អ្នក​ ដើម្បី​ងាយស្រួល​ចូលប្រើជាងមុន។" - "គ្រប់គ្រងដោយ​ស្ថាប័ន​របស់អ្នក" - "ការជូនដំណឹង​ និងកម្មវិធី​ត្រូវបានបិទ" - "បិទ" - "បានបិទ" + "កម្មវិធីផ្ទាល់ខ្លួន​មានលក្ខណៈ​ឯកជន ហើយអ្នកគ្រប់គ្រង​ផ្នែកព័ត៌មានវិទ្យា​មិនអាចមើលឃើញ​កម្មវិធីទាំងនេះទេ" + "កម្មវិធីការងារ​ត្រូវបានដាក់​គ្រឿងសម្គាល់ និង​អាចមើលឃើញដោយ​អ្នកគ្រប់គ្រង​ផ្នែកព័ត៌មានវិទ្យា" + "បន្ទាប់" + "យល់ហើយ" + "កម្មវិធីការងារ៖ បើក" + "កម្មវិធី​ការងារ៖ បានផ្អាក" + "កម្មវិធី​ការងារ​ត្រូវបានផ្អាក" + "អ្នកនឹងមិន​ទទួលបាន​ការជូនដំណឹង​អំពីការងារទេ ហើយអ្នកគ្រប់គ្រង​ផ្នែកព័ត៌មានវិទ្យា​របស់អ្នក​ក៏មិន​អាចមើលឃើញ​ទីតាំង​របស់អ្នក​បានដែរ" "បានបរាជ័យ៖ %1$s" diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index 67ea6a830a..796afbf25a 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -62,7 +62,7 @@ "ವಿಜೆಟ್ ಲೋಡ್‌ ಮಾಡುವಲ್ಲಿ ಸಮಸ್ಯೆ" "ಸೆಟಪ್" "ಇದೊಂದು ಅಪ್ಲಿಕೇಶನ್ ಆಗಿದೆ ಮತ್ತು ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ." - "ಹೆಸರಿಲ್ಲದ ಫೋಲ್ಡರ್" + "ಹೆಸರನ್ನು ಎಡಿಟ್ ಮಾಡಿ" "%1$s ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ" %1$s, %2$d ಅಧಿಸೂಚನೆಗಳನ್ನು ಹೊಂದಿದೆ @@ -132,11 +132,13 @@ "ವೈಯಕ್ತಿಕ" "ಕೆಲಸ" "ಕೆಲಸದ ಪ್ರೊಫೈಲ್" - "ಕೆಲಸದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಇಲ್ಲಿ ಹುಡುಕಿ" - "ಕೆಲಸದ ಪ್ರತಿ ಅಪ್ಲಿಕೇಶನ್ ಬ್ಯಾಡ್ಜ್ ಹೊಂದಿದೆ ಮತ್ತು ನಿಮ್ಮ ಸಂಸ್ಥೆಯಿಂದ ಸುರಕ್ಷಿತವಾಗಿ ಇರಿಸಲಾಗುತ್ತದೆ. ಸುಲಭ ಪ್ರವೇಶಕ್ಕಾಗಿ ನಿಮ್ಮ ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ಗೆ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಸರಿಸಿ." - "ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗಿದೆ" - "ಅಧಿಸೂಚನೆಗಳು ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಆಫ್ ಆಗಿವೆ" - "ಮುಚ್ಚಿ" - "ಮುಚ್ಚಲಾಗಿದೆ" + "ವೈಯಕ್ತಿಕ ಆ್ಯಪ್‌ಗಳು ಖಾಸಗಿಯಾಗಿರುತ್ತದೆ ಮತ್ತು IT ವಿಭಾಗದವರಿಗೆ ಕಾಣಿಸುವುದಿಲ್ಲ" + "ಉದ್ಯೋಗದ ಆ್ಯಪ್‌ಗಳನ್ನು ಬ್ಯಾಡ್ಜ್ ಮಾಡಲಾಗಿದೆ ಮತ್ತು IT ವಿಭಾಗದವರಿಗೆ ಕಾಣಿಸುತ್ತದೆ" + "ಮುಂದೆ" + "ಸರಿ" + "ಉದ್ಯೋಗದ ಆ್ಯಪ್‌ಗಳು: ಆನ್ ಆಗಿದೆ" + "ಉದ್ಯೋಗದ ಆ್ಯಪ್‌ಗಳು: ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ" + "ಉದ್ಯೋಗದ ಆ್ಯಪ್‌ಗಳನ್ನು ವಿರಾಮಗೊಲಿಸಲಾಗಿದೆ" + "ನೀವು ಯಾವುದೇ ಉದ್ಯೋಗದ ಅಧಿಸೂಚನೆಗಳನ್ನು ಪಡೆಯುವುದಿಲ್ಲ ಮತ್ತು IT ನಿರ್ವಾಹಕರು ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ನೋಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ" "ವಿಫಲವಾಗಿದೆ: %1$s" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 58b65da032..5d33ffa75d 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "업무" "앱이 설치되지 않았습니다." "앱을 사용할 수 없음" @@ -63,7 +62,7 @@ "위젯을 로드하는 중 문제가 발생했습니다." "설정" "시스템 앱은 제거할 수 없습니다." - "이름이 없는 폴더" + "이름 수정" "%1$s 사용 안함" %1$s%2$d개의 알림이 있음 @@ -133,11 +132,13 @@ "개인" "직장" "직장 프로필" - "여기에서 업무용 앱 찾기" - "각 업무용 앱에는 배지가 있으며 업무용 앱은 조직에서 안전하게 보호됩니다. 앱을 홈 화면으로 이동하여 더 간편하게 사용하세요." - "조직에서 관리" - "알림 및 앱 사용 중지됨" - "닫기" - "종료됨" + "개인 앱은 비공개이며 IT 관리자가 볼 수 없습니다" + "직장 앱에는 배지가 표시되며 IT 관리자가 볼 수 있습니다" + "다음" + "확인" + "직장 앱: 사용" + "직장 앱: 일시중지됨" + "직장 앱이 일시중지됨" + "직장 알림을 받지 못하게 되며, IT 관리자가 내 위치를 확인할 수 없습니다." "실패: %1$s" diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml index d52446c83c..84b8f1f4ca 100644 --- a/res/values-ky/strings.xml +++ b/res/values-ky/strings.xml @@ -62,7 +62,7 @@ "Виджетти жүктөөдө маселе бар" "Орнотуу" "Бул системдик колдонмо жана аны чечкенге болбойт." - "Аты жок фолдер" + "Аталышын түзөтүү" "%1$s өчүрүлгөн" %1$s, %2$d билдирмеси бар @@ -88,7 +88,7 @@ "Күйүк" "Өчүк" "Эскертмелерге уруксат берилиши керек" - "Эскертме белгилерин көрсөтүү максатында, %1$s үчүн колдонмонун эскертмелерин күйгүзүү керек" + "Эскертме белгилерин көрсөтүү максатында, %1$s үчүн колдонмонун билдирмелерин күйгүзүү керек" "Жөндөөлөрдү өзгөртүү" "Билдирмелер белгилерин көрсөтүү" "Башкы экранга сүрөтчө кошуу" @@ -111,7 +111,7 @@ "Муну жылдыруу" "%1$s катарга %2$s тилкеге жылдыруу" "%1$s орунга жылдыруу" - "Сүйүктүүлөргө %1$s жылдыруу" + "Тандалмаларга %1$s жылдыруу" "Нерсе жылдырылды" "Куржунга кошуу: %1$s" "%1$s куржунуна кошуу" @@ -132,11 +132,13 @@ "Жеке колдонмолор" "Жумуш колдонмолору" "Жумуш профили" - "Жумуш колдонмолорун бул жерден таап алыңыз" - "Ар бир жумуш колдонмосунун бейджиги бар жана ал уюмуңуз тарабынан коопсуз сакталат. Колдонмолорго тез өтүү үчүн аларды Башкы экранга кошуп алыңыз." - "Уюмуңуз тарабынан башкарылат" - "Билдирүүлөр жана колдонмолор өчүрүлгөн" - "Жабуу" - "Жабык" + "Жеке колдонмолор купуя пайдаланылып, аларды IT админ көрбөйт" + "Жумуш колдонмолору белгиленип, аларды IT админ көрөт" + "Кийинки" + "Түшүндүм" + "Жумуш колдонмолору: Күйүк" + "Жумуш колдонмолору: Тындырылды" + "Жумуш колдонмолору тындырылды" + "Жумуш билдирмелерин албайсыз, ал эми IT админ кайда жүргөнүңүздү көрбөйт" "Аткарылган жок: %1$s" diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index afe7664d51..ce76c1775d 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "ວຽກ" "ແອັບຯບໍ່ໄດ້ຖືກຕິດຕັ້ງ." "ແອັບຯ​ໃຊ້​ບໍ່​ໄດ້" @@ -63,7 +62,7 @@ "ມີບັນຫາໃນການໂຫລດວິດເຈັດ" "ຕິດຕັ້ງ" "ນີ້ແມ່ນແອັບຯຂອງລະບົບ ແລະບໍ່ສາມາດຖອນການຕິດຕັ້ງອອກໄດ້." - "ໂຟນເດີຍັງບໍ່ຖືກຕັ້ງຊື່" + "ແກ້ໄຂຊື່" "ປິດການນຳໃຊ້ %1$s ແລ້ວ" %1$s, ມີ %2$d ການແຈ້ງເຕືອນ @@ -133,11 +132,13 @@ "ສ່ວນຕົວ" "ວຽກ" "ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ" - "ຊອກຫາແອັບວຽກຢູ່ບ່ອນນີ້" - "ແຕ່ລະແອັບວຽກຈະມີປ້າຍ ແລະ ຖືກຈັດເກັບໄວ້ຢ່າງປອດໄພໂດຍອົງກອນຂອງທ່ານ. ທ່ານສາມາດຍ້າຍແອັບໄປໃສ່ໜ້າຈໍຫຼັກເພື່ອໃຫ້ເຂົ້າໃຊ້ງ່າຍຂຶ້ນໄດ້." - "ຈັດການໂດຍອົງກອນຂອງທ່ານ" - "ການແຈ້ງເຕືອນ ແລະ ແອັບຖືກປິດໄວ້" - "ປິດ" - "ປິດແລ້ວ" + "ແອັບສ່ວນຕົວແມ່ນເປັນສ່ວນຕົວ ແລະ ຝ່າຍໄອທີບໍ່ສາມາດເບິ່ງເຫັນໄດ້" + "ແອັບວຽກຈະມີປ້າຍກຳກັບໄວ້ ແລະ ຝ່າຍໄອທີສາມາດເບິ່ງດຫັນໄດ້" + "ຕໍ່ໄປ" + "ເຂົ້າໃຈແລ້ວ" + "ແອັບວຽກ: ເປີດ" + "ແອັບວຽກ: ຢຸດຊົ່ວຄາວ" + "ຢຸດແອັບວຽກໄວ້ຊົ່ວຄາວແລ້ວ" + "ທ່ານຈະບໍ່ໄດ້ຮັບການແຈ້ງເຕືອນວຽກໃດໆເລີຍ ແລະ ຜູ້ເບິ່ງແຍງໄອທີຂອງທ່ານຈະບໍ່ສາມາດເບິ່ງເຫັນສະຖານທີ່ຂອງທ່ານໄດ້" "ບໍ່ສຳເລັດ: %1$s" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 6571582cec..8865209cba 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Darbas" "Programa neįdiegta." "Programa nepasiekiama" @@ -63,7 +62,7 @@ "Problema įkeliant valdiklį" "Sąranka" "Tai sistemos programa ir jos negalima pašalinti." - "Aplankas be pavadinimo" + "Pavadinimo redagavimas" "„%1$s“ išjungta" Programoje „%1$s“ yra %2$d pranešimas @@ -135,11 +134,13 @@ "Asmeninės" "Darbo" "Darbo profilis" - "Darbo programas rasite čia" - "Kiekvienai darbo programai priskirtas ženklelis, o tokių programų sauga rūpinasi jūsų organizacija. Perkelkite programas į pagrindinį ekraną, kad galėtumėte lengviau jas pasiekti." - "Tvarko jūsų organizacija" - "Programos ir pranešimai išjungti" - "Uždaryti" - "Uždaryta" + "Asmeninės programos yra privačios ir jų nemato IT administratorius" + "Darbo programos yra pažymėtos ženkleliu ir jas mato IT administratorius" + "Kitas" + "Supratau" + "Darbo programos: įjungta" + "Darbo programos: pristabdyta" + "Darbo programos pristabdytos" + "Negausite jokių darbo pranešimų ir jūsų IT administratorius negalės peržiūrėti jūsų vietovės duomenų" "Nepavyko: %1$s" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 3da0fbb2e5..e341549044 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Darbs" "Lietotne nav instalēta." "Lietotne nav pieejama." @@ -63,7 +62,7 @@ "Ielādējot logrīku, radās problēma." "Notiek iestatīšana" "Šī ir sistēmas lietotne, un to nevar atinstalēt." - "Mape bez nosaukuma" + "Nosaukuma rediģēšana" "Lietotne %1$s ir atspējota" Lietotnē %1$s ir %2$d paziņojumi @@ -134,11 +133,13 @@ "Personīgās lietotnes" "Darba lietotnes" "Darba profils" - "Meklējiet darba lietotnes šeit" - "Katrai darba lietotnei ir emblēma, un jūsu organizācija aizsargā šīs lietotnes. Lai varētu ērtāk piekļūt lietotnēm, pārvietojiet tās uz sākuma ekrānu." - "Pārvalda jūsu organizācija" - "Paziņojumi un lietotnes ir izslēgtas" - "Aizvērt" - "Aizvērta" + "Personīgās lietotnes ir privātas, un IT administrators nevar tās redzēt" + "Darba lietotnēm ir piešķirtas emblēmas, un IT administrators var tās redzēt" + "Tālāk" + "Labi" + "Darba lietotnes: ieslēgtas" + "Darba lietotnes: apturētas" + "Darba lietotnes ir apturētas" + "Jūs nesaņemsiet nekādus darba paziņojumus, un jūsu IT administrators nevarēs skatīt jūsu atrašanās vietu." "Neizdevās: %1$s" diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index ab14e8900b..2de774cfd6 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -62,7 +62,7 @@ "Проблем при вчитувањето на виџетот" "Поставување" "Ова е системска апликација и не може да се деинсталира." - "Неименувана папка" + "Изменете го името" "%1$s е оневозможена" %1$s има %2$d известување @@ -80,9 +80,9 @@ "Виџети" "Тапети" "Стилови и тапети" - "Поставки за Home" + "Поставки за почетен екран" "Оневозможено од администраторот" - "Дозволете ротација на Почетниот екран" + "Дозволете ротација на почетниот екран" "Кога телефонот се ротира" "Точки за известување" "Вклучено" @@ -132,11 +132,13 @@ "Лично" "За работа" "Работен профил" - "Најдете апликации за работа тука" - "Секоја апликација за работа има значка, а организацијата се грижи за нејзината безбедност. За полесен пристап, преместете ги апликациите на почетниот екран." - "Управувано од вашата организација" - "Известувањата и апликациите се исклучени" - "Затвори" - "Затворено" + "Личните апликации се приватни и IT-администраторот не може да ги види" + "Работните апликации имаат значка и IT-администраторот може да ги види" + "Следно" + "Сфатив" + "Работни апликации: вклучени" + "Работни апликации: паузирани" + "Работните апликации се паузирани" + "Нема да добивате работни известувања и IT-администраторот нема да може да ја види вашата локација" "Не успеа: %1$s" diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml index 4362e7cca5..15834dad51 100644 --- a/res/values-ml/strings.xml +++ b/res/values-ml/strings.xml @@ -20,7 +20,6 @@ "ലോഞ്ചർ3" - "ഔദ്യോഗികം" "അപ്ലിക്കേഷൻ ഇൻസ്‌റ്റാളുചെ‌യ്‌തിട്ടില്ല." "അപ്ലിക്കേഷൻ ലഭ്യമല്ല" @@ -63,7 +62,7 @@ "വിജറ്റ് ലോഡുചെയ്യുന്നതിൽ പ്രശ്നമുണ്ട്" "സജ്ജീകരിക്കുക" "ഇതൊരു സിസ്‌റ്റം അപ്ലിക്കേഷനായതിനാൽ അൺഇൻസ്‌റ്റാളുചെയ്യാനാവില്ല." - "പേരുനൽകാത്ത ഫോൾഡർ" + "പേര് എഡിറ്റ് ചെയ്യുക" "%1$s പ്രവർത്തനരഹിതമാക്കി" %1$s എന്ന ആപ്പിന്, %2$d അറിയിപ്പുകൾ ഉണ്ട് @@ -133,11 +132,13 @@ "വ്യക്തിപരം" "ജോലി" "ഔദ്യോഗിക പ്രൊഫൈൽ" - "ഔദ്യോഗിക ആപ്പുകൾ ഇവിടെ കണ്ടെത്തുക" - "എല്ലാ ഔദ്യോഗിക ആപ്പിനും ഒരു ബാഡ്‌ജ് ഉണ്ട്, നിങ്ങളുടെ സ്ഥാപനം അത് സുരക്ഷിതമായി സൂക്ഷിക്കുന്നു. എളുപ്പത്തിൽ ആക്സസ് ചെയ്യാൻ ആപ്പുകളെ ഹോം സ്‌ക്രീനിലേക്ക് നീക്കുക." - "നിങ്ങളുടെ സ്ഥാപനം നിയന്ത്രിക്കുന്നത്" - "അറിയിപ്പുകളും ആപ്പുകളും ഓഫാണ്" - "അടയ്ക്കുക" - "അടച്ചു" + "വ്യക്തിപരമായ ആപ്പുകൾ സ്വകാര്യമാണ്, ഐടി വിഭാഗത്തിന് ദൃശ്യമാവില്ല" + "ഔദ്യോഗിക ആപ്പുകൾ ബാഡ്‌ജുള്ളവയാണ്, ഐടി വിഭാഗത്തിന് ദൃശ്യമാണ്" + "അടുത്തത്" + "മനസ്സിലായി" + "ഔദ്യോഗിക ആപ്പുകൾ: ഓണാണ്" + "ഔദ്യോഗിക ആപ്പുകൾ: തൽക്കാലം നിർത്തിയിരിക്കുന്നു" + "ഔദ്യോഗിക ആപ്പുകൾ തൽക്കാലം നിർത്തിയിരിക്കുന്നു" + "നിങ്ങൾക്ക് ഔദ്യോഗിക അറിയിപ്പുകളൊന്നും ലഭിക്കുകയില്ല, ഐടി അഡ്‌മിന് നിങ്ങളുടെ ലൊക്കേഷൻ കാണാൻ കഴിയില്ല" "പരാജയപ്പെട്ടു: %1$s" diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index ab02ac655c..eb812ef068 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Ажил" "Апп суугаагүй байна." "Апп-г ашиглах боломжгүй" @@ -63,7 +62,7 @@ "Виджет ачаалахад асуудал гарав" "Тохируулга" "Энэ апп нь системийн апп ба устгах боломжгүй." - "Нэргүй фолдер" + "Нэр засах" "%1$s-г идэвхгүй болгосон" %1$s, %2$d мэдэгдэлтэй байна @@ -133,11 +132,13 @@ "Хувийн" "Ажил" "Ажлын профайл" - "Ажлын аппыг эндээс олно уу" - "Ажлын апп тус бүр тэмдэгтэй ба эдгээрийг танай байгууллагаас аюулгүй байлгадаг. Аппуудад хялбар хандахын тулд тэдгээрийг Үндсэн нүүр хэсэгт зөөнө үү." - "Танай байгууллагаас удирддаг" - "Мэдэгдэл, апп унтраалттай байна" - "Хаах" - "Хаасан" + "Хувийн аппууд нь хувийнх бөгөөд тэднийг IT харах боломжгүй" + "Ажлын аппууд нь тэмдэглэгдсэн бөгөөд IT-д харагддаг" + "Дараах" + "Ойлголоо" + "Ажлын аппууд: Асаалттай" + "Ажлын аппууд: Түр зогсоосон" + "Ажлын аппуудыг түр зогсоосон" + "Та ямар ч ажлын мэдэгдэл авахгүй бөгөөд таны IT админ таны байршлыг харах боломжгүй" "Амжилтгүй болсон: %1$s" diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index 49e38982cd..5c2ae5f1dc 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "कार्य" "अ‍ॅप इंस्टॉल केलेला नाही." "अ‍ॅप उपलब्ध नाही" @@ -47,7 +46,7 @@ "आवडीच्या ट्रे मध्ये आणखी जागा नाही" "अ‍ॅप्स सूची" "वैयक्तिक अ‍ॅप्स सूची" - "कामाच्या ठिकाणी वापरली जाणाऱ्या अॅप्सची सूची" + "कामाच्या ठिकाणी वापरली जाणाऱ्या ॲप्सची सूची" "होम" "काढा" "अनइंस्टॉल करा" @@ -63,7 +62,7 @@ "विजेट लोड करण्यात समस्या" "सेटअप" "हा सिस्टम अ‍ॅप आहे आणि अनइंस्टॉल केला जाऊ शकत नाही." - "अनामित फोल्डर" + "नाव संपादित करा" "%1$s अक्षम केला आहे" %1$sसाठी %2$d सूचना आहेत @@ -83,7 +82,7 @@ "शैली आणि वॉलपेपर" "होम सेटिंग्‍ज" "आपल्या प्रशासकाने अक्षम केले" - "मुख्यस्क्रीन फिरविण्‍यास अनुमती द्या" + "मुख्य स्क्रीन फिरविण्‍यास अनुमती द्या" "फोन फिरविला जातो तेव्हा" "सूचना बिंदू" "सुरू" @@ -93,7 +92,7 @@ "सेटिंग्ज बदला" "सूचना बिंदू दाखवा" "होम स्क्रीनवर आयकन जोडा" - "नवीन अॅप्ससाठी" + "नवीन ॲप्ससाठी" "अज्ञात" "काढा" "शोधा" @@ -133,11 +132,13 @@ "वैयक्तिक" "कार्यालय" "कार्य प्रोफाइल" - "कामाची अ‍ॅप्स येथे मिळवा" - "प्रत्येक कार्य अ‍ॅपला एक बॅज असतो आणि तो तुमच्या संस्थेकडून सुरक्षित ठेवला जातो. अधिक सहज अ‍ॅक्सेससाठी अ‍ॅप्स तुमच्या होम स्क्रीनवर हलवा." - "तुमच्या संस्थेकडून व्यवस्थापित" - "सूचना आणि अ‍ॅप्स बंद आहेत" - "बंद करा" - "बंद केले" + "व्यक्तिगत ॲप्स खाजगी असतात आणि आयटीद्वारे पाहिले जाऊ शकत नाहीत" + "कार्य ॲप्सना बॅज केलेले असते आणि आयटीद्वारे पाहिले जाऊ शकतात" + "पुढील" + "समजले" + "कार्य ॲप्स: सुरू आहेत" + "कार्य ॲप्स: थांबवली आहेत" + "कार्य ॲप्स थांबवली आहेत" + "तुम्हाला कोणत्याही कामाच्या सूचना मिळणार नाहीत आणि तुमच्या आयटी ॲडमिनला तुमचे स्थान दिसणार नाही" "हे करता आले नाही: %1$s" diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index 7d054124fb..566cba5bb2 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Kerja" "Apl tidak dipasang." "Apl tidak tersedia" @@ -63,7 +62,7 @@ "Masalah memuatkan widget" "Persediaan" "Ini ialah apl sistem dan tidak boleh dinyahpasang." - "Folder Tanpa Nama" + "Edit Nama" "%1$s dilumpuhkan" %1$s, mempunyai %2$d pemberitahuan @@ -133,11 +132,13 @@ "Peribadi" "Kerja" "Profil kerja" - "Temui apl kerja di sini" - "Setiap apl kerja terdapat lencana dan dilindungi oleh organisasi anda. Alihkan apl ke Skrin Utama untuk akses yang lebih mudah." - "Diurus oleh organisasi anda" - "Pemberitahuan dan apl dimatikan" - "Tutup" - "Ditutup" + "Apl peribadi adalah tertutup & tidak boleh dilihat oleh IT" + "Apl kerja adalah berlencana & kelihatan kepada IT" + "Seterusnya" + "OK" + "Apl kerja: Hidup" + "Apl kerja: Dijeda" + "Apl kerja dijeda" + "Anda tidak akan menerima sebarang pemberitahuan kerja dan pentadbir IT anda tidak dapat melihat lokasi anda" "Gagal: %1$s" diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index 78856f657d..ad8881ba94 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -62,7 +62,7 @@ "ဝဒ်ဂျက် တင်ရာတွင် ပြသနာ ရှိပါသည်" "စဖွင့်သတ်မှတ်ရန်" "ဤအပ်ပလီကေးရှင်းမှာ စစ်စတန်ပိုင်းဆိုင်ရာ အပ်ပလီကေးရှင်းဖြစ်ပါသည်။ ထုတ်ပစ်၍ မရပါ" - "အမည်မရှိအကန့်" + "အမည်ကို တည်းဖြတ်ပါ" "%1$s ကို ပိတ်ထားသည်" %1$s တွင် သတိပေးချက် %2$d ခု ရှိသည် @@ -132,11 +132,13 @@ "ကိုယ်ပိုင်" "အလုပ်" "အလုပ်ပရိုဖိုင်" - "အလုပ်အက်ပ်များကို ဤနေရာတွင်ရှာဖွေပါ" - "အလုပ်အက်ပ်တိုင်းတွင် တံဆိပ် တစ်ခုစီရှိပြီး သင်၏ အဖွဲ့အစည်းက လုံခြုံအောင် ထားရှိပါသည်။ အသုံးပြုရ ပိုမိုလွယ်ကူစေရန် အက်ပ်များကို သင်၏ ပင်မမျက်နှာပြင်သို့ ရွှေ့ပါ။" - "သင်၏ အဖွဲ့အစည်းက စီမံခန့်ခွဲထားပါသည်" - "အကြောင်းကြားချက်များနှင့် အက်ပ်များကို ပိတ်ထားသည်" - "ပိတ်ရန်" - "ပိတ်ထားသည်" + "ကိုယ်ရေးကိုယ်တာအက်ပ်များသည် သီးသန့်ဖြစ်၍ IT က တွေ့နိုင်မည်မဟုတ်ပါ" + "အလုပ်သုံးအက်ပ်များကို တံဆိပ်တပ်ထားပြီး IT က မြင်နိုင်သည်" + "ရှေ့သို့" + "Ok" + "အလုပ်သုံးအက်ပ်များ- ဖွင့်ထားသည်" + "အလုပ်သုံးအက်ပ်များ- ခေတ္တရပ်ထားသည်" + "အလုပ်သုံးအက်ပ်များကို ခေတ္တရပ်ထားသည်" + "အလုပ်အကြောင်းကြားချက်တစ်ခုမျှ ရရှိမည်မဟုတ်ဘဲ သင့် IT စီမံခန့်ခွဲသူက သင့်တည်နေရာကို မြင်ရမည်မဟုတ်ပါ" "မအောင်မြင်ပါ− %1$s" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 2257367a6a..eb860eaccd 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Jobb" "Appen er ikke installert." "Appen er ikke tilgjengelig" @@ -63,7 +62,7 @@ "Problem ved innlasting av modul" "Konfigurering" "Dette er en systemapp som ikke kan avinstalleres." - "Mappe uten navn" + "Rediger navn" "Slo av %1$s" %1$s har %2$d varsler @@ -133,11 +132,13 @@ "Personlig" "Jobb" "Jobbprofil" - "Finn jobbapper her" - "Alle jobbapper har et merke og sikres av organisasjonen din. Flytt apper til startskjermen for å gjøre det enklere å finne dem." - "Administreres av organisasjonen din" - "Varsler og apper er slått av" - "Lukk" - "Lukket" + "Personlige apper er private, og IT-administratoren kan ikke se dem" + "Jobbapper er merket og synlige for IT-administratoren" + "Neste" + "Greit" + "Jobbapper: på" + "Jobbapper: satt på pause" + "Jobbapper er satt på pause" + "Du kommer ikke til å motta jobbvarsler, og IT-administratoren din kan ikke se posisjonen din" "Mislyktes: %1$s" diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index 1e7aee9e9e..787463e6d9 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "कार्य" "अनुप्रयोग स्थापित छैन।" "अनुप्रयोग उपलब्ध छैन" @@ -63,7 +62,7 @@ "समस्या लोडिङ गर्ने विजेट" "सेटअप" "यो प्रणाली अनुप्रयोग हो र यसलाई स्थापना रद्द गर्न सकिँदैन।" - "बेनाम फोल्डर" + "नाम सम्पादन गर्नुहोस्" "असक्षम पारिएको %1$s" %1$s, का %2$d सूचनाहरू छन् @@ -133,11 +132,13 @@ "व्यक्तिगत" "कार्यसम्बन्धी" "कार्य प्रोफाइल" - "कार्यसम्बन्धी अनुप्रयोगहरू यहाँ प्राप्त गर्नुहोस्" - "कार्यसम्बन्धी प्रत्येक अनुप्रयोगमा एउटा ब्याज छ र तपाईंको संगठनले यसलाई सुरक्षित राखेको छ । अझ सजिलो गरी पहुँच राख्नका लागि अनुप्रयोगहरूलाई आफ्नो गृहस्क्रिनमा सार्नुहोस्‌।" - "तपाईंको सङ्गठनले व्यवस्थापन गरेको" - "सूचना र अनुप्रयोगहरू निष्क्रिय छन्‌" - "बन्द गर्नुहोस्" - "बन्द गरियो" + "व्यक्तिगत अनुप्रयोगहरू निजी हुन्छन् र IT ले ती अनुप्रयोग देख्न सक्दैनन्" + "कार्यसम्बन्धी अनुप्रयोगहरूमा ब्याज चिन्ह लगाइएको हुन्छ र IT ले ती अनुप्रयोग देख्न सक्छन्" + "अर्को" + "बुझेँ" + "कार्यसम्बन्धी अनुप्रयोगहरू: सक्रिय छन्" + "कार्यसम्बन्धी अनुप्रयोगहरू: पज गरिएका छन्" + "कार्यसम्बन्धी अनुप्रयोगहरू पज गरिएका छन्" + "तपाईं कार्यसम्बन्धी कुनै पनि सूचना प्राप्त गर्नु हुने छैन र तपाईंका IT प्रशासक तपाईंको स्थान देख्न सक्नुहुन्न" "कार्य पूरा गर्न सकिएन: %1$s" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index ec30d8c6b2..78897e42bd 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Werk" "App is niet geïnstalleerd." "App is niet beschikbaar" @@ -63,7 +62,7 @@ "Probleem bij het laden van widget" "Configuratie" "Dit is een systeemapp die niet kan worden verwijderd." - "Naamloze map" + "Naam bewerken" "%1$s is uitgeschakeld" %1$s, heeft %2$d meldingen @@ -133,11 +132,13 @@ "Privé" "Werk" "Werkprofiel" - "Zoek hier naar werk-apps" - "Elke werk-app heeft een badge en wordt beveiligd door je organisatie. Verplaats apps naar je startscherm voor snelle toegang." - "Beheerd door je organisatie" - "Meldingen en apps zijn uitgeschakeld" - "Sluiten" - "Gesloten" + "Persoonlijke apps zijn privé en niet zichtbaar voor de IT-afdeling" + "Werk-apps hebben een badge en zijn zichtbaar voor de IT-afdeling" + "Volgende" + "OK" + "Werk-apps: aan" + "Werk-apps: onderbroken" + "Werk-apps zijn onderbroken" + "Je krijgt geen werkmeldingen en je IT-beheerder kan je locatie niet bekijken" "Mislukt: %1$s" diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml index 4ddc903474..ae789f5cee 100644 --- a/res/values-or/strings.xml +++ b/res/values-or/strings.xml @@ -20,7 +20,6 @@ "ଲଞ୍ଚର୍3" - "କାମ" "ଆପ୍‌ ଇନଷ୍ଟଲ୍‌ ହୋଇନାହିଁ" "ଆପ୍‌ ଉପଲବ୍ଧ ନାହିଁ" @@ -63,7 +62,7 @@ "ୱିଜେଟ୍‌ ଲୋଡ୍‌ ହେବାରେ ସମସ୍ୟା ଅଛି" "ସେଟ୍ ଅପ୍ କରନ୍ତୁ" "ଏହା ଏକ ସିଷ୍ଟମ୍‌ ଆପ୍‌ ଅଟେ ଏବଂ ଏହା ଅନଇନଷ୍ଟଲ୍‌ କରାଯାଇ ପାରିବ ନାହିଁ।" - "ବେନାମୀ ଫୋଲ୍ଡର୍‌" + "ନାମ ସମ୍ପାଦନ କରନ୍ତୁ" "%1$s ଅକ୍ଷମ କରାଗଲା" %1$s, %2$dଟି ବିଜ୍ଞପ୍ତି ରହିଛି @@ -85,8 +84,8 @@ "ଆପଣଙ୍କ ଆଡମିନଙ୍କ ଦ୍ୱାରା ଅକ୍ଷମ କରାଯାଇଛି" "ହୋମ୍‌ ସ୍କ୍ରୀନ୍ ବୁଲାଇବା ଅନୁମତି ଦିଅନ୍ତୁ" "ଯେତେବେଳେ ଫୋନକୁ ବୁଲାଯାଇଥାଏ" - "ବିଜ୍ଞପ୍ତି ବିନ୍ଦୁଗୁଡ଼ିକ" - "ଚାଲୁ କରନ୍ତୁ" + "ବିଜ୍ଞପ୍ତି ଡଟ୍ସ" + "ଚାଲୁ" "ବନ୍ଦ କରନ୍ତୁ" "ବିଜ୍ଞପ୍ତି ଆକ୍ସେସ୍‌ ଆବଶ୍ୟକ ଅଟେ" "ବିଜ୍ଞପ୍ତି ବିନ୍ଦୁ ଦେଖାଇବାକୁ, %1$s ପାଇଁ ଆପ୍‌ ବିଜ୍ଞପ୍ତି ଅନ୍‌ କରନ୍ତୁ" @@ -133,11 +132,13 @@ "ବ୍ୟକ୍ତିଗତ" "କାମ" "ୱର୍କ ପ୍ରୋଫାଇଲ୍‌" - "ଏଠାରେ କାମ ଆପ୍‌ ଖୋଜନ୍ତୁ" - "ପ୍ରତ୍ୟେକ କାଯ୍ୟକାରୀ ଆପ୍‌ର ଗୋଟିଏ ବ୍ୟାଜ୍ (ଚିହ୍ନ) ଅଛି, ଯାହାକୁ ଆପଣଙ୍କ ସଂସ୍ଥା ସୁରକ୍ଷିତ ରଖିଥାଏ। ସହଜରେ ଆକ୍ସେସ୍ କରିବା ପାଇଁ ଆପ୍‌କୁ ହୋମ୍ ସ୍କ୍ରୀନ୍ ଉପରକୁ ଆଣନ୍ତୁ।" - "ଆପଣଙ୍କ ସଂସ୍ଥା ଦ୍ୱାରା ପରିଚାଳିତ" - "ବିଜ୍ଞପ୍ତି ଓ ଆପ୍‌ଗୁଡ଼ିକ ବନ୍ଦ ଅଛି" - "ବନ୍ଦ କରନ୍ତୁ" - "ବନ୍ଦ ହୋଇଯାଇଛି" + "ବ୍ୟକ୍ତିଗତ ଆପଗୁଡ଼ିକ ନିଜସ୍ୱ ଅଟେ & IT ଟିମ୍ ଦ୍ୱାରା ଦେଖାଯାଇପାରିବ ନାହିଁ" + "ୱାର୍କ ଆପଗୁଡ଼ିକୁ ବ୍ୟାଜ୍ କରାଯାଇଛି & IT ଟିମକୁ ଦେଖାଯିବ" + "ପରବର୍ତ୍ତୀ" + "ବୁଝିଗଲି" + "ୱାର୍କ ଆପ୍ସ: ଚାଲୁ ଅଛି" + "ୱାର୍କ ଆପ୍ସ: ବିରତ କରାଯାଇଛି" + "ୱାର୍କ ଆପ୍ସ ବିରତ କରାଯାଇଛି" + "ଆପଣ କୌଣସି କାର୍ଯ୍ୟ ସମ୍ବନ୍ଧୀୟ ବିଜ୍ଞପ୍ତି ପାଇବେ ନାହିଁ ଏବଂ ଆପଣଙ୍କର IT ଆଡମିନ୍ ଆପଣଙ୍କର ଲୋକେସନକୁ ଦେଖିପାରିବେ ନାହିଁ" "ବିଫଳ ହୋଇଛି: %1$s" diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index d4cd5be4bc..3678ff575d 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "ਦਫ਼ਤਰ" "ਐਪ ਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਹੋਇਆ ਹੈ।" "ਐਪ ਉਪਲਬਧ ਨਹੀਂ ਹੈ" @@ -63,7 +62,7 @@ "ਵਿਜੇਟ ਲੋਡ ਕਰਨ ਵਿੱਚ ਸਮੱਸਿਆ" "ਸਥਾਪਤ ਕਰੋ" "ਇਹ ਇੱਕ ਸਿਸਟਮ ਐਪ ਹੈ ਅਤੇ ਇਸਨੂੰ ਅਣਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।" - "ਬਿਨਾਂ ਨਾਮ ਦਿੱਤਾ ਫੋਲਡਰ" + "ਨਾਮ ਦਾ ਸੰਪਾਦਨ ਕਰੋ" "%1$s ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ" %1$s ਦੀ %2$d ਸੂਚਨਾ @@ -133,11 +132,13 @@ "ਨਿੱਜੀ" "ਕਾਰਜ-ਸਥਾਨ" "ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ" - "ਕਾਰਜ-ਸਥਾਨ ਐਪਾਂ ਇੱਥੇ ਲੱਭੋ" - "ਹਰੇਕ ਕਾਰਜ-ਸਥਾਨ ਐਪ ਦਾ ਇੱਕ ਬੈਜ ਹੁੰਦਾ ਹੈ ਅਤੇ ਉਸਨੂੰ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਸੁਰੱਖਿਅਤ ਰੱਖਿਆ ਜਾਂਦਾ ਹੈ। ਵਧੇਰੇ ਆਸਾਨ ਪਹੁੰਚ ਲਈ ਐਪਾਂ ਨੂੰ ਹੋਮ ਸਕ੍ਰੀਨ \'ਤੇ ਲਿਜਾਓ।" - "ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ" - "ਸੂਚਨਾਵਾਂ ਅਤੇ ਐਪਾਂ ਬੰਦ ਹਨ" - "ਬੰਦ ਕਰੋ" - "ਬੰਦ ਕੀਤਾ ਗਿਆ" + "ਵਿਅਕਤੀਗਤ ਐਪਾਂ ਨਿੱਜੀ ਹੁੰਦੀਆਂ ਹਨ ਅਤੇ ਆਈ.ਟੀ. ਵੱਲੋਂ ਨਹੀਂ ਦੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ" + "ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਬੈਜ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ ਅਤੇ ਆਈ.ਟੀ. ਵੱਲੋਂ ਦੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ" + "ਅੱਗੇ" + "ਸਮਝ ਲਿਆ" + "ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ: ਚਾਲੂ" + "ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ: ਰੋਕੀਆਂ ਗਈਆਂ" + "ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਨੂੰ ਰੋਕਿਆ ਗਿਆ ਹੈ" + "ਤੁਹਾਨੂੰ ਕੰਮ ਸਬੰਧੀ ਕੋਈ ਸੂਚਨਾ ਨਹੀਂ ਮਿਲੇਗੀ ਅਤੇ ਤੁਹਾਡਾ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡਾ ਟਿਕਾਣਾ ਨਹੀਂ ਦੇਖ ਸਕਦਾ" "ਇਹ ਕਾਰਵਾਈ ਅਸਫਲ ਹੋਈ: %1$s" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 68859605fb..eb80f4176d 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Praca" "Aplikacja nie jest zainstalowana." "Aplikacja niedostępna" @@ -63,7 +62,7 @@ "Problem podczas ładowania widżetu" "Konfiguracja" "To aplikacja systemowa i nie można jej odinstalować." - "Folder bez nazwy" + "Edytuj nazwę" "Aplikacja %1$s jest wyłączona" %1$s%2$d powiadomienia @@ -130,16 +129,18 @@ "Szerokość i wysokość widżetu zmieniła się na %1$s x %2$s" "Skróty" "Skróty i powiadomienia" - "Odrzuć" + "Zamknij" "Powiadomienie odrzucone" "Osobiste" "Praca" "Profil służbowy" - "Aplikacje do pracy" - "Każda aplikacja do pracy ma plakietkę, a o jej bezpieczeństwo dba Twoja organizacja. Aplikacje można przenieść na ekran główny, by były łatwiej dostępne." - "Profil zarządzany przez Twoją organizację" - "Powiadomienia i aplikacje są wyłączone" - "Zamknij" - "Zamknięto" + "Aplikacje osobiste są prywatne i IT nie może ich zobaczyć" + "Aplikacje do pracy są oznaczone plakietką i widoczne dla IT" + "Dalej" + "OK" + "Aplikacje do pracy: włączono" + "Aplikacje do pracy: wstrzymano" + "Aplikacje do pracy zostały wstrzymane" + "Nie będziesz otrzymywać żadnych powiadomień związanych z pracą, a administrator IT nie będzie mógł zobaczyć Twojej lokalizacji" "Niepowodzenie: %1$s" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index e0d2c74645..97c09852f5 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -62,7 +62,7 @@ "Problema ao carregar o widget" "Configuração" "É uma aplicação de sistema e não pode ser desinstalada." - "Pasta sem nome" + "Edite o nome" "%1$s desativado" A aplicação %1$s tem %2$d notificações. @@ -132,11 +132,13 @@ "Pessoal" "Trabalho" "Perfil de trabalho" - "Encontrar as aplicações de trabalho aqui" - "Cada aplicação de trabalho apresenta um emblema, pelo que a sua entidade a mantém em segurança. Pode mover as aplicações para o ecrã principal para facilitar o acesso." - "Gerido pela sua entidade" - "As notificações e as aplicações estão desativadas." - "Fechar" - "Fechado" + "As apps pessoais são privadas e não podem ser vistas pelos serviços de TI" + "As apps de trabalho têm um emblema e estão visíveis para os serviços de TI" + "Seguinte" + "OK" + "Apps de trabalho: ativadas" + "Apps de trabalho: em pausa" + "As apps de trabalho estão em pausa" + "Não irá obter quaisquer notificações de trabalho e o administrador de TI não poderá ver a sua localização." "Falhou: %1$s" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index bb4834f69d..d222a7c3a4 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -62,7 +62,7 @@ "Problema ao carregar o widget" "Configuração" "Este é um app do sistema e não pode ser desinstalado." - "Pasta sem nome" + "Editar nome" "%1$s desativado" O app %1$stem %2$d notificação @@ -132,11 +132,13 @@ "Pessoais" "Comerciais" "Perfil de trabalho" - "Localizar apps de trabalho aqui" - "Cada app de trabalho tem um selo e é mantido em segurança pela sua organização. Mova os apps para sua tela inicial para facilitar o acesso." - "Gerenciados pela sua organização" - "As notificações e os apps estão desativados" - "Fechar" - "Fechado" + "Os apps pessoais são privados e não podem ser vistos pela equipe de TI" + "Os apps de trabalho são identificados e ficam visíveis para a equipe de TI" + "Próxima" + "Ok" + "Apps de trabalho: ativados" + "Apps de trabalho: pausados" + "Os apps de trabalho foram pausados" + "Você não receberá notificações de trabalho, e seu administrador de TI não poderá ver seu local" "Falha: %1$s" diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index f8a61f11f7..d97d45344d 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -62,7 +62,7 @@ "Problemă la încărcarea widgetului" "Configurați" "Aceasta este o aplicație de sistem și nu poate fi dezinstalată." - "Dosar fără nume" + "Modificați numele" "S-a dezactivat %1$s" %1$s are %2$d notificări @@ -133,11 +133,13 @@ "Personale" "Profesionale" "Profil de serviciu" - "Găsiți aplicații de serviciu aici" - "Fiecare aplicație de serviciu are o insignă și este păstrată în siguranță de organizația dvs. Mutați aplicațiile pe ecranul de pornire pentru acces mai ușor." - "Gestionat de organizația dvs." - "Notificările și aplicațiile sunt dezactivate" - "Închideți" - "Închis" + "Aplicațiile personale sunt private și nu pot fi văzute de echipa IT" + "Aplicațiile pentru lucru au o insignă și sunt vizibile pentru echipa IT" + "Înainte" + "OK" + "Aplicații pentru lucru: activate" + "Aplicații pentru lucru: întrerupte" + "Aplicațiile pentru lucru sunt întrerupte" + "Nu veți primi notificări de serviciu, iar administratorul IT nu vă poate vedea locația" "Eșuare: %1$s" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 23b00d0936..19567554a6 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Работа" "Приложение удалено" "Приложение недоступно" @@ -63,7 +62,7 @@ "Не удалось загрузить виджет" "Настройка" "Это системное приложение, его нельзя удалить." - "Папка без названия" + "Измените название" "Приложение %1$s отключено" В приложении \"%1$s\" %2$d уведомление @@ -135,11 +134,13 @@ "Личные" "Рабочие" "Рабочий профиль" - "Приложения для работы" - "Рабочие приложения отмечены специальным значком. Их безопасность обеспечивает ваша организация. Для удобства перенесите эти приложения на главный экран." - "Управляется вашей организацией" - "Уведомления и приложения отключены." - "Закрыть" - "Закрыта" + "Личные приложения доступны только вам. Системный администратор их не видит." + "Рабочие приложения помечены специальным значком. Они видны системному администратору." + "Далее" + "ОК" + "Рабочие приложения: включены" + "Рабочие приложения: приостановлены" + "Рабочие приложения приостановлены" + "Вы не будете получать рабочие уведомления, а системный администратор не сможет видеть ваше местоположение." "Не удалось выполнить действие (%1$s)." diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml index ef99a59e4e..40c738c390 100644 --- a/res/values-si/strings.xml +++ b/res/values-si/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "කාර්යාලය" "යෙදුම ස්ථාපනය කර නැත." "යෙදුම නොතිබේ" @@ -63,7 +62,7 @@ "ගැටලු පූරණ විජට් එක" "ස්ථාපනය කරන්න" "මෙය පද්ධති යෙදුමක් වන අතර අස්ථාපනය කළ නොහැක." - "නම් නොකළ ෆෝල්ඩරය" + "නම සංස්කරණය කරන්න" "%1$s අබල කෙරිණි" %1$s, දැනුම්දීම් %2$dක් ඇත @@ -133,11 +132,13 @@ "පුද්ගලික" "කාර්යාලය" "කාර්යාල පැතිකඩ" - "මෙහි කාර්යාල යෙදුම් සොයා ගන්න" - "සෑම කාර්යාල යෙදුමකම ලාංඡනයක් ඇත ඇති අතර එය ඔබේ සංවිධානය මගින් සුරක්ෂිතව තබා ගනී. වඩාත් පහසු ප්‍රවේශයකට යෙදුම් ඔබේ මුල් පිටු තිරය වෙත ගෙන යන්න." - "ඔබේ සංවිධානය විසින් කළමනාකරණය කරනු ලැබේ" - "දැනුම්දීම් සහ යෙදුම් ක්‍රියාවිරහිතයි" - "වසන්න" - "වසා ඇත" + "පෞද්ගලික යෙදුම් පුද්ගලික වන අතර IT විසින් බැලිය නොහැකිය" + "කාර්යාල යෙදුම් ලාංඡනයකින් සලකුණු කර ඇති අතර IT ට දෘශ්‍යමාන වේ" + "ඊළඟ" + "තේරුණා" + "කාර්යාල යෙදුම්: ක්‍රියාත්මකයි" + "කාර්යාල යෙදුම්: විරාම කරන ලදී" + "කාර්යාල යෙදුම් විරාම කර ඇත" + "ඔබට කිසිදු කාර්යාල දැනුම් දීමක් නොලැබෙනු ඇති අතර ඔබේ IT පරිපාලකට ඔබේ ස්ථානය බැලිය නොහැකිය" "අසාර්ථකයි: %1$s" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 5bbf7c3cdc..ea25285889 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -62,7 +62,7 @@ "Problém s načítaním miniaplikácií" "Nastavenie" "Toto je systémová aplikácia a nedá sa odinštalovať." - "Nepomenovaný priečinok" + "Úprava názvu" "Aplikácia %1$s je deaktivovaná" %1$s, má %2$d upozornenia @@ -134,11 +134,13 @@ "Osobné" "Pracovné" "Pracovný profil" - "Tu nájdete pracovné aplikácie" - "Všetky pracovné aplikácie majú štítok a sú bezpečne uchovávané vašou organizáciou. Ak chcete mať k aplikáciám ľahší prístup, presuňte ich na plochu." - "Spravované vašou organizáciou" - "Upozornenia a aplikácie sú vypnuté" - "Zavrieť" - "Zavreté" + "Osobné aplikácie sú súkromné a správca IT ich neuvidí" + "Pracovné aplikácie sú označené odznakom a správca IT ich uvidí" + "Ďalej" + "Dobre" + "Pracovné aplikácie: zapnuté" + "Pracovné aplikácie: pozastavené" + "Pracovné aplikácie sú pozastavené" + "Nebudete dostávať žiadne pracovné upozornenia a váš správca IT neuvidí vašu polohu" "Zlyhalo: %1$s" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 044a4b42b0..fa7b9155bd 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Služba" "Aplikacija ni nameščena." "Aplikacija ni na voljo" @@ -63,7 +62,7 @@ "Težava pri nalaganju pripomočka" "Nastavitev" "To je sistemska aplikacija in je ni mogoče odstraniti." - "Neimenovana mapa" + "Urejanje imena" "Aplikacija %1$s je onemogočena" %1$s ima %2$d obvestilo @@ -135,11 +134,13 @@ "Osebno" "Služba" "Delovni profil" - "Tukaj poiščite delovne aplikacije" - "Vsaka delovna aplikacija ima značko. Za varnost teh aplikacij skrbi vaša organizacija. Za preprostejši dostop premaknite aplikacije na začetni zaslon." - "Upravlja vaša organizacija" - "Obvestila in aplikacije – izklopljeno" - "Zapri" - "Zaprto" + "Osebne aplikacije so zasebne in jih skrbnik za IT ne vidi" + "Delovne aplikacije so označene z značko in vidne skrbniku za IT" + "Naprej" + "Razumem" + "Delovne aplikacije: Vklopljene" + "Delovne aplikacije: Začasno zaustavljene" + "Delovne aplikacije so začasno zaustavljene" + "Obvestil za delovni profil ne boste prejemali, skrbnik za IT pa ne bo videl vaše lokacije" "Ni uspelo: %1$s" diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index 7f2567c60c..c8299faa8f 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -62,7 +62,7 @@ "Problem në ngarkimin e miniaplikacionit" "Konfiguro" "Ky është aplikacion sistemi dhe nuk mund të çinstalohet." - "Dosje e paemërtuar" + "Redakto emrin" "%1$s u çaktivizua" %1$s, ka %2$d njoftime @@ -132,11 +132,13 @@ "Personale" "Punë" "Profili i punës" - "Gjej këtu aplikacionet e punës" - "Secili aplikacion pune ka një distinktiv dhe mbahet i sigurt nga organizata jote. Zhvendosi aplikacionet e punës në ekranin tënd kryesor për qasje më të lehtë." - "Menaxhohet nga organizata jote" - "Njoftimet dhe aplikacionet janë joaktive" - "Mbyll" - "Mbyllur" + "Aplikacionet personale janë private dhe nuk mund të shihen nga personeli i teknologjisë së informacionit" + "Aplikacionet e punës janë të shënuara dhe të dukshme për personelin e teknologjisë së informacionit" + "Para" + "E kuptova" + "Aplikacionet e punës: Aktive" + "Aplikacionet e punës: Në pauzë" + "Aplikacionet e punës janë në pauzë" + "Nuk do të marrësh njoftime pune dhe administratori yt i teknologjisë së informacionit nuk mund ta shohë vendndodhjen tënde" "Dështoi: %1$s" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 4e52592687..3f4cd248ef 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Work" "Апликација није инсталирана." "Апликација није доступна" @@ -63,7 +62,7 @@ "Проблем при учитавању виџета" "Подешавање" "Ово је системска апликација и не може да се деинсталира." - "Неименовани директоријум" + "Измените назив" "Апликација %1$s је онемогућена" %1$s, има %2$d обавештење @@ -134,11 +133,13 @@ "Личне" "Пословне" "Профил за Work" - "Пронађите пословне апликације овде" - "Свака пословна апликација има значку и штити је ваша организација. Преместите апликације на почетни екран да бисте им лакше приступали." - "Овим управља организација" - "Обавештења и апликације су искључени" - "Затвори" - "Затворено" + "Личне апликације су приватне и ИТ администратор не може да их види" + "Апликације за посао имају значку и ИТ администратор може да их види" + "Даље" + "Важи" + "Апликације за посао: Укључене" + "Апликације за посао: Паузиране" + "Апликације за посао су паузиране" + "Нећете добијати никаква обавештења за Work, а ИТ администратор не може да види локацију" "Није успело: %1$s" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index e7400a6d00..475978dc65 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Arbete" "Appen är inte installerad." "Appen är inte tillgänglig" @@ -63,7 +62,7 @@ "Det gick inte att läsa in widgeten" "Konfiguration" "Det här är en systemapp som inte kan avinstalleras." - "Namnlös mapp" + "Redigera namn" "%1$s har inaktiverats" %1$s har %2$d aviseringar @@ -133,11 +132,13 @@ "Privat" "Arbete" "Jobbprofil" - "Här hittar du jobbappar" - "Alla jobbappar har ett märke och organisationen ser till att de är skyddade. Flytta apparna till startskärmen så kommer du åt dem lättare." - "Hanteras av organisationen" - "Aviseringar och appar är inaktiverade" - "Stäng" - "Stängd" + "Personliga appar är privata och visas inte för IT" + "Jobbappar är märkta och visas för IT" + "Nästa" + "OK" + "Jobbappar: På" + "Jobbappar: I pausläge" + "Jobbappar har pausats" + "Du får inga jobbaviseringar och IT-administratören ser inte din plats" "Misslyckades: %1$s" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 445e382f2d..fd5808f711 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -62,7 +62,7 @@ "Tatizo la kupakia wijeti" "Sanidi" "Hii ni programu ya mfumo na haiwezi kuondolewa." - "Folda isiyo na jina" + "Badilisha Jina" "%1$s imezimwa" %1$s, ina arifa %2$d @@ -134,11 +134,13 @@ "Binafsi" "Kazini" "Wasifu wa kazini" - "Pata programu za kazi hapa" - "Kila programu ya kazi ina beji na hulindwa na shirika lako. Hamishia programu kwenye skrini yako ya kwanza ili uzifikie kwa urahisi." - "Inasimamiwa na shirika lako" - "Vipenge vya arifa na programu vimezimwa" - "Funga" - "Imefungwa" + "Programu za binafsi ni za faragha na haziwezi kuonwa na Msimamizi wa TEHAMA" + "Programu za kazini zina beji na zinaonekana kwa msimamizi wa TEHAMA" + "Endelea" + "Nimeelewa" + "Programu za kazini: Zimewashwa" + "Programu za kazini: Zimesimamishwa" + "Programu za kazini zimesimamishwa" + "Hutapata arifa zozote za kazini na msimamizi wako wa TEHAMA hawezi kuona mahali ulipo" "Hitilafu: %1$s" diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index 6e933a12e3..0fa58df028 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -27,21 +27,21 @@ "பாதுகாப்புப் பயன்முறையில் விட்ஜெட்கள் முடக்கப்பட்டுள்ளன" "ஷார்ட்கட் இல்லை" "முகப்புத் திரை" - "தனிப்பயன் செயல்கள்" + "பிரத்தியேக செயல்கள்" "விட்ஜெட்டைத் தேர்வுசெய்ய தொட்டுப் பிடிக்கவும்." - "விட்ஜெட்டைத் தேர்ந்தெடுக்க இருமுறை தட்டிப் பிடிக்கவும் அல்லது தனிப்பயன் செயல்களைப் பயன்படுத்தவும்." + "விட்ஜெட்டைத் தேர்ந்தெடுக்க இருமுறை தட்டிப் பிடிக்கவும் அல்லது பிரத்தியேக செயல்களைப் பயன்படுத்தவும்." "%1$d × %2$d" "%1$d அகலத்திற்கு %2$d உயரம்" "நீங்களே சேர்க்க, தொட்டுப் பிடித்திருக்கவும்" "தானாகவே சேர்" "பயன்பாடுகளில் தேடுக" "ஆப்ஸை ஏற்றுகிறது…" - "\"%1$s\" உடன் பொருந்தும் பயன்பாடுகள் இல்லை" + "\"%1$s\" உடன் பொருந்தும் ஆப்ஸ் இல்லை" "கூடுதல் பயன்பாடுகளைத் தேடு" "ஆப்ஸ்" "அறிவிப்புகள்" "ஷார்ட்கட்டைச் சேர்க்க, தொட்டு பிடித்திருக்கவும்." - "ஷார்ட்கட்டைச் சேர்க்க, இருமுறை தட்டிப் பிடித்திருக்கவும் (அ) தனிப்பயன் செயல்களைப் பயன்படுத்தவும்." + "ஷார்ட்கட்டைச் சேர்க்க, இருமுறை தட்டிப் பிடித்திருக்கவும் (அ) பிரத்தியேக செயல்களைப் பயன்படுத்தவும்." "முகப்புத் திரையில் இடமில்லை." "பிடித்தவை ட்ரேயில் இடமில்லை" "ஆப்ஸின் பட்டியல்" @@ -62,7 +62,8 @@ "விட்ஜெட்டை ஏற்றுவதில் சிக்கல்" "அமைவு" "இது அமைப்பு ஆப்ஸ் என்பதால் நிறுவல் நீக்கம் செய்ய முடியாது." - "பெயரிடப்படாத கோப்புறை" + + "%1$s முடக்கப்பட்டது" %1$s ஆப்ஸில் %2$d அறிவிப்புகள் வந்துள்ளன @@ -132,11 +133,21 @@ "தனிப்பட்டவை" "பணி" "பணிக் கணக்கு" - "பணி ஆப்ஸை இங்கு காணலாம்" - "ஒவ்வொரு பணிப் பயன்பாடும் ஒரு பேட்ஜைக் கொண்டிருக்கும். இவை, ஆப்ஸ் உங்கள் நிறுவனத்தால் பாதுகாப்பாக வைக்கப்பட்டுள்ளன என்பதைக் குறிக்கின்றன. இந்த ஆப்ஸை எளிதாக அணுக, முகப்புத் திரைக்கு நகர்த்திக்கொள்ளவும்." - "உங்கள் நிறுவனம் நிர்வகிக்கிறது" - "ஆப்ஸும் அறிவிப்புகளும் ஆஃப் செய்யப்பட்டுள்ளன" - "மூடுக" - "மூடப்பட்டது" + + + + + + + + + + + + + + + + "தோல்வி: %1$s" diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index 1f8d3b8c4f..d3a30b8bdc 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -62,7 +62,7 @@ "విడ్జెట్‌ను లోడ్ చేయడంలో సమస్య" "సెటప్ చేయి" "ఇది సిస్టమ్ యాప్ మరియు దీన్ని అన్‌ఇన్‌స్టాల్ చేయడం సాధ్యపడదు." - "పేరు లేని ఫోల్డర్" + "పేరును ఎడిట్ చేయండి" "%1$s నిలిపివేయబడింది" %1$s, నుంచి %2$d నోటిఫికేషన్‌లు ఉన్నాయి @@ -132,11 +132,13 @@ "వ్యక్తిగతం" "కార్యాలయం" "కార్యాలయ ప్రొఫైల్" - "కార్యాలయ యాప్‌లను ఇక్కడ కనుగొనండి" - "ప్రతి కార్యాలయ యాప్‌కు బ్యాడ్జ్‌ ఉంది మరియు మీ సంస్థ ద్వారా సురక్షితంగా ఉంచబడుతుంది. సులభ యాక్సెస్ కోసం యాప్‌లను మీ హోమ్ స్క్రీన్‌కి తరలించండి." - "మీ సంస్థ ద్వారా నిర్వహించబడతాయి" - "నోటిఫికేషన్‌లు మరియు యాప్‌లు ఆఫ్ చేయబడ్డాయి" - "మూసివేయి" - "మూసివేయబడింది" + "వ్యక్తిగత యాప్‌లు ప్రైవేట్‌గా ఉన్నాయి & IT డిపార్ట్‌మెంట్‌కు అవి కనిపించవు" + "వర్క్ యాప్‌లు బ్యాడ్జ్ చేయబడ్డాయి & IT డిపార్ట్‌మెంట్‌కు అవి కనిపిస్తాయి" + "తర్వాత" + "అర్థమైంది" + "వర్క్ యాప్‌లు: ఆన్ చేయబడ్డాయి" + "వర్క్ యాప్‌లు: పాజ్ చేయబడ్డాయి" + "వర్క్ యాప్‌లు పాజ్ చేయబడ్డాయి" + "మీరు ఏ ఆఫీస్ నోటిఫికేషన్‌లను పొందలేరు, మీ IT అడ్మిన్ మీ లొకేషన్‌ను చూడలేరు" "విఫలమైంది: %1$s" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 5ab9b860ef..f0948ef781 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -62,7 +62,7 @@ "มีปัญหาขณะโหลดวิดเจ็ต" "ตั้งค่า" "นี่เป็นแอประบบและไม่สามารถถอนการติดตั้งได้" - "โฟลเดอร์ที่ไม่มีชื่อ" + "แก้ไขชื่อ" "ปิดใช้ %1$s" %1$s มีการแจ้งเตือน %2$d รายการ @@ -132,11 +132,13 @@ "ส่วนตัว" "งาน" "โปรไฟล์งาน" - "หาแอปงานที่นี่" - "แอปงานแต่ละแอปมีป้ายและได้รับการรักษาความปลอดภัยจากองค์กรของคุณ ย้ายแอปไปยังหน้าจอหลักเพื่อให้เข้าถึงได้ง่ายขึ้น" - "จัดการโดยองค์กร" - "ปิดการแจ้งเตือนและแอปอยู่" - "ปิด" - "ปิด" + "แอปส่วนตัวจะเป็นแบบส่วนตัวและฝ่ายไอทีจะมองไม่เห็น" + "แอปงานจะติดป้ายไว้และฝ่ายไอทีจะมองเห็น" + "ถัดไป" + "รับทราบ" + "แอปงาน: เปิด" + "แอปงาน: หยุดชั่วคราว" + "หยุดแอปงานไว้ชั่วคราว" + "คุณจะไม่ได้รับการแจ้งเตือนเกี่ยวกับงานและผู้ดูแลระบบไอทีจะไม่เห็นตำแหน่งของคุณ" "ไม่สำเร็จ: %1$s" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 0df94c7104..78e8beadf9 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Trabaho" "Hindi naka-install ang app." "Hindi available ang app" @@ -63,7 +62,7 @@ "Problema sa pag-load ng widget" "I-setup" "Isa itong app ng system at hindi maaaring i-uninstall." - "Walang Pangalang Folder" + "I-edit ang Pangalan" "Naka-disable ang %1$s" May %2$d (na) notification ang %1$s @@ -133,11 +132,13 @@ "Personal" "Trabaho" "Profile sa trabaho" - "Maghanap ng mga app para sa trabaho rito" - "Ang bawat app para sa trabaho ay may badge at pinapanatiling ligtas ng iyong organisasyon. Ilipat ang mga app sa iyong Home screen para mas madaling ma-access." - "Pinamamahalaan ng iyong organisasyon" - "Naka-off ang mga notification at app" - "Isara" - "Nakasara" + "Pribado at hindi nakikita ng IT ang mga personal na app" + "May badge at nakikita ng IT ang mga app para sa trabaho" + "Susunod" + "OK" + "Mga app para sa trabaho: Naka-on" + "Mga app para sa trabaho: Naka-pause" + "Naka-pause ang mga app para sa trabaho" + "Hindi ka makakatanggap ng anumang notification sa trabaho, at hindi makikita ng iyong IT admin ang lokasyon mo" "Hindi nagawa: %1$s" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 56f8447bf1..1b5f955bd6 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "İş" "Uygulama yüklü değil." "Uygulama kullanılamıyor" @@ -63,7 +62,7 @@ "Widget yüklenirken sorun oluştu" "Kurulum" "Bu bir sistem uygulamasıdır ve yüklemesi kaldırılamaz." - "Adsız Klasör" + "Adı Düzenle" "%1$s devre dışı" %1$s uygulamasının %2$d bildirimi var @@ -133,11 +132,13 @@ "Kişisel" "İş" "İş profili" - "İş uygulamalarını burada bulabilirsiniz" - "Her iş uygulamasında, uygulama güvenliğinin kuruluşunuz tarafından sağlandığını gösteren bir rozet bulunur. Daha kolay erişim için uygulamaları Ana ekranınıza taşıyın." - "Kuruluşunuz tarafından yönetiliyor" - "Bildirimler ve uygulamalar kapalı" - "Kapat" - "Kapalı" + "Kişisel uygulamalar gizli olup BT yöneticisi tarafından görülemez" + "İş uygulamaları rozetle işaretlenmiş olup BT yöneticisi tarafından görülebilir" + "İleri" + "Anladım" + "İş uygulamaları: Açık" + "İş uygulamaları: Duraklatıldı" + "İş uygulamaları duraklatıldı" + "İş bildirimlerini almazsınız ve BT yöneticiniz konumunuzu göremez" "Başarısız: %1$s" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 13ba701815..966df0baa1 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Робоча папка" "Додаток видалено." "Додаток недоступний" @@ -63,7 +62,7 @@ "Проблема із завантаженням віджета" "Налаштування" "Це системна програма, її неможливо видалити." - "Папка без назви" + "Редагувати назву" "%1$s вимкнено" Додаток %1$s має %2$d сповіщення @@ -135,11 +134,13 @@ "Особисті додатки" "Робочі додатки" "Робочий профіль" - "Робочі додатки містяться тут" - "Кожний робочий додаток має значок і перебуває під захистом організації. Перенесіть додатки на головний екран, щоб швидко запускати їх." - "Профілем керує ваша організація" - "Сповіщення та додатки вимкнено" - "Закрити" - "Закрито" + "Особисті додатки недоступні IT-адміністратору" + "Робочі додатки позначені значками й доступні IT-адміністратору" + "Далі" + "OK" + "Робочі додатки: увімкнено" + "Робочі додатки: призупинено" + "Робочі додатки призупинено" + "Ви не отримуватимете робочі сповіщення, а ваш IT-адміністратор не матиме доступу до вашого місцезнаходження" "Не вдалося %1$s" diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml index 4f776701e5..16f4ff43b5 100644 --- a/res/values-ur/strings.xml +++ b/res/values-ur/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "دفتری" "ایپ انسٹال نہیں ہے۔" "ایپ دستیاب نہیں ہے" @@ -63,7 +62,7 @@ "ویجیٹ کو لوڈ کرنے میں مسئلہ" "ترتیب دیں" "یہ ایک سسٹم ایپ ہے اور اسے اَن انسٹال نہیں کیا جا سکتا ہے۔" - "بلا نام فولڈر" + "نام میں ترمیم کریں" "%1$s غیر فعال ہے" %1$s میں%2$d اطلاعات ہیں @@ -133,11 +132,13 @@ "ذاتی" "دفتری" "دفتری پروفائل" - "یہاں دفتری ایپس تلاش کریں" - "ہر دفتری ایپ میں ایک بَیج ہوتا ہے اور اسے آپ کی تنظیم محفوظ رکھتی ہے۔ زیادہ آسان رسائی کیلئے ایپس کو اپنی ہوم اسکرین پر منتقل کریں۔" - "آپ کی تنظیم کے زیر انتظام" - "اطلاعات اور ایپس آف ہیں" - "بند کریں" - "بند" + "‏ذاتی ایپس نجی ہوتے ہیں اور IT کو دکھائے نہیں جا سکتے ہیں" + "‏ورک ایپس بیج کئے گئے ہیں اور IT کے لیے مرئی ہے" + "اگلا" + "سمجھ آ گئی" + "ورک ایپس: آن ہے" + "ورک ایپس: موقوف ہے" + "ورک ایپس موقوف ہیں" + "‏آپ کو کام کی کوئی اطلاعات موصول نہیں ہوں گی، اور آپ کے IT منتظم آپ کا مقام نہیں دیکھ سکتے ہیں" "ناکام ہو گيا: %1$s" diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml index 69084d7041..6668aa1083 100644 --- a/res/values-uz/strings.xml +++ b/res/values-uz/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Ishga oid" "Ilova o‘rnatilmadi." "Ilova mavjud emas" @@ -63,7 +62,7 @@ "Vidjetni yuklashda muammo" "Sozlash" "Bu tizim ilovasi, shuning uchun o‘chirib bo‘lmaydi." - "Nomsiz jild" + "Nomini tahrirlash" "%1$s ilovasi o‘chirib qo‘yildi" %1$s ilovasida %2$d ta bildirishnoma bor @@ -133,11 +132,13 @@ "Shaxsiy" "Ishchi" "Ishchi profil" - "Ishga oid ilovalarni shu yerdan topish mumkin" - "Nishonga ega har bir ishga oid ilova tashkilotingiz tomonidan himoyalanadi. Ishga oid ilovalarga osonroq kirish uchun ularni bosh ekranga chiqaring." - "Tashkilotingiz tomonidan boshqariladi" - "Bildirishnomalar va ilovalar faol emas" - "Yopish" - "Yopiq" + "Shaxsiy ilovalar maxfiy va AT administratori ularni koʻra olmaydi" + "Ishga oid ilovalar nishonchali va ular AT administratoriga koʻrinadi" + "Keyingisi" + "OK" + "Ishga oid ilovalar: Yoqilgan" + "Ishga oid ilovalar: Pauza qilingan" + "Ishga oid ilovalar pauza qilingan" + "Hech qanday ishga oid bildirishnomalar olmaysiz va AT administratoringiz joylashuvingizni koʻra olmaydi" "Xato: %1$s" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 71decfca68..f7ac4b499a 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -20,16 +20,15 @@ "Trình chạy 3" - "Work" "Ứng dụng chưa được cài đặt." "Ứng dụng không có sẵn" "Ứng dụng đã tải xuống bị tắt ở chế độ An toàn" - "Tiện ích con bị vô hiệu hóa ở chế độ an toàn" + "Tiện ích bị vô hiệu hóa ở chế độ an toàn" "Lối tắt không khả dụng" "Màn hình chính" "Tác vụ tùy chỉnh" - "Chạm và giữ để chọn tiện ích con." + "Chạm và giữ để chọn tiện ích." "Nhấn đúp và giữ để chọn tiện ích hoặc sử dụng tác vụ tùy chỉnh." "%1$d × %2$d" "Rộng %1$d x cao %2$d" @@ -60,10 +59,10 @@ "ghi cài đặt và lối tắt trên Màn hình chính" "Cho phép ứng dụng thay đổi cài đặt và lối tắt trên Màn hình chính." "%1$s không được phép thực hiện cuộc gọi điện thoại" - "Sự cố khi tải tiện ích con" + "Sự cố khi tải tiện ích" "Thiết lập" "Đây là ứng dụng hệ thống và không thể gỡ cài đặt." - "Thư mục chưa đặt tên" + "Chỉnh sửa tên" "Đã vô hiệu hóa %1$s" %1$s, có %2$d thông báo @@ -86,7 +85,7 @@ "Cho phép xoay Màn hình chính" "Khi xoay điện thoại" "Dấu chấm thông báo" - "Bật" + "Đang bật" "Tắt" "Cần quyền truy cập thông báo" "Để hiển thị Dấu chấm thông báo, hãy bật thông báo ứng dụng cho %1$s" @@ -133,11 +132,13 @@ "Cá nhân" "Cơ quan" "Hồ sơ công việc" - "Tìm ứng dụng công việc tại đây" - "Mỗi ứng dụng công việc đều có một huy hiệu và được tổ chức của bạn bảo mật. Bạn có thể di chuyển ứng dụng đến Màn hình chính để truy cập dễ dàng hơn." - "Do tổ chức của bạn quản lý" - "Thông báo và ứng dụng đang tắt" - "Đóng" - "Đã đóng" + "Ứng dụng cá nhân là riêng tư và quản trị viên CNTT không thể xem" + "Ứng dụng công việc được gắn huy hiệu và quản trị viên CNTT có thể xem" + "Tiếp theo" + "OK" + "Ứng dụng công việc: Đang bật" + "Ứng dụng công việc: Đã tạm dừng" + "Đã tạm dừng ứng dụng công việc" + "Bạn sẽ không nhận được bất kỳ thông báo công việc nào và quản trị viên CNTT của bạn không thấy được vị trí của bạn" "Không thực hiện được thao tác: %1$s" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 9804af1e89..f96a0aa8a3 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Work" "未安装该应用。" "应用不可用" @@ -63,7 +62,7 @@ "加载微件时出现问题" "设置" "这是系统应用,无法卸载。" - "未命名文件夹" + "修改名称" "已停用%1$s" %1$s,有 %2$d 个通知 @@ -133,11 +132,13 @@ "个人" "工作" "工作资料" - "请在此处查找工作应用" - "每个工作应用均有一个徽标,并由贵单位负责确保其安全。请将工作应用移到主屏幕,以便轻松访问。" - "由贵单位管理" - "通知和应用均已关闭" - "关闭" - "已关闭" + "个人应用是不公开的,IT 无法查看" + "工作应用带有标志,IT 可以查看" + "继续" + "知道了" + "工作应用:已开启" + "工作应用:已暂停" + "工作应用已暂停" + "您不会收到任何工作通知,您的 IT 管理员也无法查看您的位置信息" "失败:%1$s" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index e7377440c1..454912a7df 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "工作" "尚未安裝應用程式。" "目前無法使用這個應用程式" @@ -63,7 +62,7 @@ "載入小工具時發生問題" "設定" "這是系統應用程式,無法將其解除安裝。" - "未命名的資料夾" + "編輯名稱" "「%1$s」已停用" %1$s,有 %2$d 項通知 @@ -133,11 +132,13 @@ "個人" "商務" "工作設定檔" - "請在此處尋找工作應用程式" - "每個工作應用程式都有一個徽章,並由您的機構負責保持安全。您可以將工作應用程式移至主畫面,以便輕鬆存取。" - "由您的機構管理" - "通知和應用程式已關閉" - "關閉" - "已關閉" + "個人應用程式為不公開;IT 無法看到" + "工作應用程式附有標誌;IT 可以看到" + "繼續" + "知道了" + "工作應用程式:開啟" + "工作應用程式:已暫停" + "已暫停工作應用程式" + "您將不會收到任何工作通知,而 IT 管理員也無法查看您的位置" "操作失敗:%1$s" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index e971b69f1f..7aa5f67368 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "公司" "應用程式未安裝。" "應用程式目前無法使用" @@ -63,7 +62,7 @@ "載入小工具時發生問題" "設定" "這是系統應用程式,不可解除安裝。" - "未命名的資料夾" + "編輯名稱" "已停用 %1$s" %1$s,有 %2$d 則通知 @@ -133,11 +132,13 @@ "個人" "公司" "工作資料夾" - "在這裡尋找辦公應用程式" - "每個辦公應用程式都有徽章,並由貴機構負責管理及確保其安全。請將辦公應用程式移至主螢幕以便輕鬆存取。" - "由貴機構所管理" - "已關閉通知和應用程式" - "關閉" - "已關閉" + "個人應用程式為私人所有,IT 管理員無法查看" + "工作應用程式會加上標記,IT 管理員可以查看這類應用程式" + "繼續" + "我知道了" + "工作應用程式:已開啟" + "工作應用程式:已暫停" + "系統已暫停工作應用程式" + "你不會再收到任何工作通知,IT 管理員也無法查看你的位置資訊" "失敗:%1$s" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index b937764ace..10f01a6b57 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -62,7 +62,7 @@ "Inkinga yokulayisha iwijethi" "Ukumisa" "Lolu uhlelo lokusebenza lwesistimu futhi alikwazi ukukhishwa." - "Ifolda engenagama" + "Hlela igama" "Kukhutshaziwe %1$s" %1$s, unezaziso ezingu-%2$d @@ -132,11 +132,13 @@ "Okomuntu siqu" "Umsebenzi" "Iphrofayela yomsebenzi" - "Thola izinhlelo zokusebenza lapha" - "Uhlo lokusebenza ngalunye lomsebenzi linebheji futhi igcinwa iphephile inhlangano yakho. Hambisa izinhlelo zokusebenza esikrinini sakho sasekhaya ngokufinyelela okulula." - "Kuphethwe inhlangano yakho" - "Izaziso nezinhlelo zokusebenza kuvaliwe" - "Vala" - "Kuvaliwe" + "Izinhlelo zokusebenza zomuntu siqu ziyimfihlo futhi azikwazi ukubonwa i-IT" + "Izinhlelo zokusebenza zomsebenzi zinebheji futhi ziyabonakala ku-IT" + "Okulandelayo" + "Ngiyezwa" + "Izinhlelo zokusebenza: Zivuliwe" + "Izinhlelo zokusebenza zomsebenzi: Ziphunyuziwe" + "Izinhlelo zokusebenza zomsebenzi ziphunyuziwe" + "Ngeke uthole noma yiziphi izaziso zomsebenzi, futhi umphathi wakho we-IT akakwazi ukubona indawo yakho" "Yehlulekile: %1$s" From b3b8aefe5751bf55ef32f61148f2a9b6c811db9e Mon Sep 17 00:00:00 2001 From: Andy Wickham Date: Tue, 10 Mar 2020 01:36:02 +0000 Subject: [PATCH 23/41] Dismisses system overlays for Home intent. Test: Used Facebook chatheads (not system bubble). Before the change, Home gesture didn't work. After the change, it does work :) Bug: 146593239 Merged-In: Ib9c85de2f83f99d1ef53fb17fde5d0b3c514849a Change-Id: I19d91aaed19ccaec68478e364ce6b80049d49a98 --- .../android/launcher3/uioverrides/RecentsUiFactory.java | 8 ++++++++ .../src/com/android/launcher3/uioverrides/UiFactory.java | 2 ++ src/com/android/launcher3/Launcher.java | 1 + .../com/android/launcher3/uioverrides/UiFactory.java | 2 ++ 4 files changed, 13 insertions(+) diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsUiFactory.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsUiFactory.java index cac170c68c..4d935e1157 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsUiFactory.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsUiFactory.java @@ -19,6 +19,7 @@ package com.android.launcher3.uioverrides; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.quickstep.SysUINavigationMode.Mode.NO_BUTTON; +import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_RECENTS; import android.content.Context; import android.graphics.Rect; @@ -48,6 +49,7 @@ import com.android.quickstep.SysUINavigationMode; import com.android.quickstep.SysUINavigationMode.Mode; import com.android.quickstep.TouchInteractionService; import com.android.quickstep.views.RecentsView; +import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.WindowManagerWrapper; import java.util.ArrayList; @@ -208,6 +210,12 @@ public abstract class RecentsUiFactory { } } + /** Closes system windows. */ + public static void closeSystemWindows() { + ActivityManagerWrapper.getInstance() + .closeSystemWindows(CLOSE_SYSTEM_WINDOWS_REASON_RECENTS); + } + private static final class LauncherTaskViewController extends TaskViewTouchController { diff --git a/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java b/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java index c02df9386c..eb58b9425f 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java +++ b/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java @@ -251,4 +251,6 @@ public class UiFactory extends RecentsUiFactory { Person[] persons = si.getPersons(); return persons == null ? Utilities.EMPTY_PERSON_ARRAY : persons; } + + public static void closeSystemWindows() {} } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 80860455c2..1338b3062b 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1397,6 +1397,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, if (!internalStateHandled) { // In all these cases, only animate if we're already on home AbstractFloatingView.closeAllOpenViews(this, isStarted()); + UiFactory.closeSystemWindows(); if (!isInState(NORMAL)) { // Only change state, if not already the same. This prevents cancelling any diff --git a/src_ui_overrides/com/android/launcher3/uioverrides/UiFactory.java b/src_ui_overrides/com/android/launcher3/uioverrides/UiFactory.java index 467ae02d5c..f2b5ed219b 100644 --- a/src_ui_overrides/com/android/launcher3/uioverrides/UiFactory.java +++ b/src_ui_overrides/com/android/launcher3/uioverrides/UiFactory.java @@ -101,4 +101,6 @@ public class UiFactory { public static Person[] getPersons(ShortcutInfo si) { return Utilities.EMPTY_PERSON_ARRAY; } + + public static void closeSystemWindows() {} } From dbcc63edebe373d5f698e7d404eff83898a5b8b2 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 6 Mar 2020 15:35:55 -0800 Subject: [PATCH 24/41] Removing some autoboxing during property animation Change-Id: Ibd6f20c565a4d66dc6d606b3f0bbc96fec66fe56 --- .../appprediction/AppsDividerView.java | 3 +- .../quickstep/views/ClearAllButton.java | 10 +++--- .../BaseRecentsViewStateController.java | 11 +++--- .../android/launcher3/LauncherAnimUtils.java | 34 +++++++++++++------ .../WorkspaceStateTransitionAnimation.java | 15 ++++---- .../launcher3/allapps/FloatingHeaderView.java | 4 ++- .../launcher3/allapps/PluginHeaderRow.java | 5 +-- .../launcher3/anim/PropertySetter.java | 15 ++++---- src/com/android/launcher3/graphics/Scrim.java | 10 +++--- .../graphics/WorkspaceAndHotseatScrim.java | 14 ++++---- .../android/launcher3/views/ScrimView.java | 8 ++--- 11 files changed, 77 insertions(+), 52 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/AppsDividerView.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/AppsDividerView.java index 425fb13990..ec46418949 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/AppsDividerView.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/AppsDividerView.java @@ -16,6 +16,7 @@ package com.android.launcher3.appprediction; +import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA; import static com.android.launcher3.LauncherState.ALL_APPS; import android.annotation.TargetApi; @@ -291,7 +292,7 @@ public class AppsDividerView extends View implements LauncherStateManager.StateL public void setContentVisibility(boolean hasHeaderExtra, boolean hasAllAppsContent, PropertySetter setter, Interpolator headerFade, Interpolator allAppsFade) { // Don't use setViewAlpha as we want to control the visibility ourselves. - setter.setFloat(this, ALPHA, hasAllAppsContent ? 1 : 0, allAppsFade); + setter.setFloat(this, VIEW_ALPHA, hasAllAppsContent ? 1 : 0, allAppsFade); } @Override diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java index d0819c187b..763f5beb10 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java @@ -18,7 +18,7 @@ package com.android.quickstep.views; import android.content.Context; import android.util.AttributeSet; -import android.util.Property; +import android.util.FloatProperty; import android.widget.Button; import com.android.launcher3.touch.PagedOrientationHandler; @@ -27,16 +27,16 @@ import com.android.quickstep.views.RecentsView.ScrollState; public class ClearAllButton extends Button implements PageCallbacks { - public static final Property VISIBILITY_ALPHA = - new Property(Float.class, "visibilityAlpha") { + public static final FloatProperty VISIBILITY_ALPHA = + new FloatProperty("visibilityAlpha") { @Override public Float get(ClearAllButton view) { return view.mVisibilityAlpha; } @Override - public void set(ClearAllButton view, Float visibilityAlpha) { - view.setVisibilityAlpha(visibilityAlpha); + public void setValue(ClearAllButton view, float v) { + view.setVisibilityAlpha(v); } }; diff --git a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java index 7481445600..9b57fb7627 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java @@ -17,6 +17,9 @@ package com.android.launcher3.uioverrides; import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; +import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA; +import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_X; +import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_Y; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_SCALE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_SCRIM_FADE; @@ -116,8 +119,8 @@ public abstract class BaseRecentsViewStateController if (mRecentsView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) { translationX = -translationX; } - setter.setFloat(mRecentsView, View.TRANSLATION_X, translationX, translateXInterpolator); - setter.setFloat(mRecentsView, View.TRANSLATION_Y, scaleAndTranslation.translationY, + setter.setFloat(mRecentsView, VIEW_TRANSLATE_X, translationX, translateXInterpolator); + setter.setFloat(mRecentsView, VIEW_TRANSLATE_Y, scaleAndTranslation.translationY, translateYInterpolator); setter.setFloat(mRecentsView, getContentAlphaProperty(), toState.overviewUi ? 1 : 0, builder.getInterpolator(ANIM_OVERVIEW_FADE, AGGRESSIVE_EASE_IN_OUT)); @@ -125,8 +128,8 @@ public abstract class BaseRecentsViewStateController setter.setFloat(scrim, SCRIM_PROGRESS, toState.getOverviewScrimAlpha(mLauncher), builder.getInterpolator(ANIM_OVERVIEW_SCRIM_FADE, LINEAR)); if (mActionsView != null) { - setter.setFloat(mActionsView, View.TRANSLATION_X, translationX, translateXInterpolator); - setter.setFloat(mActionsView, View.ALPHA, toState.overviewUi ? 1 : 0, + setter.setFloat(mActionsView, VIEW_TRANSLATE_X, translationX, translateXInterpolator); + setter.setFloat(mActionsView, VIEW_ALPHA, toState.overviewUi ? 1 : 0, builder.getInterpolator(ANIM_OVERVIEW_FADE, AGGRESSIVE_EASE_IN_OUT)); } } diff --git a/src/com/android/launcher3/LauncherAnimUtils.java b/src/com/android/launcher3/LauncherAnimUtils.java index 32e9c14b8e..d9cf7f19b3 100644 --- a/src/com/android/launcher3/LauncherAnimUtils.java +++ b/src/com/android/launcher3/LauncherAnimUtils.java @@ -18,7 +18,7 @@ package com.android.launcher3; import android.graphics.drawable.Drawable; import android.util.FloatProperty; -import android.util.Property; +import android.util.IntProperty; import android.view.View; import android.view.ViewGroup.LayoutParams; @@ -32,15 +32,15 @@ public class LauncherAnimUtils { // The progress of an animation to all apps must be at least this far along to snap to all apps. public static final float MIN_PROGRESS_TO_ALL_APPS = 0.5f; - public static final Property DRAWABLE_ALPHA = - new Property(Integer.TYPE, "drawableAlpha") { + public static final IntProperty DRAWABLE_ALPHA = + new IntProperty("drawableAlpha") { @Override public Integer get(Drawable drawable) { return drawable.getAlpha(); } @Override - public void set(Drawable drawable, Integer alpha) { + public void setValue(Drawable drawable, int alpha) { drawable.setAlpha(alpha); } }; @@ -64,28 +64,28 @@ public class LauncherAnimUtils { return (int) Utilities.boundToRange(Math.abs(velocity) / 2, 2f, 6f); } - public static final Property LAYOUT_WIDTH = - new Property(Integer.TYPE, "width") { + public static final IntProperty LAYOUT_WIDTH = + new IntProperty("width") { @Override public Integer get(LayoutParams lp) { return lp.width; } @Override - public void set(LayoutParams lp, Integer width) { + public void setValue(LayoutParams lp, int width) { lp.width = width; } }; - public static final Property LAYOUT_HEIGHT = - new Property(Integer.TYPE, "height") { + public static final IntProperty LAYOUT_HEIGHT = + new IntProperty("height") { @Override public Integer get(LayoutParams lp) { return lp.height; } @Override - public void set(LayoutParams lp, Integer height) { + public void setValue(LayoutParams lp, int height) { lp.height = height; } }; @@ -117,4 +117,18 @@ public class LauncherAnimUtils { return view.getTranslationY(); } }; + + public static final FloatProperty VIEW_ALPHA = + View.ALPHA instanceof FloatProperty ? (FloatProperty) View.ALPHA + : new FloatProperty("alpha") { + @Override + public void setValue(View view, float v) { + view.setAlpha(v); + } + + @Override + public Float get(View view) { + return view.getAlpha(); + } + }; } diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java index c33392d53d..388d07486d 100644 --- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java +++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java @@ -18,6 +18,9 @@ package com.android.launcher3; import static com.android.launcher3.LauncherAnimUtils.DRAWABLE_ALPHA; import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; +import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA; +import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_X; +import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_Y; import static com.android.launcher3.LauncherState.HOTSEAT_ICONS; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_HOTSEAT_SCALE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_HOTSEAT_TRANSLATE; @@ -125,18 +128,18 @@ public class WorkspaceStateTransitionAnimation { Interpolator translationInterpolator = !playAtomicComponent ? LINEAR : builder.getInterpolator(ANIM_WORKSPACE_TRANSLATE, ZOOM_OUT); - propertySetter.setFloat(mWorkspace, View.TRANSLATION_X, + propertySetter.setFloat(mWorkspace, VIEW_TRANSLATE_X, scaleAndTranslation.translationX, translationInterpolator); - propertySetter.setFloat(mWorkspace, View.TRANSLATION_Y, + propertySetter.setFloat(mWorkspace, VIEW_TRANSLATE_Y, scaleAndTranslation.translationY, translationInterpolator); Interpolator hotseatTranslationInterpolator = builder.getInterpolator( ANIM_HOTSEAT_TRANSLATE, translationInterpolator); - propertySetter.setFloat(hotseat, View.TRANSLATION_Y, + propertySetter.setFloat(hotseat, VIEW_TRANSLATE_Y, hotseatScaleAndTranslation.translationY, hotseatTranslationInterpolator); - propertySetter.setFloat(mWorkspace.getPageIndicator(), View.TRANSLATION_Y, + propertySetter.setFloat(mWorkspace.getPageIndicator(), VIEW_TRANSLATE_Y, hotseatScaleAndTranslation.translationY, hotseatTranslationInterpolator); - propertySetter.setFloat(qsbView, View.TRANSLATION_Y, + propertySetter.setFloat(qsbView, VIEW_TRANSLATE_Y, qsbScaleAndTranslation.translationY, hotseatTranslationInterpolator); setScrim(propertySetter, state); @@ -179,7 +182,7 @@ public class WorkspaceStateTransitionAnimation { if (config.playAtomicOverviewScaleComponent()) { Interpolator fadeInterpolator = builder.getInterpolator(ANIM_WORKSPACE_FADE, pageAlphaProvider.interpolator); - propertySetter.setFloat(cl.getShortcutsAndWidgets(), View.ALPHA, + propertySetter.setFloat(cl.getShortcutsAndWidgets(), VIEW_ALPHA, pageAlpha, fadeInterpolator); } } diff --git a/src/com/android/launcher3/allapps/FloatingHeaderView.java b/src/com/android/launcher3/allapps/FloatingHeaderView.java index cc33af993e..81e1b94acf 100644 --- a/src/com/android/launcher3/allapps/FloatingHeaderView.java +++ b/src/com/android/launcher3/allapps/FloatingHeaderView.java @@ -15,6 +15,8 @@ */ package com.android.launcher3.allapps; +import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA; + import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Point; @@ -370,7 +372,7 @@ public class FloatingHeaderView extends LinearLayout implements } allowTouchForwarding(hasAllAppsContent); - setter.setFloat(mTabLayout, ALPHA, hasAllAppsContent ? 1 : 0, headerFade); + setter.setFloat(mTabLayout, VIEW_ALPHA, hasAllAppsContent ? 1 : 0, headerFade); } protected void allowTouchForwarding(boolean allow) { diff --git a/src/com/android/launcher3/allapps/PluginHeaderRow.java b/src/com/android/launcher3/allapps/PluginHeaderRow.java index 535ef54bc9..3089b18150 100644 --- a/src/com/android/launcher3/allapps/PluginHeaderRow.java +++ b/src/com/android/launcher3/allapps/PluginHeaderRow.java @@ -15,10 +15,11 @@ */ package com.android.launcher3.allapps; -import static android.view.View.ALPHA; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; +import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA; + import android.graphics.Rect; import android.view.View; import android.view.animation.Interpolator; @@ -67,7 +68,7 @@ public class PluginHeaderRow implements FloatingHeaderRow { public void setContentVisibility(boolean hasHeaderExtra, boolean hasAllAppsContent, PropertySetter setter, Interpolator headerFade, Interpolator allAppsFade) { // Don't use setViewAlpha as we want to control the visibility ourselves. - setter.setFloat(mView, ALPHA, hasAllAppsContent ? 1 : 0, headerFade); + setter.setFloat(mView, VIEW_ALPHA, hasAllAppsContent ? 1 : 0, headerFade); } @Override diff --git a/src/com/android/launcher3/anim/PropertySetter.java b/src/com/android/launcher3/anim/PropertySetter.java index 757edff74d..0b2eb48675 100644 --- a/src/com/android/launcher3/anim/PropertySetter.java +++ b/src/com/android/launcher3/anim/PropertySetter.java @@ -19,7 +19,8 @@ package com.android.launcher3.anim; import android.animation.Animator; import android.animation.ObjectAnimator; import android.animation.TimeInterpolator; -import android.util.Property; +import android.util.FloatProperty; +import android.util.IntProperty; import android.view.View; /** @@ -36,14 +37,14 @@ public class PropertySetter { } } - public void setFloat(T target, Property property, float value, + public void setFloat(T target, FloatProperty property, float value, TimeInterpolator interpolator) { - property.set(target, value); + property.setValue(target, value); } - public void setInt(T target, Property property, int value, + public void setInt(T target, IntProperty property, int value, TimeInterpolator interpolator) { - property.set(target, value); + property.setValue(target, value); } public static class AnimatedPropertySetter extends PropertySetter { @@ -68,7 +69,7 @@ public class PropertySetter { } @Override - public void setFloat(T target, Property property, float value, + public void setFloat(T target, FloatProperty property, float value, TimeInterpolator interpolator) { if (property.get(target) == value) { return; @@ -79,7 +80,7 @@ public class PropertySetter { } @Override - public void setInt(T target, Property property, int value, + public void setInt(T target, IntProperty property, int value, TimeInterpolator interpolator) { if (property.get(target) == value) { return; diff --git a/src/com/android/launcher3/graphics/Scrim.java b/src/com/android/launcher3/graphics/Scrim.java index 67b2b6d019..f90962d5d1 100644 --- a/src/com/android/launcher3/graphics/Scrim.java +++ b/src/com/android/launcher3/graphics/Scrim.java @@ -19,7 +19,7 @@ package com.android.launcher3.graphics; import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound; import android.graphics.Canvas; -import android.util.Property; +import android.util.FloatProperty; import android.view.View; import com.android.launcher3.Launcher; @@ -31,16 +31,16 @@ import com.android.launcher3.uioverrides.WallpaperColorInfo; public class Scrim implements View.OnAttachStateChangeListener, WallpaperColorInfo.OnChangeListener { - public static final Property SCRIM_PROGRESS = - new Property(Float.TYPE, "scrimProgress") { + public static final FloatProperty SCRIM_PROGRESS = + new FloatProperty("scrimProgress") { @Override public Float get(Scrim scrim) { return scrim.mScrimProgress; } @Override - public void set(Scrim scrim, Float value) { - scrim.setScrimProgress(value); + public void setValue(Scrim scrim, float v) { + scrim.setScrimProgress(v); } }; diff --git a/src/com/android/launcher3/graphics/WorkspaceAndHotseatScrim.java b/src/com/android/launcher3/graphics/WorkspaceAndHotseatScrim.java index 5a1dcab212..83349bc8f9 100644 --- a/src/com/android/launcher3/graphics/WorkspaceAndHotseatScrim.java +++ b/src/com/android/launcher3/graphics/WorkspaceAndHotseatScrim.java @@ -37,7 +37,7 @@ import android.graphics.Region; import android.graphics.Shader; import android.graphics.drawable.Drawable; import android.util.DisplayMetrics; -import android.util.Property; +import android.util.FloatProperty; import android.view.View; import androidx.core.graphics.ColorUtils; @@ -54,28 +54,28 @@ import com.android.launcher3.util.Themes; */ public class WorkspaceAndHotseatScrim extends Scrim { - public static final Property SYSUI_PROGRESS = - new Property(Float.TYPE, "sysUiProgress") { + public static final FloatProperty SYSUI_PROGRESS = + new FloatProperty("sysUiProgress") { @Override public Float get(WorkspaceAndHotseatScrim scrim) { return scrim.mSysUiProgress; } @Override - public void set(WorkspaceAndHotseatScrim scrim, Float value) { + public void setValue(WorkspaceAndHotseatScrim scrim, float value) { scrim.setSysUiProgress(value); } }; - private static final Property SYSUI_ANIM_MULTIPLIER = - new Property(Float.TYPE, "sysUiAnimMultiplier") { + private static final FloatProperty SYSUI_ANIM_MULTIPLIER = + new FloatProperty("sysUiAnimMultiplier") { @Override public Float get(WorkspaceAndHotseatScrim scrim) { return scrim.mSysUiAnimMultiplier; } @Override - public void set(WorkspaceAndHotseatScrim scrim, Float value) { + public void setValue(WorkspaceAndHotseatScrim scrim, float value) { scrim.mSysUiAnimMultiplier = value; scrim.reapplySysUiAlpha(); } diff --git a/src/com/android/launcher3/views/ScrimView.java b/src/com/android/launcher3/views/ScrimView.java index 70d6c7e6a8..6d204f6c5b 100644 --- a/src/com/android/launcher3/views/ScrimView.java +++ b/src/com/android/launcher3/views/ScrimView.java @@ -40,7 +40,7 @@ import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.AttributeSet; -import android.util.Property; +import android.util.IntProperty; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; @@ -80,8 +80,8 @@ import java.util.List; public class ScrimView extends View implements Insettable, OnChangeListener, AccessibilityStateChangeListener, StateListener { - public static final Property DRAG_HANDLE_ALPHA = - new Property(Integer.TYPE, "dragHandleAlpha") { + public static final IntProperty DRAG_HANDLE_ALPHA = + new IntProperty("dragHandleAlpha") { @Override public Integer get(ScrimView scrimView) { @@ -89,7 +89,7 @@ public class ScrimView extends View implements Insettable, O } @Override - public void set(ScrimView scrimView, Integer value) { + public void setValue(ScrimView scrimView, int value) { scrimView.setDragHandleAlpha(value); } }; From a159b77ef149652daf56e4f413fd4dbc264b032b Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Tue, 10 Mar 2020 09:56:26 -0700 Subject: [PATCH 25/41] Import translations. DO NOT MERGE Auto-generated-cl: translation import Change-Id: I4d6b82f9e793cf2649102e913c81c27f6ccc004a --- quickstep/res/values-af/config.xml | 22 ++++ quickstep/res/values-af/strings.xml | 1 - quickstep/res/values-am/config.xml | 22 ++++ quickstep/res/values-am/strings.xml | 1 - quickstep/res/values-ar/config.xml | 22 ++++ quickstep/res/values-ar/strings.xml | 1 - quickstep/res/values-as/config.xml | 22 ++++ quickstep/res/values-as/strings.xml | 1 - quickstep/res/values-az/config.xml | 22 ++++ quickstep/res/values-az/strings.xml | 1 - quickstep/res/values-b+sr+Latn/config.xml | 22 ++++ quickstep/res/values-b+sr+Latn/strings.xml | 1 - quickstep/res/values-be/config.xml | 22 ++++ quickstep/res/values-be/strings.xml | 1 - quickstep/res/values-bg/config.xml | 22 ++++ quickstep/res/values-bg/strings.xml | 1 - quickstep/res/values-bn/config.xml | 22 ++++ quickstep/res/values-bn/strings.xml | 1 - quickstep/res/values-bs/config.xml | 22 ++++ quickstep/res/values-bs/strings.xml | 1 - quickstep/res/values-ca/config.xml | 22 ++++ quickstep/res/values-ca/strings.xml | 1 - quickstep/res/values-cs/config.xml | 22 ++++ quickstep/res/values-cs/strings.xml | 1 - quickstep/res/values-da/config.xml | 22 ++++ quickstep/res/values-da/strings.xml | 1 - quickstep/res/values-de/config.xml | 22 ++++ quickstep/res/values-de/strings.xml | 1 - quickstep/res/values-el/config.xml | 22 ++++ quickstep/res/values-el/strings.xml | 1 - quickstep/res/values-en-rAU/config.xml | 22 ++++ quickstep/res/values-en-rAU/strings.xml | 1 - quickstep/res/values-en-rCA/config.xml | 22 ++++ quickstep/res/values-en-rCA/strings.xml | 36 ++++++ quickstep/res/values-en-rGB/config.xml | 22 ++++ quickstep/res/values-en-rGB/strings.xml | 1 - quickstep/res/values-en-rIN/config.xml | 22 ++++ quickstep/res/values-en-rIN/strings.xml | 1 - quickstep/res/values-en-rXC/config.xml | 22 ++++ quickstep/res/values-en-rXC/strings.xml | 36 ++++++ quickstep/res/values-es-rUS/config.xml | 22 ++++ quickstep/res/values-es-rUS/strings.xml | 1 - quickstep/res/values-es/config.xml | 22 ++++ quickstep/res/values-es/strings.xml | 3 +- quickstep/res/values-et/config.xml | 22 ++++ quickstep/res/values-et/strings.xml | 1 - quickstep/res/values-eu/config.xml | 22 ++++ quickstep/res/values-eu/strings.xml | 1 - quickstep/res/values-fa/config.xml | 22 ++++ quickstep/res/values-fa/strings.xml | 1 - quickstep/res/values-fi/config.xml | 22 ++++ quickstep/res/values-fi/strings.xml | 1 - quickstep/res/values-fr-rCA/config.xml | 22 ++++ quickstep/res/values-fr-rCA/strings.xml | 1 - quickstep/res/values-fr/config.xml | 22 ++++ quickstep/res/values-fr/strings.xml | 1 - quickstep/res/values-gl/config.xml | 22 ++++ quickstep/res/values-gl/strings.xml | 1 - quickstep/res/values-gu/config.xml | 22 ++++ quickstep/res/values-gu/strings.xml | 1 - quickstep/res/values-hi/config.xml | 22 ++++ quickstep/res/values-hi/strings.xml | 1 - quickstep/res/values-hr/config.xml | 22 ++++ quickstep/res/values-hr/strings.xml | 1 - quickstep/res/values-hu/config.xml | 22 ++++ quickstep/res/values-hu/strings.xml | 1 - quickstep/res/values-hy/config.xml | 22 ++++ quickstep/res/values-hy/strings.xml | 1 - quickstep/res/values-in/config.xml | 22 ++++ quickstep/res/values-in/strings.xml | 1 - quickstep/res/values-is/config.xml | 22 ++++ quickstep/res/values-is/strings.xml | 1 - quickstep/res/values-it/config.xml | 22 ++++ quickstep/res/values-it/strings.xml | 1 - quickstep/res/values-iw/config.xml | 22 ++++ quickstep/res/values-iw/strings.xml | 1 - quickstep/res/values-ja/config.xml | 22 ++++ quickstep/res/values-ja/strings.xml | 1 - quickstep/res/values-ka/config.xml | 22 ++++ quickstep/res/values-ka/strings.xml | 1 - quickstep/res/values-kk/config.xml | 22 ++++ quickstep/res/values-kk/strings.xml | 1 - quickstep/res/values-km/config.xml | 22 ++++ quickstep/res/values-km/strings.xml | 1 - quickstep/res/values-kn/config.xml | 22 ++++ quickstep/res/values-kn/strings.xml | 1 - quickstep/res/values-ko/config.xml | 22 ++++ quickstep/res/values-ko/strings.xml | 1 - quickstep/res/values-ky/config.xml | 22 ++++ quickstep/res/values-ky/strings.xml | 1 - quickstep/res/values-lo/config.xml | 22 ++++ quickstep/res/values-lo/strings.xml | 1 - quickstep/res/values-lt/config.xml | 22 ++++ quickstep/res/values-lt/strings.xml | 1 - quickstep/res/values-lv/config.xml | 22 ++++ quickstep/res/values-lv/strings.xml | 1 - quickstep/res/values-mk/config.xml | 22 ++++ quickstep/res/values-mk/strings.xml | 3 +- quickstep/res/values-ml/config.xml | 22 ++++ quickstep/res/values-ml/strings.xml | 1 - quickstep/res/values-mn/config.xml | 22 ++++ quickstep/res/values-mn/strings.xml | 1 - quickstep/res/values-mr/config.xml | 22 ++++ quickstep/res/values-mr/strings.xml | 1 - quickstep/res/values-ms/config.xml | 22 ++++ quickstep/res/values-ms/strings.xml | 1 - quickstep/res/values-my/config.xml | 22 ++++ quickstep/res/values-my/strings.xml | 1 - quickstep/res/values-nb/config.xml | 22 ++++ quickstep/res/values-nb/strings.xml | 1 - quickstep/res/values-ne/config.xml | 22 ++++ quickstep/res/values-ne/strings.xml | 1 - quickstep/res/values-nl/config.xml | 22 ++++ quickstep/res/values-nl/strings.xml | 1 - quickstep/res/values-or/config.xml | 22 ++++ quickstep/res/values-or/strings.xml | 1 - quickstep/res/values-pa/config.xml | 22 ++++ quickstep/res/values-pa/strings.xml | 1 - quickstep/res/values-pl/config.xml | 22 ++++ quickstep/res/values-pl/strings.xml | 1 - quickstep/res/values-pt-rPT/config.xml | 22 ++++ quickstep/res/values-pt-rPT/strings.xml | 1 - quickstep/res/values-pt/config.xml | 22 ++++ quickstep/res/values-pt/strings.xml | 1 - quickstep/res/values-ro/config.xml | 22 ++++ quickstep/res/values-ro/strings.xml | 1 - quickstep/res/values-ru/config.xml | 22 ++++ quickstep/res/values-ru/strings.xml | 1 - quickstep/res/values-si/config.xml | 22 ++++ quickstep/res/values-si/strings.xml | 1 - quickstep/res/values-sk/config.xml | 22 ++++ quickstep/res/values-sk/strings.xml | 1 - quickstep/res/values-sl/config.xml | 22 ++++ quickstep/res/values-sl/strings.xml | 1 - quickstep/res/values-sq/config.xml | 22 ++++ quickstep/res/values-sq/strings.xml | 1 - quickstep/res/values-sr/config.xml | 22 ++++ quickstep/res/values-sr/strings.xml | 1 - quickstep/res/values-sv/config.xml | 22 ++++ quickstep/res/values-sv/strings.xml | 1 - quickstep/res/values-sw/config.xml | 22 ++++ quickstep/res/values-sw/strings.xml | 1 - quickstep/res/values-te/config.xml | 22 ++++ quickstep/res/values-te/strings.xml | 1 - quickstep/res/values-th/config.xml | 22 ++++ quickstep/res/values-th/strings.xml | 1 - quickstep/res/values-tl/config.xml | 22 ++++ quickstep/res/values-tl/strings.xml | 1 - quickstep/res/values-tr/config.xml | 22 ++++ quickstep/res/values-tr/strings.xml | 1 - quickstep/res/values-uk/config.xml | 22 ++++ quickstep/res/values-uk/strings.xml | 1 - quickstep/res/values-ur/config.xml | 22 ++++ quickstep/res/values-ur/strings.xml | 1 - quickstep/res/values-uz/config.xml | 22 ++++ quickstep/res/values-uz/strings.xml | 1 - quickstep/res/values-vi/config.xml | 22 ++++ quickstep/res/values-vi/strings.xml | 1 - quickstep/res/values-zh-rCN/config.xml | 22 ++++ quickstep/res/values-zh-rCN/strings.xml | 1 - quickstep/res/values-zh-rHK/config.xml | 22 ++++ quickstep/res/values-zh-rHK/strings.xml | 1 - quickstep/res/values-zh-rTW/config.xml | 22 ++++ quickstep/res/values-zh-rTW/strings.xml | 1 - quickstep/res/values-zu/config.xml | 22 ++++ quickstep/res/values-zu/strings.xml | 1 - res/values-af/strings.xml | 17 +-- res/values-am/strings.xml | 16 ++- res/values-ar/strings.xml | 21 +-- res/values-as/strings.xml | 17 +-- res/values-az/strings.xml | 16 ++- res/values-b+sr+Latn/strings.xml | 17 +-- res/values-be/strings.xml | 17 +-- res/values-bg/strings.xml | 17 +-- res/values-bn/strings.xml | 18 +-- res/values-bs/strings.xml | 16 ++- res/values-ca/strings.xml | 20 +-- res/values-cs/strings.xml | 17 +-- res/values-da/strings.xml | 17 +-- res/values-de/strings.xml | 17 +-- res/values-el/strings.xml | 16 ++- res/values-en-rAU/strings.xml | 16 ++- res/values-en-rCA/strings.xml | 144 +++++++++++++++++++++ res/values-en-rGB/strings.xml | 16 ++- res/values-en-rIN/strings.xml | 16 ++- res/values-en-rXC/strings.xml | 144 +++++++++++++++++++++ res/values-es-rUS/strings.xml | 17 +-- res/values-es/strings.xml | 17 +-- res/values-et/strings.xml | 17 +-- res/values-eu/strings.xml | 16 ++- res/values-fa/strings.xml | 17 +-- res/values-fi/strings.xml | 17 +-- res/values-fr-rCA/strings.xml | 17 +-- res/values-fr/strings.xml | 16 ++- res/values-gl/strings.xml | 16 ++- res/values-gu/strings.xml | 18 +-- res/values-hi/strings.xml | 16 ++- res/values-hr/strings.xml | 16 ++- res/values-hu/strings.xml | 17 +-- res/values-hy/strings.xml | 18 +-- res/values-in/strings.xml | 16 ++- res/values-is/strings.xml | 17 +-- res/values-it/strings.xml | 19 +-- res/values-iw/strings.xml | 17 +-- res/values-ja/strings.xml | 17 +-- res/values-ka/strings.xml | 17 +-- res/values-kk/strings.xml | 17 +-- res/values-km/strings.xml | 16 ++- res/values-kn/strings.xml | 16 ++- res/values-ko/strings.xml | 17 +-- res/values-ky/strings.xml | 20 +-- res/values-lo/strings.xml | 17 +-- res/values-lt/strings.xml | 17 +-- res/values-lv/strings.xml | 17 +-- res/values-mk/strings.xml | 20 +-- res/values-ml/strings.xml | 17 +-- res/values-mn/strings.xml | 17 +-- res/values-mr/strings.xml | 23 ++-- res/values-ms/strings.xml | 17 +-- res/values-my/strings.xml | 16 ++- res/values-nb/strings.xml | 17 +-- res/values-ne/strings.xml | 17 +-- res/values-nl/strings.xml | 17 +-- res/values-or/strings.xml | 21 +-- res/values-pa/strings.xml | 17 +-- res/values-pl/strings.xml | 19 +-- res/values-pt-rPT/strings.xml | 16 ++- res/values-pt/strings.xml | 16 ++- res/values-ro/strings.xml | 16 ++- res/values-ru/strings.xml | 17 +-- res/values-si/strings.xml | 17 +-- res/values-sk/strings.xml | 16 ++- res/values-sl/strings.xml | 17 +-- res/values-sq/strings.xml | 16 ++- res/values-sr/strings.xml | 17 +-- res/values-sv/strings.xml | 17 +-- res/values-sw/strings.xml | 16 ++- res/values-te/strings.xml | 16 ++- res/values-th/strings.xml | 16 ++- res/values-tl/strings.xml | 17 +-- res/values-tr/strings.xml | 17 +-- res/values-uk/strings.xml | 17 +-- res/values-ur/strings.xml | 17 +-- res/values-uz/strings.xml | 17 +-- res/values-vi/strings.xml | 25 ++-- res/values-zh-rCN/strings.xml | 17 +-- res/values-zh-rHK/strings.xml | 17 +-- res/values-zh-rTW/strings.xml | 17 +-- res/values-zu/strings.xml | 16 ++- 249 files changed, 2939 insertions(+), 722 deletions(-) create mode 100644 quickstep/res/values-af/config.xml create mode 100644 quickstep/res/values-am/config.xml create mode 100644 quickstep/res/values-ar/config.xml create mode 100644 quickstep/res/values-as/config.xml create mode 100644 quickstep/res/values-az/config.xml create mode 100644 quickstep/res/values-b+sr+Latn/config.xml create mode 100644 quickstep/res/values-be/config.xml create mode 100644 quickstep/res/values-bg/config.xml create mode 100644 quickstep/res/values-bn/config.xml create mode 100644 quickstep/res/values-bs/config.xml create mode 100644 quickstep/res/values-ca/config.xml create mode 100644 quickstep/res/values-cs/config.xml create mode 100644 quickstep/res/values-da/config.xml create mode 100644 quickstep/res/values-de/config.xml create mode 100644 quickstep/res/values-el/config.xml create mode 100644 quickstep/res/values-en-rAU/config.xml create mode 100644 quickstep/res/values-en-rCA/config.xml create mode 100644 quickstep/res/values-en-rCA/strings.xml create mode 100644 quickstep/res/values-en-rGB/config.xml create mode 100644 quickstep/res/values-en-rIN/config.xml create mode 100644 quickstep/res/values-en-rXC/config.xml create mode 100644 quickstep/res/values-en-rXC/strings.xml create mode 100644 quickstep/res/values-es-rUS/config.xml create mode 100644 quickstep/res/values-es/config.xml create mode 100644 quickstep/res/values-et/config.xml create mode 100644 quickstep/res/values-eu/config.xml create mode 100644 quickstep/res/values-fa/config.xml create mode 100644 quickstep/res/values-fi/config.xml create mode 100644 quickstep/res/values-fr-rCA/config.xml create mode 100644 quickstep/res/values-fr/config.xml create mode 100644 quickstep/res/values-gl/config.xml create mode 100644 quickstep/res/values-gu/config.xml create mode 100644 quickstep/res/values-hi/config.xml create mode 100644 quickstep/res/values-hr/config.xml create mode 100644 quickstep/res/values-hu/config.xml create mode 100644 quickstep/res/values-hy/config.xml create mode 100644 quickstep/res/values-in/config.xml create mode 100644 quickstep/res/values-is/config.xml create mode 100644 quickstep/res/values-it/config.xml create mode 100644 quickstep/res/values-iw/config.xml create mode 100644 quickstep/res/values-ja/config.xml create mode 100644 quickstep/res/values-ka/config.xml create mode 100644 quickstep/res/values-kk/config.xml create mode 100644 quickstep/res/values-km/config.xml create mode 100644 quickstep/res/values-kn/config.xml create mode 100644 quickstep/res/values-ko/config.xml create mode 100644 quickstep/res/values-ky/config.xml create mode 100644 quickstep/res/values-lo/config.xml create mode 100644 quickstep/res/values-lt/config.xml create mode 100644 quickstep/res/values-lv/config.xml create mode 100644 quickstep/res/values-mk/config.xml create mode 100644 quickstep/res/values-ml/config.xml create mode 100644 quickstep/res/values-mn/config.xml create mode 100644 quickstep/res/values-mr/config.xml create mode 100644 quickstep/res/values-ms/config.xml create mode 100644 quickstep/res/values-my/config.xml create mode 100644 quickstep/res/values-nb/config.xml create mode 100644 quickstep/res/values-ne/config.xml create mode 100644 quickstep/res/values-nl/config.xml create mode 100644 quickstep/res/values-or/config.xml create mode 100644 quickstep/res/values-pa/config.xml create mode 100644 quickstep/res/values-pl/config.xml create mode 100644 quickstep/res/values-pt-rPT/config.xml create mode 100644 quickstep/res/values-pt/config.xml create mode 100644 quickstep/res/values-ro/config.xml create mode 100644 quickstep/res/values-ru/config.xml create mode 100644 quickstep/res/values-si/config.xml create mode 100644 quickstep/res/values-sk/config.xml create mode 100644 quickstep/res/values-sl/config.xml create mode 100644 quickstep/res/values-sq/config.xml create mode 100644 quickstep/res/values-sr/config.xml create mode 100644 quickstep/res/values-sv/config.xml create mode 100644 quickstep/res/values-sw/config.xml create mode 100644 quickstep/res/values-te/config.xml create mode 100644 quickstep/res/values-th/config.xml create mode 100644 quickstep/res/values-tl/config.xml create mode 100644 quickstep/res/values-tr/config.xml create mode 100644 quickstep/res/values-uk/config.xml create mode 100644 quickstep/res/values-ur/config.xml create mode 100644 quickstep/res/values-uz/config.xml create mode 100644 quickstep/res/values-vi/config.xml create mode 100644 quickstep/res/values-zh-rCN/config.xml create mode 100644 quickstep/res/values-zh-rHK/config.xml create mode 100644 quickstep/res/values-zh-rTW/config.xml create mode 100644 quickstep/res/values-zu/config.xml create mode 100644 res/values-en-rCA/strings.xml create mode 100644 res/values-en-rXC/strings.xml diff --git a/quickstep/res/values-af/config.xml b/quickstep/res/values-af/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-af/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-af/strings.xml b/quickstep/res/values-af/strings.xml index 64b8e2c3b1..9a4f265234 100644 --- a/quickstep/res/values-af/strings.xml +++ b/quickstep/res/values-af/strings.xml @@ -22,7 +22,6 @@ "Verdeelde skerm" "Speld vas" "Vormvry" - "Oorsig" "Geen onlangse items nie" "Maak toe" "Programgebruikinstellings" diff --git a/quickstep/res/values-am/config.xml b/quickstep/res/values-am/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-am/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-am/strings.xml b/quickstep/res/values-am/strings.xml index 3daa92226c..1cf0e8c267 100644 --- a/quickstep/res/values-am/strings.xml +++ b/quickstep/res/values-am/strings.xml @@ -22,7 +22,6 @@ "የተከፈለ ማያ ገጽ" "ሰካ" "ነጻ ቅጽ" - "ማጠቃለያ" "ምንም የቅርብ ጊዜ ንጥሎች የሉም" "ዝጋ" "የመተግበሪያ አጠቃቀም ቅንብሮች" diff --git a/quickstep/res/values-ar/config.xml b/quickstep/res/values-ar/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ar/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ar/strings.xml b/quickstep/res/values-ar/strings.xml index b036bc1ebd..051bcb8700 100644 --- a/quickstep/res/values-ar/strings.xml +++ b/quickstep/res/values-ar/strings.xml @@ -22,7 +22,6 @@ "تقسيم الشاشة" "تثبيت" "شكل مجاني" - "نظرة عامة" "ليست هناك عناصر تم استخدامها مؤخرًا" "إغلاق" "إعدادات استخدام التطبيق" diff --git a/quickstep/res/values-as/config.xml b/quickstep/res/values-as/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-as/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-as/strings.xml b/quickstep/res/values-as/strings.xml index c188493e59..dbbf213933 100644 --- a/quickstep/res/values-as/strings.xml +++ b/quickstep/res/values-as/strings.xml @@ -22,7 +22,6 @@ "বিভাজিত স্ক্ৰীণ" "পিন" "Freeform" - "অৱলোকন" "কোনো শেহতীয়া বস্তু নাই" "বন্ধ কৰক" "এপে ব্যৱহাৰ কৰা ডেটাৰ ছেটিংসমূহ" diff --git a/quickstep/res/values-az/config.xml b/quickstep/res/values-az/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-az/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-az/strings.xml b/quickstep/res/values-az/strings.xml index aa8fa536ac..7c333c6fd9 100644 --- a/quickstep/res/values-az/strings.xml +++ b/quickstep/res/values-az/strings.xml @@ -22,7 +22,6 @@ "Bölünmüş ekran" "Sancın" "Sərbəst rejim" - "İcmal" "Son elementlər yoxdur" "Bağlayın" "Tətbiq istifadə ayarları" diff --git a/quickstep/res/values-b+sr+Latn/config.xml b/quickstep/res/values-b+sr+Latn/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-b+sr+Latn/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-b+sr+Latn/strings.xml b/quickstep/res/values-b+sr+Latn/strings.xml index fbbe9d2dc5..45a707fa1d 100644 --- a/quickstep/res/values-b+sr+Latn/strings.xml +++ b/quickstep/res/values-b+sr+Latn/strings.xml @@ -22,7 +22,6 @@ "Podeljeni ekran" "Zakači" "Slobodni oblik" - "Pregled" "Nema nedavnih stavki" "Zatvori" "Podešavanja korišćenja aplikacije" diff --git a/quickstep/res/values-be/config.xml b/quickstep/res/values-be/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-be/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-be/strings.xml b/quickstep/res/values-be/strings.xml index c4a277267c..8af6021493 100644 --- a/quickstep/res/values-be/strings.xml +++ b/quickstep/res/values-be/strings.xml @@ -22,7 +22,6 @@ "Падзяліць экран" "Замацаваць" "Адвольная форма" - "Агляд" "Няма новых элементаў" "Закрыць" "Налады выкарыстання праграмы" diff --git a/quickstep/res/values-bg/config.xml b/quickstep/res/values-bg/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-bg/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-bg/strings.xml b/quickstep/res/values-bg/strings.xml index 9e8c54a9c7..58fe8f7ac9 100644 --- a/quickstep/res/values-bg/strings.xml +++ b/quickstep/res/values-bg/strings.xml @@ -22,7 +22,6 @@ "Разделен екран" "Фиксиране" "Свободна форма" - "Общ преглед" "Няма скорошни елементи" "Затваряне" "Настройки за използването на приложенията" diff --git a/quickstep/res/values-bn/config.xml b/quickstep/res/values-bn/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-bn/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-bn/strings.xml b/quickstep/res/values-bn/strings.xml index 57f92e5a0c..46a7614c51 100644 --- a/quickstep/res/values-bn/strings.xml +++ b/quickstep/res/values-bn/strings.xml @@ -22,7 +22,6 @@ "স্ক্রিন স্প্লিট করুন" "পিন করুন" "ফ্রি-ফর্ম" - "এক নজরে" "কোনো সাম্প্রতিক আইটেম নেই" "বন্ধ করুন" "অ্যাপ ব্যবহারের সেটিংস" diff --git a/quickstep/res/values-bs/config.xml b/quickstep/res/values-bs/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-bs/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-bs/strings.xml b/quickstep/res/values-bs/strings.xml index 7968f7cc68..6d1ce43559 100644 --- a/quickstep/res/values-bs/strings.xml +++ b/quickstep/res/values-bs/strings.xml @@ -22,7 +22,6 @@ "Način rada podijeljenog ekrana" "Zakači" "Slobodan oblik" - "Pregled" "Nema nedavnih stavki" "Zatvaranje" "Postavke korištenja aplikacije" diff --git a/quickstep/res/values-ca/config.xml b/quickstep/res/values-ca/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ca/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ca/strings.xml b/quickstep/res/values-ca/strings.xml index 6420aa8cb8..cf1f8c0486 100644 --- a/quickstep/res/values-ca/strings.xml +++ b/quickstep/res/values-ca/strings.xml @@ -22,7 +22,6 @@ "Pantalla dividida" "Fixa" "Format lliure" - "Aplicacions recents" "No hi ha cap element recent" "Tanca" "Configuració d\'ús d\'aplicacions" diff --git a/quickstep/res/values-cs/config.xml b/quickstep/res/values-cs/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-cs/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-cs/strings.xml b/quickstep/res/values-cs/strings.xml index 194ff87dc5..4dabea8d93 100644 --- a/quickstep/res/values-cs/strings.xml +++ b/quickstep/res/values-cs/strings.xml @@ -22,7 +22,6 @@ "Rozdělená obrazovka" "PIN" "Neomezený režim" - "Přehled" "Žádné nedávné položky" "Zavřít" "Nastavení využití aplikací" diff --git a/quickstep/res/values-da/config.xml b/quickstep/res/values-da/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-da/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-da/strings.xml b/quickstep/res/values-da/strings.xml index b43a76eb94..40c0bbea64 100644 --- a/quickstep/res/values-da/strings.xml +++ b/quickstep/res/values-da/strings.xml @@ -22,7 +22,6 @@ "Opdel skærm" "Fastgør" "Frit format" - "Oversigt" "Ingen nye elementer" "Luk" "Indstillinger for appforbrug" diff --git a/quickstep/res/values-de/config.xml b/quickstep/res/values-de/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-de/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-de/strings.xml b/quickstep/res/values-de/strings.xml index 449cc8c11d..7eb7e1338a 100644 --- a/quickstep/res/values-de/strings.xml +++ b/quickstep/res/values-de/strings.xml @@ -22,7 +22,6 @@ "Splitscreen" "Anpinnen" "Freeform-Modus" - "Übersicht" "Keine kürzlich verwendeten Elemente" "Schließen" "Einstellungen zur App-Nutzung" diff --git a/quickstep/res/values-el/config.xml b/quickstep/res/values-el/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-el/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-el/strings.xml b/quickstep/res/values-el/strings.xml index 87268df749..c65a8849d2 100644 --- a/quickstep/res/values-el/strings.xml +++ b/quickstep/res/values-el/strings.xml @@ -22,7 +22,6 @@ "Διαχωρισμός οθόνης" "Καρφίτσωμα" "Ελεύθερη μορφή" - "Επισκόπηση" "Δεν υπάρχουν πρόσφατα στοιχεία" "Κλείσιμο" "Ρυθμίσεις χρήσης εφαρμογής" diff --git a/quickstep/res/values-en-rAU/config.xml b/quickstep/res/values-en-rAU/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-en-rAU/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-en-rAU/strings.xml b/quickstep/res/values-en-rAU/strings.xml index 2d1418e5f4..1405b614d4 100644 --- a/quickstep/res/values-en-rAU/strings.xml +++ b/quickstep/res/values-en-rAU/strings.xml @@ -22,7 +22,6 @@ "Split screen" "Pin" "Freeform" - "Overview" "No recent items" "Close" "App usage settings" diff --git a/quickstep/res/values-en-rCA/config.xml b/quickstep/res/values-en-rCA/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-en-rCA/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-en-rCA/strings.xml b/quickstep/res/values-en-rCA/strings.xml new file mode 100644 index 0000000000..1405b614d4 --- /dev/null +++ b/quickstep/res/values-en-rCA/strings.xml @@ -0,0 +1,36 @@ + + + + + "Split screen" + "Pin" + "Freeform" + "No recent items" + "Close" + "App usage settings" + "Clear all" + "Recent apps" + "%1$s, %2$s" + "< 1 minute" + "%1$s left today" + "App suggestions" + "All apps" + "Your predicted apps" + diff --git a/quickstep/res/values-en-rGB/config.xml b/quickstep/res/values-en-rGB/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-en-rGB/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-en-rGB/strings.xml b/quickstep/res/values-en-rGB/strings.xml index 2d1418e5f4..1405b614d4 100644 --- a/quickstep/res/values-en-rGB/strings.xml +++ b/quickstep/res/values-en-rGB/strings.xml @@ -22,7 +22,6 @@ "Split screen" "Pin" "Freeform" - "Overview" "No recent items" "Close" "App usage settings" diff --git a/quickstep/res/values-en-rIN/config.xml b/quickstep/res/values-en-rIN/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-en-rIN/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-en-rIN/strings.xml b/quickstep/res/values-en-rIN/strings.xml index 2d1418e5f4..1405b614d4 100644 --- a/quickstep/res/values-en-rIN/strings.xml +++ b/quickstep/res/values-en-rIN/strings.xml @@ -22,7 +22,6 @@ "Split screen" "Pin" "Freeform" - "Overview" "No recent items" "Close" "App usage settings" diff --git a/quickstep/res/values-en-rXC/config.xml b/quickstep/res/values-en-rXC/config.xml new file mode 100644 index 0000000000..c3e7d6fb59 --- /dev/null +++ b/quickstep/res/values-en-rXC/config.xml @@ -0,0 +1,22 @@ + + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity‎‏‎‎‏‎" + + diff --git a/quickstep/res/values-en-rXC/strings.xml b/quickstep/res/values-en-rXC/strings.xml new file mode 100644 index 0000000000..2803d6d3f1 --- /dev/null +++ b/quickstep/res/values-en-rXC/strings.xml @@ -0,0 +1,36 @@ + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‎‎‏‎‎Split screen‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‎‏‎‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‏‏‎‏‎‎‏‎‎Pin‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎Freeform‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‏‎No recent items‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎Close‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‏‎‏‎‏‎‏‎App usage settings‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎Clear all‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎Recent apps‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎, ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‎< 1 minute‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ left today‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎App suggestions‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‏‏‏‎All apps‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎Your predicted apps‎‏‎‎‏‎" + diff --git a/quickstep/res/values-es-rUS/config.xml b/quickstep/res/values-es-rUS/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-es-rUS/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-es-rUS/strings.xml b/quickstep/res/values-es-rUS/strings.xml index 5f5d0bdfe9..04176380ee 100644 --- a/quickstep/res/values-es-rUS/strings.xml +++ b/quickstep/res/values-es-rUS/strings.xml @@ -22,7 +22,6 @@ "Pantalla dividida" "Fijar" "Formato libre" - "Recientes" "No hay elementos recientes" "Cerrar" "Configuración de uso de la app" diff --git a/quickstep/res/values-es/config.xml b/quickstep/res/values-es/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-es/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-es/strings.xml b/quickstep/res/values-es/strings.xml index 329286b3bf..9618a33760 100644 --- a/quickstep/res/values-es/strings.xml +++ b/quickstep/res/values-es/strings.xml @@ -22,8 +22,7 @@ "Dividir pantalla" "Fijar" "Formato libre" - "Aplicaciones recientes" - "No hay elementos recientes" + "No hay nada reciente" "Cerrar" "Ajustes de uso de la aplicación" "Borrar todo" diff --git a/quickstep/res/values-et/config.xml b/quickstep/res/values-et/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-et/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-et/strings.xml b/quickstep/res/values-et/strings.xml index 0577b0f562..a6d179e6f8 100644 --- a/quickstep/res/values-et/strings.xml +++ b/quickstep/res/values-et/strings.xml @@ -22,7 +22,6 @@ "Jagatud ekraan" "Kinnita" "Vabavorm" - "Ülevaade" "Hiljutisi üksusi pole" "Sule" "Rakenduse kasutuse seaded" diff --git a/quickstep/res/values-eu/config.xml b/quickstep/res/values-eu/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-eu/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-eu/strings.xml b/quickstep/res/values-eu/strings.xml index c2d149e362..424ce88379 100644 --- a/quickstep/res/values-eu/strings.xml +++ b/quickstep/res/values-eu/strings.xml @@ -22,7 +22,6 @@ "Zatitu pantaila" "Ainguratu" "Modu librea" - "Ikuspegi orokorra" "Ez dago azkenaldi honetako ezer" "Itxi" "Aplikazioen erabileraren ezarpenak" diff --git a/quickstep/res/values-fa/config.xml b/quickstep/res/values-fa/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-fa/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-fa/strings.xml b/quickstep/res/values-fa/strings.xml index cc26695a60..0aab8ba2ed 100644 --- a/quickstep/res/values-fa/strings.xml +++ b/quickstep/res/values-fa/strings.xml @@ -22,7 +22,6 @@ "تقسیم صفحه" "پین" "Freeform" - "نمای کلی" "بدون موارد اخیر" "بستن" "تنظیمات استفاده از برنامه" diff --git a/quickstep/res/values-fi/config.xml b/quickstep/res/values-fi/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-fi/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-fi/strings.xml b/quickstep/res/values-fi/strings.xml index f43433e3a1..cebfaa7834 100644 --- a/quickstep/res/values-fi/strings.xml +++ b/quickstep/res/values-fi/strings.xml @@ -22,7 +22,6 @@ "Jaettu näyttö" "Kiinnitä" "Vapaamuotoinen" - "Viimeisimmät" "Ei viimeaikaisia kohteita" "Sulje" "Sovelluksen käyttöasetukset" diff --git a/quickstep/res/values-fr-rCA/config.xml b/quickstep/res/values-fr-rCA/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-fr-rCA/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-fr-rCA/strings.xml b/quickstep/res/values-fr-rCA/strings.xml index a9a1cffb6d..dd815b2d4b 100644 --- a/quickstep/res/values-fr-rCA/strings.xml +++ b/quickstep/res/values-fr-rCA/strings.xml @@ -22,7 +22,6 @@ "Écran divisé" "Épingler" "Forme libre" - "Aperçu" "Aucun élément récent" "Fermer" "Paramètres d\'utilisation de l\'application" diff --git a/quickstep/res/values-fr/config.xml b/quickstep/res/values-fr/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-fr/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-fr/strings.xml b/quickstep/res/values-fr/strings.xml index 01dcff202d..4ad572752c 100644 --- a/quickstep/res/values-fr/strings.xml +++ b/quickstep/res/values-fr/strings.xml @@ -22,7 +22,6 @@ "Écran partagé" "Épingler" "Format libre" - "Aperçu" "Aucun élément récent" "Fermer" "Paramètres de consommation de l\'application" diff --git a/quickstep/res/values-gl/config.xml b/quickstep/res/values-gl/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-gl/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-gl/strings.xml b/quickstep/res/values-gl/strings.xml index 356d10d5da..8051134b4c 100644 --- a/quickstep/res/values-gl/strings.xml +++ b/quickstep/res/values-gl/strings.xml @@ -22,7 +22,6 @@ "Pantalla dividida" "Fixar" "Forma libre" - "Visión xeral" "Non hai elementos recentes" "Pecha a aplicación" "Configuración do uso de aplicacións" diff --git a/quickstep/res/values-gu/config.xml b/quickstep/res/values-gu/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-gu/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-gu/strings.xml b/quickstep/res/values-gu/strings.xml index 660ad87acc..a0e60d3bc0 100644 --- a/quickstep/res/values-gu/strings.xml +++ b/quickstep/res/values-gu/strings.xml @@ -22,7 +22,6 @@ "સ્ક્રીનને વિભાજિત કરો" "પિન કરો" "ફ્રિફોર્મ" - "ઝલક" "તાજેતરની કોઈ આઇટમ નથી" "બંધ કરો" "ઍપ વપરાશનું સેટિંગ" diff --git a/quickstep/res/values-hi/config.xml b/quickstep/res/values-hi/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-hi/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-hi/strings.xml b/quickstep/res/values-hi/strings.xml index 387d509587..bddaafdacc 100644 --- a/quickstep/res/values-hi/strings.xml +++ b/quickstep/res/values-hi/strings.xml @@ -22,7 +22,6 @@ "स्क्रीन को दो हिस्सों में बाँटना (स्प्लिट स्क्रीन)" "पिन करना" "फ़्रीफ़ॉर्म" - "खास जानकारी" "हाल ही में इस्तेमाल किया गया कोई ऐप्लिकेशन नहीं है" "बंद करें" "ऐप्लिकेशन इस्तेमाल की सेटिंग" diff --git a/quickstep/res/values-hr/config.xml b/quickstep/res/values-hr/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-hr/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-hr/strings.xml b/quickstep/res/values-hr/strings.xml index ab56e57b50..234e7335f2 100644 --- a/quickstep/res/values-hr/strings.xml +++ b/quickstep/res/values-hr/strings.xml @@ -22,7 +22,6 @@ "Podijeljeni zaslon" "Prikvači" "Slobodni oblik" - "Pregled" "Nema nedavnih stavki" "Zatvori" "Postavke upotrebe aplikacija" diff --git a/quickstep/res/values-hu/config.xml b/quickstep/res/values-hu/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-hu/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-hu/strings.xml b/quickstep/res/values-hu/strings.xml index dec6ea0158..391ef4fd53 100644 --- a/quickstep/res/values-hu/strings.xml +++ b/quickstep/res/values-hu/strings.xml @@ -22,7 +22,6 @@ "Osztott képernyő" "Rögzítés" "Szabad forma" - "Áttekintés" "Nincsenek mostanában használt elemek" "Bezárás" "Alkalmazáshasználati beállítások" diff --git a/quickstep/res/values-hy/config.xml b/quickstep/res/values-hy/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-hy/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-hy/strings.xml b/quickstep/res/values-hy/strings.xml index 1656a1444d..5ad522a3ae 100644 --- a/quickstep/res/values-hy/strings.xml +++ b/quickstep/res/values-hy/strings.xml @@ -22,7 +22,6 @@ "Տրոհել էկրանը" "Ամրացնել" "Կամայական ձև" - "Ընդհանուր տեղեկություններ" "Վերջին տարրեր չկան" "Փակել" "Հավելվածի օգտագործման կարգավորումներ" diff --git a/quickstep/res/values-in/config.xml b/quickstep/res/values-in/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-in/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-in/strings.xml b/quickstep/res/values-in/strings.xml index 6824d16b40..30bd0de193 100644 --- a/quickstep/res/values-in/strings.xml +++ b/quickstep/res/values-in/strings.xml @@ -22,7 +22,6 @@ "Layar terpisah" "Pasang pin" "Format bebas" - "Ringkasan" "Tidak ada item yang baru dibuka" "Tutup" "Setelan penggunaan aplikasi" diff --git a/quickstep/res/values-is/config.xml b/quickstep/res/values-is/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-is/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-is/strings.xml b/quickstep/res/values-is/strings.xml index f60a2c6802..9eaafc217c 100644 --- a/quickstep/res/values-is/strings.xml +++ b/quickstep/res/values-is/strings.xml @@ -22,7 +22,6 @@ "Skipta skjá" "Festa" "Frjálst snið" - "Yfirlit" "Engin nýleg atriði" "Loka" "Notkunarstillingar forrits" diff --git a/quickstep/res/values-it/config.xml b/quickstep/res/values-it/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-it/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-it/strings.xml b/quickstep/res/values-it/strings.xml index 559fdb4b6e..4f799b47b6 100644 --- a/quickstep/res/values-it/strings.xml +++ b/quickstep/res/values-it/strings.xml @@ -22,7 +22,6 @@ "Schermo diviso" "Blocca" "Forma libera" - "Panoramica" "Nessun elemento recente" "Chiudi" "Impostazioni di utilizzo delle app" diff --git a/quickstep/res/values-iw/config.xml b/quickstep/res/values-iw/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-iw/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-iw/strings.xml b/quickstep/res/values-iw/strings.xml index 58cab4e0a9..42e2bf39dc 100644 --- a/quickstep/res/values-iw/strings.xml +++ b/quickstep/res/values-iw/strings.xml @@ -22,7 +22,6 @@ "מסך מפוצל" "הצמדה" "מצב חופשי" - "מסכים אחרונים" "אין פריטים אחרונים" "סגירה" "הגדרות שימוש באפליקציה" diff --git a/quickstep/res/values-ja/config.xml b/quickstep/res/values-ja/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ja/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ja/strings.xml b/quickstep/res/values-ja/strings.xml index d3fecde208..b8a4c775e2 100644 --- a/quickstep/res/values-ja/strings.xml +++ b/quickstep/res/values-ja/strings.xml @@ -22,7 +22,6 @@ "分割画面" "固定" "フリーフォーム" - "概要" "最近のアイテムはありません" "閉じる" "アプリの使用状況の設定" diff --git a/quickstep/res/values-ka/config.xml b/quickstep/res/values-ka/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ka/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ka/strings.xml b/quickstep/res/values-ka/strings.xml index 67b03a754f..efa68576b5 100644 --- a/quickstep/res/values-ka/strings.xml +++ b/quickstep/res/values-ka/strings.xml @@ -22,7 +22,6 @@ "ეკრანის გაყოფა" "ჩამაგრება" "თავისუფალი ფორმა" - "მიმოხილვა" "ბოლოს გამოყენებული ერთეულები არ არის" "დახურვა" "აპების გამოყენების პარამეტრები" diff --git a/quickstep/res/values-kk/config.xml b/quickstep/res/values-kk/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-kk/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-kk/strings.xml b/quickstep/res/values-kk/strings.xml index a9fcbedb20..759da276f0 100644 --- a/quickstep/res/values-kk/strings.xml +++ b/quickstep/res/values-kk/strings.xml @@ -22,7 +22,6 @@ "Экранды бөлу" "Бекіту" "Еркін форма" - "Шолу" "Соңғы элементтер жоқ" "Жабу" "Қолданбаны пайдалану параметрлері" diff --git a/quickstep/res/values-km/config.xml b/quickstep/res/values-km/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-km/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-km/strings.xml b/quickstep/res/values-km/strings.xml index c422041e7a..5961a5c788 100644 --- a/quickstep/res/values-km/strings.xml +++ b/quickstep/res/values-km/strings.xml @@ -22,7 +22,6 @@ "មុខងារ​បំបែកអេក្រង់" "ដៅ" "មុខងារទម្រង់សេរី" - "ទិដ្ឋភាពរួម" "មិនមានធាតុថ្មីៗទេ" "បិទ" "ការកំណត់​ការប្រើប្រាស់​កម្មវិធី" diff --git a/quickstep/res/values-kn/config.xml b/quickstep/res/values-kn/config.xml new file mode 100644 index 0000000000..e5da1fa94e --- /dev/null +++ b/quickstep/res/values-kn/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxಚಟುವಟಿಕೆ" + + diff --git a/quickstep/res/values-kn/strings.xml b/quickstep/res/values-kn/strings.xml index 52782610b9..3a75ea4c61 100644 --- a/quickstep/res/values-kn/strings.xml +++ b/quickstep/res/values-kn/strings.xml @@ -22,7 +22,6 @@ "ಪರದೆಯನ್ನು ಬೇರ್ಪಡಿಸಿ" "ಪಿನ್ ಮಾಡಿ" "ಮುಕ್ತಸ್ವರೂಪ" - "ಅವಲೋಕನ" "ಯಾವುದೇ ಇತ್ತೀಚಿನ ಐಟಂಗಳಿಲ್ಲ" "ಮುಚ್ಚಿ" "ಆ್ಯಪ್‌ ಬಳಕೆಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳು" diff --git a/quickstep/res/values-ko/config.xml b/quickstep/res/values-ko/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ko/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ko/strings.xml b/quickstep/res/values-ko/strings.xml index 7a8e6a1f9a..02dec4a12e 100644 --- a/quickstep/res/values-ko/strings.xml +++ b/quickstep/res/values-ko/strings.xml @@ -22,7 +22,6 @@ "화면 분할" "고정" "자유 형식" - "최근 사용" "최근 항목이 없습니다." "닫기" "앱 사용 설정" diff --git a/quickstep/res/values-ky/config.xml b/quickstep/res/values-ky/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ky/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ky/strings.xml b/quickstep/res/values-ky/strings.xml index 4018e57dcc..02bb7e4b86 100644 --- a/quickstep/res/values-ky/strings.xml +++ b/quickstep/res/values-ky/strings.xml @@ -22,7 +22,6 @@ "Экранды бөлүү" "Кадап коюу" "Эркин форма режими" - "Сереп салуу" "Акыркы колдонмолор жок" "Жабуу" "Колдонмону пайдалануу жөндөөлөрү" diff --git a/quickstep/res/values-lo/config.xml b/quickstep/res/values-lo/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-lo/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-lo/strings.xml b/quickstep/res/values-lo/strings.xml index e406b7083d..a9b1fc65df 100644 --- a/quickstep/res/values-lo/strings.xml +++ b/quickstep/res/values-lo/strings.xml @@ -22,7 +22,6 @@ "ແບ່ງໜ້າຈໍ" "ປັກໝຸດ" "ຮູບແບບອິດສະຫລະ" - "ພາບຮວມ" "ບໍ່ມີລາຍການຫຼ້າສຸດ" "ປິດ" "ການຕັ້ງຄ່າການນຳໃຊ້ແອັບ" diff --git a/quickstep/res/values-lt/config.xml b/quickstep/res/values-lt/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-lt/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-lt/strings.xml b/quickstep/res/values-lt/strings.xml index ed1fc373e2..fb805cd19e 100644 --- a/quickstep/res/values-lt/strings.xml +++ b/quickstep/res/values-lt/strings.xml @@ -22,7 +22,6 @@ "Skaidyti ekraną" "Prisegti" "Laisva forma" - "Apžvalga" "Nėra jokių naujausių elementų" "Uždaryti" "Programos naudojimo nustatymai" diff --git a/quickstep/res/values-lv/config.xml b/quickstep/res/values-lv/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-lv/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-lv/strings.xml b/quickstep/res/values-lv/strings.xml index 85ce0e017d..2a7061d4be 100644 --- a/quickstep/res/values-lv/strings.xml +++ b/quickstep/res/values-lv/strings.xml @@ -22,7 +22,6 @@ "Sadalīt ekrānu" "Piespraust" "Brīva forma" - "Pārskats" "Nav nesenu vienumu." "Aizvērt" "Lietotņu izmantošanas iestatījumi" diff --git a/quickstep/res/values-mk/config.xml b/quickstep/res/values-mk/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-mk/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-mk/strings.xml b/quickstep/res/values-mk/strings.xml index 9f11521df3..41f5e9a76a 100644 --- a/quickstep/res/values-mk/strings.xml +++ b/quickstep/res/values-mk/strings.xml @@ -22,11 +22,10 @@ "Поделен екран" "Прикачување" "Freeform" - "Преглед" "Нема неодамнешни ставки" "Затвори" "Поставки за користење на апликациите" - "Исчисти ги сите" + "Избриши ги сите" "Неодамнешни апликации" "%1$s, %2$s" "< 1 минута" diff --git a/quickstep/res/values-ml/config.xml b/quickstep/res/values-ml/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ml/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ml/strings.xml b/quickstep/res/values-ml/strings.xml index 2e02e80fa8..bf5af52f31 100644 --- a/quickstep/res/values-ml/strings.xml +++ b/quickstep/res/values-ml/strings.xml @@ -22,7 +22,6 @@ "സ്‌ക്രീൻ വിഭജിക്കുക" "പിൻ ചെയ്യുക" "ഫ്രീഫോം" - "അവലോകനം" "സമീപകാല ഇനങ്ങൾ ഒന്നുമില്ല" "അവസാനിപ്പിക്കുക" "ആപ്പ് ഉപയോഗ ക്രമീകരണം" diff --git a/quickstep/res/values-mn/config.xml b/quickstep/res/values-mn/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-mn/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-mn/strings.xml b/quickstep/res/values-mn/strings.xml index 5de8602022..658c93e7fb 100644 --- a/quickstep/res/values-mn/strings.xml +++ b/quickstep/res/values-mn/strings.xml @@ -22,7 +22,6 @@ "Дэлгэцийг хуваах" "Тогтоох" "Чөлөөтэй хувьсах" - "Тойм" "Сүүлийн үеийн зүйл алга" "Хаах" "Апп ашиглалтын тохиргоо" diff --git a/quickstep/res/values-mr/config.xml b/quickstep/res/values-mr/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-mr/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-mr/strings.xml b/quickstep/res/values-mr/strings.xml index cccece749c..bbabdfe23b 100644 --- a/quickstep/res/values-mr/strings.xml +++ b/quickstep/res/values-mr/strings.xml @@ -22,7 +22,6 @@ "विभाजित स्क्रीन" "पिन करा" "फ्रीफॉर्म" - "अवलोकन" "कोणतेही अलीकडील आयटम नाहीत" "बंद" "अ‍ॅप वापर सेटिंग्ज" diff --git a/quickstep/res/values-ms/config.xml b/quickstep/res/values-ms/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ms/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ms/strings.xml b/quickstep/res/values-ms/strings.xml index 2542963769..90306580c8 100644 --- a/quickstep/res/values-ms/strings.xml +++ b/quickstep/res/values-ms/strings.xml @@ -22,7 +22,6 @@ "Skrin pisah" "Semat" "Bentuk bebas" - "Ikhtisar" "Tiada item terbaharu" "Tutup" "Tetapan penggunaan apl" diff --git a/quickstep/res/values-my/config.xml b/quickstep/res/values-my/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-my/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-my/strings.xml b/quickstep/res/values-my/strings.xml index 7683e05990..1799e24893 100644 --- a/quickstep/res/values-my/strings.xml +++ b/quickstep/res/values-my/strings.xml @@ -22,7 +22,6 @@ "မျက်နှာပြင် ခွဲ၍ပြသခြင်း" "ပင်ထိုးခြင်း" "အလွတ်ပုံစံ" - "အနှစ်ချုပ်" "မကြာမီကဖွင့်ထားသည်များ မရှိပါ" "ပိတ်ရန်" "အက်ပ်အသုံးပြုမှု ဆက်တင်များ" diff --git a/quickstep/res/values-nb/config.xml b/quickstep/res/values-nb/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-nb/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-nb/strings.xml b/quickstep/res/values-nb/strings.xml index 01bbb6a75d..48574806d9 100644 --- a/quickstep/res/values-nb/strings.xml +++ b/quickstep/res/values-nb/strings.xml @@ -22,7 +22,6 @@ "Delt skjerm" "Fest" "Fritt format" - "Oversikt" "Ingen nylige elementer" "Lukk" "Innstillinger for appbruk" diff --git a/quickstep/res/values-ne/config.xml b/quickstep/res/values-ne/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ne/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ne/strings.xml b/quickstep/res/values-ne/strings.xml index 60e9bd5313..ee0aac2068 100644 --- a/quickstep/res/values-ne/strings.xml +++ b/quickstep/res/values-ne/strings.xml @@ -22,7 +22,6 @@ "स्क्रिन विभाजन गर्नुहोस्" "पिन गर्नुहोस्" "फ्रिफर्म" - "परिदृश्य" "हालसालैको कुनै पनि वस्तु छैन" "बन्द गर्नुहोस्" "अनुप्रयोगको उपयोगका सेटिङहरू" diff --git a/quickstep/res/values-nl/config.xml b/quickstep/res/values-nl/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-nl/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-nl/strings.xml b/quickstep/res/values-nl/strings.xml index 8032567e1c..fb0219072a 100644 --- a/quickstep/res/values-nl/strings.xml +++ b/quickstep/res/values-nl/strings.xml @@ -22,7 +22,6 @@ "Gesplitst scherm" "Vastzetten" "Vrije vorm" - "Overzicht" "Geen recente items" "Sluiten" "Instellingen voor app-gebruik" diff --git a/quickstep/res/values-or/config.xml b/quickstep/res/values-or/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-or/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-or/strings.xml b/quickstep/res/values-or/strings.xml index 2ebec4e7c7..202c5d7355 100644 --- a/quickstep/res/values-or/strings.xml +++ b/quickstep/res/values-or/strings.xml @@ -22,7 +22,6 @@ "ସ୍କ୍ରୀନ୍‌କୁ ଭାଗ କରନ୍ତୁ" "ପିନ୍‍" "ଫ୍ରିଫର୍ମ" - "ସଂକ୍ଷିପ୍ତ ବିବରଣ" "କୌଣସି ସାମ୍ପ୍ରତିକ ଆଇଟମ୍ ନାହିଁ" "ବନ୍ଦ କରନ୍ତୁ" "ଆପ୍‍ ବ୍ୟବହାର ସେଟିଂସ୍‍" diff --git a/quickstep/res/values-pa/config.xml b/quickstep/res/values-pa/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-pa/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-pa/strings.xml b/quickstep/res/values-pa/strings.xml index 58c0d2afa4..ed77e2f31b 100644 --- a/quickstep/res/values-pa/strings.xml +++ b/quickstep/res/values-pa/strings.xml @@ -22,7 +22,6 @@ "ਸਪਲਿਟ ਸਕ੍ਰੀਨ" "ਪਿੰਨ ਕਰੋ" "ਫ੍ਰੀਫਾਰਮ" - "ਰੂਪ-ਰੇਖਾ" "ਕੋਈ ਹਾਲੀਆ ਆਈਟਮਾਂ ਨਹੀਂ" "ਬੰਦ ਕਰੋ" "ਐਪ ਵਰਤੋਂ ਦੀਆਂ ਸੈਟਿੰਗਾਂ" diff --git a/quickstep/res/values-pl/config.xml b/quickstep/res/values-pl/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-pl/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-pl/strings.xml b/quickstep/res/values-pl/strings.xml index d83160dffb..eac032f882 100644 --- a/quickstep/res/values-pl/strings.xml +++ b/quickstep/res/values-pl/strings.xml @@ -22,7 +22,6 @@ "Podziel ekran" "Przypnij" "Tryb dowolny" - "Przegląd" "Brak ostatnich elementów" "Zamknij" "Ustawienia użycia aplikacji" diff --git a/quickstep/res/values-pt-rPT/config.xml b/quickstep/res/values-pt-rPT/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-pt-rPT/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-pt-rPT/strings.xml b/quickstep/res/values-pt-rPT/strings.xml index 2fd34d636c..9272afac8b 100644 --- a/quickstep/res/values-pt-rPT/strings.xml +++ b/quickstep/res/values-pt-rPT/strings.xml @@ -22,7 +22,6 @@ "Ecrã dividido" "Fixar" "Forma livre" - "Vista geral" "Nenhum item recente" "Fechar" "Definições de utilização de aplicações" diff --git a/quickstep/res/values-pt/config.xml b/quickstep/res/values-pt/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-pt/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-pt/strings.xml b/quickstep/res/values-pt/strings.xml index 673dfe2e73..9dd17199fb 100644 --- a/quickstep/res/values-pt/strings.xml +++ b/quickstep/res/values-pt/strings.xml @@ -22,7 +22,6 @@ "Tela dividida" "Fixar" "Forma livre" - "Visão geral" "Nenhum item recente" "Fechar" "Configurações de uso do app" diff --git a/quickstep/res/values-ro/config.xml b/quickstep/res/values-ro/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ro/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ro/strings.xml b/quickstep/res/values-ro/strings.xml index 2ac783eb0e..19cab617ec 100644 --- a/quickstep/res/values-ro/strings.xml +++ b/quickstep/res/values-ro/strings.xml @@ -22,7 +22,6 @@ "Ecran împărțit" "Fixați" "Formă liberă" - "Recente" "Niciun element recent" "Închideți" "Setări de utilizare a aplicației" diff --git a/quickstep/res/values-ru/config.xml b/quickstep/res/values-ru/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ru/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ru/strings.xml b/quickstep/res/values-ru/strings.xml index 5dd89a644b..ecaf248098 100644 --- a/quickstep/res/values-ru/strings.xml +++ b/quickstep/res/values-ru/strings.xml @@ -22,7 +22,6 @@ "Разделить экран" "Блокировать" "Произвольная форма" - "Обзор" "Здесь пока ничего нет." "Закрыть" "Настройки использования приложения" diff --git a/quickstep/res/values-si/config.xml b/quickstep/res/values-si/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-si/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-si/strings.xml b/quickstep/res/values-si/strings.xml index f6584c4dca..917de7bd6c 100644 --- a/quickstep/res/values-si/strings.xml +++ b/quickstep/res/values-si/strings.xml @@ -22,7 +22,6 @@ "බෙදුම් තිරය" "අමුණන්න" "Freeform" - "දළ විශ්ලේෂණය" "මෑත අයිතම නැත" "වසන්න" "යෙදුම් භාවිත සැකසීම්" diff --git a/quickstep/res/values-sk/config.xml b/quickstep/res/values-sk/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-sk/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-sk/strings.xml b/quickstep/res/values-sk/strings.xml index 8a9c7365f2..c7003bd892 100644 --- a/quickstep/res/values-sk/strings.xml +++ b/quickstep/res/values-sk/strings.xml @@ -22,7 +22,6 @@ "Rozdeliť obrazovku" "Pripnúť" "Voľný režim" - "Prehľad" "Žiadne nedávne položky" "Zavrieť" "Nastavenia využívania aplikácie" diff --git a/quickstep/res/values-sl/config.xml b/quickstep/res/values-sl/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-sl/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-sl/strings.xml b/quickstep/res/values-sl/strings.xml index 15f8f89cc7..e2c67f23c5 100644 --- a/quickstep/res/values-sl/strings.xml +++ b/quickstep/res/values-sl/strings.xml @@ -22,7 +22,6 @@ "Razdeljen zaslon" "Pripni" "Prosta oblika" - "Pregled" "Ni nedavnih elementov" "Zapri" "Nastavitve uporabe aplikacij" diff --git a/quickstep/res/values-sq/config.xml b/quickstep/res/values-sq/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-sq/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-sq/strings.xml b/quickstep/res/values-sq/strings.xml index d8f5f28b42..90f8d8a9eb 100644 --- a/quickstep/res/values-sq/strings.xml +++ b/quickstep/res/values-sq/strings.xml @@ -22,7 +22,6 @@ "Ekrani i ndarë" "Gozhdo" "Formë e lirë" - "Përmbledhja" "Nuk ka asnjë artikull të fundit" "Mbyll" "Cilësimet e përdorimit të aplikacionit" diff --git a/quickstep/res/values-sr/config.xml b/quickstep/res/values-sr/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-sr/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-sr/strings.xml b/quickstep/res/values-sr/strings.xml index b721641446..38869d503c 100644 --- a/quickstep/res/values-sr/strings.xml +++ b/quickstep/res/values-sr/strings.xml @@ -22,7 +22,6 @@ "Подељени екран" "Закачи" "Слободни облик" - "Преглед" "Нема недавних ставки" "Затвори" "Подешавања коришћења апликације" diff --git a/quickstep/res/values-sv/config.xml b/quickstep/res/values-sv/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-sv/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-sv/strings.xml b/quickstep/res/values-sv/strings.xml index ba7ebcdec7..ec079ee54f 100644 --- a/quickstep/res/values-sv/strings.xml +++ b/quickstep/res/values-sv/strings.xml @@ -22,7 +22,6 @@ "Delad skärm" "Fäst" "Fritt format" - "Översikt" "Listan med de senaste åtgärderna är tom" "Stäng" "Inställningar för appanvändning" diff --git a/quickstep/res/values-sw/config.xml b/quickstep/res/values-sw/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-sw/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-sw/strings.xml b/quickstep/res/values-sw/strings.xml index 24db429093..2aea027f1f 100644 --- a/quickstep/res/values-sw/strings.xml +++ b/quickstep/res/values-sw/strings.xml @@ -22,7 +22,6 @@ "Gawa skrini" "Bandika" "Muundo huru" - "Muhtasari" "Hakuna vipengee vya hivi karibuni" "Funga" "Mipangilio ya matumizi ya programu" diff --git a/quickstep/res/values-te/config.xml b/quickstep/res/values-te/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-te/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-te/strings.xml b/quickstep/res/values-te/strings.xml index 24b37f75d4..eafe58c047 100644 --- a/quickstep/res/values-te/strings.xml +++ b/quickstep/res/values-te/strings.xml @@ -22,7 +22,6 @@ "స్క్రీన్‌ని విభజించు" "పిన్ చేయి" "సంప్రదాయేతర" - "అవలోకనం" "ఇటీవలి అంశాలు ఏవీ లేవు" "మూసివేయండి" "యాప్ వినియోగ సెట్టింగ్‌లు" diff --git a/quickstep/res/values-th/config.xml b/quickstep/res/values-th/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-th/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-th/strings.xml b/quickstep/res/values-th/strings.xml index 0f6821bf19..d9a98de23d 100644 --- a/quickstep/res/values-th/strings.xml +++ b/quickstep/res/values-th/strings.xml @@ -22,7 +22,6 @@ "แยกหน้าจอ" "ตรึง" "รูปแบบอิสระ" - "ภาพรวม" "ไม่มีรายการล่าสุด" "ปิด" "การตั้งค่าการใช้แอป" diff --git a/quickstep/res/values-tl/config.xml b/quickstep/res/values-tl/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-tl/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-tl/strings.xml b/quickstep/res/values-tl/strings.xml index 491bac5bd9..c09304c0ae 100644 --- a/quickstep/res/values-tl/strings.xml +++ b/quickstep/res/values-tl/strings.xml @@ -22,7 +22,6 @@ "Hatiin ang screen" "I-pin" "Freeform" - "Overview" "Walang kamakailang item" "Isara" "Mga setting ng paggamit ng app" diff --git a/quickstep/res/values-tr/config.xml b/quickstep/res/values-tr/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-tr/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-tr/strings.xml b/quickstep/res/values-tr/strings.xml index ec6d88405c..0b23c7ad01 100644 --- a/quickstep/res/values-tr/strings.xml +++ b/quickstep/res/values-tr/strings.xml @@ -22,7 +22,6 @@ "Bölünmüş ekran" "Sabitle" "Serbest çalışma" - "Genel bakış" "Yeni öğe yok" "Kapat" "Uygulama kullanım ayarları" diff --git a/quickstep/res/values-uk/config.xml b/quickstep/res/values-uk/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-uk/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-uk/strings.xml b/quickstep/res/values-uk/strings.xml index 77360625db..8585cec391 100644 --- a/quickstep/res/values-uk/strings.xml +++ b/quickstep/res/values-uk/strings.xml @@ -22,7 +22,6 @@ "Розділити екран" "Закріпити" "Довільна форма" - "Огляд" "Немає нещодавніх додатків" "Закрити" "Налаштування використання додатка" diff --git a/quickstep/res/values-ur/config.xml b/quickstep/res/values-ur/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-ur/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-ur/strings.xml b/quickstep/res/values-ur/strings.xml index 87b303f2af..4af12306c7 100644 --- a/quickstep/res/values-ur/strings.xml +++ b/quickstep/res/values-ur/strings.xml @@ -22,7 +22,6 @@ "اسپلٹ اسکرین وضع" "پن کریں" "فری فارم" - "مجموعی جائزہ" "کوئی حالیہ آئٹم نہیں" "بند کریں" "ایپ کے استعمال کی ترتیبات" diff --git a/quickstep/res/values-uz/config.xml b/quickstep/res/values-uz/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-uz/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-uz/strings.xml b/quickstep/res/values-uz/strings.xml index 67c8e91c00..dfc315e875 100644 --- a/quickstep/res/values-uz/strings.xml +++ b/quickstep/res/values-uz/strings.xml @@ -22,7 +22,6 @@ "Ekranni ikkiga ajratish" "Mahkamlash" "Erkin shakl" - "Nazar" "Yaqinda ishlatilgan ilovalar yo‘q" "Yopish" "Ilovadan foydalanish sozlamalari" diff --git a/quickstep/res/values-vi/config.xml b/quickstep/res/values-vi/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-vi/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-vi/strings.xml b/quickstep/res/values-vi/strings.xml index 34c89efcf1..a25b88db79 100644 --- a/quickstep/res/values-vi/strings.xml +++ b/quickstep/res/values-vi/strings.xml @@ -22,7 +22,6 @@ "Chia đôi màn hình" "Ghim" "Dạng tự do" - "Tổng quan" "Không có mục gần đây nào" "Đóng" "Cài đặt mức sử dụng ứng dụng" diff --git a/quickstep/res/values-zh-rCN/config.xml b/quickstep/res/values-zh-rCN/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-zh-rCN/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-zh-rCN/strings.xml b/quickstep/res/values-zh-rCN/strings.xml index 0e83977fa3..30dce2326d 100644 --- a/quickstep/res/values-zh-rCN/strings.xml +++ b/quickstep/res/values-zh-rCN/strings.xml @@ -22,7 +22,6 @@ "分屏" "固定" "自由窗口" - "概览" "近期没有任何内容" "关闭" "应用使用设置" diff --git a/quickstep/res/values-zh-rHK/config.xml b/quickstep/res/values-zh-rHK/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-zh-rHK/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-zh-rHK/strings.xml b/quickstep/res/values-zh-rHK/strings.xml index ac7e8e9002..de99075afe 100644 --- a/quickstep/res/values-zh-rHK/strings.xml +++ b/quickstep/res/values-zh-rHK/strings.xml @@ -22,7 +22,6 @@ "分割畫面" "固定" "自由形式" - "概覽" "最近沒有任何項目" "關閉" "應用程式使用情況設定" diff --git a/quickstep/res/values-zh-rTW/config.xml b/quickstep/res/values-zh-rTW/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-zh-rTW/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-zh-rTW/strings.xml b/quickstep/res/values-zh-rTW/strings.xml index 3323bfd57d..b07c5c9e31 100644 --- a/quickstep/res/values-zh-rTW/strings.xml +++ b/quickstep/res/values-zh-rTW/strings.xml @@ -22,7 +22,6 @@ "分割畫面" "固定" "自由形式" - "總覽" "最近沒有任何項目" "關閉" "應用程式使用情況設定" diff --git a/quickstep/res/values-zu/config.xml b/quickstep/res/values-zu/config.xml new file mode 100644 index 0000000000..a46105f27c --- /dev/null +++ b/quickstep/res/values-zu/config.xml @@ -0,0 +1,22 @@ + + + + + + "com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity" + + diff --git a/quickstep/res/values-zu/strings.xml b/quickstep/res/values-zu/strings.xml index 0f1d99d7b6..98b27505f5 100644 --- a/quickstep/res/values-zu/strings.xml +++ b/quickstep/res/values-zu/strings.xml @@ -22,7 +22,6 @@ "Hlukanisa isikrini" "Phina" "I-Freeform" - "Buka konke" "Azikho izinto zakamuva" "Vala" "Izilungiselelo zokusetshenziswa kohlelo lokusebenza" diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index ca59afa558..082e8f23be 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Werk" "Program is nie geïnstalleer nie." "Program is nie beskikbaar nie" @@ -63,7 +62,7 @@ "Kon nie legstuk laai nie" "Stel op" "Dit is \'n stelselprogram en kan nie gedeïnstalleer word nie." - "Naamlose vouer" + "Wysig naam" "Het %1$s gedeaktiveer" %1$s, het %2$d kennisgewings @@ -133,11 +132,13 @@ "Persoonlik" "Werk" "Werkprofiel" - "Kry werkprogramme hier" - "Elke werkprogram het \'n kenteken en word deur jou organisasie veilig gehou. Skuif programme na jou tuisskerm toe vir makliker toegang." - "Bestuur deur jou organisasie" - "Kennisgewings en programme is af" - "Maak toe" - "Toe" + "Persoonlike programme is privaat en kan nie deur IT gesien word nie" + "Werkprogramme het kentekens en kan deur IT gesien word" + "Volgende" + "Het dit" + "Werkprogramme: Aan" + "Werkprogramme: Onderbreek" + "Werkprogramme is onderbreek" + "Jy sal nie enige werkkennisgewings kry nie en jou IT-admin kan nie jou ligging sien nie" "Misluk: %1$s" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 0396df6179..e12d68d25a 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -62,7 +62,7 @@ "ፍርግም የመጫን ችግር" "ማዋቀሪያ" "ይህ የስርዓት መተግበሪያ ነው እና ማራገፍ አይቻልም።" - "ስም-አልባ አቃፊ" + "ስም ያርትዑ" "%1$s ተሰናክሏል" %1$s%2$d ማሳወቂያ አለው @@ -132,11 +132,13 @@ "የግል" "ሥራ" "የሥራ መገለጫ" - "የስራ መተግበሪያዎችን እዚህ ያግኙ" - "እያንዳንዱ የሥራ መተግበሪያ ባጅ አለው፣ እና በድርጅትዎ ደህንነቱ ተጠብቋል። ለቀለለ መዳረሻ መተግበሪያዎችን ወደ የእርስዎ መነሻ ማያ ገጽ ይውሰዷቸው።" - "በእርስዎ ድርጅት የሚተዳደር" - "ማሳወቂያዎች እና መተግበሪያዎች ጠፍተዋል" - "ዝጋ" - "ዝግ" + "የግል መተግበሪያዎች የግል ናቸው፣ እና በአይቲ ሊታዩ አይችሉም" + "የስራ መተግበሪያዎች ባጅ ያላቸው ሲሆን በአይቲ ሊታዩ የሚችሉ ናቸው" + "ቀጣይ" + "ገባኝ" + "የስራ መተግበሪያዎች፦ በርተዋል" + "የስራ መተግበሪያዎች፦ ባሉበት ቆመዋል" + "የስራ መተግበሪያዎች ባሉበት ቆመዋል" + "ምንም የስራ ማሳወቂያዎችን አያገኙም፣ እና የአይቲ አስተዳዳሪዎ አካባቢዎን ማየት አይችልም" "አልተሳካም፦ %1$s" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index a80ecb0b14..b974cb8500 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "العمل" "لم يتم تثبيت التطبيق." "التطبيق ليس متاحًا" @@ -63,7 +62,7 @@ "حدثت مشكلة أثناء تحميل الأداة" "الإعداد" "هذا تطبيق نظام وتتعذر إزالته." - "مجلد بدون اسم" + "تعديل الاسم" "تم إيقاف %1$s" يتضمن تطبيق %1$s %2$d إشعار.​ @@ -92,8 +91,8 @@ "نقاط الإشعارات" "مفعّل" "غير مفعّل" - "يلزم تفعيل الوصول إلى الإشعارات" - "لعرض نقاط الإشعارات، يجب تشغيل إشعارات التطبيق في %1$s" + "يلزم تمكين الوصول إلى الإشعارات" + "لعرض نقاط الإشعارات، يجب تفعيل إشعارات التطبيق في %1$s" "تغيير الإعدادات" "عرض نقاط الإشعارات" "إضافة رمز إلى الشاشة الرئيسية" @@ -137,11 +136,13 @@ "شخصية" "للعمل" "الملف الشخصي للعمل" - "البحث عن تطبيقات العمل هنا" - "يحتوي كل تطبيق للعمل على شارة ويظل تحت حماية مؤسستك. يمكنك نقل التطبيقات إلى شاشتك الرئيسية لتسهيل الوصول إليها." - "ملف شخصي للعمل تديره مؤسستك" - "الإشعارات والتطبيقات متوقفة." - "إغلاق" - "تمّ الإغلاق" + "التطبيقات الشخصية خاصة ولا يمكن لمشرف تكنولوجيا المعلومات الاطّلاع عليها." + "تحمل تطبيقات العمل شارة وتكون مرئية لمشرف تكنولوجيا المعلومات." + "التالي" + "حسنًا" + "تطبيقات العمل: قيد التشغيل" + "تطبيقات العمل: متوقفة مؤقتًا" + "تم إيقاف تطبيقات العمل مؤقتًا." + "لن تحصل على أي إشعارات عمل ولن يتمكّن مشرف تكنولوجيا المعلومات لديك من معرفة موقعك الجغرافي." "تعذَّر %1$s." diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml index 2984603818..c0f5fc1706 100644 --- a/res/values-as/strings.xml +++ b/res/values-as/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "কৰ্মস্থান" "এপটো ইনষ্টল কৰা নহ\'ল।" "এপটো নাই" @@ -63,7 +62,7 @@ "ৱিজেট ল\'ড কৰাত সমস্য়া" "ছেটআপ কৰক" "এইটো এটা ছিষ্টেম এপ আৰু ইয়াক আনইনষ্টল কৰিব নোৱৰি" - "নামবিহীন ফ\'ল্ডাৰ" + "নাম সম্পাদনা কৰক" "%1$s অক্ষম কৰা হ’ল" %1$s%2$dটা জাননী আছে @@ -133,11 +132,13 @@ "ব্যক্তিগত" "কৰ্মস্থান" "কৰ্মস্থানৰ প্ৰ\'ফাইল" - "ইয়াত কৰ্মস্থানৰ এপ্ বিচাৰি পাওক" - "কৰ্মস্থানৰ প্ৰতিটো এপৰে একোটা প্ৰতীক আছে আৰু তাক আপোনাৰ প্ৰতিষ্ঠানে সুৰক্ষিত কৰি ৰাখে। ব্যৱহাৰ কৰাত সুবিধা হ\'বলৈ এপসমূহ আপোনাৰ গৃহ স্ক্ৰীণলৈ স্থানান্তৰ কৰক।" - "আপোনাৰ প্ৰতিষ্ঠানৰ দ্বাৰা পৰিচালিত" - "জাননী আৰু এপসমূহ অফ হৈ আছে" - "বন্ধ কৰক" - "বন্ধ" + "ব্যক্তিগত এপ্‌সমূহ গোপনীয় আৰু সেইবোৰ আইটিয়ে দেখা নাপায়" + "কাম সম্পর্কীয় এপ্‌সমূহত বেজ লগোৱা থাকে আৰু সেইবোৰ আইটিৰ বাবে দৃশ্যমান হয়" + "পৰৱৰ্তী" + "বুজি পালোঁ" + "কাম সম্পর্কীয় এপ্‌সমূহ: অন হৈ আছে" + "কাম সম্পর্কীয় এপ্‌সমূহ: পজ হৈ আছে" + "কাম সম্পর্কীয় এপ্‌সমূহ পজ হৈ আছে" + "আপুনি কোনো কৰ্মস্থান সম্পৰ্কীয় জাননী লাভ নকৰে আৰু আপোনাৰ আইটি প্ৰশাসকে আপোনাৰ অৱস্থান দেখা নাপায়" "বিফল: %1$s" diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index 7c1ce8447d..080e9e4e6e 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -62,7 +62,7 @@ "Vidcet yükləmə problemi" "Quraşdırma" "Bu sistem tətbiqi olduğu üçün sistemdən silinə bilməz." - "Adsız Qovluq" + "Adı redaktə edin" "%1$s deaktiv edildi" %1$s tətbiqində %2$d bildiriş var @@ -132,11 +132,13 @@ "Şəxsi" "İş" "İş profili" - "Burada iş tətbiqləri axtarın" - "Hər bir iş tətbiqində təşkilat tərəfindən qorunduğunu göstərən narıncı nişan var. Tətbiqləri daha asan giriş üçün Əsas Səhifə Ekranına köçürün." - "Təşkilatınız tərəfindən idarə olunur" - "Bildiriş və tətbiqlər deaktivdir" - "Bağlayın" - "Bağlıdır" + "Fərdi tətbiqlər şəxsi hesab olunur və İT admininə göstərilmir" + "İş tətbiqləri nişanlanıb və İT admininə göstərilir" + "Növbəti" + "Anladım" + "İş tətbiqləri: Aktivdir" + "İş tətbiqləri: Pauza verilib" + "İş tətbiqlərinə pauza verilib" + "Hər hansı iş bildirişi almayacaqsınız, İT admininiz isə məkanınızı görə bilməyəcək" "Alınmadı: %1$s" diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index 883003c5c0..41db7e0515 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Work" "Aplikacija nije instalirana." "Aplikacija nije dostupna" @@ -63,7 +62,7 @@ "Problem pri učitavanju vidžeta" "Podešavanje" "Ovo je sistemska aplikacija i ne može da se deinstalira." - "Neimenovani direktorijum" + "Izmenite naziv" "Aplikacija %1$s je onemogućena" %1$s, ima %2$d obaveštenje @@ -134,11 +133,13 @@ "Lične" "Poslovne" "Profil za Work" - "Pronađite poslovne aplikacije ovde" - "Svaka poslovna aplikacija ima značku i štiti je vaša organizacija. Premestite aplikacije na početni ekran da biste im lakše pristupali." - "Ovim upravlja organizacija" - "Obaveštenja i aplikacije su isključeni" - "Zatvori" - "Zatvoreno" + "Lične aplikacije su privatne i IT administrator ne može da ih vidi" + "Aplikacije za posao imaju značku i IT administrator može da ih vidi" + "Dalje" + "Važi" + "Aplikacije za posao: Uključene" + "Aplikacije za posao: Pauzirane" + "Aplikacije za posao su pauzirane" + "Nećete dobijati nikakva obaveštenja za Work, a IT administrator ne može da vidi lokaciju" "Nije uspelo: %1$s" diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index b4cf913de4..58812298d9 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Працоўная" "Праграма не ўсталявана." "Праграма недаступная" @@ -63,7 +62,7 @@ "Праблема загрузкі віджэта" "Наладжванне" "Гэта сістэмная праграма, яе нельга выдаліць." - "Папка без назвы" + "Змяніць назву" "%1$s адключана" %1$s, мае %2$d апавяшчэнне @@ -135,11 +134,13 @@ "Асабістыя" "Праца" "Працоўны профіль" - "Знайдзіце працоўныя праграмы тут" - "Кожная працоўная праграма мае значок і знаходзіцца пад аховай вашай арганізацыі. Для больш простага доступу перамясціце праграмы на Галоўны экран." - "Пад кіраваннем вашай арганізацыі" - "Апавяшчэнні і праграмы выключаны" - "Закрыць" - "Закрытыя" + "Асабістыя праграмы з\'яўляюцца прыватнымі, ІТ-адміністратар іх не бачыць" + "Працоўныя праграмы пазначаны, і іх бачыць ІТ-адміністратар" + "Далей" + "Зразумела" + "Працоўныя праграмы: уключаны" + "Працоўныя праграмы: прыпынены" + "Працоўныя праграмы прыпынены" + "Вы не будзеце бачыць ніякіх працоўных апавяшчэнняў, і ваш IT-адміністратар не ўбачыць звесткі пра ваша месцазнаходжанне" "Не ўдалося: %1$s" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 408f205004..e599606e54 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Работа" "Приложението не е инсталирано." "Приложението не е налично" @@ -63,7 +62,7 @@ "Проблем при зареждане на приспособлението" "Настройване" "Това е системно приложение и не може да се деинсталира." - "Папка без име" + "Редактиране на името" "Деактивирахте %1$s" %1$s – има %2$d известия @@ -133,11 +132,13 @@ "Лични" "Служебни" "Служебен потребителски профил" - "Тук можете да намерите служебните приложения" - "Всяко служебно приложение има значка и организацията ви се грижи за сигурността му. За по-лесен достъп преместете приложенията на началния си екран." - "Управлява се от организацията ви" - "Известията и приложенията са изключени" - "Затваряне" - "Затворено" + "Личните приложения са частни и не могат да бъдат видяни от системния администратор" + "Служебните приложения са означени със значка и са видими от системния администратор" + "Напред" + "Разбрах" + "Служебни приложения: Вкл." + "Служебни приложения: На пауза" + "Служебните приложения са поставени на пауза" + "Няма да получавате служебни известия и системният ви администратор не може да вижда местоположението ви" "Неуспешно: %1$s" diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml index 09608b5426..f16a95f72f 100644 --- a/res/values-bn/strings.xml +++ b/res/values-bn/strings.xml @@ -62,7 +62,7 @@ "উইজেট লোড হতে সমস্যা হয়েছে" "সেটআপ" "এটি একটি সিস্টেম অ্যাপ্লিকেশান এবং আনইনস্টল করা যাবে না৷" - "নামবিহীন ফোল্ডার" + "নাম এডিট করুন" "%1$s অক্ষম করা হয়েছে" %1$s, %2$dটি বিজ্ঞপ্তি আছে @@ -92,7 +92,7 @@ "সেটিংস পরিবর্তন করুন" "বিজ্ঞপ্তির ডট দেখুন" "হোম স্ক্রিনে আইকন যোগ করুন" - "নতুন অ্যাপ্লিকেশানগুলির জন্যে" + "নতুন অ্যাপের জন্য" "অজানা" "সরান" "সার্চ" @@ -132,11 +132,13 @@ "ব্যক্তিগত" "অফিস" "অফিসের প্রোফাইল" - "এখানে কাজের অ্যাপ্সগুলি খুঁজুন" - "প্রতিটি কাজের অ্যাপে একটি করে ব্যাজ রয়েছে এবং অ্যাপগুলি আপনার প্রতিষ্ঠানের দ্বারা সুরক্ষিত। সহজে অ্যাক্সেস করার জন্য অ্যাপগুলি হোম স্ক্রিনে রাখুন।" - "আপনার প্রতিষ্ঠানের দ্বারা পরিচালিত" - "বিজ্ঞপ্তি এবং অ্যাপ বন্ধ আছে" - "বন্ধ করুন" - "বন্ধ" + "ব্যক্তিগত অ্যাপগুলি ব্যক্তিগত এবং আইটি ব্যক্তিরা দেখতে পাবেন না" + "অফিসের অ্যাপগুলি ব্যাজ করা হয়েছে এবং আইটি ব্যক্তিরা দেখতে পাবেন" + "পরের" + "বুঝেছি" + "অফিসের অ্যাপ: চালু আছে" + "অফিসের অ্যাপ: বন্ধ আছে" + "অফিসের অ্যাপ বন্ধ করা আছে" + "আপনি কোনও অফিস সংক্রান্ত বিজ্ঞপ্তি পাবেন না এবং আপনার আইটি অ্যাডমিন আপনার লোকেশন দেখতে পাবে না" "কাজটি করা যায়নি: %1$s" diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index 65ad91e9b0..1370531374 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -62,7 +62,7 @@ "Problem pri učitavanju dodatka" "Postavljanje" "Ovo je sistemska aplikacija i ne može se deinstalirati." - "Neimenovani folder" + "Uređivanje naziva" "Aplikacija %1$s je onemogućena" Aplikacija %1$s ima%2$d obavještenje​ @@ -133,11 +133,13 @@ "Lične" "Poslovne" "Radni profil" - "Pronađite poslovne aplikacije ovdje" - "Svaka poslovna aplikacija ima značku i osigurava je vaša organizacija. Premjestite aplikacije na Početni ekran, radi lakšeg pristupa." - "Upravlja vaša organizacija" - "Notifikacije i aplikacije su isključene" - "Zatvori" - "Zatvoreno" + "Lične aplikacije su privatne i IT administrator ih ne može vidjeti" + "Poslovne aplikacije su označene značkom i IT administrator ih može vidjeti" + "Sljedeće" + "Razumijem" + "Poslovne aplikacije: uključene" + "Poslovne aplikacije: pauzirane" + "Poslovne aplikacije su pauzirane" + "Nećete dobijati poslovna obavještenja, a vaš IT administrator ne može vidjeti vašu lokaciju" "Nije uspjelo: %1$s" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 4ef9ec3a2c..25e00f51f2 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -46,7 +46,7 @@ "No hi ha més espai a la safata Preferits." "Llista d\'aplicacions" "Llista d\'aplicacions personals" - "Llista d\'aplicacions per a la feina" + "Llista d\'aplicacions de treball" "Inici" "Suprimeix" "Desinstal·la" @@ -62,7 +62,7 @@ "S\'ha produït un problema en carregar el widget" "Configuració" "Aquesta aplicació és una aplicació del sistema i no es pot desinstal·lar." - "Carpeta sense nom" + "Edita el nom" "S\'ha desactivat %1$s" %1$s​ té %2$d notificacions @@ -131,12 +131,14 @@ "S\'ha ignorat la notificació" "Personal" "Feina" - "Perfil professional" - "Cerca aplicacions per a la feina aquí" - "Totes les aplicacions per a la feina tenen una insígnia que indica que estan protegides per la teva organització. Mou les aplicacions a la pantalla d\'inici per poder-hi accedir més fàcilment." - "Gestionat per la teva organització" - "Les notificacions i les aplicacions estan desactivades" - "Tanca" - "S\'ha tancat" + "Perfil de treball" + "Les aplicacions personals són privades i l\'equip de TI no les pot veure" + "Les aplicacions de treball tenen una insígnia i són visibles per l\'equip de TI" + "Següent" + "Entesos" + "Aplicacions de treball: activades" + "Aplicacions de treball: en pausa" + "Les aplicacions de treball s\'han posat en pausa" + "No rebràs cap notificació de la feina i l\'administrador de TI no podrà veure la ubicació" "Error: %1$s" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 692b57d46e..aefaf2d524 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Práce" "Aplikace není nainstalována." "Aplikace není k dispozici." @@ -63,7 +62,7 @@ "Problém s načtením widgetu" "Nastavení" "Toto je systémová aplikace a nelze ji odinstalovat." - "Složka bez názvu" + "Upravit název" "Aplikace %1$s je zakázána" Aplikace %1$s%2$d oznámení @@ -135,11 +134,13 @@ "Osobní" "Pracovní" "Pracovní profil" - "Zde naleznete pracovní aplikace" - "Každá pracovní aplikace má odznak a je zabezpečena vaší organizací. Aplikace si můžete pro jednoduchost přesunout na plochu." - "Spravováno vaší organizací" - "Oznámení a aplikace jsou vypnuty" - "Zavřít" - "Zavřeno" + "Osobní aplikace jsou soukromé a oddělení IT je nemůže zobrazit" + "Pracovní aplikace jsou označeny odznakem a může je zobrazit oddělení IT" + "Další" + "Rozumím" + "Pracovní aplikace: zapnuto" + "Pracovní aplikace: pozastaveno" + "Pracovní aplikace jsou pozastaveny" + "Nebudete dostávat žádná pracovní oznámení a správce IT nemůže zjistit vaši polohu" "Selhalo: %1$s" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index dc17516bce..6cc00e9322 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Arbejde" "Appen er ikke installeret." "Appen er ikke tilgængelig" @@ -63,7 +62,7 @@ "Der er problemer med indlæsning af widgetten" "Konfigurer" "Dette er en systemapp, som ikke kan afinstalleres." - "Unavngiven mappe" + "Rediger navn" "%1$s er deaktiveret" %1$s, har %2$d notifikation @@ -133,11 +132,13 @@ "Personlige" "Arbejde" "Arbejdsprofil" - "Find arbejdsapps her" - "Alle arbejdsapps har et badge og beskyttes af din organisation. Flyt apps til din startskærm, så du nemmere kan få adgang til dem." - "Administreret af din organisation" - "Notifikationer og apps er slået fra" - "Luk" - "Lukket" + "Personlige apps er private og ikke synlige for it-medarbejderne" + "Arbejdsapps er markeret og synlige for it-medarbejderne" + "Næste" + "OK" + "Arbejdsapps: Til" + "Arbejdsapps: Sat på pause" + "Dine arbejdsapps er sat på pause" + "Du får ikke arbejdsnotifikationer, og din it-administrator kan ikke se din placering" "Mislykket: %1$s" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index a345babd5c..49b0cbb48b 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Arbeit" "App ist nicht installiert." "App nicht verfügbar" @@ -63,7 +62,7 @@ "Problem beim Laden des Widgets" "Einrichten" "Dies ist eine Systemanwendung, die nicht deinstalliert werden kann." - "Unbenannter Ordner" + "Name bearbeiten" "%1$s deaktiviert" %1$s, hat %2$d Benachrichtigungen @@ -133,11 +132,13 @@ "Privat" "Geschäftlich" "Arbeitsprofil" - "Hier findest du Apps für die Arbeit" - "Jede App für die Arbeit ist mit einem Logo gekennzeichnet. Deine Organisation kümmert sich um den entsprechenden Schutz. Damit du leichter auf Apps zugreifen kannst, verschiebe sie auf deinen Startbildschirm." - "Wird von deiner Organisation verwaltet" - "Benachrichtigungen und Apps sind deaktiviert" - "Schließen" - "Geschlossen" + "Private Apps sind persönlich und für IT-Mitarbeiter nicht sichtbar" + "Geschäftliche Apps sind entsprechend gekennzeichnet und für IT-Mitarbeiter sichtbar" + "Weiter" + "OK" + "Geschäftliche Apps: aktiviert" + "Geschäftliche Apps: pausiert" + "Geschäftliche Apps sind pausiert" + "Du bekommst keine geschäftlichen Benachrichtigungen und dein IT-Admin kann deinen Standort nicht sehen" "Fehler: %1$s" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index d80e905d8c..c955b6f2c6 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -62,7 +62,7 @@ "Παρουσιάστηκε πρόβλημα στη φόρτωση του γραφικού στοιχείου" "Ρύθμιση" "Αυτή είναι μια εφαρμογή συστήματος και δεν είναι δυνατή η κατάργηση της εγκατάστασής της." - "Φάκελος χωρίς όνομα" + "Επεξεργασία ονόματος" "Η εφαρμογή %1$s είναι απενεργοποιημένη" Η εφαρμογή %1$s, έχει %2$d ειδοποιήσεις @@ -132,11 +132,13 @@ "Προσωπικές" "Εργασίας" "Προφίλ εργασίας" - "Βρείτε όλες τις εφαρμογές εργασίας εδώ" - "Κάθε εφαρμογή εργασίας φέρει ένα σήμα και διατηρείται ασφαλής από τον οργανισμό σας. Μετακινήστε τις εφαρμογές εργασίας στην Αρχική οθόνη, για να έχετε πιο εύκολη πρόσβαση." - "Διαχειριζόμενο από τον οργανισμό σας" - "Οι ειδοποιήσεις και οι εφαρμογές είναι απενεργοποιημένες" - "Κλείσιμο" - "Κλειστή" + "Οι προσωπικές εφαρμογές είναι ιδιωτικές και δεν είναι ορατές στον διαχειριστή IT" + "Οι εφαρμογές εργασίας φέρουν σήμα και είναι ορατές στον διαχειριστή IT" + "Επόμενο" + "Το κατάλαβα" + "Εφαρμογές εργασίας: Ενεργές" + "Εφαρμογές εργασίας: Σε παύση" + "Οι εφαρμογές εργασίας τέθηκαν σε παύση." + "Δεν θα λαμβάνετε ειδοποιήσεις εργασίας και ο διαχειριστής IT σας δεν θα μπορεί να δει την τοποθεσία σας." "Αποτυχία: %1$s" diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index 7adc2187ec..f806ec5996 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -62,7 +62,7 @@ "Problem loading widget" "Setup" "This is a system app and can\'t be uninstalled." - "Unnamed Folder" + "Edit Name" "Disabled %1$s" %1$s, has %2$d notifications @@ -132,11 +132,13 @@ "Personal" "Work" "Work profile" - "Find work apps here" - "Each work app has a badge and is kept secure by your organisation. Move apps to your Home screen for easier access." - "Managed by your organisation" - "Notifications and apps are off" - "Close" - "Closed" + "Personal apps are private and can\'t be seen by IT" + "Work apps are badged and visible to IT" + "Next" + "OK" + "Work apps: On" + "Work apps: Paused" + "Work apps are paused" + "You won\'t get any work notifications, and your IT admin can\'t see your location" "Failed: %1$s" diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml new file mode 100644 index 0000000000..f806ec5996 --- /dev/null +++ b/res/values-en-rCA/strings.xml @@ -0,0 +1,144 @@ + + + + + "Launcher3" + "Work" + "App isn\'t installed." + "App isn\'t available" + "Downloaded app disabled in Safe mode" + "Widgets disabled in Safe mode" + "Shortcut isn\'t available" + "Home screen" + "Customised actions" + "Touch & hold to pick up a widget." + "Double-tap & hold to pick up a widget or use customised actions." + "%1$d × %2$d" + "%1$d wide by %2$d high" + "Touch & hold to place manually" + "Add automatically" + "Search apps" + "Loading apps…" + "No apps found matching \'%1$s\'" + "Search for more apps" + "App" + "Notifications" + "Touch & hold to pick up a shortcut." + "Double-tap & hold to pick up a shortcut or use custom actions." + "No more room on this Home screen." + "No more room in the Favourites tray" + "Apps list" + "Personal apps list" + "Work apps list" + "Home" + "Remove" + "Uninstall" + "App info" + "Install" + "install shortcuts" + "Allows an app to add shortcuts without user intervention." + "read Home settings and shortcuts" + "Allows the app to read the settings and shortcuts in Home." + "write Home settings and shortcuts" + "Allows the app to change the settings and shortcuts in Home." + "%1$s is not allowed to make phone calls" + "Problem loading widget" + "Setup" + "This is a system app and can\'t be uninstalled." + "Edit Name" + "Disabled %1$s" + + %1$s, has %2$d notifications + %1$s, has %2$d notification + + "Page %1$d of %2$d" + "Home screen %1$d of %2$d" + "New home screen page" + "Folder opened, %1$d by %2$d" + "Tap to close folder" + "Tap to save rename" + "Folder closed" + "Folder renamed to %1$s" + "Folder: %1$s" + "Widgets" + "Wallpapers" + "Styles & wallpapers" + "Home settings" + "Disabled by your admin" + "Allow Home screen rotation" + "When phone is rotated" + "Notification dots" + "On" + "Off" + "Notification access needed" + "To show Notification Dots, turn on app notifications for %1$s" + "Change settings" + "Show notification dots" + "Add icon to Home screen" + "For new apps" + "Unknown" + "Remove" + "Search" + "This app is not installed" + "The app for this icon isn\'t installed. You can remove it, or search for the app and install it manually." + "%1$s downloading, %2$s complete" + "%1$s waiting to install" + "%1$s widgets" + "Widgets list" + "Widgets list closed" + "Add to Home screen" + "Move item here" + "Item added to home screen" + "Item removed" + "Undo" + "Move item" + "Move to row %1$s column %2$s" + "Move to position %1$s" + "Move to favourites position %1$s" + "Item moved" + "Add to folder: %1$s" + "Add to folder with %1$s" + "Item added to folder" + "Create folder with: %1$s" + "Folder created" + "Move to Home screen" + "Re-size" + "Increase width" + "Increase height" + "Decrease width" + "Decrease height" + "Widget re-sized to width %1$s height %2$s" + "Short cuts" + "Shortcuts and notifications" + "Dismiss" + "Notification dismissed" + "Personal" + "Work" + "Work profile" + "Personal apps are private and can\'t be seen by IT" + "Work apps are badged and visible to IT" + "Next" + "OK" + "Work apps: On" + "Work apps: Paused" + "Work apps are paused" + "You won\'t get any work notifications, and your IT admin can\'t see your location" + "Failed: %1$s" + diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 7adc2187ec..f806ec5996 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -62,7 +62,7 @@ "Problem loading widget" "Setup" "This is a system app and can\'t be uninstalled." - "Unnamed Folder" + "Edit Name" "Disabled %1$s" %1$s, has %2$d notifications @@ -132,11 +132,13 @@ "Personal" "Work" "Work profile" - "Find work apps here" - "Each work app has a badge and is kept secure by your organisation. Move apps to your Home screen for easier access." - "Managed by your organisation" - "Notifications and apps are off" - "Close" - "Closed" + "Personal apps are private and can\'t be seen by IT" + "Work apps are badged and visible to IT" + "Next" + "OK" + "Work apps: On" + "Work apps: Paused" + "Work apps are paused" + "You won\'t get any work notifications, and your IT admin can\'t see your location" "Failed: %1$s" diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 7adc2187ec..f806ec5996 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -62,7 +62,7 @@ "Problem loading widget" "Setup" "This is a system app and can\'t be uninstalled." - "Unnamed Folder" + "Edit Name" "Disabled %1$s" %1$s, has %2$d notifications @@ -132,11 +132,13 @@ "Personal" "Work" "Work profile" - "Find work apps here" - "Each work app has a badge and is kept secure by your organisation. Move apps to your Home screen for easier access." - "Managed by your organisation" - "Notifications and apps are off" - "Close" - "Closed" + "Personal apps are private and can\'t be seen by IT" + "Work apps are badged and visible to IT" + "Next" + "OK" + "Work apps: On" + "Work apps: Paused" + "Work apps are paused" + "You won\'t get any work notifications, and your IT admin can\'t see your location" "Failed: %1$s" diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml new file mode 100644 index 0000000000..bf909c39fd --- /dev/null +++ b/res/values-en-rXC/strings.xml @@ -0,0 +1,144 @@ + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎Launcher3‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎Work‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‏‎‎App isn\'t installed.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎App isn\'t available‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‏‎‏‏‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‏‏‏‎Downloaded app disabled in Safe mode‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎Widgets disabled in Safe mode‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‎Shortcut isn\'t available‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‎‎‎‎‏‎Home screen‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎Custom actions‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎Touch & hold to pick up a widget.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎Double-tap & hold to pick up a widget or use custom actions.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎%1$d × %2$d‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‎‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‏‏‏‏‎‎%1$d wide by %2$d high‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‎‏‏‎Touch & hold to place manually‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‎‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎Add automatically‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‎Search apps‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎Loading apps…‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‏‎‏‎‎‎‎‎‎‏‎‏‎‎No apps found matching \"‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎\"‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‎‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎Search for more apps‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‎‎‎‎‏‎‎App‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎Notifications‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎Touch & hold to pick up a shortcut.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‏‏‏‏‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎Double-tap & hold to pick up a shortcut or use custom actions.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎No more room on this Home screen.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‏‏‎‏‎No more room in the Favorites tray‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎Apps list‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‎‎‎‏‎‏‎‎‎Personal apps list‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎Work apps list‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‎Home‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‎Remove‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎Uninstall‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‏‎‏‎‎‎‏‎‏‏‎‏‏‎‏‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎App info‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎Install‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‎‎‎‏‎‏‎install shortcuts‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‎‎‎‏‏‎Allows an app to add shortcuts without user intervention.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎read Home settings and shortcuts‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎Allows the app to read the settings and shortcuts in Home.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‎‏‏‎write Home settings and shortcuts‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎‎‎‎‏‎Allows the app to change the settings and shortcuts in Home.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ is not allowed to make phone calls‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎Problem loading widget‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎Setup‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎This is a system app and can\'t be uninstalled.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎Edit Name‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎Disabled ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎, has ‎‏‎‎‏‏‎%2$d‎‏‎‎‏‏‏‎ notifications‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎, has ‎‏‎‎‏‏‎%2$d‎‏‎‎‏‏‏‎ notification‎‏‎‎‏‎ + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‎Page %1$d of %2$d‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎Home screen %1$d of %2$d‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‎‏‎‎‎‏‏‎‏‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎New home screen page‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎Folder opened, ‎‏‎‎‏‏‎%1$d‎‏‎‎‏‏‏‎ by ‎‏‎‎‏‏‎%2$d‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎Tap to close folder‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‎Tap to save rename‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‎‎Folder closed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‏‎‎‎‎‎‎‏‏‏‏‎‎‎‏‏‎‎‎‎Folder renamed to ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎Folder: ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎Widgets‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‎‏‎‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎Wallpapers‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎Styles & wallpapers‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‏‏‎‎‎‎Home settings‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎Disabled by your admin‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎Allow Home screen rotation‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎When phone is rotated‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‎Notification dots‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎On‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‏‏‎Off‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎Notification access needed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‏‎‎‎To show Notification Dots, turn on app notifications for ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎‎‎Change settings‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‏‏‎Show notification dots‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎‏‎‏‏‎Add icon to Home screen‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎For new apps‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‏‎‎Unknown‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‎‏‏‏‎‎‎Remove‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎Search‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎This app is not installed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‏‎The app for this icon isn\'t installed. You can remove it, or search for the app and install it manually.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ downloading, ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎ complete‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ waiting to install‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ widgets‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎Widgets list‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‎‎‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‏‎‎Widgets list closed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎Add to Home screen‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‏‎‎Move item here‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎Item added to home screen‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎Item removed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‎‎‏‎‎‏‎Undo‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎Move item‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‏‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‎Move to row ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ column ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎Move to position ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎Move to favorites position ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‏‏‏‏‎Item moved‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‎‏‏‎Add to folder: ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‎Add to folder with ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎Item added to folder‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‏‏‏‎‏‎‎‎‎Create folder with: ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‎Folder created‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎‏‏‎‏‎Move to Home screen‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‏‎‏‏‏‎‏‎‏‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‎‏‏‏‎‏‏‎Resize‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎Increase width‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎‎Increase height‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎‎Decrease width‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎Decrease height‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‎‎‎Widget resized to width ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ height ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‎‎Shortcuts‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‏‎‎‎‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‏‎Shortcuts and notifications‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎Dismiss‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‎‎Notification dismissed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‏‎‏‎‎Personal‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎Work‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‎‎Work profile‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎‎‎Personal apps are private & can\'t be seen by IT‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‎Work apps are badged & visible to IT‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‎‎‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎Next‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‏‎Got it‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‎Work apps: On‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‎‏‎‏‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎Work apps: Paused‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎Work apps are paused‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎You won\'t get any work notifications, and your IT admin can\'t see your location‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‎‎Failed: ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index d10c84b9ca..3ffbd4f2e4 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Trabajo" "No se instaló la aplicación." "La aplicación no está disponible." @@ -63,7 +62,7 @@ "Problema al cargar el widget" "Configuración" "Esta es una aplicación del sistema y no se puede desinstalar." - "Carpeta sin nombre" + "Editar nombre" "Se inhabilitó %1$s" %1$s tiene %2$d notificaciones @@ -133,11 +132,13 @@ "Personales" "Laborales" "Perfil de trabajo" - "Apps de trabajo" - "Cada app de trabajo tiene una insignia y está protegida por tu organización. Transfiere las apps a la pantalla principal para acceder a ellas con mayor facilidad." - "Administrado por tu organización" - "Las notificaciones y las apps están desactivadas" - "Cerrar" - "Cerrado" + "Las apps personales son privadas y el administrador de TI no las puede ver" + "Las apps de trabajo tienen una insignia y el administrador de TI las puede ver" + "Siguiente" + "Entendido" + "Apps de trabajo: activadas" + "Apps de trabajo: detenidas" + "Las apps de trabajo están detenidas" + "No recibirás notificaciones sobre el trabajo y el administrador de TI no puede ver tu ubicación" "Error: %1$s" diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 09b1239972..625d20c566 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Trabajo" "La aplicación no está instalada." "La aplicación no está disponible" @@ -63,7 +62,7 @@ "Problema al cargar el widget" "Configuración" "Esta aplicación es del sistema y no se puede desinstalar." - "Carpeta sin nombre" + "Editar nombre" "Se ha inhabilitado %1$s" %1$s tiene %2$d notificaciones @@ -133,11 +132,13 @@ "Personal" "Trabajo" "Perfil de trabajo" - "Aplicaciones de trabajo" - "Cada aplicación de trabajo tiene una insignia y está protegida por tu organización. Mueve las aplicaciones a la pantalla de inicio para acceder a ellas más fácilmente." - "Administrada por tu organización" - "Las notificaciones y las aplicaciones están desactivadas" - "Cerrar" - "Cerrada" + "Las aplicaciones personales son privadas y el administrador de TI no puede verlas" + "Las aplicaciones personales tienen una insignia y son visibles para el administrador de TI" + "Siguiente" + "Listo" + "Aplicaciones de trabajo: activadas" + "Aplicaciones de trabajo: en pausa" + "Se han pausado las aplicaciones de trabajo" + "No recibirás ninguna notificación de trabajo y tu administrador de TI no podrá ver tu ubicación" "Se ha producido un error: %1$s" diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index 1e470e15a7..7a966a4d2c 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Töö" "Rakendus pole installitud." "Rakendus ei ole saadaval" @@ -63,7 +62,7 @@ "Probleem vidina laadimisel" "Seadistamine" "See on süsteemirakendus ja seda ei saa desinstallida." - "Nimetu kaust" + "Muuda nime" "Rakendus %1$s on keelatud" %1$s, %2$d märguannet @@ -133,11 +132,13 @@ "Isiklik" "Töö" "Tööprofiil" - "Töörakendused leiate siit" - "Igal töörakendusel on märk ja teie organisatsioon tagab selle turvalisuse. Teisaldage rakendused avaekraanile, et neile oleks lihtsam juurde pääseda." - "Haldab teie organisatsioon" - "Märguanded ja rakendused on välja lülitatud" - "Sule" - "Suletud" + "Isiklikud rakendused on privaatsed ja IT-haldur ei näe neid" + "Töörakendustel on märk ja IT-haldur näeb neid" + "Järgmine" + "Selge" + "Töörakendused: sees" + "Töörakendused: peatatud" + "Töörakendused on peatatud" + "Te ei saa töökoha märguandeid ja IT-haldur ei näe teie asukohta" "Nurjus: %1$s" diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 10aebe7ad6..902566b947 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -62,7 +62,7 @@ "Arazo bat izan da widgeta kargatzean" "Konfigurazioa" "Sistema-aplikazioa da hau eta ezin da desinstalatu." - "Izenik gabeko karpeta" + "Editatu izena" "%1$s desgaituta dago" %1$s aplikazioak %2$d jakinarazpen ditu @@ -132,11 +132,13 @@ "Pertsonalak" "Lanekoak" "Laneko profila" - "Hemen dituzu laneko aplikazioak" - "Laneko aplikazio bakoitzak bereizgarri bat dauka eta erakundeak babesten du. Aplikazioak errazago atzitzeko, eraman itzazu hasierako pantailara." - "Erakundeak kudeatzen du" - "Jakinarazpenak eta aplikazioak desaktibatuta daude" - "Itxi" - "Itxita" + "Aplikazio pertsonalak pribatuak dira, eta IKT sailekoek ezin dituzte ikusi" + "Laneko aplikazioek bereizgarriak dituzte, eta IKT sailekoek ikusi egin ditzakete" + "Hurrengoa" + "Ados" + "Laneko aplikazioak: aktibatuta" + "Laneko aplikazioak: pausatuta" + "Pausatu egin dira laneko aplikazioak" + "Ez duzu jasoko laneko jakinarazpenik, eta IKT saileko administratzaileak ezingo du ikusi zure kokapena" "Huts egin du: %1$s" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 926cdb9b1c..dbef3f9207 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "کاری" "برنامه نصب نشده است." "برنامه در دسترس نیست" @@ -63,7 +62,7 @@ "مشکل در بارگیری ابزارک" "تنظیم" "این برنامه سیستمی است و حذف نصب نمی‌شود." - "پوشه بی‌نام" + "ویرایش نام" "%1$s غیرفعال شد" %1$s، %2$d اعلان دارد @@ -133,11 +132,13 @@ "شخصی" "محل کار" "نمایه کاری" - "اینجا برنامه‌های کاری را پیدا کنید" - "همه برنامه‌های کاری نشانی دارند و توسط سازمانتان ایمن نگه داشته می‌شوند. برنامه‌های کاری را برای دسترسی آسان‌تر به صفحه اصلی انتقال دهید." - "توسط سازمانتان مدیریت می‌شود" - "اعلان‌ها و برنامه‌ها خاموش هستند" - "بستن" - "بسته‌شده" + "برنامه‌های شخصی خصوصی هستند و تیم فناوری اطلاعات نمی‌تواند آن‌ها را ببیند" + "برنامه‌های کاری دارای نشان هستند و تیم فناوری اطلاعات می‌تواند آن‌ها ببیند" + "بعدی" + "متوجه‌ام" + "برنامه‌های کاری: روشن" + "برنامه‌های کاری: موقتاً متوقف" + "برنامه‌های کاری موقتاً متوقف می‌شوند" + "اعلان‌های کاری را دریافت نخواهید کرد، و سرپرست فناوری و اطلاعات نمی‌تواند مکانتان را ببیند" "ناموفق بود: %1$s" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index f87441ff3d..670870637c 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Työ" "Sovellusta ei ole asennettu." "Sovellus ei ole käytettävissä" @@ -63,7 +62,7 @@ "Ongelma ladattaessa widgetiä" "Asetus" "Tämä on järjestelmäsovellus, eikä sitä voi poistaa." - "Nimetön kansio" + "Muokkaa nimeä" "%1$s poistettiin käytöstä" %1$s: %2$d ilmoitusta @@ -133,11 +132,13 @@ "Henkilökohtaiset" "Työsovellukset" "Työprofiili" - "Etsi työsovelluksia tästä" - "Kaikki työsovellukset on merkitty, ja organisaatiosi vastaa niiden suojaamisesta. Voit siirtää työsovelluksia aloitusnäytölle käytön helpottamiseksi." - "Organisaatiosi hallinnoima" - "Ilmoitukset ja sovellukset ovat poissa käytöstä" - "Sulje" - "Suljettu" + "Henkilökohtaiset sovellukset ovat yksityisiä ja IT-osasto ei näe niitä" + "Työsovellukset ovat merkittyjä ja IT-osasto näkee ne" + "Seuraava" + "Selvä" + "Työsovellukset: Päällä" + "Työsovellukset: Keskeytetty" + "Työsovellukset on keskeytetty" + "Et saa työilmoituksia ja IT-järjestelmänvalvojasi ei näe sijaintiasi" "Epäonnistui: %1$s" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 5ac514d448..a4cbca1866 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -20,7 +20,6 @@ "Lanceur3" - "Travail" "L\'application n\'est pas installée." "Application indisponible" @@ -63,7 +62,7 @@ "Problème lors du chargement du widget" "Configuration" "Impossible de désinstaller cette application, car il s\'agit d\'une application système." - "Dossier sans nom" + "Modifier le nom" "L\'application %1$s est désactivée" %1$s a %2$d notification @@ -133,11 +132,13 @@ "Personnel" "Travail" "Profil professionnel" - "Trouvez ici des applications professionnelles" - "Chaque application professionnelle comporte un badge, ce qui signifie qu\'elle est sécurisée par votre organisation. Vous pouvez déplacer vos applications vers l\'écran d\'accueil afin d\'y accéder plus facilement." - "Géré par votre organisation" - "Les notifications et les applications sont désactivées" - "Fermer" - "Fermé" + "Les applications personnelles restent privées, et le service informatique ne peut pas les voir" + "Les applications professionnelles sont identifiées par un badge, et le service informatique peut les voir" + "Suivant" + "OK" + "Applications professionnelles : activées" + "Applications professionnelles : interrompues" + "Les applications professionnelles sont interrompues" + "Vous ne recevrez aucune notification professionnelle, et votre administrateur informatique ne pourra pas voir votre position" "Échec : %1$s" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 65db47e8a7..3c66dc7abd 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -62,7 +62,7 @@ "Problème lors du chargement du widget." "Configuration" "Impossible de désinstaller cette application, car il s\'agit d\'une application système." - "Dossier sans nom" + "Modifier le nom" "%1$s est désactivé." %1$s comporte %2$d notification @@ -132,11 +132,13 @@ "Personnelles" "Professionnelles" "Profil professionnel" - "Retrouvez ici vos applications professionnelles" - "Les applications professionnelles sont accompagnées d\'un badge et sont sécurisées par votre organisation. Vous pouvez les déplacer vers votre écran d\'accueil pour y accéder plus facilement." - "Géré par votre organisation" - "Notifications et applications désactivées" - "Fermer" - "Fermé" + "Vos applications personnelles sont privées, et votre service informatique n\'y a pas accès" + "Vos applications professionnelles portent un badge et sont visibles de votre service informatique" + "Suivant" + "OK" + "Applications professionnelles activées" + "Applications professionnelles en veille" + "Applications professionnelles en veille" + "Vous ne recevrez pas de notifications professionnelles, et votre administrateur informatique n\'aura pas accès à votre position" "Échec : %1$s" diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index ca5ba3c5e4..bf2d59f835 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -62,7 +62,7 @@ "Produciuse un problema ao cargar o widget" "Configuración" "Esta aplicación é do sistema e non se pode desinstalar." - "Cartafol sen nome" + "Edita o nome" "Desactivouse %1$s" A aplicación %1$s ten %2$d notificacións @@ -132,11 +132,13 @@ "Persoal" "Traballo" "Perfil de traballo" - "Buscar aplicacións do traballo aquí" - "As aplicacións do traballo teñen unha insignia e están protexidas pola túa organización. Traslada as aplicacións á pantalla de inicio para acceder a elas de forma máis fácil." - "Perfil xestionado pola túa organización" - "As notificacións e as aplicacións están desactivadas" - "Pechar" - "Pechada" + "As aplicación persoais son privadas e o persoal de TI non as pode ver" + "As aplicacións do traballo inclúen insignias e o persoal de TI pode velas" + "Seguinte" + "De acordo" + "Aplicacións do traballo: activadas" + "Aplicacións do traballo: en pausa" + "Puxéronse en pausa as aplicacións do traballo" + "Non recibirás notificacións do traballo e o administrador de TI non poderá ver a túa localización" "Erro: %1$s" diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml index 3228dea004..fe3d4a8704 100644 --- a/res/values-gu/strings.xml +++ b/res/values-gu/strings.xml @@ -62,7 +62,7 @@ "વિજેટ લોડ કરવામાં સમસ્યા" "સેટઅપ" "આ એક સિસ્ટમ ઍપ્લિકેશન છે અને અનઇન્સ્ટોલ કરી શકાતી નથી." - "અનામી ફોલ્ડર" + "નામમાં ફેરફાર કરો" "%1$s અક્ષમ કરી" %1$sના %2$d નોટિફિકેશન છે @@ -80,7 +80,7 @@ "વિજેટ્સ" "વૉલપેપર્સ" "શૈલીઓ અને વૉલપેપર" - "હોમ સેટિંગ્સ" + "હોમ સેટિંગ" "તમારા વ્યવસ્થાપક દ્વારા અક્ષમ કરેલ" "હોમ સ્ક્રીનને ફેરવવાની મંજૂરી આપો" "જ્યારે ફોન ફેરવવામાં આવે ત્યારે" @@ -132,11 +132,13 @@ "મનગમતી ઍપ" "કાર્યાલયની ઍપ" "કાર્યાલયની પ્રોફાઇલ" - "કાર્ય ઍપને અહીંથી મેળવો" - "દરેક કાર્ય ઍપ પાસે એક બૅજ હોય છે અને તમારી સંસ્થા દ્વારા તેને સુરક્ષિત રાખવામાં આવે છે. વધુ સરળ ઍક્સેસ માટે ઍપને તમારી હોમ સ્ક્રીન પર ખસેડો." - "તમારી સંસ્થા દ્વારા મેનેજ કરેલ" - "નોટિફિકેશન અને ઍપ બંધ છે" - "બંધ કરો" - "બંધ" + "વ્યક્તિગત ઍપ ખાનગી હોય છે અને તે IT ટીમ દ્વારા જોઈ શકાતી નથી" + "ઑફિસ માટેની ઍપ બૅજ કરવામાં આવી છે અને તે IT ટીમને દેખાય છે" + "આગળ" + "સમજાઈ ગયું" + "ઑફિસ માટેની ઍપ: ચાલુ" + "ઑફિસ માટેની ઍપ: થોભાવેલ" + "ઑફિસ માટેની ઍપ થોભાવવામાં આવેલ છે" + "તમને ઑફિસ સંબંધી કોઈ નોટિફિકેશન મળશે નહીં અને તમારા IT વ્યવસ્થાપક તમારું સ્થાન જોઈ શકશે નહીં" "નિષ્ફળ: %1$s" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 8fa02c0165..4aeec3064f 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -62,7 +62,7 @@ "विजेट लोड करने में समस्‍या" "सेटअप" "यह एक सिस्टम ऐप्लिकेशन है और इसे अनइंस्टॉल नहीं किया जा सकता." - "अनामित फ़ोल्डर" + "नाम में बदलाव करें" "%1$s अक्षम है" %1$s की %2$d सूचना है @@ -132,11 +132,13 @@ "निजी ऐप" "काम से जुड़े ऐप" "वर्क प्रोफ़ाइल" - "काम से जुड़े सभी ऐप्लिकेशन यहां पाएं" - "काम से जुड़े हर ऐप्लिकेशन पर एक बैज (निशान) होता है और इन ऐप्लिकेशन की सुरक्षा आपका संगठन करता है. आसानी से इस्तेमाल करने के लिए ऐप्लिकेशन को अपनी होम स्क्रीन पर ले जाएं." - "आपका संगठन प्रबंधित कर रहा है" - "सूचनाएं और ऐप्लिकेशन बंद हैं" - "बंद करें" - "बंद कर दिया गया" + "निजी ऐप्लिकेशन के इस्तेमाल का डेटा आईटी टीम नहीं देख सकती" + "ऑफ़िस के काम से जुड़े ऐप्लिकेशन बैज किए गए हैं और आईटी टीम को दिख रहे हैं" + "आगे बढ़ें" + "ठीक है" + "ऑफ़िस के काम से जुड़े ऐप्लिकेशन: चालू हैं" + "ऑफ़िस के काम से जुड़े ऐप्लिकेशन: रोके गए" + "ऑफ़िस के काम से जुड़े ऐप्लिकेशन रोके गए" + "आपको काम से जुड़ी सूचनाएं नहीं मिलेंगी. साथ ही, आपका आईटी एडमिन आपकी जगह की जानकारी नहीं देख पाएगा" "पूरा नहीं हुआ: %1$s" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index b738bc0739..0b193f7aa9 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -62,7 +62,7 @@ "Problem pri učitavanju widgeta" "Postavljanje" "Ovo je aplikacija sustava i ne može se ukloniti." - "Neimenovana mapa" + "Uređivanje naziva" "Aplikacija %1$s onemogućena" %1$s, ima %2$d obavijest @@ -133,11 +133,13 @@ "Osobno" "Posao" "Radni profil" - "Ovdje možete pronaći radne aplikacije" - "Svaka radna aplikacija ima značku i štiti je vaša organizacija. Premjestite aplikacije na početni zaslon radi lakšeg pristupa." - "Pod upravljanjem vaše organizacije" - "Obavijesti i aplikacije isključeni su" - "Zatvori" - "Zatvoreno" + "Osobne su aplikacije privatne i IT ih ne može vidjeti" + "Poslovne su aplikacije označene i IT ih može vidjeti" + "Dalje" + "Shvaćam" + "Poslovne aplikacije: uključene" + "Poslovne aplikacije: pauzirane" + "Pauzirane su poslovne lokacije" + "Nećete primati obavijesti s radnog profila i vaš IT administrator neće moći vidjeti vašu lokaciju" "Nije uspjelo: %1$s" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 3327590a45..58429354aa 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Munka" "Az alkalmazás nincs telepítve." "Az alkalmazás nem érhető el" @@ -63,7 +62,7 @@ "Probléma történt a modul betöltésekor" "Beállítás" "Ez egy rendszeralkalmazás, és nem lehet eltávolítani." - "Névtelen mappa" + "Név módosítása" "A(z) %1$s letiltva" A(z) %1$s %2$d értesítéssel rendelkezik @@ -133,11 +132,13 @@ "Személyes" "Munkahelyi" "Munkaprofil" - "Itt kereshet munkahelyi alkalmazásokat" - "A munkahelyi alkalmazásoknál jelvény található, és biztonságukról az Ön szervezete gondoskodik. A könnyebb hozzáférés érdekében helyezze át az alkalmazásokat a kezdőképernyőre." - "Az Ön szervezete kezeli" - "Az értesítések és az alkalmazások ki vannak kapcsolva" - "Bezárás" - "Bezárva" + "A személyes alkalmazások privát jellegűek, az informatikai részleg nem láthatja őket" + "A munkahelyi alkalmazások jelvénnyel vannak ellátva, az informatikai részleg láthatja őket" + "Tovább" + "Értem" + "Munkahelyi alkalmazások: Bekapcsolva" + "Munkahelyi alkalmazások: Szüneteltetve" + "A munkahelyi alkalmazások szüneteltetve vannak" + "Nem kap majd munkahelyi értesítéseket, és a rendszergazdája nem láthatja a tartózkodási helyét" "Sikertelen: %1$s" diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index 93404e6f5f..ef62ea39d9 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -50,7 +50,7 @@ "Հիմնական" "Ապատեղադրել" "Հեռացնել" - "Հավելվածի տվյալներ" + "Հավելվածի մասին" "Տեղադրել" "տեղադրել դյուրանցումներ" "Ծրագրին թույլ է տալիս ավելացնել դյուրանցումներ՝ առանց օգտագործողի միջամտության:" @@ -62,7 +62,7 @@ "Վիջեթի բեռնման խնդիր կա" "Կարգավորում" "Սա համակարգային ծրագիր է և չի կարող ապատեղադրվել:" - "Անանուն պանակ" + "Փոխել անունը" "%1$s հավելվածն անջատված է" %1$s, ունի %2$d ծանուցում @@ -132,11 +132,13 @@ "Անձնական" "Աշխատանքային" "Աշխատանքային պրոֆիլ" - "Գտեք աշխատանքային հավելվածներ այստեղ" - "Աշխատանքային հավելվածները նշված են հատուկ նշանով: Նման հավելվածների անվտանգությունը ապահովում է ձեր կազմակերպությունը։ Հարմարության համար աշխատանքային հավելվածները կարող եք տեղափոխել հիմնական էկրան։" - "Կառավարվում է ձեր կազմակերպության կողմից" - "Ծանուցումներն ու հավելվածներն անջատված են" - "Փակել" - "Փակվեց" + "Անձնական հավելվածները տեսանելի չեն ՏՏ ադմինիստրատորին" + "Աշխատանքային հավելվածները նշանակներ ունեն և տեսանելի են ՏՏ ադմինիստրատորին" + "Առաջ" + "Եղավ" + "Աշխատանքային հավելվածներ՝ միացված են" + "Աշխատանքային հավելվածներ՝ դադարեցված են" + "Աշխատանքային հավելվածները դադարեցված են" + "Դուք աշխատանքային ծանուցումներ չեք ստանա, իսկ ձեր ՏՏ ադմինիստրատորը չի տեսնի ձեր գտնվելու վայրը։" "Չհաջողվեց կատարել գործողությունը (%1$s)" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 92c7accaa8..9cc50f3e9b 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -62,7 +62,7 @@ "Masalah memuat widget" "Siapkan" "Ini adalah aplikasi sistem dan tidak dapat dicopot pemasangannya." - "Folder Tanpa Nama" + "Sunting Nama" "%1$s dinonaktifkan" %1$s, memiliki %2$d notifikasi @@ -132,11 +132,13 @@ "Pribadi" "Kantor" "Profil kerja" - "Temukan aplikasi kerja di sini" - "Setiap aplikasi kerja memiliki badge dan dibuat tetap aman oleh organisasi. Pindahkan aplikasi ke Layar utama untuk memudahkan akses." - "Dikelola oleh organisasi" - "Notifikasi dan aplikasi nonaktif" - "Tutup" - "Ditutup" + "Aplikasi pribadi bersifat pribadi & tidak dapat dilihat oleh IT" + "Aplikasi kerja memiliki badge & terlihat oleh IT" + "Berikutnya" + "Oke" + "Aplikasi kerja: Aktif" + "Aplikasi kerja: Dijeda" + "Aplikasi kerja dijeda" + "Anda tidak akan mendapatkan notifikasi profil kerja, dan admin IT tidak dapat melihat lokasi Anda" "Gagal: %1$s" diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index d66ca3243a..a8e58ff3c2 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Vinna" "Forritið er ekki uppsett." "Forritið er ekki í boði" @@ -63,7 +62,7 @@ "Vandamál við að hlaða græju" "Uppsetning" "Þetta er kerfisforrit sem ekki er hægt að fjarlægja." - "Ónefnd mappa" + "Breyta nafni" "Óvirkt %1$s" %1$s, er með %2$d tilkynningu @@ -133,11 +132,13 @@ "Persónulegt" "Vinna" "Vinnusnið" - "Hér finnurðu vinnuforrit" - "Öll vinnuforrit eru með merki og fyrirtækið þitt tryggir öryggi þeirra. Færðu forrit yfir á heimaskjáinn til að fá auðveldari aðgang að þeim." - "Stjórnað af fyrirtækinu þínu" - "Slökkt er á tilkynningum og forritum" - "Loka" - "Lokað" + "Forrit einstaklinga eru einkamál og ekki sýnileg kerfisstjórn" + "Vinnuforrit eru merkt og sýnileg kerfisstjórn" + "Áfram" + "Ég skil" + "Vinnuforrit: Kveikt" + "Vinnuforrit: Hlé" + "Hlé gert á vinnuforritum" + "Þú færð engar vinnutilkynningar og kerfisstjórinn getur ekki séð staðsetninguna" "Mistókst: %1$s" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 8c4e3c5281..7efffd43bb 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Lavoro" "App non installata." "App non disponibile" @@ -63,7 +62,7 @@ "Errore durante il caricamento del widget" "Configurazione" "Questa è un\'app di sistema e non può essere disinstallata." - "Cartella senza nome" + "Modifica nome" "App %1$s disattivata" %1$s, ha %2$d notifiche @@ -87,7 +86,7 @@ "Con il telefono ruotato" "Indicatori di notifica" "On" - "Off" + "OFF" "Accesso alle notifiche necessario" "Per mostrare gli indicatori di notifica, attiva le notifiche per l\'app %1$s" "Modifica impostazioni" @@ -133,11 +132,13 @@ "Personali" "Lavoro" "Profilo di lavoro" - "Qui puoi trovare le tue app di lavoro" - "Ogni app di lavoro è contrassegnata da un badge e viene tenuta al sicuro dalla tua organizzazione. Sposta le app nella schermata Home per accedervi più facilmente." - "Gestito dalla tua organizzazione" - "Le notifiche e le app non sono attive" - "Chiudi" - "Chiusa" + "Le app personali sono private e non possono essere visualizzate dall\'amministratore IT" + "Le app di lavoro sono contrassegnate e visibili all\'amministratore IT" + "Avanti" + "OK" + "App di lavoro: attive" + "App di lavoro: in pausa" + "Le app di lavoro sono in pausa" + "Non riceverai notifiche di lavoro e il tuo amministratore IT non potrà visualizzare la tua posizione" "Operazione non riuscita: %1$s" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index c25e8795f7..d371e4a486 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "עבודה" "האפליקציה לא מותקנת." "האפליקציה אינה זמינה" @@ -63,7 +62,7 @@ "בעיה בטעינת ווידג\'ט" "הגדרה" "זוהי אפליקציית מערכת ולא ניתן להסיר את התקנתה." - "תיקיה ללא שם" + "עריכת השם" "%1$s מושבתת" לאפליקציה %1$s יש %2$d התראות @@ -135,11 +134,13 @@ "אישיות" "עבודה" "פרופיל עבודה" - "ניתן למצוא כאן את אפליקציות העבודה" - "לכל אפליקציית עבודה יש תג ואבטחתה מטופלת בידי הארגון. אפשר להעביר אפליקציות אל מסך דף הבית כדי להקל את הגישה אליהן." - "מנוהל בידי הארגון" - "התראות ואפליקציות כבויות" - "סגירה" - "סגור" + "‏אפליקציות אישיות הן פרטיות ואינן מוצגות ל-IT" + "‏אפליקציות לעבודה מתויגות ומוצגות ל-IT" + "הבא" + "הבנתי" + "אפליקציות לעבודה: פועלות" + "אפליקציות לעבודה: מושהות" + "האפליקציות לעבודה מושהות" + "‏לא ישלחו אליך התראות לגבי עבודה ומנהל ה-IT לא יוכל לראות את המיקום שלך." "הפעולה נכשלה: %1$s" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 354f02032e..f46aad81de 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "仕事用" "このアプリはインストールされていません。" "このアプリは使用できません" @@ -63,7 +62,7 @@ "ウィジェットを表示できません" "セットアップ" "このシステムアプリはアンインストールできません。" - "名前のないフォルダ" + "名前の編集" "「%1$s」は無効です" %1$s の通知が %2$d 件あります @@ -133,11 +132,13 @@ "個人用" "仕事用" "仕事用プロファイル" - "ここには仕事用アプリが表示されます" - "仕事用アプリにはバッジが表示され、組織によって安全に保護されています。仕事用アプリをホーム画面に移動すると、簡単にアクセスできます。" - "組織によって管理されています" - "通知とアプリは OFF です" - "閉じる" - "終了" + "個人用アプリは非公開であり、IT は確認できません" + "仕事用アプリにはバッジが付き、IT に公開されます" + "次へ" + "OK" + "仕事用アプリ: ON" + "仕事用アプリ: 一時停止" + "仕事用アプリの一時停止" + "仕事用プロファイルの通知は届かず、IT 管理者は位置情報を確認できません" "失敗: %1$s" diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml index e9afef9077..ef538d3119 100644 --- a/res/values-ka/strings.xml +++ b/res/values-ka/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "სამუშაო" "აპი არ არის დაყენებული." "აპი მიუწვდომელია" @@ -63,7 +62,7 @@ "პრობლემა ვიჯეტის ჩატვირთვისას" "დაყენება" "ეს სისტემური აპია და მისი წაშლა შეუძლებელია." - "უსახელო საქაღალდე" + "სახელის რედაქტირება" "%1$s გაითიშა" %1$s-ში არის %2$d შეტყობინება @@ -133,11 +132,13 @@ "პირადი" "სამსახური" "სამსახურის პროფილი" - "აქ თავმოყრილია სამსახურის აპები" - "სამსახურის თითოეულ აპს აქვს ბეჯი, რაც ნიშნავს, რომ მათ უსაფრთხოებას თქვენი ორგანიზაცია უზრუნველყოფს. მარტივი წვდომისთვის, შეგიძლიათ სამსახურის აპები მთავარი ეკრანზე გადაიტანოთ." - "იმართება თქვენი ორგანიზაციის მიერ" - "შეტყობინებები და აპები გამორთულია" - "დახურვა" - "დახურული" + "პირადი აპები კონფიდენციალურია და IT ვერ ხედავს" + "სამსახურის აპები ბეჯით არის მონიშნული და ხილულია IT-ისთვის" + "შემდეგ" + "გასაგებია" + "სამსახურის აპები: ჩართულია" + "სამსახურის აპები: დაპაუზებულია" + "სამსახურის აპები დაპაუზებულია" + "სამსახურის შეტყობინებებს არ მიიღებთ და თქვენი IT ადმინისტრატორი თქვენს მდებარეობას ვერ ხედავს" "ვერ მოხერხდა: %1$s" diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml index 1cd9045b76..e62b03c940 100644 --- a/res/values-kk/strings.xml +++ b/res/values-kk/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Жұмыс" "Қолданба орнатылмаған." "Қолданба қол жетімді емес" @@ -63,7 +62,7 @@ "Виджетті жүктеу барысында мәселе орын алды" "Орнату" "Бұл жүйе қолданбасы, сондықтан оны алу мүмкін емес." - "Атауы жоқ қалта" + "Атын өңдеу" "%1$s өшірілді" %1$s қолданбасында %2$d хабарландыру бар @@ -133,11 +132,13 @@ "Жеке" "Жұмыс" "Жұмыс профилі" - "Жұмыс қолданбалары осы жерде берілген" - "Әрбір жұмыс қолданбасында танымбелгі бар. Ол оның қауіпсіздігі ұйым арқылы қамтамасыз етілетінін білдіреді. Жұмыс қолданбаларына оңай кіру үшін, оларды Негізгі экранға жылжытуға болады." - "Ұйым арқылы басқарылады" - "Хабарландырулар мен қолданбалар өшірулі" - "Жабу" - "Жабық" + "Жеке қолданбалар құпия сақталады және оларды әкімші көрмейді." + "Жеке қолданбаларға танымбелгілер қойылады және әкімшіге көрсетіледі." + "Келесі" + "Түсінікті" + "Жұмыс қолданбалары: қосулы" + "Жұмыс қолданбалары: кідіртілді" + "Жұмыс қолданбалары кідіртілді" + "Ешқандай жұмыс қолданбасының хабарландыруын алмайсыз және әкімшіңіз геодерегіңізді көре алмайды." "Қате шықты: %1$s" diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index 973804200a..84c7ab2571 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -62,7 +62,7 @@ "បញ្ហា​ក្នុង​ការ​ផ្ទុក​ធាតុ​​ក្រាហ្វិក" "រៀបចំ" "នេះ​​​ជា​កម្មវិធី​ប្រព័ន្ធ មិន​អាច​លុប​បាន​ទេ។" - "ថត​គ្មាន​ឈ្មោះ" + "កែ​ឈ្មោះ" "បានបិទដំណើរការ %1$s" %1$s, មាន​ការជូនដំណឹង %2$d @@ -132,11 +132,13 @@ "ផ្ទាល់ខ្លួន" "ការងារ" "កម្រងព័ត៌មានការងារ" - "ស្វែង​រក​កម្មវិធី​ការងារ​នៅទីនេះ" - "កម្មវិធី​ការងារ​នីមួយៗ​មាន​ស្លាកមួយ និងត្រូវ​បានរក្សាទុក​យ៉ាងមានសុវត្ថិភាព​ដោយស្ថាប័ន​របស់អ្នក។ សូម​ផ្លាស់ទី​កម្មវិធី​ទៅកាន់​អេក្រង់​ដើម​របស់អ្នក​ ដើម្បី​ងាយស្រួល​ចូលប្រើជាងមុន។" - "គ្រប់គ្រងដោយ​ស្ថាប័ន​របស់អ្នក" - "ការជូនដំណឹង​ និងកម្មវិធី​ត្រូវបានបិទ" - "បិទ" - "បានបិទ" + "កម្មវិធីផ្ទាល់ខ្លួន​មានលក្ខណៈ​ឯកជន ហើយអ្នកគ្រប់គ្រង​ផ្នែកព័ត៌មានវិទ្យា​មិនអាចមើលឃើញ​កម្មវិធីទាំងនេះទេ" + "កម្មវិធីការងារ​ត្រូវបានដាក់​គ្រឿងសម្គាល់ និង​អាចមើលឃើញដោយ​អ្នកគ្រប់គ្រង​ផ្នែកព័ត៌មានវិទ្យា" + "បន្ទាប់" + "យល់ហើយ" + "កម្មវិធីការងារ៖ បើក" + "កម្មវិធី​ការងារ៖ បានផ្អាក" + "កម្មវិធី​ការងារ​ត្រូវបានផ្អាក" + "អ្នកនឹងមិន​ទទួលបាន​ការជូនដំណឹង​អំពីការងារទេ ហើយអ្នកគ្រប់គ្រង​ផ្នែកព័ត៌មានវិទ្យា​របស់អ្នក​ក៏មិន​អាចមើលឃើញ​ទីតាំង​របស់អ្នក​បានដែរ" "បានបរាជ័យ៖ %1$s" diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index 67ea6a830a..796afbf25a 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -62,7 +62,7 @@ "ವಿಜೆಟ್ ಲೋಡ್‌ ಮಾಡುವಲ್ಲಿ ಸಮಸ್ಯೆ" "ಸೆಟಪ್" "ಇದೊಂದು ಅಪ್ಲಿಕೇಶನ್ ಆಗಿದೆ ಮತ್ತು ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ." - "ಹೆಸರಿಲ್ಲದ ಫೋಲ್ಡರ್" + "ಹೆಸರನ್ನು ಎಡಿಟ್ ಮಾಡಿ" "%1$s ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ" %1$s, %2$d ಅಧಿಸೂಚನೆಗಳನ್ನು ಹೊಂದಿದೆ @@ -132,11 +132,13 @@ "ವೈಯಕ್ತಿಕ" "ಕೆಲಸ" "ಕೆಲಸದ ಪ್ರೊಫೈಲ್" - "ಕೆಲಸದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಇಲ್ಲಿ ಹುಡುಕಿ" - "ಕೆಲಸದ ಪ್ರತಿ ಅಪ್ಲಿಕೇಶನ್ ಬ್ಯಾಡ್ಜ್ ಹೊಂದಿದೆ ಮತ್ತು ನಿಮ್ಮ ಸಂಸ್ಥೆಯಿಂದ ಸುರಕ್ಷಿತವಾಗಿ ಇರಿಸಲಾಗುತ್ತದೆ. ಸುಲಭ ಪ್ರವೇಶಕ್ಕಾಗಿ ನಿಮ್ಮ ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ಗೆ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಸರಿಸಿ." - "ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗಿದೆ" - "ಅಧಿಸೂಚನೆಗಳು ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಆಫ್ ಆಗಿವೆ" - "ಮುಚ್ಚಿ" - "ಮುಚ್ಚಲಾಗಿದೆ" + "ವೈಯಕ್ತಿಕ ಆ್ಯಪ್‌ಗಳು ಖಾಸಗಿಯಾಗಿರುತ್ತದೆ ಮತ್ತು IT ವಿಭಾಗದವರಿಗೆ ಕಾಣಿಸುವುದಿಲ್ಲ" + "ಉದ್ಯೋಗದ ಆ್ಯಪ್‌ಗಳನ್ನು ಬ್ಯಾಡ್ಜ್ ಮಾಡಲಾಗಿದೆ ಮತ್ತು IT ವಿಭಾಗದವರಿಗೆ ಕಾಣಿಸುತ್ತದೆ" + "ಮುಂದೆ" + "ಸರಿ" + "ಉದ್ಯೋಗದ ಆ್ಯಪ್‌ಗಳು: ಆನ್ ಆಗಿದೆ" + "ಉದ್ಯೋಗದ ಆ್ಯಪ್‌ಗಳು: ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ" + "ಉದ್ಯೋಗದ ಆ್ಯಪ್‌ಗಳನ್ನು ವಿರಾಮಗೊಲಿಸಲಾಗಿದೆ" + "ನೀವು ಯಾವುದೇ ಉದ್ಯೋಗದ ಅಧಿಸೂಚನೆಗಳನ್ನು ಪಡೆಯುವುದಿಲ್ಲ ಮತ್ತು IT ನಿರ್ವಾಹಕರು ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ನೋಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ" "ವಿಫಲವಾಗಿದೆ: %1$s" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 58b65da032..5d33ffa75d 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "업무" "앱이 설치되지 않았습니다." "앱을 사용할 수 없음" @@ -63,7 +62,7 @@ "위젯을 로드하는 중 문제가 발생했습니다." "설정" "시스템 앱은 제거할 수 없습니다." - "이름이 없는 폴더" + "이름 수정" "%1$s 사용 안함" %1$s%2$d개의 알림이 있음 @@ -133,11 +132,13 @@ "개인" "직장" "직장 프로필" - "여기에서 업무용 앱 찾기" - "각 업무용 앱에는 배지가 있으며 업무용 앱은 조직에서 안전하게 보호됩니다. 앱을 홈 화면으로 이동하여 더 간편하게 사용하세요." - "조직에서 관리" - "알림 및 앱 사용 중지됨" - "닫기" - "종료됨" + "개인 앱은 비공개이며 IT 관리자가 볼 수 없습니다" + "직장 앱에는 배지가 표시되며 IT 관리자가 볼 수 있습니다" + "다음" + "확인" + "직장 앱: 사용" + "직장 앱: 일시중지됨" + "직장 앱이 일시중지됨" + "직장 알림을 받지 못하게 되며, IT 관리자가 내 위치를 확인할 수 없습니다." "실패: %1$s" diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml index d52446c83c..84b8f1f4ca 100644 --- a/res/values-ky/strings.xml +++ b/res/values-ky/strings.xml @@ -62,7 +62,7 @@ "Виджетти жүктөөдө маселе бар" "Орнотуу" "Бул системдик колдонмо жана аны чечкенге болбойт." - "Аты жок фолдер" + "Аталышын түзөтүү" "%1$s өчүрүлгөн" %1$s, %2$d билдирмеси бар @@ -88,7 +88,7 @@ "Күйүк" "Өчүк" "Эскертмелерге уруксат берилиши керек" - "Эскертме белгилерин көрсөтүү максатында, %1$s үчүн колдонмонун эскертмелерин күйгүзүү керек" + "Эскертме белгилерин көрсөтүү максатында, %1$s үчүн колдонмонун билдирмелерин күйгүзүү керек" "Жөндөөлөрдү өзгөртүү" "Билдирмелер белгилерин көрсөтүү" "Башкы экранга сүрөтчө кошуу" @@ -111,7 +111,7 @@ "Муну жылдыруу" "%1$s катарга %2$s тилкеге жылдыруу" "%1$s орунга жылдыруу" - "Сүйүктүүлөргө %1$s жылдыруу" + "Тандалмаларга %1$s жылдыруу" "Нерсе жылдырылды" "Куржунга кошуу: %1$s" "%1$s куржунуна кошуу" @@ -132,11 +132,13 @@ "Жеке колдонмолор" "Жумуш колдонмолору" "Жумуш профили" - "Жумуш колдонмолорун бул жерден таап алыңыз" - "Ар бир жумуш колдонмосунун бейджиги бар жана ал уюмуңуз тарабынан коопсуз сакталат. Колдонмолорго тез өтүү үчүн аларды Башкы экранга кошуп алыңыз." - "Уюмуңуз тарабынан башкарылат" - "Билдирүүлөр жана колдонмолор өчүрүлгөн" - "Жабуу" - "Жабык" + "Жеке колдонмолор купуя пайдаланылып, аларды IT админ көрбөйт" + "Жумуш колдонмолору белгиленип, аларды IT админ көрөт" + "Кийинки" + "Түшүндүм" + "Жумуш колдонмолору: Күйүк" + "Жумуш колдонмолору: Тындырылды" + "Жумуш колдонмолору тындырылды" + "Жумуш билдирмелерин албайсыз, ал эми IT админ кайда жүргөнүңүздү көрбөйт" "Аткарылган жок: %1$s" diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index afe7664d51..ce76c1775d 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "ວຽກ" "ແອັບຯບໍ່ໄດ້ຖືກຕິດຕັ້ງ." "ແອັບຯ​ໃຊ້​ບໍ່​ໄດ້" @@ -63,7 +62,7 @@ "ມີບັນຫາໃນການໂຫລດວິດເຈັດ" "ຕິດຕັ້ງ" "ນີ້ແມ່ນແອັບຯຂອງລະບົບ ແລະບໍ່ສາມາດຖອນການຕິດຕັ້ງອອກໄດ້." - "ໂຟນເດີຍັງບໍ່ຖືກຕັ້ງຊື່" + "ແກ້ໄຂຊື່" "ປິດການນຳໃຊ້ %1$s ແລ້ວ" %1$s, ມີ %2$d ການແຈ້ງເຕືອນ @@ -133,11 +132,13 @@ "ສ່ວນຕົວ" "ວຽກ" "ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ" - "ຊອກຫາແອັບວຽກຢູ່ບ່ອນນີ້" - "ແຕ່ລະແອັບວຽກຈະມີປ້າຍ ແລະ ຖືກຈັດເກັບໄວ້ຢ່າງປອດໄພໂດຍອົງກອນຂອງທ່ານ. ທ່ານສາມາດຍ້າຍແອັບໄປໃສ່ໜ້າຈໍຫຼັກເພື່ອໃຫ້ເຂົ້າໃຊ້ງ່າຍຂຶ້ນໄດ້." - "ຈັດການໂດຍອົງກອນຂອງທ່ານ" - "ການແຈ້ງເຕືອນ ແລະ ແອັບຖືກປິດໄວ້" - "ປິດ" - "ປິດແລ້ວ" + "ແອັບສ່ວນຕົວແມ່ນເປັນສ່ວນຕົວ ແລະ ຝ່າຍໄອທີບໍ່ສາມາດເບິ່ງເຫັນໄດ້" + "ແອັບວຽກຈະມີປ້າຍກຳກັບໄວ້ ແລະ ຝ່າຍໄອທີສາມາດເບິ່ງດຫັນໄດ້" + "ຕໍ່ໄປ" + "ເຂົ້າໃຈແລ້ວ" + "ແອັບວຽກ: ເປີດ" + "ແອັບວຽກ: ຢຸດຊົ່ວຄາວ" + "ຢຸດແອັບວຽກໄວ້ຊົ່ວຄາວແລ້ວ" + "ທ່ານຈະບໍ່ໄດ້ຮັບການແຈ້ງເຕືອນວຽກໃດໆເລີຍ ແລະ ຜູ້ເບິ່ງແຍງໄອທີຂອງທ່ານຈະບໍ່ສາມາດເບິ່ງເຫັນສະຖານທີ່ຂອງທ່ານໄດ້" "ບໍ່ສຳເລັດ: %1$s" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 6571582cec..8865209cba 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Darbas" "Programa neįdiegta." "Programa nepasiekiama" @@ -63,7 +62,7 @@ "Problema įkeliant valdiklį" "Sąranka" "Tai sistemos programa ir jos negalima pašalinti." - "Aplankas be pavadinimo" + "Pavadinimo redagavimas" "„%1$s“ išjungta" Programoje „%1$s“ yra %2$d pranešimas @@ -135,11 +134,13 @@ "Asmeninės" "Darbo" "Darbo profilis" - "Darbo programas rasite čia" - "Kiekvienai darbo programai priskirtas ženklelis, o tokių programų sauga rūpinasi jūsų organizacija. Perkelkite programas į pagrindinį ekraną, kad galėtumėte lengviau jas pasiekti." - "Tvarko jūsų organizacija" - "Programos ir pranešimai išjungti" - "Uždaryti" - "Uždaryta" + "Asmeninės programos yra privačios ir jų nemato IT administratorius" + "Darbo programos yra pažymėtos ženkleliu ir jas mato IT administratorius" + "Kitas" + "Supratau" + "Darbo programos: įjungta" + "Darbo programos: pristabdyta" + "Darbo programos pristabdytos" + "Negausite jokių darbo pranešimų ir jūsų IT administratorius negalės peržiūrėti jūsų vietovės duomenų" "Nepavyko: %1$s" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 3da0fbb2e5..e341549044 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Darbs" "Lietotne nav instalēta." "Lietotne nav pieejama." @@ -63,7 +62,7 @@ "Ielādējot logrīku, radās problēma." "Notiek iestatīšana" "Šī ir sistēmas lietotne, un to nevar atinstalēt." - "Mape bez nosaukuma" + "Nosaukuma rediģēšana" "Lietotne %1$s ir atspējota" Lietotnē %1$s ir %2$d paziņojumi @@ -134,11 +133,13 @@ "Personīgās lietotnes" "Darba lietotnes" "Darba profils" - "Meklējiet darba lietotnes šeit" - "Katrai darba lietotnei ir emblēma, un jūsu organizācija aizsargā šīs lietotnes. Lai varētu ērtāk piekļūt lietotnēm, pārvietojiet tās uz sākuma ekrānu." - "Pārvalda jūsu organizācija" - "Paziņojumi un lietotnes ir izslēgtas" - "Aizvērt" - "Aizvērta" + "Personīgās lietotnes ir privātas, un IT administrators nevar tās redzēt" + "Darba lietotnēm ir piešķirtas emblēmas, un IT administrators var tās redzēt" + "Tālāk" + "Labi" + "Darba lietotnes: ieslēgtas" + "Darba lietotnes: apturētas" + "Darba lietotnes ir apturētas" + "Jūs nesaņemsiet nekādus darba paziņojumus, un jūsu IT administrators nevarēs skatīt jūsu atrašanās vietu." "Neizdevās: %1$s" diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index ab14e8900b..2de774cfd6 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -62,7 +62,7 @@ "Проблем при вчитувањето на виџетот" "Поставување" "Ова е системска апликација и не може да се деинсталира." - "Неименувана папка" + "Изменете го името" "%1$s е оневозможена" %1$s има %2$d известување @@ -80,9 +80,9 @@ "Виџети" "Тапети" "Стилови и тапети" - "Поставки за Home" + "Поставки за почетен екран" "Оневозможено од администраторот" - "Дозволете ротација на Почетниот екран" + "Дозволете ротација на почетниот екран" "Кога телефонот се ротира" "Точки за известување" "Вклучено" @@ -132,11 +132,13 @@ "Лично" "За работа" "Работен профил" - "Најдете апликации за работа тука" - "Секоја апликација за работа има значка, а организацијата се грижи за нејзината безбедност. За полесен пристап, преместете ги апликациите на почетниот екран." - "Управувано од вашата организација" - "Известувањата и апликациите се исклучени" - "Затвори" - "Затворено" + "Личните апликации се приватни и IT-администраторот не може да ги види" + "Работните апликации имаат значка и IT-администраторот може да ги види" + "Следно" + "Сфатив" + "Работни апликации: вклучени" + "Работни апликации: паузирани" + "Работните апликации се паузирани" + "Нема да добивате работни известувања и IT-администраторот нема да може да ја види вашата локација" "Не успеа: %1$s" diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml index 4362e7cca5..15834dad51 100644 --- a/res/values-ml/strings.xml +++ b/res/values-ml/strings.xml @@ -20,7 +20,6 @@ "ലോഞ്ചർ3" - "ഔദ്യോഗികം" "അപ്ലിക്കേഷൻ ഇൻസ്‌റ്റാളുചെ‌യ്‌തിട്ടില്ല." "അപ്ലിക്കേഷൻ ലഭ്യമല്ല" @@ -63,7 +62,7 @@ "വിജറ്റ് ലോഡുചെയ്യുന്നതിൽ പ്രശ്നമുണ്ട്" "സജ്ജീകരിക്കുക" "ഇതൊരു സിസ്‌റ്റം അപ്ലിക്കേഷനായതിനാൽ അൺഇൻസ്‌റ്റാളുചെയ്യാനാവില്ല." - "പേരുനൽകാത്ത ഫോൾഡർ" + "പേര് എഡിറ്റ് ചെയ്യുക" "%1$s പ്രവർത്തനരഹിതമാക്കി" %1$s എന്ന ആപ്പിന്, %2$d അറിയിപ്പുകൾ ഉണ്ട് @@ -133,11 +132,13 @@ "വ്യക്തിപരം" "ജോലി" "ഔദ്യോഗിക പ്രൊഫൈൽ" - "ഔദ്യോഗിക ആപ്പുകൾ ഇവിടെ കണ്ടെത്തുക" - "എല്ലാ ഔദ്യോഗിക ആപ്പിനും ഒരു ബാഡ്‌ജ് ഉണ്ട്, നിങ്ങളുടെ സ്ഥാപനം അത് സുരക്ഷിതമായി സൂക്ഷിക്കുന്നു. എളുപ്പത്തിൽ ആക്സസ് ചെയ്യാൻ ആപ്പുകളെ ഹോം സ്‌ക്രീനിലേക്ക് നീക്കുക." - "നിങ്ങളുടെ സ്ഥാപനം നിയന്ത്രിക്കുന്നത്" - "അറിയിപ്പുകളും ആപ്പുകളും ഓഫാണ്" - "അടയ്ക്കുക" - "അടച്ചു" + "വ്യക്തിപരമായ ആപ്പുകൾ സ്വകാര്യമാണ്, ഐടി വിഭാഗത്തിന് ദൃശ്യമാവില്ല" + "ഔദ്യോഗിക ആപ്പുകൾ ബാഡ്‌ജുള്ളവയാണ്, ഐടി വിഭാഗത്തിന് ദൃശ്യമാണ്" + "അടുത്തത്" + "മനസ്സിലായി" + "ഔദ്യോഗിക ആപ്പുകൾ: ഓണാണ്" + "ഔദ്യോഗിക ആപ്പുകൾ: തൽക്കാലം നിർത്തിയിരിക്കുന്നു" + "ഔദ്യോഗിക ആപ്പുകൾ തൽക്കാലം നിർത്തിയിരിക്കുന്നു" + "നിങ്ങൾക്ക് ഔദ്യോഗിക അറിയിപ്പുകളൊന്നും ലഭിക്കുകയില്ല, ഐടി അഡ്‌മിന് നിങ്ങളുടെ ലൊക്കേഷൻ കാണാൻ കഴിയില്ല" "പരാജയപ്പെട്ടു: %1$s" diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index ab02ac655c..eb812ef068 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Ажил" "Апп суугаагүй байна." "Апп-г ашиглах боломжгүй" @@ -63,7 +62,7 @@ "Виджет ачаалахад асуудал гарав" "Тохируулга" "Энэ апп нь системийн апп ба устгах боломжгүй." - "Нэргүй фолдер" + "Нэр засах" "%1$s-г идэвхгүй болгосон" %1$s, %2$d мэдэгдэлтэй байна @@ -133,11 +132,13 @@ "Хувийн" "Ажил" "Ажлын профайл" - "Ажлын аппыг эндээс олно уу" - "Ажлын апп тус бүр тэмдэгтэй ба эдгээрийг танай байгууллагаас аюулгүй байлгадаг. Аппуудад хялбар хандахын тулд тэдгээрийг Үндсэн нүүр хэсэгт зөөнө үү." - "Танай байгууллагаас удирддаг" - "Мэдэгдэл, апп унтраалттай байна" - "Хаах" - "Хаасан" + "Хувийн аппууд нь хувийнх бөгөөд тэднийг IT харах боломжгүй" + "Ажлын аппууд нь тэмдэглэгдсэн бөгөөд IT-д харагддаг" + "Дараах" + "Ойлголоо" + "Ажлын аппууд: Асаалттай" + "Ажлын аппууд: Түр зогсоосон" + "Ажлын аппуудыг түр зогсоосон" + "Та ямар ч ажлын мэдэгдэл авахгүй бөгөөд таны IT админ таны байршлыг харах боломжгүй" "Амжилтгүй болсон: %1$s" diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index 49e38982cd..5c2ae5f1dc 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "कार्य" "अ‍ॅप इंस्टॉल केलेला नाही." "अ‍ॅप उपलब्ध नाही" @@ -47,7 +46,7 @@ "आवडीच्या ट्रे मध्ये आणखी जागा नाही" "अ‍ॅप्स सूची" "वैयक्तिक अ‍ॅप्स सूची" - "कामाच्या ठिकाणी वापरली जाणाऱ्या अॅप्सची सूची" + "कामाच्या ठिकाणी वापरली जाणाऱ्या ॲप्सची सूची" "होम" "काढा" "अनइंस्टॉल करा" @@ -63,7 +62,7 @@ "विजेट लोड करण्यात समस्या" "सेटअप" "हा सिस्टम अ‍ॅप आहे आणि अनइंस्टॉल केला जाऊ शकत नाही." - "अनामित फोल्डर" + "नाव संपादित करा" "%1$s अक्षम केला आहे" %1$sसाठी %2$d सूचना आहेत @@ -83,7 +82,7 @@ "शैली आणि वॉलपेपर" "होम सेटिंग्‍ज" "आपल्या प्रशासकाने अक्षम केले" - "मुख्यस्क्रीन फिरविण्‍यास अनुमती द्या" + "मुख्य स्क्रीन फिरविण्‍यास अनुमती द्या" "फोन फिरविला जातो तेव्हा" "सूचना बिंदू" "सुरू" @@ -93,7 +92,7 @@ "सेटिंग्ज बदला" "सूचना बिंदू दाखवा" "होम स्क्रीनवर आयकन जोडा" - "नवीन अॅप्ससाठी" + "नवीन ॲप्ससाठी" "अज्ञात" "काढा" "शोधा" @@ -133,11 +132,13 @@ "वैयक्तिक" "कार्यालय" "कार्य प्रोफाइल" - "कामाची अ‍ॅप्स येथे मिळवा" - "प्रत्येक कार्य अ‍ॅपला एक बॅज असतो आणि तो तुमच्या संस्थेकडून सुरक्षित ठेवला जातो. अधिक सहज अ‍ॅक्सेससाठी अ‍ॅप्स तुमच्या होम स्क्रीनवर हलवा." - "तुमच्या संस्थेकडून व्यवस्थापित" - "सूचना आणि अ‍ॅप्स बंद आहेत" - "बंद करा" - "बंद केले" + "व्यक्तिगत ॲप्स खाजगी असतात आणि आयटीद्वारे पाहिले जाऊ शकत नाहीत" + "कार्य ॲप्सना बॅज केलेले असते आणि आयटीद्वारे पाहिले जाऊ शकतात" + "पुढील" + "समजले" + "कार्य ॲप्स: सुरू आहेत" + "कार्य ॲप्स: थांबवली आहेत" + "कार्य ॲप्स थांबवली आहेत" + "तुम्हाला कोणत्याही कामाच्या सूचना मिळणार नाहीत आणि तुमच्या आयटी ॲडमिनला तुमचे स्थान दिसणार नाही" "हे करता आले नाही: %1$s" diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index 7d054124fb..566cba5bb2 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Kerja" "Apl tidak dipasang." "Apl tidak tersedia" @@ -63,7 +62,7 @@ "Masalah memuatkan widget" "Persediaan" "Ini ialah apl sistem dan tidak boleh dinyahpasang." - "Folder Tanpa Nama" + "Edit Nama" "%1$s dilumpuhkan" %1$s, mempunyai %2$d pemberitahuan @@ -133,11 +132,13 @@ "Peribadi" "Kerja" "Profil kerja" - "Temui apl kerja di sini" - "Setiap apl kerja terdapat lencana dan dilindungi oleh organisasi anda. Alihkan apl ke Skrin Utama untuk akses yang lebih mudah." - "Diurus oleh organisasi anda" - "Pemberitahuan dan apl dimatikan" - "Tutup" - "Ditutup" + "Apl peribadi adalah tertutup & tidak boleh dilihat oleh IT" + "Apl kerja adalah berlencana & kelihatan kepada IT" + "Seterusnya" + "OK" + "Apl kerja: Hidup" + "Apl kerja: Dijeda" + "Apl kerja dijeda" + "Anda tidak akan menerima sebarang pemberitahuan kerja dan pentadbir IT anda tidak dapat melihat lokasi anda" "Gagal: %1$s" diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index 78856f657d..ad8881ba94 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -62,7 +62,7 @@ "ဝဒ်ဂျက် တင်ရာတွင် ပြသနာ ရှိပါသည်" "စဖွင့်သတ်မှတ်ရန်" "ဤအပ်ပလီကေးရှင်းမှာ စစ်စတန်ပိုင်းဆိုင်ရာ အပ်ပလီကေးရှင်းဖြစ်ပါသည်။ ထုတ်ပစ်၍ မရပါ" - "အမည်မရှိအကန့်" + "အမည်ကို တည်းဖြတ်ပါ" "%1$s ကို ပိတ်ထားသည်" %1$s တွင် သတိပေးချက် %2$d ခု ရှိသည် @@ -132,11 +132,13 @@ "ကိုယ်ပိုင်" "အလုပ်" "အလုပ်ပရိုဖိုင်" - "အလုပ်အက်ပ်များကို ဤနေရာတွင်ရှာဖွေပါ" - "အလုပ်အက်ပ်တိုင်းတွင် တံဆိပ် တစ်ခုစီရှိပြီး သင်၏ အဖွဲ့အစည်းက လုံခြုံအောင် ထားရှိပါသည်။ အသုံးပြုရ ပိုမိုလွယ်ကူစေရန် အက်ပ်များကို သင်၏ ပင်မမျက်နှာပြင်သို့ ရွှေ့ပါ။" - "သင်၏ အဖွဲ့အစည်းက စီမံခန့်ခွဲထားပါသည်" - "အကြောင်းကြားချက်များနှင့် အက်ပ်များကို ပိတ်ထားသည်" - "ပိတ်ရန်" - "ပိတ်ထားသည်" + "ကိုယ်ရေးကိုယ်တာအက်ပ်များသည် သီးသန့်ဖြစ်၍ IT က တွေ့နိုင်မည်မဟုတ်ပါ" + "အလုပ်သုံးအက်ပ်များကို တံဆိပ်တပ်ထားပြီး IT က မြင်နိုင်သည်" + "ရှေ့သို့" + "Ok" + "အလုပ်သုံးအက်ပ်များ- ဖွင့်ထားသည်" + "အလုပ်သုံးအက်ပ်များ- ခေတ္တရပ်ထားသည်" + "အလုပ်သုံးအက်ပ်များကို ခေတ္တရပ်ထားသည်" + "အလုပ်အကြောင်းကြားချက်တစ်ခုမျှ ရရှိမည်မဟုတ်ဘဲ သင့် IT စီမံခန့်ခွဲသူက သင့်တည်နေရာကို မြင်ရမည်မဟုတ်ပါ" "မအောင်မြင်ပါ− %1$s" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 2257367a6a..eb860eaccd 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Jobb" "Appen er ikke installert." "Appen er ikke tilgjengelig" @@ -63,7 +62,7 @@ "Problem ved innlasting av modul" "Konfigurering" "Dette er en systemapp som ikke kan avinstalleres." - "Mappe uten navn" + "Rediger navn" "Slo av %1$s" %1$s har %2$d varsler @@ -133,11 +132,13 @@ "Personlig" "Jobb" "Jobbprofil" - "Finn jobbapper her" - "Alle jobbapper har et merke og sikres av organisasjonen din. Flytt apper til startskjermen for å gjøre det enklere å finne dem." - "Administreres av organisasjonen din" - "Varsler og apper er slått av" - "Lukk" - "Lukket" + "Personlige apper er private, og IT-administratoren kan ikke se dem" + "Jobbapper er merket og synlige for IT-administratoren" + "Neste" + "Greit" + "Jobbapper: på" + "Jobbapper: satt på pause" + "Jobbapper er satt på pause" + "Du kommer ikke til å motta jobbvarsler, og IT-administratoren din kan ikke se posisjonen din" "Mislyktes: %1$s" diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index 1e7aee9e9e..787463e6d9 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "कार्य" "अनुप्रयोग स्थापित छैन।" "अनुप्रयोग उपलब्ध छैन" @@ -63,7 +62,7 @@ "समस्या लोडिङ गर्ने विजेट" "सेटअप" "यो प्रणाली अनुप्रयोग हो र यसलाई स्थापना रद्द गर्न सकिँदैन।" - "बेनाम फोल्डर" + "नाम सम्पादन गर्नुहोस्" "असक्षम पारिएको %1$s" %1$s, का %2$d सूचनाहरू छन् @@ -133,11 +132,13 @@ "व्यक्तिगत" "कार्यसम्बन्धी" "कार्य प्रोफाइल" - "कार्यसम्बन्धी अनुप्रयोगहरू यहाँ प्राप्त गर्नुहोस्" - "कार्यसम्बन्धी प्रत्येक अनुप्रयोगमा एउटा ब्याज छ र तपाईंको संगठनले यसलाई सुरक्षित राखेको छ । अझ सजिलो गरी पहुँच राख्नका लागि अनुप्रयोगहरूलाई आफ्नो गृहस्क्रिनमा सार्नुहोस्‌।" - "तपाईंको सङ्गठनले व्यवस्थापन गरेको" - "सूचना र अनुप्रयोगहरू निष्क्रिय छन्‌" - "बन्द गर्नुहोस्" - "बन्द गरियो" + "व्यक्तिगत अनुप्रयोगहरू निजी हुन्छन् र IT ले ती अनुप्रयोग देख्न सक्दैनन्" + "कार्यसम्बन्धी अनुप्रयोगहरूमा ब्याज चिन्ह लगाइएको हुन्छ र IT ले ती अनुप्रयोग देख्न सक्छन्" + "अर्को" + "बुझेँ" + "कार्यसम्बन्धी अनुप्रयोगहरू: सक्रिय छन्" + "कार्यसम्बन्धी अनुप्रयोगहरू: पज गरिएका छन्" + "कार्यसम्बन्धी अनुप्रयोगहरू पज गरिएका छन्" + "तपाईं कार्यसम्बन्धी कुनै पनि सूचना प्राप्त गर्नु हुने छैन र तपाईंका IT प्रशासक तपाईंको स्थान देख्न सक्नुहुन्न" "कार्य पूरा गर्न सकिएन: %1$s" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index ec30d8c6b2..78897e42bd 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Werk" "App is niet geïnstalleerd." "App is niet beschikbaar" @@ -63,7 +62,7 @@ "Probleem bij het laden van widget" "Configuratie" "Dit is een systeemapp die niet kan worden verwijderd." - "Naamloze map" + "Naam bewerken" "%1$s is uitgeschakeld" %1$s, heeft %2$d meldingen @@ -133,11 +132,13 @@ "Privé" "Werk" "Werkprofiel" - "Zoek hier naar werk-apps" - "Elke werk-app heeft een badge en wordt beveiligd door je organisatie. Verplaats apps naar je startscherm voor snelle toegang." - "Beheerd door je organisatie" - "Meldingen en apps zijn uitgeschakeld" - "Sluiten" - "Gesloten" + "Persoonlijke apps zijn privé en niet zichtbaar voor de IT-afdeling" + "Werk-apps hebben een badge en zijn zichtbaar voor de IT-afdeling" + "Volgende" + "OK" + "Werk-apps: aan" + "Werk-apps: onderbroken" + "Werk-apps zijn onderbroken" + "Je krijgt geen werkmeldingen en je IT-beheerder kan je locatie niet bekijken" "Mislukt: %1$s" diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml index 4ddc903474..ae789f5cee 100644 --- a/res/values-or/strings.xml +++ b/res/values-or/strings.xml @@ -20,7 +20,6 @@ "ଲଞ୍ଚର୍3" - "କାମ" "ଆପ୍‌ ଇନଷ୍ଟଲ୍‌ ହୋଇନାହିଁ" "ଆପ୍‌ ଉପଲବ୍ଧ ନାହିଁ" @@ -63,7 +62,7 @@ "ୱିଜେଟ୍‌ ଲୋଡ୍‌ ହେବାରେ ସମସ୍ୟା ଅଛି" "ସେଟ୍ ଅପ୍ କରନ୍ତୁ" "ଏହା ଏକ ସିଷ୍ଟମ୍‌ ଆପ୍‌ ଅଟେ ଏବଂ ଏହା ଅନଇନଷ୍ଟଲ୍‌ କରାଯାଇ ପାରିବ ନାହିଁ।" - "ବେନାମୀ ଫୋଲ୍ଡର୍‌" + "ନାମ ସମ୍ପାଦନ କରନ୍ତୁ" "%1$s ଅକ୍ଷମ କରାଗଲା" %1$s, %2$dଟି ବିଜ୍ଞପ୍ତି ରହିଛି @@ -85,8 +84,8 @@ "ଆପଣଙ୍କ ଆଡମିନଙ୍କ ଦ୍ୱାରା ଅକ୍ଷମ କରାଯାଇଛି" "ହୋମ୍‌ ସ୍କ୍ରୀନ୍ ବୁଲାଇବା ଅନୁମତି ଦିଅନ୍ତୁ" "ଯେତେବେଳେ ଫୋନକୁ ବୁଲାଯାଇଥାଏ" - "ବିଜ୍ଞପ୍ତି ବିନ୍ଦୁଗୁଡ଼ିକ" - "ଚାଲୁ କରନ୍ତୁ" + "ବିଜ୍ଞପ୍ତି ଡଟ୍ସ" + "ଚାଲୁ" "ବନ୍ଦ କରନ୍ତୁ" "ବିଜ୍ଞପ୍ତି ଆକ୍ସେସ୍‌ ଆବଶ୍ୟକ ଅଟେ" "ବିଜ୍ଞପ୍ତି ବିନ୍ଦୁ ଦେଖାଇବାକୁ, %1$s ପାଇଁ ଆପ୍‌ ବିଜ୍ଞପ୍ତି ଅନ୍‌ କରନ୍ତୁ" @@ -133,11 +132,13 @@ "ବ୍ୟକ୍ତିଗତ" "କାମ" "ୱର୍କ ପ୍ରୋଫାଇଲ୍‌" - "ଏଠାରେ କାମ ଆପ୍‌ ଖୋଜନ୍ତୁ" - "ପ୍ରତ୍ୟେକ କାଯ୍ୟକାରୀ ଆପ୍‌ର ଗୋଟିଏ ବ୍ୟାଜ୍ (ଚିହ୍ନ) ଅଛି, ଯାହାକୁ ଆପଣଙ୍କ ସଂସ୍ଥା ସୁରକ୍ଷିତ ରଖିଥାଏ। ସହଜରେ ଆକ୍ସେସ୍ କରିବା ପାଇଁ ଆପ୍‌କୁ ହୋମ୍ ସ୍କ୍ରୀନ୍ ଉପରକୁ ଆଣନ୍ତୁ।" - "ଆପଣଙ୍କ ସଂସ୍ଥା ଦ୍ୱାରା ପରିଚାଳିତ" - "ବିଜ୍ଞପ୍ତି ଓ ଆପ୍‌ଗୁଡ଼ିକ ବନ୍ଦ ଅଛି" - "ବନ୍ଦ କରନ୍ତୁ" - "ବନ୍ଦ ହୋଇଯାଇଛି" + "ବ୍ୟକ୍ତିଗତ ଆପଗୁଡ଼ିକ ନିଜସ୍ୱ ଅଟେ & IT ଟିମ୍ ଦ୍ୱାରା ଦେଖାଯାଇପାରିବ ନାହିଁ" + "ୱାର୍କ ଆପଗୁଡ଼ିକୁ ବ୍ୟାଜ୍ କରାଯାଇଛି & IT ଟିମକୁ ଦେଖାଯିବ" + "ପରବର୍ତ୍ତୀ" + "ବୁଝିଗଲି" + "ୱାର୍କ ଆପ୍ସ: ଚାଲୁ ଅଛି" + "ୱାର୍କ ଆପ୍ସ: ବିରତ କରାଯାଇଛି" + "ୱାର୍କ ଆପ୍ସ ବିରତ କରାଯାଇଛି" + "ଆପଣ କୌଣସି କାର୍ଯ୍ୟ ସମ୍ବନ୍ଧୀୟ ବିଜ୍ଞପ୍ତି ପାଇବେ ନାହିଁ ଏବଂ ଆପଣଙ୍କର IT ଆଡମିନ୍ ଆପଣଙ୍କର ଲୋକେସନକୁ ଦେଖିପାରିବେ ନାହିଁ" "ବିଫଳ ହୋଇଛି: %1$s" diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index d4cd5be4bc..3678ff575d 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "ਦਫ਼ਤਰ" "ਐਪ ਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਹੋਇਆ ਹੈ।" "ਐਪ ਉਪਲਬਧ ਨਹੀਂ ਹੈ" @@ -63,7 +62,7 @@ "ਵਿਜੇਟ ਲੋਡ ਕਰਨ ਵਿੱਚ ਸਮੱਸਿਆ" "ਸਥਾਪਤ ਕਰੋ" "ਇਹ ਇੱਕ ਸਿਸਟਮ ਐਪ ਹੈ ਅਤੇ ਇਸਨੂੰ ਅਣਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।" - "ਬਿਨਾਂ ਨਾਮ ਦਿੱਤਾ ਫੋਲਡਰ" + "ਨਾਮ ਦਾ ਸੰਪਾਦਨ ਕਰੋ" "%1$s ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ" %1$s ਦੀ %2$d ਸੂਚਨਾ @@ -133,11 +132,13 @@ "ਨਿੱਜੀ" "ਕਾਰਜ-ਸਥਾਨ" "ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ" - "ਕਾਰਜ-ਸਥਾਨ ਐਪਾਂ ਇੱਥੇ ਲੱਭੋ" - "ਹਰੇਕ ਕਾਰਜ-ਸਥਾਨ ਐਪ ਦਾ ਇੱਕ ਬੈਜ ਹੁੰਦਾ ਹੈ ਅਤੇ ਉਸਨੂੰ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਸੁਰੱਖਿਅਤ ਰੱਖਿਆ ਜਾਂਦਾ ਹੈ। ਵਧੇਰੇ ਆਸਾਨ ਪਹੁੰਚ ਲਈ ਐਪਾਂ ਨੂੰ ਹੋਮ ਸਕ੍ਰੀਨ \'ਤੇ ਲਿਜਾਓ।" - "ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ" - "ਸੂਚਨਾਵਾਂ ਅਤੇ ਐਪਾਂ ਬੰਦ ਹਨ" - "ਬੰਦ ਕਰੋ" - "ਬੰਦ ਕੀਤਾ ਗਿਆ" + "ਵਿਅਕਤੀਗਤ ਐਪਾਂ ਨਿੱਜੀ ਹੁੰਦੀਆਂ ਹਨ ਅਤੇ ਆਈ.ਟੀ. ਵੱਲੋਂ ਨਹੀਂ ਦੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ" + "ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਬੈਜ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ ਅਤੇ ਆਈ.ਟੀ. ਵੱਲੋਂ ਦੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ" + "ਅੱਗੇ" + "ਸਮਝ ਲਿਆ" + "ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ: ਚਾਲੂ" + "ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ: ਰੋਕੀਆਂ ਗਈਆਂ" + "ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਨੂੰ ਰੋਕਿਆ ਗਿਆ ਹੈ" + "ਤੁਹਾਨੂੰ ਕੰਮ ਸਬੰਧੀ ਕੋਈ ਸੂਚਨਾ ਨਹੀਂ ਮਿਲੇਗੀ ਅਤੇ ਤੁਹਾਡਾ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡਾ ਟਿਕਾਣਾ ਨਹੀਂ ਦੇਖ ਸਕਦਾ" "ਇਹ ਕਾਰਵਾਈ ਅਸਫਲ ਹੋਈ: %1$s" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 68859605fb..eb80f4176d 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Praca" "Aplikacja nie jest zainstalowana." "Aplikacja niedostępna" @@ -63,7 +62,7 @@ "Problem podczas ładowania widżetu" "Konfiguracja" "To aplikacja systemowa i nie można jej odinstalować." - "Folder bez nazwy" + "Edytuj nazwę" "Aplikacja %1$s jest wyłączona" %1$s%2$d powiadomienia @@ -130,16 +129,18 @@ "Szerokość i wysokość widżetu zmieniła się na %1$s x %2$s" "Skróty" "Skróty i powiadomienia" - "Odrzuć" + "Zamknij" "Powiadomienie odrzucone" "Osobiste" "Praca" "Profil służbowy" - "Aplikacje do pracy" - "Każda aplikacja do pracy ma plakietkę, a o jej bezpieczeństwo dba Twoja organizacja. Aplikacje można przenieść na ekran główny, by były łatwiej dostępne." - "Profil zarządzany przez Twoją organizację" - "Powiadomienia i aplikacje są wyłączone" - "Zamknij" - "Zamknięto" + "Aplikacje osobiste są prywatne i IT nie może ich zobaczyć" + "Aplikacje do pracy są oznaczone plakietką i widoczne dla IT" + "Dalej" + "OK" + "Aplikacje do pracy: włączono" + "Aplikacje do pracy: wstrzymano" + "Aplikacje do pracy zostały wstrzymane" + "Nie będziesz otrzymywać żadnych powiadomień związanych z pracą, a administrator IT nie będzie mógł zobaczyć Twojej lokalizacji" "Niepowodzenie: %1$s" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index e0d2c74645..97c09852f5 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -62,7 +62,7 @@ "Problema ao carregar o widget" "Configuração" "É uma aplicação de sistema e não pode ser desinstalada." - "Pasta sem nome" + "Edite o nome" "%1$s desativado" A aplicação %1$s tem %2$d notificações. @@ -132,11 +132,13 @@ "Pessoal" "Trabalho" "Perfil de trabalho" - "Encontrar as aplicações de trabalho aqui" - "Cada aplicação de trabalho apresenta um emblema, pelo que a sua entidade a mantém em segurança. Pode mover as aplicações para o ecrã principal para facilitar o acesso." - "Gerido pela sua entidade" - "As notificações e as aplicações estão desativadas." - "Fechar" - "Fechado" + "As apps pessoais são privadas e não podem ser vistas pelos serviços de TI" + "As apps de trabalho têm um emblema e estão visíveis para os serviços de TI" + "Seguinte" + "OK" + "Apps de trabalho: ativadas" + "Apps de trabalho: em pausa" + "As apps de trabalho estão em pausa" + "Não irá obter quaisquer notificações de trabalho e o administrador de TI não poderá ver a sua localização." "Falhou: %1$s" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index bb4834f69d..d222a7c3a4 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -62,7 +62,7 @@ "Problema ao carregar o widget" "Configuração" "Este é um app do sistema e não pode ser desinstalado." - "Pasta sem nome" + "Editar nome" "%1$s desativado" O app %1$stem %2$d notificação @@ -132,11 +132,13 @@ "Pessoais" "Comerciais" "Perfil de trabalho" - "Localizar apps de trabalho aqui" - "Cada app de trabalho tem um selo e é mantido em segurança pela sua organização. Mova os apps para sua tela inicial para facilitar o acesso." - "Gerenciados pela sua organização" - "As notificações e os apps estão desativados" - "Fechar" - "Fechado" + "Os apps pessoais são privados e não podem ser vistos pela equipe de TI" + "Os apps de trabalho são identificados e ficam visíveis para a equipe de TI" + "Próxima" + "Ok" + "Apps de trabalho: ativados" + "Apps de trabalho: pausados" + "Os apps de trabalho foram pausados" + "Você não receberá notificações de trabalho, e seu administrador de TI não poderá ver seu local" "Falha: %1$s" diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index f8a61f11f7..d97d45344d 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -62,7 +62,7 @@ "Problemă la încărcarea widgetului" "Configurați" "Aceasta este o aplicație de sistem și nu poate fi dezinstalată." - "Dosar fără nume" + "Modificați numele" "S-a dezactivat %1$s" %1$s are %2$d notificări @@ -133,11 +133,13 @@ "Personale" "Profesionale" "Profil de serviciu" - "Găsiți aplicații de serviciu aici" - "Fiecare aplicație de serviciu are o insignă și este păstrată în siguranță de organizația dvs. Mutați aplicațiile pe ecranul de pornire pentru acces mai ușor." - "Gestionat de organizația dvs." - "Notificările și aplicațiile sunt dezactivate" - "Închideți" - "Închis" + "Aplicațiile personale sunt private și nu pot fi văzute de echipa IT" + "Aplicațiile pentru lucru au o insignă și sunt vizibile pentru echipa IT" + "Înainte" + "OK" + "Aplicații pentru lucru: activate" + "Aplicații pentru lucru: întrerupte" + "Aplicațiile pentru lucru sunt întrerupte" + "Nu veți primi notificări de serviciu, iar administratorul IT nu vă poate vedea locația" "Eșuare: %1$s" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 23b00d0936..19567554a6 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Работа" "Приложение удалено" "Приложение недоступно" @@ -63,7 +62,7 @@ "Не удалось загрузить виджет" "Настройка" "Это системное приложение, его нельзя удалить." - "Папка без названия" + "Измените название" "Приложение %1$s отключено" В приложении \"%1$s\" %2$d уведомление @@ -135,11 +134,13 @@ "Личные" "Рабочие" "Рабочий профиль" - "Приложения для работы" - "Рабочие приложения отмечены специальным значком. Их безопасность обеспечивает ваша организация. Для удобства перенесите эти приложения на главный экран." - "Управляется вашей организацией" - "Уведомления и приложения отключены." - "Закрыть" - "Закрыта" + "Личные приложения доступны только вам. Системный администратор их не видит." + "Рабочие приложения помечены специальным значком. Они видны системному администратору." + "Далее" + "ОК" + "Рабочие приложения: включены" + "Рабочие приложения: приостановлены" + "Рабочие приложения приостановлены" + "Вы не будете получать рабочие уведомления, а системный администратор не сможет видеть ваше местоположение." "Не удалось выполнить действие (%1$s)." diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml index ef99a59e4e..40c738c390 100644 --- a/res/values-si/strings.xml +++ b/res/values-si/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "කාර්යාලය" "යෙදුම ස්ථාපනය කර නැත." "යෙදුම නොතිබේ" @@ -63,7 +62,7 @@ "ගැටලු පූරණ විජට් එක" "ස්ථාපනය කරන්න" "මෙය පද්ධති යෙදුමක් වන අතර අස්ථාපනය කළ නොහැක." - "නම් නොකළ ෆෝල්ඩරය" + "නම සංස්කරණය කරන්න" "%1$s අබල කෙරිණි" %1$s, දැනුම්දීම් %2$dක් ඇත @@ -133,11 +132,13 @@ "පුද්ගලික" "කාර්යාලය" "කාර්යාල පැතිකඩ" - "මෙහි කාර්යාල යෙදුම් සොයා ගන්න" - "සෑම කාර්යාල යෙදුමකම ලාංඡනයක් ඇත ඇති අතර එය ඔබේ සංවිධානය මගින් සුරක්ෂිතව තබා ගනී. වඩාත් පහසු ප්‍රවේශයකට යෙදුම් ඔබේ මුල් පිටු තිරය වෙත ගෙන යන්න." - "ඔබේ සංවිධානය විසින් කළමනාකරණය කරනු ලැබේ" - "දැනුම්දීම් සහ යෙදුම් ක්‍රියාවිරහිතයි" - "වසන්න" - "වසා ඇත" + "පෞද්ගලික යෙදුම් පුද්ගලික වන අතර IT විසින් බැලිය නොහැකිය" + "කාර්යාල යෙදුම් ලාංඡනයකින් සලකුණු කර ඇති අතර IT ට දෘශ්‍යමාන වේ" + "ඊළඟ" + "තේරුණා" + "කාර්යාල යෙදුම්: ක්‍රියාත්මකයි" + "කාර්යාල යෙදුම්: විරාම කරන ලදී" + "කාර්යාල යෙදුම් විරාම කර ඇත" + "ඔබට කිසිදු කාර්යාල දැනුම් දීමක් නොලැබෙනු ඇති අතර ඔබේ IT පරිපාලකට ඔබේ ස්ථානය බැලිය නොහැකිය" "අසාර්ථකයි: %1$s" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 5bbf7c3cdc..ea25285889 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -62,7 +62,7 @@ "Problém s načítaním miniaplikácií" "Nastavenie" "Toto je systémová aplikácia a nedá sa odinštalovať." - "Nepomenovaný priečinok" + "Úprava názvu" "Aplikácia %1$s je deaktivovaná" %1$s, má %2$d upozornenia @@ -134,11 +134,13 @@ "Osobné" "Pracovné" "Pracovný profil" - "Tu nájdete pracovné aplikácie" - "Všetky pracovné aplikácie majú štítok a sú bezpečne uchovávané vašou organizáciou. Ak chcete mať k aplikáciám ľahší prístup, presuňte ich na plochu." - "Spravované vašou organizáciou" - "Upozornenia a aplikácie sú vypnuté" - "Zavrieť" - "Zavreté" + "Osobné aplikácie sú súkromné a správca IT ich neuvidí" + "Pracovné aplikácie sú označené odznakom a správca IT ich uvidí" + "Ďalej" + "Dobre" + "Pracovné aplikácie: zapnuté" + "Pracovné aplikácie: pozastavené" + "Pracovné aplikácie sú pozastavené" + "Nebudete dostávať žiadne pracovné upozornenia a váš správca IT neuvidí vašu polohu" "Zlyhalo: %1$s" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 044a4b42b0..fa7b9155bd 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Služba" "Aplikacija ni nameščena." "Aplikacija ni na voljo" @@ -63,7 +62,7 @@ "Težava pri nalaganju pripomočka" "Nastavitev" "To je sistemska aplikacija in je ni mogoče odstraniti." - "Neimenovana mapa" + "Urejanje imena" "Aplikacija %1$s je onemogočena" %1$s ima %2$d obvestilo @@ -135,11 +134,13 @@ "Osebno" "Služba" "Delovni profil" - "Tukaj poiščite delovne aplikacije" - "Vsaka delovna aplikacija ima značko. Za varnost teh aplikacij skrbi vaša organizacija. Za preprostejši dostop premaknite aplikacije na začetni zaslon." - "Upravlja vaša organizacija" - "Obvestila in aplikacije – izklopljeno" - "Zapri" - "Zaprto" + "Osebne aplikacije so zasebne in jih skrbnik za IT ne vidi" + "Delovne aplikacije so označene z značko in vidne skrbniku za IT" + "Naprej" + "Razumem" + "Delovne aplikacije: Vklopljene" + "Delovne aplikacije: Začasno zaustavljene" + "Delovne aplikacije so začasno zaustavljene" + "Obvestil za delovni profil ne boste prejemali, skrbnik za IT pa ne bo videl vaše lokacije" "Ni uspelo: %1$s" diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index 7f2567c60c..c8299faa8f 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -62,7 +62,7 @@ "Problem në ngarkimin e miniaplikacionit" "Konfiguro" "Ky është aplikacion sistemi dhe nuk mund të çinstalohet." - "Dosje e paemërtuar" + "Redakto emrin" "%1$s u çaktivizua" %1$s, ka %2$d njoftime @@ -132,11 +132,13 @@ "Personale" "Punë" "Profili i punës" - "Gjej këtu aplikacionet e punës" - "Secili aplikacion pune ka një distinktiv dhe mbahet i sigurt nga organizata jote. Zhvendosi aplikacionet e punës në ekranin tënd kryesor për qasje më të lehtë." - "Menaxhohet nga organizata jote" - "Njoftimet dhe aplikacionet janë joaktive" - "Mbyll" - "Mbyllur" + "Aplikacionet personale janë private dhe nuk mund të shihen nga personeli i teknologjisë së informacionit" + "Aplikacionet e punës janë të shënuara dhe të dukshme për personelin e teknologjisë së informacionit" + "Para" + "E kuptova" + "Aplikacionet e punës: Aktive" + "Aplikacionet e punës: Në pauzë" + "Aplikacionet e punës janë në pauzë" + "Nuk do të marrësh njoftime pune dhe administratori yt i teknologjisë së informacionit nuk mund ta shohë vendndodhjen tënde" "Dështoi: %1$s" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 4e52592687..3f4cd248ef 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Work" "Апликација није инсталирана." "Апликација није доступна" @@ -63,7 +62,7 @@ "Проблем при учитавању виџета" "Подешавање" "Ово је системска апликација и не може да се деинсталира." - "Неименовани директоријум" + "Измените назив" "Апликација %1$s је онемогућена" %1$s, има %2$d обавештење @@ -134,11 +133,13 @@ "Личне" "Пословне" "Профил за Work" - "Пронађите пословне апликације овде" - "Свака пословна апликација има значку и штити је ваша организација. Преместите апликације на почетни екран да бисте им лакше приступали." - "Овим управља организација" - "Обавештења и апликације су искључени" - "Затвори" - "Затворено" + "Личне апликације су приватне и ИТ администратор не може да их види" + "Апликације за посао имају значку и ИТ администратор може да их види" + "Даље" + "Важи" + "Апликације за посао: Укључене" + "Апликације за посао: Паузиране" + "Апликације за посао су паузиране" + "Нећете добијати никаква обавештења за Work, а ИТ администратор не може да види локацију" "Није успело: %1$s" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index e7400a6d00..475978dc65 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Arbete" "Appen är inte installerad." "Appen är inte tillgänglig" @@ -63,7 +62,7 @@ "Det gick inte att läsa in widgeten" "Konfiguration" "Det här är en systemapp som inte kan avinstalleras." - "Namnlös mapp" + "Redigera namn" "%1$s har inaktiverats" %1$s har %2$d aviseringar @@ -133,11 +132,13 @@ "Privat" "Arbete" "Jobbprofil" - "Här hittar du jobbappar" - "Alla jobbappar har ett märke och organisationen ser till att de är skyddade. Flytta apparna till startskärmen så kommer du åt dem lättare." - "Hanteras av organisationen" - "Aviseringar och appar är inaktiverade" - "Stäng" - "Stängd" + "Personliga appar är privata och visas inte för IT" + "Jobbappar är märkta och visas för IT" + "Nästa" + "OK" + "Jobbappar: På" + "Jobbappar: I pausläge" + "Jobbappar har pausats" + "Du får inga jobbaviseringar och IT-administratören ser inte din plats" "Misslyckades: %1$s" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 445e382f2d..fd5808f711 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -62,7 +62,7 @@ "Tatizo la kupakia wijeti" "Sanidi" "Hii ni programu ya mfumo na haiwezi kuondolewa." - "Folda isiyo na jina" + "Badilisha Jina" "%1$s imezimwa" %1$s, ina arifa %2$d @@ -134,11 +134,13 @@ "Binafsi" "Kazini" "Wasifu wa kazini" - "Pata programu za kazi hapa" - "Kila programu ya kazi ina beji na hulindwa na shirika lako. Hamishia programu kwenye skrini yako ya kwanza ili uzifikie kwa urahisi." - "Inasimamiwa na shirika lako" - "Vipenge vya arifa na programu vimezimwa" - "Funga" - "Imefungwa" + "Programu za binafsi ni za faragha na haziwezi kuonwa na Msimamizi wa TEHAMA" + "Programu za kazini zina beji na zinaonekana kwa msimamizi wa TEHAMA" + "Endelea" + "Nimeelewa" + "Programu za kazini: Zimewashwa" + "Programu za kazini: Zimesimamishwa" + "Programu za kazini zimesimamishwa" + "Hutapata arifa zozote za kazini na msimamizi wako wa TEHAMA hawezi kuona mahali ulipo" "Hitilafu: %1$s" diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index 1f8d3b8c4f..d3a30b8bdc 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -62,7 +62,7 @@ "విడ్జెట్‌ను లోడ్ చేయడంలో సమస్య" "సెటప్ చేయి" "ఇది సిస్టమ్ యాప్ మరియు దీన్ని అన్‌ఇన్‌స్టాల్ చేయడం సాధ్యపడదు." - "పేరు లేని ఫోల్డర్" + "పేరును ఎడిట్ చేయండి" "%1$s నిలిపివేయబడింది" %1$s, నుంచి %2$d నోటిఫికేషన్‌లు ఉన్నాయి @@ -132,11 +132,13 @@ "వ్యక్తిగతం" "కార్యాలయం" "కార్యాలయ ప్రొఫైల్" - "కార్యాలయ యాప్‌లను ఇక్కడ కనుగొనండి" - "ప్రతి కార్యాలయ యాప్‌కు బ్యాడ్జ్‌ ఉంది మరియు మీ సంస్థ ద్వారా సురక్షితంగా ఉంచబడుతుంది. సులభ యాక్సెస్ కోసం యాప్‌లను మీ హోమ్ స్క్రీన్‌కి తరలించండి." - "మీ సంస్థ ద్వారా నిర్వహించబడతాయి" - "నోటిఫికేషన్‌లు మరియు యాప్‌లు ఆఫ్ చేయబడ్డాయి" - "మూసివేయి" - "మూసివేయబడింది" + "వ్యక్తిగత యాప్‌లు ప్రైవేట్‌గా ఉన్నాయి & IT డిపార్ట్‌మెంట్‌కు అవి కనిపించవు" + "వర్క్ యాప్‌లు బ్యాడ్జ్ చేయబడ్డాయి & IT డిపార్ట్‌మెంట్‌కు అవి కనిపిస్తాయి" + "తర్వాత" + "అర్థమైంది" + "వర్క్ యాప్‌లు: ఆన్ చేయబడ్డాయి" + "వర్క్ యాప్‌లు: పాజ్ చేయబడ్డాయి" + "వర్క్ యాప్‌లు పాజ్ చేయబడ్డాయి" + "మీరు ఏ ఆఫీస్ నోటిఫికేషన్‌లను పొందలేరు, మీ IT అడ్మిన్ మీ లొకేషన్‌ను చూడలేరు" "విఫలమైంది: %1$s" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 5ab9b860ef..f0948ef781 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -62,7 +62,7 @@ "มีปัญหาขณะโหลดวิดเจ็ต" "ตั้งค่า" "นี่เป็นแอประบบและไม่สามารถถอนการติดตั้งได้" - "โฟลเดอร์ที่ไม่มีชื่อ" + "แก้ไขชื่อ" "ปิดใช้ %1$s" %1$s มีการแจ้งเตือน %2$d รายการ @@ -132,11 +132,13 @@ "ส่วนตัว" "งาน" "โปรไฟล์งาน" - "หาแอปงานที่นี่" - "แอปงานแต่ละแอปมีป้ายและได้รับการรักษาความปลอดภัยจากองค์กรของคุณ ย้ายแอปไปยังหน้าจอหลักเพื่อให้เข้าถึงได้ง่ายขึ้น" - "จัดการโดยองค์กร" - "ปิดการแจ้งเตือนและแอปอยู่" - "ปิด" - "ปิด" + "แอปส่วนตัวจะเป็นแบบส่วนตัวและฝ่ายไอทีจะมองไม่เห็น" + "แอปงานจะติดป้ายไว้และฝ่ายไอทีจะมองเห็น" + "ถัดไป" + "รับทราบ" + "แอปงาน: เปิด" + "แอปงาน: หยุดชั่วคราว" + "หยุดแอปงานไว้ชั่วคราว" + "คุณจะไม่ได้รับการแจ้งเตือนเกี่ยวกับงานและผู้ดูแลระบบไอทีจะไม่เห็นตำแหน่งของคุณ" "ไม่สำเร็จ: %1$s" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 0df94c7104..78e8beadf9 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Trabaho" "Hindi naka-install ang app." "Hindi available ang app" @@ -63,7 +62,7 @@ "Problema sa pag-load ng widget" "I-setup" "Isa itong app ng system at hindi maaaring i-uninstall." - "Walang Pangalang Folder" + "I-edit ang Pangalan" "Naka-disable ang %1$s" May %2$d (na) notification ang %1$s @@ -133,11 +132,13 @@ "Personal" "Trabaho" "Profile sa trabaho" - "Maghanap ng mga app para sa trabaho rito" - "Ang bawat app para sa trabaho ay may badge at pinapanatiling ligtas ng iyong organisasyon. Ilipat ang mga app sa iyong Home screen para mas madaling ma-access." - "Pinamamahalaan ng iyong organisasyon" - "Naka-off ang mga notification at app" - "Isara" - "Nakasara" + "Pribado at hindi nakikita ng IT ang mga personal na app" + "May badge at nakikita ng IT ang mga app para sa trabaho" + "Susunod" + "OK" + "Mga app para sa trabaho: Naka-on" + "Mga app para sa trabaho: Naka-pause" + "Naka-pause ang mga app para sa trabaho" + "Hindi ka makakatanggap ng anumang notification sa trabaho, at hindi makikita ng iyong IT admin ang lokasyon mo" "Hindi nagawa: %1$s" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 56f8447bf1..1b5f955bd6 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "İş" "Uygulama yüklü değil." "Uygulama kullanılamıyor" @@ -63,7 +62,7 @@ "Widget yüklenirken sorun oluştu" "Kurulum" "Bu bir sistem uygulamasıdır ve yüklemesi kaldırılamaz." - "Adsız Klasör" + "Adı Düzenle" "%1$s devre dışı" %1$s uygulamasının %2$d bildirimi var @@ -133,11 +132,13 @@ "Kişisel" "İş" "İş profili" - "İş uygulamalarını burada bulabilirsiniz" - "Her iş uygulamasında, uygulama güvenliğinin kuruluşunuz tarafından sağlandığını gösteren bir rozet bulunur. Daha kolay erişim için uygulamaları Ana ekranınıza taşıyın." - "Kuruluşunuz tarafından yönetiliyor" - "Bildirimler ve uygulamalar kapalı" - "Kapat" - "Kapalı" + "Kişisel uygulamalar gizli olup BT yöneticisi tarafından görülemez" + "İş uygulamaları rozetle işaretlenmiş olup BT yöneticisi tarafından görülebilir" + "İleri" + "Anladım" + "İş uygulamaları: Açık" + "İş uygulamaları: Duraklatıldı" + "İş uygulamaları duraklatıldı" + "İş bildirimlerini almazsınız ve BT yöneticiniz konumunuzu göremez" "Başarısız: %1$s" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 13ba701815..966df0baa1 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Робоча папка" "Додаток видалено." "Додаток недоступний" @@ -63,7 +62,7 @@ "Проблема із завантаженням віджета" "Налаштування" "Це системна програма, її неможливо видалити." - "Папка без назви" + "Редагувати назву" "%1$s вимкнено" Додаток %1$s має %2$d сповіщення @@ -135,11 +134,13 @@ "Особисті додатки" "Робочі додатки" "Робочий профіль" - "Робочі додатки містяться тут" - "Кожний робочий додаток має значок і перебуває під захистом організації. Перенесіть додатки на головний екран, щоб швидко запускати їх." - "Профілем керує ваша організація" - "Сповіщення та додатки вимкнено" - "Закрити" - "Закрито" + "Особисті додатки недоступні IT-адміністратору" + "Робочі додатки позначені значками й доступні IT-адміністратору" + "Далі" + "OK" + "Робочі додатки: увімкнено" + "Робочі додатки: призупинено" + "Робочі додатки призупинено" + "Ви не отримуватимете робочі сповіщення, а ваш IT-адміністратор не матиме доступу до вашого місцезнаходження" "Не вдалося %1$s" diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml index 4f776701e5..16f4ff43b5 100644 --- a/res/values-ur/strings.xml +++ b/res/values-ur/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "دفتری" "ایپ انسٹال نہیں ہے۔" "ایپ دستیاب نہیں ہے" @@ -63,7 +62,7 @@ "ویجیٹ کو لوڈ کرنے میں مسئلہ" "ترتیب دیں" "یہ ایک سسٹم ایپ ہے اور اسے اَن انسٹال نہیں کیا جا سکتا ہے۔" - "بلا نام فولڈر" + "نام میں ترمیم کریں" "%1$s غیر فعال ہے" %1$s میں%2$d اطلاعات ہیں @@ -133,11 +132,13 @@ "ذاتی" "دفتری" "دفتری پروفائل" - "یہاں دفتری ایپس تلاش کریں" - "ہر دفتری ایپ میں ایک بَیج ہوتا ہے اور اسے آپ کی تنظیم محفوظ رکھتی ہے۔ زیادہ آسان رسائی کیلئے ایپس کو اپنی ہوم اسکرین پر منتقل کریں۔" - "آپ کی تنظیم کے زیر انتظام" - "اطلاعات اور ایپس آف ہیں" - "بند کریں" - "بند" + "‏ذاتی ایپس نجی ہوتے ہیں اور IT کو دکھائے نہیں جا سکتے ہیں" + "‏ورک ایپس بیج کئے گئے ہیں اور IT کے لیے مرئی ہے" + "اگلا" + "سمجھ آ گئی" + "ورک ایپس: آن ہے" + "ورک ایپس: موقوف ہے" + "ورک ایپس موقوف ہیں" + "‏آپ کو کام کی کوئی اطلاعات موصول نہیں ہوں گی، اور آپ کے IT منتظم آپ کا مقام نہیں دیکھ سکتے ہیں" "ناکام ہو گيا: %1$s" diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml index 69084d7041..6668aa1083 100644 --- a/res/values-uz/strings.xml +++ b/res/values-uz/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Ishga oid" "Ilova o‘rnatilmadi." "Ilova mavjud emas" @@ -63,7 +62,7 @@ "Vidjetni yuklashda muammo" "Sozlash" "Bu tizim ilovasi, shuning uchun o‘chirib bo‘lmaydi." - "Nomsiz jild" + "Nomini tahrirlash" "%1$s ilovasi o‘chirib qo‘yildi" %1$s ilovasida %2$d ta bildirishnoma bor @@ -133,11 +132,13 @@ "Shaxsiy" "Ishchi" "Ishchi profil" - "Ishga oid ilovalarni shu yerdan topish mumkin" - "Nishonga ega har bir ishga oid ilova tashkilotingiz tomonidan himoyalanadi. Ishga oid ilovalarga osonroq kirish uchun ularni bosh ekranga chiqaring." - "Tashkilotingiz tomonidan boshqariladi" - "Bildirishnomalar va ilovalar faol emas" - "Yopish" - "Yopiq" + "Shaxsiy ilovalar maxfiy va AT administratori ularni koʻra olmaydi" + "Ishga oid ilovalar nishonchali va ular AT administratoriga koʻrinadi" + "Keyingisi" + "OK" + "Ishga oid ilovalar: Yoqilgan" + "Ishga oid ilovalar: Pauza qilingan" + "Ishga oid ilovalar pauza qilingan" + "Hech qanday ishga oid bildirishnomalar olmaysiz va AT administratoringiz joylashuvingizni koʻra olmaydi" "Xato: %1$s" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 71decfca68..f7ac4b499a 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -20,16 +20,15 @@ "Trình chạy 3" - "Work" "Ứng dụng chưa được cài đặt." "Ứng dụng không có sẵn" "Ứng dụng đã tải xuống bị tắt ở chế độ An toàn" - "Tiện ích con bị vô hiệu hóa ở chế độ an toàn" + "Tiện ích bị vô hiệu hóa ở chế độ an toàn" "Lối tắt không khả dụng" "Màn hình chính" "Tác vụ tùy chỉnh" - "Chạm và giữ để chọn tiện ích con." + "Chạm và giữ để chọn tiện ích." "Nhấn đúp và giữ để chọn tiện ích hoặc sử dụng tác vụ tùy chỉnh." "%1$d × %2$d" "Rộng %1$d x cao %2$d" @@ -60,10 +59,10 @@ "ghi cài đặt và lối tắt trên Màn hình chính" "Cho phép ứng dụng thay đổi cài đặt và lối tắt trên Màn hình chính." "%1$s không được phép thực hiện cuộc gọi điện thoại" - "Sự cố khi tải tiện ích con" + "Sự cố khi tải tiện ích" "Thiết lập" "Đây là ứng dụng hệ thống và không thể gỡ cài đặt." - "Thư mục chưa đặt tên" + "Chỉnh sửa tên" "Đã vô hiệu hóa %1$s" %1$s, có %2$d thông báo @@ -86,7 +85,7 @@ "Cho phép xoay Màn hình chính" "Khi xoay điện thoại" "Dấu chấm thông báo" - "Bật" + "Đang bật" "Tắt" "Cần quyền truy cập thông báo" "Để hiển thị Dấu chấm thông báo, hãy bật thông báo ứng dụng cho %1$s" @@ -133,11 +132,13 @@ "Cá nhân" "Cơ quan" "Hồ sơ công việc" - "Tìm ứng dụng công việc tại đây" - "Mỗi ứng dụng công việc đều có một huy hiệu và được tổ chức của bạn bảo mật. Bạn có thể di chuyển ứng dụng đến Màn hình chính để truy cập dễ dàng hơn." - "Do tổ chức của bạn quản lý" - "Thông báo và ứng dụng đang tắt" - "Đóng" - "Đã đóng" + "Ứng dụng cá nhân là riêng tư và quản trị viên CNTT không thể xem" + "Ứng dụng công việc được gắn huy hiệu và quản trị viên CNTT có thể xem" + "Tiếp theo" + "OK" + "Ứng dụng công việc: Đang bật" + "Ứng dụng công việc: Đã tạm dừng" + "Đã tạm dừng ứng dụng công việc" + "Bạn sẽ không nhận được bất kỳ thông báo công việc nào và quản trị viên CNTT của bạn không thấy được vị trí của bạn" "Không thực hiện được thao tác: %1$s" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 9804af1e89..f96a0aa8a3 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "Work" "未安装该应用。" "应用不可用" @@ -63,7 +62,7 @@ "加载微件时出现问题" "设置" "这是系统应用,无法卸载。" - "未命名文件夹" + "修改名称" "已停用%1$s" %1$s,有 %2$d 个通知 @@ -133,11 +132,13 @@ "个人" "工作" "工作资料" - "请在此处查找工作应用" - "每个工作应用均有一个徽标,并由贵单位负责确保其安全。请将工作应用移到主屏幕,以便轻松访问。" - "由贵单位管理" - "通知和应用均已关闭" - "关闭" - "已关闭" + "个人应用是不公开的,IT 无法查看" + "工作应用带有标志,IT 可以查看" + "继续" + "知道了" + "工作应用:已开启" + "工作应用:已暂停" + "工作应用已暂停" + "您不会收到任何工作通知,您的 IT 管理员也无法查看您的位置信息" "失败:%1$s" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index e7377440c1..454912a7df 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "工作" "尚未安裝應用程式。" "目前無法使用這個應用程式" @@ -63,7 +62,7 @@ "載入小工具時發生問題" "設定" "這是系統應用程式,無法將其解除安裝。" - "未命名的資料夾" + "編輯名稱" "「%1$s」已停用" %1$s,有 %2$d 項通知 @@ -133,11 +132,13 @@ "個人" "商務" "工作設定檔" - "請在此處尋找工作應用程式" - "每個工作應用程式都有一個徽章,並由您的機構負責保持安全。您可以將工作應用程式移至主畫面,以便輕鬆存取。" - "由您的機構管理" - "通知和應用程式已關閉" - "關閉" - "已關閉" + "個人應用程式為不公開;IT 無法看到" + "工作應用程式附有標誌;IT 可以看到" + "繼續" + "知道了" + "工作應用程式:開啟" + "工作應用程式:已暫停" + "已暫停工作應用程式" + "您將不會收到任何工作通知,而 IT 管理員也無法查看您的位置" "操作失敗:%1$s" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index e971b69f1f..7aa5f67368 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -20,7 +20,6 @@ "Launcher3" - "公司" "應用程式未安裝。" "應用程式目前無法使用" @@ -63,7 +62,7 @@ "載入小工具時發生問題" "設定" "這是系統應用程式,不可解除安裝。" - "未命名的資料夾" + "編輯名稱" "已停用 %1$s" %1$s,有 %2$d 則通知 @@ -133,11 +132,13 @@ "個人" "公司" "工作資料夾" - "在這裡尋找辦公應用程式" - "每個辦公應用程式都有徽章,並由貴機構負責管理及確保其安全。請將辦公應用程式移至主螢幕以便輕鬆存取。" - "由貴機構所管理" - "已關閉通知和應用程式" - "關閉" - "已關閉" + "個人應用程式為私人所有,IT 管理員無法查看" + "工作應用程式會加上標記,IT 管理員可以查看這類應用程式" + "繼續" + "我知道了" + "工作應用程式:已開啟" + "工作應用程式:已暫停" + "系統已暫停工作應用程式" + "你不會再收到任何工作通知,IT 管理員也無法查看你的位置資訊" "失敗:%1$s" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index b937764ace..10f01a6b57 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -62,7 +62,7 @@ "Inkinga yokulayisha iwijethi" "Ukumisa" "Lolu uhlelo lokusebenza lwesistimu futhi alikwazi ukukhishwa." - "Ifolda engenagama" + "Hlela igama" "Kukhutshaziwe %1$s" %1$s, unezaziso ezingu-%2$d @@ -132,11 +132,13 @@ "Okomuntu siqu" "Umsebenzi" "Iphrofayela yomsebenzi" - "Thola izinhlelo zokusebenza lapha" - "Uhlo lokusebenza ngalunye lomsebenzi linebheji futhi igcinwa iphephile inhlangano yakho. Hambisa izinhlelo zokusebenza esikrinini sakho sasekhaya ngokufinyelela okulula." - "Kuphethwe inhlangano yakho" - "Izaziso nezinhlelo zokusebenza kuvaliwe" - "Vala" - "Kuvaliwe" + "Izinhlelo zokusebenza zomuntu siqu ziyimfihlo futhi azikwazi ukubonwa i-IT" + "Izinhlelo zokusebenza zomsebenzi zinebheji futhi ziyabonakala ku-IT" + "Okulandelayo" + "Ngiyezwa" + "Izinhlelo zokusebenza: Zivuliwe" + "Izinhlelo zokusebenza zomsebenzi: Ziphunyuziwe" + "Izinhlelo zokusebenza zomsebenzi ziphunyuziwe" + "Ngeke uthole noma yiziphi izaziso zomsebenzi, futhi umphathi wakho we-IT akakwazi ukubona indawo yakho" "Yehlulekile: %1$s" From 9b90b1b0345ea57a6152919d318f4ce9cacd7556 Mon Sep 17 00:00:00 2001 From: Govinda Wasserman Date: Thu, 5 Mar 2020 16:50:22 -0500 Subject: [PATCH 26/41] [DO NOT MERGE] Adds fling gesture suppression to Launcher Test: Tested locally BUG: 150688842 Change-Id: Ifa96bd01363de47cf1d8cdce34d81d525c8c2c04 --- .../quickstep/TouchInteractionService.java | 17 +++++++++++++---- .../inputconsumers/AssistantTouchConsumer.java | 13 ++++++++----- .../quickstep/OverviewComponentObserver.java | 5 +++++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java index 86ba855784..3d0a7940e9 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java @@ -569,9 +569,13 @@ public class TouchInteractionService extends Service implements // not interrupt it. QuickSwitch assumes that interruption can only happen if the // next gesture is also quick switch. mUncheckedConsumer = - new AssistantTouchConsumer(this, mISystemUiProxy, + new AssistantTouchConsumer( + this, + mISystemUiProxy, mOverviewComponentObserver.getActivityControlHelper(), - InputConsumer.NO_OP, mInputMonitorCompat); + InputConsumer.NO_OP, + mInputMonitorCompat, + mOverviewComponentObserver.assistantGestureIsConstrained()); } else { mUncheckedConsumer = InputConsumer.NO_OP; } @@ -616,8 +620,13 @@ public class TouchInteractionService extends Service implements final ActivityControlHelper activityControl = mOverviewComponentObserver.getActivityControlHelper(); if (canTriggerAssistantAction(event)) { - base = new AssistantTouchConsumer(this, mISystemUiProxy, activityControl, base, - mInputMonitorCompat); + base = new AssistantTouchConsumer( + this, + mISystemUiProxy, + activityControl, + base, + mInputMonitorCompat, + mOverviewComponentObserver.assistantGestureIsConstrained()); } if ((mSystemUiStateFlags & SYSUI_STATE_SCREEN_PINNING) != 0) { diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/AssistantTouchConsumer.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/AssistantTouchConsumer.java index 346969e592..d4cdaf0403 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/AssistantTouchConsumer.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/AssistantTouchConsumer.java @@ -91,14 +91,16 @@ public class AssistantTouchConsumer extends DelegateInputConsumer { private final ISystemUiProxy mSysUiProxy; private final Context mContext; private final GestureDetector mGestureDetector; + private final boolean mIsAssistGestureConstrained; public AssistantTouchConsumer(Context context, ISystemUiProxy systemUiProxy, ActivityControlHelper activityControlHelper, InputConsumer delegate, - InputMonitorCompat inputMonitor) { + InputMonitorCompat inputMonitor, boolean isAssistGestureConstrained) { super(delegate, inputMonitor); final Resources res = context.getResources(); mContext = context; mSysUiProxy = systemUiProxy; + mIsAssistGestureConstrained = isAssistGestureConstrained; mDragDistThreshold = res.getDimension(R.dimen.gestures_assistant_drag_threshold); mFlingDistThreshold = res.getDimension(R.dimen.gestures_assistant_fling_threshold); mTimeThreshold = res.getInteger(R.integer.assistant_gesture_min_time_threshold); @@ -273,10 +275,11 @@ public class AssistantTouchConsumer extends DelegateInputConsumer { private class AssistantGestureListener extends SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { - if (isValidAssistantGestureAngle(velocityX, -velocityY) - && mDistance >= mFlingDistThreshold - && !mLaunchedAssistant - && mState != STATE_DELEGATE_ACTIVE) { + if (!mIsAssistGestureConstrained + && isValidAssistantGestureAngle(velocityX, -velocityY) + && mDistance >= mFlingDistThreshold + && !mLaunchedAssistant + && mState != STATE_DELEGATE_ACTIVE) { mLastProgress = 1; try { mSysUiProxy.onAssistantGestureCompletion( diff --git a/quickstep/src/com/android/quickstep/OverviewComponentObserver.java b/quickstep/src/com/android/quickstep/OverviewComponentObserver.java index 88a4eb6d11..93a6127ed7 100644 --- a/quickstep/src/com/android/quickstep/OverviewComponentObserver.java +++ b/quickstep/src/com/android/quickstep/OverviewComponentObserver.java @@ -22,6 +22,7 @@ import static android.content.Intent.ACTION_PACKAGE_REMOVED; import static com.android.launcher3.util.PackageManagerHelper.getPackageFilter; import static com.android.systemui.shared.system.PackageManagerWrapper.ACTION_PREFERRED_ACTIVITY_CHANGED; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_ASSIST_GESTURE_CONSTRAINED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_HOME_DISABLED; import android.content.BroadcastReceiver; @@ -107,6 +108,10 @@ public final class OverviewComponentObserver { } } + public boolean assistantGestureIsConstrained() { + return (mSystemUiStateFlags & SYSUI_STATE_ASSIST_GESTURE_CONSTRAINED) != 0; + } + /** * Update overview intent and {@link ActivityControlHelper} based off the current launcher home * component. From f3b22ffee691dca3e8a5cc3c0a1fb1d19ce8a5ad Mon Sep 17 00:00:00 2001 From: Govinda Wasserman Date: Thu, 5 Mar 2020 16:50:22 -0500 Subject: [PATCH 27/41] [DO NOT MERGE] Adds fling gesture suppression to Launcher Test: Tested locally BUG: 150688842 Change-Id: Ifa96bd01363de47cf1d8cdce34d81d525c8c2c04 (cherry picked from commit 9b90b1b0345ea57a6152919d318f4ce9cacd7556) --- .../quickstep/TouchInteractionService.java | 17 +++++++++++++---- .../inputconsumers/AssistantTouchConsumer.java | 13 ++++++++----- .../quickstep/OverviewComponentObserver.java | 5 +++++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java index f32182600a..2fa789fd6c 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java @@ -563,9 +563,13 @@ public class TouchInteractionService extends Service implements // not interrupt it. QuickSwitch assumes that interruption can only happen if the // next gesture is also quick switch. mUncheckedConsumer = - new AssistantTouchConsumer(this, mISystemUiProxy, + new AssistantTouchConsumer( + this, + mISystemUiProxy, mOverviewComponentObserver.getActivityControlHelper(), - InputConsumer.NO_OP, mInputMonitorCompat); + InputConsumer.NO_OP, + mInputMonitorCompat, + mOverviewComponentObserver.assistantGestureIsConstrained()); } else { mUncheckedConsumer = InputConsumer.NO_OP; } @@ -612,8 +616,13 @@ public class TouchInteractionService extends Service implements final ActivityControlHelper activityControl = mOverviewComponentObserver.getActivityControlHelper(); if (canTriggerAssistantAction(event)) { - base = new AssistantTouchConsumer(this, mISystemUiProxy, activityControl, base, - mInputMonitorCompat); + base = new AssistantTouchConsumer( + this, + mISystemUiProxy, + activityControl, + base, + mInputMonitorCompat, + mOverviewComponentObserver.assistantGestureIsConstrained()); } if ((mSystemUiStateFlags & SYSUI_STATE_SCREEN_PINNING) != 0) { diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/AssistantTouchConsumer.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/AssistantTouchConsumer.java index 346969e592..d4cdaf0403 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/AssistantTouchConsumer.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/AssistantTouchConsumer.java @@ -91,14 +91,16 @@ public class AssistantTouchConsumer extends DelegateInputConsumer { private final ISystemUiProxy mSysUiProxy; private final Context mContext; private final GestureDetector mGestureDetector; + private final boolean mIsAssistGestureConstrained; public AssistantTouchConsumer(Context context, ISystemUiProxy systemUiProxy, ActivityControlHelper activityControlHelper, InputConsumer delegate, - InputMonitorCompat inputMonitor) { + InputMonitorCompat inputMonitor, boolean isAssistGestureConstrained) { super(delegate, inputMonitor); final Resources res = context.getResources(); mContext = context; mSysUiProxy = systemUiProxy; + mIsAssistGestureConstrained = isAssistGestureConstrained; mDragDistThreshold = res.getDimension(R.dimen.gestures_assistant_drag_threshold); mFlingDistThreshold = res.getDimension(R.dimen.gestures_assistant_fling_threshold); mTimeThreshold = res.getInteger(R.integer.assistant_gesture_min_time_threshold); @@ -273,10 +275,11 @@ public class AssistantTouchConsumer extends DelegateInputConsumer { private class AssistantGestureListener extends SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { - if (isValidAssistantGestureAngle(velocityX, -velocityY) - && mDistance >= mFlingDistThreshold - && !mLaunchedAssistant - && mState != STATE_DELEGATE_ACTIVE) { + if (!mIsAssistGestureConstrained + && isValidAssistantGestureAngle(velocityX, -velocityY) + && mDistance >= mFlingDistThreshold + && !mLaunchedAssistant + && mState != STATE_DELEGATE_ACTIVE) { mLastProgress = 1; try { mSysUiProxy.onAssistantGestureCompletion( diff --git a/quickstep/src/com/android/quickstep/OverviewComponentObserver.java b/quickstep/src/com/android/quickstep/OverviewComponentObserver.java index 88a4eb6d11..93a6127ed7 100644 --- a/quickstep/src/com/android/quickstep/OverviewComponentObserver.java +++ b/quickstep/src/com/android/quickstep/OverviewComponentObserver.java @@ -22,6 +22,7 @@ import static android.content.Intent.ACTION_PACKAGE_REMOVED; import static com.android.launcher3.util.PackageManagerHelper.getPackageFilter; import static com.android.systemui.shared.system.PackageManagerWrapper.ACTION_PREFERRED_ACTIVITY_CHANGED; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_ASSIST_GESTURE_CONSTRAINED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_HOME_DISABLED; import android.content.BroadcastReceiver; @@ -107,6 +108,10 @@ public final class OverviewComponentObserver { } } + public boolean assistantGestureIsConstrained() { + return (mSystemUiStateFlags & SYSUI_STATE_ASSIST_GESTURE_CONSTRAINED) != 0; + } + /** * Update overview intent and {@link ActivityControlHelper} based off the current launcher home * component. From ddb08885f9d51db577aedc386cc3a90d054132b2 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Tue, 10 Mar 2020 18:25:31 -0700 Subject: [PATCH 28/41] Try orienting popup the other way if offset pushes it out of bounds orientAboutObject() currently determines whether the popup should align its left side with the icon or the right side. However, after determining this, there is an offset to ensure the popup lines up with the icon as expected, which might push it out of bounds. In that case, we fallback to centering the popup. However, there might be plenty of room on the other side, so we should just align the other direction instead. Updated the logic to do that by first trying to align left (in LTR) or right (in RTL), then trying again with the other alignment if it doesn't fit after all x calculations are made. Bug: 150644839 Change-Id: I219dae331bf790e461d91394ffe025d40ec54c9b --- .../android/launcher3/popup/ArrowPopup.java | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/com/android/launcher3/popup/ArrowPopup.java b/src/com/android/launcher3/popup/ArrowPopup.java index 1c2acfd6fc..18bc55a5ab 100644 --- a/src/com/android/launcher3/popup/ArrowPopup.java +++ b/src/com/android/launcher3/popup/ArrowPopup.java @@ -240,6 +240,17 @@ public abstract class ArrowPopup extends Abstrac * and align above if there is enough vertical space. */ protected void orientAboutObject() { + orientAboutObject(true /* allowAlignLeft */, true /* allowAlignRight */); + } + + /** + * @see #orientAboutObject() + * + * @param allowAlignLeft Set to false if we already tried aligning left and didn't have room. + * @param allowAlignRight Set to false if we already tried aligning right and didn't have room. + * TODO: Can we test this with all permutations of widths/heights and icon locations + RTL? + */ + private void orientAboutObject(boolean allowAlignLeft, boolean allowAlignRight) { measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); int width = getMeasuredWidth(); int extraVerticalSpace = mArrow.getLayoutParams().height + mArrowOffset @@ -253,14 +264,8 @@ public abstract class ArrowPopup extends Abstrac // Align left (right in RTL) if there is room. int leftAlignedX = mTempRect.left; int rightAlignedX = mTempRect.right - width; - int x = leftAlignedX; - boolean canBeLeftAligned = leftAlignedX + width + insets.left - < dragLayer.getRight() - insets.right; - boolean canBeRightAligned = rightAlignedX > dragLayer.getLeft() + insets.left; - if (!canBeLeftAligned || (mIsRtl && canBeRightAligned)) { - x = rightAlignedX; - } - mIsLeftAligned = x == leftAlignedX; + mIsLeftAligned = !mIsRtl ? allowAlignLeft : !allowAlignRight; + int x = mIsLeftAligned ? leftAlignedX : rightAlignedX; // Offset x so that the arrow and shortcut icons are center-aligned with the original icon. int iconWidth = mTempRect.width(); @@ -282,6 +287,24 @@ public abstract class ArrowPopup extends Abstrac } x += mIsLeftAligned ? xOffset : -xOffset; + // Check whether we can still align as we originally wanted, now that we've calculated x. + if (!allowAlignLeft && !allowAlignRight) { + // We've already tried both ways and couldn't make it fit. onLayout() will set the + // gravity to CENTER_HORIZONTAL, but continue below to update y. + } else { + boolean canBeLeftAligned = x + width + insets.left + < dragLayer.getRight() - insets.right; + boolean canBeRightAligned = x > dragLayer.getLeft() + insets.left; + boolean alignmentStillValid = mIsLeftAligned && canBeLeftAligned + || !mIsLeftAligned && canBeRightAligned; + if (!alignmentStillValid) { + // Try again, but don't allow this alignment we already know won't work. + orientAboutObject(allowAlignLeft && !mIsLeftAligned /* allowAlignLeft */, + allowAlignRight && mIsLeftAligned /* allowAlignRight */); + return; + } + } + // Open above icon if there is room. int iconHeight = mTempRect.height(); int y = mTempRect.top - height; From 9e19866ed86de5237ea02810e28fb56f3ab80616 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Wed, 11 Mar 2020 14:42:02 -0700 Subject: [PATCH 29/41] Only allow horizontal spring if page will change. Bug: 150876921 Change-Id: I88db4c28ec3f8213c583e8a0dcd1cce2b1fee322 --- src/com/android/launcher3/PagedView.java | 31 ++++++++++++------------ 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index a6180a6360..608d60c4ad 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -42,21 +42,6 @@ import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.Interpolator; import android.widget.ScrollView; -import com.android.launcher3.anim.Interpolators; -import com.android.launcher3.compat.AccessibilityManagerCompat; -import com.android.launcher3.config.FeatureFlags; -import com.android.launcher3.model.PagedViewOrientedState; -import com.android.launcher3.pageindicators.PageIndicator; -import com.android.launcher3.states.RotationHelper; -import com.android.launcher3.touch.PortraitPagedViewHandler; -import com.android.launcher3.touch.OverScroll; -import com.android.launcher3.touch.PagedOrientationHandler; -import com.android.launcher3.touch.PagedOrientationHandler.ChildBounds; -import com.android.launcher3.util.OverScroller; -import com.android.launcher3.util.Thunk; - -import java.util.ArrayList; - import static com.android.launcher3.compat.AccessibilityManagerCompat.isAccessibilityEnabled; import static com.android.launcher3.compat.AccessibilityManagerCompat.isObservedEventType; import static com.android.launcher3.config.FeatureFlags.QUICKSTEP_SPRINGS; @@ -65,6 +50,20 @@ import static com.android.launcher3.touch.PagedOrientationHandler.CANVAS_TRANSLA import static com.android.launcher3.touch.PagedOrientationHandler.VIEW_SCROLL_BY; import static com.android.launcher3.touch.PagedOrientationHandler.VIEW_SCROLL_TO; +import com.android.launcher3.anim.Interpolators; +import com.android.launcher3.compat.AccessibilityManagerCompat; +import com.android.launcher3.config.FeatureFlags; +import com.android.launcher3.model.PagedViewOrientedState; +import com.android.launcher3.pageindicators.PageIndicator; +import com.android.launcher3.touch.OverScroll; +import com.android.launcher3.touch.PagedOrientationHandler; +import com.android.launcher3.touch.PagedOrientationHandler.ChildBounds; +import com.android.launcher3.touch.PortraitPagedViewHandler; +import com.android.launcher3.util.OverScroller; +import com.android.launcher3.util.Thunk; + +import java.util.ArrayList; + /** * An abstraction of the original Workspace which supports browsing through a * sequential list of "pages" @@ -1515,7 +1514,7 @@ public abstract class PagedView extends ViewGrou // interpolator at zero, ie. 5. We use 4 to make it a little slower. duration = 4 * Math.round(1000 * Math.abs(distance / velocity)); - if (QUICKSTEP_SPRINGS.get()) { + if (QUICKSTEP_SPRINGS.get() && mCurrentPage != whichPage) { return snapToPage(whichPage, delta, duration, false, null, velocity * Math.signum(delta), true); } else { From 21167f01d4877d5927e4cd473cf6fcf61acc54d8 Mon Sep 17 00:00:00 2001 From: Becky Qiu Date: Thu, 5 Mar 2020 11:26:34 -0800 Subject: [PATCH 30/41] [Overview Actions] Hide other tasks for select mode UI. Test:local Bug:139828243 Change-Id: Idc9c6a0e354b9df7f48f3ce93b560fdc4999fc3a --- .../com/android/quickstep/views/RecentsView.java | 16 +++++++++++++++- .../com/android/quickstep/views/TaskView.java | 7 +++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java index f60eaa71af..8b0f138cb3 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java @@ -37,7 +37,6 @@ import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import static com.android.launcher3.util.SystemUiController.UI_STATE_OVERVIEW; import static com.android.quickstep.TaskUtils.checkCurrentOrManagedUserId; -import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.LayoutTransition; import android.animation.LayoutTransition.TransitionListener; @@ -700,6 +699,21 @@ public abstract class RecentsView extends PagedView impl return taskViewCount; } + /** + * Updates UI for a modal task, including hiding other tasks. + */ + public void updateUiForModalTask(TaskView taskView, boolean isTaskOverlayModal) { + int currentIndex = indexOfChild(taskView); + TaskView previousTask = getTaskViewAt(currentIndex - 1); + TaskView nextTask = getTaskViewAt(currentIndex + 1); + if (previousTask != null) { + previousTask.setVisibility(isTaskOverlayModal ? View.INVISIBLE : View.VISIBLE); + } + if (nextTask != null) { + nextTask.setVisibility(isTaskOverlayModal ? View.INVISIBLE : View.VISIBLE); + } + } + protected void onTaskStackUpdated() { } public void resetTaskVisuals() { diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java index abc037eb6f..0e1640edb1 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java @@ -245,6 +245,13 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { return mSnapshotView.getTaskOverlay().isOverlayModal(); } + /** Updates UI based on whether the task is modal. */ + public void updateUiForModalTask() { + if (getRecentsView() != null) { + getRecentsView().updateUiForModalTask(this, isTaskOverlayModal()); + } + } + public TaskMenuView getMenuView() { return mMenuView; } From fa617d89cece2c08c03fa7506700bed93d060cf7 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 11 Mar 2020 16:20:25 -0700 Subject: [PATCH 31/41] Using FallbackSwipeHandler in 2-button mode Bug: 151166786 Change-Id: Ia86af76c1779bafa4690e733a7e6764973c8ae0d --- .../android/quickstep/BaseSwipeUpHandler.java | 1 + .../quickstep/FallbackSwipeHandler.java | 49 +++++++++++++------ .../quickstep/TouchInteractionService.java | 23 +-------- 3 files changed, 37 insertions(+), 36 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java index 9f19bb301e..f390d0f56f 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java @@ -79,6 +79,7 @@ public abstract class BaseSwipeUpHandler 1 - UPDATE_SYSUI_FLAGS_THRESHOLD)); } + + if (!mInQuickSwitchMode && !mDeviceState.isFullyGesturalNavMode()) { + updateOverviewThresholdPassed(mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW); + } + if (mRecentsAnimationTargets != null) { applyTransformUnchecked(); } @@ -271,14 +281,25 @@ public class FallbackSwipeHandler extends BaseSwipeUpHandler flingThreshold; - if (isFling) { - mGestureState.setEndTarget(endVelocity < 0 ? HOME : LAST_TASK); - } else if (mIsMotionPaused) { - mGestureState.setEndTarget(RECENTS); + if (mDeviceState.isFullyGesturalNavMode()) { + if (isFling) { + mGestureState.setEndTarget(endVelocity < 0 ? HOME : LAST_TASK); + } else if (mOverviewThresholdPassed) { + mGestureState.setEndTarget(RECENTS); + } else { + mGestureState.setEndTarget(mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW + ? HOME + : LAST_TASK); + } } else { - mGestureState.setEndTarget(mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW - ? HOME - : LAST_TASK); + GestureEndTarget startState = mSwipeUpOverHome ? HOME : LAST_TASK; + if (isFling) { + mGestureState.setEndTarget(endVelocity < 0 ? RECENTS : startState); + } else { + mGestureState.setEndTarget(mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW + ? RECENTS + : startState); + } } } mStateCallback.setStateOnUiThread(STATE_GESTURE_COMPLETED); @@ -353,7 +374,7 @@ public class FallbackSwipeHandler extends BaseSwipeUpHandler Date: Fri, 6 Mar 2020 14:52:17 -0800 Subject: [PATCH 32/41] Removing some properties out of AnimationBuilder AnimationBuilder and PendingAnimation have similar logic. This will allow to unify the two classes Change-Id: Id8c1d8a7020d132adbccdc6c80538ed6556cb75e --- .../LauncherAppTransitionManagerImpl.java | 4 +- .../RecentsViewStateController.java | 19 +++---- .../FlingAndHoldTouchController.java | 15 ++++-- ...ButtonNavbarToOverviewTouchController.java | 4 +- .../NoButtonQuickSwitchTouchController.java | 13 +++-- .../QuickSwitchTouchController.java | 4 +- .../util/StaggeredWorkspaceAnim.java | 9 ++-- .../BaseRecentsViewStateController.java | 10 ++-- .../LandscapeEdgeSwipeController.java | 4 +- .../PortraitStatesTouchController.java | 10 ++-- .../launcher3/LauncherStateManager.java | 49 ++++++++++--------- .../launcher3/anim/AnimatorSetBuilder.java | 28 ----------- .../AbstractStateChangeTouchController.java | 18 +++---- .../touch/AllAppsSwipeController.java | 4 +- 14 files changed, 85 insertions(+), 106 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java index 7bc656a570..95198b8e36 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java @@ -20,7 +20,7 @@ import static com.android.launcher3.LauncherState.BACKGROUND_APP; import static com.android.launcher3.LauncherState.HOTSEAT_ICONS; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.OVERVIEW; -import static com.android.launcher3.LauncherStateManager.ANIM_ALL; +import static com.android.launcher3.LauncherStateManager.ANIM_ALL_COMPONENTS; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_ALL_APPS_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_HOTSEAT_SCALE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_HOTSEAT_TRANSLATE; @@ -220,7 +220,7 @@ public final class LauncherAppTransitionManagerImpl extends QuickstepAppTransiti LauncherStateManager stateManager = mLauncher.getStateManager(); return stateManager.createAtomicAnimation( stateManager.getCurrentStableState(), OVERVIEW, builder, - ANIM_ALL, ATOMIC_DURATION_FROM_PAUSED_TO_OVERVIEW); + ANIM_ALL_COMPONENTS, ATOMIC_DURATION_FROM_PAUSED_TO_OVERVIEW); } default: diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsViewStateController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsViewStateController.java index b5d84247a8..65aaf22f49 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsViewStateController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsViewStateController.java @@ -30,6 +30,7 @@ import androidx.annotation.NonNull; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.LauncherStateManager.AnimationConfig; +import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.AnimatorSetBuilder; import com.android.launcher3.anim.PropertySetter; import com.android.quickstep.views.ClearAllButton; @@ -64,20 +65,16 @@ public final class RecentsViewStateController extends @NonNull AnimatorSetBuilder builder, @NonNull AnimationConfig config) { super.setStateWithAnimationInternal(toState, builder, config); - if (!toState.overviewUi) { - builder.addOnFinishRunnable(mRecentsView::resetTaskVisuals); - } - + ValueAnimator updateAnim = ValueAnimator.ofFloat(0, 1).setDuration(config.duration); if (toState.overviewUi) { - ValueAnimator updateAnim = ValueAnimator.ofFloat(0, 1); - updateAnim.addUpdateListener(valueAnimator -> { - // While animating into recents, update the visible task data as needed - mRecentsView.loadVisibleTaskData(); - }); - updateAnim.setDuration(config.duration); - builder.play(updateAnim); + // While animating into recents, update the visible task data as needed + updateAnim.addUpdateListener(valueAnimator -> mRecentsView.loadVisibleTaskData()); mRecentsView.updateEmptyMessage(); + } else { + updateAnim.addListener( + AnimationSuccessListener.forRunnable(mRecentsView::resetTaskVisuals)); } + builder.play(updateAnim); PropertySetter propertySetter = config.getPropertySetter(builder); setAlphas(propertySetter, toState.getVisibleElements(mLauncher)); diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/FlingAndHoldTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/FlingAndHoldTouchController.java index 9cbe11acc3..b34701331e 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/FlingAndHoldTouchController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/FlingAndHoldTouchController.java @@ -21,7 +21,8 @@ import static com.android.launcher3.LauncherState.ALL_APPS; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.LauncherState.OVERVIEW_PEEK; -import static com.android.launcher3.LauncherStateManager.ATOMIC_OVERVIEW_PEEK_COMPONENT; +import static com.android.launcher3.LauncherStateManager.PLAY_ATOMIC_OVERVIEW_PEEK; +import static com.android.launcher3.LauncherStateManager.SKIP_OVERVIEW; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_ALL_APPS_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_ALL_APPS_HEADER_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_WORKSPACE_FADE; @@ -43,6 +44,7 @@ import android.view.ViewConfiguration; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAppTransitionManagerImpl; import com.android.launcher3.LauncherState; +import com.android.launcher3.LauncherStateManager.AnimationFlags; import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.AnimatorSetBuilder; import com.android.launcher3.anim.Interpolators; @@ -104,7 +106,7 @@ public class FlingAndHoldTouchController extends PortraitStatesTouchController { LauncherState toState = isPaused ? OVERVIEW_PEEK : NORMAL; long peekDuration = isPaused ? PEEK_IN_ANIM_DURATION : PEEK_OUT_ANIM_DURATION; mPeekAnim = mLauncher.getStateManager().createAtomicAnimation(fromState, toState, - new AnimatorSetBuilder(), ATOMIC_OVERVIEW_PEEK_COMPONENT, peekDuration); + new AnimatorSetBuilder(), PLAY_ATOMIC_OVERVIEW_PEEK, peekDuration); mPeekAnim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { @@ -210,7 +212,7 @@ public class FlingAndHoldTouchController extends PortraitStatesTouchController { super.onAnimationEnd(animation); if (mCancelled) { mPeekAnim = mLauncher.getStateManager().createAtomicAnimation(mFromState, - mToState, new AnimatorSetBuilder(), ATOMIC_OVERVIEW_PEEK_COMPONENT, + mToState, new AnimatorSetBuilder(), PLAY_ATOMIC_OVERVIEW_PEEK, PEEK_OUT_ANIM_DURATION); mPeekAnim.start(); } @@ -237,11 +239,14 @@ public class FlingAndHoldTouchController extends PortraitStatesTouchController { } @Override - protected void updateAnimatorBuilderOnReinit(AnimatorSetBuilder builder) { + @AnimationFlags + protected int updateAnimComponentsOnReinit(@AnimationFlags int animComponents) { if (handlingOverviewAnim()) { // We don't want the state transition to all apps to animate overview, // as that will cause a jump after our atomic animation. - builder.addFlag(AnimatorSetBuilder.FLAG_DONT_ANIMATE_OVERVIEW); + return animComponents | SKIP_OVERVIEW; + } else { + return animComponents; } } diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java index 7bae211c1a..7cebabe694 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java @@ -19,7 +19,7 @@ package com.android.launcher3.uioverrides.touchcontrollers; import static com.android.launcher3.LauncherState.HINT_STATE; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.OVERVIEW; -import static com.android.launcher3.LauncherStateManager.ATOMIC_OVERVIEW_PEEK_COMPONENT; +import static com.android.launcher3.LauncherStateManager.PLAY_ATOMIC_OVERVIEW_PEEK; import static com.android.launcher3.Utilities.EDGE_NAV_BAR; import static com.android.launcher3.anim.Interpolators.ACCEL_DEACCEL; import static com.android.launcher3.util.VibratorWrapper.OVERVIEW_HAPTIC; @@ -175,7 +175,7 @@ public class NoButtonNavbarToOverviewTouchController extends FlingAndHoldTouchCo long duration = OVERVIEW.getTransitionDuration(mLauncher); AnimatorSet anim = stateManager.createAtomicAnimation( stateManager.getState(), NORMAL, builder, - ATOMIC_OVERVIEW_PEEK_COMPONENT, duration); + PLAY_ATOMIC_OVERVIEW_PEEK, duration); anim.addListener(AnimationSuccessListener.forRunnable( () -> onSwipeInteractionCompleted(NORMAL, Touch.SWIPE))); anim.start(); diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java index 52625dc74f..81a6d9b786 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java @@ -21,13 +21,13 @@ import static com.android.launcher3.LauncherState.HOTSEAT_ICONS; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.LauncherState.QUICK_SWITCH; -import static com.android.launcher3.LauncherStateManager.ANIM_ALL; +import static com.android.launcher3.LauncherStateManager.ANIM_ALL_COMPONENTS; +import static com.android.launcher3.LauncherStateManager.SKIP_OVERVIEW; import static com.android.launcher3.anim.AlphaUpdateListener.ALPHA_CUTOFF_THRESHOLD; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_ALL_APPS_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_VERTICAL_PROGRESS; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_WORKSPACE_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_WORKSPACE_TRANSLATE; -import static com.android.launcher3.anim.AnimatorSetBuilder.FLAG_DONT_ANIMATE_OVERVIEW; import static com.android.launcher3.anim.Interpolators.ACCEL_0_75; import static com.android.launcher3.anim.Interpolators.DEACCEL; import static com.android.launcher3.anim.Interpolators.DEACCEL_5; @@ -55,8 +55,8 @@ import android.view.animation.Interpolator; import com.android.launcher3.BaseQuickstepLauncher; import com.android.launcher3.LauncherState; -import com.android.launcher3.LauncherStateManager; import com.android.launcher3.LauncherStateManager.AnimationConfig; +import com.android.launcher3.LauncherStateManager.AnimationFlags; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.allapps.AllAppsTransitionController; @@ -214,7 +214,7 @@ public class NoButtonQuickSwitchTouchController implements TouchController, nonOverviewBuilder.setInterpolator(ANIM_ALL_APPS_FADE, FADE_OUT_INTERPOLATOR); nonOverviewBuilder.setInterpolator(ANIM_WORKSPACE_TRANSLATE, TRANSLATE_OUT_INTERPOLATOR); nonOverviewBuilder.setInterpolator(ANIM_VERTICAL_PROGRESS, TRANSLATE_OUT_INTERPOLATOR); - updateNonOverviewAnim(QUICK_SWITCH, nonOverviewBuilder, ANIM_ALL); + updateNonOverviewAnim(QUICK_SWITCH, nonOverviewBuilder, ANIM_ALL_COMPONENTS); mNonOverviewAnim.dispatchOnStart(); if (mRecentsView.getTaskViewCount() == 0) { @@ -231,11 +231,10 @@ public class NoButtonQuickSwitchTouchController implements TouchController, /** Create state animation to control non-overview components. */ private void updateNonOverviewAnim(LauncherState toState, AnimatorSetBuilder builder, - @LauncherStateManager.AnimationComponents int animComponents) { - builder.addFlag(FLAG_DONT_ANIMATE_OVERVIEW); + @AnimationFlags int animComponents) { long accuracy = (long) (Math.max(mXRange, mYRange) * 2); mNonOverviewAnim = mLauncher.getStateManager().createAnimationToNewWorkspace(toState, - builder, accuracy, this::clearState, animComponents); + builder, accuracy, this::clearState, animComponents | SKIP_OVERVIEW); } private void setupOverviewAnimators() { diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java index d5b221db06..8de1b3acbe 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java @@ -17,6 +17,7 @@ package com.android.launcher3.uioverrides.touchcontrollers; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.QUICK_SWITCH; +import static com.android.launcher3.LauncherStateManager.ANIM_ALL_COMPONENTS; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_ALL_APPS_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_SCALE; @@ -39,7 +40,6 @@ import androidx.annotation.Nullable; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; -import com.android.launcher3.LauncherStateManager; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatorSetBuilder; import com.android.launcher3.touch.AbstractStateChangeTouchController; @@ -112,7 +112,7 @@ public class QuickSwitchTouchController extends AbstractStateChangeTouchControll setupInterpolators(animatorSetBuilder); long accuracy = (long) (getShiftRange() * 2); mCurrentAnimation = mLauncher.getStateManager().createAnimationToNewWorkspace(mToState, - animatorSetBuilder, accuracy, this::clearState, LauncherStateManager.ANIM_ALL); + animatorSetBuilder, accuracy, this::clearState, ANIM_ALL_COMPONENTS); mCurrentAnimation.getAnimationPlayer().addUpdateListener(valueAnimator -> { updateFullscreenProgress((Float) valueAnimator.getAnimatedValue()); }); diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java index d2805ed431..7e17fbf909 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java @@ -18,7 +18,8 @@ package com.android.quickstep.util; import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_Y; import static com.android.launcher3.LauncherState.BACKGROUND_APP; import static com.android.launcher3.LauncherState.NORMAL; -import static com.android.launcher3.LauncherStateManager.ANIM_ALL; +import static com.android.launcher3.LauncherStateManager.ANIM_ALL_COMPONENTS; +import static com.android.launcher3.LauncherStateManager.SKIP_OVERVIEW; import static com.android.launcher3.anim.Interpolators.LINEAR; import android.animation.Animator; @@ -32,7 +33,6 @@ import com.android.launcher3.CellLayout; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; -import com.android.launcher3.LauncherStateManager; import com.android.launcher3.LauncherStateManager.AnimationConfig; import com.android.launcher3.R; import com.android.launcher3.ShortcutAndWidgetContainer; @@ -143,11 +143,10 @@ public class StaggeredWorkspaceAnim { * Setup workspace with 0 duration to prepare for our staggered animation. */ private void prepareToAnimate(Launcher launcher) { - LauncherStateManager stateManager = launcher.getStateManager(); AnimatorSetBuilder builder = new AnimatorSetBuilder(); // setRecentsAttachedToAppWindow() will animate recents out. - builder.addFlag(AnimatorSetBuilder.FLAG_DONT_ANIMATE_OVERVIEW); - stateManager.createAtomicAnimation(BACKGROUND_APP, NORMAL, builder, ANIM_ALL, 0); + launcher.getStateManager().createAtomicAnimation( + BACKGROUND_APP, NORMAL, builder, ANIM_ALL_COMPONENTS | SKIP_OVERVIEW, 0); builder.build().start(); // Stop scrolling so that it doesn't interfere with the translation offscreen. diff --git a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java index 9b57fb7627..cb9e87ab08 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java @@ -20,12 +20,14 @@ import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA; import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_X; import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_Y; +import static com.android.launcher3.LauncherStateManager.PLAY_ATOMIC_OVERVIEW_PEEK; +import static com.android.launcher3.LauncherStateManager.PLAY_ATOMIC_OVERVIEW_SCALE; +import static com.android.launcher3.LauncherStateManager.SKIP_OVERVIEW; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_SCALE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_SCRIM_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_TRANSLATE_X; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_TRANSLATE_Y; -import static com.android.launcher3.anim.AnimatorSetBuilder.FLAG_DONT_ANIMATE_OVERVIEW; import static com.android.launcher3.anim.Interpolators.AGGRESSIVE_EASE_IN_OUT; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.graphics.Scrim.SCRIM_PROGRESS; @@ -86,13 +88,11 @@ public abstract class BaseRecentsViewStateController @Override public final void setStateWithAnimation(@NonNull final LauncherState toState, @NonNull AnimatorSetBuilder builder, @NonNull AnimationConfig config) { - boolean playAtomicOverviewComponent = config.playAtomicOverviewScaleComponent() - || config.playAtomicOverviewPeekComponent(); - if (!playAtomicOverviewComponent) { + if (!config.hasAnimationComponent(PLAY_ATOMIC_OVERVIEW_PEEK | PLAY_ATOMIC_OVERVIEW_SCALE)) { // The entire recents animation is played atomically. return; } - if (builder.hasFlag(FLAG_DONT_ANIMATE_OVERVIEW)) { + if (config.hasAnimationComponent(SKIP_OVERVIEW)) { return; } setStateWithAnimationInternal(toState, builder, config); diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/LandscapeEdgeSwipeController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/LandscapeEdgeSwipeController.java index 3cb00885e8..3d0fc561d1 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/LandscapeEdgeSwipeController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/LandscapeEdgeSwipeController.java @@ -9,7 +9,7 @@ import android.view.MotionEvent; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; -import com.android.launcher3.LauncherStateManager.AnimationComponents; +import com.android.launcher3.LauncherStateManager.AnimationFlags; import com.android.launcher3.touch.AbstractStateChangeTouchController; import com.android.launcher3.touch.SingleAxisSwipeDetector; import com.android.launcher3.userevent.nano.LauncherLogProto; @@ -56,7 +56,7 @@ public class LandscapeEdgeSwipeController extends AbstractStateChangeTouchContro } @Override - protected float initCurrentAnimation(@AnimationComponents int animComponent) { + protected float initCurrentAnimation(@AnimationFlags int animComponent) { float range = getShiftRange(); long maxAccuracy = (long) (2 * range); mCurrentAnimation = mLauncher.getStateManager().createAnimationToNewWorkspace(mToState, diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java index 95e38e38fd..a060d64620 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java @@ -37,7 +37,7 @@ import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; -import com.android.launcher3.LauncherStateManager.AnimationComponents; +import com.android.launcher3.LauncherStateManager.AnimationFlags; import com.android.launcher3.allapps.AllAppsTransitionController; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.AnimatorSetBuilder; @@ -207,7 +207,8 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr } @Override - protected float initCurrentAnimation(@AnimationComponents int animComponents) { + protected float initCurrentAnimation(@AnimationFlags int animComponents) { + animComponents = updateAnimComponentsOnReinit(animComponents); float range = getShiftRange(); long maxAccuracy = (long) (2 * range); @@ -218,7 +219,6 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr final AnimatorSetBuilder builder = totalShift == 0 ? new AnimatorSetBuilder() : getAnimatorSetBuilderForStates(mFromState, mToState); - updateAnimatorBuilderOnReinit(builder); cancelPendingAnim(); @@ -253,7 +253,9 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr /** * Give subclasses the chance to update the animation when we re-initialize towards a new state. */ - protected void updateAnimatorBuilderOnReinit(AnimatorSetBuilder builder) { + @AnimationFlags + protected int updateAnimComponentsOnReinit(@AnimationFlags int animComponents) { + return animComponents; } private void cancelPendingAnim() { diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java index 4267f2bd82..8233cdd20a 100644 --- a/src/com/android/launcher3/LauncherStateManager.java +++ b/src/com/android/launcher3/LauncherStateManager.java @@ -88,20 +88,22 @@ public class LauncherStateManager { // components may be run atomically - that is, all at once, instead of user-controlled. However, // atomic components are not restricted to this purpose; they can be user-controlled alongside // non atomic components as well. Note that each gesture model has exactly one atomic component, - // ATOMIC_OVERVIEW_SCALE_COMPONENT *or* ATOMIC_OVERVIEW_PEEK_COMPONENT. + // PLAY_ATOMIC_OVERVIEW_SCALE *or* PLAY_ATOMIC_OVERVIEW_PEEK. @IntDef(flag = true, value = { - NON_ATOMIC_COMPONENT, - ATOMIC_OVERVIEW_SCALE_COMPONENT, - ATOMIC_OVERVIEW_PEEK_COMPONENT, + PLAY_NON_ATOMIC, + PLAY_ATOMIC_OVERVIEW_SCALE, + PLAY_ATOMIC_OVERVIEW_PEEK, + SKIP_OVERVIEW, }) @Retention(RetentionPolicy.SOURCE) - public @interface AnimationComponents {} - public static final int NON_ATOMIC_COMPONENT = 1 << 0; - public static final int ATOMIC_OVERVIEW_SCALE_COMPONENT = 1 << 1; - public static final int ATOMIC_OVERVIEW_PEEK_COMPONENT = 1 << 2; + public @interface AnimationFlags {} + public static final int PLAY_NON_ATOMIC = 1 << 0; + public static final int PLAY_ATOMIC_OVERVIEW_SCALE = 1 << 1; + public static final int PLAY_ATOMIC_OVERVIEW_PEEK = 1 << 2; + public static final int SKIP_OVERVIEW = 1 << 3; - public static final int ANIM_ALL = NON_ATOMIC_COMPONENT | ATOMIC_OVERVIEW_SCALE_COMPONENT - | ATOMIC_OVERVIEW_PEEK_COMPONENT; + public static final int ANIM_ALL_COMPONENTS = PLAY_NON_ATOMIC | PLAY_ATOMIC_OVERVIEW_SCALE + | PLAY_ATOMIC_OVERVIEW_PEEK; private final AnimationConfig mConfig = new AnimationConfig(); private final Handler mUiHandler; @@ -311,7 +313,7 @@ public class LauncherStateManager { } public AnimatorSet createAtomicAnimation(LauncherState fromState, LauncherState toState, - AnimatorSetBuilder builder, @AnimationComponents int atomicComponent, long duration) { + AnimatorSetBuilder builder, @AnimationFlags int atomicComponent, long duration) { prepareForAtomicAnimation(fromState, toState, builder); AnimationConfig config = new AnimationConfig(); config.animComponents = atomicComponent; @@ -355,18 +357,18 @@ public class LauncherStateManager { */ public AnimatorPlaybackController createAnimationToNewWorkspace( LauncherState state, long duration) { - return createAnimationToNewWorkspace(state, duration, LauncherStateManager.ANIM_ALL); + return createAnimationToNewWorkspace(state, duration, ANIM_ALL_COMPONENTS); } public AnimatorPlaybackController createAnimationToNewWorkspace( - LauncherState state, long duration, @AnimationComponents int animComponents) { + LauncherState state, long duration, @AnimationFlags int animComponents) { return createAnimationToNewWorkspace(state, new AnimatorSetBuilder(), duration, null, animComponents); } public AnimatorPlaybackController createAnimationToNewWorkspace(LauncherState state, AnimatorSetBuilder builder, long duration, Runnable onCancelRunnable, - @AnimationComponents int animComponents) { + @AnimationFlags int animComponents) { mConfig.reset(); mConfig.userControlled = true; mConfig.animComponents = animComponents; @@ -583,7 +585,7 @@ public class LauncherStateManager { public long duration; public boolean userControlled; public AnimatorPlaybackController playbackController; - public @AnimationComponents int animComponents = ANIM_ALL; + public @AnimationFlags int animComponents = ANIM_ALL_COMPONENTS; private PropertySetter mPropertySetter; private AnimatorSet mCurrentAnimation; @@ -597,7 +599,7 @@ public class LauncherStateManager { public void reset() { duration = 0; userControlled = false; - animComponents = ANIM_ALL; + animComponents = ANIM_ALL_COMPONENTS; mPropertySetter = null; mTargetState = null; @@ -639,15 +641,18 @@ public class LauncherStateManager { } public boolean playAtomicOverviewScaleComponent() { - return (animComponents & ATOMIC_OVERVIEW_SCALE_COMPONENT) != 0; - } - - public boolean playAtomicOverviewPeekComponent() { - return (animComponents & ATOMIC_OVERVIEW_PEEK_COMPONENT) != 0; + return hasAnimationComponent(PLAY_ATOMIC_OVERVIEW_SCALE); } public boolean playNonAtomicComponent() { - return (animComponents & NON_ATOMIC_COMPONENT) != 0; + return hasAnimationComponent(PLAY_NON_ATOMIC); + } + + /** + * Returns true if the config and any of the provided component flags + */ + public boolean hasAnimationComponent(@AnimationFlags int a) { + return (animComponents & a) != 0; } } diff --git a/src/com/android/launcher3/anim/AnimatorSetBuilder.java b/src/com/android/launcher3/anim/AnimatorSetBuilder.java index cd30dea9c0..d814b19e69 100644 --- a/src/com/android/launcher3/anim/AnimatorSetBuilder.java +++ b/src/com/android/launcher3/anim/AnimatorSetBuilder.java @@ -21,7 +21,6 @@ import android.util.SparseArray; import android.view.animation.Interpolator; import java.util.ArrayList; -import java.util.List; /** * Utility class for building animator set @@ -42,36 +41,17 @@ public class AnimatorSetBuilder { public static final int ANIM_OVERVIEW_SCRIM_FADE = 11; public static final int ANIM_ALL_APPS_HEADER_FADE = 12; // e.g. predictions - public static final int FLAG_DONT_ANIMATE_OVERVIEW = 1 << 0; - protected final ArrayList mAnims = new ArrayList<>(); private final SparseArray mInterpolators = new SparseArray<>(); - private List mOnFinishRunnables = new ArrayList<>(); - private int mFlags = 0; public void play(Animator anim) { mAnims.add(anim); } - public void addOnFinishRunnable(Runnable onFinishRunnable) { - mOnFinishRunnables.add(onFinishRunnable); - } - public AnimatorSet build() { AnimatorSet anim = new AnimatorSet(); anim.playTogether(mAnims); - if (!mOnFinishRunnables.isEmpty()) { - anim.addListener(new AnimationSuccessListener() { - @Override - public void onAnimationSuccess(Animator animation) { - for (Runnable onFinishRunnable : mOnFinishRunnables) { - onFinishRunnable.run(); - } - mOnFinishRunnables.clear(); - } - }); - } return anim; } @@ -82,12 +62,4 @@ public class AnimatorSetBuilder { public void setInterpolator(int animId, Interpolator interpolator) { mInterpolators.put(animId, interpolator); } - - public void addFlag(int flag) { - mFlags |= flag; - } - - public boolean hasFlag(int flag) { - return (mFlags & flag) != 0; - } } diff --git a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java index 4e9878105d..c3664c3569 100644 --- a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java +++ b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java @@ -19,9 +19,9 @@ import static com.android.launcher3.LauncherAnimUtils.MIN_PROGRESS_TO_ALL_APPS; import static com.android.launcher3.LauncherState.ALL_APPS; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.OVERVIEW; -import static com.android.launcher3.LauncherStateManager.ANIM_ALL; -import static com.android.launcher3.LauncherStateManager.ATOMIC_OVERVIEW_SCALE_COMPONENT; -import static com.android.launcher3.LauncherStateManager.NON_ATOMIC_COMPONENT; +import static com.android.launcher3.LauncherStateManager.ANIM_ALL_COMPONENTS; +import static com.android.launcher3.LauncherStateManager.PLAY_ATOMIC_OVERVIEW_SCALE; +import static com.android.launcher3.LauncherStateManager.PLAY_NON_ATOMIC; import static com.android.launcher3.anim.Interpolators.scrollInterpolatorForVelocity; import static com.android.launcher3.config.FeatureFlags.UNSTABLE_SPRINGS; import static com.android.launcher3.util.DefaultDisplay.getSingleFrameMs; @@ -37,7 +37,7 @@ import android.view.MotionEvent; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAnimUtils; import com.android.launcher3.LauncherState; -import com.android.launcher3.LauncherStateManager.AnimationComponents; +import com.android.launcher3.LauncherStateManager.AnimationFlags; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.AnimatorPlaybackController; @@ -176,7 +176,7 @@ public abstract class AbstractStateChangeTouchController protected abstract LauncherState getTargetState(LauncherState fromState, boolean isDragTowardPositive); - protected abstract float initCurrentAnimation(@AnimationComponents int animComponents); + protected abstract float initCurrentAnimation(@AnimationFlags int animComponents); /** * Returns the container that the touch started from when leaving NORMAL state. @@ -201,10 +201,10 @@ public abstract class AbstractStateChangeTouchController mCurrentAnimation.setOnCancelRunnable(null); } int animComponents = goingBetweenNormalAndOverview(mFromState, mToState) - ? NON_ATOMIC_COMPONENT : ANIM_ALL; + ? PLAY_NON_ATOMIC : ANIM_ALL_COMPONENTS; mScheduleResumeAtomicComponent = false; if (mAtomicAnim != null) { - animComponents = NON_ATOMIC_COMPONENT; + animComponents = PLAY_NON_ATOMIC; // Control the non-atomic components until the atomic animation finishes, then control // the atomic components as well. mScheduleResumeAtomicComponent = true; @@ -215,7 +215,7 @@ public abstract class AbstractStateChangeTouchController } if (mAtomicComponentsController != null) { - animComponents &= ~ATOMIC_OVERVIEW_SCALE_COMPONENT; + animComponents &= ~PLAY_ATOMIC_OVERVIEW_SCALE; } mProgressMultiplier = initCurrentAnimation(animComponents); mCurrentAnimation.dispatchOnStart(); @@ -360,7 +360,7 @@ public abstract class AbstractStateChangeTouchController long duration) { AnimatorSetBuilder builder = getAnimatorSetBuilderForStates(fromState, targetState); return mLauncher.getStateManager().createAtomicAnimation(fromState, targetState, builder, - ATOMIC_OVERVIEW_SCALE_COMPONENT, duration); + PLAY_ATOMIC_OVERVIEW_SCALE, duration); } protected AnimatorSetBuilder getAnimatorSetBuilderForStates(LauncherState fromState, diff --git a/src/com/android/launcher3/touch/AllAppsSwipeController.java b/src/com/android/launcher3/touch/AllAppsSwipeController.java index 31a5d79fc3..8d5f33da9c 100644 --- a/src/com/android/launcher3/touch/AllAppsSwipeController.java +++ b/src/com/android/launcher3/touch/AllAppsSwipeController.java @@ -23,7 +23,7 @@ import android.view.MotionEvent; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; -import com.android.launcher3.LauncherStateManager.AnimationComponents; +import com.android.launcher3.LauncherStateManager.AnimationFlags; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; /** @@ -76,7 +76,7 @@ public class AllAppsSwipeController extends AbstractStateChangeTouchController { } @Override - protected float initCurrentAnimation(@AnimationComponents int animComponents) { + protected float initCurrentAnimation(@AnimationFlags int animComponents) { float range = getShiftRange(); long maxAccuracy = (long) (2 * range); mCurrentAnimation = mLauncher.getStateManager() From 984c01cbcda8ab31c24c6a27118d9c1934c23795 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Fri, 6 Mar 2020 15:56:46 -0800 Subject: [PATCH 33/41] Invert playNonAtomicComponent() as onlyPlayAtomicComponent() This avoids the double negative we use in a few places, so should be clearer. Also added some comments to explain what the animComponents are used for. Change-Id: Ibd25bd12efce6553b377bbd9c0651e4f4ac3e498 --- .../uioverrides/BackButtonAlphaHandler.java | 2 +- .../uioverrides/BackgroundBlurController.java | 3 +- .../BaseRecentsViewStateController.java | 4 +- .../launcher3/LauncherStateManager.java | 40 ++++++++++++++----- .../WorkspaceStateTransitionAnimation.java | 5 ++- .../allapps/AllAppsTransitionController.java | 2 +- 6 files changed, 39 insertions(+), 17 deletions(-) diff --git a/quickstep/src/com/android/launcher3/uioverrides/BackButtonAlphaHandler.java b/quickstep/src/com/android/launcher3/uioverrides/BackButtonAlphaHandler.java index 43dc882400..671aab00d9 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/BackButtonAlphaHandler.java +++ b/quickstep/src/com/android/launcher3/uioverrides/BackButtonAlphaHandler.java @@ -40,7 +40,7 @@ public class BackButtonAlphaHandler implements LauncherStateManager.StateHandler @Override public void setStateWithAnimation(LauncherState toState, AnimatorSetBuilder builder, LauncherStateManager.AnimationConfig config) { - if (!config.playNonAtomicComponent()) { + if (config.onlyPlayAtomicComponent()) { return; } diff --git a/quickstep/src/com/android/launcher3/uioverrides/BackgroundBlurController.java b/quickstep/src/com/android/launcher3/uioverrides/BackgroundBlurController.java index 9e4ada7cff..022a5f7f8a 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/BackgroundBlurController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/BackgroundBlurController.java @@ -20,6 +20,7 @@ import static com.android.launcher3.anim.Interpolators.LINEAR; import android.util.IntProperty; import android.view.View; + import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.LauncherStateManager; @@ -134,7 +135,7 @@ public class BackgroundBlurController implements LauncherStateManager.StateHandl @Override public void setStateWithAnimation(LauncherState toState, AnimatorSetBuilder builder, LauncherStateManager.AnimationConfig config) { - if (mSurface == null || !config.playNonAtomicComponent()) { + if (mSurface == null || config.onlyPlayAtomicComponent()) { return; } diff --git a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java index cb9e87ab08..94e67f06c7 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java @@ -88,11 +88,11 @@ public abstract class BaseRecentsViewStateController @Override public final void setStateWithAnimation(@NonNull final LauncherState toState, @NonNull AnimatorSetBuilder builder, @NonNull AnimationConfig config) { - if (!config.hasAnimationComponent(PLAY_ATOMIC_OVERVIEW_PEEK | PLAY_ATOMIC_OVERVIEW_SCALE)) { + if (!config.hasAnimationFlag(PLAY_ATOMIC_OVERVIEW_PEEK | PLAY_ATOMIC_OVERVIEW_SCALE)) { // The entire recents animation is played atomically. return; } - if (config.hasAnimationComponent(SKIP_OVERVIEW)) { + if (config.hasAnimationFlag(SKIP_OVERVIEW)) { return; } setStateWithAnimationInternal(toState, builder, config); diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java index 8233cdd20a..04134f29aa 100644 --- a/src/com/android/launcher3/LauncherStateManager.java +++ b/src/com/android/launcher3/LauncherStateManager.java @@ -313,10 +313,10 @@ public class LauncherStateManager { } public AnimatorSet createAtomicAnimation(LauncherState fromState, LauncherState toState, - AnimatorSetBuilder builder, @AnimationFlags int atomicComponent, long duration) { + AnimatorSetBuilder builder, @AnimationFlags int animFlags, long duration) { prepareForAtomicAnimation(fromState, toState, builder); AnimationConfig config = new AnimationConfig(); - config.animComponents = atomicComponent; + config.mAnimFlags = animFlags; config.duration = duration; for (StateHandler handler : mLauncher.getStateManager().getStateHandlers()) { handler.setStateWithAnimation(toState, builder, config); @@ -371,7 +371,7 @@ public class LauncherStateManager { @AnimationFlags int animComponents) { mConfig.reset(); mConfig.userControlled = true; - mConfig.animComponents = animComponents; + mConfig.mAnimFlags = animComponents; mConfig.duration = duration; mConfig.playbackController = AnimatorPlaybackController.wrap( createAnimationToNewWorkspaceInternal(state, builder, null), duration) @@ -585,7 +585,7 @@ public class LauncherStateManager { public long duration; public boolean userControlled; public AnimatorPlaybackController playbackController; - public @AnimationFlags int animComponents = ANIM_ALL_COMPONENTS; + private @AnimationFlags int mAnimFlags = ANIM_ALL_COMPONENTS; private PropertySetter mPropertySetter; private AnimatorSet mCurrentAnimation; @@ -599,7 +599,7 @@ public class LauncherStateManager { public void reset() { duration = 0; userControlled = false; - animComponents = ANIM_ALL_COMPONENTS; + mAnimFlags = ANIM_ALL_COMPONENTS; mPropertySetter = null; mTargetState = null; @@ -640,19 +640,39 @@ public class LauncherStateManager { mCurrentAnimation.addListener(this); } + /** + * @return Whether Overview is scaling as part of this animation. If this is the only + * component (i.e. NON_ATOMIC_COMPONENT isn't included), then this scaling is happening + * atomically, rather than being part of a normal state animation. StateHandlers can use + * this to designate part of their animation that should scale with Overview. + */ public boolean playAtomicOverviewScaleComponent() { - return hasAnimationComponent(PLAY_ATOMIC_OVERVIEW_SCALE); + return hasAnimationFlag(PLAY_ATOMIC_OVERVIEW_SCALE); } - public boolean playNonAtomicComponent() { - return hasAnimationComponent(PLAY_NON_ATOMIC); + /** + * @return Whether this animation will play atomically at the same time as a different, + * user-controlled state transition. StateHandlers, which contribute to both animations, can + * use this to avoid animating the same properties in both animations, since they'd conflict + * with one another. + */ + public boolean onlyPlayAtomicComponent() { + return getAnimComponents() == PLAY_ATOMIC_OVERVIEW_SCALE + || getAnimComponents() == PLAY_ATOMIC_OVERVIEW_PEEK; } /** * Returns true if the config and any of the provided component flags */ - public boolean hasAnimationComponent(@AnimationFlags int a) { - return (animComponents & a) != 0; + public boolean hasAnimationFlag(@AnimationFlags int a) { + return (mAnimFlags & a) != 0; + } + + /** + * @return Only the flags that determine which animation components to play. + */ + public @AnimationFlags int getAnimComponents() { + return mAnimFlags & ANIM_ALL_COMPONENTS; } } diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java index 388d07486d..6653426b91 100644 --- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java +++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java @@ -120,7 +120,7 @@ public class WorkspaceStateTransitionAnimation { hotseatIconsAlpha, fadeInterpolator); } - if (!config.playNonAtomicComponent()) { + if (config.onlyPlayAtomicComponent()) { // Only the alpha and scale, handled above, are included in the atomic animation. return; } @@ -175,7 +175,8 @@ public class WorkspaceStateTransitionAnimation { float pageAlpha = pageAlphaProvider.getPageAlpha(childIndex); int drawableAlpha = Math.round(pageAlpha * (state.hasWorkspacePageBackground ? 255 : 0)); - if (config.playNonAtomicComponent()) { + if (!config.onlyPlayAtomicComponent()) { + // Don't update the scrim during the atomic animation. propertySetter.setInt(cl.getScrimBackground(), DRAWABLE_ALPHA, drawableAlpha, ZOOM_OUT); } diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index 0e60f5bda8..744f4eb96b 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -162,7 +162,7 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil return; } - if (!config.playNonAtomicComponent()) { + if (config.onlyPlayAtomicComponent()) { // There is no atomic component for the all apps transition, so just return early. return; } From b9ec9319c5534cf6ebd8df2ee1144e1ebb477c33 Mon Sep 17 00:00:00 2001 From: Vinit Nayak Date: Wed, 4 Mar 2020 12:05:28 -0800 Subject: [PATCH 34/41] Add fixed_rotation_transform to home settings This sets the feature flag on launcher side and also updates the setting in Settings.Global Launcher DOES NOT listen to the Settings.Global change from adb anymore. This should take preference over setting it from command line. Also fix a related swipe to home animation bug that happened w/ merge conflict. Fixes: 150260456 Test: Set and unset, visually verified behavior. Tested w/ autorotate on and off. Checked Settings.Global value correctly updated via "adb shell settings get global fixed_rotation_transform" TODO: Update tests to reflect this new default-on fixed rotation behavior. Change-Id: Id95f006eb1e92a59e24b05567298fd21b1409b13 --- AndroidManifest-common.xml | 4 +- quickstep/AndroidManifest.xml | 1 + .../android/quickstep/BaseSwipeUpHandler.java | 8 +- .../quickstep/TouchInteractionService.java | 6 +- .../quickstep/views/LauncherRecentsView.java | 4 +- .../android/quickstep/views/RecentsView.java | 12 ++- .../OrientationTouchTransformer.java | 14 ++- .../RecentsAnimationDeviceState.java | 56 ++++++---- src/com/android/launcher3/PagedView.java | 4 - src/com/android/launcher3/Utilities.java | 16 +-- .../launcher3/config/FeatureFlags.java | 6 ++ .../model/PagedViewOrientedState.java | 22 ++-- .../launcher3/states/RotationHelper.java | 100 ++++++++++++------ 13 files changed, 162 insertions(+), 91 deletions(-) diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml index 6d105ac4fc..c7a02536d2 100644 --- a/AndroidManifest-common.xml +++ b/AndroidManifest-common.xml @@ -46,7 +46,9 @@ - + + + 3dp diff --git a/res/values/styles.xml b/res/values/styles.xml index cee268b28d..bc6ab45920 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -225,6 +225,7 @@