diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000000..0aa4d36bb9c --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +open_collective: lawnchair diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6544213bfe1..3889360ed6f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,10 +38,9 @@ jobs: with: distribution: 'zulu' java-version: 21 - - uses: gradle/actions/setup-gradle@v3 + - uses: gradle/actions/setup-gradle@v4 with: cache-encryption-key: Da25KUVSE5jbGds2zXmfXw== - gradle-home-cache-cleanup: true - name: Write sign info if: github.repository_owner == 'LawnchairLauncher' run: | @@ -70,9 +69,7 @@ jobs: with: distribution: 'zulu' java-version: 21 - - uses: gradle/actions/setup-gradle@v3 - with: - gradle-home-cache-cleanup: true + - uses: gradle/actions/setup-gradle@v4 - run: ./gradlew spotlessCheck send-notifications: diff --git a/.github/workflows/release_update.yml b/.github/workflows/release_update.yml index 67498417f69..d92eb5a1cd3 100644 --- a/.github/workflows/release_update.yml +++ b/.github/workflows/release_update.yml @@ -31,9 +31,7 @@ jobs: with: distribution: 'zulu' java-version: 21 - - uses: gradle/actions/setup-gradle@v3 - with: - gradle-home-cache-cleanup: true + - uses: gradle/actions/setup-gradle@v4 - name: Write sign info id: sign-release-apk if: github.repository_owner == 'LawnchairLauncher' @@ -71,7 +69,7 @@ jobs: uses: softprops/action-gh-release@v2 with: tag_name: ${{ github.event.inputs.tagName }} - prerelease: ${{ github.events.inputs.prerelease }} + prerelease: ${{ github.event.inputs.prerelease }} draft: true body_path: ${{ github.workspace }}/GITHUB_CHANGELOG.md files: artifacts/release-apk/${{ github.event.inputs.artifactName }} diff --git a/baseline-profile/build.gradle b/baseline-profile/build.gradle index cd04c10ca83..adf6c9eda6d 100644 --- a/baseline-profile/build.gradle +++ b/baseline-profile/build.gradle @@ -40,8 +40,8 @@ baselineProfile { } dependencies { - implementation 'androidx.test.ext:junit:1.1.5' - implementation 'androidx.test.espresso:espresso-core:3.5.1' + implementation 'androidx.test.ext:junit:1.2.1' + implementation 'androidx.test.espresso:espresso-core:3.6.1' implementation 'androidx.test.uiautomator:uiautomator:2.3.0' implementation 'androidx.benchmark:benchmark-macro-junit4:1.2.4' } diff --git a/build.gradle b/build.gradle index b1346a3ff4d..6851a59b2f1 100644 --- a/build.gradle +++ b/build.gradle @@ -3,15 +3,15 @@ import com.android.build.gradle.api.AndroidBasePlugin import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { - id 'com.android.application' version "8.5.0" - id 'com.android.library' version "8.5.0" apply false - id 'com.android.test' version '8.5.0' apply false + id 'com.android.application' version "8.5.2" + id 'com.android.library' version "8.5.2" apply false + id 'com.android.test' version '8.5.2' apply false id 'androidx.baselineprofile' version '1.2.4' - id 'org.jetbrains.kotlin.android' version "2.0.0" - id 'org.jetbrains.kotlin.plugin.compose' version "2.0.0" - id 'org.jetbrains.kotlin.plugin.parcelize' version "2.0.0" - id 'org.jetbrains.kotlin.plugin.serialization' version "2.0.0" - id "com.google.devtools.ksp" version "2.0.0-1.0.22" + id 'org.jetbrains.kotlin.android' version "2.0.10" + id 'org.jetbrains.kotlin.plugin.compose' version "2.0.10" + id 'org.jetbrains.kotlin.plugin.parcelize' version "2.0.10" + id 'org.jetbrains.kotlin.plugin.serialization' version "2.0.10" + id "com.google.devtools.ksp" version "2.0.10-1.0.24" id 'com.google.protobuf' version "0.9.4" id 'app.cash.licensee' version "1.11.0" id 'dev.rikka.tools.refine' version "4.4.0" @@ -42,7 +42,7 @@ allprojects { } plugins.withId('com.google.protobuf') { - def protocVersion = '4.27.1' + def protocVersion = '4.27.3' protobuf { // Configure the protoc executable protoc { @@ -78,7 +78,7 @@ allprojects { ext { FRAMEWORK_PREBUILTS_DIR = "$rootDir/prebuilts/libs" - daggerVersion = '2.51.1' + daggerVersion = '2.52' addFrameworkJar = { String name -> def frameworkJar = new File(FRAMEWORK_PREBUILTS_DIR, name) @@ -164,7 +164,6 @@ android { buildFeatures { aidl true buildConfig true - compose true resValues true } @@ -360,7 +359,7 @@ dependencies { implementation "androidx.preference:preference-ktx:1.2.1" implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1' - implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.0' + implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1' implementation "org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7" implementation 'com.github.ChickenHook:RestrictionBypass:2.2' implementation 'dev.rikka.tools.refine:runtime:4.4.0' @@ -375,12 +374,12 @@ dependencies { implementation "androidx.compose.material:material-icons-extended" implementation "androidx.compose.material:material" implementation "androidx.compose.runtime:runtime-livedata" - implementation 'androidx.compose.material3:material3:1.3.0-beta03' - implementation 'androidx.compose.material3:material3-window-size-class:1.3.0-beta03' + implementation 'androidx.compose.material3:material3:1.3.0-beta05' + implementation 'androidx.compose.material3:material3-window-size-class:1.3.0-beta05' implementation "androidx.constraintlayout:constraintlayout:2.1.4" - implementation "androidx.activity:activity-compose:1.9.0" - implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.8.2" - implementation "androidx.navigation:navigation-compose:2.8.0-beta03" + implementation "androidx.activity:activity-compose:1.9.1" + implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.8.4" + implementation "androidx.navigation:navigation-compose:2.8.0-beta07" implementation "androidx.palette:palette-ktx:1.0.0" implementation "androidx.slice:slice-core:1.1.0-alpha02" def accompanistVersion = '0.34.0' @@ -390,7 +389,7 @@ dependencies { implementation "com.google.android.material:material:1.12.0" implementation "io.github.fornewid:material-motion-compose-core:1.2.1" implementation 'dev.kdrag0n:colorkt:1.0.5' - implementation 'io.coil-kt:coil-compose:2.6.0' + implementation 'io.coil-kt:coil-compose:2.7.0' implementation 'me.xdrop:fuzzywuzzy:1.4.0' def optoVersion = "1.0.18" implementation "com.patrykmichalik.opto:domain:$optoVersion" @@ -406,17 +405,22 @@ dependencies { implementation "androidx.room:room-ktx:$roomVersion" ksp "androidx.room:room-compiler:$roomVersion" - implementation "com.github.topjohnwu.libsu:service:5.3.0" + implementation "com.github.topjohnwu.libsu:service:6.0.0" // Persian Date implementation 'com.github.samanzamani:PersianDate:1.7.1' - implementation 'com.airbnb.android:lottie:6.4.1' + implementation 'com.airbnb.android:lottie:6.5.0' + + // Compose drag and drop library + implementation 'sh.calvin.reorderable:reorderable:2.3.0' // Smartspacer - implementation('com.kieronquinn.smartspacer:sdk-client:1.0.10') { + implementation('com.kieronquinn.smartspacer:sdk-client:1.0.11') { exclude group: "com.github.skydoves", module: "balloon" } + + implementation("com.github.android:renderscript-intrinsics-replacement-toolkit:b6363490c3") } ksp { @@ -434,7 +438,7 @@ spotless { kotlin { target("lawnchair/src/**/*.kt") ktlint().customRuleSets([ - "io.nlopez.compose.rules:ktlint:0.4.4", + "io.nlopez.compose.rules:ktlint:0.4.10", ]).editorConfigOverride([ "ktlint_compose_compositionlocal-allowlist": "disabled", ]) @@ -445,6 +449,8 @@ licensee { allow("Apache-2.0") allow("BSD-3-Clause") allow("GPL-2.0-or-later") + allowDependency("com.github.topjohnwu.libsu", "core", "6.0.0") + allowDependency("com.github.topjohnwu.libsu", "service", "6.0.0") allowUrl("https://github.com/patrykmichalik/opto/blob/master/LICENSE") allowUrl("https://github.com/RikkaApps/HiddenApiRefinePlugin/blob/main/LICENSE") allowUrl("https://opensource.org/licenses/mit-license.php") diff --git a/compatLib/compatLibVS/src/main/java/app/lawnchair/compatlib/twelve/QuickstepCompatFactoryVS.java b/compatLib/compatLibVS/src/main/java/app/lawnchair/compatlib/twelve/QuickstepCompatFactoryVS.java index c8a56869e19..0683015b2fc 100644 --- a/compatLib/compatLibVS/src/main/java/app/lawnchair/compatlib/twelve/QuickstepCompatFactoryVS.java +++ b/compatLib/compatLibVS/src/main/java/app/lawnchair/compatlib/twelve/QuickstepCompatFactoryVS.java @@ -30,11 +30,7 @@ public ActivityOptionsCompat getActivityOptionsCompat() { @NonNull @Override public RemoteTransitionCompat getRemoteTransitionCompat() { - try { - return this::createRemoteTransition; - } catch (Throwable t) { - return super.getRemoteTransitionCompat(); - } + return this::createRemoteTransition; } // TODO remove this as it causing glitches on first launch opening/closing app @@ -51,7 +47,8 @@ private RemoteTransition createRemoteTransition( | InstantiationException | InvocationTargetException | NoSuchMethodException e) { - throw new RuntimeException("Error creating RemoteTransitionCompat" + debugName, e); + return super.getRemoteTransitionCompat() + .getRemoteTransition(remoteTransition, appThread, debugName); } } } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e6441136f3d..2c3521197d7 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8a1f6b97f47..68e8816d71c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=a4b4158601f8636cdeeab09bd76afb640030bb5b144aafe261a5e8af027dc612 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionSha256Sum=d725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index b740cf13397..f5feea6d6b1 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 25da30dbdee..9d21a21834d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/lawnchair/AndroidManifest.xml b/lawnchair/AndroidManifest.xml index e7de5f4cb3b..5d56727bb4b 100644 --- a/lawnchair/AndroidManifest.xml +++ b/lawnchair/AndroidManifest.xml @@ -25,6 +25,7 @@ + diff --git a/lawnchair/res/drawable-ru/ic_yandex.xml b/lawnchair/res/drawable-ru/ic_yandex.xml new file mode 100644 index 00000000000..c03bd29faae --- /dev/null +++ b/lawnchair/res/drawable-ru/ic_yandex.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/lawnchair/res/drawable-ru/ic_yandex_tinted.xml b/lawnchair/res/drawable-ru/ic_yandex_tinted.xml new file mode 100644 index 00000000000..40cf7520cbc --- /dev/null +++ b/lawnchair/res/drawable-ru/ic_yandex_tinted.xml @@ -0,0 +1,9 @@ + + + diff --git a/lawnchair/res/drawable/ic_yandex.xml b/lawnchair/res/drawable/ic_yandex.xml new file mode 100644 index 00000000000..c8346e2ee4e --- /dev/null +++ b/lawnchair/res/drawable/ic_yandex.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/lawnchair/res/drawable/ic_yandex_tinted.xml b/lawnchair/res/drawable/ic_yandex_tinted.xml new file mode 100644 index 00000000000..b66d4e81760 --- /dev/null +++ b/lawnchair/res/drawable/ic_yandex_tinted.xml @@ -0,0 +1,9 @@ + + + diff --git a/lawnchair/res/layout/search_container_all_apps.xml b/lawnchair/res/layout/search_container_all_apps.xml index 7ea5ae5e2d0..9966792c6dc 100644 --- a/lawnchair/res/layout/search_container_all_apps.xml +++ b/lawnchair/res/layout/search_container_all_apps.xml @@ -16,6 +16,7 @@ - + android:layout_gravity="bottom|end|center" + android:clipToPadding="false" + android:orientation="horizontal" + tools:ignore="RtlSymmetry"> + + + + + + + + diff --git a/lawnchair/res/values-af-rZA/strings.xml b/lawnchair/res/values-af-rZA/strings.xml index dcb282b4d72..c1d298a25ac 100644 --- a/lawnchair/res/values-af-rZA/strings.xml +++ b/lawnchair/res/values-af-rZA/strings.xml @@ -221,9 +221,20 @@ Donker Stelsel Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Kleure Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-am-rET/strings.xml b/lawnchair/res/values-am-rET/strings.xml index ffebbd27f2e..5b1a8bbc40a 100644 --- a/lawnchair/res/values-am-rET/strings.xml +++ b/lawnchair/res/values-am-rET/strings.xml @@ -221,9 +221,20 @@ Dark System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colors Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-ar-rSA/strings.xml b/lawnchair/res/values-ar-rSA/strings.xml index 4baaa1331d2..0bd1b8c00fa 100644 --- a/lawnchair/res/values-ar-rSA/strings.xml +++ b/lawnchair/res/values-ar-rSA/strings.xml @@ -23,7 +23,7 @@ --> معاينة إنشاء - Backup + نسخ احتياطي استعادة حذف إعادة ضبط @@ -31,19 +31,19 @@ قُفْل تطبيق تخصيص - Always - Never + دائماً + أبداً الحافظة - Copy link + نسخ الرابط نسخ لصق يتم التحميل… يدار بواسطة Lawnchair التفضيلات - Home settings - System settings - Change settings + إعدادات الصفحة الرئيسية + إعدادات النظام + تغيير الإعدادات - خلفية الخلفية - Background opacity + الخلفية + شفافية الخلفية - Copied to clipboard + تم النسخ إلى الحافظة تم إزالة العنصر - What to show + ماذا يُعرض - To lock your phone when performing a gesture, Lawnchair requires accessibility access.\n\nLawnchair doesn\'t watch any user action, though the privilege to do so is required for all accessibility services. Lawnchair discards any event sent by the system.\n\nIn order to lock your phone, Lawnchair uses the performGlobalAction Accessibility service. - %1$d x %2$d - %s & %s + لقفل هاتفك عند تنفيذ إيماءة، يتطلب Lawnchair الوصول إلى إمكانية الوصول.\n\nLawnchair لا يراقب أي إجراء للمستخدم، رغم أن الصلاحية للقيام بذلك مطلوبة لجميع خدمات إمكانية الوصول. يقوم Lawnchair بالتخلص من أي حدث يتم إرساله بواسطة النظام.\n\nلقفل هاتفك، يستخدم Lawnchair خدمة إمكانية الوصول لتنفيذ الإجراء العالمي. + 18. %1$d x %2$d + 19. %s & %s الإعدادات عام - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + الألوان، حزم الأيقونات، نقاط الإشعارات + الشاشة الرئيسية + الموجز، الشبكة، الأيقونات المرسى - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + شريط البحث، عدد الأيقونات + درج التطبيقات + التطبيقات المخفية، عدد الأعمدة، الأيقونات + بحث الدرج + اقتراحات الويب، البحث العالمي المجلدات - Row and column count + عدد الصفوف والأعمدة الإيماءات - Taps and swipes + النقرات والسحب مؤخَرًا - Clear All button, corner radius + زر \"مسح الكل\"، نصف قطر الزاوية حول التطبيق - App info + معلومات التطبيق إعادة تشغيل Lawnchair - Experimental features + الميزات التجريبية - Font customization + تخصيص الخط لا يزال بعض النص دون تغيير - At a Glance calendar customization + تخصيص تقويم اللمحة السريعة السماح بعرض التاريخ في أنظمة التقويم غير الميلادي - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + زيادة حد حجم الشبكة القصوى + زيادة الحجم الأقصى المسموح به لشبكة الشاشة الرئيسية من 10 x 10 إلى 20 x 20 + إعادة تحميل الأيقونات دائماً تجنب استخدام الأيقونات المخزنة مؤقتًا من حزم الأيقونات - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + قفل/فتح + منع إغلاق التطبيق المحدد عند الضغط على \"مسح الكل\" - To access shortcuts and additional features, set Lawnchair as your default launcher - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other - صَلاحِيَة الوصول إلى الإشعارات مطلوبة - To show Notification Dots, turn on app notifications for %1$s + للوصول إلى الاختصارات والميزات الإضافية، عيّن Lawnchair كمشغل افتراضي + نقاط الإشعارات + عرض عداد الإشعارات + لون نقطة الإشعار + لون عداد الإشعارات + تحذير: لا يوجد تباين كاف بين لون نقطة الإشعار وعداد الإشعارات + تحذير: قد لا يكون هناك دائمًا تباين كافٍ بين لون نقطة الإشعار وعداد الإشعارات + َلاحِيَة الوصول إلى الإشعارات مطلوبة + لعرض نقاط الإشعارات، قم بتشغيل إشعارات التطبيقات لـ %1$s - Icon style - Icon shape - Icon size - Show labels - Label size - Use multiple lines + نمط الأيقونة + شكل الأيقونة + حجم الأيقونة + عرض العلامات + حجم العلامة + استخدام خطوط متعددة - Transparent themed icons + أيقونات ذات خلفية شفافة استخدم خلفيه شفافه مع تغير مظهر الأيقونات - Auto-adaptive icons - For all non-adaptive icons - Background lightness - Use 100% background lightness for white - Reset custom icons + أيقونات متكيفة تلقائيًا + لجميع الأيقونات غير المتكيفة + خفة الخلفية + استخدم 100٪ خفة الخلفية للون الأبيض + إعادة تعيين الأيقونات المخصصة سيتم إعادة تعيين جميع الأيقونات المخصصة. هل تريد المتابعة؟ الأيقونات - Reset to default - Open external picker - Pick icon from - Couldn\'t load more icons + إعادة تعيين إلى الافتراضي + فتح منتقي خارجي + اختر الأيقونة من + تعذر تحميل المزيد من الأيقونات - نظام + تابع النظام دائرة - أسطوانة + سطوانة ماسي بيضة أيفون ثماني الشكل نظام سامسونج - Rounded square - Sharp square + مربع مستدير + مربع حاد مربع سوكلي دمعة - Custom icon shape - Create custom icon shape - Edit custom icon shape - Corner shape + شكل أيقونة مخصص + إنشاء شكل أيقونة مخصص + تحرير شكل أيقونة مخصص + شكل الزاوية دائري سلاسة - اقطع - Top left - Top right - Bottom left - Bottom right - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + قطع + أعلى اليسار + أعلى اليمين + الأسفل يسار + الأسفل يمين + تصدير إلى الحافظة + استيراد من الحافظة + الحافظة لا تحتوي على شكل أيقونة صالح - Icon pack - Themed icon source - System icons - Themed icons + حزمة الأيقونات + مصدر الأيقونات المخصصة + أيقونات النظام + الأيقونات المخصصة معطل - Home screen - Home screen & app drawer - لا يوجد حزم أيقونات مدعومة + الشاشة الرئيسية + الشاشة الرئيسية ودرج التطبيقات + لا توجد حزم أيقونات مدعومة - Add fonts - OTF and TTF fonts are supported + إضافة خطوط + الخطوط بنوعي OTF وTTF مدعومة لم يتم العثور على الخط - Font (experimental) + الخط (تجريبي) عام عناوين - Headings (medium) + عناوين (متوسط) جسم - Body (medium) + جسم (متوسط) مائل رفيع - Extra light - الوضع الفاتح + خفيف جداً + خفيف عادي متوسط نصف غامق غامق - Extra bold + غامق جداً أسود - Theme + الثيم الوضع الفاتح الوضع الداكن نظام - Match wallpaper + مطابقة خلفية الشاشة + + نمط اللون + Spritz + بقعة نغمية + نابض بالحياة + معبر + قوس قزح + سلطة فواكه + محتوى + أحادي اللون الألوان - Accent color - الحوامل + لون التمييز + Stroke color + عينات RGB الأحمر الأخضر الأزرق ح س ب - مسحة + الدرجة التشبع السطوع - عرافة - الشرائح - Invalid color + سداسي عشري + محددات اللون + لون غير صالح جار الشحن تم الشحن - Battery low + البطارية منخفضة "%1$d%% — ممتلئ في %2$s" - اللمحة - What to show + لمحة + ماذا تعرض التقويم - Date & time + التاريخ والوقت التاريخ الوقت - Time format - Follow system - 12-hour format - 24-hour format + تنسيق الوقت + مطابقة نظام + تنسيق 12 ساعة + تنسيق 24 ساعة الطقس - Battery status - مشغل الموسيقي اللحظي + حالة البطارية + التشغيل الحالي - Tap to set up + اضغط للإعداد لاستخدام <xliff:g مثال="مزودى" الهويه الشخصيه="اسم المزود">%1$s</xliff:g>، تمكين نِقَاط الإشعار. - Show on home screen - At a Glance can be manually added to the home screen by placing the Lawnchair widget + عرض على الشاشة الرئيسية + يمكنك إضافة لمحة يدوياً إلى الشاشة الرئيسية عن طريق وضع ويدجيت Lawnchair - At a Glance provider + مزود لمحة جوجل بحث جوجل @@ -286,12 +297,12 @@ --> الأخبار الدعم - منتج - Design & development + المنتج + التصميم والتطوير التطوير - QuickSwitch maintenance + صيانة QuickSwitch DevOps - الدعم & و العلاقات العامة + الدعم والعلاقات العامة الشكر والتقدير ترجمة - Create backup - What to back up - Layout and settings - خلفية الخلفية - Backup created - Failed to create backup - Restore backup - What to restore - Backup restored - Failed to restore backup - Invalid backup file + إنشاء نسخة احتياطية + ماذا يتم نسخه احتياطياً + التخطيط والإعدادات + خلفية الشاشة + تم إنشاء النسخة الاحتياطية + فشل في إنشاء النسخة الاحتياطية + استعادة النسخة الاحتياطية + ماذا يتم استعادته + تم استعادة النسخة الاحتياطية + فشل في استعادة النسخة الاحتياطية + ملف نسخة احتياطية غير صالح - Double tap - Swipe up - Swipe down - Home button - Back button - Do nothing + النقر المزدوج + التمرير لأعلى + التمرير لأسفل + زر الصفحة الرئيسية + زر العودة + لا تفعل شيئاً السكون - Open notification panel - Open app + فتح لوحة الإشعارات + فتح التطبيق فتح %1$s - Open app drawer - Open app search - Open search - Pick app - Admin permissions required - To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" + فتح قائمة التطبيقات + فتح بحث التطبيق + فتح البحث + اختر التطبيق + أذونات المشرف مطلوبة + لاستخدام النقرة المزدوجة لإطفاء الشاشة، عيّن Lawnchair كتطبيق مشرف للجهاز. انقر على فتح الإعدادات، ثم انقر على \"فعِّل التطبيق كمشرف على الجهاز.\" Double Tap to Sleep will be disabled. - Turn on accessibility service - To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" - Open settings + تشغيل خدمة الوصول + لاستخدام الضغط المزدوج لإغلاق الشاشة، قم بتشغيل خدمة الوصول إلى Lawnchair. اضغط على \"فتح الإعدادات\" ثم قم باختيار \"Lawnchair\" وفعِّل \"استخدم Lawnchair\" + فتح الإعدادات - Lawnchair bug report - %1$s crashed - Upload crash log + تقرير خطأ Lawnchair + %1$s تعطل + تحميل سجل التعطل فشل التحميل جارٍ التحميل… - Bug reports - Upload status - %d new reports - Multiple new reports + تقارير الأخطاء + حالة التحميل + %d تقارير جديدة + تقارير جديدة متعددة - Home screen rotation - Allow home screen rotation when device is rotated - Add new apps to home screen - Show feed + تدوير الشاشة الرئيسية + السماح بتدوير الشاشة الرئيسية عند تدوير الجهاز + Enable wallpaper blur + Blur intensity + Factor threshold + إضافة التطبيقات الجديدة إلى الشاشة الرئيسية + إظهار الموجز لا توجد تطبيقات عرض موجز مثبتة الموجز - Feed provider - Scroll wallpaper - Wallpaper depth effect - Zoom in and out of the wallpaper when transitioning between areas of the launcher - Top shadow - Home screen grid - Lock home screen - Unlock home screen - Home screen is locked + مزود الموجز + تحريك الخلفية + تأثير عمق الخلفية + تكبير وتصغير الخلفية عند الانتقال بين مناطق المشغل + الظل العلوي + شبكة الشاشة الرئيسية + قفل الشاشة الرئيسية + فتح قفل الشاشة الرئيسية + الشاشة الرئيسية مقفلة منع التغييرات في تخطيط الشاشة الرئيسية إظهار صفحة النقاط - استخدم النقاط بدلاً من الأسطر لإظهار رقم الصفحة - Use new pop-up style - Use Material You\'s bouncy and slightly consolidated pop-up style - Pop-up menu - Show lock button - Show system settings entry - Show Edit button - Status bar - Show status bar - Dark status bar - Text color + استخدام النقاط بدلاً من الأسطر لإظهار رقم الصفحة + استخدام نمط النافذة المنبثقة الجديد + استخدام نمط النافذة المنبثقة النابض والمجدد في Material You + القائمة المنبثقة + إظهار زر القفل + إظهار إدخال إعدادات النظام + إظهار زر التعديل + شريط الحالة + إظهار شريط الحالة + شريط الحالة الداكن + لون النص الوضع الفاتح الوضع الداكن - Rounded corners - Allow overlap - Enforce widget resizing + زوايا مدورة + السماح بالتداخل + فرض إعادة حجم التطبيقات المصغرة السماح بإعادة تحديد حجم التطبيقات المصغرة المقيدة بحجم محدد - Remove size constraints + إزالة قيود الحجم إزالة قيود الحد الأدنى والحد الأقصى لحجم التطبيقات المصغرة - Show dock - Search bar - Search bar widget + إظهار الرصيف + شريط البحث + أداة شريط البحث معطلة - Google Search bar + شريط بحث Google + Opacity + Stroke نصف قطر الزاوية - Apply accent color - Search provider - Dock icons - Bottom padding + تطبيق لون التمييز + مزود البحث + أيقونات الرصيف + المساحة السفلية - App search - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + بحث التطبيقات + %1$s وLawnchair لديهما اتفاقية مشاركة الإيرادات.\n\nالبحث باستخدام %1$s يساعد في دعم Lawnchair. التطبيق الموقع التطبيق مطلوب @@ -413,47 +429,47 @@ عدسة جوجل البحث الصوتي - Hidden apps - Load apps in bulk - Load and display icons in bulk instead of individually - Remember position + التطبيقات المخفية + تحميل التطبيقات بالجملة + تحميل وعرض الأيقونات بالجملة بدلاً من فردية + تذكر الموقع تذكر المكان الذي توقفت عنده في قائمة التطبيق بعد الخروج من القائمة - Show scrollbar - App drawer columns - Row height - Horizontal padding + إظهار شريط التمرير + أعمدة درج التطبيقات + ارتفاع الصف + التوسيع الأفقي - Hide from app drawer - Hidden apps (%1$d) + إخفاء من درج التطبيقات + التطبيقات المخفية (%1$d) - %1$d apps - %1$d app - %1$d apps - %1$d apps - %1$d apps - %1$d apps + %1$d تطبيقات + %1$d تطبيق + %1$d تطبيقين + %1$d تطبيقات + %1$d تطبيقات + %1$d تطبيقات - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + شفافية خلفية الأيقونة + لون خلفية الأيقونة + أقصى عدد من الأعمدة في المجلد + أقصى عدد من الصفوف في المجلد - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration - Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + سيتم تجاهل هذه الإعدادات لأن Lawnchair لم يتم تعيينه كمزود للتطبيقات الأخيرة + تكامل النظام غير متوافق + تم تكوين جهازك ليحتوي على إيماءات النظام (المعروفة باسم Quickstep) المقدمة بواسطة %1$s، ولكن هذا الإصدار من %1$s غير متوافق مع إصدار Android الخاص بك. لمتابعة استخدام جهازك، يرجى إلغاء تثبيت تحديثات %1$s أو تعطيل %1$s كمزود لإيماءات النظام. + خلفية شفافة + شفافية الخلفية + الإجراءات السريعة مشاركة عدسة - Clear all - الإغلاق إجباريا - Screen corner radius - Custom screen corner radius - When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. + مسح الكل + الإغلاق إجبارياً + نصف قطر زوايا الشاشة + تخصيص نصف قطر زوايا الشاشة + عندما تقوم بالتمرير لأعلى لفتح التطبيقات الأخيرة، يتبع التطبيق الحالي إصبعك، ويتقلص إلى بطاقة. استخدم هذا الشريط لضبط نصف قطر زوايا البطاقة عندما تكون تقريبًا ملء الشاشة بحيث يتطابق مع زوايا شاشتك. شريط المهام - Show taskbar (experimental) + إظهار شريط المهام (تجريبي) البحث البحث عن التطبيقات - No apps found matching \"%1$s\" + لم يتم العثور على تطبيقات مطابقة لـ \"%1$s\" من الويب - Contacts from device - Files from device - Settings from device - Search for more apps - البحث في صفحة البداية - No app store or browser installed - Clear search history - Clear search box + جهات الاتصال من الجهاز + ملفات من الجهاز + إعدادات من الجهاز + البحث عن المزيد من التطبيقات + البحث على %1$s + لا يوجد متجر تطبيقات أو متصفح مثبت + مسح سجل البحث + مسح مربع البحث البحث - Show search bar - Automatically show keyboard - Fuzzy search - Approximate matching for app searches + إظهار شريط البحث + عرض لوحة المفاتيح تلقائيًا + البحث الغامض + مطابقة تقريبية لعمليات البحث عن التطبيقات اقتراحات - Show suggested apps at the top of the drawer - Device search - Search your phone contacts, files, and settings - Show hidden apps in search results - If full name is typed - Search algorithm + إظهار التطبيقات المقترحة في أعلى الدرج + بحث الجهاز + البحث في جهات اتصال هاتفك، الملفات، والإعدادات + إظهار التطبيقات المخفية في نتائج البحث + إذا تم كتابة الاسم الكامل + خوارزمية البحث بحث التطبيقات - Global search (on-device) - Global search (via ASI) + البحث العالمي (على الجهاز) + البحث العالمي (عبر ASI) - Show in search results + إظهار في نتائج البحث التطبيقات والاختصارات - App shortcuts + اختصارات التطبيقات الأشخاص - Pixel tips - Android settings + نصائح Pixel + إعدادات Android ملفات اقتراحات الويب - Search history - Calculator + سجل البحث + آلة حاسبة الوسائط، الملفات، والمزيد جهات الاتصال والمزيد - Via Startpage + عبر %1$s - Maximum number of apps in search results - Maximum number of people in search results - Maximum number of files in search results - Maximum number of settings entries in search results - Maximum number of history entries in search results - Maximum number of suggestions in search results - Maximum web suggestion delay + الحد الأقصى لعدد التطبيقات في نتائج البحث + الحد الأقصى لعدد الأشخاص في نتائج البحث + الحد الأقصى لعدد الملفات في نتائج البحث + الحد الأقصى لعدد إدخالات الإعدادات في نتائج البحث + الحد الأقصى لعدد إدخالات السجل في نتائج البحث + الحد الأقصى لعدد الاقتراحات في نتائج البحث + الحد الأقصى لتأخير اقتراحات الويب - To search for contacts, grant contacts and phone permissions to Lawnchair - To search your files, grant storage permissions to Lawnchair - Grant permissions + للبحث عن جهات الاتصال، امنح أذونات جهات الاتصال والهاتف لـ Lawnchair + للبحث في ملفاتك، امنح أذونات التخزين لـ Lawnchair + منح الأذونات + Lawnchair (compose) + مزود اقتراحات الويب + إظهار أيقونة مزود اقتراحات الويب في شريط البحث + مطابقة نمط شريط البحث في الدرج diff --git a/lawnchair/res/values-az-rAZ/strings.xml b/lawnchair/res/values-az-rAZ/strings.xml index 7b9f5713d65..54a560dce70 100644 --- a/lawnchair/res/values-az-rAZ/strings.xml +++ b/lawnchair/res/values-az-rAZ/strings.xml @@ -221,9 +221,20 @@ Dark System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colors Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-b+sr+Latn/strings.xml b/lawnchair/res/values-b+sr+Latn/strings.xml index 6e06d74a716..4df17d72b02 100644 --- a/lawnchair/res/values-b+sr+Latn/strings.xml +++ b/lawnchair/res/values-b+sr+Latn/strings.xml @@ -221,9 +221,20 @@ Tamna Sistemska Na osnovu pozadine + + Šema boja + Aperol + Nijansiranje + Živopisno + Ekspresivno + Duga + Voćna salata + Sadržaj + Monohromatsko Boje Boja za naglašavanje + Stroke color Obrasci RGB Crvena @@ -357,6 +368,9 @@ Rotacija početnog ekrana Dozvolite rotaciju početnog ekrana kada se uređaj rotira + Enable wallpaper blur + Blur intensity + Factor threshold Dodaj nove aplikacije na početni ekran Prikaži fid Nijedna aplikacija za fid nije instalirana @@ -397,6 +411,8 @@ Vidžet trake za pretragu Onemogućeno Google traka za pretragu + Opacity + Stroke Zaobljenost uglova Primeni boju za naglašavanje Pretraživač @@ -465,7 +481,7 @@ Fajlovi sa uređaja Podešavanja sa uređaja Pretražite još aplikacija - Pretražuj pomoću usluge Startpage + Search on %1$s Nije instalirana prodavnica aplikacija ni pregledač Obriši istoriju pretrage Obriši polje za pretragu @@ -499,7 +515,7 @@ Mediji, fajlovi i drugo Kontakti i drugo - Pomoću usluge Startpage + Via %1$s Maksimalan broj aplikacija u rezultatima pretrage Maksimalan broj kontakata u rezultatima pretrage @@ -512,4 +528,8 @@ Da biste pretraživali kontakte, dodelite Lawnchairu dozvole Kontakti i Telefon Da biste pretraživali fajlove, dodelite Lawnchairu pristup memoriji Dodeli dozvole + Lawnchair (sastavljeno) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-bn-rBD/strings.xml b/lawnchair/res/values-bn-rBD/strings.xml index 853002211b7..8e364ca0d74 100644 --- a/lawnchair/res/values-bn-rBD/strings.xml +++ b/lawnchair/res/values-bn-rBD/strings.xml @@ -23,27 +23,27 @@ --> প্রিভিউ তৈরি করুন - Backup + ব্যাকআপ উদ্ধার মুছে ফেলুন রিসেট - Unlock - Lock + আনলক + লক সম্পূর্ণ করুন কাস্টমাইজ করুন - Always - Never + সবসময় + কখনো না ক্লিপবোর্ড - Copy link + লিঙ্ক কপি করুন কপি পোস্ট লোড হচ্ছে… Lawnchair দ্বারা পরিচালিত করা হবে পছন্দ-সমুহ - Home settings - System settings - Change settings + হোম সেটিংস + সিস্টেম সেটিংস + সেটিংস পরিবর্তন করুন কলাম @@ -64,14 +64,14 @@ গঠন ওয়ালপেপার - Background opacity + ব্যাকগ্রাউন্ডের অস্বচ্ছতা - Copied to clipboard - Item removed + ক্লিপবোর্ডের অস্বচ্ছতা + আইটেম রিমুভ করা হয়েছে - What to show + যা দেখাবে - To lock your phone when performing a gesture, Lawnchair requires accessibility access.\n\nLawnchair doesn\'t watch any user action, though the privilege to do so is required for all accessibility services. Lawnchair discards any event sent by the system.\n\nIn order to lock your phone, Lawnchair uses the performGlobalAction Accessibility service. + জেসচারের মাধ্যমে ফোন লক করার জন্য Lawnchair এর এক্সেসিবিলিটি এক্সেস প্রয়োজন।\n\nLawnchair ব্যবহারকারীদের কর্মকান্ডে কোন নজরদারি করে না, যদিও এক্সেসিবিলিটি সার্ভিসের জন্য এই ক্ষমতা প্রয়োজন। সিস্টেম কর্তৃক পাঠানো যেকোন কিছু Lawnchair সংরক্ষণ করবে না।\n\nLawnchair ফোন লক করার জন্য performGlobalAction এক্সেসিবিলিটি সার্ভিস ব্যবহার করে। %1$d x %2$d %s & %s সেটিংস সাধারণ - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + কালারস, আইকন প্যাকস ও নোটিফিকেশন ডটস + হোম স্ক্রিন + ফিড, গ্রিডস, আইকনস ডক - Search bar, icon count - App drawer + অনুসন্ধান বার, আইকন সংখ্যা + অ্যাপ ড্রয়ার Hidden apps, column count, icons Drawer search Web suggestions, global search @@ -221,9 +221,20 @@ গাঢ় সিস্টেম Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic রং Accent color + Stroke color Swatches আর জি বি লাল @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke কোণের ব্যাসার্ধ Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-bs-rBA/strings.xml b/lawnchair/res/values-bs-rBA/strings.xml index 7ee3cae0265..738a404835b 100644 --- a/lawnchair/res/values-bs-rBA/strings.xml +++ b/lawnchair/res/values-bs-rBA/strings.xml @@ -221,9 +221,20 @@ Dark System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colors Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -465,7 +481,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -499,7 +515,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -512,4 +528,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-ca-rES/strings.xml b/lawnchair/res/values-ca-rES/strings.xml index 59fb74c9c90..ea5326b2cca 100644 --- a/lawnchair/res/values-ca-rES/strings.xml +++ b/lawnchair/res/values-ca-rES/strings.xml @@ -221,9 +221,20 @@ Fosc Sistema Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colors Accent color + Stroke color Mostres RGB Vermell @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No n\'hi ha aplicacions de feed instal·lades @@ -397,6 +411,8 @@ Search bar widget Desactivat Google Search bar + Opacity + Stroke Radi de les cantonades Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Buscar en Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contactes i més - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-cs-rCZ/strings.xml b/lawnchair/res/values-cs-rCZ/strings.xml index 028693a697d..cb1b367903d 100644 --- a/lawnchair/res/values-cs-rCZ/strings.xml +++ b/lawnchair/res/values-cs-rCZ/strings.xml @@ -34,16 +34,16 @@ Vždy Nikdy Schránka - Copy link + Zkopírovat odkaz Kopírovat Vložit Načítání… Spravováno aplikací Lawnchair Předvolby - Home settings - System settings - Change settings + Nastavení domovské obrazovky + Systémová nastavení + Změnit nastavení Tapeta - Background opacity + Průhlednost Pozadí - Copied to clipboard + Zkopírováno do schránky Položka odebrána - What to show + Co Zobrazit K uzamčení telefonu při provádění gesta vyžaduje Lawnchair přístup k usnadnění.\n\nLawnchair nesleduje žádnou akci uživatele, ačkoli oprávnění k tomu je vyžadováno pro všechny služby usnadnění. Lawnchair zahodí jakoukoli událost odeslanou systémem.\n\nAby byl váš telefon uzamčen, používá Lawnchair službu usnadnění performGlobalAction. %1$d x %2$d @@ -81,48 +81,48 @@ --> Nastavení Obecné - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + Barvy, Balíčky Ikon, Tečky Oznámení + Domácí obrazovka + Feed, grid, ikony Dok - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + Vyhledávací panel, Počet ikon + Seznam aplikací + Skryté aplikace, počet sloupců, ikony + Vyhledávání aplikací + Webová doporučení, globální vyhledávání Složky - Row and column count + Počet sloupců a řádků Gesta - Taps and swipes + Ťuknutí a přetažení Předešlé - Clear All button, corner radius + Tlačítko „Vymazat vše“, Poloměr rohů O aplikaci - App info + Informace o aplikaci Restartovat Lawnchair - Experimental features + Experimentální funkce - Font customization + Přizbpůsobení fontu Některý text zůstává beze změny - At a Glance calendar customization + Přizpůsobení glanc kalendáře Povolit zobrazení data v kalendářích ne-Gregoriánských systémů - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + Zvýšit maximální limit velikosti mřížky + Zvýšit maximální povolenou velikost mřížky domovské obrazovky z 10 x 10 na 20 x 20 + Vždy znovu načíst ikony Vyhnout se používání uložených ikon z balíčků ikon - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + Zamknout/odemknout + Zabránit ukončení vybrané aplikace při stisknutí tlačítka „Vyčistit vše“ Pro přístup ke zkratkám a dalším funkcím nastavte Lawnchair jako výchozí spouštěč - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other + Notifikační tečky + Zobrazit počet oznámení + Barva oznamovací tečky + Barva počítadla oznámení + Varování: Barvy upozornění a počítadla upozornění nemají dostatečný kontrast + Varování: Barva teček upozornění a barva počítadla upozornění možná nemá dostatečný kontrast Je vyžadován přístup k oznámením Chcete-li používat tečky oznámení, zapněte oznámení aplikace pro %1$s Styl ikon - Icon shape + Tvar ikon Velikost ikon Zobrazit popisky - Label size + Velikost popisku Dvouřádková popiska Popiska ikon na průhledném pozadí Použít průhledné pozadí u ikon s tématem - Auto-adaptive icons - For all non-adaptive icons - Background lightness - Use 100% background lightness for white - Reset custom icons + Automaticky adaptivní ikony + Pro všechny neadaptivní ikony + Jas pozadí + Pro bílý režim použít 100% osvětlení pozadí + Obnovit upravené ikony Všechny vlastní ikony budou obnoveny. Přejete si pokračovat? Ikony Obnovit výchozí - Open external picker - Pick icon from - Couldn\'t load more icons + Otevřít externí výběr + Vybrat ikonu z + Nelze načíst více ikon Systém Kruh @@ -161,54 +161,54 @@ iOS Osmiúhelník One UI - Rounded square - Sharp square + Zaoblený čtverec + Ostrý čtverec Čtverec Zaoblený čtverec Slza - Custom icon shape - Create custom icon shape - Edit custom icon shape + Vlastní tvar ikon + Vytvořit vlastní tvar ikon + Upravit vlastní tvar ikon Tvar rohů ikon Kulatý Hladký Oříznutý Tvar levého horního rohu ikon Tvar pravého horního rohu - Bottom left + Vlevo dole Tvar spodního pravého rohu - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + Zkopírovat do schránky + Vložit ze schránky + Schránka neobsahuje platný tvar ikony - Icon pack - Themed icon source - System icons - Themed icons + Balíček ikon + Zdroj tematických ikon + Systémové ikony + Ikony s motivy Vyp. - Home screen - Home screen & app drawer + Domácí obrazovka + Domácí obrazovka & nabídka aplikací Žádné podporované balíčky ikon - Add fonts - OTF and TTF fonts are supported + Přidat fonty + OTF a TTF formáty jsou podporovány Font nenalezen - Font (experimental) + Fonty (experimentální) Obecné Nadpisy - Headings (medium) + Nadpisy (střední) Tělo - Body (medium) + Tělo (střední) Kurzíva Tenké - Extra light + Velmi tenké Světlé Běžné Střední Středně tučné Tučné - Extra bold + Velmi tučné Black + Barevný styl + Spritz + Tonal Spot + Sytá + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Barvy Accent color + Stroke color Vzorníky RGB Červená @@ -235,7 +246,7 @@ Jas Hex Posuvníky - Invalid color + Neplatná barva Nabíjení Nabito - Battery low + Nízký stav baterie "%1$d%% — Plná v %2$s" Přehled událostí - What to show + Co zobrazit Kalendář Date & time Datum Čas - Time format - Follow system - 12-hour format - 24-hour format + Formát času + Podle systému + 12-hodinový formát + 24-hodinový formát Počasí - Battery status + Stav baterie Právě hraje - Tap to set up + Klepnutím nastavíte Chcete‑li použít %1$s, povolte puntíky oznámení. - Show on home screen + Zobrazit na domovské obrazovce At a Glance can be manually added to the home screen by placing the Lawnchair widget At a Glance provider @@ -289,7 +300,7 @@ Produkt Design & development Vývoj - QuickSwitch maintenance + Nastavení QuickSwitch DevOps Podpora & PR Uznání @@ -299,14 +310,14 @@ Backup and restore --> - Create backup - What to back up - Layout and settings + Vytvořit zálohu + Co zálohovat + Rozložení a nastavení Tapeta Záloha vytvořena Nepodařilo se vytvořit zálohu - Restore backup - What to restore + Obnovit ze zálohy + Co obnovit ze zálohy Obnoveno ze zálohy Nepodařilo se obnovit ze zálohy Neplatný záložní soubor @@ -315,37 +326,37 @@ Gesture settings --> - Double tap - Swipe up - Swipe down - Home button - Back button - Do nothing + Dvojité klepnutí + Přejetí nahoru + Přejetí dolů + Tlačítko domů + Tlačítko zpět + Nedělat nic Spánek - Open notification panel - Open app + Otevřít panel oznámení + Otevřít aplikaci Otevřít %1$s - Open app drawer - Open app search - Open search - Pick app - Admin permissions required + Otevřít seznam aplikací + Otevřít vyhledávání aplikací + Otevřít vyhledávání + Vybrat aplikaci + Vyžaduje oprávnění administrátora To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" Uspání dvojitým poklepáním bude vypnuto. - Turn on accessibility service + Zapnout službu usnadnění To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" - Open settings + Otevřít nastavení - Lawnchair bug report - %1$s crashed - Upload crash log + Hlášení o chybě v Lawnchair + %1$s přestal fungovat + Nahrát protokol pádů Nahrávání selhalo Nahrávám… - Bug reports + Chybová hlášení Upload status %d new reports Multiple new reports @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed Není nainstalován žádný poskytovatel Feedu @@ -397,14 +411,16 @@ Search bar widget Zakázáno Google Search bar + Opacity + Stroke Poloměr rohu Apply accent color - Search provider - Dock icons - Bottom padding + Poskytovatel vyhledávání + Ikony doku + Spodní mezera - App search - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + Hledání aplikací + %1$s a Lawnchair má smlouvu o sdílení příjmů.\n\nVyhledávání pomocí %1$s pomáhá podpořit Lawnchair. Aplikace Web Aplikace je vyžadována @@ -413,42 +429,42 @@ Google Lens Hlasové vyhledávání - Hidden apps - Load apps in bulk + Skryté aplikace + Načíst aplikace hromadně Load and display icons in bulk instead of individually - Remember position + Zapamatovat pozici Zapamatovat pozici seznamu aplikací po opuštění - Show scrollbar - App drawer columns - Row height - Horizontal padding + Zobrazit posuvník + Sloupce seznamu aplikací + Výška řádku + Vodorovná mezera - Hide from app drawer - Hidden apps (%1$d) + Skrýt v seznamu aplikací + Skryté aplikace (%1$d) %1$d app %1$d apps %1$d apps - %1$d apps + %1$d aplikací - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + Průhlednost pozadí ikon + Barva pozadí ikon + Maximální počet sloupců složky + Maximální počet řádků složky - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration + Tato nastavení budou ignorována, protože Lawnchair není nastaven jako poskytovatel nedávných aplikací + Nekompatibilní systémová integrace Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + Průsvitné pozadí + Průhlednost pozadí + Rychlé akce Sdílet Lens - Clear all + Vymazat vše Vynutit ukončení - Screen corner radius - Custom screen corner radius + Poloměr rohů obrazovky + Vlastní poloměr rohů obrazovky When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. Hlavní panel Show taskbar (experimental) @@ -466,7 +482,7 @@ Files from device Settings from device Search for more apps - Hledat na Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -500,7 +516,7 @@ Média, soubory a další Kontakty a další - Přes Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -513,4 +529,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-da-rDK/strings.xml b/lawnchair/res/values-da-rDK/strings.xml index f8e1707f78d..5ed2d86712d 100644 --- a/lawnchair/res/values-da-rDK/strings.xml +++ b/lawnchair/res/values-da-rDK/strings.xml @@ -221,9 +221,20 @@ Mørk System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Farver Accent color + Stroke color Swatches RGB Rød @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed Ingen feed-apps installeret @@ -397,6 +411,8 @@ Search bar widget Deaktiveret Google Search bar + Opacity + Stroke Hjørne radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Søg på Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Medier, filer og mere Kontakter og mere - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-de-rDE/strings.xml b/lawnchair/res/values-de-rDE/strings.xml index 3c5cc015110..80b2f259eb8 100644 --- a/lawnchair/res/values-de-rDE/strings.xml +++ b/lawnchair/res/values-de-rDE/strings.xml @@ -23,7 +23,7 @@ --> Vorschau Erstellen - Backup + Sichern Wiederherstellen Löschen Zurücksetzen @@ -221,9 +221,20 @@ Dunkel System An Hintergrund anpassen + + Farbstil + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Inhalt + Einfarbig Farben Akzentfarbe + Strichfarbe Farbfelder RGB Rot @@ -357,6 +368,9 @@ Startbildschirm-Drehung Drehen des Startbildschirms bei Drehung des Geräts erlauben + Hintergrund-Unschärfe aktivieren + Unschärfe-Intensität + Faktor-Schwellenwert Neue Apps zum Startbildschirm hinzufügen Feed anzeigen Keine Feed-Apps installiert @@ -397,6 +411,8 @@ Suchleisten-Widget Deaktiviert Google-Suchleiste + Deckkraft + Strichstärke Ecken radius Akzentfarbe verwenden Suchanbieter @@ -404,7 +420,7 @@ Unterer Abstand App-Suche - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + %1$s und Lawnchair haben eine Umsatzbeteiligungsvereinbarung.\n\nSuchen mit %1$s unterstützt Lawnchair. App Webseite App erforderlich @@ -413,43 +429,43 @@ Google Lens Sprachsuche - Hidden apps - Load apps in bulk - Load and display icons in bulk instead of individually - Remember position + Versteckte Anwendungen + Anwendungen auf einmal laden + Lade und zeige Symbole auf einmal statt einzeln + Position merken App-Drawer-Position nach Verlassen der Übersicht merken - Show scrollbar - App drawer columns - Row height - Horizontal padding + Zeige Scrollbar + Spalten in der Anwendungsübersicht + Zeilenhöhe + Horizontaler Abstand - Hide from app drawer - Hidden apps (%1$d) + Aus der Anwendungsübersicht ausblenden + Versteckte Apps (%1$d) - %1$d app - %1$d apps + %1$d Anwendung + %1$d Anwendungen - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + Symbol-Hintergrundtransparenz + Symbol-Hintergrundfarbe + Maximale Anzahl an Ordner Spalten + Maximale Anzahl an Ordner Reihen - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration - Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + Diese Einstellungen werden ignoriert, da Lawnchair nicht als \"Recents-Provider\" eingestellt ist + Inkompatible Systemintegration + Dein Gerät ist so konfiguriert, dass Systemgesten (bekannt als Quickstep) von %1$s bereitgestellt werden, diese Version von %1$s ist jedoch nicht mit deiner Android Version kompatibel. Um dein Gerät weiter zu verwenden, deinstalliere bitte %1$s Aktualisierungen oder deaktiviere %1$s als Systemgesten-Provider. + Transparenter Hintergrund + Deckkraft des Hintergrund + Schnelle Aktionen Teilen Lens - Clear all + Alle löschen Schließen erzwingen - Screen corner radius - Custom screen corner radius - When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. + Radius der Bildschirmecken + Benutzerdefinierter Radius der Bildschirmecken + Wenn du nach oben wischst, um die zuletzt verwendeten Apps zu öffnen, folgt die aktuelle App deinem Finger und verkleinert sich zu einer Karte. Verwende diesen Regler, um den Eckenradius der Karte anzupassen, wenn sie fast im Vollbildmodus ist, sodass er mit den Ecken deines Bildschirms übereinstimmt. Taskbar - Show taskbar (experimental) + Taskbar anzeigen (experimentell) Suchen Apps durchsuchen - No apps found matching \"%1$s\" + Keine Apps gefunden, die mit „%1$s“ übereinstimmen Aus dem Internet Kontakte auf dem Gerät Datei auf dem Gerät Geräteeinstellungen - Search for more apps - Suche bei Startpage - No app store or browser installed - Clear search history - Clear search box + Nach mehr Anwendungen suchen + Suche bei %1$s + Kein App-Store oder Browser installiert + Suchverlauf löschen + Suchfeld leeren Suchen - Show search bar + Suchleiste anzeigen Tastatur automatisch anzeigen - Fuzzy search - Approximate matching for app searches + Unscharfe Suche + Ungefähre Übereinstimmung für Anwendungs-Suche Vorschläge - Show suggested apps at the top of the drawer - Device search - Search your phone contacts, files, and settings + Zeige Anwendungsvorschläge oben in der Übersicht + Gerätesuche + Durchsuchen Kontakte, Dateien und Einstellungen ihres Telefons Versteckte Apps in Suchergebnissen anzeigen Wenn vollständiger Name eingegeben wird Such-Algorithmus @@ -485,12 +501,12 @@ Globale Suche (auf dem Gerät) Globale Suche (über ASI) - Show in search results + In Suchergebnissen anzeigen Apps & Verknüpfungen - App shortcuts + Anwendungs Verknüpfungen Personen - Pixel tips - Android settings + Pixel-Tipps + Android Einstellungen Dateien Webvorschläge Suchverlauf @@ -498,17 +514,21 @@ Medien, Dateien und mehr Kontakte und mehr - Via Startpage + Mit %1$s - Maximum number of apps in search results - Maximum number of people in search results - Maximum number of files in search results - Maximum number of settings entries in search results - Maximum number of history entries in search results - Maximum number of suggestions in search results - Maximum web suggestion delay + Maximale Anzahl von Anwendungen in Suchergebnissen + Maximale Anzahl von Personen in Suchergebnissen + Maximale Anzahl von Dateien in Suchergebnissen + Maximale Anzahl an Einstellungen in Suchergebnissen + Maximale Anzahl von Verlaufseinträgen in Suchergebnissen + Maximale Anzahl von Vorschlägen in Suchergebnissen + Maximale Verzögerung für Webvorschläge Um nach Kontakten zu suchen, erteile Lawnchair Berechtigungen für Kontakte und Telefon Um Deine Dateien zu durchsuchen, erteile Lawnchair Speicher-Berechtigungen - Grant permissions + Berechtigungen erteilen + Lawnchair (zusammengesetzt) + Web-Vorschlag-Anbieter + Anbieter-Symbol der Web-Vorschläge in Suchleiste anzeigen + Dock-Suchleisten-Stil angleichen diff --git a/lawnchair/res/values-el-rGR/strings.xml b/lawnchair/res/values-el-rGR/strings.xml index 4d63ee0039a..8395e624fc9 100644 --- a/lawnchair/res/values-el-rGR/strings.xml +++ b/lawnchair/res/values-el-rGR/strings.xml @@ -23,7 +23,7 @@ --> Προεπισκόπηση Δημιουργία - Backup + Αντίγραφα ασφαλείας Επαναφορά Διαγραφή Επαναφορά @@ -34,16 +34,16 @@ Πάντα Ποτέ Πρόχειρο - Copy link + Αντιγραφή συνδέσμου Αντιγραφή Επικόλληση Φόρτωση… Διαχειριζόμενο από τον εκκινητή Lawnchair Προτιμήσεις - Home settings - System settings - Change settings + Ρυθμίσεις αρχικής οθόνης + Ρυθμίσεις συστήματος + Αλλαγή ρυθμίσεων Ταπετσαρία - Background opacity + Αδιαφάνεια φόντου - Copied to clipboard + Αντιγράφηκε στο πρόχειρο Το στοιχείο αφαιρέθηκε - What to show + Τι να εμφανίζεται - To lock your phone when performing a gesture, Lawnchair requires accessibility access.\n\nLawnchair doesn\'t watch any user action, though the privilege to do so is required for all accessibility services. Lawnchair discards any event sent by the system.\n\nIn order to lock your phone, Lawnchair uses the performGlobalAction Accessibility service. - %1$d x %2$d + Για να κλειδώσετε το τηλέφωνό σας όταν εκτελείτε μια χειρονομία, το εκκινητής Lawnchair απαιτεί πρόσβαση στην προσβασιμότητα.\n\nΟ Lawnchair δεν παρακολουθεί καμία ενέργεια χρήστη, αν και το προνόμιο να το κάνει αυτό απαιτείται για όλες τις υπηρεσίες προσβασιμότητας. Ο Lawnchair απορρίπτει οποιοδήποτε συμβάν αποστέλλεται από το σύστημα.\n\nΓια να κλειδώσετε το τηλέφωνό σας, ο εκκινητής Lawnchair χρησιμοποιεί την υπηρεσία προσβασιμότητας performGlobalAction. + %1$d × %2$d %s & %s Ρυθμίσεις Γενικά - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + Χρώματα, πακέτα εικονιδίων, κουκκίδες ειδοποίησης + Αρχική οθόνη + Ροή, πλέγμα, εικονίδια Ράφι - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + Μπάρα αναζήτησης, αριθμός εικονιδίων + Συρτάρι εφαρμογών + Κρυμμένες εφαρμογές, αριθμός στηλών, εικονίδια + Αναζήτηση συρταριού εφαρμογών + Προτάσεις ιστού, γενική αναζήτηση Φάκελοι - Row and column count + Αριθμός γραμμών και στηλών Χειρονομίες - Taps and swipes + Πατήματα και σαρώσεις Πρόσφατα - Clear All button, corner radius + Κουμπί καθαρισμού όλων, ακτίνα γωνίας Πληροφορίες - App info + Πληροφορίες εφαρμογής Επανεκκίνηση του Lawnchair - Experimental features + Πειραματικές λειτουργίες - Font customization + Προσαρμογή γραμματοσειράς Μερικά κείμενα παραμένουν αμετάβλητα - At a Glance calendar customization + Προσαρμογή ημερολογίου Με μια Ματιά Να επιτρέπεται η εμφάνιση ημερομηνίας σε μη Γρηγοριανά συστήματα ημερολογίου - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + Αύξηση μέγιστου ορίου μεγέθους πλέγματος + Αύξηση του μέγιστου επιτρεπόμενου μεγέθους πλέγματος αρχικής οθόνης από 10×10 έως 20×20 + Επαναφόρτωση εικονιδίων πάντοτε Αποφυγή χρήσης αποθηκευμένων εικονιδίων από πακέτα εικονιδίων - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + Κλείδωμα/ξεκλείδωμα + Αποτροπή κλεισίματος επιλεγμένης εφαρμογής κατά το πάτημα του \"Καθαρισμός όλων\" - To access shortcuts and additional features, set Lawnchair as your default launcher - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other + Για να αποκτήσετε πρόσβαση σε συντομεύσεις και πρόσθετες δυνατότητες, ορίστε τον εκκινητή Lawnchair ως προεπιλεγμένο πρόγραμμα εκκίνησης + Κουκκίδες ειδοποιήσεων + Εμφάνιση μετρητή ειδοποιήσεων + Χρώμα κουκκίδας ειδοποιήσεων + Χρώμα μετρητή ειδοποιήσεων + Προσοχή: Τα χρώματα των κουκκίδων ειδοποιήσεων και του μετρητή ειδοποιήσεων δεν έχουν αρκετή αντίθεση μεταξύ τους + Προσοχή: Τα χρώματα των κουκκίδων ειδοποιήσεων και του μετρητή ειδοποιήσεων ίσως δεν έχουν πάντα αρκετή αντίθεση μεταξύ τους Απαιτείται πρόσβαση ειδοποιήσεων - To show Notification Dots, turn on app notifications for %1$s + Για να εμφανίσετε τις κουκκίδες ειδοποίησης, ενεργοποιήστε τις ειδοποιήσεις εφαρμογών για %1$s - Icon style - Icon shape - Icon size - Show labels - Label size - Use multiple lines + Στυλ εικονιδίων + Σχήμα εικονιδίων + Μέγεθος εικονιδίων + Εμφάνιση ετικετών εικονιδίων + Μέγεθος ετικέτας εικονιδίων + Χρήση δύο γραμμών ετικέτας - Transparent themed icons + Διαφανή θεματοποιημένα εικονίδια Χρήση διαφανούς φόντου στα θεματοποιημένα εικονίδια - Auto-adaptive icons - For all non-adaptive icons - Background lightness - Use 100% background lightness for white - Reset custom icons + Αυτόματα προσαρμοζόμενα εικονίδια + Για όλα τα μη προσαρμοζόμενα εικονίδια + Φωτεινότητα φόντου + Χρήση 100% φωτεινότητας για λευκό φόντο + Επαναφορά προσαρμοζόμενων εικονιδίων Θα γίνει επαναφορά όλων των προσαρμοσμένων εικονιδίων. Θέλετε να συνεχίσετε; Εικονίδια - Reset to default - Open external picker - Pick icon from - Couldn\'t load more icons + Επαναφορά στο προεπιλεγμένο εικονίδιο + Άνοιγμα εξωτερικού επιλογέα εικονιδίων + Επιλογή εικονιδίου από + Δεν ήταν δυνατή η φόρτωση περισσότερων εικονιδίων Σύστημα Κύκλος @@ -161,54 +161,54 @@ iOS Οκτάγωνο One UI - Rounded square - Sharp square + Στρογγυλεμένο τετράγωνο + Αιχμηρό τετράγωνο Τετράγωνο Οβάλ Τετράγωνο Δάκρυ - Custom icon shape - Create custom icon shape - Edit custom icon shape - Corner shape + Προσαρμοσμένο σχήμα εικονιδίων + Δημιουργία προσαρμοσμένου σχήματος εικονιδίων + Επεξεργασία προσαρμοσμένου σχήματος εικονιδίων + Σχήμα γωνίας Στρογγυλό Λείο Κοφτό - Top left - Top right - Bottom left - Bottom right - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + Πάνω αριστερά + Πάνω δεξιά + Κάτω αριστερά + Κάτω δεξιά + Εξαγωγή στο πρόχειρο + Εισαγωγή από το πρόχειρο + Το πρόχειρο δεν περιέχει ένα έγκυρο σχήμα εικονιδίων - Icon pack - Themed icon source - System icons - Themed icons + Πακέτο εικονιδίων + Πηγή θεματοποιημένων εικονιδίων + Εικονίδια συστήματος + Θεματοποιημένα εικονίδια Ανενεργό - Home screen - Home screen & app drawer + Αρχική οθόνη + Αρχική οθόνη & συρτάρι εφαρμογών Χωρίς υποστηριζόμενα πακέτα εικονιδίων - Add fonts - OTF and TTF fonts are supported + Προσθήκη γραμματοσειρών + Υποστήριξη γραμματοσειρών OTF και TTF Η γραμματοσειρά δεν βρέθηκε - Font (experimental) + Γραμματοσειρά (πειραματικό χαρακτηριστικό) Γενικά Κεφαλίδες - Headings (medium) + Κεφαλίδες (μεσαίου πάχους) Σώμα - Body (medium) + Σώμα (μεσαίου πάχους) Πλάγια γραμματοσειρά Λεπτή γραμματοσειρά - Extra light - Ελαφριά γραμματοσειρά + Εξαιρετικά φωτεινό + Φωτεινό Κανονική γραμματοσειρά Μεσαία γραμματοσειρά Ημιέντονη γραμματοσειρά Έντονη γραμματοσειρά - Extra bold + Εξαιρετικά παχιά γραμματοσειρά Παχιά γραμματοσειρά + Στυλ χρώματος + Ψεκασμός + Σημείο τονισμού + Ζωντανό + Εκφραστικό + Ουράνιο Τόξο + Φρουτοσαλάτα + Περιεχόμενο + Μονοχρωματικό Χρώματα - Accent color + Χρώμα έμφασης + Χρώμα περιγράμματος Δείγματα RGB Κόκκινο @@ -235,7 +246,7 @@ Φωτεινότητα Hex Μπάρες ρύθμισης - Invalid color + Μη έγκυρο χρώμα Φόρτιση Φορτισμένο - Battery low + Χαμηλή μπαταρία "%1$d%% • Πλήρης φόρτιση σε %2$s" Με μια Ματιά - What to show + Τι να εμφανίζεται Ημερολόγιο - Date & time + Ημερομηνία & ώρα Ημερομηνία Ώρα - Time format - Follow system - 12-hour format - 24-hour format + Μορφή ώρας + Ακολουθεί την ώρα συστήματος + 12ωρη μορφή + 24ωρη μορφή Καιρός - Battery status + Κατάσταση μπαταρίας Παίζει Τώρα - Tap to set up + Πατήστε για ρύθμιση Για να χρησιμοποιήσετε %1$s, ενεργοποιήστε τις Κουκκίδες Ειδοποιήσεων. - Show on home screen - At a Glance can be manually added to the home screen by placing the Lawnchair widget + Εμφάνιση στην αρχική οθόνη + Το γραφικό στοιχείο “Με μια Ματιά” μπορεί να προστεθεί χειροκίνητα τοποθετώντας το γραφικό με ονομασία “Lawnchair” - At a Glance provider + Πάροχος γραφικού Με μια Ματιά Google Αναζήτηση Google @@ -287,9 +298,9 @@ Νέα Υποστήριξη Προϊόν - Design & development + Σχεδιασμός & ανάπτυξη Ανάπτυξη - QuickSwitch maintenance + Συντήρηση λειτουργίας QuickSwitch Προγραμματιστές Υποστήριξη & PR Ευχαριστίες @@ -299,112 +310,117 @@ Backup and restore --> - Create backup - What to back up - Layout and settings + Δημιουργία αντιγράφου ασφαλείας + Σε τι να δημιουργήσετε αντίγραφο ασφαλείας + Διάταξη και ρυθμίσεις Ταπετσαρία - Backup created - Failed to create backup - Restore backup - What to restore - Backup restored - Failed to restore backup - Invalid backup file + Δημιουργήθηκε αντίγραφο ασφαλείας + Αποτυχία δημιουργίας αντιγράφου ασφαλείας + Επαναφορά αντιγράφου ασφαλείας + Τι να επαναφέρετε + Έγινε επαναφορά αντιγράφου ασφαλείας + Αποτυχία επαναφοράς αντιγράφου ασφαλείας + Μη έγκυρο αρχείο αντιγράφου ασφαλείας - Double tap - Swipe up - Swipe down - Home button - Back button - Do nothing + Διπλό πάτημα + Σύρσιμο επάνω + Σύρετε κάτω + Κουμπί αρχικής οθόνης + Κουμπί επιστροφής + Καμία ενέργεια Αναστολή - Open notification panel - Open app + Άνοιγμα πίνακα ειδοποιήσεων + Άνοιγμα εφαρμογής Άνοιγμα %1$s - Open app drawer - Open app search - Open search - Pick app - Admin permissions required - To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" + Άνοιγμα συρταριού εφαρμογών + Άνοιγμα αναζήτησης εφαρμογών + Άνοιγμα αναζήτησης + Επιλογή εφαρμογής + Απαιτούνται δικαιώματα διαχειριστή + Για να χρησιμοποιήσετε το διπλό πάτημα για ύπνο, ορίστε τον εκκινητή Lawnchair ως εφαρμογή διαχείρισης συσκευής. Πατήστε στο “Άνοιγμα ρυθμίσεων” και μετά πατήστε “Ενεργοποίηση αυτής της εφαρμογής ως διαχειριστή της συσκευής.” Double Tap to Sleep will be disabled. - Turn on accessibility service - To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" - Open settings + Ενεργοποίηση υπηρεσίας προσβασιμότητας + Για να χρησιμοποιήσετε το διπλό πάτημα για ύπνο, ενεργοποιήστε την υπηρεσία προσβασιμότητας του εκκινητή Lawnchair. Πατήστε στο “Άνοιγμα ρυθμίσεων” και μετά επιλέξτε τον Lawnchair και ενεργοποιήστε την “Χρήση του Lawnchair.” + Άνοιγμα ρυθμίσεων - Lawnchair bug report - %1$s crashed - Upload crash log + Αναφορά σφάλματος του Lawnchair + %1$s κράσαρε + Μεταφόρτωση αρχείου καταγραφής σφαλμάτων Αποτυχία μεταφόρτωσης Μεταφόρτωση… - Bug reports - Upload status - %d new reports - Multiple new reports + Αναφορές σφαλμάτων + Κατάσταση μεταφόρτωσης + %d νέες αναφορές + Πολλαπλές νέες αναφορές - Home screen rotation - Allow home screen rotation when device is rotated - Add new apps to home screen - Show feed + Περιστροφή αρχικής οθόνης + Να επιτρέπεται η περιστροφή της αρχικής οθόνης κατά την περιστροφή της συσκευής + Ενεργοποίηση θολώματος ταπετσαρίας + Ένταση θολώματος + Όριο παράγοντα + Προσθήκη νέων εφαρμογών στην αρχική οθόνη + Εμφάνιση ροής Δεν υπάρχουν εγκατεστημένες εφαρμογές ροής Ροή - Feed provider - Scroll wallpaper - Wallpaper depth effect - Zoom in and out of the wallpaper when transitioning between areas of the launcher - Top shadow - Home screen grid - Lock home screen - Unlock home screen - Home screen is locked + Πάροχος ροής + Κύλιση ταπετσαρίας + Εφέ βάθους ταπετσαρίας + Μεγέθυνση και σμίκρυνση της ταπετσαρίας κατά τη μετάβαση μεταξύ περιοχών του εκκινητή + Σκιά κορυφής + Πλέγμα αρχικής οθόνης + Κλείδωμα αρχικής οθόνης + Ξεκλείδωμα αρχικής οθόνης + Η αρχική οθόνη είναι κλειδωμένη Αποτροπή αλλαγών στη διάταξη της αρχικής οθόνης Εμφάνιση διαχωριστικών κουκκίδων επιφανειών εργασίας Χρήση κουκκίδων αντί γραμμών για εμφάνιση αριθμού σελίδας - Use new pop-up style - Use Material You\'s bouncy and slightly consolidated pop-up style - Pop-up menu - Show lock button - Show system settings entry - Show Edit button - Status bar - Show status bar - Dark status bar - Text color + Χρήση νέου αναδυόμενου στυλ + Χρήση του ελαφρώς ενοποιημένου αναδυόμενου στυλ, βασισμένο στον σχεδιασμό Material U + Αναδυόμενο μενού + Εμφάνιση κουμπιού κλειδώματος + Εμφάνιση καταχώρησης ρυθμίσεων συστήματος + Εμφάνιση κουμπιού επεξεργασίας + Γραμμή κατάστασης + Εμφάνιση γραμμής κατάστασης + Σκοτεινή γραμμή κατάστασης + Χρώμα κειμένου Ελαφριά γραμματοσειρά Σκοτεινό - Rounded corners - Allow overlap - Enforce widget resizing + Στρογγυλεμένες γωνίες + Να επιτρέπεται η επικάλυψη + Επιβολή αλλαγής μεγέθους γραφικών στοιχείων Να επιτρέπεται η αλλαγή μεγέθους των γραφικών στοιχείων που περιορίζονται σε ένα συγκεκριμένο μέγεθος - Remove size constraints + Αφαίρεση περιορισμών μεγέθους γραφικών στοιχείων Αφαίρεση των περιορισμών ελάχιστου και μέγιστου μεγέθους των γραφικών στοιχείων - Show dock - Search bar - Search bar widget + Εμφάνιση μπάρας εφαρμογών + Μπάρα αναζήτησης + Γραφικό στοιχείο μπάρας αναζήτησης Απενεργοποιημένο - Google Search bar - Corner radius - Apply accent color - Search provider - Dock icons - Bottom padding + Μπάρα αναζήτησης Google + Αδιαφάνεια + Πρόγραμμα + Ακτίνα γωνίας + Εφαρμογή χρώματος έμφασης + Πάροχος αναζήτησης + Εικονίδια μπάρας εφαρμογών + Κάτω περιθώριο - App search - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + Αναζήτηση εφαρμογών + %1$s και ο εκκινητής Lawnchair έχουν συμφωνία μεριδίου εσόδων.\n\nΗ αναζήτηση μέσω του %1$s βοηθά στην υποστήριξη του Lawnchair. Εφαρμογή Ιστοσελίδα Απαιτείται η εφαρμογή @@ -413,43 +429,43 @@ Google Lens Φωνητική Αναζήτηση - Hidden apps - Load apps in bulk - Load and display icons in bulk instead of individually - Remember position + Κρυφές εφαρμογές + Μαζική φόρτωση εφαρμογών + Μαζική φόρτωση και εμφάνιση εικονιδίων αντί για μεμονωμένα + Απομνημόνευση θέσης Απομνημόνευση θέσης συρταριού εφαρμογών μετά την έξοδο από το συρτάρι εφαρμογών - Show scrollbar - App drawer columns - Row height - Horizontal padding + Εμφάνιση πλαϊνής μπάρας κύλισης + Στήλες συρταριού εφαρμογών + Ύψος γραμμής + Οριζόντιο περιθώριο - Hide from app drawer - Hidden apps (%1$d) + Απόκρυψη από το συρτάρι εφαρμογών + Κρυφές εφαρμογές (%1$d) - %1$d app - %1$d apps + %1$d εφαρμογή + %1$d εφαρμογές - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + Αδιαφάνεια φόντου εικονιδίων + Χρώμα φόντου Εικονιδίων + Μέγιστος αριθμός στηλών φακέλου + Μέγιστος αριθμός σειρών φακέλου - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration - Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + Αυτές οι ρυθμίσεις θα αγνοηθούν καθώς ο εκκινητής Lawnchair δεν έχει οριστεί ως η υπηρεσία παροχής πρόσφατων εφαρμογών + Μη συμβατή ενσωμάτωση συστήματος + Η συσκευή σας έχει ρυθμιστεί ώστε να διαθέτει χειρονομίες συστήματος (υπηρεσία γνωστή ως Quickstep) που παρέχονται από το %1$s, αλλά αυτή η έκδοση του %1$s δεν είναι συμβατή με την έκδοση Android που διαθέτετε. Για να συνεχίσετε να χρησιμοποιείτε τη συσκευή σας, απεγκαταστήστε τις ενημερώσεις %1$s ή απενεργοποιήστε το %1$s ως πάροχο χειρονομιών συστήματος. + Ημιδιάφανο φόντο + Αδιαφάνεια φόντου + Γρήγορες ενέργειες Κοινοποίηση Φακός - Clear all + Εκκαθάριση όλων Αναγκαστικό κλείσιμο - Screen corner radius - Custom screen corner radius - When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. + Ακτίνα γωνίας οθόνης + Προσαρμοσμένη ακτίνα γωνίας οθόνης + Όταν σύρετε προς τα πάνω για να ανοίξετε τα Πρόσφατα, η τρέχουσα εφαρμογή ακολουθεί το δάχτυλο σας και συρρικνώνεται σε μια κάρτα. Χρησιμοποιήστε αυτή τη γραμμή ρύθμισης για να ορίσετε την ακτίνα γωνίας της κάρτας όταν είναι σχεδόν σε πλήρη οθόνη έτσι ώστε να ταιριάζει με τις γωνίες της οθόνης σας. Γραμμή Εργασιών - Show taskbar (experimental) + Εμφάνιση γραμμής εργασιών (πειραματικό χαρακτηριστικό) Αναζήτηση - Αναζήτηση Εφαρμογών - No apps found matching \"%1$s\" + Αναζήτηση εφαρμογών + Δεν βρέθηκαν εφαρμογές που να ταιριάζουν “%1$s Από το διαδίκτυο - Contacts from device - Files from device - Settings from device - Search for more apps - Αναζήτηση σε Startpage - No app store or browser installed - Clear search history - Clear search box + Επαφές από τη συσκευή + Αρχεία από τη συσκευή + Ρυθμίσεις από τη συσκευή + Αναζήτηση για περισσότερες εφαρμογές + Αναζήτηση στο %1$s + Δεν υπάρχει εγκατεστημένο κατάστημα εφαρμογών ή πρόγραμμα περιήγησης + Εκκαθάριση ιστορικού αναζήτησης + Εκκαθάριση πλαισίου αναζήτησης Αναζήτηση - Show search bar - Automatically show keyboard - Fuzzy search - Approximate matching for app searches + Εμφάνιση μπάρας αναζήτησης + Αυτόματη εμφάνιση πληκτρολογίου + Ασαφής αναζήτηση + Αντιστοίχιση κατά προσέγγιση για αναζητήσεις εφαρμογών Προτάσεις - Show suggested apps at the top of the drawer - Device search - Search your phone contacts, files, and settings - Show hidden apps in search results - If full name is typed - Search algorithm + Εμφάνιση προτεινόμενων εφαρμογών στο επάνω μέρος του συρταριού εφαρμογών + Αναζήτηση συσκευής + Αναζήτηση επαφών, αρχείων και ρυθμίσεων του τηλεφώνου σας + Εμφάνιση κρυφών εφαρμογών στα αποτελέσματα αναζήτησης + Εάν πληκτρολογηθεί το πλήρες όνομα + Αλγόριθμος αναζήτησης Αναζήτηση Εφαρμογής - Global search (on-device) - Global search (via ASI) + Γενική αναζήτηση (στην συσκευή) + Γενική αναζήτηση (μέσω ASI) - Show in search results + Εμφάνιση στα αποτελέσματα αναζήτησης Εφαρμογές & Συντομεύσεις - App shortcuts + Συντομεύσεις εφαρμογών Άτομα - Pixel tips - Android settings + Συμβουλές Pixel + Ρυθμίσεις Android Αρχεία Προτάσεις ιστού - Search history + Ιστορικό αναζήτησης Αριθμομηχανή Πολυμέσα, αρχεία, & άλλα Επαφές και άλλα - Μέσω Startpage + Μέσω %1$s - Maximum number of apps in search results - Maximum number of people in search results - Maximum number of files in search results - Maximum number of settings entries in search results - Maximum number of history entries in search results - Maximum number of suggestions in search results - Maximum web suggestion delay + Μέγιστος αριθμός εφαρμογών στα αποτελέσματα αναζήτησης + Μέγιστος αριθμός ατόμων στα αποτελέσματα αναζήτησης + Μέγιστος αριθμός εφαρμογών στα αποτελέσματα αναζήτησης + Μέγιστος αριθμός καταχωρήσεων ρυθμίσεων στα αποτελέσματα αναζήτησης + Μέγιστος αριθμός καταχωρήσεων ιστορικού στα αποτελέσματα αναζήτησης + Μέγιστος αριθμός προτάσεων στα αποτελέσματα αναζήτησης + Μέγιστη καθυστέρηση προτάσεων ιστού - To search for contacts, grant contacts and phone permissions to Lawnchair - To search your files, grant storage permissions to Lawnchair - Grant permissions + Για αναζήτηση επαφών, εκχωρήστε δικαιώματα ανάγνωσης επαφών και τηλεφώνου στον εκκινητή Lawnchair + Για αναζήτηση στα αρχεία σας, εκχωρήστε δικαιώματα ανάγνωσης αποθηκευτικού χώρου στον εκκινητή Lawnchair + Εκχώρηση δικαιωμάτων + Εκκινητής Lawnchair (σύνθεση) + Πάροχος προτάσεων ιστού + Χρήση εικονιδίου παρόχου προτάσεων ιστού στη μπάρα αναζήτησης + Ταίριασμα μορφής της μπάρας αναζήτησης με το στυλ της μπάρας εφαρμογών diff --git a/lawnchair/res/values-en-rCA/strings.xml b/lawnchair/res/values-en-rCA/strings.xml index 7b9f5713d65..54a560dce70 100644 --- a/lawnchair/res/values-en-rCA/strings.xml +++ b/lawnchair/res/values-en-rCA/strings.xml @@ -221,9 +221,20 @@ Dark System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colors Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-es-rES/strings.xml b/lawnchair/res/values-es-rES/strings.xml index 173bdd324d0..3f084deb8c3 100644 --- a/lawnchair/res/values-es-rES/strings.xml +++ b/lawnchair/res/values-es-rES/strings.xml @@ -23,7 +23,7 @@ --> Vista previa Crear - Backup + Respaldo Restaurar Eliminar Restablecer @@ -34,16 +34,16 @@ Siempre Nunca Portapapeles - Copy link + Copiar vínculo Copiar Pegar Cargando… Gestionado por Lawnchair Preferencias - Home settings - System settings - Change settings + Configuración inicial + Configuración del sistema + Cambiar ajustes Fondo de Pantalla - Background opacity + Opacidad del fondo - Copied to clipboard - Item eliminado + Copiado al portapapeles + Elemento eliminado - What to show + Qué mostrar - To lock your phone when performing a gesture, Lawnchair requires accessibility access.\n\nLawnchair doesn\'t watch any user action, though the privilege to do so is required for all accessibility services. Lawnchair discards any event sent by the system.\n\nIn order to lock your phone, Lawnchair uses the performGlobalAction Accessibility service. - %1$d x %2$d + Para bloquear su teléfono al realizar un gesto, Lawnchair requiere acceso de accesibilidad.\n\nLawnchair no observará ninguna acción del usuario, aunque se requiere el privilegio de hacerlo para todos los servicios de accesibilidad. Lawnchair descarta cualquier evento enviado por el sistema.\n\nPara bloquear su teléfono, Lawnchair utiliza el servicio de accesibilidad performGlobalAction. + %s & %s Ajustes General - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + Colores, paquetes de iconos, punto de notificaciones + Pantalla principal + Feed, cuadrículas, iconos Dock - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + Barra de búsqueda, número de iconos + Cajón de aplicaciones + Apps Ocultas, número de columnas, iconos + Búsqueda en el Cajón + Sugerencias de la web, búsqueda global Carpetas - Row and column count + Número de filas y de columnas Gestos - Taps and swipes + Toques y deslizamientos Recientes - Clear All button, corner radius + Botón \"borrar todo\", radio de la esquina Acerca de - App info + Información de la aplicación Reiniciar Lawnchair - Experimental features + Funciones experimentales - Font customization + Tipografía personalizada Algunos textos permanecen sin cambios - At a Glance calendar customization + Personalizar el calendario del \"un vistazo\" Permitir mostrar fechas en sistemas de calendario no gregorianos - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + Incrementar el tamaño máximo de la cuadrícula + Aumenta el tamaño máximo de la cuadrícula de pantalla de inicio de 10 x 10 a 20 x 20 + Recargar siempre los iconos Evitar el uso de iconos en caché de paquetes de iconos - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + Bloqueo/desbloqueo + Evitar que la aplicación seleccionada cierre al presionar \"Borrar todo\" - To access shortcuts and additional features, set Lawnchair as your default launcher - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other + Para acceder a atajos y características adicionales, establezca Lawnchair como su lanzador predeterminado + Puntos de Notificación + Mostrar el contador de notificaciones + Color del contador de notificaciones + Color del punto de notificación + Advertencia: Los puntos de notificación y los contadores de colores no tienen el suficiente contraste requerido + Advertencia: Los puntos de notificación y los contadores de colores no tienen el suficiente contraste entre sí Se necesita acceso a las notificaciones - To show Notification Dots, turn on app notifications for %1$s + Para ver los puntos de notificación, conceda los permisos para enviar notificaciones +%1$s - Icon style - Icon shape - Icon size - Show labels - Label size - Use multiple lines + Estilo de icono + Forma del icono + Tamaño de iconos + Mostrar etiquetas + Tamaño de la etiqueta + Usar varias líneas - Transparent themed icons + Iconos transparentes del tema Usar fondo transparente en iconos temáticos - Auto-adaptive icons - For all non-adaptive icons - Background lightness - Use 100% background lightness for white - Reset custom icons + Iconos adaptativos + Para todos los iconos que no se adapten + Luminosidad del fondo + Usar 100% de luz de fondo para blancos + Restablecer los iconos personalizados Todos los iconos personalizados se restablecerán. ¿Desea continuar? Iconos Restablecer a lo predeterminado Abrir selector externo - Pick icon from - Couldn\'t load more icons + Elegir icono desde + No se pudieron cargar más iconos Sistema Circular @@ -161,54 +162,54 @@ iOS Octágono One UI - Rounded square - Sharp square + Cuadrado redondo + Cuadrado afilado Cuadrado Círculo Cuadrado Lágrima - Custom icon shape - Create custom icon shape - Edit custom icon shape - Corner shape + Forma de icono personalizada + Crear forma de ícono personalizada + Editar forma de icono personalizada + Forma de esquina Redondo Suavizado Cortado - Top left - Top right - Bottom left - Bottom right - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + Arriba izquierda + Arriba derecha + Abajo a la izquierda + Abajo a la derecha + Exportar al portapapeles + Importar desde el portapapeles + El portapapeles no contiene una forma de icono válida - Icon pack - Themed icon source - System icons - Themed icons + Paquete de iconos + Fuente de iconos temáticos + Iconos del sistema + Iconos Temáticos Apagado - Home screen - Home screen & app drawer + Pantalla principal + Pantalla de Inicio & Cajón de aplicaciones No hay packs de iconos compatibles - Add fonts - OTF and TTF fonts are supported + Añadir fuentes + Las fuentes OTF y TTF son compatibles Fuente no encontrada - Font (experimental) + Fuente (Experimental) General Encabezados - Headings (medium) + Encabezados (mediano) Cuerpo - Body (medium) + Cuerpo (mediano) Cursiva Delgada - Extra light + Luz adicional Claro Regular Media Seminegrita Negrita - Extra bold + Negrita Negra + Estilo de color + Anaranjado + Mezcla de tonalidades + Vibrante + Expresivo + Arcoiris + Ensalada de frutas + Contenido + Monocromático Colores - Accent color + Color de acento + Stroke color Muestras RGB Rojo @@ -235,7 +247,7 @@ Brillo HEX Controles deslizantes - Invalid color + Color no válido Cargando Cargado - Battery low + Batería baja "%1$d%% — Cargado en %2$s" De un Vistazo - What to show + Qué mostrar Calendario - Date & time + Fecha y hora Fecha Hora - Time format - Follow system - 12-hour format - 24-hour format + Formato de hora + Predeterminado del Sistema + Formato de 12 horas + Formato de 24 horas Clima - Battery status + Estado de la batería Reproduciendo - Tap to set up + Toca para configurar Para usar %1$s, activa los puntos de notificación. - Show on home screen - At a Glance can be manually added to the home screen by placing the Lawnchair widget + Mostrar en la pantalla de inicio + De un Vistazo puede ser agregado a la pantalla de inicio colocando el widget \"Lawnchair\" - At a Glance provider + Mostrar el Widget \"De Un Vistazo\" Google Búsqueda de Google @@ -287,9 +299,9 @@ Noticias Soporte Producto - Design & development + Diseño y desarrollo Desarrollo - QuickSwitch maintenance + Rapidez de Mantenimiento Opciones de desarrollador Soporte & Relaciones Públicas Reconocimientos @@ -299,14 +311,14 @@ Backup and restore --> - Create backup - What to back up - Layout and settings + Crear copia de seguridad + Que quieres respaldar + Diseño y configuración Fondo de pantalla Copia de seguridad creada No se pudo crear la copia de seguridad - Restore backup - What to restore + Restaurar respaldo + Que quieres restaurar Copia de seguridad restaurada No se pudo restaurar la copia de seguridad Archivo de copia de seguridad inválido @@ -315,96 +327,101 @@ Gesture settings --> - Double tap - Swipe up - Swipe down - Home button - Back button - Do nothing + Doble pulsación + Deslizar hacia arriba + Deslizar hacia abajo + Botón de inicio + Botón de atrás + No hacer nada Modo reposo - Open notification panel - Open app + Abrir panel de notificaciones + Abrir app Abrir %1$s - Open app drawer - Open app search - Open search - Pick app - Admin permissions required - To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" + Abrir cajón de aplicaciones + Abrir buscador de aplicaciones + Abrir búsqueda + Elegir app + Permisos de administrador requeridos + Para usar el doble toque para apagar la pantalla, establece Lawnchair como una app de administrador de dispositivos. Pulsa en \"Abrir Configuración\", luego en \"Activar esta aplicación de administrador de dispositivos.\" Se desactivará el doble toque para dormir. - Turn on accessibility service - To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" - Open settings + Activar el servicio de accesibilidad + Para usar el doble toque para apagar la pantalla, activa el servicio de accesibilidad de Lawnchair. Toca en \"Abrir Configuración\", luego selecciona \"Lawnchair\" y activa \"Usar Lawnchair\". + Abrir configuración - Lawnchair bug report - %1$s crashed - Upload crash log + Reportar error de Lawnchair + %1$s ha dejado de funcionar + Cargar registro de error Error al subir Subiendo… - Bug reports - Upload status - %d new reports - Multiple new reports + Reportes de errores + Estado de subida + %d nuevos informes + Varios informes nuevos - Home screen rotation - Allow home screen rotation when device is rotated - Add new apps to home screen - Show feed + Rotación de Pantalla de Inicio + Permitir rotación de la pantalla de inicio cuando se gira el dispositivo + Habilitar desenfoque de fondo de pantalla + Intensidad del desenfoque + Umbral de factor + Añadir nuevas aplicaciones a la pantalla de inicio + Mostrar Feed No hay apps de feed instaladas Feed - Feed provider - Scroll wallpaper - Wallpaper depth effect - Zoom in and out of the wallpaper when transitioning between areas of the launcher - Top shadow - Home screen grid - Lock home screen - Unlock home screen - Home screen is locked + Proveedor del feed + Desplazar fondo + Efecto de profundidad del fondo de pantalla + Acerca y aleja el fondo de pantalla al cambiar entre áreas del launcher + Mostrar sombra superior + Cuadrícula de Pantalla de Inicio + Bloquear pantalla de inicio + Desbloquear pantalla de inicio + La pantalla de inicio está bloqueada Evita cambios en la disposición de la pantalla de inicio Mostrar paginación de puntos Usar puntos en vez de líneas para mostrar el número de página - Use new pop-up style - Use Material You\'s bouncy and slightly consolidated pop-up style - Pop-up menu - Show lock button - Show system settings entry - Show Edit button - Status bar - Show status bar - Dark status bar - Text color + Usar nuevo estilo de ventana emergente + Usa el estilo del material rebotado y ligeramente consolidado estilo + Menú emergente + Mostrar botón de bloqueo + Mostrar entrada de configuración del sistema + Mostrar botón de edición botón + Barra de estado + Mostrar Barra de estado + Barra de Estado Oscura + Color del texto Claro Oscuro - Rounded corners - Allow overlap - Enforce widget resizing + Esquinas Redondeadas + Permitir superposición + Forzar redimensionamiento del Widget Permite redimensionar los widgets que están limitados a un tamaño específico - Remove size constraints + Quitar restricciones de tamaño Remueve las restricciones de tamaño mínimo y máximo de los widgets - Show dock - Search bar - Search bar widget + Mostrar Dock + Barra de Búsqueda + Widget de barra de búsqueda Deshabilitado - Google Search bar + Barra de búsqueda de Google + Opacidad + Stroke Radio de esquina - Apply accent color - Search provider - Dock icons - Bottom padding + Aplicar acento de color + Proveedor de Búsqueda + Dock iconos + Relleno inferior - App search - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + Búsqueda de Aplicaciones + %1$s y Lawnchair tienen un acuerdo de reparto de ingresos.\n\nBuscar con %1$s ayuda a apoyar a Lawnchair. Aplicación Página web App requerida @@ -413,43 +430,43 @@ Google Lens Búsqueda por Voz - Hidden apps - Load apps in bulk - Load and display icons in bulk instead of individually - Remember position + Apps ocultas + Cargar apps en masa + Cargar y mostrar iconos en masa en lugar de individualmente + Recordar posición Recordar la posición del cajón de aplicaciones después de salir del cajón - Show scrollbar - App drawer columns - Row height - Horizontal padding + Mostrar la barra de desplazamiento + Columnas del cajón de aplicaciones + Altura de fila + Relleno horizontal - Hide from app drawer - Hidden apps (%1$d) + Ocultar del cajón de aplicaciones + Apps ocultas (%1$d) - %1$d app - %1$d apps + %1$d aplicacion + %1$d aplicaciones - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + Opacidad del fondo del icono + Color de fondo del icono + Columnas máximas de carpetas + Máximas filas de carpetas - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration - Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + Estos ajustes se ignorarán, ya que Lawnchair no está configurado como el proveedor de recientes + Integración del sistema incompatible + Su dispositivo está configurado para tener gestos del sistema (conocidos como Quickstep) proporcionados por %1$s, pero esta versión de %1$s no es compatible con tu versión de Android. Para continuar utilizando tu dispositivo, por favor desinstala las actualizaciones de %1$s o deshabilita %1$s como proveedor de gestos del sistema. + Fondo translúcido + Opacidad del fondo + Acciones rápidas Compartir Lens - Clear all + Borrar todo Forzar la detención - Screen corner radius - Custom screen corner radius - When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. + Radio de esquina de la pantalla + Radio de esquina de la pantalla personalizado + Cuando deslizas hacia abajo para abrir Recientes, la aplicación actual sigue tu dedo, encogiéndose en una tarjeta. Utiliza este control deslizante para ajustar el radio de esquina de la tarjeta cuando es casi de pantalla completa de tal forma que coincida con las esquinas de tu pantalla. Barra de tareas - Show taskbar (experimental) + Mostrar barra de tareas (Experimental) Buscar Buscar aplicaciones - No apps found matching \"%1$s\" + No se han encontrado aplicaciones que coincidan con \"%1$s\" De internet - Contacts from device - Files from device - Settings from device - Search for more apps - Buscar en Startpage - No app store or browser installed - Clear search history - Clear search box + Contactos del dispositivo + Archivos del dispositivo + Ajustes del dispositivo + Buscar más aplicaciones + Buscar en %1$s + No hay tienda de aplicaciones ni navegador instalado + Limpiar historial de búsqueda + Limpiar cuadro de búsqueda Buscar - Show search bar - Automatically show keyboard - Fuzzy search - Approximate matching for app searches + Mostrar Barra de Búsqueda + Mostrar teclado automáticamente + Búsqueda Aproximada + Coincidencia aproximada de búsquedas de aplicaciones Sugerencias - Show suggested apps at the top of the drawer - Device search - Search your phone contacts, files, and settings - Show hidden apps in search results - If full name is typed - Search algorithm + Mostrar las aplicaciones sugeridas en la parte superior del cajón de aplicaciones + Buscar en el Dispositivo + Busca en tus contactos, archivos y ajustes + Mostrar aplicaciones ocultas en los resultados de la búsqueda + Si el nombre completo está escrito + Algoritmo de búsqueda Búsqueda de Aplicaciones - Global search (on-device) - Global search (via ASI) + Búsqueda global (en el dispositivo) + Búsqueda global (a través de ASI) - Show in search results + Mostrar en los resultados de búsqueda Apps y Atajos - App shortcuts + Accesos directos Contactos - Pixel tips - Android settings + Consejos de Pixel + Ajustes de Android Archivos Sugerencias web - Search history + Historial de búsqueda Calculadora Multimedia, archivos y más Contactos y más - Desde Startpage + Via %1$s - Maximum number of apps in search results - Maximum number of people in search results - Maximum number of files in search results - Maximum number of settings entries in search results - Maximum number of history entries in search results - Maximum number of suggestions in search results - Maximum web suggestion delay + Número máximo de aplicaciones en los resultados de la búsqueda + Número máximo de personas en los resultados de la búsqueda + Número máximo de archivos en los resultados de búsqueda + Número máximo de entradas de ajustes en los resultados de búsqueda + Número máximo de entradas del historial en los resultados de búsqueda + Número máximo de sugerencias en los resultados de búsqueda + Retraso máximo de sugerencias web - To search for contacts, grant contacts and phone permissions to Lawnchair - To search your files, grant storage permissions to Lawnchair - Grant permissions + Para buscar contactos, permítele a Lawnchair los permisos de Contactos y Teléfono + Para buscar en tus archivos, permítele a Lawnchair los permisos de Almacenamiento + Permitir los permisos + Lawnchair (compuesto) + Proveedor de sugerencias web + Mostrar icono del proveedor de sugerencias en la barra de búsqueda + Coincidir con el estilo de barra de búsqueda diff --git a/lawnchair/res/values-et-rEE/strings.xml b/lawnchair/res/values-et-rEE/strings.xml index 7b9f5713d65..54a560dce70 100644 --- a/lawnchair/res/values-et-rEE/strings.xml +++ b/lawnchair/res/values-et-rEE/strings.xml @@ -221,9 +221,20 @@ Dark System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colors Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-fa-rIR/strings.xml b/lawnchair/res/values-fa-rIR/strings.xml index 280d675802f..4dadbd42f5b 100644 --- a/lawnchair/res/values-fa-rIR/strings.xml +++ b/lawnchair/res/values-fa-rIR/strings.xml @@ -221,9 +221,20 @@ تاریک سیستم Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic رنگ‌ها Accent color + Stroke color سواچ‌ها آرجی‌بی قرمز @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget غیر فعال Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-fi-rFI/strings.xml b/lawnchair/res/values-fi-rFI/strings.xml index fddfc7ab9a1..478689f2c2e 100644 --- a/lawnchair/res/values-fi-rFI/strings.xml +++ b/lawnchair/res/values-fi-rFI/strings.xml @@ -221,9 +221,20 @@ Tumma Järjestelmä Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Värit Accent color + Stroke color Väripaletit RGB Punainen @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Pois käytöstä Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-fil-rPH/strings.xml b/lawnchair/res/values-fil-rPH/strings.xml index bfcdcadd907..879955f5edf 100644 --- a/lawnchair/res/values-fil-rPH/strings.xml +++ b/lawnchair/res/values-fil-rPH/strings.xml @@ -221,9 +221,20 @@ Dark System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Mga kulay Accent color + Stroke color Swatches RGB Pula @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-fr-rFR/strings.xml b/lawnchair/res/values-fr-rFR/strings.xml index fe1d2951ab8..54a79458876 100644 --- a/lawnchair/res/values-fr-rFR/strings.xml +++ b/lawnchair/res/values-fr-rFR/strings.xml @@ -23,7 +23,7 @@ --> Aperçu Créer - Backup + Sauvegarder Restaurer Supprimer Réinitialiser @@ -34,16 +34,16 @@ Toujours Jamais Presse-papier - Copy link + Copier le lien Copier Coller Chargement… Géré par Lawnchair Préférences - Home settings - System settings - Change settings + Paramètres de l\'accueil + Paramètres du système + Modifier les paramètres Fond d\'écran - Background opacity + Opacité de l\'arrière-plan - Copied to clipboard + Copié dans le presse-papiers Élément supprimé - What to show + Informations à afficher Pour pouvoir verrouiller votre téléphone en un seul geste, Lawnchair a besoin des droits d\'accessibilité.\n\nLawnchair n\'observe aucune action utilisateur, mais ce privilège est accordé à tous les services d\'accessibilité. Lawnchair rejette tout événement envoyé par le système.\n\nAfin de verrouiller votre téléphone, Lawnchair utilise le service d\'accessibilité performGlobalAction. %1$d x %2$d @@ -81,77 +81,77 @@ --> Paramètres Général - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + Couleurs, packs d\'icônes, pastilles de notification + Écran d\'accueil + Flux, grille, icônes Dock - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + Barre de recherche, nombre d\'icônes + Tiroir d\'applications + Applications masquées, nombre de colonnes, icônes + Recherche dans le tiroir + Suggestions Web, recherche globale Dossiers - Row and column count + Nombre de lignes et de colonnes Gestes - Taps and swipes + Appuis et balayages Récents - Clear All button, corner radius + Bouton Tout effacer, rayon d\'angle À propos - App info + Infos sur l\'appli Redémarrer Lawnchair - Experimental features + Fonctionnalités expérimentales - Font customization + Personnalisation de la police Certains textes restent inchangés - At a Glance calendar customization + Personnalisation du calendrier dans Aperçu Autoriser l\'affichage de la date dans les systèmes de calendrier non grégoriens - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + Augmenter la taille maximale de la grille de l\'écran d\'accueil + Augmenter la taille maximale autorisée de la grille de 10 x 10 à 20 x 20 + Toujours recharger les icônes Éviter d\'utiliser les icônes en cache provenant des packs d\'icônes - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + Verrouiller/déverrouiller + Empêcher l\'application sélectionnée d\'être fermée lors d\'un appui sur « Tout effacer » - To access shortcuts and additional features, set Lawnchair as your default launcher - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other + Pour pouvoir accéder aux raccourcis et à des fonctionnalités supplémentaires, définissez Lawnchair en tant que lanceur d\'applications par défaut. + Pastilles de notification + Afficher le compteur de notifications + Couleur des pastilles de notification + Couleur du compteur de notifications + Attention : il n\'y a pas assez de contraste entre la couleur de la pastille et celle du compteur + Attention : il se peut qu\'il n\'y ait pas toujours assez de contraste entre la couleur de la pastille et celle du compteur Accès aux notifications requis - To show Notification Dots, turn on app notifications for %1$s + Pour afficher les pastilles de notification, activez les notifications pour l\'application %1$s. - Icon style - Icon shape - Icon size - Show labels - Label size - Use multiple lines + Style d\'icône + Forme d\'icône + Taille des icônes + Afficher le nom des éléments + Taille du nom des éléments + Utiliser plusieurs lignes - Transparent themed icons + Icônes à thème transparentes Appliquer un arrière-plan transparent aux icônes à thème - Auto-adaptive icons - For all non-adaptive icons - Background lightness - Use 100% background lightness for white - Reset custom icons + Icônes adaptatives automatiques + Pour toutes les icônes non-adaptatives + Luminosité de l\'arrière-plan + Définissez la luminosité à 100 % pour un arrière-plan blanc + Réinitialiser les icônes personnalisées Toutes les icônes personnalisées seront réinitialisées. Voulez-vous continuer ? Icônes Réinitialiser Ouvrir le sélecteur externe - Pick icon from - Couldn\'t load more icons + Choisir une icône parmi + Impossible de charger plus d\'icônes Système Cercle @@ -161,45 +161,45 @@ iOS Octogone One UI - Rounded square - Sharp square + Carré arrondi + Carré net Carré Carré rond Goutte - Custom icon shape - Create custom icon shape - Edit custom icon shape - Corner shape + Forme d\'icône personnalisée + Créer une forme d\'icône personnalisée + Modifier la forme d\'icône personnalisée + Type d\'angle Arrondi Lisse Coupé - Top left - Top right - Bottom left - Bottom right - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + En haut à gauche + En haut à droite + En bas à gauche + En bas à droite + Exporter vers le presse-papier + Importer depuis le presse-papier + Le presse-papier ne contient pas de forme d\'icône valide - Icon pack - Themed icon source - System icons - Themed icons + Pack d\'icônes + Source des icônes à thème + Icônes du système + Icônes à thème Désactivé - Home screen - Home screen & app drawer + Écran d\'accueil + Écran d\'accueil et tiroir d\'applications Aucun pack d\'icônes pris en charge - Add fonts - OTF and TTF fonts are supported + Ajouter des polices + Les polices sont prises en charge aux formats OTF et TTF Police introuvable - Font (experimental) + Police (expérimental) Général Titres - Headings (medium) + Titres (medium) Corps - Body (medium) + Corps (medium) Italic Thin Extra light @@ -220,10 +220,21 @@ Clair Sombre Système - Match wallpaper + En fonction du fond d\'écran + + Style des couleurs + Spritz + Point tonal + Vif + Expressif + Arc-en-ciel + Salade de fruits + Contenu + Monochromatique Couleurs - Accent color + Couleur d\'accentuation + Couleur du contour Échantillons RVB Rouge @@ -235,7 +246,7 @@ Luminosité Hexadécimal Curseurs - Invalid color + Couleur invalide Recharge en cours Chargé - Battery low + Batterie faible "%1$d% % — Chargé dans %2$s" Aperçu - What to show + Informations à afficher Calendrier - Date & time + Date et heure Date Heure - Time format - Follow system - 12-hour format - 24-hour format + Format de l\'heure + Utiliser le paramètre du système + Format 12 heures + Format 24 heures Météo - Battery status + État de la batterie En écoute - Tap to set up + Appuyez pour configurer Pour utiliser %1$s, activez les pastilles de notifications. - Show on home screen - At a Glance can be manually added to the home screen by placing the Lawnchair widget + Afficher sur l\'écran d\'accueil + Aperçu peut être ajouté manuellement à l\'écran d\'accueil en plaçant le widget Lawnchair - At a Glance provider + Fournisseur d\'Aperçu Google Recherche Google @@ -287,9 +298,9 @@ Actualités Assistance Produit - Design & development + Conception et développement Développement - QuickSwitch maintenance + Maintenance de QuickSwitch DevOps Assistance et relations publiques Remerciements @@ -299,112 +310,117 @@ Backup and restore --> - Create backup - What to back up - Layout and settings + Créer une sauvegarde + Éléments à sauvegarder + Mise en page et paramètres Fond d\'écran - Backup created - Failed to create backup - Restore backup - What to restore - Backup restored - Failed to restore backup - Invalid backup file + Sauvegarde créée + Échec de la création de la sauvegarde + Restaurer une sauvegarde + Éléments à restaurer + Sauvegarde restaurée + Échec de la restauration de la sauvegarde + Fichier de sauvegarde invalide - Double tap - Swipe up - Swipe down - Home button - Back button - Do nothing + Double appui + Balayage vers le haut + Balayage vers le bas + Bouton Accueil + Bouton Retour + Ne rien faire Mettre en veille - Open notification panel - Open app + Ouvrir le panneau des notifications + Ouvrir une application Ouvrir %1$s - Open app drawer - Open app search - Open search - Pick app - Admin permissions required - To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" + Ouvrir le tiroir d\'applications + Ouvrir la recherche d\'applications + Ouvrir la recherche + Sélectionnez une application + Autorisations d\'administration requises + Pour mettre en veille votre appareil à l\'aide d\'un double appui, définissez Lawnchair comme application d\'administration de l\'appareil. Appuyez sur « Ouvrir les paramètres » puis appuyez sur « Activer l\'appli d\'administration de cet appareil. » Vous ne pourrez plus mettre en veille votre appareil à l\'aide d\'un double appui. - Turn on accessibility service - To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" - Open settings + Activez le service d\'accessibilité + Pour mettre en veille votre appareil à l\'aide d\'un double appui, activez le service d\'accessibilité Lawnchair. Appuyez sur « Ouvrir les paramètres », sélectionnez « Lawnchair » puis activez « Utiliser Lawnchair. » + Ouvrir les paramètres - Lawnchair bug report - %1$s crashed - Upload crash log + Signalement de bug Lawnchair + %1$s a planté + Envoyer le journal de plantage Échec de l\'envoi Envoi en cours… - Bug reports - Upload status - %d new reports - Multiple new reports + Signalements de bug + État de l\'envoi + %d nouveaux signalements + Plusieurs nouveaux signalements - Home screen rotation - Allow home screen rotation when device is rotated - Add new apps to home screen - Show feed + Rotation de l\'écran d\'accueil + Autoriser la rotation de l\'écran d\'accueil lorsque l\'appareil est tourné + Activer le floutage du fond d\'écran + Intensité du flou + Seuil factoriel + Ajouter les nouvelles applications à l\'écran d\'accueil + Afficher le flux Aucune application de flux installée Flux - Feed provider - Scroll wallpaper - Wallpaper depth effect - Zoom in and out of the wallpaper when transitioning between areas of the launcher - Top shadow - Home screen grid - Lock home screen - Unlock home screen - Home screen is locked + Fournisseur du flux + Faire défiler le fond d\'écran + Effet de profondeur du fond d\'écran + Zoom avant et arrière du fond d\'écran lors des transitions entre différentes zones du lanceur d\'applications + Ombre du haut + Grille de l\'écran d\'accueil + Verrouiller l\'écran d\'accueil + Déverrouiller l\'écran d\'accueil + L\'écran d\'accueil est verrouillé Empêcher les changements d\'agencement de l\'écran d\'accueil Afficher des points représentant les pages Utiliser des points plutôt que des lignes pour afficher le numéro de page - Use new pop-up style - Use Material You\'s bouncy and slightly consolidated pop-up style - Pop-up menu - Show lock button - Show system settings entry - Show Edit button - Status bar - Show status bar - Dark status bar - Text color + Utiliser le nouveau style de pop-up + Utiliser le style de pop-up Material You + Menu pop-up + Afficher le bouton Verrouiller + Afficher le bouton Paramètres du système + Afficher le bouton Modifier + Barre d\'état + Afficher la barre d\'état + Barre d\'état sombre + Couleur du texte Clair Sombre - Rounded corners - Allow overlap - Enforce widget resizing + Coins arrondis + Autoriser la superposition + Forcer les widgets à pouvoir être redimensionnés Autoriser le redimensionnement des widgets qui sont limités à une taille spécifique - Remove size constraints + Supprimer les contraintes de taille Supprimer les restrictions de taille minimale et maximale des widgets - Show dock - Search bar - Search bar widget + Afficher le dock + Barre de recherche + Widget Barre de recherche Désactivé - Google Search bar + Barre de recherche Google + Opacité + Contour Rayon d\'angle - Apply accent color - Search provider - Dock icons - Bottom padding + Appliquer la couleur d\'accentuation + Fournisseur des résultats de recherche + Icônes dans le dock + Décalage vers le haut - App search - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + Recherche d\'applications + Lawnchair a un accord de partage des revenus avec %1$s.\n\nEn effectuant vos recherches avec %1$s, vous soutenez Lawnchair. Application Site Web Application requise @@ -413,43 +429,43 @@ Google Lens Recherche vocale - Hidden apps - Load apps in bulk - Load and display icons in bulk instead of individually - Remember position + Applications masquées + Charger plusieurs applications à la fois + Charger et afficher les icônes de plusieurs applications à la fois plutôt qu\'une par une + Mémoriser la position Mémoriser la position du tiroir d\'applications après l\'avoir quitté - Show scrollbar - App drawer columns - Row height - Horizontal padding + Afficher la barre de défilement + Colonnes du tiroir d\'applications + Hauteur de ligne + Décalage vers le centre - Hide from app drawer - Hidden apps (%1$d) + Masquer dans le tiroir d\'applications + Applications masquées (%1$d) - %1$d app - %1$d apps + %1$d application + %1$d applications - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + Opacité de l\'arrière-plan des icônes + Couleur de l\'arrière-plan des icônes + Nombre maximal de colonnes dans les dossiers + Nombre maximal de lignes dans les dossiers - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration - Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + Ces paramètres seront ignorés car Lawnchair n\'est pas défini comme fournisseur de Récents + Intégration système incompatible + Votre appareil est configuré pour que la navigation par gestes (appelée Quickstep) soit fournie par %1$s, mais la version installée n\'est pas compatible avec votre version d\'Android. Pour continuer à utiliser votre appareil, désinstallez les mises à jour de %1$s ou désactivez-le en tant que fournisseur système de navigation par gestes. + Arrière-plan translucide + Opacité de l\'arrière-plan + Actions rapides Partager Lens - Clear all + Tout effacer Forcer l\'arrêt - Screen corner radius - Custom screen corner radius - When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. + Rayon d\'angle de l\'écran + Rayon d\'angle de l\'écran personnalisé + Lorsque vous balayez l\'écran vers le haut pour ouvrir Récents, l\'application ouverte suit votre doigt et devient une carte dont la taille diminue progressivement. Utilisez ce curseur pour ajuster le rayon des angles de la carte afin qu\'ils correspondent aux coins de votre écran. Barre des tâches - Show taskbar (experimental) + Afficher la barre des tâches (expérimental) Rechercher Rechercher des applications - No apps found matching \"%1$s\" + Aucune application correspondant à « %1$s » n\'a pu être trouvée Depuis le Web - Contacts from device - Files from device - Settings from device - Search for more apps - Rechercher sur Startpage - No app store or browser installed - Clear search history - Clear search box + Contacts de l\'appareil + Fichiers de l\'appareil + Paramètres de l\'appareil + Rechercher plus d\'applications + Rechercher avec %1$s + Aucun magasin d\'applications ni navigateur installé + Effacer l\'historique des recherches + Effacer la barre de recherche Recherche - Show search bar + Afficher la barre de recherche Afficher le clavier automatiquement - Fuzzy search - Approximate matching for app searches + Recherche approximative + Correspondance approximative pour les recherches d\'applications Suggestions - Show suggested apps at the top of the drawer - Device search - Search your phone contacts, files, and settings - Show hidden apps in search results - If full name is typed - Search algorithm + Afficher des applications suggérées en haut du tiroir + Recherche sur l\'appareil + Recherchez parmi les contacts, fichiers et paramètres de votre téléphone + Afficher les applications masquées dans les résultats de recherche + Si le nom complet est saisi + Algorithme de recherche Recherche d\'applications - Global search (on-device) - Global search (via ASI) + Recherche globale (sur l\'appareil) + Recherche globale (via ASI) - Show in search results + Afficher dans les résultats de recherche Applications et raccourcis - App shortcuts + Raccourcis d\'applications Personnes - Pixel tips - Android settings + Astuces Pixel + Paramètres Android Fichiers Suggestions Web - Search history + Historique de recherche Calculatrice Médias, fichiers et autres Contacts et autres - Via Startpage + Via %1$s - Maximum number of apps in search results - Maximum number of people in search results - Maximum number of files in search results - Maximum number of settings entries in search results - Maximum number of history entries in search results - Maximum number of suggestions in search results - Maximum web suggestion delay + Nombre maximal d\'applications dans les résultats de recherche + Nombre maximal de personnes dans les résultats de recherche + Nombre maximal de fichiers dans les résultats de recherche + Nombre maximal de paramètres dans les résultats de recherche + Nombre maximal d\'éléments de l\'historique dans les résultats de recherche + Nombre maximal de suggestions dans les résultats de recherche + Délai maximal des suggestions Web - To search for contacts, grant contacts and phone permissions to Lawnchair - To search your files, grant storage permissions to Lawnchair - Grant permissions + Pour rechercher des contacts, accordez à Lawnchair les autorisations Contacts et Téléphone. + Pour rechercher des fichiers, autorisez Lawnchair à accéder au stockage. + Accorder les autorisations + Lawnchair (composition) + Fournisseur de suggestions Web + Afficher l\'icône du fournisseur de suggestions Web dans la barre de recherche + Utiliser le style de la barre de recherche du dock diff --git a/lawnchair/res/values-gl-rES/strings.xml b/lawnchair/res/values-gl-rES/strings.xml index 25c9d75b1c1..69be8239cbe 100644 --- a/lawnchair/res/values-gl-rES/strings.xml +++ b/lawnchair/res/values-gl-rES/strings.xml @@ -221,9 +221,20 @@ Dark System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colors Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-hi-rIN/strings.xml b/lawnchair/res/values-hi-rIN/strings.xml index febd332ca59..ea3a5e44e3d 100644 --- a/lawnchair/res/values-hi-rIN/strings.xml +++ b/lawnchair/res/values-hi-rIN/strings.xml @@ -221,9 +221,20 @@ अंधेरा तंत्र Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic रंग Accent color + Stroke color नमूनें RGB लाल @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget अक्षम करें Google Search bar + Opacity + Stroke कोने का अर्द्ध व्यास Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-hr-rHR/strings.xml b/lawnchair/res/values-hr-rHR/strings.xml index 7ee3cae0265..738a404835b 100644 --- a/lawnchair/res/values-hr-rHR/strings.xml +++ b/lawnchair/res/values-hr-rHR/strings.xml @@ -221,9 +221,20 @@ Dark System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colors Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -465,7 +481,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -499,7 +515,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -512,4 +528,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-hu-rHU/strings.xml b/lawnchair/res/values-hu-rHU/strings.xml index c0d6e20109b..ad6eeef87a1 100644 --- a/lawnchair/res/values-hu-rHU/strings.xml +++ b/lawnchair/res/values-hu-rHU/strings.xml @@ -221,9 +221,20 @@ Sötét Rendszer Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Színek Accent color + Stroke color Színminták RGB Piros @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Letiltva Google Search bar + Opacity + Stroke Sarok sugár Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-in-rID/strings.xml b/lawnchair/res/values-in-rID/strings.xml index 8f95281f5d9..9f7328ee24e 100644 --- a/lawnchair/res/values-in-rID/strings.xml +++ b/lawnchair/res/values-in-rID/strings.xml @@ -23,7 +23,7 @@ --> Pratinjau Buat - Backup + Cadangkan Pulihkan Hapus Atur ulang @@ -31,19 +31,19 @@ Kunci Terapkan Kustomisasi - Always - Never + Selalu + Tidak pernah Papan Klip - Copy link + Salin Tautan Salin Tempel Memuat… Dikelola oleh Lawnchair Preferensi - Home settings - System settings - Change settings + Pengaturan beranda + Pengaturan sistem + Ubah pengaturan Wallpaper - Background opacity + Transparansi latar belakang - Copied to clipboard + Disalin ke papan klip Item dihapus - What to show + Yang ditampilkan - Untuk mengunci ponsel Anda saat melakukan gerakan, Lawnchair memerlukan akses aksesibilitas.\n\nLawnchair tidak menonton tindakan pengguna apa pun, meskipun hak istimewa untuk melakukannya diperlukan untuk semua layanan aksesibilitas. Lawnchair membuang acara apa pun yang dikirim oleh sistem.\n\nUntuk mengunci ponsel Anda, Lawnchair menggunakan layanan performGlobalAction Accessibility. - %1$d x %2$d + Untuk mengunci ponsel Anda saat melakukan gerakan, Lawnchair memerlukan akses aksesibilitas.\n\nLawnchair tidak mengawasi tindakan pengguna apa pun, meskipun hak istimewa untuk melakukannya diperlukan untuk semua layanan aksesibilitas. Lawnchair membuang acara apa pun yang dikirim oleh sistem.\n\nUntuk mengunci ponsel Anda, Lawnchair menggunakan layanan aksesibilitas performGlobalAction. + %1$d × %2$d %s & %s Pengaturan Umum - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + Warna, paket ikon, titik notifikasi + Layar beranda + Umpan, kisi, ikon Bilah - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + Bilah pencarian, jumlah ikon + Laci apli + Apli tersembunyi, jumlah kolom, ikon + Pencarian laci + Saran web, pencarian global Folder - Row and column count + Jumlah baris dan kolom Isyarat - Taps and swipes + Ketukan dan usapan Terbaru - Clear All button, corner radius + Tombol Hapus Semua, radius sudut Tentang - App info + Info apli Muat ulang Lawnchair - Experimental features + Fitur eksperimental - Font customization + Kustomisasi font Beberapa teks tetap tidak berubah - At a Glance calendar customization + Kostumisasi kalender Sekilas Memungkinkan menampilkan tanggal dalam sistem kalender non-Gregorian - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + Tingkatkan batas ukuran kisi + Tingkatkan batas ukuran kisi yang diperbolehkan dari 10 x 10 ke 20 x 20 + Selalu muat ulang ikon Hindari menggunakan ikon yang telah di cache dari paket ikon - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + Kunci/buka kunci + Cegah apli terpilih untuk ditutup saat menekan \"Bersihkan semua\" - To access shortcuts and additional features, set Lawnchair as your default launcher - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other + Untuk mengakses pintasan dan fitur tambahan, atur Lawnchair sebagai peluncur default Anda + Titik notifikasi + Tampilkan jumlah notifikasi + Warna titik notifikasi + Warna hitungan notifikasi + Peringatan: Warna titik dan hitungan notifikasi tidak memiliki cukup kontras antara satu sama lain + Peringatan: Warna titik dan hitungan notifikasi mungkin tidak selalu memiliki kontras yang cukup antara satu sama lain Akses notifikasi diperlukan - To show Notification Dots, turn on app notifications for %1$s + Untuk menggunakan Titik Notifikasi, aktifkan notifikasi aplikasi untuk %1$s - Icon style - Icon shape - Icon size - Show labels - Label size - Use multiple lines + Gaya ikon + Bentuk ikon + Ukuran ikon + Tampilkan label + Ukuran label + Gunakan beberapa baris - Transparent themed icons + Ikon bertema transparan Gunakan latar belakang transparan pada ikon bertema - Auto-adaptive icons - For all non-adaptive icons - Background lightness - Use 100% background lightness for white - Reset custom icons + Ikon adaptif otomatis + Untuk semua aplikasi non-adaptif + Kecerahan latar belakang + Gunakan 100% kecerahan latar belakang untuk warna putih + Atur ulang ikon kustom Semua ikon kustom akan diatur ulang. Apakah Anda ingin melanjutkan? Ikon Atur ulang ke default Buka pemilih eksternal - Pick icon from - Couldn\'t load more icons + Pilih ikon dari + Tidak dapat memuat lebih banyak ikon Sistem Lingkaran @@ -161,54 +161,54 @@ iOS Segi delapan One UI - Rounded square - Sharp square + Kotak bundar + Kotak tajam Persegi Squircle Tetesan air - Custom icon shape - Create custom icon shape - Edit custom icon shape - Corner shape + Bentuk ikon kustom + Buat bentuk ikon kustom + Edit bentuk ikon kustom + Bentuk sudut Bulat Halus Potong - Top left - Top right - Bottom left - Bottom right - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + Kiri atas + Kanan atas + Kiri bawah + Kanan bawah + Ekspor ke papan klip + Impor dari papan klip + Papan klip tidak mengandung bentuk ikon yang valid - Icon pack - Themed icon source - System icons - Themed icons + Paket ikon + Sumber ikon bertema + Ikon sistem + Ikon bertema Mati - Home screen - Home screen & app drawer + Layar beranda + Layar beranda & laci aplikasi Tidak ada paket ikon yang didukung - Add fonts - OTF and TTF fonts are supported + Tambahkan font + Font OTF dan TTF didukung Font tidak ditemukan - Font (experimental) + Font (eksperimental) Umum Judul - Headings (medium) + Judul (medium) Badan - Body (medium) + Badan (sedang) Miring Tipis - Extra light + Ekstra tipis Tipis Reguler Medium Semi Tebal Tebal - Extra bold + Ekstra tebal Hitam + Style warna + Spritz + Spot berwarna + Bersemangat + Ekspresif + Pelangi + Salad Buah + Konten + Monokrom Warna - Accent color + Warna aksen + Stroke color Swatch RGB Merah @@ -235,7 +246,7 @@ Kecerahan Hex Sliders - Invalid color + Warna tidak valid Mengisi daya Daya terisi penuh - Battery low + Baterai lemah "%1$d%% — Penuh dalam %2$s" At a Glance - What to show + Untuk ditampilkan Kalender - Date & time + Tanggal & waktu Tanggal Waktu - Time format - Follow system - 12-hour format - 24-hour format + Format waktu + Gunakan pengaturan sistem + Format 12-jam + Format 24-jam Cuaca - Battery status + Status baterai Sedang Memutar - Tap to set up + Ketuk untuk menyiapkan Untuk menggunakan %1$s, aktifkan Titik Notifikasi. - Show on home screen - At a Glance can be manually added to the home screen by placing the Lawnchair widget + Tampilkan di layar beranda + Sekilas dapat ditambahkan secara manual ke layar beranda dengan menaruh widget Lawnchair - At a Glance provider + Penyedia Sekilas Google Pencarian Google @@ -287,9 +298,9 @@ Berita Dukungan Produk - Design & development + Desain & pengembangan Pengembangan - QuickSwitch maintenance + Pemeliharaan QuickSwitch DevOps Bantuan & Relasi Publik Ucapan Terima Kasih @@ -299,14 +310,14 @@ Backup and restore --> - Create backup - What to back up - Layout and settings + Buat cadangan + Untuk dicadangkan + Tata letak dan pengaturan Wallpaper Cadangan dibuat Gagal membuat cadangan - Restore backup - What to restore + Pulihkan cadangan + Untuk dipulihkan Cadangan dipulihkan Gagal memulihkan cadangan Berkas cadangan tidak valid @@ -315,96 +326,101 @@ Gesture settings --> - Double tap - Swipe up - Swipe down - Home button - Back button - Do nothing + Ketuk dua kali + Geser ke atas + Geser ke bawah + Tombol beranda + Tombol kembali + Tidak melakukan apa-apa Tidur - Open notification panel - Open app + Buka panel notifikasi + Buka apli Buka %1$s - Open app drawer - Open app search - Open search - Pick app - Admin permissions required - To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" + Buka laci apli + Buka pencarian apli + Buka pencarian + Pilih apli + Izin admin diperlukan + Untuk menggunakan Ketuk Dua Kali untuk Tidur, atur Lawnchair sebagai apli admin perangkat. Ketuk \"Buka pengaturan\", lalu ketuk \"Aktifkan apli admin perangkat ini.\" Tap Dua Kali untuk Tidur akan dimatikan. - Turn on accessibility service - To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" - Open settings + Aktifkan layanan aksesibilitas + Untuk menggunakan Ketuk Dua Kali untuk Tidur, aktifkan Lawnchair sebagai layanan aksesibilitas. Ketuk \"Buka pengaturan\", pilih \"Lawnchair\" lalu aktifkan \"Gunakan Lawnchair.\" + Buka pengaturan - Lawnchair bug report - %1$s crashed - Upload crash log + Laporan bug Lawnchair + %1$s mogok + Unggah laporan mogok Gagal mengunggah Mengunggah… - Bug reports - Upload status - %d new reports - Multiple new reports + Laporan bug + Status unggahan + %d laporan baru + Beberapa laporan baru - Home screen rotation - Allow home screen rotation when device is rotated - Add new apps to home screen - Show feed + Rotasi layar beranda + Izinkan rotasi layar beranda ketika perangkat diputar + Enable wallpaper blur + Blur intensity + Factor threshold + Tambahkan apli baru ke layar beranda + Tampilkan umpan Tidak ada aplikasi feed yang terpasang Umpan - Feed provider - Scroll wallpaper - Wallpaper depth effect - Zoom in and out of the wallpaper when transitioning between areas of the launcher - Top shadow - Home screen grid - Lock home screen - Unlock home screen - Home screen is locked + Penyedia umpan + Geser wallpaper + Efek kedalaman wallpaper + Perbesar dan perkecil wallpaper ketika beralih area dalam peluncur + Bayangan atas + Kisi layar utama + Kunci layar beranda + Buka kunci layar beranda + Layar beranda dikunci Mencegah perubahan pada tata letak layar utama - Show dot pagination + Tampilkan penomoran titik Gunakan titik, bukan garis, untuk menunjukkan nomor halaman - Use new pop-up style - Use Material You\'s bouncy and slightly consolidated pop-up style - Pop-up menu - Show lock button - Show system settings entry - Show Edit button - Status bar - Show status bar - Dark status bar - Text color + Gunakan gaya pop-up baru + Gunakan gaya pop-up Material You yang bulat dan sedikit terkonsolidasi + Gaya pop-up + Tampilkan tombol kunci + Tampilkan entri pengaturan sistem + Tampilkan tombol Edit + Bar status + Tampilkan bar status + Bar status gelap + Warna teks Terang Gelap - Rounded corners - Allow overlap - Enforce widget resizing + Sudut lengkung + Izinkan tumpang tindih + Paksa ubah ukuran widget Memungkinkan pengubahan ukuran widget yang dibatasi pada ukuran tertentu - Remove size constraints + Hapus batasan ukuran Menghapus batasan ukuran minimum dan maksimum widget - Show dock - Search bar - Search bar widget + Tampilkan dok + Bilah pencarian + Widget bilah pencarian Dimatikan - Google Search bar + Bilah Penelusuran Google + Opacity + Stroke Radius sudut - Apply accent color - Search provider - Dock icons - Bottom padding + Terapkan warna aksen + Penyedia pencarian + Ikon dok + Padding bawah - App search - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + Pencarian apli + %1$s dan Lawnchair memiliki persetujuan pembagian hasil.\n\nMencari dengan %1$s membantu mendukung Lawnchair. Aplikasi Website Aplikasi diperlukan @@ -413,42 +429,42 @@ Google Lens Penelusuran Suara - Hidden apps - Load apps in bulk - Load and display icons in bulk instead of individually - Remember position + Apli tersembunyi + Muat apli dalam jumlah besar + Muat dan tampilkan ikon dalam jumlah besar daripada secara individual + Ingat posisi Mengingat posisi laci aplikasi setelah keluar dari laci - Show scrollbar - App drawer columns - Row height - Horizontal padding + Tampilkan bilah gulir + Kolom laci apli + Tinggi baris + Padding horizontal - Hide from app drawer - Hidden apps (%1$d) + Sembunyikan dari laci apli + Apli tersembunyi (%1$d) - %1$d apps + %1$d apli - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + Transparansi latar belakang ikon + Warna latar belakang ikon + Kolom folder maksimum + Baris folder maksimum - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration - Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + Pengaturan ini akan diabaikan karena Lawnchair tidak diatur sebagai penyedia Terbaru + Integrasi sistem tidak kompatibel + Perangkat Anda dikonfigurasi untuk menggunakan gestur sistem (dikenal sebagai Quickstep) disediakan oleh %1$s, tetapi versi %1$s tidak kompatibel dengan versi Android Anda. Untuk melanjutkan menggunakan perangkat Anda, harap lepas pembarian %1$s atau nonaktifkan %1$s sebagai penyedia gestur sistem. + Latar belakang transparan + Transparansi latar belakang + Tindakan cepat Bagikan Lens - Clear all + Bersihkan semua Tutup paksa - Screen corner radius - Custom screen corner radius - When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. + Radius sudut layar + Radius sudut layar kustom + Saat Anda menggeser ke atas untuk membuka Terbaru, aplikasi saat ini mengikuti jari Anda, mengecil menjadi kartu. Gunakan slider ini untuk menyesuaikan radius sudut kartu saat hampir memenuhi layar sehingga cocok dengan sudut layar Anda. Bilah Tugas - Show taskbar (experimental) + Tampilkan taskbar (eksperimental) Pencarian Cari Aplikasi - No apps found matching \"%1$s\" + Tidak ada apli yang cocok dengan \"%1$s\" Dari web - Contacts from device - Files from device - Settings from device - Search for more apps - Cari di Startpage - No app store or browser installed - Clear search history - Clear search box + Kontak dari perangkat + Berkas dari perangkat + Pengaturan dari perangkat + Cari lebih banyak aplikasi + Search on %1$s + Tidak ada toko aplikasi atau browser yang terinstal + Bersihkan riwayat pencarian + Bersihkan bilah pencarian Cari - Show search bar + Tampilkan bilah pencarian Tampilkan keyboard otomatis - Fuzzy search - Approximate matching for app searches + Pencarian kabur + Perkirakan kecocokan untuk pencarian aplikasi Saran - Show suggested apps at the top of the drawer - Device search - Search your phone contacts, files, and settings - Show hidden apps in search results - If full name is typed - Search algorithm + Tampilkan saran aplikasi di bagian atas laci + Pencarian perangkat + Cari kontak, berkas, dan pengaturan Anda + Tampilkan aplikasi tersembunyi dalam hasil pencarian + Jika nama lengkap diketik + Algoritma pencarian Pencarian Aplikasi - Global search (on-device) - Global search (via ASI) + Pencarian global (dalam perangkat) + Pencarian global (melalui ASI) - Show in search results + Tampilkan dalam hasil pencarian Aplikasi & Pintasan - App shortcuts + Pintasan apli Orang - Pixel tips - Android settings + Tips Pixel + Pengaturan Android File Saran web - Search history + Riwayat pencarian Kalkulator Media, file, dan lainnya Kontak dan lainnya - Melalui Startpage + Via %1$s - Maximum number of apps in search results - Maximum number of people in search results - Maximum number of files in search results - Maximum number of settings entries in search results - Maximum number of history entries in search results - Maximum number of suggestions in search results - Maximum web suggestion delay + Jumlah apli maksimum dalam hasil pencarian + Jumlah orang maksimum dalam hasil pencarian + Jumlah berkas maksimum dalam hasil pencarian + Jumlah entri pengaturan maksimum dalam hasil pencarian + Jumlah entri riwayat maksimum dalam hasil pencarian + Jumlah saran maksimum dalam hasil pencarian + Penundaan saran web maksimum - To search for contacts, grant contacts and phone permissions to Lawnchair - To search your files, grant storage permissions to Lawnchair - Grant permissions + Untuk mencari kontak, berikan izin kontak dan telepon ke Lawnchair + Untuk mencari berkas Anda, berikan izin penyimpanan ke Lawnchair + Berikan izin + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-it-rIT/strings.xml b/lawnchair/res/values-it-rIT/strings.xml index 72496683eb2..226e157f6a1 100644 --- a/lawnchair/res/values-it-rIT/strings.xml +++ b/lawnchair/res/values-it-rIT/strings.xml @@ -34,16 +34,16 @@ Sempre Mai Appunti - Copy link + Copia link Copia Incolla Caricamento… Gestito da Lawnchair Preferenze - Home settings - System settings - Change settings + Impostazioni Schermata Home + Impostazioni di Sistema + Modifica impostazioni Sfondo - Background opacity + Opacità sfondo - Copied to clipboard + Copiato negli appunti Elemento rimosso - What to show + Cosa mostrare - To lock your phone when performing a gesture, Lawnchair requires accessibility access.\n\nLawnchair doesn\'t watch any user action, though the privilege to do so is required for all accessibility services. Lawnchair discards any event sent by the system.\n\nIn order to lock your phone, Lawnchair uses the performGlobalAction Accessibility service. + Per bloccare il telefono quando si esegue un gesto, Lawnchair richiede l\'accesso all\'accessibilità.\n\nLawnchair non osserva alcuna azione dell\'utente, anche se il privilegio di farlo è richiesto per tutti i servizi di accessibilità. Lawnchair scarta qualsiasi evento inviato dal sistema.\n\nPer bloccare il telefono, Lawnchair utilizza il servizio di accessibilità performGlobalAction. %1$d x %2$d %s & %s Impostazioni Generale - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + Colori, pacchetti di icone, punti di notifica + Schermata Home + Feed, griglia, icone Dock - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search + Barra di ricerca, numero d\'icone + Menù delle app + Applicazioni nascoste, numero di colonne, icone + Ricerca nel menù app Web suggestions, global search Cartelle Row and column count @@ -221,9 +221,20 @@ Scuro Sistema Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colori Accent color + Colore tratto Campioni Colore RGB Rosso @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Abilita sfocatura sfondo + Intensità sfocatura + Soglia fattore Add new apps to home screen Show feed Nessuna app feed installata @@ -397,6 +411,8 @@ Search bar widget Disabilitato Google Search bar + Opacità + Tratto Raggio dell\'angolo Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Cerca su Startpage + Cerca su %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, file e altro Contatti e altro - Tramite Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Fornitore di suggerimenti web + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-iw-rIL/strings.xml b/lawnchair/res/values-iw-rIL/strings.xml index 228879ed9bf..9c7231f95ec 100644 --- a/lawnchair/res/values-iw-rIL/strings.xml +++ b/lawnchair/res/values-iw-rIL/strings.xml @@ -221,9 +221,20 @@ כהה מערכת Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic צבעים Accent color + Stroke color דוגמיות צבע RGB אדום @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget השבת Google Search bar + Opacity + Stroke רדיוס פינות Apply accent color Search provider @@ -466,7 +482,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -500,7 +516,7 @@ Media, files, and more אנשי קשר ועוד - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -513,4 +529,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-ja-rJP/strings.xml b/lawnchair/res/values-ja-rJP/strings.xml index ab954e0663a..ed8dd1b17cc 100644 --- a/lawnchair/res/values-ja-rJP/strings.xml +++ b/lawnchair/res/values-ja-rJP/strings.xml @@ -34,16 +34,16 @@ Always Never クリップボード - Copy link + リンクをコピー コピー 貼り付け 読み込み中… Lawnchair に管理されています 設定 - Home settings - System settings - Change settings + ホーム設定 + システム設定 + 設定を変更 壁紙 - Background opacity + 背景の透明度 - Copied to clipboard - Item removed + クリップボードにコピーしました + アイテムを削除しました - What to show + 表示する項目 To lock your phone when performing a gesture, Lawnchair requires accessibility access.\n\nLawnchair doesn\'t watch any user action, though the privilege to do so is required for all accessibility services. Lawnchair discards any event sent by the system.\n\nIn order to lock your phone, Lawnchair uses the performGlobalAction Accessibility service. - %1$d x %2$d + %1$d × %2$d %s & %s 設定 一般設定 - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + 色、アイコンパック、通知ドット + ホーム画面 + フィード、グリッド、アイコン ドック - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + 検索バー、アイコン数 + アプリドロワー + 隠しアプリ、カラム数、アイコン + ドロワー検索 + ウェブ候補、グローバル検索 フォルダ - Row and column count + 行と列の数 ジェスチャー - Taps and swipes + タップとスワイプ 最近 - Clear All button, corner radius + 「すべてクリア」ボタン、角の丸み このアプリについて - App info + アプリ情報 Lawnchairを再起動 - Experimental features + 実験的機能 - Font customization - Some text remains unchanged + フォントのカスタマイズ + 一部のテキストは変更されません At a Glance calendar customization - Allow showing date in non-Gregorian calendar systems - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + グレゴリオ暦以外の暦で日付を表示できるようにします + グリッドサイズ制限の上限を上げる + ホーム画面のグリッド数を 10 × 10 から 20 × 20 まで増やします + 常にアイコンを再読み込みします アイコンパックからキャッシュされたアイコンを使用しないようにします - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + ロック/ロック解除 + 「すべてクリア」を押したときに選択したアプリを閉じないようにします - To access shortcuts and additional features, set Lawnchair as your default launcher - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other - Notification access needed - To show Notification Dots, turn on app notifications for %1$s + ショートカットと追加機能にアクセスするには、Lawnchair をデフォルトのランチャーとして設定してください。 + 通知ドット + 通知の数を表示 + 通知ドットの色 + 通知の数の色 + 警告: 通知ドットと通知の数の色のコントラストが互いに十分ではありません + 警告: 通知ドットと通知の数の色のコントラストが互いに十分ではない場合があります + 通知へのアクセス権が必要です + 通知ドットを表示するには、 %1$s のアプリ通知をオンにします。 - Icon style - Icon shape - Icon size - Show labels - Label size - Use multiple lines + アイコンのスタイル + アイコンの形状 + アイコンのサイズ + ラベルの表示 + ラベルのサイズ + 複数行を使用する - Transparent themed icons + 透明なテーマアイコン テーマアイコンの背景を透明にします - Auto-adaptive icons - For all non-adaptive icons - Background lightness + 自動アダプティブアイコン + すべての非アダプティブアイコンが対象 + 背景の明るさ Use 100% background lightness for white - Reset custom icons + カスタムアイコンをリセット すべてのカスタムアイコンがリセットされます。続行しますか? アイコン - Reset to default + デフォルトにリセット Open external picker - Pick icon from - Couldn\'t load more icons + アイコンを選択 + アイコンを読み込めませんでした システム @@ -161,54 +161,54 @@ iOS オクタゴン One UI - Rounded square - Sharp square + 角丸四角形 + 正方形 四角形 丸みがかった正方形 水滴型 - Custom icon shape - Create custom icon shape - Edit custom icon shape - Corner shape + カスタムアイコン形状 + カスタムアイコン形状を作成します + カスタムアイコンの形状を編集します + 角の形状 丸める 滑らか 切り取る - Top left - Top right - Bottom left - Bottom right - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + 左上 + 右上 + 左下 + 右下 + クリップボードにエクスポート + クリップボードからインポート + クリップボードに有効なアイコン形状がありません - Icon pack - Themed icon source - System icons - Themed icons + アイコンパック + テーマアイコンのソース + システムアイコン + テーマアイコン オフ - Home screen - Home screen & app drawer - No supported icon packs + ホーム画面 + ホーム画面 & アプリドロワー + サポートされているアイコンパックがありません - Add fonts - OTF and TTF fonts are supported - Font not found - Font (experimental) + フォントを追加 + OTF および TTF フォントがサポートされています + フォントが見つかりません + フォント (実験的) 一般設定 - Headings - Headings (medium) - Body - Body (medium) + 見出し + 見出し (中) + 本文 + 本文 (中) 斜体 Thin - Extra light - ライト + Extra Light + Light Regular Medium Semibold Bold - Extra bold + Extra Bold Black + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic - Accent color + アクセントカラー + Stroke color 色見本 RGBカラー @@ -235,7 +246,7 @@ 明度 16進数カラーコード スライダー - Invalid color + 無効な色 充電中 充電完了 - Battery low + バッテリー残量の低下 "%1$d%% — 充電完了まで %2$s" At a Glance - What to show + 表示する項目 カレンダー - Date & time + 日付と時刻 日付 時刻 - Time format - Follow system - 12-hour format - 24-hour format + 時刻の形式 + システムに従う + 12時間表記 + 24時間表記 天気 - Battery status + バッテリーの状態 再生中 Tap to set up %1$s を使用するには、通知ドットを有効にします - Show on home screen + ホーム画面に表示します At a Glance can be manually added to the home screen by placing the Lawnchair widget At a Glance provider @@ -287,9 +298,9 @@ お知らせ サポート プロダクト - Design & development + デザイン & 開発 開発 - QuickSwitch maintenance + QuickSwitchのメンテナンス 開発・運用 サポート & PR 謝辞 @@ -299,8 +310,8 @@ Backup and restore --> - Create backup - What to back up + バックアップを作成 + バックアップする項目 Layout and settings 壁紙 バックアップの作成 @@ -315,20 +326,20 @@ Gesture settings --> - Double tap + ダブルタップをしたとき Swipe up - Swipe down - Home button - Back button - Do nothing + 下にスワイプしたとき + ホームボタンを押したとき + 戻るボタンを押したとき + 何もしない スリープ状態にします - Open notification panel - Open app + 通知パネルを開く + アプリを開く %1$s を開く - Open app drawer - Open app search - Open search - Pick app + アプリドロワーを開く + アプリ検索を開く + 検索を開く + アプリを選択 Admin permissions required To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" ダブルタップでスリープを解除します @@ -341,7 +352,7 @@ --> Lawnchair bug report - %1$s crashed + %1$s がクラッシュしました Upload crash log アップロードに失敗しました アップロード中… @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget 無効 Google Search bar + Opacity + Stroke 角の丸み Apply accent color Search provider @@ -442,7 +458,7 @@ Quick actions 共有する レンズ - Clear all + すべてクリア Force close Screen corner radius Custom screen corner radius @@ -463,7 +479,7 @@ Files from device Settings from device Search for more apps - Startpage で検索 + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -497,7 +513,7 @@ メディア、ファイル、その他 連絡先やその他 - スタートページより + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -507,7 +523,11 @@ Maximum number of suggestions in search results Maximum web suggestion delay - To search for contacts, grant contacts and phone permissions to Lawnchair + 連絡先を検索するには、Lawnchair に連絡先と電話の権限を付与してください To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-ka-rGE/strings.xml b/lawnchair/res/values-ka-rGE/strings.xml new file mode 100644 index 00000000000..e44e5ed5c37 --- /dev/null +++ b/lawnchair/res/values-ka-rGE/strings.xml @@ -0,0 +1,534 @@ + + + + + + გადახედვა + შექმნა + რეზერვი + აღდგენა + წაშლა + Reset + განბლოკვა + დაბლოკვა + დადასტურება + მორგება + ყოველთვის + არასდროს + ბუფერი + ლინკის კოპირება + კოპირება + ჩასმა + იტვირთება… + Lawnchair მართავს + + პრეფერენციები + მთავარის პარამეტრები + სისტემის პარამეტრები + პარამეტრების ცვლილება + + + დინამიური + საწყისი + მორგებული + ნაგულისხმევი + სისტემა + + სვეტები + რიგები + იარლიყი + ხატულები + ბადე + განლაგება + + ფონი + ფონის გამჭვირვალობა + + კოპირებულია + ხატულა მოშლილია + + რა ვავენო + + თქვენი ტელეფონის დაბლოკვის ჟესტისთვის, Lawnchair საჭიროებს Accessibility წვდომას.\n\nLawnchair არ უთვალთვალებს მომხმარებლის ნებისმიერ მოქმედებას, თუმცა ამის პრივილეგია საჭიროა ყველა ხელმისაწვდომი სერვისისთვის. Lawnchair უგულებელყოფს სისტემის მიერ გაგზავნილ ნებისმიერ მოვლენას.\n\nთქვენი ტელეფონის დაბლოკვის მიზნით, Lawnchair იყენებს performGlobalAction Accessibility სერვისს. + %1$d x %2$d + %s & %s + + პარამეტრები + ზოგადი + ფერები, ხატულის პაკები, შეტყობინებების წერტილები + მთავარი ეკრანი + არხი, ბადე, ხატულები + დოკი + Search bar, icon count + აპების უჯრა + Hidden apps, column count, icons + უჯრის ძებნა + Web suggestions, global search + Folders + Row and column count + Gestures + Taps and swipes + Recents + Clear All button, corner radius + About + App info + Restart Lawnchair + Experimental features + + Font customization + Some text remains unchanged + At a Glance calendar customization + Allow showing date in non-Gregorian calendar systems + Increase maximum grid size limit + Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 + Always reload icons + Avoid using cached icons from icon packs + Lock/unlock + Prevent selected app from closing when pressing \"Clear all\" + + To access shortcuts and additional features, set Lawnchair as your default launcher + Notification dots + Show notification counter + Notification dot color + Notification counter color + Warning: Notification dot and counter colors don\'t have enough contrast with each other + Warning: Notification dot and counter colors might not always have enough contrast with each other + Notification access needed + To show Notification Dots, turn on app notifications for %1$s + + + Icon style + Icon shape + Icon size + Show labels + Label size + Use multiple lines + + Transparent themed icons + Use transparent background on themed icons + Auto-adaptive icons + For all non-adaptive icons + Background lightness + Use 100% background lightness for white + Reset custom icons + All custom icons will be reset. Do you want to continue? + + Icons + Reset to default + Open external picker + Pick icon from + Couldn\'t load more icons + + System + Circle + Cylinder + Diamond + Egg + iOS + Octagon + One UI + Rounded square + Sharp square + Square + Squircle + Teardrop + + Custom icon shape + Create custom icon shape + Edit custom icon shape + Corner shape + Round + Smooth + Cut + Top left + Top right + Bottom left + Bottom right + Export to clipboard + Import from clipboard + Clipboard doesn\'t contain a valid icon shape + + Icon pack + Themed icon source + System icons + Themed icons + Off + Home screen + Home screen & app drawer + No supported icon packs + + Add fonts + OTF and TTF fonts are supported + Font not found + Font (experimental) + General + Headings + Headings (medium) + Body + Body (medium) + Italic + Thin + Extra light + Light + Regular + Medium + Semibold + Bold + Extra bold + Black + + + Theme + Light + Dark + System + Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic + + Colors + Accent color + Stroke color + Swatches + RGB + Red + Green + Blue + HSB + Hue + Saturation + Brightness + Hex + Sliders + Invalid color + + + Gregorian + Persian + %1$s, %2$s + + Charging + Charged + Battery low + "%1$d%% — Full in %2$s" + At a Glance + What to show + + Calendar + Date & time + Date + Time + Time format + Follow system + 12-hour format + 24-hour format + + Weather + Battery status + Now Playing + + Tap to set up + To use %1$s, enable Notification Dots. + + Show on home screen + At a Glance can be manually added to the home screen by placing the Lawnchair widget + + At a Glance provider + Google + Google Search + + " — " + Page %1$d of %2$d + Fri, Mar 3 + + News + Support + Product + Design & development + Development + QuickSwitch maintenance + DevOps + Support & PR + Acknowledgements + Translate + + Create backup + What to back up + Layout and settings + Wallpaper + Backup created + Failed to create backup + Restore backup + What to restore + Backup restored + Failed to restore backup + Invalid backup file + + Double tap + Swipe up + Swipe down + Home button + Back button + Do nothing + Sleep + Open notification panel + Open app + Open %1$s + Open app drawer + Open app search + Open search + Pick app + Admin permissions required + To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" + Double-Tap to Sleep will be turned off. + Turn on accessibility service + To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" + Open settings + + Lawnchair bug report + %1$s crashed + Upload crash log + Upload failed + Uploading… + Bug reports + Upload status + %d new reports + Multiple new reports + + + Home screen rotation + Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold + Add new apps to home screen + Show feed + No feed apps installed + Feed + Feed provider + Scroll wallpaper + Wallpaper depth effect + Zoom in and out of the wallpaper when transitioning between areas of the launcher + Top shadow + Home screen grid + Lock home screen + Unlock home screen + Home screen is locked + Prevent changes to the home screen layout + Show dot pagination + Use dots instead of lines to show page number + Use new pop-up style + Use Material You\'s bouncy and slightly consolidated pop-up style + Pop-up menu + Show lock button + Show system settings entry + Show Edit button + Status bar + Show status bar + Dark status bar + Text color + Light + Dark + Rounded corners + Allow overlap + Enforce widget resizing + Allow resizing of widgets that are constrained to a specific size + Remove size constraints + Remove the minimum and maximum size restrictions of widgets + + Show dock + Search bar + Search bar widget + Disabled + Google Search bar + Opacity + Stroke + Corner radius + Apply accent color + Search provider + Dock icons + Bottom padding + + App search + %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + App + Website + App required + + Search + Google Lens + Voice Search + + Hidden apps + Load apps in bulk + Load and display icons in bulk instead of individually + Remember position + Remember app drawer position after leaving drawer + Show scrollbar + App drawer columns + Row height + Horizontal padding + + Hide from app drawer + Hidden apps (%1$d) + + %1$d app + %1$d apps + + + Icon background opacity + Icon background color + Maximum folder columns + Maximum folder rows + + These settings will be ignored as Lawnchair isn\'t set as the Recents provider + Incompatible system integration + Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. + Translucent background + Background opacity + Quick actions + Share + Lens + Clear all + Force close + Screen corner radius + Custom screen corner radius + When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. + Taskbar + Show taskbar (experimental) + + + Search + Search apps + No apps found matching \"%1$s\" + From the web + Contacts from device + Files from device + Settings from device + Search for more apps + Search on %1$s + No app store or browser installed + Clear search history + Clear search box + + Search + Show search bar + Automatically show keyboard + Fuzzy search + Approximate matching for app searches + Suggestions + Show suggested apps at the top of the drawer + Device search + Search your phone contacts, files, and settings + Show hidden apps in search results + If full name is typed + Search algorithm + App Search + Global search (on-device) + Global search (via ASI) + + Show in search results + Apps & Shortcuts + App shortcuts + People + Pixel tips + Android settings + Files + Web suggestions + Search history + Calculator + + Media, files, and more + Contacts and more + Via %1$s + + Maximum number of apps in search results + Maximum number of people in search results + Maximum number of files in search results + Maximum number of settings entries in search results + Maximum number of history entries in search results + Maximum number of suggestions in search results + Maximum web suggestion delay + + To search for contacts, grant contacts and phone permissions to Lawnchair + To search your files, grant storage permissions to Lawnchair + Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style + diff --git a/lawnchair/res/values-kmr-rTR/strings.xml b/lawnchair/res/values-kmr-rTR/strings.xml index e8075b70b50..452d10acc66 100644 --- a/lawnchair/res/values-kmr-rTR/strings.xml +++ b/lawnchair/res/values-kmr-rTR/strings.xml @@ -221,9 +221,20 @@ Dark System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colors Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-ko-rKR/strings.xml b/lawnchair/res/values-ko-rKR/strings.xml index 8141ee023a4..06991dde2bb 100644 --- a/lawnchair/res/values-ko-rKR/strings.xml +++ b/lawnchair/res/values-ko-rKR/strings.xml @@ -23,7 +23,7 @@ --> 미리보기 생성 - Backup + 백업 복원 삭제 초기화 @@ -32,18 +32,18 @@ 적용 개인화 항상 - Never + 절대 클립보드 - Copy link + 링크 복사 복사 붙여넣기 불러오는 중... Lawnchair에서 관리 설정 - Home settings - System settings - Change settings + 홈 화면 설정 + 시스템 설정 + 설정 변경 배경화면 - Background opacity + 백그라운드 투명도 - Copied to clipboard - 항목이 삭제되었습니다. + 클립보드에 복사했습니다. + 항목을 삭제했습니다. - What to show + 표시할 항목 - To lock your phone when performing a gesture, Lawnchair requires accessibility access.\n\nLawnchair doesn\'t watch any user action, though the privilege to do so is required for all accessibility services. Lawnchair discards any event sent by the system.\n\nIn order to lock your phone, Lawnchair uses the performGlobalAction Accessibility service. + 제스처를 수행할 때 휴대폰을 잠그려면 접근성 액세스 권한이 필요합니다.\n\nLawnchair는 모든 접근성 서비스를 위해 필요한 권한이지만 사용자 동작을 감시하지 않습니다. Lawnchair는 시스템에서 보낸 모든 이벤트를 삭제합니다.\n\nLawnchair는 휴대전화를 잠그기 위해 performGlobalAction 접근성 서비스를 사용합니다. %1$d x %2$d %s & %s 설정 일반 - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + 색상, 아이콘 팩, 알림 배지 + 홈 화면 + 피드, 그리드, 아이콘 - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + 검색 표시줄, 아이콘 개수 + 앱 서랍 + 숨겨진 앱, 아이콘 가로 배치 수, 아이콘 + 서랍 검색 + 웹 제안, 글로벌 검색 폴더 - Row and column count + 아이콘 세로 및 가로 배치 수 제스처 - Taps and swipes + 탭 및 스와이프 최근 앱 - Clear All button, corner radius + 모두 닫기 버튼, 가장자리 둥글기 더 보기 - App info + 앱 정보 Lawnchair 재시작 - Experimental features + 실험적 기능 - Font customization + 글꼴 사용자 정의 일부 텍스트는 변경되지 않습니다. - At a Glance calendar customization + 한눈에 보기 달력 사용자 정의 그레고리력이 아닌 달력 시스템에 날짜 표시 허용 - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + 최대 그리드 크기 제한 늘리기 + 허용되는 최대 홈 화면 그리드 크기를 10 x 10에서 20 x 20으로 늘립니다. + 항상 아이콘 새로고침 아이콘 팩에서 캐시된 아이콘 사용 안 함 - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + 잠금/잠금 해제 + \"모두 지우기\" 사용 시 선택한 앱이 지워지지 않도록 방지 - To access shortcuts and additional features, set Lawnchair as your default launcher - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other + 바로 가기 및 추가 기능에 액세스하려면 Lawnchair를 기본 홈 앱으로 설정하세요. + 알림 배지 + 알림 개수 표시 + 알림 배지 색상 + 알림 개수 색상 + 경고: 알림 배지 및 알림 개수 색상의 대비가 충분하지 않습니다. + 경고: 알림 배지와 알림 개수의 색상 대비가 충분하지 않습니다. 알림 액세스가 필요합니다. - To show Notification Dots, turn on app notifications for %1$s + 알림 점을 표시하려면 %1$s에 대한 앱 알림을 켜세요. - Icon style - Icon shape - Icon size - Show labels - Label size - Use multiple lines + 아이콘 스타일 + 아이콘 모양 + 아이콘 크기 + 라벨 표시 + 라벨 크기 + 여러 줄 사용 - Transparent themed icons + 투명 테마 아이콘 테마 아이콘에 투명한 배경 사용하기 - Auto-adaptive icons - For all non-adaptive icons - Background lightness - Use 100% background lightness for white - Reset custom icons + 자동 적응형 아이콘 + 모든 비적응형 아이콘들을 위한 기능입니다 + 백그라운드 밝기 + 백그라운드 밝기를 100%로 할 경우 하얀색이 됩니다 + 커스텀아이콘 리셋 모든 사용자 정의 아이콘이 재설정됩니다. 계속하시겠습니까? 아이콘 기본값으로 초기화하기 외부에서 불러오기 - Pick icon from - Couldn\'t load more icons + 가져올 아이콘 고르기 + 아이콘을 더 불러올 수 없습니다 시스템 동그라미 @@ -161,54 +161,54 @@ iOS 팔각형 One UI - Rounded square - Sharp square + 둥근 모서리 사각형 + 각진 사각형 사각형 둥근 사각형 물방울 - Custom icon shape - Create custom icon shape - Edit custom icon shape - Corner shape + 커스텀아이콘 모양 + 커스텀 아이콘 모양 만들기 + 사용자 정의 아이콘 모양 편집 + 모서리 모양 원호 곡선 잘림 - Top left - Top right - Bottom left - Bottom right - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + 왼쪽 상단 + 오른쪽 상단 + 왼쪽 하단 + 오른쪽 하단 + 클립보드로 내보내기 + 클립보드에서 가져오기 + 클립보드에 올바른 아이콘 모양이 없습니다. - Icon pack - Themed icon source - System icons - Themed icons + 아이콘 팩 + 테마 아이콘 소스 + 시스템 아이콘 + 테마가 적용된 아이콘 사용 안함 - Home screen - Home screen & app drawer + 홈 화면 + 홈 화면 & 앱 서랍 지원되는 아이콘 팩이 없습니다. - Add fonts - OTF and TTF fonts are supported + 글꼴 추가 + OTF 및 TTF 글꼴이 지원됩니다 글꼴을 찾을 수 없습니다 - Font (experimental) + 폰트(베타) 일반 제목 - Headings (medium) + 제목(중간) 바디 - Body (medium) + 바디(미디엄) Italic Thin - Extra light + 매우 얇음 라이트 Regular Medium Semibold Bold - Extra bold + 매우 굵음 Black + 색상 스타일 + Spritz + 톤 스팟 + 활기찬 + 표현 + 무지개 + 과일 샐러드 + 컨텐츠 + 단색 색상 - Accent color + 강조 색상 + Stroke color 견본 RGB 빨강 @@ -235,7 +246,7 @@ 밝기 Hex 슬라이드 - Invalid color + 잘못된 색상 충전 중 충전 됨 - Battery low + 배터리 낮음 "%1$d%% — %2$s 후 충전완료" 한눈에 보기 - What to show + 표시할 항목 달력 - Date & time + 날짜 & 시간 날짜 시간 - Time format - Follow system - 12-hour format - 24-hour format + 시간 형식 + 시스템 설정 따르기 + 12시간 형식 + 24시간 형식 날씨 - Battery status + 배터리 상태 현재 재생 중 - Tap to set up + 탭하여 설정하기 %1$s을(를) 사용하려면, 알림 배지를 활성화해야합니다. - Show on home screen - At a Glance can be manually added to the home screen by placing the Lawnchair widget + 홈 화면에 표시 + 한눈에 보기는 Lawnchair 위젯을 배치하여 수동으로 홈 화면에 추가할 수 있습니다 - At a Glance provider - 구글 - 구글 검색 + 한 눈에 보기 제공자 + Google + Google 검색 " — " 페이지 %1$d / %2$d @@ -287,9 +298,9 @@ 뉴스 지원 제품 - Design & development + 디자인 & 개발 개발 - QuickSwitch maintenance + 퀵 스위치 점검 DevOps 지원 & 문의 감사의 말 @@ -299,156 +310,161 @@ Backup and restore --> - Create backup - What to back up - Layout and settings + 백업 생성 + 백업 대상 + 레이아웃 및 설정 배경화면 - Backup created - Failed to create backup - Restore backup - What to restore - Backup restored - Failed to restore backup - Invalid backup file + 백업이 생성되었습니다 + 백업을 생성하지 못했습니다 + 백업 복원 + 복원 대상 + 백업 복원되었습니다 + 백업을 복원하지 못했습니다 + 잘못된 백업 파일입니다 - Double tap - Swipe up - Swipe down - Home button - Back button - Do nothing + 더블 탭 + 쓸어 올리기 + 쓸어 내리기 + 홈 버튼 + 뒤로가기 버튼 + 아무것도 안하기 절전 - Open notification panel - Open app + 알림 패널 열기 + 앱 열기 %1$s 열기 - Open app drawer - Open app search - Open search - Pick app - Admin permissions required - To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" + 앱 서랍 열기 + 앱 검색 열기 + 검색 열기 + 앱 선택 + 관리자 권한이 필요합니다 + 두 번 눌러 화면 끄기 기능을 사용하려면, Lawnchair 앱을 기기 관리자 앱으로 할당 받아야 합니다. \"설정 열기\"를 누른 후, \"이 기기 관리자 앱 활성화\"를 누르세요. 두 번 눌러 화면 끄기 기능이 비활성화 되었습니다. - Turn on accessibility service - To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" - Open settings + 접근성 서비스가 활성화되어야합니다 + 두 번 눌러 화면 끄기를 사용하려면, 접근성 설정에서 Lawnchair를 활성화 해야 합니다. \"설정 열기\"를 눌러 \"Lawnchair\"를 활성화 해주세요. + 설정 열기 - Lawnchair bug report - %1$s crashed - Upload crash log + Lawnchair 버그 신고하기 + %1$s가 종료되었습니다 + 크래시 로그 업로드 업로드 실패 업로드 중... - Bug reports - Upload status - %d new reports - Multiple new reports + 신고된 버그들 + 업로드 현황 + %d개의 새 신고내역이 있습니다 + 여러개의 새 신고내역들 - Home screen rotation - Allow home screen rotation when device is rotated - Add new apps to home screen - Show feed + 홈 화면 회전 + 기기 회전 때 홈 화면 회전 허용 + Enable wallpaper blur + Blur intensity + Factor threshold + 홈 화면에 새로운 앱 바로가기 추가 + 피드 활성화 설치된 피드 앱이 없습니다. 피드 - Feed provider - Scroll wallpaper - Wallpaper depth effect - Zoom in and out of the wallpaper when transitioning between areas of the launcher - Top shadow - Home screen grid - Lock home screen - Unlock home screen - Home screen is locked + 피드 제공자 + 배경화면 움직이기 + 배경 화면 깊이 효과 + 런처 영역 간 전환 시 배경화면 확대/축소 + 상태표시줄 그림자 + 홈 화면 칸 수 + 홈 화면 잠금 + 홈 화면 잠금해제 + 홈 화면이 잠겨 있습니다. 홈 화면 레이아웃 변경 방지 도트 페이지네이션 표시 선 대신 점을 사용하여 페이지 번호 표시 - Use new pop-up style - Use Material You\'s bouncy and slightly consolidated pop-up style - Pop-up menu - Show lock button - Show system settings entry - Show Edit button - Status bar - Show status bar - Dark status bar - Text color + 새로운 팝업 스타일 사용 + Material You의 탄력 있고 통합된 팝업 스타일 사용 + 팝업 메뉴 + 잠그기 버튼 표시 + 시스템 설정 항목 표시 + 편집 버튼 표시 + 상태 표시줄 + 상태 표시줄 표시 + 어두운 상태 표시줄 + 텍스트 색상 라이트 다크 - Rounded corners - Allow overlap - Enforce widget resizing + 둥근 모서리 + 겹치기 허용 + 웨젯 크기 강제로 조정 특정 크기로 제한된 위젯의 크기 조정 허용 - Remove size constraints + 크기 제약 조건 제거 위젯의 최소 및 최대 크기 제한 제거 - Show dock - Search bar - Search bar widget + 독 표시 + 검색 표시줄 + 검색 표시줄 위젯 비활성화됨 - Google Search bar + Google 검색 표시줄 + Opacity + Stroke 가장자리 둥글기 - Apply accent color - Search provider - Dock icons - Bottom padding + 강조 색상 적용하기 + 검색 제공자 + 독 아이콘 + 하단 패딩 - App search - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + 앱 검색 + %1$s과 Lawnchair는 수익 공유 계약을 맺었습니다.\n\n%1$s로 검색하면 Lawnchair 지원에 도움이 됩니다. 웹사이트 앱 필요 검색 - 구글 렌즈 + Google 렌즈 음성 검색 - Hidden apps - Load apps in bulk - Load and display icons in bulk instead of individually - Remember position + 숨겨진 앱 + 앱 한꺼번에 불러오기 + 아이콘을 각각 불러오지 않고 한꺼번에 불러와 표시 + 위치 기억 앱 서랍 종료 시 앱 서랍 위치를 기억 - Show scrollbar - App drawer columns - Row height - Horizontal padding + 스크롤바 표시 + 앱 서랍 아이콘 가로 배치 수 + 가로 행 높이 + 가로 패딩 - Hide from app drawer - Hidden apps (%1$d) + 앱 서랍에서 숨기기 + 숨겨진 앱 (%1$d) - %1$d apps + %1$d 앱 - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + 아이콘 배경 투명도 + 아이콘 배경색 + 최대 폴더 열 + 최대 폴더 행 - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration - Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + Lawnchair가 최근 앱 제공자로 설정되지 않았으므로 아래 설정은 무시됩니다 + 호환되지 않는 시스템 통합 + 기기가 %1$s에서 제공하는 시스템 제스처(Quickstep으로 알려져 있음)가 설정되어 있지만 %1$s의 이 버전은 Android 버전과 호환되지 않습니다. 장치를 계속 사용하려면 %1$s 업데이트를 제거하거나 시스템 제스처 공급자로 %1$s을(를) 비활성화하십시오. + 반투명 배경 + 백그라운드 투명도 + 빠른 바로가기 공유 렌즈 - Clear all + 모두 지우기 강제 종료 - Screen corner radius - Custom screen corner radius - When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. + 가장자리 둥글기 + 가장자리 둥글기 개인화 + 위로 스와이프하여 최근 앱 화면을 열면, 현재 앱이 손가락을 따라가며 카드로 줄어듭니다. 이 슬라이더를 사용하여 카드가 거의 전체 화면일 때 화면 모서리와 일치하도록 카드의 모서리 반경을 조정할 수 있습니다. 작업 표시줄 - Show taskbar (experimental) + 작업 표시줄 표시(실험적) 검색 앱 검색 - No apps found matching \"%1$s\" + \"%1$s\"(와)과 일치는 앱 없습니다. 웹으로부터 - Contacts from device - Files from device - Settings from device - Search for more apps - Startpage에서 검색 - No app store or browser installed - Clear search history - Clear search box + 기기의 연락처 + 기기의 파일 + 기기의 설정 + 더 많은 앱 검색하기 + %1$s에서 검색 + 앱 스토어나 브라우저가 설치되어 있지 않습니다 + 검색기록 삭제 + 검색 상자 비우기 검색 - Show search bar - Automatically show keyboard - Fuzzy search - Approximate matching for app searches + 검색 표시줄 사용 + 자동으로 키보드 표시 + 유사 검색어 검색 + 앱을 검색할 때 검색어와 유사한 앱을 찾아줍니다 제안 - Show suggested apps at the top of the drawer - Device search - Search your phone contacts, files, and settings - Show hidden apps in search results - If full name is typed - Search algorithm + 앱 서랍 상단에 추천 앱 표시 + 장치 검색 + 휴대전화의 연락처, 파일, 설정 검색 + 검색 결과에 숨겨진 앱 표시 + 전체 이름을 입력한 경우 + 검색 알고리즘 앱 검색 - Global search (on-device) - Global search (via ASI) + 글로벌 검색(기기 내) + 글로벌 검색 (ASI를 통해) - Show in search results + 검색 결과에 보여주기 앱 및 바로가기 - App shortcuts + 앱 바로가기 사람들 - Pixel tips - Android settings + Pixel 도움말 + Android 설정 파일 웹 제안 - Search history + 검색 기록 계산기 미디어, 파일 등 연락처 등 - Startpage를 통해 + %1$s 제공 - Maximum number of apps in search results - Maximum number of people in search results - Maximum number of files in search results - Maximum number of settings entries in search results - Maximum number of history entries in search results - Maximum number of suggestions in search results - Maximum web suggestion delay + 검색 결과에 최대 앱 개수 + 검색 결과에 최대 사람 개수 + 검색 결과에 최대 파일 개수 + 검색 결과에 최대 설정 항목 개수 + 검색 결과에 최대 기록 항목 개수 + 검색 결과에 최대 추천 개수 + 최대 웹 제안 - To search for contacts, grant contacts and phone permissions to Lawnchair - To search your files, grant storage permissions to Lawnchair - Grant permissions + 연락처를 검색하려면 Lawnchair에 연락처 및 전화 권한을 부여하세요 + 파일을 검색하려면 Lawnchair에 저장소 권한을 부여하세요 + 권한 부여 + Lawnchair (compose) + 웹 제안 제공자 + 검색 표시줄에 웹 제안 제공자 아이콘 표시 + 독 검색 표시줄 스타일에 따르기 diff --git a/lawnchair/res/values-lt-rLT/strings.xml b/lawnchair/res/values-lt-rLT/strings.xml index 068d6b6156a..aec92bdb82a 100644 --- a/lawnchair/res/values-lt-rLT/strings.xml +++ b/lawnchair/res/values-lt-rLT/strings.xml @@ -23,27 +23,27 @@ --> Peržiūra Sukurti - Backup + Sukurti atsarginę kopiją Atkurti Ištrinti Atstatyti - Unlock - Lock + Atrakinti + Užrakinti Taikyti Tinkinti - Always - Never + Visada + Niekada Iškarpinė - Copy link + Kopijuoti nuorodą Kopijuoti Įklijuoti Kraunasi… Valdoma „Lawnchair“ Parinktys - Home settings - System settings - Change settings + Pagr. ekrano nustatymai + Sistemos nustatymai + Pakeisti nustatymus Ekrano Fonas - Background opacity + Fono skaidrumas - Copied to clipboard - Item removed + Nukopijuota į iškarpinę + Elementas pašalintas - What to show + Ką rodyti - To lock your phone when performing a gesture, Lawnchair requires accessibility access.\n\nLawnchair doesn\'t watch any user action, though the privilege to do so is required for all accessibility services. Lawnchair discards any event sent by the system.\n\nIn order to lock your phone, Lawnchair uses the performGlobalAction Accessibility service. + Norint užrakinti telefoną gestu, \"Lawnchair\" reikia suteikti leidimą prieinamumo nustatymams.\n\n\"Lawnchair\" nestebi jūsų veiksmų, tačiau toks leidimas reikalingas visoms prieinamumo paslaugoms. \"Lawnchair\" atmeta bet kokį sistemos siunčiamą įvykį.\n\nTelefono užrakinimui \"Lawnchair\" naudoja prieinamumo paslaugą \"performGlobalAction\". %1$d x %2$d %s & %s Nustatymai Pagrindinis - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + Spalvos, piktogramų paketai, pranešimų taškeliai + Pagrindinis ekranas + Naujienos, tinklelis, piktrogramos Pažemynis - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + Paieškos juosta, piktogramų skaičius + Programėlių lentyna + Paslėptos programėlės, stulpelių skaičius, piktogramos + Progr. lentynos paieška + Žiniatinklio pasiūlymai, globali paieška Aplankai - Row and column count + Eilučių ir stulpelių skaičius Gestai - Taps and swipes + Paspaudimai ir perbraukimai Naujausi - Clear All button, corner radius + \"Išvalyti visus\" mygtukas, kampų spindulys Apie - App info + Programėles informacija Iš Naujo Paleiskite \"Lawnchair\" - Experimental features + Eksperimentiniai nustatymai - Font customization + Šriftų tinkinimas Dalis teksto liko nepakeista - At a Glance calendar customization + \"At a Glance\" kalendoriaus tinkinimas Leisti rodyti datą ne Grigaliaus kalendoriaus sistemose - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + Padidinti tinklelio dydžio ribą + Padidinti maksimalų leidžiamą pagrindinio ekrano dydį nuo 10 x 10 iki 20 x 20 + Visada perkrauti piktogramas Vengti talpyklose esančias piktogramas iš piktogramų paketų - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + Užrakinti/Atrakinti + Neleisti pasirinktai programėlei užsidaryti paspaudžiant \"Išvalyti visus\" - To access shortcuts and additional features, set Lawnchair as your default launcher - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other + Norėdami naudotis nuorodomis ir papildomomis funkcijomis, nustatykite \"Lawnchair\" kaip numatytąją paleidimo programėlę + Pranešimų taškeliai + Rodyti pranešimų skaičių + Pranešimo taškelio spalva + Pranešimų skaičiaus spalva + Įspėjimas: Pranešimo taško ir skaičiaus spalvos nėra pakankamai skirtingos + Įspėjimas: Pranešimo taško ir skaičiaus spalvos kartais gali būti nepakankamai skirtingos Reikalinga pranešimų prieiga - To show Notification Dots, turn on app notifications for %1$s + Norėdami rodyti pranešimų taškelius, įjunkite programėlių pranešimus %1$s - Icon style - Icon shape - Icon size - Show labels - Label size - Use multiple lines + Piktogramų stilius + Piktogramų forma + Piktogramų dydis + Rodyti etiketes + Etiketės dydis + Naudoti kelias eilutes - Transparent themed icons + Permatomos teminės piktogramos Naudoti permatoma foną temintoms piktogramoms - Auto-adaptive icons + Adaptyvios piktogramos For all non-adaptive icons Background lightness Use 100% background lightness for white @@ -221,9 +221,20 @@ Tamsi Sistemos Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Spalvos Accent color + Stroke color Pavyzdžiai RGB Raudona @@ -258,21 +269,21 @@ Data Laikas Time format - Follow system - 12-hour format - 24-hour format + Pagal sistemą + 12 valandų formatas + 24 valandų formatas Orai - Battery status + Baterijos būsena Dabar Groja - Tap to set up + Paspauskite, kad nustatyti Įjunkite Pranešimų Taškus, norint naudoti %1$s. - Show on home screen - At a Glance can be manually added to the home screen by placing the Lawnchair widget + Rodyti pagr. ekrane + „At a Glance“ pranešimų valdiklį galima pridėti rankiniu būdu, pridėjus „Lawnchair“ valdiklį - At a Glance provider + „At a Glance“ teikėjas Google Google Paieška @@ -287,7 +298,7 @@ Naujienos Paremti Produktas - Design & development + Dizainas & kūrimas Plėtra QuickSwitch maintenance „DevOps“ @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed Nėra suinstaliuotu šoninio menių programų @@ -397,6 +411,8 @@ Search bar widget Išjungta Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -466,7 +482,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -500,7 +516,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -513,4 +529,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-ml-rIN/strings.xml b/lawnchair/res/values-ml-rIN/strings.xml index 4b34bc14506..59808c1cd08 100644 --- a/lawnchair/res/values-ml-rIN/strings.xml +++ b/lawnchair/res/values-ml-rIN/strings.xml @@ -221,9 +221,20 @@ ഇരുണ്ട സിസ്റ്റം Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic നിറങ്ങൾ Accent color + Stroke color Swatches ചുവപ്പ് പച്ച നീല ചുവപ്പ് @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-mr-rIN/strings.xml b/lawnchair/res/values-mr-rIN/strings.xml index 7931962f800..eca1c6c5181 100644 --- a/lawnchair/res/values-mr-rIN/strings.xml +++ b/lawnchair/res/values-mr-rIN/strings.xml @@ -221,9 +221,20 @@ गडद निरूती Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic रंग Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-nl-rNL/strings.xml b/lawnchair/res/values-nl-rNL/strings.xml index 5246d5bc351..1c0aea41f9d 100644 --- a/lawnchair/res/values-nl-rNL/strings.xml +++ b/lawnchair/res/values-nl-rNL/strings.xml @@ -23,7 +23,7 @@ --> Voorbeeld Aanmaken - Backup + Back-up Terugzetten Verwijderen Reset @@ -34,16 +34,16 @@ Altijd Nooit Klembord - Copy link + Koppeling kopiëren Kopiëren Plakken Laden… Beheerd door Lawnchair Voorkeuren - Home settings - System settings - Change settings + Instellingen voor startscherm + Systeeminstellingen + Instellingen wijzigen Achtergrond - Background opacity + Achtergronddekking - Copied to clipboard + Gekopieerd naar klembord Item verwijderd - What to show + Weergeven Om je telefoon te vergrendelen bij het uitvoeren van een gebaar, heeft Lawnchair toegang tot toegankelijkheid nodig.\n\nLawnchair kijkt niet naar gebruikersacties, hoewel het voorrecht om dit te doen vereist is voor alle toegankelijkheidsdiensten. Lawnchair negeert elke gebeurtenis die door het systeem wordt gemeld.\n\nOm je telefoon te vergrendelen, gebruikt Lawnchair de performGlobalAction Accessibility service. %1$d x %2$d @@ -81,77 +81,77 @@ --> Instellingen Algemeen - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + Kleuren, pictogrampakketten, meldingsstippen + Startscherm + Feed, raster, pictogrammen Dock - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + Zoekbalk, aantal pictogrammen + App-lade + Verborgen apps, kolommen, pictogrammen + App-lade doorzoeken + Websuggesties, Algemeen zoeken Mappen - Row and column count + Aantal rijen en kolommen Gebaren - Taps and swipes + Tikken en vegen Recente apps - Clear All button, corner radius + Knop Alles wissen, hoekradius Over - App info + App-informatie Lawnchair opnieuw starten - Experimental features + Experimentele functies - Font customization + Lettertype-aanpassingen Sommige tekst blijft ongewijzigd - At a Glance calendar customization + At a Glance Kalender-aanpassingen Weergave van datum in niet-Gregoriaanse kalender toestaan - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + Maximale rastergrootte verhogen + Het maximaal toegestane startscherm-raster vergroten van 10 × 10 tot 20 × 20 + Altijd pictogrammen vernieuwen Gecachte pictogrammen van pictogrampakketten vermijden - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + Vergrendelen/ontgrendelen + Voorkom sluiten van geselecteerde app bij \"Alles Wissen\" - To access shortcuts and additional features, set Lawnchair as your default launcher - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other + Stel Lawnchair in als standaard launcher voor toegang tot snelkoppelingen en extra functies + Meldingsstippen + Aantal meldingen weergeven + Meldingsstip-kleur + Aantal meldingen kleur + Waarschuwing: Meldingsstip- en aantal-kleuren staan in onvoldoende onderling contrast + Waarschuwing: Meldingsstip- en aantal-kleuren staan mogelijk in onvoldoende onderling contrast Toegang tot meldingen vereist - To show Notification Dots, turn on app notifications for %1$s + Om meldingsstippen te tonen, schakel app-meldingen in voor %1$s - Icon style - Icon shape - Icon size - Show labels - Label size - Use multiple lines + Pictogramstijl + Pictogramvorm + Pictogramgrootte + Labels weergeven + Labelgrootte + Meerdere regels gebruiken - Transparent themed icons + Transparante themapictogrammen Transparante achtergrond gebruiken bij themapictogrammen - Auto-adaptive icons - For all non-adaptive icons - Background lightness - Use 100% background lightness for white - Reset custom icons + Automatische adaptieve pictogrammen + Voor alle niet-adaptieve pictogrammen + Achtergrond helderheid + Gebruik 100% achtergrondhelderheid voor wit + Aangepaste pictogrammen herstellen Alle aangepaste pictogrammen worden teruggezet. Wil je doorgaan? Pictogrammen Standaardinstellingen herstellen Externe kiezer openen - Pick icon from - Couldn\'t load more icons + Pictogram kiezen uit + Kan niet meer pictogrammen laden Systeem Cirkel @@ -161,54 +161,54 @@ iOS Achthoek One UI - Rounded square - Sharp square + Afgerond vierkant + Scherp vierkant Vierkant Vierkantcirkel Teardrop - Custom icon shape - Create custom icon shape - Edit custom icon shape - Corner shape + Aangepaste pictogramvorm + Aangepaste pictogramvorm aanmaken + Aangepaste pictogramvorm bewerken + Hoekvorm Rond Glad Knip - Top left - Top right - Bottom left - Bottom right - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + Linksboven + Rechtsboven + Linksonder + Rechtsonder + Exporteren naar klembord + Importeren van klembord + Klembord bevat geen geldige pictogramvorm - Icon pack - Themed icon source - System icons - Themed icons + Pictogrampakket + Bron van themapictogrammen + Systeempictogrammen + Themapictogrammen Uitgeschakeld - Home screen - Home screen & app drawer + Startscherm + Startscherm & app-lade Geen ondersteunde pictogrampakketten - Add fonts - OTF and TTF fonts are supported + Lettertypen toevoegen + OTF- en TTF-lettertypen zijn ondersteund Lettertype niet gevonden - Font (experimental) + Lettertype (experimenteel) Algemeen Koppen - Headings (medium) + Koppen (middelgroot) Berichttekst - Body (medium) + Berichttekst (middelgroot) Cursief Dun - Extra light + Extra licht Licht Normaal Medium Halfvet Vet - Extra bold + Extra vet Zwart + Kleurstijl + Spritz + Tonale Spot + Levendig + Expressief + Regenboog + Fruitsalade + Inhoud + Monochromatisch Kleuren - Accent color + Accentkleur + Lijnkleur Stalen RGB Rood @@ -235,7 +246,7 @@ Helderheid Hex Schuifregelaars - Invalid color + Ongeldige kleur Opladen Opgeladen - Battery low + Laag batterijniveau "%1$d%% — Vol in %2$s" At a Glance - What to show + Weergeven Agenda - Date & time + Datum & tijd Datum Tijd - Time format - Follow system - 12-hour format - 24-hour format + Tijdnotatie + Systeem volgen + 12-uurs indeling + 24-uurs indeling Weer - Battery status - Nu aan het spelen + Batterijstatus + Wordt nu afgespeeld - Tap to set up - Schakel meldingenstippen in om %1$ste gebruiken. + Tik om in te stellen + Schakel meldingsstippen in om %1$s te gebruiken. - Show on home screen - At a Glance can be manually added to the home screen by placing the Lawnchair widget + Weergeven op startscherm + At a Glance kan handmatig aan het startscherm worden toegevoegd door de “Lawnchair ” widget te plaatsen At a Glance provider Google @@ -287,9 +298,9 @@ Nieuws Ondersteuning Product - Design & development + Ontwerp & ontwikkeling Ontwikkelaar - QuickSwitch maintenance + QuickSwitch onderhoud DevOps Ondersteuning & PR Dankwoord @@ -299,14 +310,14 @@ Backup and restore --> - Create backup - What to back up - Layout and settings + Back-up aanmaken + Back-uppen + Lay-out en instellingen Achtergrond Back-up gemaakt Back-up maken mislukt - Restore backup - What to restore + Back-up terugzetten + Terugzetten Back-up teruggezet Back-up herstellen mislukt Ongeldige back-up bestand @@ -315,96 +326,101 @@ Gesture settings --> - Double tap - Swipe up - Swipe down - Home button - Back button - Do nothing - Slapen - Open notification panel - Open app + Dubbeltikken + Omhoog vegen + Omlaag vegen + Startknop + Terugknop + Niets doen + Slaapstand + Meldingspaneel openen + App openen %1$s openen - Open app drawer - Open app search - Open search - Pick app - Admin permissions required - To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" - Dubbeltik om te slapen wordt uitgeschakeld. - Turn on accessibility service - To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" - Open settings + App-lade openen + App zoeken openen + Zoekopdracht openen + App kiezen + Beheerdersrechten vereist + Om Dubbeltikken voor Slaapstand te gebruiken, moet Lawnchair worden ingesteld als een apparaatbeheerder-app. Tik op \"Instellingen openen\" en tik vervolgens op \"Activeer deze apparaatbeheerder-app.\" + Dubbeltikken voor Slaapstand wordt uitgeschakeld. + Toegankelijkheidsservice inschakelen + Om Dubbeltikken voor Slaapstand te gebruiken, moet de Lawnchair toegankelijkheidsdienst worden ingeschakeld. Tik op \"Instellingen openen\", selecteer \"Lawnchair\" en schakel \"Lawnchair gebruiken\" in. + Instellingen openen - Lawnchair bug report - %1$s crashed - Upload crash log + Lawnchair foutrapportage + %1$s is gecrasht + Crash-logboek uploaden Uploaden mislukt Uploaden… - Bug reports - Upload status - %d new reports - Multiple new reports + Foutrapportages + Upload-status + %d nieuwe rapportages + Meerdere nieuwe rapportages - Home screen rotation - Allow home screen rotation when device is rotated - Add new apps to home screen - Show feed + Startscherm-rotatie + Startscherm-rotatie toestaan wanneer het apparaat wordt gedraaid + Achtergrond-vervaging inschakelen + Intensiteit van vervaging + Factor-drempelwaarde + Nieuwe apps toevoegen aan startscherm + Feed weergeven Geen feed apps geïnstalleerd Feed - Feed provider - Scroll wallpaper - Wallpaper depth effect - Zoom in and out of the wallpaper when transitioning between areas of the launcher - Top shadow - Home screen grid - Lock home screen - Unlock home screen - Home screen is locked + Feed-aaanbieder + Achtergrond schuiven + Achtergrond diepte-effect + Achtergrond in- en uitzoomen bij de overgang tussen de verschillende schermen + Schaduw bovenzijde + Startscherm-raster + Startscherm vergrendelen + Startscherm ontgrendelen + Startscherm is vergrendeld Wijzigingen aan de lay-out van het startscherm voorkomen Toon stip-paginering - Gebruik punten in plaats van lijnen om het paginanummer te tonen - Use new pop-up style - Use Material You\'s bouncy and slightly consolidated pop-up style - Pop-up menu - Show lock button - Show system settings entry - Show Edit button - Status bar - Show status bar - Dark status bar - Text color + Gebruik stippen in plaats van lijnen om het paginanummer te tonen + Nieuwe pop-upstijl gebruiken + Material You\'s stuiterende en enigszins geconsolideerde pop-upstijl gebruiken + Pop-upmenu + Knop Vergrendelen weergeven + Knop Systeeminstellingen weergeven + Knop Bewerken weergeven + Statusbalk + Statusbalk weergeven + Donkere statusbalk + Tekstkleur Licht Donker - Rounded corners - Allow overlap - Enforce widget resizing + Afgeronde hoeken + Overlapping toestaan + Widget-grootte afdwingen Aanpassen van de grootte toestaan van widgets die beperkt zijn tot een specifieke grootte - Remove size constraints - Verwijder de minimale en maximale groottebeperkingen van widgets + Beperkingen van grootte verwijderen + Beperkingen van min/max grootte van widgets verwijderen - Show dock - Search bar - Search bar widget + Dok weergeven + Zoekbalk + Zoekbalkwidget Uitgeschakeld - Google Search bar + Google Zoekbalk + Ondoorzichtigheid + Lijn Hoek radius - Apply accent color - Search provider - Dock icons - Bottom padding + Accentkleur toepassen + Zoekmachine + Dokpictogrammen + Opvulling aan onderkant - App search - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + App zoeken + %1$s & Lawnchair heeft een overeenkomst a.g. het delen van inkomsten.\n\nZoeken met %1$s helpt Lawnchair te ondersteunen. App Website App vereist @@ -413,43 +429,43 @@ Google Lens Spraak Zoeken - Hidden apps - Load apps in bulk - Load and display icons in bulk instead of individually - Remember position + Verborgen apps + Apps in bulk laden + Laad en toon pictogrammen in bulk in plaats van afzonderlijk + Positie onthouden De positie van de app-lade onthouden - Show scrollbar - App drawer columns - Row height - Horizontal padding + Scrollbalk weergeven + App-lade kolommen + Rijhoogte + Horizontale tussenruimte - Hide from app drawer - Hidden apps (%1$d) + Verbergen in app-lade + Verborgen apps (%1$d) %1$d app %1$d apps - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + Pictogram achtergronddekking + Pictogram achtergrondkleur + Maximum aantal mapkolommen + Maximum aantal maprijen - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration - Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + Deze instellingen worden genegeerd, omdat Lawnchair niet is ingesteld als de aanbieder van Recente apps + Incompatibele systeemintegratie + Je toestel is geconfigureerd voor systeemgebaren (bekend als Quickstep) geleverd door %1$s, maar deze versie van %1$s is niet compatibel met deze Android-versie. Om het toestel te blijven gebruiken, dien je %1$s updates te verwijderen of %1$s uit te schakelen als een provider van systeemgebaren. + Doorschijnende achtergrond + Achtergronddekking + Snelle acties Delen Lens - Clear all + Alles wissen Geforceerd sluiten - Screen corner radius - Custom screen corner radius - When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. + Schermhoekradius + Aangepaste schermhoekradius + Als je omhoog veegt om de recente apps te openen volgt de huidige app je vinger, deze vormt zich in een kaart. Gebruik deze schuifregelaar om de hoek radius van de kaart aan te passen wanneer het bijna volledig scherm is, zodat het overeenkomt met de hoeken van uw scherm. Taakbalk - Show taskbar (experimental) + Taakbalk weergeven (experimenteel) Zoeken Apps zoeken - No apps found matching \"%1$s\" + Geen apps gevonden die overeenkomen met \"%1$s\" Van het web - Contacts from device - Files from device - Settings from device - Search for more apps - Zoeken met Startpagina - No app store or browser installed - Clear search history - Clear search box + Contacten van apparaat + Bestanden van apparaat + Instellingen van apparaat + Meer apps zoeken + Zoeken op %1$s + Geen appwikel of browser geïnstalleerd + Zoekgeschiedenis wissen + Zoekveld wissen Zoeken - Show search bar + Zoekbalk weergeven Toetsenbord automatisch weergeven - Fuzzy search - Approximate matching for app searches + Vage zoekopdracht + Geschatte overeenkomst voor app zoeken Suggesties - Show suggested apps at the top of the drawer - Device search - Search your phone contacts, files, and settings - Show hidden apps in search results - If full name is typed - Search algorithm + Voorgestelde apps bovenaan de app-lade weergeven + Zoeken op apparaat + Zoeken in de contacten, bestanden en instellingen van je telefoon + Verborgen apps in zoekresultaten weergeven + Als volledige naam wordt getypt + Zoekalgoritme Apps Doorzoeken - Global search (on-device) - Global search (via ASI) + Algemeen zoeken (op apparaat) + Algemeen zoeken (via ASI) - Show in search results + Weergeven in zoekresultaten Apps & Sneltoetsen - App shortcuts + App-snelkoppelingen Personen Pixel tips - Android settings + Android-instellingen Bestanden - Web-suggesties - Search history + Websuggesties + Zoekgeschiedenis Rekenmachine Media, bestanden en meer Contacten en meer - Via Startpage + Via %1$s - Maximum number of apps in search results - Maximum number of people in search results - Maximum number of files in search results - Maximum number of settings entries in search results - Maximum number of history entries in search results - Maximum number of suggestions in search results - Maximum web suggestion delay + Maximum aantal apps in zoekresultaten + Maximaal aantal personen in zoekresultaten + Maximum aantal bestanden in zoekresultaten + Maximum aantal instellingen in zoekresultaten + Maximum aantal geschiedenisvermeldingen in zoekresultaten + Maximum aantal suggesties in zoekresultaten + Maximale vertraging bij websuggestie - To search for contacts, grant contacts and phone permissions to Lawnchair - To search your files, grant storage permissions to Lawnchair - Grant permissions + Om naar contacten te zoeken, moet Lawnchair toegang krijgen tot contacten en telefoon + Om bestanden te doorzoeken, moet Lawnchair toegang krijgen tot opslag + Machtigingen verlenen + Lawnchair (samenstelling) + Websuggestie-aanbieder + Pictogram van aanbieder van websuggesties in zoekbalk weergeven + Stijl van de zoekbalk in het dok diff --git a/lawnchair/res/values-no-rNO/strings.xml b/lawnchair/res/values-no-rNO/strings.xml index f8c834badb8..2eda6b38981 100644 --- a/lawnchair/res/values-no-rNO/strings.xml +++ b/lawnchair/res/values-no-rNO/strings.xml @@ -221,9 +221,20 @@ Mørkt System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colors Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-pl-rPL/strings.xml b/lawnchair/res/values-pl-rPL/strings.xml index 6b55def89f8..5d5b7f65ebe 100644 --- a/lawnchair/res/values-pl-rPL/strings.xml +++ b/lawnchair/res/values-pl-rPL/strings.xml @@ -221,9 +221,20 @@ Ciemny System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Kolory Accent color + Stroke color Paleta kolorów RGB Czerwony @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed Aplikacja aktualności \"Feed\" niezainstalowana @@ -397,6 +411,8 @@ Search bar widget Wyłączono Google Search bar + Opacity + Stroke Promień narożnika Apply accent color Search provider @@ -466,7 +482,7 @@ Files from device Settings from device Search for more apps - Szukaj na Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -500,7 +516,7 @@ Multimedia, pliki i inne Kontakty i inne - Poprzez Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -513,4 +529,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-pt-rBR/strings.xml b/lawnchair/res/values-pt-rBR/strings.xml index 26b24a1b259..5310d462b7c 100644 --- a/lawnchair/res/values-pt-rBR/strings.xml +++ b/lawnchair/res/values-pt-rBR/strings.xml @@ -23,7 +23,7 @@ --> Pré-visualização Criar - Backup + Fazer backup Restaurar Apagar Redefinir @@ -34,16 +34,16 @@ Sempre Nunca Área de transferência - Copy link + Copiar link Copiar Colar Carregando… Gerenciado por Lawnchair Preferências - Home settings - System settings - Change settings + Configurações da tela de início + Configurações do sistema + Alterar configurações Papel de Parede - Background opacity + Opacidade do fundo - Copied to clipboard + Copiado para a área de transferência Item removido - What to show + O que mostrar - To lock your phone when performing a gesture, Lawnchair requires accessibility access.\n\nLawnchair doesn\'t watch any user action, though the privilege to do so is required for all accessibility services. Lawnchair discards any event sent by the system.\n\nIn order to lock your phone, Lawnchair uses the performGlobalAction Accessibility service. + Para bloquear seu celular ao executar um gesto, O Lawnchair precisa do acesso à acessibilidade.\n\nO Lawnchair não observa qualquer ação do usuário, porém esta permissão é necessária para todos os serviços de acessibilidade. O Lawnchair descarta qualquer evento enviado pelo sistema.\n\nPara bloquear seu dispositivo, o Lawnchair usa o serviço de acessibilidade \"performGlobalAction\". %1$d x %2$d %s & %s Configurações Geral - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + Cores, pacotes de ícones, pontos de notificação + Tela de início + Feed, grade, ícones Dock - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + Barra de pesquisa, contagem de ícones + Gaveta de apps + Apps escondidos, contagem de colunas, ícones + Pesquisa da gaveta + Sugestões da web, pesquisa global Pastas - Row and column count + Contagem de linhas e colunas Gestos - Taps and swipes + Toques e deslizamentos Recentes - Clear All button, corner radius + Botão \"Limpar Tudo\", raio de canto Sobre - App info + Informações do app Reiniciar o Lawnchair - Experimental features + Recursos experimentais - Font customization + Customização de fonte Algum texto continua inalterado - At a Glance calendar customization - Permitir a visualização de data nos sistemas de calendário não-Gregorianos - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + Personalização do calendário do Resumo + Permitir a exibição de datas em sistemas de calendário não-Gregorianos + Aumentar o limite de tamanho máximo da grade + Aumentar o tamanho máximo permitido da grade de 10 x 10 para 20 x 20 + Sempre recarregar ícones Evite usar ícones guardados no cache dos pacotes de ícones - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + Bloquear/desbloquear + Prevenir app selecionado de fechar ao clicar em \"Limpar tudo\" - To access shortcuts and additional features, set Lawnchair as your default launcher - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other + Para acessar atalhos e recursos adicionais, configure o Lawnchair como sua launcher padrão + Pontos de notificação + Mostrar contador de notificação + Cor do ponto de notificação + Cor do contador de notificação + Aviso: As cores do ponto de notificação e do contador não tem contraste suficiente entre elas + Aviso: As cores do ponto de notificação e do contador podem não ter sempre contraste suficiente entre elas O acesso às notificações é necessário - To show Notification Dots, turn on app notifications for %1$s + Para mostrar Pontos de Notificação, ative as notificações para o app %1$s - Icon style - Icon shape - Icon size - Show labels - Label size - Use multiple lines + Estilo do ícone + Formato do ícone + Tamanho do ícone + Mostrar etiquetas + Tamanho da etiqueta + Usar múltiplas linhas - Transparent themed icons + Ícones transparentes tematizados Usar fundo transparente nos ícones temáticos - Auto-adaptive icons - For all non-adaptive icons - Background lightness - Use 100% background lightness for white - Reset custom icons + Ícones adaptativos automáticos + Para todos os ícones não-adaptativos + Luminosidade do fundo + Use 100% de luz de fundo para fundo branco + Resetar ícones customizados Todos os ícones personalizados serão redefinidos. Você quer continuar? Ícones Restaurar ao padrão Abrir seletor externo - Pick icon from - Couldn\'t load more icons + Escolher ícone de + Não foi possível carregar mais ícones Sistema Círculo @@ -161,54 +161,54 @@ iOS Octógono Interface do Usuário - Rounded square - Sharp square + Quadrado Arredondado + Quadrado Afiado Quadrado Quadrado arredondado Lágrima - Custom icon shape - Create custom icon shape - Edit custom icon shape - Corner shape + Formato de Ícone Personalizado + Formato de Ícone Personalizado + Editar formato dos ícones personalizados + Formato dos Cantos Arredondado Suave Recorte - Top left - Top right - Bottom left - Bottom right - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + Canto superior esquerdo + Canto superior direito + Canto inferior esquerdo + Canto inferior direito + Copiar para Área de transferência + Importar da área de transferência + Área de transferência não contém uma forma de ícone válida - Icon pack - Themed icon source - System icons - Themed icons + Pacotes de ícones + Fonte dos Ícones Temáticos + Ícones do Sistema + Ícones Temáticos Desligado - Home screen - Home screen & app drawer + Tela de início + Tela Inicial e Gaveta de Aplicativos Não há pacotes de ícones suportados - Add fonts - OTF and TTF fonts are supported + Adicionar Fontes + Fontes OTF e TTF são suportadas Fonte não encontrada - Font (experimental) + Fonte (Experimental) Geral Títulos - Headings (medium) + Títulos (Médio) Corpo - Body (medium) + Corpo (Médio) Itálico Fino - Extra light + Fonte extra fina Claro Normal Médio Semi Negrito Negrito - Extra bold + Extra Negrito Preto + Estilo de cor + Spritz + Ponto de Tonal + Vibrante + Expressivo + Arco-íris + Salada de frutas + Conteúdo + Monocromático Cores - Accent color + Cor de Destaque + Stroke color Amostras RGB Vermelho @@ -235,7 +246,7 @@ Brilho Hex Deslizantes - Invalid color + Cor Inválida Carregando Carregado - Battery low + Bateria Fraca "%1$d%% — Termina em %2$s" Resumo - What to show + O que mostrar Calendário - Date & time + Data & hora Data Horário - Time format - Follow system - 12-hour format - 24-hour format + Formato da Hora + Seguir o Sistema + formato de 12 Horas + formato de 24 Horas Clima - Battery status + Estado da bateria Tocando Agora - Tap to set up + Toque para configurar Para usar %1$s, habilite os Pontos de Notificação. - Show on home screen - At a Glance can be manually added to the home screen by placing the Lawnchair widget + Mostrar na tela inicial + O widget Resumo pode ser adicionado manualmente à tela inicial ao colocar o widget do Lawnchair - At a Glance provider + Provedor de Resumo Google Pesquisa do Google @@ -287,9 +298,9 @@ Novidades Suporte Produto - Design & development + Design & desenvolvimento Desenvolvimento - QuickSwitch maintenance + Manutenção do QuickSwitch DevOps Suporte e RP Agradecimentos @@ -299,112 +310,117 @@ Backup and restore --> - Create backup - What to back up - Layout and settings + Criar backup + O que fazer backup + Layout e configurações Papel de Parede - Backup created - Failed to create backup - Restore backup - What to restore - Backup restored - Failed to restore backup - Invalid backup file + Backup criado + Falha ao criar o backup + Restaurar backup + O que restaurar + Backup restaurado + Falha ao restaurar o backup + Arquivo de backup inválido - Double tap - Swipe up - Swipe down - Home button - Back button - Do nothing + Dois toques + Deslizar para cima + Deslizar para baixo + Botão de início + Botão voltar + Não fazer nada Desligar a Tela - Open notification panel - Open app + Abrir painel de notificações + Abrir aplicativo Abrir %1$s - Open app drawer - Open app search - Open search - Pick app - Admin permissions required - To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" + Abrir gaveta de aplicativos + Abrir busca de aplicativos + Abrir busca + Escolher aplicativo + Permissões de administrador necessárias + Para usar o duplo clique para dormir, defina o Lawnchair como um aplicativo de administrador do dispositivo. Toque em \"Abrir configurações\" e depois em \"Ativar o aplicativo de administrador do dispositivo.\" Double Tap to Sleep will be disabled. - Turn on accessibility service - To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" - Open settings + Ativar serviço de acessibilidade + Para usar o Toque Duplo para Bloquear, ative o serviço de acessibilidade do Lawnchair. Toque em Abrir Configurações, depois selecione Lawnchair e ative Usar Lawnchair.\" + Abrir as configurações - Lawnchair bug report - %1$s crashed - Upload crash log + Relatório de bugs do Lawnchair + %1$s crashou + Enviar registro de erro Falha no envio Enviando… - Bug reports - Upload status - %d new reports - Multiple new reports + Relatório de bugs + Status do upload + %d novos relatórios + Vários novos relatórios - Home screen rotation - Allow home screen rotation when device is rotated - Add new apps to home screen - Show feed + Rotação da tela inicial + Permitir a rotação da tela inicial quando o dispositivo for girado + Enable wallpaper blur + Blur intensity + Factor threshold + Adicionar novos aplicativos à tela inicial + Mostrar o feed Nenhum aplicativo de feed instalado Feed - Feed provider - Scroll wallpaper - Wallpaper depth effect - Zoom in and out of the wallpaper when transitioning between areas of the launcher - Top shadow - Home screen grid - Lock home screen - Unlock home screen - Home screen is locked + Provedor de Feed + Papel de Parede Deslizante + Efeito de Profundidade do Plano de Fundo + Aumentar e diminuir a ampliação do papel de parede ao transitar entre as áreas do inicializador + Sombra superior + Grade da tela inicial + Bloquear a tela inicial + Desbloquear a tela inicial + A tela inicial está bloqueada Impedir mudanças no layout da tela inicial Exibir paginação de pontos Usar pontos em vez de linhas para mostrar o número da página - Use new pop-up style - Use Material You\'s bouncy and slightly consolidated pop-up style - Pop-up menu - Show lock button - Show system settings entry - Show Edit button - Status bar - Show status bar - Dark status bar - Text color + Usar novo estilo de pop-up + Usar o estilo de pop-up animado e ligeiramente consolidado do Material You + Menu flutuante + Mostrar o botão de bloqueio + Mostrar entrada para as configurações do sistema + Exibir botão Editar + Barra de status + Mostrar barra de status + Barra de status escura + Cor do texto Claro Escuro - Rounded corners - Allow overlap - Enforce widget resizing + Cantos arredondados + Permitir a sobreposição + Forçar o redimensionamento de widgets Permitir redimensionamento de widgets que são restritos a um tamanho específico - Remove size constraints + Remover restrições de tamanho Remover as restrições de tamanho mínimo e máximo de widgets - Show dock - Search bar - Search bar widget + Mostrar dock + Barra de pesquisa + Widget da barra de pesquisa Desativado - Google Search bar + Barra de Pesquisa do Google + Opacity + Stroke Raio do canto - Apply accent color - Search provider - Dock icons - Bottom padding + Aplicar cor de destaque + Provedor de pesquisa + Ícones do dock + Preenchimento inferior - App search - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + Pesquisa de aplicativos + %1$s e Lawnchair têm um acordo de participação na receita.\n\nPesquisar usando %1$s ajuda a apoiar o Lawnchair. Aplicativo Site da Internet Aplicativo necessário @@ -413,43 +429,43 @@ Google Lens Pesquisa por Voz - Hidden apps - Load apps in bulk - Load and display icons in bulk instead of individually - Remember position + Aplicativos ocultos + Carregar aplicativos em massa + Carregar e exibir ícones em massa ao invés de individualmente + Lembrar a posição Memorizar a posição da gaveta de aplicativos após sair da gaveta - Show scrollbar - App drawer columns - Row height - Horizontal padding + Mostrar barra de rolagem + Colunas da gaveta de aplicativos + Altura da linha + Preenchimento horizontal - Hide from app drawer - Hidden apps (%1$d) + Esconder da gaveta de aplicativos + Aplicativos ocultos (%1$d) - %1$d app - %1$d apps + %1$d aplicativo + %1$d aplicativos - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + Opacidade do fundo dos ícones + Cor de fundo do ícone + Máximo de colunas nas pastas + Máximo de linhas nas pastas - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration - Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + Estas configurações serão ignoradas, já que o Lawnchair não está definido como o provedor de recentes + Integração de sistema incompatível + Seu dispositivo está configurado para ter gestos do sistema (conhecido como Quickstep) fornecidos por %1$s, mas esta versão do %1$s não é compatível com sua versão do Android. Para continuar usando o seu dispositivo, desinstale as atualizações %1$s ou desative %1$s como provedor de gestos do sistema. + Fundo translúcido + Opacidade do fundo + Ações rápidas Compartilhar Lens - Clear all + Limpar tudo Forçar fechamento - Screen corner radius - Custom screen corner radius - When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. + Raio do canto da tela + Raio do canto de tela personalizado + Ao deslizar para cima para abrir os aplicativos recentes, o aplicativo atual segue o seu dedo, diminuindo em um cartão. Utilize este controle deslizante para ajustar o raio de curvatura do cartão quando este estiver quase em tela cheia, de modo que ele corresponda aos cantos da sua tela. Barra de Tarefas - Show taskbar (experimental) + Mostrar barra de tarefas (experimental) Pesquisar Pesquisar aplicativos - No apps found matching \"%1$s\" + Nenhum aplicativo encontrado que corresponda a \"%1$s Da web - Contacts from device - Files from device - Settings from device - Search for more apps - Pesquisar na Página Inicial - No app store or browser installed - Clear search history - Clear search box + Contatos do dispositivo + Arquivos do dispositivo + Configurações do dispositivo + Pesquisar por mais aplicativos + Pesquisar em %1$s + Nenhuma loja de aplicativos ou navegador instalado + Limpar histórico de pesquisas + Limpar caixa de pesquisa Pesquisar - Show search bar - Automatically show keyboard - Fuzzy search - Approximate matching for app searches + Mostrar barra de pesquisa + Mostrar o teclado automaticamente + Pesquisa aproximada + Correspondência aproximada para pesquisas de apps Sugestões - Show suggested apps at the top of the drawer - Device search - Search your phone contacts, files, and settings - Show hidden apps in search results - If full name is typed - Search algorithm + Mostrar aplicativos sugeridos na parte superior da gaveta de aplicativos + Pesquisa no dispositivo + Procurar nos contatos, arquivos e configurações do seu telefone + Mostrar aplicativos ocultos nos resultados da pesquisa + Se o nome completo for digitado + Algoritmo de pesquisa Pesquisa de aplicativos - Global search (on-device) - Global search (via ASI) + Pesquisa global (no dispositivo) + Pesquisa global (via ASI) - Show in search results + Mostrar nos resultados da pesquisa Apps & Atalhos - App shortcuts + Atalhos de aplicativos Pessoas - Pixel tips - Android settings + Dicas do Pixel + Configurações do Android Arquivos Sugestões da Web - Search history + Histórico de pesquisas Calculadora Mídia, arquivos e mais Contatos e mais - Via Startpage + Via %1$s - Maximum number of apps in search results - Maximum number of people in search results - Maximum number of files in search results - Maximum number of settings entries in search results - Maximum number of history entries in search results - Maximum number of suggestions in search results - Maximum web suggestion delay + Número máximo de aplicativos nos resultados da pesquisa + Número máximo de contatos nos resultados de busca + Número máximo de arquivos nos resultados da pesquisa + Número máximo de entradas de configurações nos resultados da pesquisa + Número máximo de entradas de histórico nos resultados de pesquisa + Número máximo de sugestões nos resultados da pesquisa + Atraso máximo de sugestões da Web - To search for contacts, grant contacts and phone permissions to Lawnchair - To search your files, grant storage permissions to Lawnchair - Grant permissions + Para pesquisar por contatos, permita as permissões de Contatos e Telefone ao Lawnchair + Para pesquisar nos seus arquivos, permita a permissão de Armazenamento ao Lawnchair + Permitir permissões + Lawnchair (composto) + Provedor de sugestões da web + Mostrar o ícone do provedor de sugestões da web na barra de pesquisa + Combinar com o estilo da barra de pesquisa do dock diff --git a/lawnchair/res/values-pt-rPT/strings.xml b/lawnchair/res/values-pt-rPT/strings.xml index 8af1cec6bcc..6b0449b71ea 100644 --- a/lawnchair/res/values-pt-rPT/strings.xml +++ b/lawnchair/res/values-pt-rPT/strings.xml @@ -221,9 +221,20 @@ Escuro Sistema Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Cores Accent color + Stroke color Amostras RGB Vermelho @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed Sem aplicações de feed instaladas @@ -397,6 +411,8 @@ Search bar widget Desativado Google Search bar + Opacity + Stroke Raio dos cantos Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Pesquisar em Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Mídia, ficheiros e mais Contactos e mais - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-ro-rRO/strings.xml b/lawnchair/res/values-ro-rRO/strings.xml index 60deadccf2d..b17f4e8de0d 100644 --- a/lawnchair/res/values-ro-rRO/strings.xml +++ b/lawnchair/res/values-ro-rRO/strings.xml @@ -221,9 +221,20 @@ Întunecată Sistem Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Culori Accent color + Stroke color Eșantioane RVA Roșu @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Dezactivat Google Search bar + Opacity + Stroke Raza colțurilor Apply accent color Search provider @@ -465,7 +481,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -499,7 +515,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -512,4 +528,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-ru-rRU/strings.xml b/lawnchair/res/values-ru-rRU/strings.xml index 82991148a27..b45a18624cc 100644 --- a/lawnchair/res/values-ru-rRU/strings.xml +++ b/lawnchair/res/values-ru-rRU/strings.xml @@ -23,7 +23,7 @@ --> Предпросмотр Создать - Backup + Резерв. копирование Восстановить Удалить Сбросить @@ -34,45 +34,45 @@ Всегда Никогда Буфер обмена - Copy link + Копировать ссылку Копировать Вставить Загрузка… Управляется Lawnchair Настройки - Home settings - System settings - Change settings + Настр. глав. экрана + Системные настройки + Изменить настройки - Динамический - Пресеты - Пользовательский + Изменять динамически + Предустановки + Пользоват. настройки По умолчанию - Система + На основе системы Столбцы Строки - Название + Подпись Иконки Сетка Макет - Обои - Background opacity + На основе обоев + Прозрачность фона - Copied to clipboard + Скопировано в буфер обмена Элемент удален - What to show + Что показывать - To lock your phone when performing a gesture, Lawnchair requires accessibility access.\n\nLawnchair doesn\'t watch any user action, though the privilege to do so is required for all accessibility services. Lawnchair discards any event sent by the system.\n\nIn order to lock your phone, Lawnchair uses the performGlobalAction Accessibility service. - %1$d x %2$d + Чтобы заблокировать телефон с помощью жеста, Lawnchair требуется доступ к специальным возможностям.\n\nLawnchair не отслеживает никакие действия пользователя, хотя это требуется для всех служб специальных возможностей. Lawnchair отбрасывает любые события, отправленные системой.\n\nЧтобы заблокировать ваш телефон, Lawnchair использует службу специальных возможностей PerformGlobalAction. + %1$d × %2$d %s & %s Настройки Общие - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + Цвета, Наборы иконок, Точки уведомлений + Главный экран + Лента, сетка, иконки Док-панель - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + Строка поиска, число иконок + Меню приложений + Скрытые приложения, число столбцов, иконки + Поиск в меню + Веб-подсказки, глобальный поиск Папки - Row and column count + Кол-во строк и столбцов Жесты - Taps and swipes + Касания и свайпы Недавние - Clear All button, corner radius + Кнопка \"Очистить всё\", радиус углов О программе - App info + О приложении Перезапустить Lawnchair - Experimental features + Эксперимент. функции - Font customization + Настройка шрифта Некоторый текст останется без изменений - At a Glance calendar customization - Разрешить отображение даты в не грегорианских календарных системах - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + Настройки календаря секции \"Самое главное\" + Разрешить отображение даты календаря не-грегорианского типа + Увеличить макс. размер сетки + Увеличить макс. допустимый размер сетки глав. экрана с 10х10 на 20x20 + Всегда перезагружать иконки Избегать использования кэшированных иконок из наборов иконок - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + Блокировка/Разблокировка + Запретить закрытие выбранного приложения при нажатии кнопки \"Очистить всё\" - To access shortcuts and additional features, set Lawnchair as your default launcher - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other + Для доступа к ярлыкам и дополнительным функциям, установите Lawnchair в качестве лаунчера по умолчанию + Отображать Точки уведомлений + Отображать счетчик уведомлений + Цвет Точек уведомлений + Цвет счетчика уведомлений + Внимание: Цвета Точек уведомлений и счетчика уведомлений недостаточно контрастируют друг с другом + Внимание: Цвета Точек уведомлений и счетчика не всегда могут быть достаточно контрастны друг с другом Необходимо разрешение доступа к уведомлениям - To show Notification Dots, turn on app notifications for %1$s + Для отображения Точек уведомлений, включите уведомления приложения для %1$s - Icon style - Icon shape - Icon size - Show labels - Label size - Use multiple lines + Стиль иконок + Форма иконок + Размер иконок + Показывать подписи + Размер подписи + Использовать несколько строк - Transparent themed icons + Прозрачные тематические иконки Использовать прозрачный фон на тематических значках - Auto-adaptive icons - For all non-adaptive icons - Background lightness - Use 100% background lightness for white - Reset custom icons - Все пользовательские иконки будут сброшены. Вы хотите продолжить? + Авто-адаптивные иконки + Для всех не-адаптивных иконок + Яркость подложки + Для белой подложки установите 100% значение яркости + Сброс пользоват. иконок + Все пользоват. иконки будут сброшены. Вы хотите продолжить? Иконки Сбросить настройки Открыть внешний подборщик - Pick icon from - Couldn\'t load more icons + Выбрать иконку из + Не удалось загрузить больше иконок Система Круг @@ -161,54 +161,54 @@ iOS Восьмиугольник Из OneUI - Rounded square - Sharp square + Скруглённый квадрат + Острый квадрат Квадратный Квадратный круг Капля - Custom icon shape - Create custom icon shape - Edit custom icon shape - Corner shape + Пользоват. форма иконок + Создать свою форму иконок + Редактировать пользоват. форму иконок + Форма углов Круглая Сглаженная Обрезанная - Top left - Top right - Bottom left - Bottom right - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + Сверху слева + Сверху справа + Снизу слева + Снизу справа + Экспорт в буфер обмена + Импорт из буфера обмена + Буфер обмена не содержит допустимую форму иконки - Icon pack - Themed icon source - System icons - Themed icons + Набор иконок + Источник тематических иконок + Системные иконки + Тематические иконки Выкл - Home screen - Home screen & app drawer + Главный экран + Главный экран & меню приложений Нет поддерживаемых наборов значков - Add fonts - OTF and TTF fonts are supported + Добавить шрифты + Поддерживаются OTF и TTF шрифты Шрифт не найден - Font (experimental) + Шрифт (экспериментально) Общие Заголовки - Headings (medium) - Обычный - Body (medium) + Заголовки (сред. размер) + Обычный текст + Обычный текст (сред. размер) Курсив Тонкий - Extra light + Очень тонкий Светлая Стандартный Средний Полужирный Жирный - Extra bold + Очень толстый Черный + Цветовой стиль + Форме шприца + Тональная точка + Яркий + Выразительный + Радуга + Фруктовый салат + Содержимое + Монохром Цвета - Accent color - Образцы + Цветовой акцент + Stroke color + Шаблоны RGB Красный Зелёный @@ -235,7 +246,7 @@ Яркость Hex Ползунки - Invalid color + Некорректный цвет Зарядка Заряжено - Battery low + Низкий заряд батареи "%1$d%% — Полная через %2$s" - Первый Взгляд - What to show + Секция \"Самое главное\" + Что показывать - Календарь - Date & time - Дата - Время - Time format - Follow system - 12-hour format - 24-hour format + Тип календаря + Дата и время + Отображать дату + Отображать время + Формат времени + Следовать систем. настройкам + 12-час. формат + 24-час. формат Погода - Battery status + Состояние батареи Сейчас играет - Tap to set up - Чтобы использовать %1$s, включите точки уведомлений. + Нажмите для настройки + Чтобы использовать %1$s, включите Точки уведомлений. - Show on home screen - At a Glance can be manually added to the home screen by placing the Lawnchair widget + Показывать на главном экране + Секцию \"Самое главное\" можно добавить на главный экран вручную с помощью виджета \"Lawnchair\" - At a Glance provider + Провайдер секции \"Самое главное\" Google Поиск Google @@ -286,27 +297,27 @@ --> Новости Поддержка - Продукт - Design & development + Команда разработки + Дизайн и разработка Разработка - QuickSwitch maintenance + Поддержка QuickSwitch DevOps-инженер - Поддержка & PR - Лицензии + Поддержка и PR + Выражаем благодарность Перевод - Create backup - What to back up - Layout and settings + Создать резерв. копию + Что нужно сохранить + Макет и настройки Обои Резервная копия создана Не удалось создать резервную копию - Restore backup - What to restore + Восстановить резерв. копию + Что восстанавливать Резервная копия восстановлена Не удалось восстановить резервную копию Файл резервной копии недействителен @@ -315,96 +326,101 @@ Gesture settings --> - Double tap - Swipe up - Swipe down - Home button - Back button - Do nothing + Двойное нажатие + Свайп Вверх + Свайп Вниз + Кнопка \"Домой\" + Кнопка \"Назад\" + Ничего не делать Сон - Open notification panel - Open app + Открыть панель уведомлений + Открыть приложение Открыть %1$s - Open app drawer - Open app search - Open search - Pick app - Admin permissions required - To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" - Двойное нажатие для блокировки будет отключен. - Turn on accessibility service - To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" - Open settings + Открыть Меню приложений + Открыть поиск приложений + Открыть поиск + Выбрать приложение + Необходимы права администратора + Чтобы использовать Спящий режим по двойному нажатию, назначьте Lawnchair администратором устройства. Для этого: откройте Настройки, затем нажмите на \"Активировать приложение администратора устройства.\" + Двойное нажатие для Спящего режима будет отключено. + Включить службу специальных возможностей + Чтобы использовать Спящий режим по двойному нажатию, включите Lawnchair в меню спец. возможностей. Для этого: откройте Настройки, затем выберите \"Lawnchair\" и нажмите \"Использовать Lawnchair\" + Открыть настройки - Lawnchair bug report - %1$s crashed - Upload crash log - Загрузка не удалась - Загрузка… - Bug reports - Upload status - %d new reports - Multiple new reports + Отчет об ошибках Lawnchair + %1$s - произошел сбой + Отправить лог ошибки + Отправка не удалась + Отправка… + Отчёт об ошибках + Статус отправки + %d новых отчетов + Несколько новых отчетов - Home screen rotation - Allow home screen rotation when device is rotated - Add new apps to home screen - Show feed + Поворот главного экрана + Разрешить поворот глав. экрана при повороте устройства + Включить размытие обоев + Степень размытия + Предел фактора размытия + Добавлять новые приложения на глав. экран + Показывать ленту новостей Приложения для ленты новостей не установлены Лента Google - Feed provider - Scroll wallpaper - Wallpaper depth effect - Zoom in and out of the wallpaper when transitioning between areas of the launcher - Top shadow - Home screen grid - Lock home screen - Unlock home screen - Home screen is locked + Поставщик ленты новостей + Прокрутка обоев + Эффект глубины обоев + Приближать и отдалять обои при переключении между приложениями + Тень сверху + Сетка главного экрана + Заблокировать глав. экран + Разбл. глав. экран + Главный экран заблокирован Предотвращать изменения макета главного экрана Показывать точечную нумерацию страниц - Use dots instead of lines to show page number - Use new pop-up style - Use Material You\'s bouncy and slightly consolidated pop-up style - Pop-up menu - Show lock button - Show system settings entry - Show Edit button - Status bar - Show status bar - Dark status bar - Text color + Использовать точки вместо линий для индикации страниц + Использовать новый стиль всплывающего окна + Использовать Material You стиль всплывающих окон + Всплывающее меню + Показывать кнопку блокировки + Показывать пункт системных настроек + Показывать кнопку редактирования + Строка состояния + Показывать строку состояния + Темная строка состояния + Цвет текста Светлая Тёмная - Rounded corners - Allow overlap - Enforce widget resizing - Allow resizing of widgets that are constrained to a specific size - Remove size constraints - Remove the minimum and maximum size restrictions of widgets + Скруглённые углы + Разрешить наложения + Принудительное изменение размера виджета + Разрешить изменение размеров фиксированных виджетов + Удалить ограничения размера + Убрать мин. и макс. ограничения размера виджетов - Show dock - Search bar - Search bar widget + Отображать док-панель + Панель поиска + Виджет панели поиска Отключено - Google Search bar + Панель поиска Google + Прозрачность + Stroke Скругление углов - Apply accent color - Search provider - Dock icons - Bottom padding + Применить цвет акцента + Провайдер поиска + Иконки док-панели + Нижний отступ - App search - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + Поиск приложений + %1$s и Lawnchair имеет соглашение о разделе доходов.\n\nПоиск с помощью %1$s помогает поддерживать Lawnchair. Приложение Веб-сайт Требуется приложение @@ -413,45 +429,45 @@ Google Lens Голосовой поиск - Hidden apps - Load apps in bulk - Load and display icons in bulk instead of individually - Remember position - Запомнить позицию поля поиска приложений после закрытия поиска - Show scrollbar - App drawer columns - Row height - Horizontal padding + Скрытые приложения + Массовая загрузка приложений + Массовая загрузка иконок вместо одиночной + Запомнить позицию + Запомнить позицию Меню приложений после его закрытия + Показать полосу прокрутки + Кол-во столбцов в Меню прилож. + Высота строки + Горизонт. отступ - Hide from app drawer - Hidden apps (%1$d) + Скрыть из Меню приложений + Скрытые приложения (%1$d) - %1$d app - %1$d apps - %1$d apps - %1$d apps + %1$d приложение + %1$d приложений + %1$d приложений + %1$d приложение - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + Прозрачность фона иконки + Цвет фона иконки + Макс. кол-во столбцов в папке + Макс. кол-во строк в папке - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration - Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + Эти настройки будут проигнорированы, так как Lawnchair не установлен как провайдер недавних приложений + Несовместимая системная интеграция + Ваше устройство настроено на использование системных жестов (известных как Quickstep), предоставляемых %1$s, но эта версия %1$s не совместима с вашей версией Android. Чтобы продолжить использование вашего устройства, удалите обновления %1$s или отключите %1$s как поставщика системных жестов. + Полупрозрачный фон + Прозрачность фона + Быстрые действия Поделиться Lens - Clear all + Очистить все Принудительно закрыть - Screen corner radius - Custom screen corner radius - When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. + Радиус скругления краёв экрана + Пользоват. радиус углов экрана + При жесте \"Свайп Вверх\" для открытия Недавних приложений, текущее приложение следует за пальцем, уменьшаясь в карточку. Используйте этот ползунок для настройки радиуса угла карточки, когда она почти развернута, чтобы соответствовать углам экрана. Панель задач - Show taskbar (experimental) + Показать панель задач (экспериментально) Поиск - Поиск по приложениям - No apps found matching \"%1$s\" + Поиск приложений + Не найдено приложений по запросу \"%1$s\" Из Интернета - Contacts from device - Files from device - Settings from device - Search for more apps - Искать на Startpage - No app store or browser installed - Clear search history - Clear search box + Контакты на устройстве + Файлы на устройстве + Настройки устройства + Поиск доп. приложений + Искать в %1$s + Магазин приложений или браузер не установлены + Очистить историю поиска + Очистить строку поиска Поиск - Show search bar + Показать строку поиска Автоматически показывать клавиатуру - Fuzzy search - Approximate matching for app searches + Поиск по совпадению + Поиск приложений по схожему запросу Рекомендации - Show suggested apps at the top of the drawer - Device search - Search your phone contacts, files, and settings - Show hidden apps in search results - If full name is typed - Search algorithm + Показывать рекоменд. прилож. в верх. части Меню приложений + Поиск по устройству + Поиск контактов, файлов и настроек вашего телефона + Показывать скрытые приложения в результатах поиска + Если указано полное имя + Алгоритм поиска Поиск приложений - Global search (on-device) - Global search (via ASI) + Глобальный поиск (на устройстве) + Глобальный поиск (с помощью ASI) - Show in search results - Приложения & Ярлыки - App shortcuts + Показывать в результатах поиска + Приложения и Ярлыки + Ярлыки приложений Люди - Pixel tips - Android settings + Советы Pixel + Настройки Android Файл Веб-предложения - Search history - Kalkulyator + История поиска + Калькулятор Медиа, файлы и другое Контакты и другое - С помощью Startpage + Через %1$s - Maximum number of apps in search results - Maximum number of people in search results - Maximum number of files in search results - Maximum number of settings entries in search results - Maximum number of history entries in search results - Maximum number of suggestions in search results - Maximum web suggestion delay + Макс. кол-во приложений в результатах поиска + Макс. кол-во людей в результатах поиска + Макс. кол-во файлов в результатах поиска + Макс. кол-во пунктов настроек в результатах поиска + Макс. кол-во записей истории в результатах поиска + Макс. кол-во предложений в результатах поиска + Макс. задержка веб-предложений - To search for contacts, grant contacts and phone permissions to Lawnchair - To search your files, grant storage permissions to Lawnchair - Grant permissions + Для поиска контактов, предоставьте доступ к контактам и телефону для Lawnchair + Чтобы искать файлы, предоставьте доступ к хранилищу для Lawnchair + Предоставить доступ + Lawnchair (compose) + Провайдер веб-предложений + Показать иконку провайдера веб-предложений в панели поиска + Соответствовать стилю строки поиска в док-панели diff --git a/lawnchair/res/values-sk-rSK/strings.xml b/lawnchair/res/values-sk-rSK/strings.xml index b4c0b18f99c..3876436d593 100644 --- a/lawnchair/res/values-sk-rSK/strings.xml +++ b/lawnchair/res/values-sk-rSK/strings.xml @@ -221,9 +221,20 @@ Tmavý Systém Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Farby Accent color + Stroke color Odtiene RGB Červená @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Vypnuté Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -466,7 +482,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -500,7 +516,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -513,4 +529,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-sl-rSI/strings.xml b/lawnchair/res/values-sl-rSI/strings.xml index c5ad32d1379..b3443e08b2c 100644 --- a/lawnchair/res/values-sl-rSI/strings.xml +++ b/lawnchair/res/values-sl-rSI/strings.xml @@ -221,9 +221,20 @@ Temno Sistem Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Barve Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Polmer robov Apply accent color Search provider @@ -466,7 +482,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -500,7 +516,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -513,4 +529,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-sq-rAL/strings.xml b/lawnchair/res/values-sq-rAL/strings.xml index d6e94867685..668fd2b2385 100644 --- a/lawnchair/res/values-sq-rAL/strings.xml +++ b/lawnchair/res/values-sq-rAL/strings.xml @@ -221,9 +221,20 @@ Errët Sistemi Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Ngjyrat Accent color + Stroke color Shkëmbim RGB E kuqe @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Fikur Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-sr/strings.xml b/lawnchair/res/values-sr/strings.xml index 16b9c5aa75b..5997e72d1f6 100644 --- a/lawnchair/res/values-sr/strings.xml +++ b/lawnchair/res/values-sr/strings.xml @@ -221,9 +221,20 @@ Тамна Системска На основу позадине + + Шема боја + Аперол + Нијансирање + Живописно + Експресивно + Дуга + Воћна салата + Садржај + Монохроматско Боје Боја за наглашавање + Stroke color Обрасци RGB Црвена @@ -357,6 +368,9 @@ Ротација почетног екрана Дозволите ротацију почетног екрана када се уређај ротира + Enable wallpaper blur + Blur intensity + Factor threshold Додај нове апликације на почетни екран Прикажи фид Ниједна апликација за фид није инсталирана @@ -397,6 +411,8 @@ Виџет траке за претрагу Онемогућено Google трака за претрагу + Opacity + Stroke Заобљеност углова Примени боју за наглашавање Претраживач @@ -465,7 +481,7 @@ Фајлови са уређаја Подешавања са уређаја Претражите још апликација - Претражуј помоћу услуге Startpage + Search on %1$s Није инсталирана продавница апликација ни прегледач Обриши историју претраге Обриши поље за претрагу @@ -499,7 +515,7 @@ Медији, фајлови и друго Контакти и друго - Помоћу услуге Startpage + Via %1$s Максималан број апликација у резултатима претраге Максималан број контаката у резултатима претраге @@ -512,4 +528,8 @@ Да бисте претраживали контакте, доделите Lawnchair-у дозволе Контакти и Телефон Да бисте претраживали фајлове, доделите Lawnchair-у приступ меморији Додели дозволе + Lawnchair (састављено) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-sv-rSE/strings.xml b/lawnchair/res/values-sv-rSE/strings.xml index f9487f4a5a0..9bae27e0c16 100644 --- a/lawnchair/res/values-sv-rSE/strings.xml +++ b/lawnchair/res/values-sv-rSE/strings.xml @@ -23,7 +23,7 @@ --> Förhandsgranskning Skapa - Backup + Säkerhetskopiera Återställ Radera Återställ @@ -34,16 +34,16 @@ Alltid Aldrig Urklipp - Copy link + Kopiera länk Kopiera Klistra in Laddar … Hanteras av Lawnchair Alternativ - Home settings - System settings - Change settings + Startinställningar + Systeminställningar + Ändra inställningar Bakgrundsbild - Background opacity + Bakgrundsopacitet - Copied to clipboard + Kopierad till urklipp Objekt borttaget - What to show + Vad ska visas För att kunna låsa din telefon när en gest görs kräver Lawnchair tillgänglighetsåtkomst.\n\nLawnchair övervakar inte några användaraktiviteter, men behörigheten att göra detta krävs för alla tillgänglighetstjänster. Lawnchair förkastar alla händelser som skickas av systemet.\n\nFör att kunna låsa din telefon använder Lawnchair tillgänglighetstjänsten performGlobalAction. %1$d x %2$d @@ -81,77 +81,77 @@ --> Inställningar Allmänt - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + Färger, ikonpaket, aviseringsprickar + Startskärm + Flöde, rutnät, ikoner Favoritfält - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + Sökfält, ikonantal + Applåda + Dolda appar, kolumnantal, ikoner + Applådesökning + Webbförslag, global sökning Mappar - Row and column count + Rad- och kolumnantal Gester - Taps and swipes + Tryckningar och svepningar Senaste - Clear All button, corner radius + Rensa alla-knapp, hörnradie Om - App info + Appinfo Starta om Lawnchair - Experimental features + Experimentella funktioner - Font customization + Anpassning av typsnitt En del text förblir oförändrad - At a Glance calendar customization + Anpassning av snabböversiktskalender Tillåt visning av datum i icke-gregorianska kalendersystem - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + Utöka gränsen för maximal rutnätsstorlek + Utöka maximalt tillåten storlek på startskärmsrutnätet från 10 x 10 till 20 x 20 + Ladda alltid om ikoner Undvik att använda cachade ikoner från ikonpaket - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + Lås/lås upp + Förhindra att vald app stängs när \"Rensa alla\" används - To access shortcuts and additional features, set Lawnchair as your default launcher - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other + För att komma åt genvägar och ytterligare funktioner, ange Lawnchair som din förvalda startskärmsapp + Aviseringsprickar + Visa aviseringsräknare + Färg på aviseringsprick + Färg på aviseringsräknare + Varning: Färgerna på aviseringsprick och aviseringsräknare har inte tillräcklig kontrast mot varandra + Varning: Färgerna på aviseringsprick och aviseringsräknare har kanske inte alltid tillräcklig kontrast mot varandra Åtkomst till aviseringar krävs - To show Notification Dots, turn on app notifications for %1$s + För att visa aviseringsprickar, aktivera appaviseringar för %1$s - Icon style - Icon shape - Icon size - Show labels - Label size - Use multiple lines + Ikonstil + Ikonform + Ikonstorlek + Visa etiketter + Etikettstorlek + Använd flera rader - Transparent themed icons + Transparenta tematiserade ikoner Använd transparent bakgrund på tematiserade ikoner - Auto-adaptive icons - For all non-adaptive icons - Background lightness - Use 100% background lightness for white - Reset custom icons + Autoadaptiva ikoner + För alla icke-adaptiva ikoner + Bakgrundens ljushet + Använd 100 % bakgrundsljushet för vitt + Återställ anpassade ikoner Alla anpassade ikoner kommer att återställas. Vill du fortsätta? Ikoner - Reset to default - Open external picker - Pick icon from - Couldn\'t load more icons + Återställ till standard + Öppna extern väljare + Välj ikon från + Kunde inte ladda fler ikoner System Cirkel @@ -161,54 +161,54 @@ iOS Oktagon One UI - Rounded square - Sharp square + Rundad kvadrat + Skarp kvadrat Kvadrat Kvirkel Droppe - Custom icon shape - Create custom icon shape - Edit custom icon shape - Corner shape + Anpassad ikonform + Skapa anpassad ikonform + Redigera anpassad ikonform + Hörnform Rund Slät Klippt - Top left - Top right - Bottom left - Bottom right - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + Vänster överkant + Höger överkant + Vänster nederkant + Höger nederkant + Exportera till urklipp + Importera från urklipp + Urklipp innehåller inte en giltig ikonform - Icon pack - Themed icon source - System icons - Themed icons + Ikonpaket + Källa till tematiserade ikoner + Systemikoner + Tematiserade ikoner Av - Home screen - Home screen & app drawer + Startskärm + Startskärm & applåda Inga ikonpaket som stöds - Add fonts - OTF and TTF fonts are supported + Lägg till typsnitt + OTF- och TTF-typsnitt stöds Typsnittet hittades inte - Font (experimental) + Typsnitt (experimentellt) Allmänt Rubriker - Headings (medium) + Rubriker (medium) Brödtext - Body (medium) + Brödtext (medium) Kursiv Tunn - Extra light + Extra mager Mager Normal Medel Halvfet Fet - Extra bold + Extra fet Svart + Färgstil + Spritz + Tonal punkt + Livfull + Uttrycksfull + Regnbåge + Fruktsallad + Innehåll + Enfärgad Färger - Accent color + Accentfärg + Stroke color Exempel RGB Rött @@ -235,7 +246,7 @@ Ljushet Hex Reglage - Invalid color + Ogiltig färg Laddar Laddat - Battery low + Lågt batteri "%1$d%% — fullt om %2$s" Snabböversikt - What to show + Vad ska visas Kalender - Date & time + Datum & tid Datum Tid - Time format - Follow system - 12-hour format - 24-hour format + Tidsformat + Följ systemet + 12-timmarsformat + 24-timmarsformat Väder - Battery status + Batteristatus Nu spelas - Tap to set up + Tryck för att konfigurera För att använda %1$s, aktivera aviseringsprickar. - Show on home screen - At a Glance can be manually added to the home screen by placing the Lawnchair widget + Visa på startskärmen + Snabböversikt kan läggas till manuellt på startskärmen genom att placera ut Lawnchair-widgeten - At a Glance provider + Snabböversiktsleverantör Google Google Sök @@ -287,9 +298,9 @@ Nyheter Support Produkt - Design & development + Design & utveckling Utveckling - QuickSwitch maintenance + QuickSwitch-underhåll DevOps Support & pr Erkännanden @@ -299,112 +310,117 @@ Backup and restore --> - Create backup - What to back up - Layout and settings + Skapa säkerhetskopia + Vad ska säkerhetskopieras + Layout och inställningar Bakgrundsbild - Backup created - Failed to create backup - Restore backup - What to restore - Backup restored - Failed to restore backup - Invalid backup file + Säkerhetskopia skapad + Misslyckades med att skapa säkerhetskopia + Återställ säkerhetskopia + Vad ska återställas + Säkerhetskopia återställd + Misslyckades med att återställa säkerhetskopia + Ogiltig säkerhetskopiefil - Double tap - Swipe up - Swipe down - Home button - Back button - Do nothing + Dubbeltryck + Svep uppåt + Svep nedåt + Hemknapp + Bakåtknapp + Gör ingenting Vila - Open notification panel - Open app + Öppna aviseringspanel + Öppna app Öppna %1$s - Open app drawer - Open app search - Open search - Pick app - Admin permissions required - To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" + Öppna applåda + Öppna appsökning + Öppna sökning + Välj app + Adminbehörigheter krävs + För att använda dubbeltryck för att vila, ange Lawnchair som en enhetsadminapp. Tryck på \"Öppna inställningar\", tryck sedan på \"Aktivera denna enhetsadminapp\". Dubbeltryck för att vila kommer att inaktiveras. - Turn on accessibility service - To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" - Open settings + Aktivera tillgänglighetstjänst + För att använda dubbeltryck för att vila, aktivera Lawnchairs tillgänglighetstjänst. Tryck på \"Öppna inställningar\", välj \"Lawnchair\" och aktivera \"Använd Lawnchair\". + Öppna inställningar - Lawnchair bug report - %1$s crashed - Upload crash log + Buggrapport för Lawnchair + %1$s kraschade + Ladda upp kraschlogg Uppladdningen misslyckades Laddar upp … - Bug reports - Upload status - %d new reports - Multiple new reports + Buggrapporter + Uppladdningsstatus + %d nya rapporter + Flera nya rapporter - Home screen rotation - Allow home screen rotation when device is rotated - Add new apps to home screen - Show feed + Rotation av startskärmen + Tillåt rotation av startskärmen när enheten roteras + Aktivera oskärpa på bakgrundsbild + Oskärpans intensitet + Faktortröskel + Lägg till nya appar på startskärmen + Visa flöde Inga flödesappar installerade Flöde - Feed provider - Scroll wallpaper - Wallpaper depth effect - Zoom in and out of the wallpaper when transitioning between areas of the launcher - Top shadow - Home screen grid - Lock home screen - Unlock home screen - Home screen is locked - Förhindra ändringar av startskärmens utseende + Flödesleverantör + Rulla bakgrundsbild + Djupeffekt på bakgrundsbild + Zooma in och ut på bakgrundsbilden vid övergång mellan startskärmsappens lägen + Toppskugga + Rutnät på startskärmen + Lås startskärm + Lås upp startskärm + Startskärmen är låst + Förhindra ändringar av startskärmens layout Visa prickpaginering Använd prickar i stället för linjer för att visa sidnummer - Use new pop-up style - Use Material You\'s bouncy and slightly consolidated pop-up style - Pop-up menu - Show lock button - Show system settings entry - Show Edit button - Status bar - Show status bar - Dark status bar - Text color + Använd ny popup-stil + Använd Material Yous studsiga och något tätare popup-stil + Snabbmeny + Visa låsknapp + Visa systeminställningspost + Visa redigeringsknapp + Statusfält + Visa statusfält + Mörkt statusfält + Textfärg Ljust Mörkt - Rounded corners - Allow overlap - Enforce widget resizing + Rundade hörn + Tillåt överlappning + Tvinga storleksändring av widgetar Tillåt storleksändring av widgetar som är begränsade till en viss storlek - Remove size constraints + Ta bort storleksbegränsningar Ta bort begränsningarna av minimi- och maximistorlek på widgetar - Show dock - Search bar - Search bar widget + Visa favoritfält + Sökfält + Sökfältswidget Inaktiverad - Google Search bar + Google Sök-fält + Opacitet + Stroke Hörnradie - Apply accent color - Search provider - Dock icons - Bottom padding + Använd accentfärg + Sökleverantör + Favoritfältsikoner + Avstånd nederkant - App search - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + Appsökning + %1$s och Lawnchair har ett avtal om intäktsdelning.\n\nSökning med %1$s hjälper till att stödja Lawnchair. App Webbplats App krävs @@ -413,43 +429,43 @@ Google Lens Röstsökning - Hidden apps - Load apps in bulk - Load and display icons in bulk instead of individually - Remember position + Dolda appar + Ladda appar i klump + Ladda och visa ikoner i klump i stället för var för sig + Kom ihåg position Kom ihåg applådeposition efter att ha lämnat applådan - Show scrollbar - App drawer columns - Row height - Horizontal padding + Visa rullningslist + Kolumner i applådan + Radhöjd + Vågrätt avstånd - Hide from app drawer - Hidden apps (%1$d) + Dölj från applådan + Dolda appar (%1$d) %1$d app - %1$d apps + %1$d appar - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + Ikonbakgrundsopacitet + Ikonbakgrundsfärg + Maximalt antal mappkolumner + Maximalt antal mapprader - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration - Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + Dessa inställningar kommer att ignoreras eftersom Lawnchair inte är inställd som Senaste-leverantör + Inkompatibel systemintegration + Din enhet är konfigurerad för att ha systemgester (kända som Quickstep) tillhandahållna av %1$s, men denna version av %1$s är inte kompatibel med din Android-version. För att fortsätta att använda din enhet, vänligen avinstallera uppdateringar till %1$s eller inaktivera %1$s som systemgestsleverantör. + Genomlysande bakgrund + Bakgrundsopacitet + Snabbåtgärder Dela Lins - Clear all + Rensa alla Tvångsavsluta - Screen corner radius - Custom screen corner radius - When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. + Skärmhörnsradie + Anpassad skärmhörnsradie + När du sveper uppåt för att öppna Senaste, följer den aktuella appen med ditt finger och krymper till ett kort. Använd detta reglage för att justera kortets hörnradie när det nästan fyller hela skärmen så att den matchar hörnen på din skärm. Aktivitetsfält - Show taskbar (experimental) + Visa aktivitetsfält (experimentellt) Sök Sök efter appar - No apps found matching \"%1$s\" + Inga appar hittades som matchar \"%1$s\" Från webben - Contacts from device - Files from device - Settings from device - Search for more apps - Sök på Startpage - No app store or browser installed - Clear search history - Clear search box + Kontakter från enheten + Filer från enheten + Inställningar från enheten + Sök efter fler appar + Sök på %1$s + Ingen appbutik eller webbläsare installerad + Rensa sökhistorik + Rensa sökruta Sök - Show search bar - Automatically show keyboard - Fuzzy search - Approximate matching for app searches + Visa sökfält + Visa tangentbord automatiskt + Oskarp sökning + Ungefärlig matchning för appsökningar Förslag - Show suggested apps at the top of the drawer - Device search - Search your phone contacts, files, and settings - Show hidden apps in search results - If full name is typed - Search algorithm + Visa föreslagna appar högst upp i applådan + Enhetssökning + Sök bland din telefons kontakter, filer och inställningar + Visa dolda appar i sökresultat + Om hela namnet skrivs + Sökalgoritm Appsökning - Global search (on-device) - Global search (via ASI) + Global sökning (på enheten) + Global sökning (via ASI) - Show in search results + Visa i sökresultat Appar & genvägar - App shortcuts + Appgenvägar Personer - Pixel tips - Android settings + Pixel-tips + Android-inställningar Filer Webbförslag - Search history + Sökhistorik Kalkylator Medier, filer med mera Kontakter med mera - Via Startpage + Via %1$s - Maximum number of apps in search results - Maximum number of people in search results - Maximum number of files in search results - Maximum number of settings entries in search results - Maximum number of history entries in search results - Maximum number of suggestions in search results - Maximum web suggestion delay + Maximalt antal appar i sökresultat + Maximalt antal personer i sökresultat + Maximalt antal filer i sökresultat + Maximalt antal inställningsposter i sökresultat + Maximalt antal historikposter i sökresultat + Maximalt antal förslag i sökresultat + Maximal fördröjning av webbförslag - To search for contacts, grant contacts and phone permissions to Lawnchair - To search your files, grant storage permissions to Lawnchair - Grant permissions + För att söka efter kontakter, bevilja kontakter- och telefonbehörigheter till Lawnchair + För att söka bland dina filer, bevilja lagringsbehörigheter till Lawnchair + Bevilja behörigheter + Lawnchair (sammansatt) + Webbförslagsleverantör + Visa webbförslagsleverantörens ikon i sökfältet + Matcha stilen på favoritfältets sökfält diff --git a/lawnchair/res/values-sw-rKE/strings.xml b/lawnchair/res/values-sw-rKE/strings.xml index edce8b7ca78..2b51ebcff3d 100644 --- a/lawnchair/res/values-sw-rKE/strings.xml +++ b/lawnchair/res/values-sw-rKE/strings.xml @@ -221,9 +221,20 @@ Giza Mfumo Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Rangi Accent color + Stroke color Swatches RGB Nyekundu @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Imezimwa Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-ta-rIN/strings.xml b/lawnchair/res/values-ta-rIN/strings.xml index fd05987cecb..cb041b2dfc8 100644 --- a/lawnchair/res/values-ta-rIN/strings.xml +++ b/lawnchair/res/values-ta-rIN/strings.xml @@ -21,29 +21,29 @@ Actions and Verbs --> - Preview - Create - Backup - Restore - Delete + முன்காட்சி + உருவாக்கு + மறுபிரதி + மீட்டெடு + நீக்கு அகரமாக்கு - Unlock - Lock + திற + பூட்டு செயற்படுத்து தனிப்பயனாக்கு - Always - Never - Clipboard - Copy link + எப்பொழுதும் + ஒருபோதும் + நகலகம் + இணைப்பை நகலெடு நகலெடு ஒட்டவும் ஏற்றுகிறது… - Managed by Lawnchair + லான்ச்சர் மூலம் நிர்வகிக்கப்படுகிறது சுமார்ட் இடம் விருப்பங்கள் - Home settings - System settings - Change settings + முகப்பு அமைப்புகள் + இயங்குதள அமைப்புகள் + அமைப்புகளை மாற்று சுவர்த்தாள் - Background opacity + பின்னணி ஒளிபுகாநிலை - Copied to clipboard - Item removed + நகலகத்தில் நகலெடுக்கப்பட்டது + பொருள் நீக்கப்பட்டது - What to show + எதைக் காட்ட - To lock your phone when performing a gesture, Lawnchair requires accessibility access.\n\nLawnchair doesn\'t watch any user action, though the privilege to do so is required for all accessibility services. Lawnchair discards any event sent by the system.\n\nIn order to lock your phone, Lawnchair uses the performGlobalAction Accessibility service. + சைகையைச் செய்யும்போது உங்கள் தொலைபேசியைப் பூட்ட, Lawnchair க்கு அணுகல்தன்மை அணுகல் தேவைப்படுகிறது.\n\nலான்ச்சர் எந்தவொரு பயனர் செயலையும் பார்ப்பதில்லை, இருப்பினும் அனைத்து அணுகல் சேவைகளுக்கும் அவ்வாறு செய்வதற்கான சிறப்புரிமை தேவைப்படுகிறது. கணினியால் அனுப்பப்பட்ட எந்த நிகழ்வையும் லான்ச்சர் நிராகரிக்கிறது.\n\nஉங்கள் தொலைபேசியைப் பூட்டுவதற்கு, லான்ச்சர் performGlobalAction அணுகல் சேவையைப் பயன்படுத்துகிறது. %1$d x %2$d %s & %s அமைப்புகள் பொது - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + நிறங்கள், சின்னச்சிப்பம், அறிவிப்புப் புள்ளிகள் + முகப்புத் திரை + ஊட்டம், கட்டம், சின்னங்கள் கூண்டு பெயர்கள் - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + தேடல் பட்டி, சின்ன எண்ணிக்கை + செயலி இழுப்பறை + மறைபட்டச் செயலிகள், நெடுவரிசை எண்ணிக்கை, சின்னங்கள் + டிராயர் தேடல் + இணைய பரிந்துரைகள், உலகளாவிய தேடல் கோப்புறை பெயர்கள் - Row and column count + கோப்புறை விளக்கம் சைகைகள் - Taps and swipes + தட்டுவது மற்றும் தேய்ப்பது அண்மையவை - Clear All button, corner radius + அனைத்தயுந்துடை பொத்தான், மூலை ஆரம் விவர பெயர்கள் - App info + செயலியின் தகவல்கள் Lawnchairஐ மறுதுவக்கு - Experimental features + பரீட்சார்த்த அம்சங்கள் - Font customization + எழுத்துரு தனிப்பயனாக்கம் சில உரைகள் மாறாமல் இருக்கும் - At a Glance calendar customization + கிளான்ஸ் காலண்டரை தனிப்பயனாக்குதல் கிரிகோரியன் முறை அல்லாத காலண்டர் வகையில் தேதியைக் காண்பிக்க சம்மதி - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + அதிகபட்ச கட்ட அளவு வரம்பை அதிகரிக்க + முகப்பு திரையின் அனுமதிக்கப்பட்ட கிரிட் அளவான 10x10-இல் இருந்து 20x20-ஆக உயர்த்து + எப்போதும் சின்னங்களை மீண்டும் ஏற்று ஐகான் பேக்குகளிலிருந்து தற்காலிகச் சேமிப்பு ஐகான்களைப் பயன்படுத்துவதைத் தவிர்க்கவும் - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + பூட்டு/திறத்தல் + \"அனைத்தையும் அழி\" என்பதை அழுத்தும்போது தேர்ந்தெடுக்கப்பட்ட பயன்பாட்டை மூடுவதைத் தடுக்கவும் - To access shortcuts and additional features, set Lawnchair as your default launcher - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other + குறுக்குவழிகள் மற்றும் கூடுதல் அம்சங்களை அணுக, Lawnchair ஐ உங்கள் இயல்புநிலை துவக்கியாக அமைக்கவும் + அறிவிப்புப் புள்ளிகள் + அறிவிப்புகளின் எண்ணிக்கையைக் காண்பி + அறிவிப்பு புள்ளிகளின் வண்ணம் + அறிவிப்பு எண்ணிக்கையின் நிறம் + எச்சரிக்கை: அறிவிப்புப் புள்ளி மற்றும் எதிர் நிறங்கள் ஒன்றுக்கொன்று போதுமான மாறுபாட்டைக் கொண்டிருக்கவில்லை + எச்சரிக்கை: அறிவிப்புப் புள்ளி மற்றும் எதிர் நிறங்கள் ஒன்றுக்கொன்று போதுமான மாறுபாட்டைக் கொண்டிருக்கவில்லை அறிவிப்பணுகல் தேவை - To show Notification Dots, turn on app notifications for %1$s + அறிவிப்பு புள்ளிகளைக் காட்ட, செயலிக்கான அறிவிப்புகளை இயக்கவும் %1$s - Icon style - Icon shape - Icon size - Show labels - Label size - Use multiple lines + சின்னங்களின் பாங்கு + சின்னத்தின் வடிவம் + சின்னங்களின் அளவு + லேபல்களை காட்டு + பெயர்கள் அளவு + பல வரிகளைப் பயன்படுத்தவும் - Transparent themed icons + வெளிப்படையான கருப்பொருள் சின்னங்கள் கருப்பொருள் ஐகான்களில் வெளிப்படையான பின்னணியைப் பயன்படுத்தவும் - Auto-adaptive icons - For all non-adaptive icons - Background lightness - Use 100% background lightness for white - Reset custom icons + தகவமைப்பு சின்னங்கள் + எல்லா தகவமையா சின்னங்களுக்கும் + பின்புல இலேசுத்தன்மை + வெள்ளைக்கு 100% பின்புல இலேசுத்தன்மை பயன்படுத்து + தனிப்பயன் சின்னங்களை மீட்டமைக்கவும் அனைத்து தனிப்பயன் சின்னங்களும் மீட்டமைக்கப்படும். தொடர வேண்டுமா? சின்னங்கள் இயல்பிருப்பிற்கு அகரமாக்கு வெளிப்புற தெரிவியைத் திற - Pick icon from - Couldn\'t load more icons + சின்னத்தை இதிலிருந்துப் பொறுக்கு + சின்னங்களை ஏற்ற முடியவில்லை இயங்குதளம் வட்டம் @@ -161,54 +161,54 @@ ஐ ஓ எஸ் எண்கோணம் 1 யுஐ - Rounded square - Sharp square + வட்டமான சதுரம் + கூர்மையான சதுரம் சதுரம் சதுரவட்டம் கண்ணீர் துளி - Custom icon shape - Create custom icon shape - Edit custom icon shape - Corner shape + தனிப்பயன் ஐகான் வடிவம் + தனிப்பயன் ஐகான் வடிவத்தை உருவாக்கவும் + தனிப்பயன் ஐகான் வடிவத்தைத் திருத்து + மூலை வடிவம் சுற்று மென்மையான வெட்டு - Top left - Top right - Bottom left - Bottom right - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + மேல் இடது + மேல் வலது + கீழே இடது + கீழ் வலது + நகலகத்திற்கு அனுப்பு + நகளத்திலிருந்து கொண்டுவா + நகலகம் செல்லத் தக்க படவுரு வடிவத்தைக் கொண்டிருக்கவில்லை - Icon pack - Themed icon source - System icons - Themed icons + சின்ன பேக் + கருப்பொருள் ஐகான் மூல + இயங்குதளச் சின்னங்கள் + தோற்றக்கருமிகுச் சின்னங்கள் அணை - Home screen - Home screen & app drawer - No supported icon packs + முகப்புத் திரை + முகப்பு திரை & ஆப் ட்ராவெர் + ஆதரிக்கப்படும் ஐகான் பேக் இல்லை - Add fonts - OTF and TTF fonts are supported - Font not found - Font (experimental) + எழுத்துருக்களை சேர்க்கவும் + OTF & TTF எழுத்துருக்கள் ஏற்றுக்கொள்ளப்படுகிறது + எழுத்துரு எதுவுமில்லை + எழுத்துரு (பரீட்சார்த்த) பொது தலைப்புகள் - Headings (medium) + தலைப்புகள் (நடுத்தர) உடல் - Body (medium) + உடல் (நடுத்தர) வலச்சாய்வு மெல்லிய - Extra light + மிக இலேசான இலேசான வழக்கமான நடுத்தரமான அரைத்தடிப்பு தடிப்பு - Extra bold + மிகத் தடிப்பு கருப்பு + வண்ண பாணி + ஸ்பிரிட்ஸ் + டோனல் ஸ்பாட் + துடிப்பான + வெளிப்படுத்தும் + வானவில் + பழச் சாலட் + உள்ளடக்கம் + ஒரே வண்ணமுடைய நிறங்கள் - Accent color - Swatches + உரப்பு நிறம் + Stroke color + மாதிரிகள் ஆர்ஜிபி சிவப்பு பச்சை @@ -235,50 +246,50 @@ பிரகாசம் ஹெக்ஸ் ஸ்லைடர்கள் - Invalid color + தவறான வண்ணம் - Gregorian - Persian + கிரிகோரியன் + பெர்சிய %1$s, %2$s - Charging - Charged - Battery low - "%1$d%% — Full in %2$s" - At a Glance - What to show + மின் ஏறுகிறது + மின் ஏறியது + பேட்டரி குறைவு + "%1$d%% — இன்னும் %2$s முழுவதாகிடும்" + ஒரே பார்வையில் + எதைக் காட்ட - Calendar - Date & time - Date - Time - Time format - Follow system - 12-hour format - 24-hour format + காலெண்டர் + தேதி & நேரம் + தேதி + நேரம் + நேர அமைப்பு + இயங்குதளத்தைப் பின்பற்று + 12-மணி நேர வடிவம் + 24-மணி நேர வடிவம் வானிலை - Battery status - Now Playing + பேட்டரி நிலை + இப்போது இசைக்கிறது - Tap to set up - To use %1$s, enable Notification Dots. + அமைக்கத் தட்டவும் + %1$s ஐப் பயன்படுத்த, அறிவிப்புப் புள்ளிகளை இயக்கவும். - Show on home screen - At a Glance can be manually added to the home screen by placing the Lawnchair widget + முகப்புத் திரையில் காட்டு + Lawnchair விட்ஜெட்டை வைப்பதன் மூலம் முகப்புத் திரையில் At a Glance யைச் சேர்க்கலாம் - At a Glance provider - Google - Google Search + At a Glance வழங்குநர் + கூகிள் + கூகிள் தேடல் " — " - Page %1$d of %2$d - Fri, Mar 3 + பக்கம் %1$d / %2$d + வெள்ளி, மார்ச் 3 - Create backup - What to back up - Layout and settings + காப்புப்பிரதியை உருவாக்கவும் + எதைக் காப்புப் பிரதி எடுக்க வேண்டும் + தளவமைப்பு மற்றும் அமைப்புகள் சுவர்த்தாள் - Backup created - Failed to create backup - Restore backup - What to restore - Backup restored - Failed to restore backup - Invalid backup file + காப்புப்பிரதி உருவாக்கப்பட்டது + மறுபிரதியை உருவாக்குவதில் தோல்வி + காப்புப்பிரதியை மீட்டமை + எதை மீட்டெடுப்பது + காப்புப்பிரதி உருவாக்கப்பட்டது + மறுபிரதியை உருவாக்குவதில் தோல்வி + தவறான காப்பு கோப்பு - Double tap - Swipe up - Swipe down - Home button - Back button - Do nothing - Sleep - Open notification panel - Open app - Open %1$s - Open app drawer - Open app search - Open search - Pick app - Admin permissions required - To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" + இருமுறை தட்டவும் + மேலே ஸ்வைப் செய்யவும் + கீழே ஸ்வைப் செய்யவும் + முகப்பு பொத்தான் + பின் பொத்தான் + எதுவும் செய்யாதே + தூங்கு + அறிவிப்பு பேனலைத் திறக்கவும் + செயலியைத் திற + %1$s திற + ஆப் ட்ரையர் திற + செயலி தேடலைத் திற + தேடலைத் திற + செயலியைத் தேர்ந்தெடு + நிர்வாக அனுமதி தேவை + அணைக்க இரட்டைத்தட்டலைப் பயன்படுத்த Lawnchairஐச் சாதன நிர்வாகிச் செயலியாக அமை. அமைப்பைத் திற என்பதைத் தட்டி, “இந்தச் சாதன நிர்வாகி ஆப்ஸைச் செயல்படுத்து” என்பதைத் தட்டுக Double Tap to Sleep will be disabled. - Turn on accessibility service - To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" - Open settings + அணுகல்தன்மை சேவையை இயக்கு + அணைக்க இரட்டைத்தட்டலைப் பயன்படுத்த, Lawnchair அணுகல்தன்மை சேவையை இயக்கு. அமைப்பைத் திற என்பதைத் தட்டி Lawnchairஐத் தேர்ந்தெடுத்து Lawnchairஐப் பயன்படுத்து என்பதை இயக்கு + அமைப்புகளைத் திற - Lawnchair bug report - %1$s crashed - Upload crash log + Lawnchair பிழை அறிக்கை + %1$s சிதைந்தது + செயலிழப்பு பதிவைப் பதிவேற்றவும் பதிவேற்றம் தோல்வி பதிவேற்றுகிறது… - Bug reports - Upload status - %d new reports - Multiple new reports + பிழை அறிக்கைகள் + பதிவேற்ற நிலை + %d புதிய அறிக்கைகள் + பல புதிய அறிக்கைகள் - Home screen rotation - Allow home screen rotation when device is rotated - Add new apps to home screen - Show feed - No feed apps installed + முகப்புத் திரைச் சுழற்சி + சாதனம் சுழலும்போது முகப்புத் திரை சுழல அனுமதி + Enable wallpaper blur + Blur intensity + Factor threshold + முகப்புத் திரையில் புதிய செயலிகளைச் சேர் + பீட் காட்டு + பீட் செயலிகள் எதுவும் நிறுவப்படவில்லை செய்தியோடை - Feed provider - Scroll wallpaper - Wallpaper depth effect - Zoom in and out of the wallpaper when transitioning between areas of the launcher - Top shadow - Home screen grid - Lock home screen - Unlock home screen - Home screen is locked - Prevent changes to the home screen layout - Show dot pagination - Use dots instead of lines to show page number - Use new pop-up style - Use Material You\'s bouncy and slightly consolidated pop-up style - Pop-up menu - Show lock button - Show system settings entry - Show Edit button - Status bar - Show status bar - Dark status bar - Text color + பீட் வழங்குநர் + சுவர்த்தாளைத் திரையுருட்டு + வால்பேப்பர் ஆழம் விளைவு + துவக்கியின் பகுதிகளுக்கு இடையில் மாறும்போது வால்பேப்பரை பெரிதாக்கவும் மற்றும் சிறிதாக்கவும் + மேற்புற நிழல் + முகப்புத்திரை கட்டம் + முகப்பு திரையை மூடவும் + முகப்பு திரையைத் திறக்கவும் + முகப்புத் திரை பூட்டப்பட்டுள்ளது + முகப்புத் திரை தளவமைப்பில் மாற்றங்களைத் தடுக்கவும் + புள்ளி பக்கங்களைக் காட்டு + பக்க எண்ணைக் காட்ட கோடுகளுக்குப் பதிலாகப் புள்ளிகளைப் பயன்படுத்தவும் + புதிய பாப்அப் பாணியைப் பயன்படுத்து + மெட்டீரியல் யூ துள்ளல் மற்றும் சற்று ஒருங்கிணைக்கப்பட்ட பாப்-அப் பாணியைப் பயன்படுத்தவும் + பாப்அப் மெனு + பூட்டு பொத்தானைக் காட்டு + இயங்குதள அமைப்புகள் உள்ளீட்டைக் காட்டு + திருத்து பொத்தானைக் காட்டு + நிலைப்பட்டி + நிலைப்பலகையை காட்டு + இருண்ட நிலைப்பட்டி + எழுத்து நிறம் இலேசான இருண்ட - Rounded corners - Allow overlap - Enforce widget resizing - Allow resizing of widgets that are constrained to a specific size - Remove size constraints - Remove the minimum and maximum size restrictions of widgets + தளவமைப்பு மற்றும் அமைப்புகள் + பகுதியொத்திருக்க அனுமதிக்கவும் + விட்ஜெட்டை மறுஅளவிடலைச் செயல்படுத்தவும் + ஒரு குறிப்பிட்ட அளவிற்கு கட்டுப்படுத்தப்பட்ட விட்ஜெட்களின் அளவை மாற்ற அனுமதிக்கவும் + அளவுக் கட்டுப்பாடுகளை அகற்றவும் + விட்ஜெட்களின் குறைந்தபட்ச மற்றும் அதிகபட்ச அளவுக் கட்டுப்பாடுகளை அகற்றவும் - Show dock - Search bar - Search bar widget - Disabled - Google Search bar - Corner radius - Apply accent color - Search provider - Dock icons - Bottom padding + டாக்கை காட்டு + தேடல் பட்டை + தேடல் பட்டி விட்ஜெட் + முடக்கப்பட்டுள்ளது + கூகிள் தேடல் + Opacity + Stroke + மூலை ஆரம் + உரப்பு நிறத்தைச் செயற்படுத்து + தேடல் வழங்கி + டாக் சின்னங்கள் + அடி திணிப்பு - App search - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. - App - Website - App required + செயலி தேடல் + %1$s மற்றும் Lawnchair வருவாய் பகிர்வு ஒப்பந்தத்தைக் கொண்டுள்ளன.\n\n%1$s உடன் தேடுவது Lawnchair ஐ ஆதரிக்க உதவுகிறது. + செயலி + இணையதளம் + செயலி தேவை தேடு கூகுள் வில்லை குரல் தேடல் - Hidden apps - Load apps in bulk - Load and display icons in bulk instead of individually - Remember position - Remember app drawer position after leaving drawer - Show scrollbar - App drawer columns - Row height - Horizontal padding + மறைக்கப்பட்ட செயலிகள் + செயலிகளை மொத்தமாக ஏற்றவும் + ஐகான்களை தனித்தனியாக ஏற்றுவதற்கு பதிலாக மொத்தமாக ஏற்றிக் காண்பிக்கவும் + நிலையை நினைவில் கொள்ளுங்கள் + டிராயரை விட்டு வெளியேறியபிறகு செயலி டிராயர் நிலையை நினைவில் கொள்ளுங்கள் + சுருள்பட்டியைக் காட்டு + செயலி டிராயர் நெடுவரிசைகள் + வரிசை உயரம் + கிடைமட்ட திணிப்பு - Hide from app drawer - Hidden apps (%1$d) + செயலி இழுப்பறையிலிருந்து மறை + மறைக்கப்பட்ட செயலிகள்(%1$d) - %1$d app - %1$d apps + %1$d செயலி + %1$d செயலிகள் - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + சின்னம் பின்புல ஒளிபுகாமை + ஐகானின் பின்புற நிறம் + அதிகபட்ச கோப்புறை நெடுவரிசைகள் + அதிகபட்ச கோப்புறை நெடுவரிசைகள் - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration - Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + Lawnchair சமீபத்திய வழங்குநராக அமைக்கப்படாததால் இந்த அமைப்புகள் புறக்கணிக்கப்படும் + பொருந்தாத கணினி ஒருங்கிணைப்பு + %1$s -ஆல் வழங்கப்பட்ட முறைமை சைகைகளைக் (Quickstep என அறியப்படும்) கொண்டிருக்கும்படி உங்கள் சாதனம் உள்ளமைக்கப்பட்டுள்ளது, ஆனால் %1$s-இன் இந்தப் பதிப்பு உங்கள் Android பதிப்புடன் இணக்கமாக இல்லை. உங்கள் சாதனத்தைப் பயன்படுத்துவதைத் தொடர, முறைமை சைகை வழங்குநராக %1$s புதுப்பித்தல்களை நிறுவல்நீக்கவும் அல்லது %1$s -ஐ முடக்கவும். + ஒளிஊடுருவக்கூடிய பின்னணி + பின்னணி ஒளிபுகாநிலை + விரைவு செயல்கள் பகிர் வில்லை - Clear all - Force close - Screen corner radius - Custom screen corner radius - When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. - Taskbar - Show taskbar (experimental) + அனைத்தயும் துடை + விசை நெருக்கம் + திரை மூலை ஆரம் + தனிப்பயன் திரை மூலை ஆரம் + அண்மையவையைத் திறக்க மேலே தேய்த்தால், தற்போதைய செயலி உம் விரலைப் பின்தொடர்ந்து அட்டையாகச் சுருக்கும். அட்டையின் மூலை ஆரம் உம் திரை மூலையை அது கிட்டத்தட்ட முழுதிரையிலிருக்கும்போது பொருந்துமாறு அனுசரிக்க இச்சறுக்கியைப் பயன்படுத்து. + பணிப்பட்டி + பணிப்பட்டியைக் காட்டு (சோதனை) தேடு செயலிகளை தேட - No apps found matching \"%1$s\" - From the web - Contacts from device - Files from device - Settings from device - Search for more apps - Search on Startpage - No app store or browser installed - Clear search history - Clear search box + \"%1$s\" உடன் பொருந்தக்கூடிய பயன்பாடுகள் எதுவும் இல்லை + இணையத்திலிருந்து + சாதனத்திலிருந்து தொடர்புகள் + சாதனத்திலிருந்து கோப்புகள் + சாதனத்திலிருந்து அமைப்புகள் + மேலும் செயலிகளுக்காகத் தேடு + %1$s யில் தேடு + ஆப் ஸ்டோர் அல்லது உலாவி நிறுவப்படவில்லை + தேடல் வரலாற்றை அழி + தேடல் பெட்டியைத் அழி தேடல் - Show search bar - Automatically show keyboard - Fuzzy search - Approximate matching for app searches + தேடல் பட்டை காட்டு + தானாக விசைப்பலகையைக் காட்டு + தெளிவறு தேடல் + செயலி தேடல்களுக்குத் தோராய பொருத்தம் பரிந்துரைகள் - Show suggested apps at the top of the drawer - Device search - Search your phone contacts, files, and settings - Show hidden apps in search results - If full name is typed - Search algorithm + பரிந்துரைக்கப்பட்ட செயலிகளை டிராயரின் மேற்புறத்தில் காண்பி + சாதனத் தேடல் + உங்கள் தொலைபேசி தொடர்புகள், கோப்புகள் மற்றும் அமைப்புகளைத் தேடுங்கள் + தேடல் முடிவுகளில் மறைக்கப்பட்ட செயலிகளைக் காண்பி + முழுப்பெயர் தட்டச்சு செய்யப்பட்டால் + தேடல் அல்காரிதம் செயலி தேடல் - Global search (on-device) - Global search (via ASI) + உலகளாவிய தேடல் (சாதனத்தில்) + உலகளாவிய தேடல் (ASI வழியாக) - Show in search results - Apps & Shortcuts - App shortcuts + தேடல் முடிவுகளில் காட்டு + பயன்பாடுகள் & குறுக்குவழிகள் + செயலி குறுக்குவழிகள் மக்கள் - Pixel tips - Android settings - Files - Web suggestions - Search history - Calculator + பிக்சல் துணுக்குதவிகள் + Android அமைப்புகள் + கோப்புகள் + வலை ஆலோசனைகள் + தேடல் வரலாறு + கணிப்பான் - Media, files, and more - Contacts and more - Via Startpage + மீடியா, கோப்புகள் மற்றும் பல + தொடர்புகள் மற்றும் பல + %1$s வழியாக - Maximum number of apps in search results - Maximum number of people in search results - Maximum number of files in search results - Maximum number of settings entries in search results - Maximum number of history entries in search results - Maximum number of suggestions in search results - Maximum web suggestion delay + தேடல் முடிவுகளில் செயலிகளின் அதிகபட்ச எண்ணிக்கை + தேடல் முடிவுகளில் நபர்களின் அதிகபட்ச எண்ணிக்கை + தேடல் முடிவுகளில் கோப்புகளின் அதிகபட்ச எண்ணிக்கை + தேடல் முடிவுகளில் அமைப்புகள் உள்ளீடுகளின் அதிகபட்ச எண்ணிக்கை + தேடல் முடிவுகளில் வரலாறு உள்ளீடுகளின் அதிகபட்ச எண்ணிக்கை + தேடல் முடிவுகளில் பரிந்துரைகளின் அதிகபட்ச எண்ணிக்கை + அதிகபட்ச இணைய பரிந்துரை தாமதம் - To search for contacts, grant contacts and phone permissions to Lawnchair - To search your files, grant storage permissions to Lawnchair - Grant permissions + தொடர்புகளைத் தேட, தொடர்புகள் மற்றும் தொலைபேசி அனுமதிகளை Lawnchair க்கு வழங்கவும் + உங்கள் கோப்புகளைத் தேட, Lawnchair க்கு சேமிப்பக அனுமதிகளை வழங்கவும் + அனுமதிகளை வழங்கவும் + லான்ச்சேர் (கம்போஸ்) + வலை பரிந்துரைகள் வழங்குநர் + தேடல் பட்டியில் வலை பரிந்துரை வழங்குநர் ஐகானைக் காட்டு + டாக் பட்டி பாணியைப் பொருத்தவும் diff --git a/lawnchair/res/values-te-rIN/strings.xml b/lawnchair/res/values-te-rIN/strings.xml index 03b45184721..a34d4453c99 100644 --- a/lawnchair/res/values-te-rIN/strings.xml +++ b/lawnchair/res/values-te-rIN/strings.xml @@ -221,9 +221,20 @@ Dark System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colors Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-th-rTH/strings.xml b/lawnchair/res/values-th-rTH/strings.xml index 2cacf1b2df1..0d70c8a155e 100644 --- a/lawnchair/res/values-th-rTH/strings.xml +++ b/lawnchair/res/values-th-rTH/strings.xml @@ -221,9 +221,20 @@ มืด ระบบ Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic สี Accent color + Stroke color ตัวอย่าง RGB แดง @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed ยังไม่ได้ติดตั้งแอป Feed @@ -397,6 +411,8 @@ Search bar widget ปิด Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -463,7 +479,7 @@ Files from device Settings from device Search for more apps - ค้นหาบน Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -497,7 +513,7 @@ สื่อ, ไฟล์, และอื่นๆ รายชื่อและอื่น ๆ - ผ่าน Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -510,4 +526,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-tr-rTR/strings.xml b/lawnchair/res/values-tr-rTR/strings.xml index 048d0023113..807dd68443e 100644 --- a/lawnchair/res/values-tr-rTR/strings.xml +++ b/lawnchair/res/values-tr-rTR/strings.xml @@ -23,7 +23,7 @@ --> Ön izleme Oluştur - Backup + Yedek Eski haline getir Sil Sıfırla @@ -34,16 +34,16 @@ Daima Asla Pano - Copy link + Bağlantıyı kopyala Kopyala Yapıştır Yükleniyor… Lawnchair tarafından yönetilmektedir Tercihler - Home settings - System settings - Change settings + Ana ekran ayarları + Sistem ayarları + Ayarları değiştir Duvar Kağıdı - Background opacity + Arkaplan opaklığı - Copied to clipboard + Panoya kaydedildi Öğe kaldırıldı - What to show + Ne gösterilsin To lock your phone when performing a gesture, Lawnchair requires accessibility access.\n\nLawnchair doesn\'t watch any user action, though the privilege to do so is required for all accessibility services. Lawnchair discards any event sent by the system.\n\nIn order to lock your phone, Lawnchair uses the performGlobalAction Accessibility service. - %1$d x %2$d + %1$dx%2$d %s & %s Ayarlar Genel - Colors, icon packs, notification dots - Home screen - Feed, grid, icons + Renkler, simge paketleri, bildirim rozetleri + Ana ekran + Akış, ızgara, simgeler Alt Sıra - Search bar, icon count - App drawer - Hidden apps, column count, icons - Drawer search - Web suggestions, global search + Arama çubuğu, simge sayısı + Uglama çekmecesi + Gizlenmiş uygulamalar, sutün sayısı, simgeler + Uygulama çekmecesi arama çubuğu + Web önerileri, global arama Klasörler - Row and column count + Satır ve sütun sayısı Hareketler - Taps and swipes + Dokunmalar ve kaydırmalar En Son Uygulamalar - Clear All button, corner radius + Tümünü Temizle tuşu, köşe yarıçapı Hakkında - App info + Uygulama Hakkında Lawnchair\'i Yeniden Başlat - Experimental features + Deneyimsel özellikler - Font customization + Yazı tipi özelleştirmesi Bazı metinler değişmeden kalır - At a Glance calendar customization + Bir Bakışta takvim özelleştirme Gregoryen olmayan takvim sistemlerinde tarihin gösterilmesine izin ver - Increase maximum grid size limit - Increase maximum allowed home screen grid size from 10 x 10 to 20 x 20 - Always reload icons + Maksimum ızgara sayısını yükselt + İzin verilen maksimum na ekran ızgara boyutunu 10 x 10\'dan 20 x 20\'ye artırın + Simgeleri her zaman yeniden yükle Ön belleklenmiş simgeleri kullanmaktan kaçın - Lock/unlock - Prevent selected app from closing when pressing \"Clear all\" + Kilitle/kilidi aç + \"Tümünü Temizle\"ye basıldığında seçilen uygulamanın kapanmasını engelle - To access shortcuts and additional features, set Lawnchair as your default launcher - Notification dots - Show notification counter - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other + Kısayollar ve ek özellikler için Lawnchair\'ı varsayılan olarak başlatmayı yapın + Bildirim rozetleri + Bildirim sayımı göster + Bildirim rozeti vurgu rengi + Bildirim sayacı rengi + Uyarı: Bildirim noktası ve sayaç renkleri birbiriyle yeterli kontrasta sahip değil + Uyarı: Bildirim noktası ve sayaç renkleri her zaman birbiriyle yeterli kontrasta sahip olmayabilir Bildirim Erişimi Gerekli - To show Notification Dots, turn on app notifications for %1$s + Bildirim Noktalarını göstermek için %1$s için uygulama bildirimlerini açın - Icon style - Icon shape - Icon size - Show labels - Label size - Use multiple lines + Simge stili + Simge şekli + Simge boyutu + Etiketleri göster + Etiket boyutu + Birden fazla satır kullan - Transparent themed icons + Şeffaf temalı simgeler Temalı ikonlarda saydam arkaplan kullan - Auto-adaptive icons - For all non-adaptive icons - Background lightness - Use 100% background lightness for white - Reset custom icons + Otomatik uyarlanabilir simgeler + Uyarlanabilir olmayan tüm simgeler için + Arka plan açıklığı + Beyaz için %100 arka plan açıklığı kullan + Özel simgeleri sıfırla Tüm özel simgeler sıfırlanacak. Devam etmek istiyor musun? - Simgeler + Resimleyici Varsayılanlara sıfırla - Open external picker - Pick icon from - Couldn\'t load more icons + Harici seçiciyi aç + Şuradan simge seç + Daha fazla simge yüklenemedi Sistem Yuvarlak Silindir - Elmas + Elmalar Yumurta iOS Sekizgen - One UI - Rounded square - Sharp square + Tek kullanıcı arayüzü + Yuvarlak kare + Keskin kare Kare Yuvarlatılmış Kare Damla - Custom icon shape - Create custom icon shape - Edit custom icon shape - Corner shape + Özel simge şekli + Özel simge şekli oluştur + Özel simge şeklini düzenleyin + Köşe şekli Daire Yumuşak Keskin Köşe - Top left - Top right - Bottom left - Bottom right - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + Sol üst + Sağ üst + Sol alt + Sağ alt + Panoya aktar + Panodan içe aktar + Pano geçerli bir simge şekli içermiyor - Icon pack - Themed icon source - System icons - Themed icons + Simge paketi + Temalı simge kaynağı + Sistem simgeleri + Temalı simgeler Kapat - Home screen - Home screen & app drawer - Desteklenen bir simge paketi bulunamadı + Ana ekran + Ana ekran veamp; uygulama çekmecesi + Desteklenen bir simge paketi başarısız oldu - Add fonts - OTF and TTF fonts are supported - Font bulunamadı - Font (experimental) + Yazı tipleri ekle + OTF ve TTF yazı tipleri desteklenir + Yazı tipi hatası + Yazı tipi (deneysel) Genel Başlıklar - Headings (medium) + Başlıklar (orta) Gövde - Body (medium) + Gövde (orta) İtalik İnce - Extra light + Ekstra hafif Aydınlık Normal Orta Yarı Kalın Kalın - Extra bold + Ekstra kalın En Kalın + Renk stili + Spritz + Tonal Nokta + Canlı + Etkileyici + Gökkuşağı + Meyve Salatası + İçerik + Tek renkli Renkler - Accent color - Paletler + Vurgu rengi + Stroke color + Paletleyici RGB Kırmızı Yeşil Mavi HSB Renk Tonu - Saturation + Doygunluk Parlaklık Hex - Sliders - Invalid color + Kaydırıcılar + Geçersiz renk - Gregorian - Persian + Gregoryen + Farsça %1$s, %2$s Şarj ediliyor Şarj dolu - Battery low + Pil zayıf "%1$d%% — %2$s içinde tamamen dolacak" Bir Bakışta - What to show + Ne gösterilecek Takvim - Date & time + Tarih veamp; zaman Tarih Zaman - Time format - Follow system - 12-hour format - 24-hour format + Saat biçimi + Sistemi takip et + 12 saatlik biçim + 24 saatlik biçim Hava durumu - Battery status + Pil durumu Şimdi Oynatılıyor - Tap to set up + Kurulum için dokunun To use %1$s, enable Notification Dots. - Show on home screen - At a Glance can be manually added to the home screen by placing the Lawnchair widget + Ana ekranda göster + Bir Bakışta Çim Sandalyesi widget\'ı yerleştirilerek ana ekrana manuel olarak eklenebilir - At a Glance provider + Bir Bakışta sağlayıcı Google Google Arama @@ -287,9 +298,9 @@ Haberler Destek Ürün - Design & development + Tasarım ve amp; geliştirme Geliştirme - QuickSwitch maintenance + QuickSwitch bakımı DevOps Destek & Halkla İlişkiler Teşekkürler @@ -299,14 +310,14 @@ Backup and restore --> - Create backup - What to back up - Layout and settings + Yedek oluştur + Neler yedeklenmeli + Yerleşim ve ayarlar Duvar Kağıdı Yedek oluşturuldu Yedek oluşturulamadı - Restore backup - What to restore + Yedeklemeyi geri yükle + Neler geri yüklenecek Yedekleme geri yüklendi Yedek oluşturulamadı Geçersiz yedekleme dosyası @@ -315,96 +326,101 @@ Gesture settings --> - Double tap - Swipe up - Swipe down - Home button - Back button - Do nothing + İki kez hafifçe vurun + Yukarı kaydırın + Aşağı doğru kaydırın + Ana sayfa düğmesi + Geri düğmesi + Hiçbir şey yapma Uyku - Open notification panel - Open app + Bildirim panelini aç + Uygulamayı aç Aç %1$s - Open app drawer - Open app search - Open search - Pick app - Admin permissions required - To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" + Uygulama çekmecesini aç + Uygulama aramayı aç + Aramayı aç + Uygulama seç + Yönetici izinleri gerekli + Uyku için Çift Dokun özelliğini kullanmak için Lawnchair\'i cihaz yöneticisi uygulaması olarak ayarlayın. \"Ayarları aç\"a ve ardından \"Bu cihaz yöneticisi uygulamasını etkinleştir\"e dokunun. Ekranı Kapatmak İçin Çift Dokunun kapatılacaktır. - Turn on accessibility service - To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" - Open settings + Erişilebilirlik hizmetini açın + Uyku için Çift Dokun özelliğini kullanmak için Çim Sandalyesi erişilebilirlik hizmetini açın. \"Ayarları aç\"a dokunun, \"Çim Sandalyesi\"ni seçin ve \"Çim Sandalyesi Kullan\"ı açın. + Ayarları aç - Lawnchair bug report - %1$s crashed - Upload crash log + Çim sandalyesi hata raporu + %1$s çöktü + Kilitlenme günlüğünü yükle Yükleme Başarısız Yükleniyor… - Bug reports - Upload status - %d new reports - Multiple new reports + Hata raporları + Yükleme durumu + %d yeni rapor + Birden fazla yeni rapor - Home screen rotation - Allow home screen rotation when device is rotated - Add new apps to home screen - Show feed - Bir akış uygulaması yüklü değil + Ana ekranı döndürme + Cihaz döndürüldüğünde ana ekranın dönmesine izin ver + Enable wallpaper blur + Blur intensity + Factor threshold + Ana ekrana yeni uygulamalar ekleme + Yayını göster + Bir büyüme uygulaması yüklü değil Akış - Feed provider - Scroll wallpaper - Wallpaper depth effect - Zoom in and out of the wallpaper when transitioning between areas of the launcher - Top shadow - Home screen grid - Lock home screen - Unlock home screen - Home screen is locked - Ana Ekran düzeninde değişiklik yapılmasını önle + Yayın sağlayıcı + Duvar kağıdını kaydır + Duvar kağıdı derinlik efekti + Başlatıcının alanları arasında geçiş yaparken duvar kağıdını yakınlaştırın ve uzaklaştırın + Üst gölge + Ana ekran ızgarası + Ana ekranı kilitle + Ana ekranın kilidini aç + Ana ekran kilitli + Ana Ekran düzeninde değişiklik yapılmasının önle Nokta sayfalandırmasını göster - Sayfa numarasının gösterirken çizgi yerine nokta kullan - Use new pop-up style - Use Material You\'s bouncy and slightly consolidated pop-up style - Pop-up menu - Show lock button - Show system settings entry - Show Edit button - Status bar - Show status bar - Dark status bar - Text color + Sayfa numarasının gösterirken çizgi yerine nokta kullanımı + Yeni açılır pencere stilini kullan + Material You\'nun hareketli ve biraz birleştirilmiş pop-up stilini kullanın + Açılır menü + Kilit düğmesini göster + Sistem ayarları girişini göster + Düzenleme düğmesini göster + Durum çubuğu + Durum çubuğunu göster + Karanlık durum çubuğu + Metin rengi Aydınlık Karanlık - Rounded corners - Allow overlap - Enforce widget resizing - Belirli bir boyutla kısıtlanmış widget\'ların yeniden boyutlandırılmasına izin ver - Remove size constraints - Widget\'ların maksimum ve minimum boyut kısıtlamalarını kaldır + Yuvarlatılmış köşeler + Çakışmaya izin ver + Widget\'ın yeniden boyutlandırılmasını zorunlu kıl + Belirli bir boyutla daraltılmış widget\'ların yeniden boyutlandırılmasına izin ver + Boyut kısıtlamalarını kaldırın + Widget\'ların maksimum ve minimum boyut sınırlamalarını kaldırır - Show dock - Search bar - Search bar widget + Dock\'u göster + Arama çubuğu + Arama çubuğu widget\'ı Devre dışı - Google Search bar + Google Arama çubuğu + Opacity + Stroke Köşe yarıçapı - Apply accent color - Search provider - Dock icons - Bottom padding + Vurgu rengini uygula + Arama sağlayıcısı + Yuva simgeleri + Alt dolgu - App search - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + Uygulama arama + %1$s ve Lawnchair\'in bir gelir paylaşımı sözleşmesi var.\n\n%1$s ile arama yapmak Lawnchair\'i desteklemeye yardımcı olur. Uygulama Web sitesi Uygulama gerekli @@ -413,43 +429,43 @@ Google Lens Sesli Arama - Hidden apps - Load apps in bulk - Load and display icons in bulk instead of individually - Remember position - Uygulama çekmecesini kapadıktan sonra bile pozisyonunu hatırla - Show scrollbar - App drawer columns - Row height - Horizontal padding + Gizli uygulamalar + Uygulamaları toplu olarak yükle + Simgeleri tek tek yüklemek yerine toplu olarak yükleyin ve görüntüleyin + Konumu hatırla + Uygulama çekmecesini kapattıktan sonra bile öğrendiğini hatırla + Kaydırma çubuğunu göster + Uygulama çekmecesi sütunları + Satır yüksekliği + Yatay dolgu - Hide from app drawer - Hidden apps (%1$d) + Uygulama çekmecesinden gizle + Gizli uygulamalar (%1$d) %1$d app %1$d apps - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + Simge arka plan opaklığı + Simge arka plan rengi + Maksimum klasör sütunları + Maksimum klasör satırı - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration - Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + Lawnchair, Son Kullanılanlar sağlayıcısı olarak ayarlanmadığından bu ayarlar göz ardı edilecek + Uyumsuz sistem entegrasyonu + Cihazınız %1$s tarafından sağlanan sistem hareketlerine (Quickstep olarak bilinir) sahip olacak şekilde yapılandırılmıştır, ancak %1$s\'nin bu sürümü Android sürümünüzle uyumlu değildir. Cihazınızı kullanmaya devam etmek için lütfen %1$s güncellemelerini kaldırın veya sistem hareketi sağlayıcısı olarak %1$s\'ı devre dışı bırakın. + Yarı saydam arka plan + Arka plan opaklığı + Hızlı işlemler Paylaş Lens - Clear all + Tümünü temizle Zorla kapat - Screen corner radius - Custom screen corner radius - When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. - Görev çubuğu - Show taskbar (experimental) + Ekran köşe yarıçapı + Özel ekran köşe yarıçapı + Son Kullanılanlar\'ı açmak için yukarı kaydırdığınızda geçerli uygulama parmağınızı takip ederek bir karta küçülür. Kart neredeyse tam ekran olduğunda, ekranınızın köşeleriyle eşleşecek şekilde kartın köşe yarıçapını ayarlamak için bu kaydırıcıyı kullanın. + Görev çekmek + Görev çubuğunu göster (deneysel) Ara Uygulamaları Ara - No apps found matching \"%1$s\" + \"%1$s\" Web\'den - Contacts from device - Files from device - Settings from device - Search for more apps - Startpage \'da ara - No app store or browser installed - Clear search history - Clear search box + Cihazdaki kişiler + Cihazdaki dosyalar + Cihazdaki ayarlar + Daha fazla uygulama arayın + %1$s + Yüklü uygulama mağazası veya tarayıcı yok + Arama geçmişini temizle + Arama kutusunu temizle Ara - Show search bar + Arama çubuğunu göster Klavyeyi otomatik göster - Fuzzy search - Approximate matching for app searches + Bulanık arama + Uygulama aramaları için yaklaşık eşleşme Öneriler - Show suggested apps at the top of the drawer - Device search - Search your phone contacts, files, and settings - Show hidden apps in search results - If full name is typed - Search algorithm + Önerilen uygulamaları çekmecenin üst kısmında göster + Cihaz arama + Telefonunuzdaki kişiler, dosyalar ve ayarlarda arama yapın + Arama sonuçlarında gizli uygulamaları göster + Tam ad yazılırsa + Arama algoritması Uygulama Araması - Global search (on-device) - Global search (via ASI) + Genel arama (cihazda) + Genel arama (ASI aracılığıyla) - Show in search results + Arama sonuçlarında göster Uygulamalar ve Kısayollar - App shortcuts + Uygulama kısayolları İnsanlar - Pixel tips - Android settings + Piksel ipuçları + Android ayarları Dosya arama Web önerileri - Search history + Arama geçmişi Hesap makinesi Medya, dosyalar vb. Kişiler ve fazlası - Startpage ile + %1$s - Maximum number of apps in search results - Maximum number of people in search results - Maximum number of files in search results - Maximum number of settings entries in search results - Maximum number of history entries in search results - Maximum number of suggestions in search results - Maximum web suggestion delay + Arama sonuçlarındaki maksimum uygulama sayısı + Arama sonuçlarındaki maksimum kişi sayısı + Arama sonuçlarındaki maksimum dosya sayısı + Arama sonuçlarındaki maksimum ayar girişi sayısı + Arama sonuçlarındaki maksimum geçmiş girişi sayısı + Arama sonuçlarındaki maksimum öneri sayısı + Maksimum web önerisi gecikmesi - To search for contacts, grant contacts and phone permissions to Lawnchair - To search your files, grant storage permissions to Lawnchair - Grant permissions + Kişi aramak için Lawnchair\'e kişi ve telefon izinleri verin + Dosyalarınızı aramak için Çim Sandalyesine depolama izinleri verin + İzinleri ver + Çim Sandalyesi (oluşturma) + Web önerisi sağlayıcısı + Arama çubuğunda web önerisi sağlayıcı simgesini göster + Match dock search bar style diff --git a/lawnchair/res/values-uk-rUA/strings.xml b/lawnchair/res/values-uk-rUA/strings.xml index cfcdbe22642..41633d94dc0 100644 --- a/lawnchair/res/values-uk-rUA/strings.xml +++ b/lawnchair/res/values-uk-rUA/strings.xml @@ -221,9 +221,20 @@ Темна Системний Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Кольори Accent color + Stroke color Свярки RGB Червоний @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed Не встановлено додатків стрічки @@ -397,6 +411,8 @@ Search bar widget Вимкнено Google Search bar + Opacity + Stroke Заокрулення кутів Apply accent color Search provider @@ -466,7 +482,7 @@ Files from device Settings from device Search for more apps - Шукати в Головна сторінка + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -500,7 +516,7 @@ Медія, файли та інше Контакти та інше - Через Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -513,4 +529,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-ur-rIN/strings.xml b/lawnchair/res/values-ur-rIN/strings.xml index 98e6f743ce0..1e5d312d1d0 100644 --- a/lawnchair/res/values-ur-rIN/strings.xml +++ b/lawnchair/res/values-ur-rIN/strings.xml @@ -221,9 +221,20 @@ اندھیرا System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colors Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-ur-rPK/strings.xml b/lawnchair/res/values-ur-rPK/strings.xml index 290ee6dca51..a8b0ee1ad51 100644 --- a/lawnchair/res/values-ur-rPK/strings.xml +++ b/lawnchair/res/values-ur-rPK/strings.xml @@ -221,9 +221,20 @@ Dark System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colors Accent color + Stroke color Swatches RGB Red @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -397,6 +411,8 @@ Search bar widget Disabled Google Search bar + Opacity + Stroke Corner radius Apply accent color Search provider @@ -464,7 +480,7 @@ Files from device Settings from device Search for more apps - Search on Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -498,7 +514,7 @@ Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -511,4 +527,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-uz-rUZ/strings.xml b/lawnchair/res/values-uz-rUZ/strings.xml index ba5b146cc0f..bf4dcb82602 100644 --- a/lawnchair/res/values-uz-rUZ/strings.xml +++ b/lawnchair/res/values-uz-rUZ/strings.xml @@ -222,9 +222,20 @@ Lawnchair tizim tomonidan yuborilgan har qanday hodisani bekor qiladi.\n\nTelefo Qorong‘i System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Colors Accent color + Stroke color Swatches RGB Red @@ -358,6 +369,9 @@ Lawnchair tizim tomonidan yuborilgan har qanday hodisani bekor qiladi.\n\nTelefo Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed No feed apps installed @@ -398,6 +412,8 @@ Lawnchair tizim tomonidan yuborilgan har qanday hodisani bekor qiladi.\n\nTelefo Search bar widget Disabled Google Search bar + Opacity + Stroke Burchak radiusi Apply accent color Search provider @@ -465,7 +481,7 @@ Lawnchair tizim tomonidan yuborilgan har qanday hodisani bekor qiladi.\n\nTelefo Files from device Settings from device Search for more apps - Boʻyicha qidirish Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -499,7 +515,7 @@ Lawnchair tizim tomonidan yuborilgan har qanday hodisani bekor qiladi.\n\nTelefo Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -512,4 +528,8 @@ Lawnchair tizim tomonidan yuborilgan har qanday hodisani bekor qiladi.\n\nTelefo To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-vi-rVN/strings.xml b/lawnchair/res/values-vi-rVN/strings.xml index c54ab66d19c..1d7c348093a 100644 --- a/lawnchair/res/values-vi-rVN/strings.xml +++ b/lawnchair/res/values-vi-rVN/strings.xml @@ -23,7 +23,7 @@ --> Xem trước Tạo - Backup + Sao lưu Khôi phục Xoá Reset @@ -31,19 +31,19 @@ Khóa Áp dụng Tùy chỉnh - Always - Never + Luôn luôn + Không bao giờ Bộ nhớ tạm thời - Copy link + Sao chép liên kết Sao chép Dán Đang tải… Quản lí bởi Lawnchair Tùy chỉnh - Home settings - System settings - Change settings + Cài đặt trang chủ + Cài đặt hệ thống + Thay đổi cài đặt Hình nền - Background opacity + Độ mờ nền - Copied to clipboard - Item removed + Đã sao chép + Đã xoá mục - What to show + Những gì để hiển thị To lock your phone when performing a gesture, Lawnchair requires accessibility access.\n\nLawnchair doesn\'t watch any user action, though the privilege to do so is required for all accessibility services. Lawnchair discards any event sent by the system.\n\nIn order to lock your phone, Lawnchair uses the performGlobalAction Accessibility service. %1$d x %2$d @@ -221,9 +221,20 @@ Tối Hệ thống Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic Màu Accent color + Stroke color Mẫu màu RGB Đỏ @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed Chưa cài đặt bản tin @@ -397,6 +411,8 @@ Search bar widget Đã vô hiệu hoá Google Search bar + Opacity + Stroke Bán kính góc Apply accent color Search provider @@ -463,7 +479,7 @@ Files from device Settings from device Search for more apps - Tìm kiếm trên Startpage + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -497,7 +513,7 @@ Media, files, and more Danh bạ và mục khác - Via Startpage + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -510,4 +526,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values-zh-rCN/strings.xml b/lawnchair/res/values-zh-rCN/strings.xml index 92590c58393..1d2def97ec8 100644 --- a/lawnchair/res/values-zh-rCN/strings.xml +++ b/lawnchair/res/values-zh-rCN/strings.xml @@ -23,7 +23,7 @@ --> 预览 创建 - Backup + 备份 恢复 删除 重置 @@ -34,15 +34,15 @@ 总是 从不 剪贴板 - Copy link + 复制链接 复制 粘贴 正在加载… 由 Lawnchair 管理 - 设置 - Home settings - System settings + 首选项 + 主页设置 + 系统设置 更改设置 壁纸 - Background opacity + 背景不透明度 - Copied to clipboard - 已移除 + 已复制到剪贴板 + 项目已移除 选择要显示的项目 @@ -83,11 +83,11 @@ 通用 颜色、图标包与通知圆点 主屏幕 - 订阅、网格、图标 + 订阅源、网格、图标 Dock 栏 搜索栏、图标数量 应用抽屉 - 隐藏应用、列数、图标 + 隐藏的应用、列数、图标 抽屉搜索 网络建议、全局搜索 文件夹 @@ -104,111 +104,111 @@ 自定义字体 部分文字保持不变 自定义资讯一览日历 - 显示其他历法日期 - 提升最大网格大小限制 + 允许显示非公历系统的日期 + 增加最大网格大小限制 将主屏幕网格大小限制从 10 × 10 提升到 20 × 20 - Always reload icons - 不使用图标包中的已缓存图标 + 始终重载图标 + 避免使用图标包中的缓存图标 锁定/解锁 - Prevent selected app from closing when pressing \"Clear all\" + 按“全部清除”时防止所选应用关闭 - To access shortcuts and additional features, set Lawnchair as your default launcher - 通知角标 + 要访问快捷方式和其他功能,请将 Lawnchair 设置为默认启动器 + 通知圆点 显示通知数量 - Notification dot color - Notification counter color - Warning: Notification dot and counter colors don\'t have enough contrast with each other - Warning: Notification dot and counter colors might not always have enough contrast with each other + 通知圆点颜色 + 通知计数颜色 + 警告:通知圆点和计数颜色彼此之间对比度不够 + 警告:通知圆点和计数颜色可能并不总是具有足够的对比度 需要通知使用权来读取内容 - To show Notification Dots, turn on app notifications for %1$s + 要显示通知圆点,请为 %1$s 开启应用通知 - Icon style + 图标样式 图标形状 图标大小 - Show labels - Label size - Use multiple lines + 显示标签 + 标签大小 + 使用多行 - Transparent themed icons - 在带主题的图标上使用透明背景 - Auto-adaptive icons - For all non-adaptive icons - Background lightness - Use 100% background lightness for white - Reset custom icons - 所有自定义图标将被重置,无法恢复。真的要这样做吗? + 透明主题图标 + 在主题图标上使用透明背景 + 自适应图标 + 用于全部非自适应图标 + 背景亮度 + 使用 100% 背景亮度为白色 + 重置自定义图标 + 所有自定义图标将被重置。您想要继续吗? 图标 重置为默认 打开外部选择器 - Pick icon from - Couldn\'t load more icons + 选取图标自 + 无法加载更多图标 - 跟随系统 + 系统 圆形 - 柱面 + 圆柱形 菱形 - 鹅卵石 + 鹅卵石形 iOS 八边形 One UI - Rounded square - Sharp square + 圆角方形 + 尖角方形 正方形 大圆角 泪珠形 - Custom icon shape - Create custom icon shape - Edit custom icon shape - Corner shape + 自定义图标形状 + 创建自定义图标形状 + 编辑自定义图标形状 + 边角形状 圆形 方圆形 切角 - Top left - Top right - Bottom left - Bottom right - Export to clipboard - Import from clipboard - Clipboard doesn\'t contain a valid icon shape + 左上 + 右上 + 左下 + 右下 + 导出到剪贴板 + 从剪贴板导入 + 剪贴板不包含有效的图标形状 - Icon pack - Themed icon source - System icons - Themed icons - 关闭 + 图标包 + 主题图标来源 + 系统图标 + 主题图标 + 主屏幕 - Home screen & app drawer + 主屏幕与应用抽屉 没有支持的图标包 - Add fonts - OTF and TTF fonts are supported + 添加字体 + 支持 OTF 和 TTF 格式字体 未找到字体 字体(实验性功能) 通用 标题 - Headings (medium) + 标题(中) 正文 - Body (medium) + 正文(中) 斜体 细体 - Extra light + 超细 浅色 常规 略粗 中粗 粗体 - Extra bold + 超粗 黑体 + 颜色样式 + 喷洒 + 色调点 + 鲜活 + 张力 + 彩虹 + 水果沙拉 + 内容 + 单色 颜色 强调色 - 色调 + 描边颜色 + 色板 RGB 绿 @@ -235,7 +246,7 @@ 亮度 Hex 滑块 - Invalid color + 颜色无效 正在充电 - 已充满电 - Battery low - "%1$d%% — %2$s后充满" + 已充满 + 电量低 + "%1$d%% — %2$s 后充满" 资讯一览 - What to show + 显示什么 日历 - Date & time + 日期与时间 日期 时间 - Time format - Follow system - 12-hour format - 24-hour format + 时间格式 + 跟随系统 + 12小时制 + 24小时制 天气 - Battery status + 电池状态 正在播放 - Tap to set up - 要使用 %1$s, 请启用通知角标。 + 点击以设置 + 要使用 %1$s,请启用通知圆点。 - Show on home screen - At a Glance can be manually added to the home screen by placing the Lawnchair widget + 在主屏幕显示 + 资讯一览可以通过将 Lawnchair 小部件放置在主屏幕上来手动添加 - At a Glance provider + 资讯一览提供程序 Google Google 搜索 " — " - 第 %1$d 页,共 %2$d 页 + 第 %1$d / %2$d 页 周五, 3月3日 - Create backup - What to back up - Layout and settings + 创建备份 + 备份什么 + 布局和设置 壁纸 备份已创建 创建备份失败 - Restore backup - What to restore + 恢复备份 + 恢复什么 备份已恢复 恢复备份失败 无效的备份文件 @@ -315,96 +326,101 @@ Gesture settings --> - Double tap - Swipe up - Swipe down - Home button - Back button - Do nothing - 锁屏 - Open notification panel - Open app + 双击 + 上滑 + 下滑 + 主屏键 + 返回键 + 什么也不做 + 息屏 + 打开通知面板 + 打开应用 打开 %1$s - Open app drawer - Open app search - Open search - Pick app - Admin permissions required - To use Double-Tap to Sleep, set Lawnchair as a device admin app. Tap \"Open settings\", then tap \"Activate this device admin app.\" + 打开应用抽屉 + 打开应用搜索 + 打开搜索 + 选择应用 + 需要管理员权限 + 要使用双击息屏,请把 Lawnchair 设置为设备管理员应用,点击\"打开设置\",然后点击\"启用设备管理员应用\" 双击息屏功能将被关闭。 - Turn on accessibility service - To use Double-Tap to Sleep, turn on the Lawnchair accessibility service. Tap \"Open settings\", select \"Lawnchair\" and turn on \"Use Lawnchair.\" - Open settings + 打开无障碍服务 + 要使用双击息屏,请打开 Lawnchair 的无障碍服务,点击\"打开设置\",然后选择\"Lawnchair\",然后打开开关 + 打开设置 - Lawnchair bug report - %1$s crashed - Upload crash log + Lawnchair 错误报告 + %1$s 已崩溃 + 上传崩溃日志 上传失败 正在上传… - Bug reports - Upload status - %d new reports - Multiple new reports + 错误报告 + 上传进度 + %d 个新报告 + 多个新报告 - Home screen rotation - Allow home screen rotation when device is rotated - Add new apps to home screen - Show feed + 主屏幕旋转 + 允许在设备旋转时旋转主屏幕 + 启用壁纸模糊 + 模糊强度 + 因素阈值 + 添加新应用到主屏 + 显示订阅 未安装订阅源。 订阅内容 - Feed provider - Scroll wallpaper - Wallpaper depth effect - Zoom in and out of the wallpaper when transitioning between areas of the launcher - Top shadow - Home screen grid - Lock home screen - Unlock home screen - Home screen is locked + 订阅提供 + 壁纸滚动 + 壁纸缩放特效 + 在启动器区域之间过渡时缩放壁纸 + 顶部阴影 + 主屏幕网格 + 锁定主屏幕 + 解锁主屏幕 + 主屏幕已被锁定 固定主屏幕布局 显示页面指示器 使用点而不是线段作为页面指示器 - Use new pop-up style - Use Material You\'s bouncy and slightly consolidated pop-up style - Pop-up menu - Show lock button - Show system settings entry - Show Edit button - Status bar - Show status bar - Dark status bar - Text color + 使用新的弹出样式 + 使用 Material You 的弹性和略微缩小的弹出样式 + 弹出菜单 + 显示锁定按钮 + 显示系统设置条目 + 显示编辑按钮 + 状态栏 + 显示状态栏 + 深色状态栏 + 文本颜色 浅色 深色 - Rounded corners - Allow overlap - Enforce widget resizing + 圆角 + 允许重叠 + 强制调整小部件大小 允许调整固定尺寸的小组件大小 - Remove size constraints + 移除大小限制 删除小部件的最小和最大大小限制 - Show dock - Search bar - Search bar widget + 显示 Dock 栏 + 搜索栏 + 搜索栏小部件 已禁用 - Google Search bar + Google 搜索栏 + 不透明度 + 描边 圆角半径 - Apply accent color - Search provider - Dock icons - Bottom padding + 应用强调色 + 搜索提供程序 + Dock 栏图标 + 底部边距 - App search - %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. + 应用搜索 + %1$s 和 Lawnchair 有收益分成协议。\n\n使用 %1$s 进行搜索有助于支持 Lawnchair。 应用 网站 未安装应用 @@ -413,42 +429,42 @@ Google 智能镜头 语音搜索 - Hidden apps - Load apps in bulk - Load and display icons in bulk instead of individually - Remember position + 隐藏的应用 + 批量加载应用 + 批量加载和显示图标,而不是单独加载和显示图标 + 记住位置 离开抽屉后记住应用抽屉位置 - Show scrollbar - App drawer columns - Row height - Horizontal padding + 显示滚动条 + 应用程序抽屉列数 + 行高 + 水平边距 - Hide from app drawer - Hidden apps (%1$d) + 从应用抽屉中隐藏 + 隐藏的应用(%1$d) - %1$d apps + %1$d 个应用 - Icon background opacity - Icon background color - Maximum folder columns - Maximum folder rows + 图标背景不透明度 + 图标背景颜色 + 最大文件夹列数 + 最大文件夹行数 - These settings will be ignored as Lawnchair isn\'t set as the Recents provider - Incompatible system integration - Your device is configured to have system gestures (known as Quickstep) provided by %1$s, but this version of %1$s isn\'t compatible with your Android version. To continue using your device, please uninstall %1$s updates or disable %1$s as a system gesture provider. - Translucent background - Background opacity - Quick actions + 由于 Lawnchair 未设置为“最近应用”提供程序,因此这些设置将被忽略 + 不兼容的系统集成 + 您的设备已配置为使用 %1$s 提供的系统手势(称为 Quickstep),但此版本的 %1$s 与您的 Android 版本不兼容。要继续使用您的设备,请卸载 %1$s 更新或禁用 %1$s 作为系统手势提供程序。 + 半透明背景 + 背景不透明度 + 快捷操作 分享 - 相机 - Clear all - 结束 - Screen corner radius - Custom screen corner radius - When you swipe up to open Recents, the current app follows your finger, shrinking into a card. Use this slider to adjust the corner radius of the card when it\'s nearly full screen so it matches the corners of your screen. + 智能镜头 + 清除全部 + 强制关闭 + 屏幕圆角半径 + 自定义屏幕圆角半径 + 当您向上滑动打开“最近应用”时,当前应用会跟随您的手指缩小为卡片。当卡片几乎全屏时,使用此滑块调整卡片的圆角半径,使其与屏幕的圆角相匹配。 任务栏 - Show taskbar (experimental) + 显示任务栏(实验性) 搜索 搜索应用 - No apps found matching \"%1$s\" + 未找到与“%1$s”匹配的应用 来自网络 - Contacts from device - Files from device - Settings from device - Search for more apps - Startpage 上搜索 - No app store or browser installed - Clear search history - Clear search box + 设备上的联系人 + 设备上的文件 + 设备上的设置 + 搜索更多应用 + %1$s 上搜索 + 应用商店或浏览器没安装 + 清除搜索记录 + 清除搜索框 搜索 - Show search bar + 显示搜索栏 自动显示键盘 - Fuzzy search - Approximate matching for app searches + 模糊搜索 + 应用搜索近似匹配 建议 - Show suggested apps at the top of the drawer - Device search - Search your phone contacts, files, and settings - Show hidden apps in search results - If full name is typed - Search algorithm + 在抽屉顶部显示推荐的应用 + 设备搜索 + 搜索您的手机联系人、文件和设置 + 在搜索结果中显示隐藏的应用 + 如果输入全名 + 搜索算法 应用搜索 - Global search (on-device) - Global search (via ASI) + 全局搜索(设备上) + 全局搜索(通过 ASI) - Show in search results - 应用程序 & 快捷方式 - App shortcuts + 在搜索结果中显示 + 应用与快捷方式 + 应用快捷方式 联系人 - Pixel tips - Android settings + Pixel 提示 + Android 设置 文件 网络建议 - Search history + 搜索历史记录 计算器 媒体、文件和更多 联系人及更多 - 通过 Startpage + 通过 %1$s - Maximum number of apps in search results - Maximum number of people in search results - Maximum number of files in search results - Maximum number of settings entries in search results - Maximum number of history entries in search results - Maximum number of suggestions in search results - Maximum web suggestion delay + 搜索结果中的最大应用数 + 搜索结果中的最大人数 + 搜索结果中的最大文件数 + 搜索结果中的最大设置条目数 + 搜索结果中的最大历史记录条目数 + 搜索结果中的最大建议数 + 最大网络建议延迟 - To search for contacts, grant contacts and phone permissions to Lawnchair - To search your files, grant storage permissions to Lawnchair - Grant permissions + 要搜索联系人,请向 Lawnchair 授予联系人和电话权限 + 要搜索您的文件,请向 Lawnchair 授予存储权限 + 授予权限 + Lawnchair(组合) + 网络建议提供程序 + 在搜索栏中显示网络建议提供程序图标 + 匹配 Dock 搜索栏样式 diff --git a/lawnchair/res/values-zh-rTW/strings.xml b/lawnchair/res/values-zh-rTW/strings.xml index 1878625e1bf..8da4c361ec7 100644 --- a/lawnchair/res/values-zh-rTW/strings.xml +++ b/lawnchair/res/values-zh-rTW/strings.xml @@ -221,9 +221,20 @@ 深色 系統 Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic 色彩 Accent color + Stroke color 色票 RGB @@ -357,6 +368,9 @@ Home screen rotation Allow home screen rotation when device is rotated + Enable wallpaper blur + Blur intensity + Factor threshold Add new apps to home screen Show feed 尚未安裝資訊頁提供服務。 @@ -397,6 +411,8 @@ Search bar widget 停用 Google Search bar + Opacity + Stroke 圓角大小 Apply accent color Search provider @@ -463,7 +479,7 @@ Files from device Settings from device Search for more apps - 使用 Startpage 搜尋 + Search on %1$s No app store or browser installed Clear search history Clear search box @@ -497,7 +513,7 @@ 媒體、檔案、雜項 聯絡人與其他項目 - Startpage 提供 + Via %1$s Maximum number of apps in search results Maximum number of people in search results @@ -510,4 +526,8 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/res/values/config.xml b/lawnchair/res/values/config.xml index 0e8b5902e57..e9796dca78e 100644 --- a/lawnchair/res/values/config.xml +++ b/lawnchair/res/values/config.xml @@ -81,6 +81,9 @@ lawnchair + + startpage + true true false @@ -130,7 +133,7 @@ 1.0 1.0 1.0 - 0.0 + 0.4 5 3 10 diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml index 957cc8e9f2e..45adad68b41 100644 --- a/lawnchair/res/values/strings.xml +++ b/lawnchair/res/values/strings.xml @@ -280,6 +280,17 @@ System Match wallpaper + + Color style + Spritz + Tonal Spot + Vibrant + Expressive + Rainbow + Fruit Salad + Content + Monochromatic + Colors Accent color @@ -351,6 +362,11 @@ Battery status Now Playing + + Maximum number of targets + Open Smartspacer settings + Smartspacer settings + Tap to set up To use %1$s, enable Notification Dots. @@ -391,6 +407,7 @@ Acknowledgements Translate + Donate Media, files, and more Contacts and more - Via Startpage + Via %1$s Maximum number of apps in search results @@ -681,5 +706,9 @@ To search for contacts, grant contacts and phone permissions to Lawnchair To search your files, grant storage permissions to Lawnchair Grant permissions + Lawnchair (compose) + Web suggestion provider + Show web suggestion provider icon in search bar + Match dock search bar style diff --git a/lawnchair/src/app/lawnchair/LawnchairProcessInitializer.kt b/lawnchair/src/app/lawnchair/LawnchairProcessInitializer.kt index 14936e0606f..aefce0d5a86 100644 --- a/lawnchair/src/app/lawnchair/LawnchairProcessInitializer.kt +++ b/lawnchair/src/app/lawnchair/LawnchairProcessInitializer.kt @@ -4,7 +4,7 @@ import android.content.Context import androidx.annotation.Keep import androidx.arch.core.util.Function import app.lawnchair.bugreport.LawnchairBugReporter -import app.lawnchair.theme.color.ColorTokens +import app.lawnchair.theme.color.tokens.ColorTokens import com.android.launcher3.Utilities import com.android.launcher3.icons.ThemedIconDrawable import com.android.quickstep.QuickstepProcessInitializer diff --git a/lawnchair/src/app/lawnchair/allapps/AllAppsSearchInput.kt b/lawnchair/src/app/lawnchair/allapps/AllAppsSearchInput.kt index c7ae7ca3194..1d7079d7e77 100644 --- a/lawnchair/src/app/lawnchair/allapps/AllAppsSearchInput.kt +++ b/lawnchair/src/app/lawnchair/allapps/AllAppsSearchInput.kt @@ -22,12 +22,22 @@ import androidx.core.view.ViewCompat import androidx.core.view.isInvisible import androidx.core.view.isVisible import androidx.core.widget.addTextChangedListener +import androidx.lifecycle.lifecycleScope import app.lawnchair.launcher import app.lawnchair.preferences.PreferenceManager import app.lawnchair.preferences2.PreferenceManager2 +import app.lawnchair.preferences2.subscribeBlocking +import app.lawnchair.qsb.AssistantIconView +import app.lawnchair.qsb.LawnQsbLayout.Companion.getLensIntent +import app.lawnchair.qsb.LawnQsbLayout.Companion.getSearchProvider +import app.lawnchair.qsb.providers.Google +import app.lawnchair.qsb.providers.GoogleGo +import app.lawnchair.qsb.providers.PixelSearch +import app.lawnchair.qsb.setThemedIconResource import app.lawnchair.search.LawnchairRecentSuggestionProvider import app.lawnchair.search.algorithms.LawnchairSearchAlgorithm import app.lawnchair.theme.drawable.DrawableTokens +import app.lawnchair.util.viewAttachedScope import com.android.launcher3.Insettable import com.android.launcher3.LauncherState import com.android.launcher3.R @@ -42,6 +52,7 @@ import com.android.launcher3.util.Themes import com.patrykmichalik.opto.core.firstBlocking import java.util.Locale import kotlin.math.max +import kotlinx.coroutines.launch class AllAppsSearchInput(context: Context, attrs: AttributeSet?) : FrameLayout(context, attrs), @@ -56,6 +67,9 @@ class AllAppsSearchInput(context: Context, attrs: AttributeSet?) : private lateinit var actionButton: ImageButton private lateinit var searchIcon: ImageButton + private lateinit var micIcon: AssistantIconView + private lateinit var lensIcon: ImageButton + private val qsbMarginTopAdjusting = resources.getDimensionPixelSize(R.dimen.qsb_margin_top_adjusting) private val allAppsSearchVerticalOffset = resources.getDimensionPixelSize(R.dimen.all_apps_search_vertical_offset) @@ -89,6 +103,23 @@ class AllAppsSearchInput(context: Context, attrs: AttributeSet?) : hint = ViewCompat.requireViewById(this, R.id.hint) input = ViewCompat.requireViewById(this, R.id.input) + + searchIcon = ViewCompat.requireViewById(this, R.id.search_icon) + micIcon = ViewCompat.requireViewById(this, R.id.mic_btn) + lensIcon = ViewCompat.requireViewById(this, R.id.lens_btn) + + val shouldShowIcons = prefs2.matchHotseatQsbStyle.firstBlocking() + + val searchProvider = getSearchProvider(context, prefs2) + val isGoogle = searchProvider == Google || searchProvider == GoogleGo || searchProvider == PixelSearch + val supportsLens = searchProvider == Google || searchProvider == PixelSearch + + val lensIntent = getLensIntent(context) + val voiceIntent = AssistantIconView.getVoiceIntent(searchProvider, context) + + micIcon.isVisible = shouldShowIcons && voiceIntent != null + lensIcon.isVisible = shouldShowIcons && supportsLens && lensIntent != null + with(input) { if (prefs2.searchAlgorithm.firstBlocking() != LawnchairSearchAlgorithm.APP_SEARCH) { setHint(R.string.all_apps_device_search_hint) @@ -97,6 +128,8 @@ class AllAppsSearchInput(context: Context, attrs: AttributeSet?) : } addTextChangedListener { actionButton.isVisible = !it.isNullOrEmpty() + micIcon.isVisible = shouldShowIcons && voiceIntent != null && it.isNullOrEmpty() + lensIcon.isVisible = shouldShowIcons && supportsLens && lensIntent != null && it.isNullOrEmpty() } } @@ -108,10 +141,40 @@ class AllAppsSearchInput(context: Context, attrs: AttributeSet?) : } } - searchIcon = ViewCompat.requireViewById(this, R.id.search_icon) - with(searchIcon) { - isVisible = true - // todo implement search feature + prefs2.themedHotseatQsb.subscribeBlocking(scope = viewAttachedScope) { themed -> + with(searchIcon) { + isVisible = true + + val iconRes = if (themed) searchProvider.themedIcon else searchProvider.icon + if (shouldShowIcons) { + setThemedIconResource( + resId = iconRes, + themed = themed || iconRes == R.drawable.ic_qsb_search, + method = searchProvider.themingMethod, + ) + } + + setOnClickListener { + val launcher = context.launcher + launcher.lifecycleScope.launch { + searchProvider.launch(launcher) + } + } + } + with(micIcon) { + setIcon(isGoogle, themed) + setOnClickListener { + context.startActivity(voiceIntent) + } + } + with(lensIcon) { + if (lensIntent != null) { + setThemedIconResource(R.drawable.ic_lens_color, themed) + setOnClickListener { + runCatching { context.startActivity(lensIntent) } + } + } + } } if (prefs.searchResulRecentSuggestion.get()) { diff --git a/lawnchair/src/app/lawnchair/allapps/FallbackSearchInputView.kt b/lawnchair/src/app/lawnchair/allapps/FallbackSearchInputView.kt index 6b0d4138529..a507ea38cf7 100644 --- a/lawnchair/src/app/lawnchair/allapps/FallbackSearchInputView.kt +++ b/lawnchair/src/app/lawnchair/allapps/FallbackSearchInputView.kt @@ -5,7 +5,7 @@ import android.content.Context import android.util.AttributeSet import android.view.Gravity import androidx.core.graphics.ColorUtils -import app.lawnchair.theme.color.ColorTokens +import app.lawnchair.theme.color.tokens.ColorTokens import app.lawnchair.util.EditTextExtensions.setCursorColor import app.lawnchair.util.EditTextExtensions.setTextSelectHandleColor import com.android.launcher3.ExtendedEditText diff --git a/lawnchair/src/app/lawnchair/allapps/views/SearchItemBackground.kt b/lawnchair/src/app/lawnchair/allapps/views/SearchItemBackground.kt index 1520225e5c1..e3ff68a6453 100644 --- a/lawnchair/src/app/lawnchair/allapps/views/SearchItemBackground.kt +++ b/lawnchair/src/app/lawnchair/allapps/views/SearchItemBackground.kt @@ -6,7 +6,7 @@ import android.graphics.Paint import android.graphics.Path import android.graphics.RectF import android.view.View -import app.lawnchair.theme.color.ColorTokens +import app.lawnchair.theme.color.tokens.ColorTokens import com.android.launcher3.R class SearchItemBackground( diff --git a/lawnchair/src/app/lawnchair/allapps/views/SearchResultIcon.kt b/lawnchair/src/app/lawnchair/allapps/views/SearchResultIcon.kt index 060d80863e5..74f6ff93e33 100644 --- a/lawnchair/src/app/lawnchair/allapps/views/SearchResultIcon.kt +++ b/lawnchair/src/app/lawnchair/allapps/views/SearchResultIcon.kt @@ -12,8 +12,8 @@ import androidx.core.view.isInvisible import androidx.core.view.isVisible import app.lawnchair.launcher import app.lawnchair.search.adapter.SHORTCUT -import app.lawnchair.search.adapter.SearchResultActionCallBack import app.lawnchair.search.adapter.SearchTargetCompat +import app.lawnchair.search.model.SearchResultActionCallBack import app.lawnchair.util.runOnMainThread import com.android.launcher3.BubbleTextView import com.android.launcher3.LauncherAppState diff --git a/lawnchair/src/app/lawnchair/allapps/views/SearchResultIconRow.kt b/lawnchair/src/app/lawnchair/allapps/views/SearchResultIconRow.kt index e1da7410537..f10a801f8cb 100644 --- a/lawnchair/src/app/lawnchair/allapps/views/SearchResultIconRow.kt +++ b/lawnchair/src/app/lawnchair/allapps/views/SearchResultIconRow.kt @@ -11,9 +11,9 @@ import app.lawnchair.allapps.views.SearchResultView.Companion.FLAG_HIDE_SUBTITLE import app.lawnchair.font.FontManager import app.lawnchair.search.adapter.HISTORY import app.lawnchair.search.adapter.SETTINGS -import app.lawnchair.search.adapter.SearchResultActionCallBack import app.lawnchair.search.adapter.SearchTargetCompat import app.lawnchair.search.adapter.WEB_SUGGESTION +import app.lawnchair.search.model.SearchResultActionCallBack import com.android.app.search.LayoutType import com.android.launcher3.R import com.android.launcher3.touch.ItemClickHandler diff --git a/lawnchair/src/app/lawnchair/allapps/views/SearchResultRightLeftIcon.kt b/lawnchair/src/app/lawnchair/allapps/views/SearchResultRightLeftIcon.kt index 0a8425fa4f8..ab30fd1ad29 100644 --- a/lawnchair/src/app/lawnchair/allapps/views/SearchResultRightLeftIcon.kt +++ b/lawnchair/src/app/lawnchair/allapps/views/SearchResultRightLeftIcon.kt @@ -10,8 +10,8 @@ import android.widget.TextView import androidx.core.view.ViewCompat import app.lawnchair.font.FontManager import app.lawnchair.launcher -import app.lawnchair.search.adapter.SearchResultActionCallBack import app.lawnchair.search.adapter.SearchTargetCompat +import app.lawnchair.search.model.SearchResultActionCallBack import app.lawnchair.util.AppInfo import app.lawnchair.util.AppInfoHelper import app.lawnchair.util.ImageViewWrapper diff --git a/lawnchair/src/app/lawnchair/allapps/views/SearchResultText.kt b/lawnchair/src/app/lawnchair/allapps/views/SearchResultText.kt index fe4e1148b3d..d0e85716098 100644 --- a/lawnchair/src/app/lawnchair/allapps/views/SearchResultText.kt +++ b/lawnchair/src/app/lawnchair/allapps/views/SearchResultText.kt @@ -13,9 +13,9 @@ import app.lawnchair.search.LawnchairRecentSuggestionProvider import app.lawnchair.search.adapter.HEADER_JUSTIFY import app.lawnchair.search.adapter.SPACE import app.lawnchair.search.adapter.SPACE_MINI -import app.lawnchair.search.adapter.SearchResultActionCallBack import app.lawnchair.search.adapter.SearchTargetCompat -import app.lawnchair.theme.color.ColorTokens +import app.lawnchair.search.model.SearchResultActionCallBack +import app.lawnchair.theme.color.tokens.ColorTokens import com.android.launcher3.R class SearchResultText(context: Context, attrs: AttributeSet?) : diff --git a/lawnchair/src/app/lawnchair/allapps/views/SearchResultView.kt b/lawnchair/src/app/lawnchair/allapps/views/SearchResultView.kt index 15ff17adeb5..7334ee58a2f 100644 --- a/lawnchair/src/app/lawnchair/allapps/views/SearchResultView.kt +++ b/lawnchair/src/app/lawnchair/allapps/views/SearchResultView.kt @@ -8,9 +8,9 @@ import app.lawnchair.search.adapter.CONTACT import app.lawnchair.search.adapter.FILES import app.lawnchair.search.adapter.MARKET_STORE import app.lawnchair.search.adapter.START_PAGE -import app.lawnchair.search.adapter.SearchResultActionCallBack import app.lawnchair.search.adapter.SearchTargetCompat import app.lawnchair.search.adapter.WEB_SUGGESTION +import app.lawnchair.search.model.SearchResultActionCallBack import com.android.app.search.LayoutType sealed interface SearchResultView { diff --git a/lawnchair/src/app/lawnchair/backup/ui/CreateBackupScreen.kt b/lawnchair/src/app/lawnchair/backup/ui/CreateBackupScreen.kt index add91a3177e..5682d0bfb28 100644 --- a/lawnchair/src/app/lawnchair/backup/ui/CreateBackupScreen.kt +++ b/lawnchair/src/app/lawnchair/backup/ui/CreateBackupScreen.kt @@ -118,7 +118,7 @@ fun CreateBackupScreen( PreferenceLayout( label = stringResource(id = R.string.create_backup), modifier = modifier, - backArrowVisible = LocalIsExpandedScreen.current, + backArrowVisible = !LocalIsExpandedScreen.current, scrollState = if (isPortrait) null else scrollState, ) { DisposableEffect(contents, hasLiveWallpaper, hasStoragePermission) { diff --git a/lawnchair/src/app/lawnchair/backup/ui/RestoreBackupScreen.kt b/lawnchair/src/app/lawnchair/backup/ui/RestoreBackupScreen.kt index 0c40fe35380..602118fbac2 100644 --- a/lawnchair/src/app/lawnchair/backup/ui/RestoreBackupScreen.kt +++ b/lawnchair/src/app/lawnchair/backup/ui/RestoreBackupScreen.kt @@ -91,7 +91,7 @@ fun RestoreBackupScreen( PreferenceLayout( label = stringResource(id = R.string.restore_backup), modifier = modifier, - backArrowVisible = LocalIsExpandedScreen.current, + backArrowVisible = !LocalIsExpandedScreen.current, scrollState = if (isPortrait) null else scrollState, ) { when (uiState) { diff --git a/lawnchair/src/app/lawnchair/overview/LawnchairOverviewActionsView.kt b/lawnchair/src/app/lawnchair/overview/LawnchairOverviewActionsView.kt index bb9281fdefe..1b9757ec47c 100644 --- a/lawnchair/src/app/lawnchair/overview/LawnchairOverviewActionsView.kt +++ b/lawnchair/src/app/lawnchair/overview/LawnchairOverviewActionsView.kt @@ -80,30 +80,36 @@ class LawnchairOverviewActionsView @JvmOverloads constructor( prefs.recentsActionScreenshot.subscribeChanges(this, ::updateVisibilities) prefs.recentsActionShare.subscribeChanges(this, ::updateVisibilities) prefs.recentsActionLocked.subscribeChanges(this, ::updateVisibilities) + prefs.recentActionOrder.subscribeChanges(this, ::updateVisibilities) updateVisibilities() } private fun updateVisibilities() { - val buttons = mutableListOf() + val order = prefs.recentActionOrder.get().split(",").map { it.toInt() } + + val buttonMap = mutableMapOf() if (prefs.recentsActionScreenshot.get() && !isOnePlusStock) { - buttons.add(screenshotAction) + buttonMap[0] = screenshotAction } if (prefs.recentsActionShare.get()) { - buttons.add(shareAction) + buttonMap[1] = shareAction } if (prefs.recentsActionLens.get() && isLensAvailable()) { - buttons.add(lensAction) + buttonMap[2] = lensAction } if (prefs.recentsActionLocked.get()) { - buttons.add(lockedAction) + buttonMap[3] = lockedAction } if (prefs.recentsActionClearAll.get()) { - buttons.add(clearAllAction) + buttonMap[4] = clearAllAction } + + val buttonsInOrder = order.mapNotNull { buttonMap[it] } + container.removeAllViews() container.addView(createSpace()) - buttons.forEach { view -> + buttonsInOrder.forEach { view -> view.isVisible = true container.addView(view) container.addView(createSpace()) diff --git a/lawnchair/src/app/lawnchair/preferences/PreferenceManager.kt b/lawnchair/src/app/lawnchair/preferences/PreferenceManager.kt index 24331b7e065..023f00f36ef 100644 --- a/lawnchair/src/app/lawnchair/preferences/PreferenceManager.kt +++ b/lawnchair/src/app/lawnchair/preferences/PreferenceManager.kt @@ -66,6 +66,8 @@ class PreferenceManager private constructor(private val context: Context) : Base override fun unflattenValue(value: String) = value } + val recentActionOrder = StringPref("pref_recentActionOrder", "0,1,2,3,4", recreate) + private val fontCache = FontCache.INSTANCE.get(context) val fontWorkspace = FontPref("pref_workspaceFont", fontCache.uiText, recreate) val fontHeading = FontPref("pref_fontHeading", fontCache.uiRegular, recreate) @@ -92,6 +94,11 @@ class PreferenceManager private constructor(private val context: Context) : Base val themedIcons = BoolPref("themed_icons", true, recreate) val drawerThemedIcons = BoolPref("drawer_themed_icons", false, recreate) val hotseatQsbCornerRadius = FloatPref("pref_hotseatQsbCornerRadius", 1F, recreate) + val hotseatQsbAlpha = IntPref("pref_searchHotseatTranparency", 100, recreate) + val hotseatQsbStrokeWidth = FloatPref("pref_searchStrokeWidth", 0F, recreate) + val enableWallpaperBlur = BoolPref("pref_enableWallpaperBlur", false, recreate) + val wallpaperBlur = IntPref("pref_wallpaperBlur", 25, recreate) + val wallpaperBlurFactorThreshold = IntPref("pref_wallpaperBlurFactor", 25, recreate) val recentsActionScreenshot = BoolPref("pref_recentsActionScreenshot", !isOnePlusStock) val recentsActionShare = BoolPref("pref_recentsActionShare", isOnePlusStock) diff --git a/lawnchair/src/app/lawnchair/preferences2/PreferenceManager2.kt b/lawnchair/src/app/lawnchair/preferences2/PreferenceManager2.kt index 6e41a558fa7..52e41868d4b 100644 --- a/lawnchair/src/app/lawnchair/preferences2/PreferenceManager2.kt +++ b/lawnchair/src/app/lawnchair/preferences2/PreferenceManager2.kt @@ -35,11 +35,13 @@ import app.lawnchair.icons.shape.IconShapeManager import app.lawnchair.preferences.PreferenceManager as LawnchairPreferenceManager import app.lawnchair.qsb.providers.QsbSearchProvider import app.lawnchair.search.algorithms.LawnchairSearchAlgorithm +import app.lawnchair.search.algorithms.data.WebSearchProvider import app.lawnchair.smartspace.model.SmartspaceCalendar import app.lawnchair.smartspace.model.SmartspaceMode import app.lawnchair.smartspace.model.SmartspaceTimeFormat import app.lawnchair.theme.color.ColorMode import app.lawnchair.theme.color.ColorOption +import app.lawnchair.theme.color.ColorStyle import app.lawnchair.ui.preferences.components.HiddenAppsInSearch import app.lawnchair.util.kotlinxJson import com.android.launcher3.InvariantDeviceProfile @@ -110,6 +112,22 @@ class PreferenceManager2 private constructor(private val context: Context) : Pre defaultValue = context.resources.getBoolean(R.bool.config_default_always_reload_icons), ) + val colorStyle = preference( + key = stringPreferencesKey("color_style"), + defaultValue = ColorStyle.fromString("tonal_spot"), + parse = ColorStyle::fromString, + save = ColorStyle::toString, + onSet = { reloadHelper.restart() }, + ) + + val strokeColorStyle = preference( + key = stringPreferencesKey(name = "stroke_color"), + parse = ColorOption::fromString, + save = ColorOption::toString, + onSet = { reloadHelper.restart() }, + defaultValue = ColorOption.fromString(context.getString(R.string.config_default_accent_color)), + ) + val notificationDotColor = preference( key = stringPreferencesKey(name = "notification_dot_color"), parse = ColorOption::fromString, @@ -272,7 +290,7 @@ class PreferenceManager2 private constructor(private val context: Context) : Pre val searchAlgorithm = preference( key = stringPreferencesKey(name = "search_algorithm"), - defaultValue = LawnchairSearchAlgorithm.APP_SEARCH, + defaultValue = LawnchairSearchAlgorithm.LOCAL_SEARCH, onSet = { reloadHelper.recreate() }, ) @@ -388,12 +406,25 @@ class PreferenceManager2 private constructor(private val context: Context) : Pre defaultValue = context.resources.getBoolean(R.bool.config_default_enable_fuzzy_search), ) + val matchHotseatQsbStyle = preference( + key = booleanPreferencesKey(name = "use_drawer_search_icon"), + defaultValue = false, + ) + + val webSuggestionProvider = preference( + key = stringPreferencesKey(name = "web_suggestion_provider"), + defaultValue = WebSearchProvider.fromString(context.resources.getString(R.string.config_default_web_suggestion_provider)), + parse = { WebSearchProvider.fromString(it) }, + save = { it.toString() }, + onSet = { reloadHelper.recreate() }, + ) + val maxAppSearchResultCount = preference( key = intPreferencesKey(name = "max_search_result_count"), defaultValue = resourceProvider.getInt(R.dimen.config_default_search_max_result_count), ) - val maxSuggestionResultCount = preference( + val maxWebSuggestionResultCount = preference( key = intPreferencesKey(name = "max_suggestion_result_count"), defaultValue = resourceProvider.getInt(R.dimen.config_default_suggestion_max_result_count), ) @@ -546,6 +577,12 @@ class PreferenceManager2 private constructor(private val context: Context) : Pre defaultValue = context.getString(R.string.smartspace_icu_date_pattern_custom_wday_month_day_no_year), ) + val smartspacerMaxCount = preference( + key = intPreferencesKey(name = "smartspace_max_count"), + defaultValue = 5, + onSet = { reloadHelper.recreate() }, + ) + val wallpaperDepthEffect = preference( key = booleanPreferencesKey(name = "enable_wallpaper_depth_effect"), defaultValue = true, diff --git a/lawnchair/src/app/lawnchair/qsb/AssistantIconView.kt b/lawnchair/src/app/lawnchair/qsb/AssistantIconView.kt index 26be58495cc..aa2853fe2d1 100644 --- a/lawnchair/src/app/lawnchair/qsb/AssistantIconView.kt +++ b/lawnchair/src/app/lawnchair/qsb/AssistantIconView.kt @@ -2,10 +2,12 @@ package app.lawnchair.qsb import android.annotation.SuppressLint import android.content.Context +import android.content.Intent import android.util.AttributeSet import android.widget.ImageButton import androidx.core.view.isVisible import app.lawnchair.preferences2.PreferenceManager2 +import app.lawnchair.qsb.providers.QsbSearchProvider import com.android.launcher3.R @SuppressLint("AppCompatCustomView") @@ -13,9 +15,9 @@ class AssistantIconView(context: Context, attrs: AttributeSet?) : ImageButton(co init { val provider = LawnQsbLayout.getSearchProvider(context, PreferenceManager2.getInstance(context)) - val intent = if (provider.supportVoiceIntent) provider.createVoiceIntent() else null - if (intent == null || !LawnQsbLayout.resolveIntent(context, intent)) isVisible = false + val intent = getVoiceIntent(provider, context) + isVisible = intent != null setOnClickListener { context.startActivity(intent) @@ -34,4 +36,20 @@ class AssistantIconView(context: Context, attrs: AttributeSet?) : ImageButton(co method = themingMethod, ) } + + companion object { + + fun getVoiceIntent( + provider: QsbSearchProvider, + context: Context, + ): Intent? { + val intent = if (provider.supportVoiceIntent) provider.createVoiceIntent() else null + + return if (intent == null || !LawnQsbLayout.resolveIntent(context, intent)) { + null + } else { + intent + } + } + } } diff --git a/lawnchair/src/app/lawnchair/qsb/LawnQsbLayout.kt b/lawnchair/src/app/lawnchair/qsb/LawnQsbLayout.kt index 1afd9741959..359f8662e79 100644 --- a/lawnchair/src/app/lawnchair/qsb/LawnQsbLayout.kt +++ b/lawnchair/src/app/lawnchair/qsb/LawnQsbLayout.kt @@ -6,6 +6,8 @@ import android.content.ComponentName import android.content.Context import android.content.Intent import android.graphics.Color +import android.graphics.Paint +import android.graphics.drawable.LayerDrawable import android.graphics.drawable.PaintDrawable import android.util.AttributeSet import android.widget.FrameLayout @@ -16,6 +18,7 @@ import androidx.core.view.descendants import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope import app.lawnchair.HeadlessWidgetsManager +import app.lawnchair.animateToAllApps import app.lawnchair.launcher import app.lawnchair.launcherNullable import app.lawnchair.preferences.PreferenceManager @@ -26,6 +29,7 @@ import app.lawnchair.qsb.providers.Google import app.lawnchair.qsb.providers.GoogleGo import app.lawnchair.qsb.providers.PixelSearch import app.lawnchair.qsb.providers.QsbSearchProvider +import app.lawnchair.theme.color.ColorOption import app.lawnchair.util.pendingIntent import app.lawnchair.util.repeatOnAttached import app.lawnchair.util.viewAttachedScope @@ -36,6 +40,9 @@ import com.android.launcher3.qsb.QsbContainerView import com.android.launcher3.util.Themes import com.android.launcher3.views.ActivityContext import com.patrykmichalik.opto.core.firstBlocking +import com.patrykmichalik.opto.core.onEach +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flatMapLatest @@ -52,6 +59,9 @@ class LawnQsbLayout(context: Context, attrs: AttributeSet?) : FrameLayout(contex private lateinit var preferenceManager: PreferenceManager private lateinit var preferenceManager2: PreferenceManager2 private var searchPendingIntent: PendingIntent? = null + private val coroutineScope = CoroutineScope(Dispatchers.Default) + + private var strokeColor: ColorOption? = null @OptIn(ExperimentalCoroutinesApi::class) override fun onFinishInflate() { @@ -64,6 +74,11 @@ class LawnQsbLayout(context: Context, attrs: AttributeSet?) : FrameLayout(contex preferenceManager = PreferenceManager.getInstance(context) preferenceManager2 = PreferenceManager2.getInstance(context) + preferenceManager2.strokeColorStyle.onEach(launchIn = coroutineScope) { + strokeColor = it + setUpBackground() + } + setUpBackground() clipIconRipples() @@ -94,7 +109,12 @@ class LawnQsbLayout(context: Context, attrs: AttributeSet?) : FrameLayout(contex setOnClickListener { val launcher = context.launcher launcher.lifecycleScope.launch { - searchProvider.launch(launcher) + if (preferenceManager2.matchHotseatQsbStyle.firstBlocking()) { + launcher.appsView.searchUiManager.editText?.showKeyboard(true) + launcher.animateToAllApps() + } else { + searchProvider.launch(launcher) + } } } if (searchProvider == Google) { @@ -108,6 +128,9 @@ class LawnQsbLayout(context: Context, attrs: AttributeSet?) : FrameLayout(contex } subscribeGoogleSearchWidget() } + + preferenceManager.hotseatQsbAlpha.subscribeChanges(this::setUpBackground) + preferenceManager.hotseatQsbStrokeWidth.subscribeChanges(this::setUpBackground) } override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { @@ -152,9 +175,7 @@ class LawnQsbLayout(context: Context, attrs: AttributeSet?) : FrameLayout(contex } private fun setUpLensIcon() { - val lensIntent = Intent.makeMainActivity(ComponentName(LENS_PACKAGE, LENS_ACTIVITY)) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) - if (context.packageManager.resolveActivity(lensIntent, 0) == null) return + val lensIntent = getLensIntent(context) ?: return with(lensIcon) { isVisible = true @@ -175,13 +196,32 @@ class LawnQsbLayout(context: Context, attrs: AttributeSet?) : FrameLayout(contex } private fun setUpBackground(themed: Boolean = false) { + val transparency = preferenceManager.hotseatQsbAlpha.get() val cornerRadius = getCornerRadius(context, preferenceManager) - val color = if (themed) Themes.getColorBackgroundFloating(context) else Themes.getAttrColor(context, R.attr.qsbFillColor) + val baseColor = if (themed) Themes.getColorBackgroundFloating(context) else Themes.getAttrColor(context, R.attr.qsbFillColor) + val alphaValue = (transparency * 255) / 100 + val color = Color.argb(alphaValue, Color.red(baseColor), Color.green(baseColor), Color.blue(baseColor)) + val strokeColor = strokeColor + val strokeWidth = preferenceManager.hotseatQsbStrokeWidth.get() + + val backgroundDrawable = PaintDrawable(color).apply { + setCornerRadius(cornerRadius) + } + + val strokeDrawable = PaintDrawable().apply { + paint.style = Paint.Style.STROKE + paint.color = strokeColor?.colorPreferenceEntry?.lightColor?.invoke(context) ?: Themes.getColorAccent(context) + paint.strokeWidth = strokeWidth + setCornerRadius(cornerRadius) + } + + val combinedDrawable = LayerDrawable(arrayOf(backgroundDrawable, strokeDrawable)) + + val qsbBackground = if (strokeWidth != 0f) combinedDrawable else backgroundDrawable + with(inner) { clipToOutline = cornerRadius > 0 - background = PaintDrawable(color).apply { - setCornerRadius(cornerRadius) - } + background = qsbBackground } } @@ -189,6 +229,14 @@ class LawnQsbLayout(context: Context, attrs: AttributeSet?) : FrameLayout(contex private const val LENS_PACKAGE = "com.google.ar.lens" private const val LENS_ACTIVITY = "com.google.vr.apps.ornament.app.lens.LensLauncherActivity" + fun getLensIntent(context: Context): Intent? { + val lensIntent = Intent.makeMainActivity(ComponentName(LENS_PACKAGE, LENS_ACTIVITY)) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) + if (context.packageManager.resolveActivity(lensIntent, 0) == null) return null + + return lensIntent + } + fun getSearchProvider( context: Context, preferenceManager: PreferenceManager2, diff --git a/lawnchair/src/app/lawnchair/qsb/QsbIconUtil.kt b/lawnchair/src/app/lawnchair/qsb/QsbIconUtil.kt index 565e1211d5a..af9cae16b2c 100644 --- a/lawnchair/src/app/lawnchair/qsb/QsbIconUtil.kt +++ b/lawnchair/src/app/lawnchair/qsb/QsbIconUtil.kt @@ -4,7 +4,7 @@ import android.graphics.drawable.LayerDrawable import android.widget.ImageView import androidx.annotation.DrawableRes import androidx.core.content.res.ResourcesCompat -import app.lawnchair.theme.color.ColorTokens +import app.lawnchair.theme.color.tokens.ColorTokens import com.android.launcher3.R fun ImageView.setThemedIconResource( diff --git a/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt b/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt index aec2c946683..585b8f5f911 100644 --- a/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt +++ b/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt @@ -132,6 +132,7 @@ sealed class QsbSearchProvider( Presearch, Bing, Brave, + Yandex, Startpage, ) diff --git a/lawnchair/src/app/lawnchair/qsb/providers/Yandex.kt b/lawnchair/src/app/lawnchair/qsb/providers/Yandex.kt new file mode 100644 index 00000000000..f4ef4aab310 --- /dev/null +++ b/lawnchair/src/app/lawnchair/qsb/providers/Yandex.kt @@ -0,0 +1,21 @@ +package app.lawnchair.qsb.providers + +import android.content.Intent +import com.android.launcher3.R + +data object Yandex : QsbSearchProvider( + id = "yandex", + name = R.string.search_provider_yandex, + icon = R.drawable.ic_yandex, + themedIcon = R.drawable.ic_yandex_tinted, + packageName = "com.yandex.searchapp", + className = "ru.yandex.searchplugin.MainActivity", + supportVoiceIntent = true, + website = "https://ya.ru/", +) { + + override fun handleCreateVoiceIntent(): Intent = + Intent(action) + .addFlags(INTENT_FLAGS) + .setClassName(packageName, "ru.yandex.searchplugin.AssistantActivityAlias") +} diff --git a/lawnchair/src/app/lawnchair/search/LawnchairSearchAdapterProvider.kt b/lawnchair/src/app/lawnchair/search/LawnchairSearchAdapterProvider.kt index dcaa719a889..c51b52d6ab8 100644 --- a/lawnchair/src/app/lawnchair/search/LawnchairSearchAdapterProvider.kt +++ b/lawnchair/src/app/lawnchair/search/LawnchairSearchAdapterProvider.kt @@ -7,9 +7,8 @@ import android.view.ViewGroup import androidx.core.util.contains import app.lawnchair.allapps.views.SearchItemDecorator import app.lawnchair.allapps.views.SearchResultView -import app.lawnchair.allapps.views.SearchResultView.Companion.EXTRA_QUICK_LAUNCH import app.lawnchair.search.adapter.SearchAdapterItem -import app.lawnchair.search.adapter.SearchResultActionCallBack +import app.lawnchair.search.model.SearchResultActionCallBack import com.android.app.search.LayoutType import com.android.launcher3.DeviceProfile import com.android.launcher3.R @@ -71,7 +70,7 @@ class LawnchairSearchAdapterProvider( ): BaseAllAppsAdapter.ViewHolder { val view = layoutInflater.inflate(layoutIdMap[viewType], parent, false) val grid: DeviceProfile = mLauncher.deviceProfile - val horizontalMargin = if (grid.isTablet) grid.allAppsPadding.left + grid.allAppsPadding.right + 48 else grid.allAppsPadding.left + grid.allAppsPadding.right + val horizontalMargin = grid.allAppsPadding.left + grid.allAppsPadding.right if (viewType != SEARCH_RESULT_ICON) { val layoutParams = ViewGroup.MarginLayoutParams(view.layoutParams) @@ -124,14 +123,5 @@ class LawnchairSearchAdapterProvider( LayoutType.WIDGET_LIVE to SEARCH_RESULT_RECENT_TILE, LayoutType.CALCULATOR to SEARCH_RESULT_CALCULATOR, ) - - fun setFirstItemQuickLaunch(items: List) { - val hasQuickLaunch = items.any { it.searchTarget.extras.getBoolean(EXTRA_QUICK_LAUNCH, false) } - if (!hasQuickLaunch) { - items.firstOrNull()?.searchTarget?.extras?.apply { - putBoolean(EXTRA_QUICK_LAUNCH, true) - } - } - } } } diff --git a/lawnchair/src/app/lawnchair/search/adapter/GenerateSearchTarget.kt b/lawnchair/src/app/lawnchair/search/adapter/SearchTargetFactory.kt similarity index 59% rename from lawnchair/src/app/lawnchair/search/adapter/GenerateSearchTarget.kt rename to lawnchair/src/app/lawnchair/search/adapter/SearchTargetFactory.kt index 217fc0d07ae..0b270645963 100644 --- a/lawnchair/src/app/lawnchair/search/adapter/GenerateSearchTarget.kt +++ b/lawnchair/src/app/lawnchair/search/adapter/SearchTargetFactory.kt @@ -3,6 +3,7 @@ package app.lawnchair.search.adapter import android.content.Context import android.content.Intent import android.content.pm.PackageManager +import android.content.pm.ShortcutInfo import android.graphics.BitmapFactory import android.graphics.drawable.Icon import android.net.Uri @@ -21,34 +22,63 @@ import app.lawnchair.search.algorithms.data.FolderInfo import app.lawnchair.search.algorithms.data.IFileInfo import app.lawnchair.search.algorithms.data.RecentKeyword import app.lawnchair.search.algorithms.data.SettingInfo -import app.lawnchair.theme.color.ColorTokens +import app.lawnchair.search.algorithms.data.WebSearchProvider +import app.lawnchair.theme.color.tokens.ColorTokens import app.lawnchair.util.createTextBitmap import app.lawnchair.util.file2Uri import app.lawnchair.util.mimeCompat import com.android.app.search.LayoutType import com.android.launcher3.R +import com.android.launcher3.model.data.AppInfo import com.android.launcher3.util.ComponentKey import com.android.launcher3.util.PackageManagerHelper import java.io.File import java.io.IOException import java.io.InputStream +import java.security.MessageDigest import java.util.Locale +import okio.ByteString + +class SearchTargetFactory( + private val context: Context, +) { + fun createAppSearchTarget(appInfo: AppInfo, asRow: Boolean = false): SearchTargetCompat { + val componentName = appInfo.componentName + val user = appInfo.user + return SearchTargetCompat.Builder( + SearchTargetCompat.RESULT_TYPE_APPLICATION, + if (asRow) LayoutType.SMALL_ICON_HORIZONTAL_TEXT else LayoutType.ICON_SINGLE_VERTICAL_TEXT, + generateHashKey(ComponentKey(componentName, user).toString()), + ).apply { + setPackageName(componentName.packageName) + setUserHandle(user) + setExtras(bundleOf("class" to componentName.className)) + }.build() + } -class GenerateSearchTarget(private val context: Context) { - - private val marketSearchComponent = resolveMarketSearchActivity() + fun createShortcutTarget(shortcutInfo: ShortcutInfo): SearchTargetCompat { + return SearchTargetCompat.Builder( + SearchTargetCompat.RESULT_TYPE_SHORTCUT, + LayoutType.SMALL_ICON_HORIZONTAL_TEXT, + "shortcut_" + generateHashKey("${shortcutInfo.`package`}|${shortcutInfo.userHandle}|${shortcutInfo.id}"), + ).apply { + setShortcutInfo(shortcutInfo) + setUserHandle(shortcutInfo.userHandle) + setExtras(Bundle()) + }.build() + } - internal fun getSuggestionTarget(suggestion: String): SearchTargetCompat { - val url = getStartPageUrl(suggestion) + fun createWebSuggestionsTarget(suggestion: String, suggestionProvider: String): SearchTargetCompat { + val url = WebSearchProvider.fromString(suggestionProvider).getSearchUrl(suggestion) val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) val id = suggestion + url - val action = SearchActionCompat.Builder(id, suggestion) - .setIcon( + val action = SearchActionCompat.Builder(id, suggestion).apply { + setIcon( Icon.createWithResource(context, R.drawable.ic_allapps_search) .setTint(ColorTokens.TextColorSecondary.resolveColor(context)), ) - .setIntent(browserIntent) - .build() + setIntent(browserIntent) + }.build() return createSearchTarget( id, action, @@ -58,7 +88,7 @@ class GenerateSearchTarget(private val context: Context) { ) } - internal fun getCalculationTarget( + internal fun createCalculatorTarget( calculation: Calculation, ): SearchTargetCompat { val result = calculation.result @@ -75,16 +105,37 @@ class GenerateSearchTarget(private val context: Context) { val extras = bundleOf() - return createCalculatorTarget( + return createSearchTarget( id, action, + LayoutType.CALCULATOR, + SearchTargetCompat.RESULT_TYPE_CALCULATOR, + "", extras, ) } - internal fun getRecentKeywordTarget(recentKeyword: RecentKeyword): SearchTargetCompat { + fun createHeaderTarget(header: String, pkg: String = HEADER): SearchTargetCompat { + val id = "header_$header" + val action = SearchActionCompat.Builder(id, header) + .setIcon( + Icon.createWithResource(context, R.drawable.ic_allapps_search) + .setTint(ColorTokens.TextColorPrimary.resolveColor(context)), + ) + .setIntent(Intent()) + .build() + return createSearchTarget( + id, + action, + LayoutType.TEXT_HEADER, + SearchTargetCompat.RESULT_TYPE_SECTION_HEADER, + pkg, + ) + } + + fun createSearchHistoryTarget(recentKeyword: RecentKeyword, suggestionProvider: String): SearchTargetCompat { val value = recentKeyword.getValueByKey("display1") ?: "" - val url = getStartPageUrl(value) + val url = WebSearchProvider.fromString(suggestionProvider).getSearchUrl(value) val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) val id = recentKeyword.data.toString() + url val action = SearchActionCompat.Builder(id, value) @@ -103,25 +154,7 @@ class GenerateSearchTarget(private val context: Context) { ) } - internal fun getHeaderTarget(header: String, pkg: String = HEADER): SearchTargetCompat { - val id = "header_$header" - val action = SearchActionCompat.Builder(id, header) - .setIcon( - Icon.createWithResource(context, R.drawable.ic_allapps_search) - .setTint(ColorTokens.TextColorPrimary.resolveColor(context)), - ) - .setIntent(Intent()) - .build() - return createSearchTarget( - id, - action, - LayoutType.TEXT_HEADER, - SearchTargetCompat.RESULT_TYPE_SECTION_HEADER, - pkg, - ) - } - - internal fun getSettingSearchItem(info: SettingInfo): SearchTargetCompat? { + fun createSettingsTarget(info: SettingInfo): SearchTargetCompat? { val id = "_${info.id}" val intent = Intent(info.action) @@ -134,12 +167,12 @@ class GenerateSearchTarget(private val context: Context) { return null } - if (!hasRequiredPermissions(intent)) { + if (!SettingsTarget.hasRequiredPermissions(context, intent)) { Log.w("SettingSearch", "App does not have required permissions for intent: $intent") return null } - val actionBuilder = SearchActionCompat.Builder(id, formatSettingTitle(info.name)) + val actionBuilder = SearchActionCompat.Builder(id, SettingsTarget.formatSettingTitle(info.name)) .setIcon( Icon.createWithResource(context, R.drawable.ic_setting) .setTint(ColorTokens.Accent1_600.resolveColor(context)), @@ -156,24 +189,26 @@ class GenerateSearchTarget(private val context: Context) { ) } - private fun hasRequiredPermissions(intent: Intent): Boolean { - val packageManager = context.packageManager - val resolveInfo = packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) - return resolveInfo?.activityInfo?.exported == true - } - - private fun formatSettingTitle(rawTitle: String?): String { - return rawTitle?.replace('_', ' ') - ?.replace("ACTION", "") - ?.lowercase() - ?.split(' ') - ?.joinToString(" ") { - it.replaceFirstChar { char -> char.uppercase(Locale.ROOT) } - }.orEmpty() + private fun createSearchLinksTarget( + id: String, + action: SearchActionCompat, + pkg: String, + extras: Bundle = Bundle(), + ): SearchTargetCompat { + return SearchTargetCompat.Builder( + SearchTargetCompat.RESULT_TYPE_REDIRECTION, + LayoutType.ICON_HORIZONTAL_TEXT, + generateHashKey(id), + ) + .setPackageName(pkg) + .setUserHandle(Process.myUserHandle()) + .setSearchAction(action) + .setExtras(extras) + .build() } - internal fun getMarketSearchItem(query: String): SearchTargetCompat? { - if (marketSearchComponent == null) return null + internal fun createMarketSearchTarget(query: String): SearchTargetCompat? { + val marketSearchComponent = SearchLinksTarget.resolveMarketSearchActivity(context) ?: return null val id = "marketSearch:$query" val action = SearchActionCompat.Builder( id, @@ -186,27 +221,34 @@ class GenerateSearchTarget(private val context: Context) { SearchResultView.EXTRA_ICON_COMPONENT_KEY to marketSearchComponent.toString(), SearchResultView.EXTRA_HIDE_SUBTITLE to true, ) - return createSearchTarget(id, action, MARKET_STORE, extras) + return createSearchLinksTarget( + id, + action, + MARKET_STORE, + extras, + ) } - internal fun getStartPageSearchItem(query: String): SearchTargetCompat { - val url = getStartPageUrl(query) + internal fun createWebSearchTarget(query: String, suggestionProvider: String): SearchTargetCompat { + val webSearchProvider = WebSearchProvider.fromString(suggestionProvider) + val webSearchLabel = context.getString(webSearchProvider.label) + val url = webSearchProvider.getSearchUrl(query) val id = "browser:$query" val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) val action = SearchActionCompat.Builder( id, - context.getString(R.string.all_apps_search_startpage_message), + context.getString(R.string.all_apps_search_on_web_message, webSearchLabel), ) - .setIcon(Icon.createWithResource(context, R.drawable.ic_startpage)) + .setIcon(Icon.createWithResource(context, webSearchProvider.iconRes)) .setIntent(browserIntent) .build() val extras = bundleOf( SearchResultView.EXTRA_HIDE_SUBTITLE to true, ) - return createSearchTarget(id, action, START_PAGE, extras) + return createSearchLinksTarget(id, action, START_PAGE, extras) } - internal fun getContactSearchItem(info: ContactInfo): SearchTargetCompat { + fun createContactsTarget(info: ContactInfo): SearchTargetCompat { val id = "contact:${info.contactId}${info.number}" val contactUri = Uri.withAppendedPath( ContactsContract.Contacts.CONTENT_URI, @@ -215,7 +257,7 @@ class GenerateSearchTarget(private val context: Context) { val contactIntent = Intent(Intent.ACTION_VIEW, contactUri) val action = SearchActionCompat.Builder(id, info.name) - .setIcon(displayContactPhoto(context, info.name, Uri.parse(info.uri))) + .setIcon(ContactsTarget.displayContactPhoto(context, info.name, Uri.parse(info.uri))) .setContentDescription(info.contactId) .setSubtitle(info.number) .setIntent(contactIntent) @@ -231,7 +273,7 @@ class GenerateSearchTarget(private val context: Context) { ) } - internal fun getFileInfoSearchItem(info: IFileInfo): SearchTargetCompat { + fun createFilesTarget(info: IFileInfo): SearchTargetCompat { val fileUri = when (info) { is FileInfo -> Uri.withAppendedPath( MediaStore.Files.getContentUri("external"), @@ -251,7 +293,7 @@ class GenerateSearchTarget(private val context: Context) { .setDataAndType(fileUri, mimeType) val action = SearchActionCompat.Builder(info.path, info.name) - .setIcon(getPreviewIcon(info)) + .setIcon(FilesTarget.getPreviewIcon(context, info)) .setIntent(fileIntent) .build() @@ -265,7 +307,53 @@ class GenerateSearchTarget(private val context: Context) { ) } - private fun displayContactPhoto(context: Context, name: String, contactUri: Uri): Icon { + companion object { + private const val HASH_ALGORITHM = "SHA-256" + + // TODO find a way to properly provide tag/provide ids to search target + private val messageDigest by lazy { MessageDigest.getInstance(HASH_ALGORITHM) } + + private fun generateHashKey(input: String): String = + ByteString.of(*messageDigest.digest(input.toByteArray())).hex() + + fun createSearchTarget( + id: String, + action: SearchActionCompat, + layoutType: String, + targetCompat: Int, + pkg: String, + extras: Bundle = Bundle(), + ): SearchTargetCompat { + return SearchTargetCompat.Builder( + targetCompat, + layoutType, + generateHashKey(id), + ).apply { + setPackageName(pkg) + setUserHandle(Process.myUserHandle()) + setSearchAction(action) + setExtras(extras) + }.build() + } + } +} + +object FilesTarget { + fun getPreviewIcon( + context: Context, + info: IFileInfo, + ): Icon { + val fileInfo = info as? FileInfo + return if (fileInfo?.isImageType == true) { + Icon.createWithFilePath(fileInfo.path) + } else { + Icon.createWithResource(context, fileInfo?.iconRes ?: R.drawable.ic_folder) + } + } +} + +object ContactsTarget { + fun displayContactPhoto(context: Context, name: String, contactUri: Uri): Icon { var inputStream: InputStream? = null try { inputStream = context.contentResolver.openInputStream(contactUri) @@ -279,30 +367,54 @@ class GenerateSearchTarget(private val context: Context) { inputStream?.close() } - // If contact photo not available, create an icon with the first letter of the name + // If contact photo is not available, create an icon with the first letter of the contact's name val initial = if (name.isNotEmpty()) name[0].uppercaseChar().toString() else "U" val textBitmap = createTextBitmap(context, initial) return Icon.createWithBitmap(textBitmap) } +} - private fun getStartPageUrl(query: String): String { - return "https://www.startpage.com/do/search?segment=startpage.lawnchair&query=$query&cat=web" - } - - private fun resolveMarketSearchActivity(): ComponentKey? { +object SearchLinksTarget { + fun resolveMarketSearchActivity(context: Context): ComponentKey? { val intent = PackageManagerHelper.getMarketSearchIntent(context, "") val resolveInfo = context.packageManager.resolveActivity(intent, 0) ?: return null val packageName = resolveInfo.activityInfo.packageName val launchIntent = context.packageManager.getLaunchIntentForPackage(packageName) ?: return null return ComponentKey(launchIntent.component, Process.myUserHandle()) } +} - private fun getPreviewIcon(info: IFileInfo): Icon { - val fileInfo = info as? FileInfo - return if (fileInfo?.isImageType == true) { - Icon.createWithFilePath(fileInfo.path) - } else { - Icon.createWithResource(context, fileInfo?.iconRes ?: R.drawable.ic_folder) - } +object SettingsTarget { + fun hasRequiredPermissions(context: Context, intent: Intent): Boolean { + val packageManager = context.packageManager + val resolveInfo = packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) + return resolveInfo?.activityInfo?.exported == true + } + + fun formatSettingTitle(rawTitle: String?): String { + return rawTitle?.replace('_', ' ') + ?.replace("ACTION", "") + ?.lowercase() + ?.split(' ') + ?.joinToString(" ") { + it.replaceFirstChar { char -> char.uppercase(Locale.ROOT) } + }.orEmpty() } } + +// keys used in `pkg` param +const val START_PAGE = "startpage" +const val MARKET_STORE = "marketstore" +const val WEB_SUGGESTION = "suggestion" +const val HEADER = "header" +const val CONTACT = "contact" +const val FILES = "files" +const val SPACE = "space" +const val SPACE_MINI = "space_mini" +const val LOADING = "loading" +const val ERROR = "error" +const val SETTINGS = "setting" +const val SHORTCUT = "shortcut" +const val HISTORY = "recent_keyword" +const val HEADER_JUSTIFY = "header_justify" +const val CALCULATOR = "calculator" diff --git a/lawnchair/src/app/lawnchair/search/adapter/SearchTargetUtils.kt b/lawnchair/src/app/lawnchair/search/adapter/SearchTargetUtils.kt deleted file mode 100644 index 20817f08dd4..00000000000 --- a/lawnchair/src/app/lawnchair/search/adapter/SearchTargetUtils.kt +++ /dev/null @@ -1,125 +0,0 @@ -package app.lawnchair.search.adapter - -import android.content.pm.ShortcutInfo -import android.os.Bundle -import android.os.Process -import androidx.core.os.bundleOf -import com.android.app.search.LayoutType -import com.android.launcher3.model.data.AppInfo -import com.android.launcher3.util.ComponentKey -import java.security.MessageDigest -import okio.ByteString - -// We're generate hash key as alt in id, so we can avoid -// the wrong action when click, -// TODO remove when we properly manage creating search target -private fun generateHashKey(input: String): String = - ByteString.of(*MessageDigest.getInstance("SHA-256").digest(input.toByteArray())).hex() - -fun createSearchTarget(appInfo: AppInfo, asRow: Boolean = false): SearchTargetCompat { - val componentName = appInfo.componentName - val user = appInfo.user - return SearchTargetCompat.Builder( - SearchTargetCompat.RESULT_TYPE_APPLICATION, - if (asRow) LayoutType.SMALL_ICON_HORIZONTAL_TEXT else LayoutType.ICON_SINGLE_VERTICAL_TEXT, - generateHashKey(ComponentKey(componentName, user).toString()), - ) - .setPackageName(componentName.packageName) - .setUserHandle(user) - .setExtras(bundleOf("class" to componentName.className)) - .build() -} - -fun createSearchTarget(shortcutInfo: ShortcutInfo): SearchTargetCompat { - return SearchTargetCompat.Builder( - SearchTargetCompat.RESULT_TYPE_SHORTCUT, - LayoutType.SMALL_ICON_HORIZONTAL_TEXT, - "shortcut_" + generateHashKey("${shortcutInfo.`package`}|${shortcutInfo.userHandle}|${shortcutInfo.id}"), - ) - .setShortcutInfo(shortcutInfo) - .setUserHandle(shortcutInfo.userHandle) - .setExtras(Bundle()) - .build() -} - -fun createSearchTarget( - id: String, - action: SearchActionCompat, - pkg: String, - extras: Bundle = Bundle(), -): SearchTargetCompat { - return SearchTargetCompat.Builder( - SearchTargetCompat.RESULT_TYPE_REDIRECTION, - LayoutType.ICON_HORIZONTAL_TEXT, - generateHashKey(id), - ) - .setPackageName(pkg) - .setUserHandle(Process.myUserHandle()) - .setSearchAction(action) - .setExtras(extras) - .build() -} - -fun createCalculatorTarget( - id: String, - action: SearchActionCompat, - extras: Bundle = Bundle(), -): SearchTargetCompat { - return SearchTargetCompat.Builder( - SearchTargetCompat.RESULT_TYPE_CALCULATOR, - LayoutType.CALCULATOR, - generateHashKey(id), - ) - .setPackageName("") - .setUserHandle(Process.myUserHandle()) - .setSearchAction(action) - .setExtras(extras) - .build() -} - -fun createSearchTarget( - id: String, - action: SearchActionCompat, - layoutType: String, - targetCompat: Int, - pkg: String, - extras: Bundle = Bundle(), -): SearchTargetCompat { - return SearchTargetCompat.Builder( - targetCompat, - layoutType, - generateHashKey(id), - ) - .setPackageName(pkg) - .setUserHandle(Process.myUserHandle()) - .setSearchAction(action) - .setExtras(extras) - .build() -} - -fun createDividerTarget(): SearchTargetCompat { - return SearchTargetCompat.Builder( - SearchTargetCompat.RESULT_TYPE_SHORTCUT, - LayoutType.DIVIDER, - "divider", - ) - .setPackageName("") - .setUserHandle(Process.myUserHandle()) - .build() -} - -const val START_PAGE = "startpage" -const val MARKET_STORE = "marketstore" -const val WEB_SUGGESTION = "suggestion" -const val HEADER = "header" -const val CONTACT = "contact" -const val FILES = "files" -const val SPACE = "space" -const val SPACE_MINI = "space_mini" -const val LOADING = "loading" -const val ERROR = "error" -const val SETTINGS = "setting" -const val SHORTCUT = "shortcut" -const val HISTORY = "recent_keyword" -const val HEADER_JUSTIFY = "header_justify" -const val CALCULATOR = "calculator" diff --git a/lawnchair/src/app/lawnchair/search/algorithms/LawnchairASISearchAlgorithm.kt b/lawnchair/src/app/lawnchair/search/algorithms/LawnchairASISearchAlgorithm.kt index ed3898f746c..f4e4b4e5a62 100644 --- a/lawnchair/src/app/lawnchair/search/algorithms/LawnchairASISearchAlgorithm.kt +++ b/lawnchair/src/app/lawnchair/search/algorithms/LawnchairASISearchAlgorithm.kt @@ -12,7 +12,6 @@ import androidx.core.os.bundleOf import app.lawnchair.compat.LawnchairQuickstepCompat import app.lawnchair.preferences.PreferenceChangeListener import app.lawnchair.preferences.PreferenceManager -import app.lawnchair.search.LawnchairSearchAdapterProvider import app.lawnchair.search.adapter.SearchTargetCompat import app.lawnchair.util.requireSystemService import com.android.launcher3.LauncherAppState @@ -110,8 +109,8 @@ class LawnchairASISearchAlgorithm(context: Context) : override fun accept(platformTargets: List) { if (!canceled) { val targets = platformTargets.map { SearchTargetCompat.wrap(it) } + setFirstItemQuickLaunch(targets) val adapterItems = transformSearchResults(targets) - LawnchairSearchAdapterProvider.setFirstItemQuickLaunch(adapterItems) callback.onSearchResult( query, ArrayList(adapterItems), diff --git a/lawnchair/src/app/lawnchair/search/algorithms/LawnchairAppSearchAlgorithm.kt b/lawnchair/src/app/lawnchair/search/algorithms/LawnchairAppSearchAlgorithm.kt index cf1ec03effa..05eebf1b31e 100644 --- a/lawnchair/src/app/lawnchair/search/algorithms/LawnchairAppSearchAlgorithm.kt +++ b/lawnchair/src/app/lawnchair/search/algorithms/LawnchairAppSearchAlgorithm.kt @@ -3,11 +3,9 @@ package app.lawnchair.search.algorithms import android.content.Context import android.os.Handler import app.lawnchair.preferences2.PreferenceManager2 -import app.lawnchair.search.LawnchairSearchAdapterProvider -import app.lawnchair.search.adapter.GenerateSearchTarget import app.lawnchair.search.adapter.SPACE import app.lawnchair.search.adapter.SearchTargetCompat -import app.lawnchair.search.adapter.createSearchTarget +import app.lawnchair.search.adapter.SearchTargetFactory import app.lawnchair.util.isDefaultLauncher import com.android.launcher3.LauncherAppState import com.android.launcher3.allapps.BaseAllAppsAdapter @@ -26,7 +24,9 @@ class LawnchairAppSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm(c private val appState = LauncherAppState.getInstance(context) private val resultHandler = Handler(Executors.MAIN_EXECUTOR.looper) - private val generateSearchTarget = GenerateSearchTarget(context) + + // todo maybe use D.I.? + private val searchTargetFactory = SearchTargetFactory(context) private var hiddenApps: Set = setOf() @@ -34,21 +34,21 @@ class LawnchairAppSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm(c private var enableFuzzySearch = false private var maxResultsCount = 5 - private val pref2 = PreferenceManager2.getInstance(context) + private val prefs2 = PreferenceManager2.getInstance(context) val coroutineScope = CoroutineScope(context = Dispatchers.IO) init { - pref2.enableFuzzySearch.onEach(launchIn = coroutineScope) { + prefs2.enableFuzzySearch.onEach(launchIn = coroutineScope) { enableFuzzySearch = it } - pref2.hiddenApps.onEach(launchIn = coroutineScope) { + prefs2.hiddenApps.onEach(launchIn = coroutineScope) { hiddenApps = it } - pref2.hiddenAppsInSearch.onEach(launchIn = coroutineScope) { + prefs2.hiddenAppsInSearch.onEach(launchIn = coroutineScope) { hiddenAppsInSearch = it } - pref2.maxAppSearchResultCount.onEach(launchIn = coroutineScope) { + prefs2.maxAppSearchResultCount.onEach(launchIn = coroutineScope) { maxResultsCount = it } } @@ -85,27 +85,26 @@ class LawnchairAppSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm(c val searchTargets = mutableListOf() if (appResults.isNotEmpty()) { - appResults.mapTo(searchTargets, ::createSearchTarget) - } - - if (appResults.size == 1 && context.isDefaultLauncher()) { - val singleAppResult = appResults.firstOrNull() - val shortcuts = singleAppResult?.let { searchUtils.getShortcuts(it, context) } - if (shortcuts != null) { - if (shortcuts.isNotEmpty()) { - searchTargets.add(generateSearchTarget.getHeaderTarget(SPACE)) - searchTargets.add(createSearchTarget(singleAppResult, true)) - searchTargets.addAll(shortcuts.map(::createSearchTarget)) + appResults.mapTo(searchTargets, searchTargetFactory::createAppSearchTarget) + + if (appResults.size == 1 && context.isDefaultLauncher()) { + val singleAppResult = appResults.firstOrNull() + val shortcuts = singleAppResult?.let { searchUtils.getShortcuts(it, context) } + if (shortcuts != null) { + if (shortcuts.isNotEmpty()) { + searchTargets.add(searchTargetFactory.createHeaderTarget(SPACE)) + singleAppResult.let { searchTargets.add(searchTargetFactory.createAppSearchTarget(it, true)) } + searchTargets.addAll(shortcuts.map(searchTargetFactory::createShortcutTarget)) + } } } + searchTargets.add(searchTargetFactory.createHeaderTarget(SPACE)) } - searchTargets.add(generateSearchTarget.getHeaderTarget(SPACE)) - - generateSearchTarget.getMarketSearchItem(query)?.let { searchTargets.add(it) } + searchTargetFactory.createMarketSearchTarget(query)?.let { searchTargets.add(it) } + setFirstItemQuickLaunch(searchTargets) val adapterItems = transformSearchResults(searchTargets) - LawnchairSearchAdapterProvider.setFirstItemQuickLaunch(adapterItems) return ArrayList(adapterItems) } } diff --git a/lawnchair/src/app/lawnchair/search/algorithms/LawnchairLocalSearchAlgorithm.kt b/lawnchair/src/app/lawnchair/search/algorithms/LawnchairLocalSearchAlgorithm.kt index be2d2f29e0e..302a71f3fce 100644 --- a/lawnchair/src/app/lawnchair/search/algorithms/LawnchairLocalSearchAlgorithm.kt +++ b/lawnchair/src/app/lawnchair/search/algorithms/LawnchairLocalSearchAlgorithm.kt @@ -4,32 +4,30 @@ import android.content.Context import android.os.Handler import app.lawnchair.preferences.PreferenceManager import app.lawnchair.preferences2.PreferenceManager2 -import app.lawnchair.search.LawnchairSearchAdapterProvider import app.lawnchair.search.adapter.CALCULATOR import app.lawnchair.search.adapter.CONTACT import app.lawnchair.search.adapter.ERROR import app.lawnchair.search.adapter.FILES -import app.lawnchair.search.adapter.GenerateSearchTarget import app.lawnchair.search.adapter.HEADER_JUSTIFY import app.lawnchair.search.adapter.HISTORY import app.lawnchair.search.adapter.LOADING import app.lawnchair.search.adapter.SETTINGS import app.lawnchair.search.adapter.SPACE -import app.lawnchair.search.adapter.SearchResult import app.lawnchair.search.adapter.SearchTargetCompat +import app.lawnchair.search.adapter.SearchTargetFactory import app.lawnchair.search.adapter.WEB_SUGGESTION -import app.lawnchair.search.adapter.createSearchTarget import app.lawnchair.search.algorithms.data.Calculation import app.lawnchair.search.algorithms.data.ContactInfo import app.lawnchair.search.algorithms.data.IFileInfo import app.lawnchair.search.algorithms.data.RecentKeyword import app.lawnchair.search.algorithms.data.SettingInfo +import app.lawnchair.search.algorithms.data.WebSearchProvider import app.lawnchair.search.algorithms.data.calculateEquationFromString import app.lawnchair.search.algorithms.data.findContactsByName import app.lawnchair.search.algorithms.data.findSettingsByNameAndAction import app.lawnchair.search.algorithms.data.getRecentKeyword -import app.lawnchair.search.algorithms.data.getStartPageSuggestions import app.lawnchair.search.algorithms.data.queryFilesInMediaStore +import app.lawnchair.search.model.SearchResult import app.lawnchair.util.checkAndRequestFilesPermission import app.lawnchair.util.isDefaultLauncher import app.lawnchair.util.requestContactPermissionGranted @@ -45,8 +43,12 @@ import com.android.launcher3.util.Executors import com.patrykmichalik.opto.core.onEach import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.TimeoutCancellationException import kotlinx.coroutines.async +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.channelFlow +import kotlinx.coroutines.flow.flow import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import kotlinx.coroutines.withTimeoutOrNull @@ -55,15 +57,16 @@ class LawnchairLocalSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm private val appState = LauncherAppState.getInstance(context) private val resultHandler = Handler(Executors.MAIN_EXECUTOR.looper) - private val generateSearchTarget = GenerateSearchTarget(context) + private val searchTargetFactory = SearchTargetFactory(context) - private var hiddenApps: Set = setOf() + private var hiddenApps: Set = emptySet() private var hiddenAppsInSearch = "" private var searchApps = true private var enableFuzzySearch = false private var useWebSuggestions = true + private var webSuggestionsProvider = "" private val prefs: PreferenceManager = PreferenceManager.getInstance(context) private val pref2 = PreferenceManager2.getInstance(context) @@ -76,7 +79,7 @@ class LawnchairLocalSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm private var maxRecentResultCount = 2 private var maxWebSuggestionDelay = 200 - val coroutineScope = CoroutineScope(context = Dispatchers.IO) + val coroutineScope = CoroutineScope(context = Dispatchers.IO + SupervisorJob()) init { pref2.enableFuzzySearch.onEach(launchIn = coroutineScope) { @@ -92,6 +95,10 @@ class LawnchairLocalSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm useWebSuggestions = prefs.searchResultStartPageSuggestion.get() searchApps = prefs.searchResultApps.get() + pref2.webSuggestionProvider.onEach(launchIn = coroutineScope) { + webSuggestionsProvider = it.toString() + } + pref2.maxAppSearchResultCount.onEach(launchIn = coroutineScope) { maxAppResultsCount = it } @@ -101,7 +108,7 @@ class LawnchairLocalSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm pref2.maxPeopleResultCount.onEach(launchIn = coroutineScope) { maxPeopleCount = it } - pref2.maxSuggestionResultCount.onEach(launchIn = coroutineScope) { + pref2.maxWebSuggestionResultCount.onEach(launchIn = coroutineScope) { maxWebSuggestionsCount = it } pref2.maxSettingsEntryResultCount.onEach(launchIn = coroutineScope) { @@ -121,8 +128,9 @@ class LawnchairLocalSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm appState.model.enqueueModelUpdateTask(object : BaseModelUpdateTask() { override fun execute(app: LauncherAppState, dataModel: BgDataModel, apps: AllAppsList) { coroutineScope.launch(Dispatchers.Main) { - val results = getResult(apps.data, query) - callback.onSearchResult(query, results) + getAllSearchResults(apps.data, query, prefs).collect { allResults -> + callback.onSearchResult(query, ArrayList(allResults)) + } } } }) @@ -134,99 +142,177 @@ class LawnchairLocalSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm } } - private suspend fun getResult( + private fun getAllSearchResults( apps: MutableList, query: String, - ): ArrayList { - val appResults = if (enableFuzzySearch) { - searchUtils.fuzzySearch(apps, query) - } else { - searchUtils.normalSearch(apps, query) + prefs: PreferenceManager, + ): Flow> = channelFlow { + val allResults = mutableListOf() + var appIndex = 0 + + launch { + getAppSearchResults(apps, query).collect { appResults -> + allResults.addAll(appResults) + appIndex = appResults.size + send(allResults.toList()) + } + } + + launch { + getLocalSearchResults(query, prefs).collect { localResults -> + // Insert local results at the appropriate position + val insertIndex = appIndex + if (insertIndex >= 0) { + allResults.addAll(insertIndex, localResults) + } else { + allResults.addAll(localResults) + } + send(allResults.toList()) + } + } + + launch { + getSearchLinks(query).collect { otherResults -> + allResults.addAll(otherResults) + send(allResults.toList()) + } } + } + + private fun getAppSearchResults( + apps: MutableList, + query: String, + ): Flow> = flow { + val searchTargets = mutableListOf() + val appResults = performAppSearch(apps, query) + + parseAppSearchResults(appResults, searchTargets) + + setFirstItemQuickLaunch(searchTargets) + emit(transformSearchResults(searchTargets)) + } + private fun getLocalSearchResults( + query: String, + prefs: PreferenceManager, + ): Flow> = flow { + val searchTargets = mutableListOf() val localSearchResults = performDeviceLocalSearch(query, prefs) + parseLocalSearchResults(localSearchResults, searchTargets) + emit(transformSearchResults(searchTargets)) + } + private fun getSearchLinks( + query: String, + ): Flow> = flow { val searchTargets = mutableListOf() - if (appResults.isNotEmpty() && searchApps) { - appResults.mapTo(searchTargets, ::createSearchTarget) + searchTargets.add(searchTargetFactory.createHeaderTarget(SPACE)) + if (useWebSuggestions) { + withContext(Dispatchers.IO) { + searchTargets.add(searchTargetFactory.createWebSearchTarget(query, webSuggestionsProvider)) + } } + searchTargetFactory.createMarketSearchTarget(query)?.let { searchTargets.add(it) } + emit(transformSearchResults(searchTargets)) + } - if (appResults.size == 1 && searchApps && context.isDefaultLauncher()) { - val singleAppResult = appResults.firstOrNull() - val shortcuts = singleAppResult?.let { searchUtils.getShortcuts(it, context) } - if (shortcuts != null) { - if (shortcuts.isNotEmpty()) { - searchTargets.add(generateSearchTarget.getHeaderTarget(SPACE)) - searchTargets.add(createSearchTarget(singleAppResult, true)) - searchTargets.addAll(shortcuts.map(::createSearchTarget)) + private fun parseAppSearchResults( + appResults: List, + searchTargets: MutableList, + ) { + if (appResults.isNotEmpty()) { + appResults.mapTo(searchTargets, searchTargetFactory::createAppSearchTarget) + + if (appResults.size == 1 && context.isDefaultLauncher()) { + val singleAppResult = appResults.firstOrNull() + val shortcuts = singleAppResult?.let { searchUtils.getShortcuts(it, context) } + if (shortcuts != null) { + if (shortcuts.isNotEmpty()) { + searchTargets.add(searchTargetFactory.createHeaderTarget(SPACE)) + singleAppResult.let { searchTargets.add(searchTargetFactory.createAppSearchTarget(it, true)) } + searchTargets.addAll(shortcuts.map(searchTargetFactory::createShortcutTarget)) + } } } + searchTargets.add(searchTargetFactory.createHeaderTarget(SPACE)) } + } + private fun parseLocalSearchResults( + localSearchResults: MutableList, + searchTargets: MutableList, + ) { + val suggestionProvider = webSuggestionsProvider val suggestions = filterByType(localSearchResults, WEB_SUGGESTION) if (suggestions.isNotEmpty()) { - val suggestionsHeader = generateSearchTarget.getHeaderTarget(context.getString(R.string.all_apps_search_result_suggestions)) + val suggestionsHeader = + searchTargetFactory.createHeaderTarget(context.getString(R.string.all_apps_search_result_suggestions)) searchTargets.add(suggestionsHeader) - searchTargets.addAll(suggestions.map { generateSearchTarget.getSuggestionTarget(it.resultData as String) }) + searchTargets.addAll( + suggestions.map { + searchTargetFactory.createWebSuggestionsTarget(it.resultData as String, suggestionProvider) + }, + ) } val calculator = filterByType(localSearchResults, CALCULATOR).firstOrNull() val calcData = calculator?.resultData as? Calculation if (calcData != null && calcData.isValid) { - val calculatorHeader = generateSearchTarget.getHeaderTarget(context.getString(R.string.all_apps_search_result_calculator)) + val calculatorHeader = + searchTargetFactory.createHeaderTarget(context.getString(R.string.all_apps_search_result_calculator)) searchTargets.add(calculatorHeader) searchTargets.add( - generateSearchTarget.getCalculationTarget(calcData), + searchTargetFactory.createCalculatorTarget(calcData), ) } val contacts = filterByType(localSearchResults, CONTACT) if (contacts.isNotEmpty()) { - val contactsHeader = generateSearchTarget.getHeaderTarget(context.getString(R.string.all_apps_search_result_contacts_from_device)) + val contactsHeader = + searchTargetFactory.createHeaderTarget(context.getString(R.string.all_apps_search_result_contacts_from_device)) searchTargets.add(contactsHeader) - searchTargets.addAll(contacts.map { generateSearchTarget.getContactSearchItem(it.resultData as ContactInfo) }) + searchTargets.addAll(contacts.map { searchTargetFactory.createContactsTarget(it.resultData as ContactInfo) }) } val settings = filterByType(localSearchResults, SETTINGS) if (settings.isNotEmpty()) { - val settingsHeader = generateSearchTarget.getHeaderTarget(context.getString(R.string.all_apps_search_result_settings_entry_from_device)) + val settingsHeader = + searchTargetFactory.createHeaderTarget(context.getString(R.string.all_apps_search_result_settings_entry_from_device)) searchTargets.add(settingsHeader) - searchTargets.addAll(settings.mapNotNull { generateSearchTarget.getSettingSearchItem(it.resultData as SettingInfo) }) + searchTargets.addAll(settings.mapNotNull { searchTargetFactory.createSettingsTarget(it.resultData as SettingInfo) }) } + // todo refactor to only show when search is first clicked val recentKeyword = filterByType(localSearchResults, HISTORY) if (recentKeyword.isNotEmpty()) { - val recentKeywordHeader = generateSearchTarget.getHeaderTarget( + val recentKeywordHeader = searchTargetFactory.createHeaderTarget( context.getString(R.string.search_pref_result_history_title), HEADER_JUSTIFY, ) searchTargets.add(recentKeywordHeader) - searchTargets.addAll(recentKeyword.map { generateSearchTarget.getRecentKeywordTarget(it.resultData as RecentKeyword) }) + searchTargets.addAll(recentKeyword.map { searchTargetFactory.createSearchHistoryTarget(it.resultData as RecentKeyword, suggestionProvider) }) } val files = filterByType(localSearchResults, FILES) if (files.isNotEmpty()) { - val filesHeader = generateSearchTarget.getHeaderTarget(context.getString(R.string.all_apps_search_result_files)) + val filesHeader = + searchTargetFactory.createHeaderTarget(context.getString(R.string.all_apps_search_result_files)) searchTargets.add(filesHeader) - searchTargets.addAll(files.map { generateSearchTarget.getFileInfoSearchItem(it.resultData as IFileInfo) }) + searchTargets.addAll(files.map { searchTargetFactory.createFilesTarget(it.resultData as IFileInfo) }) } - - searchTargets.add(generateSearchTarget.getHeaderTarget(SPACE)) - - if (useWebSuggestions) searchTargets.add(generateSearchTarget.getStartPageSearchItem(query)) - generateSearchTarget.getMarketSearchItem(query)?.let { searchTargets.add(it) } - - val adapterItems = transformSearchResults(searchTargets) - LawnchairSearchAdapterProvider.setFirstItemQuickLaunch(adapterItems) - return ArrayList(adapterItems) } - private fun filterByType(results: List, type: String): List { - return results.filter { it.resultType == type } + private fun performAppSearch( + apps: MutableList, + query: String, + ) = if (enableFuzzySearch) { + searchUtils.fuzzySearch(apps, query) + } else { + searchUtils.normalSearch(apps, query) } - protected suspend fun performDeviceLocalSearch(query: String, prefs: PreferenceManager): MutableList = + private suspend fun performDeviceLocalSearch(query: String, prefs: PreferenceManager): MutableList = withContext(Dispatchers.IO) { val results = ArrayList() @@ -276,7 +362,7 @@ class LawnchairLocalSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm val timeout = maxWebSuggestionDelay.toLong() val result = withTimeoutOrNull(timeout) { if (prefs.searchResultStartPageSuggestion.get()) { - getStartPageSuggestions(query, maxWebSuggestionsCount).map { + WebSearchProvider.fromString(webSuggestionsProvider).getSuggestions(query, maxWebSuggestionsCount).map { SearchResult( WEB_SUGGESTION, it, @@ -320,4 +406,8 @@ class LawnchairLocalSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm results } + + private fun filterByType(results: List, type: String): List { + return results.filter { it.resultType == type } + } } diff --git a/lawnchair/src/app/lawnchair/search/algorithms/LawnchairSearchAlgorithm.kt b/lawnchair/src/app/lawnchair/search/algorithms/LawnchairSearchAlgorithm.kt index 9e9f73900a7..d9c214ecfc5 100644 --- a/lawnchair/src/app/lawnchair/search/algorithms/LawnchairSearchAlgorithm.kt +++ b/lawnchair/src/app/lawnchair/search/algorithms/LawnchairSearchAlgorithm.kt @@ -4,7 +4,6 @@ import android.content.Context import app.lawnchair.LawnchairApp import app.lawnchair.allapps.views.SearchItemBackground import app.lawnchair.allapps.views.SearchResultView.Companion.EXTRA_QUICK_LAUNCH -import app.lawnchair.preferences.PreferenceManager import app.lawnchair.preferences2.PreferenceManager2 import app.lawnchair.search.LawnchairSearchAdapterProvider import app.lawnchair.search.adapter.SearchAdapterItem @@ -71,6 +70,7 @@ sealed class LawnchairSearchAlgorithm( .removeDuplicateDividers() .toList() + val appAndShortcutIndices = findAppAndShorcutIndices(filtered) val smallIconIndices = findIndices(filtered, SMALL_ICON_HORIZONTAL_TEXT) val iconRowIndices = findIndices(filtered, ICON_HORIZONTAL_TEXT) val peopleTileIndices = findIndices(filtered, PEOPLE_TILE) @@ -84,34 +84,62 @@ sealed class LawnchairSearchAlgorithm( val isFirst = index == 0 || filtered[index - 1].isDivider val isLast = index == filtered.lastIndex || filtered[index + 1].isDivider - if (target.extras.getBoolean(EXTRA_QUICK_LAUNCH, false)) { + // todo make quick launch work on non-app results + if ( + (target.isApp && target.layoutType == SMALL_ICON_HORIZONTAL_TEXT) || + target.isShortcut + ) { + SearchAdapterItem.createAdapterItem(target, getGroupedBackground(index, appAndShortcutIndices)) + } else if (target.layoutType == ICON_SINGLE_VERTICAL_TEXT && target.extras.getBoolean(EXTRA_QUICK_LAUNCH, false)) { SearchAdapterItem.createAdapterItem(target, normalBackground) + } else { + val background = getBackground( + target.layoutType, + index, + isFirst, + isLast, + smallIconIndices, + iconRowIndices, + peopleTileIndices, + suggestionIndices, + fileIndices, + settingIndices, + recentIndices, + calculator, + ) + SearchAdapterItem.createAdapterItem(target, background) } + } + } - val background = getBackground( - target.layoutType, - index, - isFirst, - isLast, - smallIconIndices, - iconRowIndices, - peopleTileIndices, - suggestionIndices, - fileIndices, - settingIndices, - recentIndices, - calculator, - ) - SearchAdapterItem.createAdapterItem(target, background) + protected fun setFirstItemQuickLaunch(searchTargets: List) { + val hasQuickLaunch = searchTargets.any { it.extras.getBoolean(EXTRA_QUICK_LAUNCH, false) } + if (!hasQuickLaunch) { + searchTargets.firstOrNull()?.extras?.apply { + putBoolean(EXTRA_QUICK_LAUNCH, true) + } } } private fun findIndices(filtered: List, layoutType: String): List { return filtered.indices.filter { - filtered[it].layoutType == layoutType + filtered[it].layoutType == layoutType && !filtered[it].isApp } } + private fun findAppAndShorcutIndices(filtered: List): List { + val appAndShortcutIndices = + filtered.indices.filter { + (filtered[it].isApp || filtered[it].isShortcut) && + ( + filtered[it].layoutType == ICON_HORIZONTAL_TEXT || + filtered[it].layoutType == SMALL_ICON_HORIZONTAL_TEXT + ) + } + + return appAndShortcutIndices + } + private fun getBackground( layoutType: String, index: Int, @@ -160,12 +188,11 @@ sealed class LawnchairSearchAlgorithm( if (!Utilities.ATLEAST_S) return false if (!LawnchairApp.isRecentsEnabled) return false - val prefs = PreferenceManager.getInstance(context) if (!ranCompatibilityCheck) { ranCompatibilityCheck = true LawnchairASISearchAlgorithm.checkSearchCompatibility(context) } - return prefs.deviceSearch.get() + return true } fun create(context: Context): LawnchairSearchAlgorithm { @@ -173,13 +200,17 @@ sealed class LawnchairSearchAlgorithm( val searchAlgorithm = prefs.searchAlgorithm.firstBlocking() return when { - searchAlgorithm == ASI_SEARCH && isASISearchEnabled(context) -> LawnchairASISearchAlgorithm(context) + searchAlgorithm == ASI_SEARCH && isASISearchEnabled(context) -> LawnchairASISearchAlgorithm( + context, + ) + searchAlgorithm == LOCAL_SEARCH -> LawnchairLocalSearchAlgorithm(context) else -> LawnchairAppSearchAlgorithm(context) } } } } + private fun Sequence.removeDuplicateDividers(): Sequence { var previousWasDivider = true return filter { item -> diff --git a/lawnchair/src/app/lawnchair/search/algorithms/data/Web.kt b/lawnchair/src/app/lawnchair/search/algorithms/data/Web.kt index 8636f0be980..e3e66b96191 100644 --- a/lawnchair/src/app/lawnchair/search/algorithms/data/Web.kt +++ b/lawnchair/src/app/lawnchair/search/algorithms/data/Web.kt @@ -1,7 +1,10 @@ package app.lawnchair.search.algorithms.data import android.util.Log +import androidx.annotation.DrawableRes +import androidx.annotation.StringRes import app.lawnchair.util.kotlinxJson +import com.android.launcher3.R import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import okhttp3.MediaType.Companion.toMediaType @@ -14,47 +17,266 @@ import retrofit2.create import retrofit2.http.GET import retrofit2.http.Query -private val retrofit = Retrofit.Builder() - .baseUrl("https://www.startpage.com/") - .addConverterFactory(kotlinxJson.asConverterFactory("application/json".toMediaType())) - .build() +/** + * A class to get the current web search provider + */ +sealed class WebSearchProvider { -val startPageService: StartPageService = retrofit.create() + /** + * Human-readable label used by the preference UI + */ + @get:StringRes + abstract val label: Int -suspend fun getStartPageSuggestions(query: String, max: Int): List = withContext(Dispatchers.IO) { - if (query.isEmpty() || query.isBlank() || max <= 0) { - return@withContext emptyList() + /** + * Icon resource used by the drawer search bar + */ + @get:DrawableRes + abstract val iconRes: Int + + /** + * Base url used for mapping + */ + abstract val baseUrl: String + + /** + * [Retrofit] instance used for searching. + */ + protected val retrofit: Retrofit by lazy { + Retrofit.Builder() + .baseUrl(baseUrl) + .addConverterFactory(kotlinxJson.asConverterFactory("application/json".toMediaType())) + .build() } - try { - val response: Response = startPageService.getStartPageSuggestions( - query = query, - segment = "startpage.lawnchair", - partner = "lawnchair", - format = "opensearch", - ) + /** + * The search service to use. + */ + protected abstract val service: GenericSearchService + + /** + * Suspending function to get the list of suggestions from the current suggestion + * @param query The input text + * @param maxSuggestions The maximum number of items + * @return The list of suggestions + */ + abstract suspend fun getSuggestions(query: String, maxSuggestions: Int): List - if (response.isSuccessful) { - val responseBody = response.body()?.string() - return@withContext JSONArray(responseBody).optJSONArray(1)?.let { array -> - (0 until array.length()).take(max).map { array.getString(it) } - } ?: emptyList() - } else { - Log.d("Failed to retrieve suggestions", ": ${response.code()}") - return@withContext emptyList() + /** + * Function to get the search URL for the current provider + * @param query The input text + */ + abstract fun getSearchUrl(query: String): String + + companion object { + fun fromString(value: String): WebSearchProvider = when (value) { + "google" -> Google + "duckduckgo" -> DuckDuckGo + else -> StartPage } - } catch (e: Exception) { - Log.e("Exception", "Error during suggestion retrieval: ${e.message}") - return@withContext emptyList() + + /** + * The list of available web search providers + */ + fun values() = listOf( + Google, + StartPage, + DuckDuckGo, + ) } } -interface StartPageService { +/** + * A popular search engine + */ +data object Google : WebSearchProvider() { + override val label = R.string.search_provider_google + + override val iconRes = R.drawable.ic_super_g_color + + override val baseUrl = "https://www.google.com/" + + override val service: GoogleService + get() = retrofit.create() + + override suspend fun getSuggestions(query: String, maxSuggestions: Int): List = + withContext(Dispatchers.IO) { + if (query.isBlank() || maxSuggestions <= 0) { + return@withContext emptyList() + } + + try { + val response: Response = service.getSuggestions(query = query) + + if (response.isSuccessful) { + val responseBody = response.body()?.string() ?: return@withContext emptyList() + + val jsonPayload = Regex("\\((.*)\\)").find(responseBody)?.groupValues?.get(1) + + // Manual JSON parsing + val jsonArray = JSONArray(jsonPayload) + val suggestionsArray = jsonArray.getJSONArray(1) // Get the suggestions array + val suggestionsList = mutableListOf() + for (i in 0 until suggestionsArray.length().coerceAtMost(maxSuggestions)) { + suggestionsList.add(suggestionsArray.getString(i)) + } + return@withContext suggestionsList + } else { + Log.w( + "GoogleSearchProvider", + "Failed to retrieve suggestions: ${response.code()}", + ) + return@withContext emptyList() + } + } catch (e: Exception) { + Log.e("GoogleSearchProvider", "Error during suggestion retrieval: ${e.message}") + return@withContext emptyList() + } + } + + override fun getSearchUrl(query: String) = "https://google.com/search?q=$query" + + override fun toString() = "google" +} + +/** + * A Google-like search engine. + */ +data object StartPage : WebSearchProvider() { + override val label = R.string.search_provider_startpage + + override val iconRes = R.drawable.ic_startpage + + override val baseUrl = "https://www.startpage.com" + + override val service: StartPageService = retrofit.create() + + override suspend fun getSuggestions(query: String, maxSuggestions: Int): List = + withContext(Dispatchers.IO) { + if (query.isBlank() || maxSuggestions <= 0) { + return@withContext emptyList() + } + + try { + val response: Response = service.getSuggestions( + query = query, + segment = "startpage.lawnchair", + partner = "lawnchair", + format = "opensearch", + ) + + if (response.isSuccessful) { + val responseBody = response.body()?.string() + return@withContext JSONArray(responseBody).optJSONArray(1)?.let { array -> + (0 until array.length()).take(maxSuggestions).map { array.getString(it) } + } ?: emptyList() + } else { + Log.w( + "StartPageSearchProvidr", + "Failed to retrieve suggestions: ${response.code()}", + ) + return@withContext emptyList() + } + } catch (e: Exception) { + Log.e("StartPageSearchProvider", "Error during suggestion retrieval: ${e.message}") + return@withContext emptyList() + } + } + + override fun getSearchUrl(query: String) = "https://www.startpage.com/do/search?segment=startpage.lawnchair&query=$query&cat=web" + + override fun toString() = "startpage" +} + +/** + * An fast, alternative engine to Google. + */ +data object DuckDuckGo : WebSearchProvider() { + override val label = R.string.search_provider_duckduckgo + + override val iconRes = R.drawable.ic_duckduckgo + + override val baseUrl = "https://ac.duckduckgo.com/" + + override val service: DuckDuckGoService by lazy { retrofit.create() } + + override suspend fun getSuggestions(query: String, maxSuggestions: Int): List = + withContext(Dispatchers.IO) { + if (query.isBlank() || maxSuggestions <= 0) { + return@withContext emptyList() + } + + try { + val response: Response = service.getSuggestions(query = query) + + if (response.isSuccessful) { + val responseBody = response.body()?.string() ?: return@withContext emptyList() + + val jsonArray = JSONArray(responseBody) + val suggestionsArray = + jsonArray.optJSONArray(1) ?: return@withContext emptyList() + + return@withContext ( + 0 until suggestionsArray.length() + .coerceAtMost(maxSuggestions) + ) + .map { suggestionsArray.getString(it) } + } else { + Log.w( + "DuckDuckGoSearchProvider", + "Failed to retrieve suggestions: ${response.code()}", + ) + return@withContext emptyList() + } + } catch (e: Exception) { + Log.e("DuckDuckGoSearchProvider", "Error during suggestion retrieval", e) + return@withContext emptyList() + } + } + + override fun getSearchUrl(query: String) = "https://duckduckgo.com/$query&cat=web" + + override fun toString() = "duckduckgo" +} + +/** + * Provides an interface for getting search suggestions from the web. + */ +interface GenericSearchService + +/** + * Web suggestions for [WebSearchProvider.Google] + */ +interface GoogleService : GenericSearchService { + @GET("complete/search") + suspend fun getSuggestions( + @Query("client") client: String = "firefox", + @Query("q") query: String, + @Query("callback") callback: String = "json", + ): Response +} + +/** + * Web suggestions for [WebSearchProvider.StartPage]. + */ +interface StartPageService : GenericSearchService { @GET("suggestions") - suspend fun getStartPageSuggestions( + suspend fun getSuggestions( @Query("q") query: String, @Query("segment") segment: String, @Query("partner") partner: String, @Query("format") format: String, ): Response } + +/** + * Web suggestions for [WebSearchProvider.DuckDuckGo]. + */ +interface DuckDuckGoService : GenericSearchService { + @GET("ac/") + suspend fun getSuggestions( + @Query("q") query: String, + @Query("type") type: String = "list", + @Query("callback") callback: String = "jsonCallback", + ): Response +} diff --git a/lawnchair/src/app/lawnchair/search/adapter/SearchResult.kt b/lawnchair/src/app/lawnchair/search/model/SearchResult.kt similarity index 68% rename from lawnchair/src/app/lawnchair/search/adapter/SearchResult.kt rename to lawnchair/src/app/lawnchair/search/model/SearchResult.kt index daf90504a32..8ff69b389d5 100644 --- a/lawnchair/src/app/lawnchair/search/adapter/SearchResult.kt +++ b/lawnchair/src/app/lawnchair/search/model/SearchResult.kt @@ -1,4 +1,4 @@ -package app.lawnchair.search.adapter +package app.lawnchair.search.model data class SearchResult( val resultType: String, diff --git a/lawnchair/src/app/lawnchair/search/adapter/SearchResultActionCallBack.kt b/lawnchair/src/app/lawnchair/search/model/SearchResultActionCallBack.kt similarity index 61% rename from lawnchair/src/app/lawnchair/search/adapter/SearchResultActionCallBack.kt rename to lawnchair/src/app/lawnchair/search/model/SearchResultActionCallBack.kt index 79f6224ebcb..9d6718d2d25 100644 --- a/lawnchair/src/app/lawnchair/search/adapter/SearchResultActionCallBack.kt +++ b/lawnchair/src/app/lawnchair/search/model/SearchResultActionCallBack.kt @@ -1,4 +1,4 @@ -package app.lawnchair.search.adapter +package app.lawnchair.search.model interface SearchResultActionCallBack { fun action() diff --git a/lawnchair/src/app/lawnchair/smartspace/SmartspacerView.kt b/lawnchair/src/app/lawnchair/smartspace/SmartspacerView.kt index abfd79ed306..4445a35929a 100644 --- a/lawnchair/src/app/lawnchair/smartspace/SmartspacerView.kt +++ b/lawnchair/src/app/lawnchair/smartspace/SmartspacerView.kt @@ -8,6 +8,8 @@ import android.util.AttributeSet import android.view.View import app.lawnchair.LawnchairLauncher import app.lawnchair.launcher +import app.lawnchair.preferences2.PreferenceManager2 +import app.lawnchair.preferences2.subscribeBlocking import app.lawnchair.ui.preferences.PreferenceActivity import app.lawnchair.ui.preferences.navigation.Routes import com.android.launcher3.R @@ -17,10 +19,22 @@ import com.kieronquinn.app.smartspacer.sdk.client.R as SmartspacerR import com.kieronquinn.app.smartspacer.sdk.client.views.BcSmartspaceView import com.kieronquinn.app.smartspacer.sdk.client.views.popup.Popup import com.kieronquinn.app.smartspacer.sdk.client.views.popup.PopupFactory +import com.kieronquinn.app.smartspacer.sdk.model.SmartspaceConfig import com.kieronquinn.app.smartspacer.sdk.model.SmartspaceTarget +import com.kieronquinn.app.smartspacer.sdk.model.UiSurface +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers class SmartspacerView(context: Context, attrs: AttributeSet?) : BcSmartspaceView(context, attrs) { + private val prefs2 = PreferenceManager2.getInstance(context) + private val coroutineScope = CoroutineScope(Dispatchers.Default) + private var targetCount = 5 + init { + prefs2.smartspacerMaxCount.subscribeBlocking(coroutineScope) { + targetCount = it + } + popupFactory = object : PopupFactory { override fun createPopup( context: Context, @@ -54,6 +68,12 @@ class SmartspacerView(context: Context, attrs: AttributeSet?) : BcSmartspaceView } } + override val config = SmartspaceConfig( + targetCount, + UiSurface.HOMESCREEN, + context.packageName, + ) + private fun getDismissOption( target: SmartspaceTarget, dismissAction: ((SmartspaceTarget) -> Unit)?, diff --git a/lawnchair/src/app/lawnchair/smartspace/model/SmartspaceMode.kt b/lawnchair/src/app/lawnchair/smartspace/model/SmartspaceMode.kt index b6917909220..332a55dcdae 100644 --- a/lawnchair/src/app/lawnchair/smartspace/model/SmartspaceMode.kt +++ b/lawnchair/src/app/lawnchair/smartspace/model/SmartspaceMode.kt @@ -21,7 +21,7 @@ sealed class SmartspaceMode( } /** - * @return The list of all time format options. + * @return The list of all smartspace options */ fun values() = persistentListOf( LawnchairSmartspace, diff --git a/lawnchair/src/app/lawnchair/theme/ColorSchemeUtils.kt b/lawnchair/src/app/lawnchair/theme/ColorSchemeUtils.kt index 2c4fe014025..d4e91baa1ad 100644 --- a/lawnchair/src/app/lawnchair/theme/ColorSchemeUtils.kt +++ b/lawnchair/src/app/lawnchair/theme/ColorSchemeUtils.kt @@ -1,13 +1,96 @@ package app.lawnchair.theme +import androidx.annotation.FloatRange import androidx.compose.material3.ColorScheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.runtime.remember +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.colorspace.ColorSpaces +import androidx.core.math.MathUtils +import kotlin.math.pow +import kotlin.math.roundToInt + +/** + * Set the luminance(tone) of this color. Chroma may decrease because chroma has a different maximum + * for any given hue and luminance. + * + * @param newLuminance 0 <= newLuminance <= 100; invalid values are corrected. + */ +internal fun Color.setLuminance(@FloatRange(from = 0.0, to = 100.0) newLuminance: Float): Color { + if ((newLuminance < 0.0001) or (newLuminance > 99.9999)) { + // aRGBFromLstar() from monet ColorUtil.java + val y = 100 * labInvf((newLuminance + 16) / 116) + val component = delinearized(y) + return Color( + /* red = */ + component, + /* green = */ + component, + /* blue = */ + component, + ) + } + + val sLAB = this.convert(ColorSpaces.CieLab) + return Color( + /* luminance = */ + newLuminance, + /* a = */ + sLAB.component2(), + /* b = */ + sLAB.component3(), + colorSpace = ColorSpaces.CieLab, + ) + .convert(ColorSpaces.Srgb) +} + +/** Helper method from monet ColorUtils.java */ +private fun labInvf(ft: Float): Float { + val e = 216f / 24389f + val kappa = 24389f / 27f + val ft3 = ft * ft * ft + return if (ft3 > e) { + ft3 + } else { + (116 * ft - 16) / kappa + } +} + +/** + * Helper method from monet ColorUtils.java + * + * Delinearizes an RGB component. + * + * @param rgbComponent 0.0 <= rgb_component <= 100.0, represents linear R/G/B channel + * @return 0 <= output <= 255, color channel converted to regular RGB space + */ +private fun delinearized(rgbComponent: Float): Int { + val normalized = rgbComponent / 100 + val delinearized = + if (normalized <= 0.0031308) { + normalized * 12.92 + } else { + 1.055 * normalized.toDouble().pow(1.0 / 2.4) - 0.055 + } + return MathUtils.clamp((delinearized * 255.0).roundToInt(), 0, 255) +} @Composable fun dev.kdrag0n.monet.theme.ColorScheme.toM3ColorScheme(isDark: Boolean): ColorScheme = remember(this, isDark) { + val neutralVariant4 = neutralVariant(40).setLuminance(4f) + val neutralVariant6 = neutralVariant(40).setLuminance(6f) + val neutralVariant12 = neutralVariant(40).setLuminance(12f) + val neutralVariant17 = neutralVariant(40).setLuminance(17f) + val neutralVariant22 = neutralVariant(40).setLuminance(22f) + val neutralVariant24 = neutralVariant(40).setLuminance(24f) + val neutralVariant87 = neutralVariant(40).setLuminance(87f) + val neutralVariant92 = neutralVariant(40).setLuminance(92f) + val neutralVariant94 = neutralVariant(40).setLuminance(94f) + val neutralVariant96 = neutralVariant(40).setLuminance(96f) + val neutralVariant98 = neutralVariant(40).setLuminance(98f) + if (isDark) { darkColorScheme( primary = primary(80), @@ -21,9 +104,9 @@ fun dev.kdrag0n.monet.theme.ColorScheme.toM3ColorScheme(isDark: Boolean): ColorS onSecondaryContainer = secondary(90), tertiary = tertiary(80), onTertiary = tertiary(20), - background = neutral(10), + background = neutralVariant6, onBackground = neutral(90), - surface = neutral(10), + surface = neutralVariant6, onSurface = neutral(90), surfaceVariant = neutralVariant(30), onSurfaceVariant = neutralVariant(80), @@ -32,9 +115,15 @@ fun dev.kdrag0n.monet.theme.ColorScheme.toM3ColorScheme(isDark: Boolean): ColorS outline = neutralVariant(60), outlineVariant = neutralVariant(30), scrim = neutral(0), - surfaceContainer = neutral(20), - surfaceContainerLow = neutral(20), - surfaceContainerHighest = neutral(30), + + surfaceBright = neutralVariant24, + surfaceDim = neutralVariant6, + surfaceContainerHighest = neutralVariant22, + surfaceContainerHigh = neutralVariant17, + surfaceContainer = neutralVariant12, + surfaceContainerLow = neutralVariant(10), + surfaceContainerLowest = neutralVariant4, + surfaceTint = primary(80), ) } else { lightColorScheme( @@ -47,12 +136,14 @@ fun dev.kdrag0n.monet.theme.ColorScheme.toM3ColorScheme(isDark: Boolean): ColorS onSecondary = secondary(100), secondaryContainer = secondary(90), onSecondaryContainer = secondary(10), + tertiary = tertiary(40), + onTertiary = tertiary(100), tertiaryContainer = tertiary(90), onTertiaryContainer = tertiary(10), - background = neutral(99), - onBackground = neutral(10), - surface = neutral(99), - onSurface = neutral(10), + background = neutralVariant98, + onBackground = neutralVariant(10), + surface = neutralVariant98, + onSurface = neutralVariant(10), surfaceVariant = neutralVariant(90), onSurfaceVariant = neutralVariant(30), inverseSurface = neutral(20), @@ -60,10 +151,15 @@ fun dev.kdrag0n.monet.theme.ColorScheme.toM3ColorScheme(isDark: Boolean): ColorS outline = neutralVariant(50), outlineVariant = neutralVariant(80), scrim = neutral(0), - // Temporary colors until we fully migrate to material-color-utilities - surfaceContainer = neutral(90), - surfaceContainerLow = neutral(95), - surfaceContainerHighest = neutral(90), + + surfaceBright = neutralVariant98, + surfaceDim = neutralVariant87, + surfaceContainerHighest = neutralVariant(90), + surfaceContainerHigh = neutralVariant92, + surfaceContainer = neutralVariant94, + surfaceContainerLow = neutralVariant96, + surfaceContainerLowest = neutralVariant(100), + surfaceTint = primary(40), ) } } diff --git a/lawnchair/src/app/lawnchair/theme/ThemeProvider.kt b/lawnchair/src/app/lawnchair/theme/ThemeProvider.kt index 8602288994f..cf00e3a9c2f 100644 --- a/lawnchair/src/app/lawnchair/theme/ThemeProvider.kt +++ b/lawnchair/src/app/lawnchair/theme/ThemeProvider.kt @@ -7,17 +7,18 @@ import android.content.IntentFilter import android.os.Handler import android.os.Looper import android.os.PatternMatcher -import android.util.SparseArray import androidx.core.graphics.ColorUtils import app.lawnchair.preferences2.PreferenceManager2 import app.lawnchair.theme.color.AndroidColor import app.lawnchair.theme.color.ColorOption +import app.lawnchair.theme.color.ColorStyle import app.lawnchair.theme.color.MonetColorSchemeCompat import app.lawnchair.theme.color.SystemColorScheme import app.lawnchair.ui.theme.getSystemAccent import app.lawnchair.wallpaper.WallpaperManagerCompat import com.android.launcher3.Utilities import com.android.launcher3.util.MainThreadInitializedObject +import com.android.systemui.monet.Style import com.patrykmichalik.opto.core.firstBlocking import com.patrykmichalik.opto.core.onEach import dev.kdrag0n.colorkt.Color @@ -31,14 +32,16 @@ class ThemeProvider(private val context: Context) { private val preferenceManager2 = PreferenceManager2.getInstance(context) private val wallpaperManager = WallpaperManagerCompat.INSTANCE.get(context) private val coroutineScope = CoroutineScope(Dispatchers.Default) + private var accentColor: ColorOption = preferenceManager2.accentColor.firstBlocking() + private var colorStyle: ColorStyle = preferenceManager2.colorStyle.firstBlocking() - private val colorSchemeMap = SparseArray() + private val colorSchemeMap = HashMap, ColorScheme>() private val listeners = mutableListOf() init { if (Utilities.ATLEAST_S) { - colorSchemeMap.append(0, SystemColorScheme(context)) + colorSchemeMap[Pair(0, Style.TONAL_SPOT)] = SystemColorScheme(context) registerOverlayChangedListener() } wallpaperManager.addOnChangeListener(object : WallpaperManagerCompat.OnColorsChangedListener { @@ -52,6 +55,10 @@ class ThemeProvider(private val context: Context) { accentColor = it notifyColorSchemeChanged() } + preferenceManager2.colorStyle.onEach(launchIn = coroutineScope) { + colorStyle = it + notifyColorSchemeChanged() + } } private fun registerOverlayChangedListener() { @@ -61,7 +68,7 @@ class ThemeProvider(private val context: Context) { context.registerReceiver( object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { - colorSchemeMap.append(0, SystemColorScheme(context)) + colorSchemeMap[Pair(0, Style.TONAL_SPOT)] = SystemColorScheme(context) if (accentColor is ColorOption.SystemAccent) { notifyColorSchemeChanged() } @@ -77,22 +84,26 @@ class ThemeProvider(private val context: Context) { is ColorOption.SystemAccent -> systemColorScheme is ColorOption.WallpaperPrimary -> { val wallpaperPrimary = wallpaperManager.wallpaperColors?.primaryColor - getColorScheme(wallpaperPrimary ?: ColorOption.LawnchairBlue.color) + getColorScheme(wallpaperPrimary ?: ColorOption.LawnchairBlue.color, colorStyle.style) } - is ColorOption.CustomColor -> getColorScheme(accentColor.color) - else -> getColorScheme(ColorOption.LawnchairBlue.color) + is ColorOption.CustomColor -> getColorScheme(accentColor.color, colorStyle.style) + else -> getColorScheme(ColorOption.LawnchairBlue.color, colorStyle.style) } private val systemColorScheme get() = when { - Utilities.ATLEAST_S -> getColorScheme(0) - else -> getColorScheme(context.getSystemAccent(darkTheme = false)) + Utilities.ATLEAST_S -> getColorScheme(0, colorStyle.style) + else -> getColorScheme(context.getSystemAccent(darkTheme = false), colorStyle.style) } - private fun getColorScheme(colorInt: Int): ColorScheme { - var colorScheme = colorSchemeMap[colorInt] + private fun getColorScheme( + colorInt: Int, + colorStyle: Style, + ): ColorScheme { + val key = Pair(colorInt, colorStyle) + var colorScheme = colorSchemeMap[key] if (colorScheme == null) { - colorScheme = MonetColorSchemeCompat(colorInt) - colorSchemeMap.append(colorInt, colorScheme) + colorScheme = MonetColorSchemeCompat(colorInt, colorStyle) + colorSchemeMap[key] = colorScheme } return colorScheme } diff --git a/lawnchair/src/app/lawnchair/theme/color/ColorStyles.kt b/lawnchair/src/app/lawnchair/theme/color/ColorStyles.kt new file mode 100644 index 00000000000..a00b361a6f1 --- /dev/null +++ b/lawnchair/src/app/lawnchair/theme/color/ColorStyles.kt @@ -0,0 +1,62 @@ +package app.lawnchair.theme.color + +import androidx.annotation.StringRes +import com.android.launcher3.R +import com.android.systemui.monet.Style + +sealed class ColorStyle( + val style: Style, + @StringRes val nameResourceId: Int, +) { + companion object { + fun fromString(value: String): ColorStyle = when (value) { + "spritz" -> Spritz + "vibrant" -> Vibrant + "expressive" -> Expressive + "rainbow" -> Rainbow + "fruit_salad" -> FruitSalad + "content" -> Content + "monochromatic" -> Monochromatic + else -> TonalSpot // TonalSpot is the default scheme + } + + /** + * @return The list of all color styles modes. + */ + fun values() = listOf( + Spritz, + TonalSpot, + Vibrant, + Expressive, + Rainbow, + FruitSalad, + Content, + Monochromatic, + ) + } +} + +object Spritz : ColorStyle(Style.SPRITZ, R.string.color_style_spritz) { + override fun toString() = "spritz" +} +object TonalSpot : ColorStyle(Style.TONAL_SPOT, R.string.color_style_tonal_spot) { + override fun toString() = "tonal_spot" +} +object Vibrant : ColorStyle(Style.VIBRANT, R.string.color_style_vibrant) { + override fun toString() = "vibrant" +} +object Expressive : ColorStyle(Style.EXPRESSIVE, R.string.color_style_expressive) { + override fun toString() = "expressive" +} +object Rainbow : ColorStyle(Style.RAINBOW, R.string.color_style_rainbow) { + override fun toString() = "rainbow" +} +object FruitSalad : ColorStyle(Style.FRUIT_SALAD, R.string.color_style_fruit_salad) { + override fun toString() = "fruit_salad" +} +object Content : ColorStyle(Style.CONTENT, R.string.color_style_content) { + override fun toString() = "content" +} +object Monochromatic : ColorStyle(Style.MONOCHROMATIC, R.string.color_style_monochromatic) { + override fun toString() = "monochromatic" +} diff --git a/lawnchair/src/app/lawnchair/theme/color/ColorUtils.kt b/lawnchair/src/app/lawnchair/theme/color/ColorUtils.kt index 41d58693f04..8ccf27216e8 100644 --- a/lawnchair/src/app/lawnchair/theme/color/ColorUtils.kt +++ b/lawnchair/src/app/lawnchair/theme/color/ColorUtils.kt @@ -1,6 +1,7 @@ package app.lawnchair.theme.color import android.content.Context +import app.lawnchair.theme.color.tokens.ColorTokens fun generateColor(context: Context): Int { val accentColors = listOf( diff --git a/lawnchair/src/app/lawnchair/theme/color/MonetColorSchemeCompat.kt b/lawnchair/src/app/lawnchair/theme/color/MonetColorSchemeCompat.kt index f8b9fef5c7c..6c3c880e301 100644 --- a/lawnchair/src/app/lawnchair/theme/color/MonetColorSchemeCompat.kt +++ b/lawnchair/src/app/lawnchair/theme/color/MonetColorSchemeCompat.kt @@ -2,20 +2,27 @@ package app.lawnchair.theme.color import androidx.annotation.ColorInt import com.android.systemui.monet.ColorScheme as MonetColorScheme +import com.android.systemui.monet.Style import dev.kdrag0n.colorkt.Color import dev.kdrag0n.monet.theme.ColorScheme import dev.kdrag0n.monet.theme.ColorSwatch -class MonetColorSchemeCompat(@ColorInt private val seedColor: Int) : ColorScheme() { +class MonetColorSchemeCompat( + @ColorInt private val seedColor: Int, + val style: Style = Style.TONAL_SPOT, +) : ColorScheme() { - private val scheme = MonetColorScheme(seedColor, darkTheme = false) + private val scheme = MonetColorScheme( + seedColor, + style, + ) - override val neutral1: ColorSwatch = mapColors(scheme.neutral1) - override val neutral2: ColorSwatch = mapColors(scheme.neutral2) + override val neutral1: ColorSwatch = mapColors(scheme.neutral1.allShades) + override val neutral2: ColorSwatch = mapColors(scheme.neutral2.allShades) - override val accent1: ColorSwatch = mapColors(scheme.accent1) - override val accent2: ColorSwatch = mapColors(scheme.accent2) - override val accent3: ColorSwatch = mapColors(scheme.accent3) + override val accent1: ColorSwatch = mapColors(scheme.accent1.allShades) + override val accent2: ColorSwatch = mapColors(scheme.accent2.allShades) + override val accent3: ColorSwatch = mapColors(scheme.accent3.allShades) private fun mapColors(colors: List): Map { val paletteSize = colors.size diff --git a/lawnchair/src/app/lawnchair/theme/color/ColorStateListToken.kt b/lawnchair/src/app/lawnchair/theme/color/tokens/ColorStateListToken.kt similarity index 96% rename from lawnchair/src/app/lawnchair/theme/color/ColorStateListToken.kt rename to lawnchair/src/app/lawnchair/theme/color/tokens/ColorStateListToken.kt index b9120a96f5e..a33aef09ac8 100644 --- a/lawnchair/src/app/lawnchair/theme/color/ColorStateListToken.kt +++ b/lawnchair/src/app/lawnchair/theme/color/tokens/ColorStateListToken.kt @@ -1,4 +1,4 @@ -package app.lawnchair.theme.color +package app.lawnchair.theme.color.tokens import android.content.Context import android.content.res.ColorStateList diff --git a/lawnchair/src/app/lawnchair/theme/color/ColorStateListTokens.kt b/lawnchair/src/app/lawnchair/theme/color/tokens/ColorStateListTokens.kt similarity index 86% rename from lawnchair/src/app/lawnchair/theme/color/ColorStateListTokens.kt rename to lawnchair/src/app/lawnchair/theme/color/tokens/ColorStateListTokens.kt index bebd10ab761..ffb3ba9d705 100644 --- a/lawnchair/src/app/lawnchair/theme/color/ColorStateListTokens.kt +++ b/lawnchair/src/app/lawnchair/theme/color/tokens/ColorStateListTokens.kt @@ -1,12 +1,13 @@ -package app.lawnchair.theme.color +package app.lawnchair.theme.color.tokens +import android.R import android.content.res.ColorStateList object ColorStateListTokens { val AllAppsTabTextLight = NewColorStateList { context, scheme, uiColorMode -> val states = arrayOf( - intArrayOf(android.R.attr.state_selected), + intArrayOf(R.attr.state_selected), intArrayOf(), ) val colors = intArrayOf( @@ -18,7 +19,7 @@ object ColorStateListTokens { val AllAppsTabTextDark = NewColorStateList { context, scheme, uiColorMode -> val states = arrayOf( - intArrayOf(android.R.attr.state_selected), + intArrayOf(R.attr.state_selected), intArrayOf(), ) val colors = intArrayOf( diff --git a/lawnchair/src/app/lawnchair/theme/color/ColorToken.kt b/lawnchair/src/app/lawnchair/theme/color/tokens/ColorToken.kt similarity index 98% rename from lawnchair/src/app/lawnchair/theme/color/ColorToken.kt rename to lawnchair/src/app/lawnchair/theme/color/tokens/ColorToken.kt index 5fe78241196..6610b9f265d 100644 --- a/lawnchair/src/app/lawnchair/theme/color/ColorToken.kt +++ b/lawnchair/src/app/lawnchair/theme/color/tokens/ColorToken.kt @@ -1,4 +1,4 @@ -package app.lawnchair.theme.color +package app.lawnchair.theme.color.tokens import android.content.Context import android.util.Log @@ -6,6 +6,7 @@ import androidx.core.graphics.ColorUtils import app.lawnchair.theme.ResourceToken import app.lawnchair.theme.ThemeProvider import app.lawnchair.theme.UiColorMode +import app.lawnchair.theme.color.AndroidColor import app.lawnchair.theme.toAndroidColor import com.android.launcher3.R import com.android.launcher3.util.Themes diff --git a/lawnchair/src/app/lawnchair/theme/color/ColorTokenUtils.kt b/lawnchair/src/app/lawnchair/theme/color/tokens/ColorTokenUtils.kt similarity index 93% rename from lawnchair/src/app/lawnchair/theme/color/ColorTokenUtils.kt rename to lawnchair/src/app/lawnchair/theme/color/tokens/ColorTokenUtils.kt index 3bb97a33ec6..12e8dcfdeee 100644 --- a/lawnchair/src/app/lawnchair/theme/color/ColorTokenUtils.kt +++ b/lawnchair/src/app/lawnchair/theme/color/tokens/ColorTokenUtils.kt @@ -1,4 +1,4 @@ -package app.lawnchair.theme.color +package app.lawnchair.theme.color.tokens import android.content.Context import app.lawnchair.preferences.PreferenceManager diff --git a/lawnchair/src/app/lawnchair/theme/color/ColorTokens.kt b/lawnchair/src/app/lawnchair/theme/color/tokens/ColorTokens.kt similarity index 86% rename from lawnchair/src/app/lawnchair/theme/color/ColorTokens.kt rename to lawnchair/src/app/lawnchair/theme/color/tokens/ColorTokens.kt index 6e17f5d08ff..c0ce897a8fd 100644 --- a/lawnchair/src/app/lawnchair/theme/color/ColorTokens.kt +++ b/lawnchair/src/app/lawnchair/theme/color/tokens/ColorTokens.kt @@ -1,4 +1,4 @@ -package app.lawnchair.theme.color +package app.lawnchair.theme.color.tokens import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color @@ -22,6 +22,7 @@ object ColorTokens { val Neutral2_200 = SwatchColorToken(Swatch.Neutral2, Shade.S200) val Neutral2_300 = SwatchColorToken(Swatch.Neutral2, Shade.S300) val Neutral2_500 = SwatchColorToken(Swatch.Neutral2, Shade.S500) + val Neutral2_600 = SwatchColorToken(Swatch.Neutral2, Shade.S600) val Neutral2_700 = SwatchColorToken(Swatch.Neutral2, Shade.S700) val Neutral2_800 = SwatchColorToken(Swatch.Neutral2, Shade.S800) val Neutral2_900 = SwatchColorToken(Swatch.Neutral2, Shade.S900) @@ -35,6 +36,8 @@ object ColorTokens { val Accent1_500 = SwatchColorToken(Swatch.Accent1, Shade.S500) val Accent1_600 = SwatchColorToken(Swatch.Accent1, Shade.S600) val Accent1_700 = SwatchColorToken(Swatch.Accent1, Shade.S700) + val Accent1_900 = SwatchColorToken(Swatch.Accent1, Shade.S900) + val Accent2_50 = SwatchColorToken(Swatch.Accent2, Shade.S50) val Accent2_100 = SwatchColorToken(Swatch.Accent2, Shade.S100) val Accent2_300 = SwatchColorToken(Swatch.Accent2, Shade.S300) @@ -42,11 +45,13 @@ object ColorTokens { val Accent2_600 = SwatchColorToken(Swatch.Accent2, Shade.S600) val Accent2_800 = SwatchColorToken(Swatch.Accent2, Shade.S800) + val Accent3_10 = SwatchColorToken(Swatch.Accent3, Shade.S10) val Accent3_50 = SwatchColorToken(Swatch.Accent3, Shade.S50) val Accent3_100 = SwatchColorToken(Swatch.Accent3, Shade.S100) val Accent3_200 = SwatchColorToken(Swatch.Accent3, Shade.S200) val Accent3_400 = SwatchColorToken(Swatch.Accent3, Shade.S400) val Accent3_600 = SwatchColorToken(Swatch.Accent3, Shade.S600) + val Accent3_800 = SwatchColorToken(Swatch.Accent3, Shade.S800) val SurfaceLight = Neutral1_500.setLStar(98.0) val SurfaceDark = Neutral1_800 @@ -70,16 +75,20 @@ object ColorTokens { @JvmField val TextColorSecondary = DayNightColorToken(StaticColorToken(0xde000000), Neutral2_200) - @JvmField val AllAppsHeaderProtectionColor = DayNightColorToken(Neutral1_100, Neutral1_700) + @JvmField val AllAppsHeaderProtectionColor = DayNightColorToken(Neutral1_100, Neutral2_600.setLStar(15.0)) @JvmField val AllAppsScrimColor = ColorBackground - @JvmField val AllAppsTabBackgroundSelected = DayNightColorToken(Accent1_500, Accent2_500) + @JvmField val AllAppsTabBackground = DayNightColorToken(Neutral2_600.setLStar(90.0), Neutral2_600.setLStar(22.0)) + + @JvmField val AllAppsTabBackgroundSelected = DayNightColorToken(Accent1_600, Accent1_600.setLStar(80.0)) @JvmField val FocusHighlight = DayNightColorToken(Neutral1_0, Neutral1_700) @JvmField val GroupHighlight = Surface + @JvmField val OverviewScrimColor = DayNightColorToken(Neutral2_500.setLStar(87.0), Neutral1_800) + @JvmField val OverviewScrim = DayNightColorToken(Neutral2_500.setLStar(87.0), Neutral1_800) .withPreferences { prefs -> val translucent = prefs.recentsTranslucentBackground.get() @@ -87,7 +96,7 @@ object ColorTokens { if (translucent) setAlpha(translucentIntensity) else this } - @JvmField val SearchboxHighlight = DayNightColorToken(SurfaceVariantLight, Neutral1_800) + @JvmField val SearchboxHighlight = DayNightColorToken(Neutral2_600.setLStar(98.0), Neutral1_800) @JvmField val FolderDotColor = Accent3_100 @@ -127,8 +136,14 @@ object ColorTokens { @JvmField val WorkspaceAccentColor = DarkTextColorToken(Accent1_100, Accent2_600) + @JvmField val DropTargetHoverTextColor = DarkTextColorToken(Accent1_900, Accent1_100) + @JvmField val WidgetListRowColor = DayNightColorToken(Neutral1_10, Neutral2_800) + @JvmField val SurfaceDimColor = DayNightColorToken(Neutral2_600.setLStar(87.0), Neutral2_600.setLStar(6.0)) + + @JvmField val SurfaceBrightColor = DayNightColorToken(Neutral2_600.setLStar(98.0), Neutral2_600.setLStar(24.0)) + val SwitchThumbOn = Accent1_100 val SwitchThumbOff = DayNightColorToken(Neutral2_300, Neutral1_400) val SwitchThumbDisabled = DayNightColorToken(Neutral2_100, Neutral1_700) diff --git a/lawnchair/src/app/lawnchair/theme/drawable/DrawableToken.kt b/lawnchair/src/app/lawnchair/theme/drawable/DrawableToken.kt index 48182945f79..12ee52800c8 100644 --- a/lawnchair/src/app/lawnchair/theme/drawable/DrawableToken.kt +++ b/lawnchair/src/app/lawnchair/theme/drawable/DrawableToken.kt @@ -10,7 +10,7 @@ import androidx.annotation.DrawableRes import androidx.appcompat.content.res.AppCompatResources import app.lawnchair.theme.ResourceToken import app.lawnchair.theme.UiColorMode -import app.lawnchair.theme.color.ColorToken +import app.lawnchair.theme.color.tokens.ColorToken import com.android.launcher3.util.Themes import dev.kdrag0n.monet.theme.ColorScheme diff --git a/lawnchair/src/app/lawnchair/theme/drawable/DrawableTokens.kt b/lawnchair/src/app/lawnchair/theme/drawable/DrawableTokens.kt index aaa0439b575..473ce365d5e 100644 --- a/lawnchair/src/app/lawnchair/theme/drawable/DrawableTokens.kt +++ b/lawnchair/src/app/lawnchair/theme/drawable/DrawableTokens.kt @@ -7,7 +7,7 @@ import android.graphics.drawable.LayerDrawable import android.graphics.drawable.RippleDrawable import android.graphics.drawable.StateListDrawable import androidx.appcompat.content.res.AppCompatResources -import app.lawnchair.theme.color.ColorTokens +import app.lawnchair.theme.color.tokens.ColorTokens import com.android.launcher3.R object DrawableTokens { diff --git a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceActivity.kt b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceActivity.kt index 19bf9f12be0..d1d71aaf63d 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceActivity.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceActivity.kt @@ -16,9 +16,7 @@ package app.lawnchair.ui.preferences -import android.app.Activity import android.content.Context -import android.content.ContextWrapper import android.content.Intent import android.graphics.Color import android.os.Bundle @@ -73,12 +71,6 @@ class PreferenceActivity : AppCompatActivity() { } } -fun Context.findActivity(): Activity? = when (this) { - is Activity -> this - is ContextWrapper -> baseContext.findActivity() - else -> null -} - /** * The default light scrim, as defined by androidx and the platform: * https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:activity/activity/src/main/java/androidx/activity/EdgeToEdge.kt;l=35-38;drc=27e7d52e8604a080133e8b842db10c89b4482598 diff --git a/lawnchair/src/app/lawnchair/ui/preferences/about/About.kt b/lawnchair/src/app/lawnchair/ui/preferences/about/About.kt index 266f44629a9..085f5512c22 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/about/About.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/about/About.kt @@ -149,7 +149,7 @@ private val product = listOf( name = "Yasan Glass", role = Role.Development, photoUrl = "https://avatars.githubusercontent.com/u/41836211", - socialUrl = "https:/yasan.glass", + socialUrl = "https://yasan.glass", ), ) @@ -216,7 +216,7 @@ fun About( PreferenceLayout( label = stringResource(id = R.string.about_label), modifier = modifier, - backArrowVisible = LocalIsExpandedScreen.current, + backArrowVisible = !LocalIsExpandedScreen.current, horizontalAlignment = Alignment.CenterHorizontally, ) { Column( @@ -298,8 +298,19 @@ fun About( } }, ) + ClickablePreference( + label = stringResource(id = R.string.donate), + onClick = { + val webpage = Uri.parse(OPENCOLLECTIVE_FUNDING_URL) + val intent = Intent(Intent.ACTION_VIEW, webpage) + if (intent.resolveActivity(context.packageManager) != null) { + context.startActivity(intent) + } + }, + ) } } } +private const val OPENCOLLECTIVE_FUNDING_URL = "https://opencollective.com/lawnchair" private const val CROWDIN_URL = "https://lawnchair.crowdin.com/lawnchair" diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/AnnouncementPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/AnnouncementPreference.kt index 1c9a0d98855..f0931605464 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/AnnouncementPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/AnnouncementPreference.kt @@ -7,29 +7,32 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.rounded.Launch -import androidx.compose.material.icons.rounded.Close import androidx.compose.material.icons.rounded.NewReleases import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface +import androidx.compose.material3.SwipeToDismissBox +import androidx.compose.material3.SwipeToDismissBoxValue import androidx.compose.material3.Text +import androidx.compose.material3.rememberSwipeToDismissBoxState +import androidx.compose.material3.surfaceColorAtElevation import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -40,6 +43,7 @@ import app.lawnchair.ui.preferences.data.liveinfo.liveInformationManager import app.lawnchair.ui.preferences.data.liveinfo.model.Announcement import app.lawnchair.ui.util.addIf import com.android.launcher3.BuildConfig +import com.android.launcher3.R import kotlinx.collections.immutable.ImmutableList @Composable @@ -66,7 +70,7 @@ fun AnnouncementPreference( modifier = modifier, ) { announcements.forEachIndexed { index, announcement -> - var show by remember { mutableStateOf(true) } + var show by rememberSaveable { mutableStateOf(true) } AnnouncementItem(show, announcement) { show = false } if (index != announcements.lastIndex && show && (!announcement.test || BuildConfig.DEBUG)) { Spacer(modifier = Modifier.height(16.dp)) @@ -103,13 +107,60 @@ private fun AnnouncementItemContent( modifier: Modifier = Modifier, onClose: () -> Unit, ) { - Surface( - modifier = modifier - .padding(16.dp, 0.dp, 16.dp, 0.dp), - shape = MaterialTheme.shapes.large, - color = MaterialTheme.colorScheme.surfaceVariant, + val state = rememberSwipeToDismissBoxState( + confirmValueChange = { + when (it) { + SwipeToDismissBoxValue.StartToEnd -> { + onClose() + } + SwipeToDismissBoxValue.EndToStart -> return@rememberSwipeToDismissBoxState false + SwipeToDismissBoxValue.Settled -> return@rememberSwipeToDismissBoxState false + } + return@rememberSwipeToDismissBoxState true + }, + ) + + SwipeToDismissBox( + state = state, + enableDismissFromEndToStart = false, + backgroundContent = { + Surface( + modifier = modifier + .alpha( + if (state.dismissDirection != SwipeToDismissBoxValue.StartToEnd) 1f else calculateAlpha(state.progress), + ) + .fillMaxSize() + .padding(16.dp, 0.dp, 16.dp, 0.dp), + shape = MaterialTheme.shapes.large, + color = MaterialTheme.colorScheme.surfaceColorAtElevation(1.dp), + ) { + PreferenceTemplate( + {}, + description = { + Text(stringResource(R.string.accessibility_close)) + }, + ) + } + }, ) { - AnnouncementPreferenceItemContent(text = text, url = url, onClose = onClose) + Surface( + modifier = modifier + .alpha( + if (state.dismissDirection != SwipeToDismissBoxValue.StartToEnd) 1f else calculateAlpha(state.progress), + ) + .padding(16.dp, 0.dp, 16.dp, 0.dp), + shape = MaterialTheme.shapes.large, + color = MaterialTheme.colorScheme.surfaceVariant, + ) { + AnnouncementPreferenceItemContent(text = text, url = url) + } + } +} + +private fun calculateAlpha(progress: Float): Float { + return when { + progress < 0.5f -> 1f // Fully opaque until halfway + else -> 1f - (progress - 0.5f) * 2 // Fade out linearly from halfway to the end } } @@ -118,7 +169,6 @@ private fun AnnouncementPreferenceItemContent( text: String, url: String?, modifier: Modifier = Modifier, - onClose: (() -> Unit)?, ) { val context = LocalContext.current val hasLink = !url.isNullOrBlank() @@ -165,19 +215,6 @@ private fun AnnouncementPreferenceItemContent( } Spacer(modifier = Modifier.width(8.dp)) - - if (onClose != null) { - IconButton( - onClick = onClose, - modifier = Modifier.size(16.dp).offset(x = (8).dp, y = (-16).dp), - ) { - Icon( - imageVector = Icons.Rounded.Close, - tint = MaterialTheme.colorScheme.surfaceTint, - contentDescription = null, - ) - } - } } }, ) @@ -189,7 +226,6 @@ private fun InfoPreferenceWithoutLinkPreview() { AnnouncementPreferenceItemContent( text = "Very important announcement ", url = "", - onClose = null, ) } @@ -199,6 +235,5 @@ private fun InfoPreferenceWithLinkPreview() { AnnouncementPreferenceItemContent( text = "Very important announcement with a very important link", url = "https://lawnchair.app/", - onClose = null, ) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/QuickActionsPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/QuickActionsPreferences.kt new file mode 100644 index 00000000000..3be4eaac38a --- /dev/null +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/QuickActionsPreferences.kt @@ -0,0 +1,286 @@ +package app.lawnchair.ui.preferences.components + +import android.view.HapticFeedbackConstants +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.DragHandle +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.material3.ripple +import androidx.compose.runtime.Composable +import androidx.compose.runtime.key +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalView +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.CustomAccessibilityAction +import androidx.compose.ui.semantics.customActions +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.unit.dp +import app.lawnchair.preferences.PreferenceAdapter +import app.lawnchair.ui.preferences.components.controls.ClickablePreference +import app.lawnchair.ui.preferences.components.layout.ExpandAndShrink +import app.lawnchair.ui.preferences.components.layout.PreferenceGroup +import app.lawnchair.ui.preferences.components.layout.PreferenceGroupHeading +import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate +import com.android.launcher3.R +import com.android.launcher3.Utilities +import sh.calvin.reorderable.ReorderableColumn +import sh.calvin.reorderable.ReorderableScope + +data class RecentsQuickAction( + val id: Int, + val label: String, + val adapter: PreferenceAdapter, + val description: String? = null, +) + +fun sortListByIdOrder(list: List, order: String): List { + val orderList = order.split(",").map { it.toInt() } + return list.sortedBy { orderList.indexOf(it.id) } +} + +private const val DEFAULT_ORDER = "0,1,2,3,4" + +@Composable +fun QuickActionsPreferences( + adapter: PreferenceAdapter, + items: List, + modifier: Modifier = Modifier, +) { + QuickActionsPreferences( + order = adapter.state.value, + onOrderChange = adapter::onChange, + items = items, + modifier = modifier, + ) +} + +@Composable +fun QuickActionsPreferences( + order: String, + onOrderChange: (String) -> Unit, + items: List, + modifier: Modifier = Modifier, +) { + var orderedItems = sortListByIdOrder(items, order) + + val isAnyDragging = remember { mutableStateOf(false) } + val lastItemIdIndex = remember { mutableIntStateOf(4) } + + val view = LocalView.current + + Column(modifier) { + PreferenceGroupHeading( + stringResource(id = R.string.recents_actions_label), + ) + Surface( + modifier = Modifier.padding(horizontal = 16.dp), + shape = MaterialTheme.shapes.large, + tonalElevation = if (!isAnyDragging.value) 1.dp else 0.dp, + ) { + ReorderableColumn( + modifier = Modifier, + list = orderedItems, + onSettle = { fromIndex, toIndex -> + orderedItems = orderedItems.toMutableList().apply { + add(toIndex, removeAt(fromIndex)) + }.toList().also { items -> + onOrderChange( + items.map { it.id }.joinToString(separator = ","), + ) + isAnyDragging.value = false + lastItemIdIndex.intValue = items.last().id + } + }, + onMove = { + isAnyDragging.value = true + if (Utilities.ATLEAST_U) { + view.performHapticFeedback(HapticFeedbackConstants.SEGMENT_FREQUENT_TICK) + } + }, + ) { index, item, isDragging -> + key(item.id) { + val scope = this + + val interactionSource = remember { MutableInteractionSource() } + + Card( + elevation = if (isDragging) { + CardDefaults.elevatedCardElevation() + } else { + CardDefaults.cardElevation( + 0.dp, + ) + }, + colors = if (isDragging) { + CardDefaults.elevatedCardColors() + } else { + CardDefaults.cardColors( + Color.Transparent, + ) + }, + modifier = Modifier + .semantics { + customActions = listOf( + CustomAccessibilityAction( + label = "Move up", + action = { + if (index > 0) { + orderedItems = + orderedItems + .toMutableList() + .apply { + add(index - 1, removeAt(index)) + } + true + } else { + false + } + }, + ), + CustomAccessibilityAction( + label = "Move down", + action = { + if (index < orderedItems.size - 1) { + orderedItems = + orderedItems + .toMutableList() + .apply { + add(index + 1, removeAt(index)) + } + true + } else { + false + } + }, + ), + ) + }, + ) { + DraggableSwitchPreference( + checked = item.adapter.state.value, + onCheckedChange = item.adapter::onChange, + label = item.label, + description = item.description, + interactionSource = interactionSource, + dragIndicator = { + DragHandle( + interactionSource = interactionSource, + scope = scope, + ) + }, + ) + AnimatedVisibility(visible = !isAnyDragging.value) { + if (index != lastItemIdIndex.intValue) { + HorizontalDivider() + } + } + } + } + } + } + + ExpandAndShrink(visible = order != DEFAULT_ORDER) { + PreferenceGroup { + ClickablePreference(label = stringResource(id = R.string.action_reset)) { + onOrderChange(DEFAULT_ORDER) + } + } + } + } +} + +@Composable +fun DraggableSwitchPreference( + checked: Boolean, + onCheckedChange: (Boolean) -> Unit, + label: String, + interactionSource: MutableInteractionSource, + dragIndicator: @Composable () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + description: String? = null, +) { + PreferenceTemplate( + modifier = modifier.clickable( + enabled = enabled, + onClick = { + onCheckedChange(!checked) + }, + interactionSource = interactionSource, + indication = ripple(), + ), + contentModifier = Modifier + .fillMaxHeight() + .padding(vertical = 16.dp) + .padding(start = 16.dp), + title = { Text(text = label) }, + description = { description?.let { Text(text = it) } }, + startWidget = { + dragIndicator() + }, + endWidget = { + Switch( + modifier = Modifier + .padding(all = 16.dp) + .height(24.dp), + checked = checked, + onCheckedChange = onCheckedChange, + enabled = enabled, + ) + }, + enabled = enabled, + applyPaddings = false, + ) +} + +@Composable +private fun DragHandle( + scope: ReorderableScope, + interactionSource: MutableInteractionSource, + modifier: Modifier = Modifier, +) { + val view = LocalView.current + IconButton( + modifier = with(scope) { + modifier.longPressDraggableHandle( + onDragStarted = { + if (Utilities.ATLEAST_U) { + view.performHapticFeedback(HapticFeedbackConstants.DRAG_START) + } + }, + onDragStopped = { + if (Utilities.ATLEAST_R) { + view.performHapticFeedback(HapticFeedbackConstants.GESTURE_END) + } + }, + ) + }, + onClick = {}, + interactionSource = interactionSource, + ) { + Icon( + imageVector = Icons.Rounded.DragHandle, + contentDescription = "Drag indicator", + modifier = Modifier.width(24.dp), + ) + } +} diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/WebSearchProvider.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/WebSearchProvider.kt new file mode 100644 index 00000000000..424f14d0f4e --- /dev/null +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/WebSearchProvider.kt @@ -0,0 +1,98 @@ +package app.lawnchair.ui.preferences.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import app.lawnchair.preferences.PreferenceAdapter +import app.lawnchair.search.algorithms.data.WebSearchProvider +import app.lawnchair.ui.preferences.components.controls.ListPreferenceEntry +import app.lawnchair.ui.preferences.components.layout.Chip +import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate +import com.android.launcher3.R +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.toPersistentList + +@Composable +fun WebSearchProvider( + adapter: PreferenceAdapter, + modifier: Modifier = Modifier, +) { + val entries = remember { + WebSearchProvider.values().map { mode -> + ListPreferenceEntry( + value = mode, + label = { stringResource(id = mode.label) }, + ) + }.toPersistentList() + } + + ListPreferenceChips( + adapter = adapter, + entries = entries, + label = stringResource(R.string.allapps_web_suggestion_provider_label), + modifier = modifier, + ) +} + +@Composable +fun ListPreferenceChips( + adapter: PreferenceAdapter, + entries: ImmutableList>, + label: String, + modifier: Modifier = Modifier, + enabled: Boolean = true, +) { + ListPreferenceChips( + entries = entries, + value = adapter.state.value, + onValueChange = adapter::onChange, + label = label, + modifier = modifier, + enabled = enabled, + ) +} + +@Composable +fun ListPreferenceChips( + entries: ImmutableList>, + value: T, + onValueChange: (T) -> Unit, + label: String, + modifier: Modifier = Modifier, + enabled: Boolean = true, +) { + PreferenceTemplate( + modifier = modifier, + contentModifier = Modifier + .fillMaxHeight() + .padding(vertical = 16.dp) + .padding(start = 16.dp), + title = { Text(text = label) }, + description = { + Row( + horizontalArrangement = Arrangement.spacedBy(space = 8.dp), + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp), + ) { + entries.forEach { item -> + Chip( + label = item.label(), + selected = item.value == value, + onClick = { onValueChange(item.value) }, + ) + } + } + }, + enabled = enabled, + applyPaddings = false, + ) +} diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorPreferenceModelList.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorPreferenceModelList.kt index e2e2f49c945..222c23431fe 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorPreferenceModelList.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorPreferenceModelList.kt @@ -17,6 +17,13 @@ class ColorPreferenceModelList(context: Context) { dynamicEntries = dynamicColors, ), ) + registerModel( + ColorPreferenceModel( + prefObject = prefs.strokeColorStyle, + labelRes = R.string.qsb_hotseat_stroke_color, + dynamicEntries = dynamicColors, + ), + ) registerModel( ColorPreferenceModel( prefObject = prefs.notificationDotColor, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorSelectionPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorSelectionPreference.kt index bcc6e316745..cb9847ef73b 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorSelectionPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorSelectionPreference.kt @@ -54,8 +54,8 @@ fun ColorSelection( } val defaultTabIndex = when { dynamicEntries.any { it.value == appliedColor } -> 0 - staticEntries.any { it.value == appliedColor } -> 1 - else -> 2 + staticEntries.any { it.value == appliedColor } -> 0 + else -> 1 } val onPresetClick = { option: ColorOption -> diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/controls/PreferenceCategory.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/controls/PreferenceCategory.kt index 4d1128074f8..7775e820276 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/controls/PreferenceCategory.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/controls/PreferenceCategory.kt @@ -19,17 +19,14 @@ package app.lawnchair.ui.preferences.components.controls import androidx.annotation.DrawableRes import androidx.compose.foundation.background import androidx.compose.foundation.clickable -import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.material3.ripple import androidx.compose.material3.surfaceColorAtElevation import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -54,13 +51,7 @@ fun PreferenceCategory( modifier = modifier .padding(horizontal = 16.dp) .clip(MaterialTheme.shapes.large) - .clickable( - interactionSource = remember { MutableInteractionSource() }, - indication = ripple( - bounded = true, - color = MaterialTheme.colorScheme.primaryContainer, - ), - ) { onNavigate() } + .clickable { onNavigate() } .background( if (isSelected) MaterialTheme.colorScheme.surfaceColorAtElevation(4.dp) else Color.Transparent, ), diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SwitchPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SwitchPreference.kt index 35f8ea07cef..86c548a59ea 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SwitchPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SwitchPreference.kt @@ -18,6 +18,7 @@ package app.lawnchair.ui.preferences.components.controls import androidx.compose.foundation.background import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.height @@ -25,7 +26,9 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.material3.Switch import androidx.compose.material3.Text +import androidx.compose.material3.ripple import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import app.lawnchair.preferences.PreferenceAdapter @@ -68,8 +71,14 @@ fun SwitchPreference( enabled: Boolean = true, onClick: (() -> Unit)? = null, ) { + val interactionSource = remember { MutableInteractionSource() } + PreferenceTemplate( - modifier = modifier.clickable(enabled = enabled) { + modifier = modifier.clickable( + enabled = enabled, + indication = ripple(), + interactionSource = interactionSource, + ) { if (onClick != null) { onClick() } else { @@ -99,6 +108,7 @@ fun SwitchPreference( checked = checked, onCheckedChange = onCheckedChange, enabled = enabled, + interactionSource = interactionSource, ) }, enabled = enabled, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/layout/PreferenceGroup.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/layout/PreferenceGroup.kt index 3bd4ec0bf53..6f42b008dc7 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/layout/PreferenceGroup.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/layout/PreferenceGroup.kt @@ -29,6 +29,8 @@ import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.semantics.heading +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @@ -88,6 +90,7 @@ fun PreferenceGroupHeading( text = heading, style = MaterialTheme.typography.titleSmall, color = MaterialTheme.colorScheme.primary, + modifier = Modifier.semantics { this.heading() }, ) } } else { diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/layout/PreferenceTemplate.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/layout/PreferenceTemplate.kt index 1c1c7dceed1..96f0e2fb860 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/layout/PreferenceTemplate.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/layout/PreferenceTemplate.kt @@ -32,6 +32,7 @@ import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import app.lawnchair.ui.util.addIf @@ -59,6 +60,7 @@ fun PreferenceTemplate( verticalAlignment = verticalAlignment, modifier = modifier .height(IntrinsicSize.Min) + .semantics(mergeDescendants = true) {} .fillMaxWidth() .addIf(applyPaddings) { padding(horizontal = horizontalPadding, vertical = verticalPadding) diff --git a/lawnchair/src/app/lawnchair/ui/preferences/data/liveinfo/model/LiveInformation.kt b/lawnchair/src/app/lawnchair/ui/preferences/data/liveinfo/model/LiveInformation.kt index b119399315d..cd69edc2230 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/data/liveinfo/model/LiveInformation.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/data/liveinfo/model/LiveInformation.kt @@ -6,6 +6,7 @@ import kotlinx.serialization.Serializable @Serializable data class LiveInformation( + private val version: Int = 1, private val announcements: List, ) { @@ -14,6 +15,7 @@ data class LiveInformation( companion object { val default = LiveInformation( + version = 1, announcements = emptyList(), ) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/DebugMenuPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/DebugMenuPreferences.kt index ce190559430..8e8d96afc22 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/DebugMenuPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/DebugMenuPreferences.kt @@ -11,6 +11,7 @@ import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences.preferenceManager import app.lawnchair.preferences2.PreferenceManager2 import app.lawnchair.preferences2.preferenceManager2 +import app.lawnchair.ui.preferences.LocalIsExpandedScreen import app.lawnchair.ui.preferences.components.controls.ClickablePreference import app.lawnchair.ui.preferences.components.controls.MainSwitchPreference import app.lawnchair.ui.preferences.components.controls.SwitchPreference @@ -38,13 +39,14 @@ fun DebugMenuPreferences( val enableDebug = prefs.enableDebugMenu.getAdapter() PreferenceLayout( - label = "Debug Menu", + label = "Debug menu", + backArrowVisible = !LocalIsExpandedScreen.current, modifier = modifier, ) { - MainSwitchPreference(adapter = enableDebug, label = "Show Debug Menu") { + MainSwitchPreference(adapter = enableDebug, label = "Show debug menu") { PreferenceGroup { ClickablePreference( - label = "Feature Flags", + label = "Feature flags", onClick = { Intent(context, SettingsActivity::class.java) .putExtra( @@ -55,12 +57,12 @@ fun DebugMenuPreferences( }, ) ClickablePreference( - label = "Crash Launcher", + label = "Crash launcher", onClick = { throw RuntimeException("User triggered crash") }, ) } - PreferenceGroup(heading = "Debug Flags") { + PreferenceGroup(heading = "Debug flags") { flags2.forEach { SwitchPreference( adapter = it.getAdapter(), @@ -91,11 +93,4 @@ private val PreferenceManager2.textFlags: List 0f) { + ColorPreference(preference = prefs2.strokeColorStyle) + } } } } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt index 4e0f6688711..39a2920a23a 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt @@ -44,11 +44,6 @@ fun ExperimentalFeaturesPreferences( label = stringResource(id = R.string.always_reload_icons_label), description = stringResource(id = R.string.always_reload_icons_description), ) - SwitchPreference( - adapter = prefs.recentsActionLocked.getAdapter(), - label = stringResource(id = R.string.recents_lock_unlock), - description = stringResource(id = R.string.recents_lock_unlock_description), - ) } } } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/GeneralPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/GeneralPreferences.kt index 666686365e5..6b2935f9a99 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/GeneralPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/GeneralPreferences.kt @@ -23,11 +23,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.lifecycle.compose.collectAsStateWithLifecycle +import app.lawnchair.preferences.PreferenceAdapter import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences.preferenceManager import app.lawnchair.preferences2.asState import app.lawnchair.preferences2.preferenceManager2 import app.lawnchair.theme.color.ColorOption +import app.lawnchair.theme.color.ColorStyle import app.lawnchair.ui.preferences.LocalIsExpandedScreen import app.lawnchair.ui.preferences.LocalPreferenceInteractor import app.lawnchair.ui.preferences.components.FontPreference @@ -36,6 +38,8 @@ import app.lawnchair.ui.preferences.components.NotificationDotsPreference import app.lawnchair.ui.preferences.components.ThemePreference import app.lawnchair.ui.preferences.components.colorpreference.ColorContrastWarning import app.lawnchair.ui.preferences.components.colorpreference.ColorPreference +import app.lawnchair.ui.preferences.components.controls.ListPreference +import app.lawnchair.ui.preferences.components.controls.ListPreferenceEntry import app.lawnchair.ui.preferences.components.controls.SliderPreference import app.lawnchair.ui.preferences.components.controls.SwitchPreference import app.lawnchair.ui.preferences.components.controls.WarningPreference @@ -46,6 +50,8 @@ import app.lawnchair.ui.preferences.components.layout.PreferenceLayout import app.lawnchair.ui.preferences.components.notificationDotsEnabled import app.lawnchair.ui.preferences.components.notificationServiceEnabled import com.android.launcher3.R +import com.android.launcher3.Utilities +import kotlinx.collections.immutable.toPersistentList object GeneralRoutes { const val ICON_PACK = "iconPack" @@ -119,7 +125,7 @@ fun GeneralPreferences() { } } val wrapAdaptiveIcons = prefs.wrapAdaptiveIcons.getAdapter() - val transparentIconBackground = prefs.transparentIconBackground.getAdapter() + PreferenceGroup( heading = stringResource(id = R.string.icons), description = stringResource(id = (R.string.adaptive_icon_background_description)), @@ -165,6 +171,13 @@ fun GeneralPreferences() { PreferenceGroup(heading = stringResource(id = R.string.colors)) { ThemePreference() ColorPreference(preference = prefs2.accentColor) + if (Utilities.ATLEAST_S && prefs2.accentColor.getAdapter().state.value == ColorOption.SystemAccent) { + if (!Utilities.ATLEAST_S) { + ColorStylePreference(prefs2.colorStyle.getAdapter()) + } + } else { + ColorStylePreference(prefs2.colorStyle.getAdapter()) + } } PreferenceGroup(heading = stringResource(id = R.string.notification_dots)) { @@ -192,6 +205,28 @@ fun GeneralPreferences() { } } +@Composable +private fun ColorStylePreference( + adapter: PreferenceAdapter, + modifier: Modifier = Modifier, +) { + val entries = remember { + ColorStyle.values().map { mode -> + ListPreferenceEntry( + value = mode, + label = { stringResource(id = mode.nameResourceId) }, + ) + }.toPersistentList() + } + + ListPreference( + adapter = adapter, + entries = entries, + label = stringResource(id = R.string.color_style_label), + modifier = modifier, + ) +} + @Composable private fun NotificationDotColorContrastWarnings( dotColor: ColorOption, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenPreferences.kt index 9c7b3a68020..c378ec3fedd 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenPreferences.kt @@ -107,6 +107,31 @@ fun HomeScreenPreferences( adapter = prefs2.showTopShadow.getAdapter(), label = stringResource(id = R.string.show_sys_ui_scrim), ) + + val enableWallpaperBlur = prefs.enableWallpaperBlur.getAdapter() + + SwitchPreference( + adapter = enableWallpaperBlur, + label = stringResource(id = R.string.wallpaper_blur), + ) + ExpandAndShrink(visible = enableWallpaperBlur.state.value) { + SliderPreference( + label = stringResource(id = R.string.wallpaper_background_blur), + adapter = prefs.wallpaperBlur.getAdapter(), + step = 5, + valueRange = 0..100, + showUnit = "%", + ) + } + ExpandAndShrink(visible = enableWallpaperBlur.state.value) { + SliderPreference( + label = stringResource(id = R.string.wallpaper_background_blur_factor), + adapter = prefs.wallpaperBlurFactorThreshold.getAdapter(), + step = 5, + valueRange = 0..100, + showUnit = "%", + ) + } } PreferenceGroup(heading = stringResource(id = R.string.layout)) { val columns by prefs.workspaceColumns.getAdapter() diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/PreferencesDashboard.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/PreferencesDashboard.kt index 1c6ded92a43..783911cee95 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/PreferencesDashboard.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/PreferencesDashboard.kt @@ -7,8 +7,10 @@ import android.content.Intent import android.content.pm.LauncherApps import android.os.Process import android.provider.Settings +import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding @@ -20,9 +22,11 @@ import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text +import androidx.compose.material3.surfaceColorAtElevation import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp @@ -33,7 +37,6 @@ import app.lawnchair.backup.ui.restoreBackupOpener import app.lawnchair.preferences.observeAsState import app.lawnchair.preferences.preferenceManager import app.lawnchair.ui.OverflowMenu -import app.lawnchair.ui.preferences.LocalNavController import app.lawnchair.ui.preferences.components.AnnouncementPreference import app.lawnchair.ui.preferences.components.controls.PreferenceCategory import app.lawnchair.ui.preferences.components.controls.WarningPreference @@ -43,6 +46,7 @@ import app.lawnchair.ui.preferences.components.layout.PreferenceLayout import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate import app.lawnchair.ui.preferences.data.liveinfo.SyncLiveInformation import app.lawnchair.ui.preferences.navigation.Routes +import app.lawnchair.ui.util.addIf import app.lawnchair.util.isDefaultLauncher import app.lawnchair.util.restartLauncher import com.android.launcher3.BuildConfig @@ -62,7 +66,7 @@ fun PreferencesDashboard( modifier = modifier, verticalArrangement = Arrangement.Top, backArrowVisible = false, - actions = { PreferencesOverflowMenu() }, + actions = { PreferencesOverflowMenu(currentRoute = currentRoute, onNavigate = onNavigate) }, ) { AnnouncementPreference() @@ -161,22 +165,39 @@ fun PreferencesDashboard( } @Composable -fun PreferencesOverflowMenu( +fun RowScope.PreferencesOverflowMenu( + currentRoute: String, + onNavigate: (String) -> Unit, modifier: Modifier = Modifier, ) { - val navController = LocalNavController.current val enableDebug by preferenceManager().enableDebugMenu.observeAsState() + val highlightColor = MaterialTheme.colorScheme.surfaceColorAtElevation(4.dp) + val highlightShape = MaterialTheme.shapes.large + val experimentalFeaturesRoute = Routes.EXPERIMENTAL_FEATURES if (enableDebug) { val resolvedRoute = Routes.DEBUG_MENU ClickableIcon( imageVector = Icons.Rounded.Build, - onClick = { navController.navigate(resolvedRoute) }, + onClick = { onNavigate(resolvedRoute) }, + modifier = Modifier.addIf(currentRoute.contains(resolvedRoute)) { + Modifier + .clip(highlightShape) + .background(highlightColor) + }, ) } val openRestoreBackup = restoreBackupOpener() OverflowMenu( - modifier = modifier, + modifier = modifier.addIf( + listOf(Routes.CREATE_BACKUP, Routes.RESTORE_BACKUP, experimentalFeaturesRoute).any { + currentRoute.contains(it) + }, + ) { + Modifier + .clip(highlightShape) + .background(highlightColor) + }, ) { val context = LocalContext.current DropdownMenuItem(onClick = { @@ -192,14 +213,14 @@ fun PreferencesOverflowMenu( Text(text = stringResource(id = R.string.debug_restart_launcher)) }) DropdownMenuItem(onClick = { - navController.navigate(experimentalFeaturesRoute) + onNavigate(experimentalFeaturesRoute) hideMenu() }, text = { Text(text = stringResource(id = R.string.experimental_features_label)) }) PreferenceDivider(modifier = Modifier.padding(vertical = 8.dp)) DropdownMenuItem(onClick = { - navController.navigate(Routes.CREATE_BACKUP) + onNavigate(Routes.CREATE_BACKUP) hideMenu() }, text = { Text(text = stringResource(id = R.string.create_backup)) diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/QuickstepPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/QuickstepPreferences.kt index b9cc0b3989f..9b1fa4e7af0 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/QuickstepPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/QuickstepPreferences.kt @@ -15,6 +15,8 @@ import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences.observeAsState import app.lawnchair.preferences.preferenceManager import app.lawnchair.preferences2.preferenceManager2 +import app.lawnchair.ui.preferences.components.QuickActionsPreferences +import app.lawnchair.ui.preferences.components.RecentsQuickAction import app.lawnchair.ui.preferences.components.controls.SliderPreference import app.lawnchair.ui.preferences.components.controls.SwitchPreference import app.lawnchair.ui.preferences.components.controls.WarningPreference @@ -37,6 +39,35 @@ fun QuickstepPreferences( context.packageManager.getLaunchIntentForPackage("com.google.ar.lens") != null } + val recentActionsPreferences: List = listOfNotNull( + RecentsQuickAction( + id = 0, + adapter = prefs.recentsActionScreenshot.getAdapter(), + label = stringResource(id = R.string.action_screenshot), + ).takeIf { !isOnePlusStock }, + RecentsQuickAction( + id = 1, + adapter = prefs.recentsActionShare.getAdapter(), + label = stringResource(id = R.string.action_share), + ), + RecentsQuickAction( + id = 2, + adapter = prefs.recentsActionLens.getAdapter(), + label = stringResource(id = R.string.action_lens), + ).takeIf { lensAvailable }, + RecentsQuickAction( + id = 3, + adapter = prefs.recentsActionLocked.getAdapter(), + label = stringResource(id = R.string.recents_lock_unlock), + description = stringResource(id = R.string.recents_lock_unlock_description), + ), + RecentsQuickAction( + id = 4, + adapter = prefs.recentsActionClearAll.getAdapter(), + label = stringResource(id = R.string.recents_clear_all), + ), + ) + PreferenceLayout( label = stringResource(id = R.string.quickstep_label), modifier = modifier, @@ -58,28 +89,12 @@ fun QuickstepPreferences( ) } } - PreferenceGroup(heading = stringResource(id = R.string.recents_actions_label)) { - if (!isOnePlusStock) { - SwitchPreference( - adapter = prefs.recentsActionScreenshot.getAdapter(), - label = stringResource(id = R.string.action_screenshot), - ) - } - SwitchPreference( - adapter = prefs.recentsActionShare.getAdapter(), - label = stringResource(id = R.string.action_share), - ) - if (lensAvailable) { - SwitchPreference( - adapter = prefs.recentsActionLens.getAdapter(), - label = stringResource(id = R.string.action_lens), - ) - } - SwitchPreference( - adapter = prefs.recentsActionClearAll.getAdapter(), - label = stringResource(id = R.string.recents_clear_all), - ) - } + + QuickActionsPreferences( + items = recentActionsPreferences, + adapter = prefs.recentActionOrder.getAdapter(), + ) + val overrideWindowCornerRadius by prefs.overrideWindowCornerRadius.observeAsState() PreferenceGroup( heading = stringResource(id = R.string.window_corner_radius_label), diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/SearchPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/SearchPreferences.kt index 9fbec717e55..bbfb4e16eb6 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/SearchPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/SearchPreferences.kt @@ -23,6 +23,7 @@ import app.lawnchair.search.algorithms.LawnchairSearchAlgorithm import app.lawnchair.ui.preferences.LocalIsExpandedScreen import app.lawnchair.ui.preferences.components.HiddenAppsInSearchPreference import app.lawnchair.ui.preferences.components.SearchSuggestionPreference +import app.lawnchair.ui.preferences.components.WebSearchProvider import app.lawnchair.ui.preferences.components.controls.ListPreference import app.lawnchair.ui.preferences.components.controls.ListPreferenceEntry import app.lawnchair.ui.preferences.components.controls.MainSwitchPreference @@ -66,6 +67,10 @@ fun SearchPreferences() { SearchProvider( context = context, ) + SwitchPreference( + label = stringResource(R.string.allapps_match_qsb_style_label), + adapter = prefs2.matchHotseatQsbStyle.getAdapter(), + ) } PreferenceGroup(heading = stringResource(id = R.string.show_search_result_types)) { @@ -117,6 +122,10 @@ private fun ASISearchSettings(prefs: PreferenceManager) { adapter = prefs.searchResultPixelTips.getAdapter(), label = stringResource(id = R.string.search_pref_result_tips_title), ) + SwitchPreference( + adapter = prefs.searchResultSettings.getAdapter(), + label = stringResource(id = R.string.search_pref_result_settings_title), + ) } @Composable @@ -156,13 +165,14 @@ private fun LocalSearchSettings( android.Manifest.permission.READ_EXTERNAL_STORAGE, ) + val webSuggestionProvider = stringResource(prefs2.webSuggestionProvider.getAdapter().state.value.label) SearchSuggestionPreference( adapter = prefs.searchResultStartPageSuggestion.getAdapter(), - maxCountAdapter = prefs2.maxSuggestionResultCount.getAdapter(), + maxCountAdapter = prefs2.maxWebSuggestionResultCount.getAdapter(), maxCountRange = 3..10, label = stringResource(id = R.string.search_pref_result_web_title), maxCountLabel = stringResource(id = R.string.max_suggestion_result_count_title), - description = stringResource(id = R.string.search_pref_result_web_description), + description = stringResource(id = R.string.search_pref_result_web_provider_description, webSuggestionProvider), ) { SliderPreference( label = stringResource(id = R.string.max_web_suggestion_delay), @@ -171,6 +181,9 @@ private fun LocalSearchSettings( valueRange = 500..5000, showUnit = "ms", ) + WebSearchProvider( + adapter = prefs2.webSuggestionProvider.getAdapter(), + ) } SearchSuggestionPreference( adapter = prefs.searchResultPeople.getAdapter(), diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/SmartspacePreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/SmartspacePreferences.kt index 671a2871ea5..a007edffe7c 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/SmartspacePreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/SmartspacePreferences.kt @@ -8,23 +8,15 @@ import android.view.ContextThemeWrapper import android.view.ViewGroup import android.view.ViewGroup.LayoutParams.MATCH_PARENT import androidx.compose.animation.Crossfade -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.key import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView @@ -39,9 +31,11 @@ import app.lawnchair.smartspace.model.SmartspaceTimeFormat import app.lawnchair.smartspace.model.Smartspacer import app.lawnchair.smartspace.provider.SmartspaceProvider import app.lawnchair.ui.preferences.LocalIsExpandedScreen +import app.lawnchair.ui.preferences.components.controls.ClickablePreference import app.lawnchair.ui.preferences.components.controls.ListPreference import app.lawnchair.ui.preferences.components.controls.ListPreferenceEntry import app.lawnchair.ui.preferences.components.controls.MainSwitchPreference +import app.lawnchair.ui.preferences.components.controls.SliderPreference import app.lawnchair.ui.preferences.components.controls.SwitchPreference import app.lawnchair.ui.preferences.components.controls.TextPreference import app.lawnchair.ui.preferences.components.layout.DividerColumn @@ -81,21 +75,21 @@ fun SmartspacePreferences( PreferenceGroup { SmartspaceProviderPreference( adapter = smartspaceModeAdapter, - endWidget = when (selectedMode) { - Smartspacer -> { - { SmartspacerSettings() } - } - else -> null - }, ) } Crossfade( - targetState = modeIsLawnchair, - label = "", + targetState = selectedMode, + label = "Smartspace setting transision", ) { targetState -> - if (targetState) { - LawnchairSmartspaceSettings(smartspaceProvider) + when (targetState) { + LawnchairSmartspace -> { + LawnchairSmartspaceSettings(smartspaceProvider) + } + Smartspacer -> { + SmartspacerSettings() + } + else -> {} } } } @@ -136,7 +130,6 @@ private fun LawnchairSmartspaceSettings( fun SmartspaceProviderPreference( adapter: PreferenceAdapter, modifier: Modifier = Modifier, - endWidget: (@Composable () -> Unit)? = null, ) { val context = LocalContext.current @@ -155,7 +148,6 @@ fun SmartspaceProviderPreference( entries = entries, label = stringResource(id = R.string.smartspace_mode_label), modifier = modifier, - endWidget = endWidget, ) } @@ -333,24 +325,24 @@ fun SmartspacerSettings( modifier: Modifier = Modifier, ) { val context = LocalContext.current - Box( - contentAlignment = Alignment.Center, - modifier = modifier - .clickable { + val prefs2 = preferenceManager2() + + Column(modifier) { + PreferenceGroup( + heading = stringResource(id = R.string.smartspacer_settings), + ) { + SliderPreference( + label = stringResource(R.string.maximum_number_of_targets), + adapter = prefs2.smartspacerMaxCount.getAdapter(), + valueRange = 5..15, + step = 1, + ) + ClickablePreference(label = stringResource(R.string.open_smartspacer_settings)) { val intent = context.packageManager.getLaunchIntentForPackage( SmartspacerConstants.SMARTSPACER_PACKAGE_NAME, ) context.startActivity(intent) } - .fillMaxHeight() - .padding(horizontal = 16.dp) - .size(32.dp), - ) { - Icon( - painter = painterResource(id = R.drawable.ic_setting), - contentDescription = null, - modifier = Modifier.size(24.dp), - tint = MaterialTheme.colorScheme.primary, - ) + } } } diff --git a/lawnchair/src/app/lawnchair/ui/theme/Color.kt b/lawnchair/src/app/lawnchair/ui/theme/Color.kt index a53ad6fba0d..ca4e829b781 100644 --- a/lawnchair/src/app/lawnchair/ui/theme/Color.kt +++ b/lawnchair/src/app/lawnchair/ui/theme/Color.kt @@ -9,7 +9,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.core.graphics.ColorUtils import app.lawnchair.theme.UiColorMode -import app.lawnchair.theme.color.ColorTokens +import app.lawnchair.theme.color.tokens.ColorTokens import com.android.launcher3.R import com.android.launcher3.Utilities import com.android.launcher3.util.Themes @@ -60,4 +60,4 @@ fun Context.getSystemAccent(darkTheme: Boolean): Int { } @Composable -fun dividerColor() = MaterialTheme.colorScheme.surfaceVariant +fun dividerColor() = MaterialTheme.colorScheme.outlineVariant diff --git a/lawnchair/src/app/lawnchair/ui/theme/Theme.kt b/lawnchair/src/app/lawnchair/ui/theme/Theme.kt index 27300818eb8..48e8dfb6c59 100644 --- a/lawnchair/src/app/lawnchair/ui/theme/Theme.kt +++ b/lawnchair/src/app/lawnchair/ui/theme/Theme.kt @@ -55,11 +55,11 @@ fun getColorScheme(darkTheme: Boolean): ColorScheme { val context = LocalContext.current val preferenceManager2 = preferenceManager2() val accentColor by preferenceManager2.accentColor.asState() - val colorScheme = remember(accentColor) { + val colorStyle by preferenceManager2.colorStyle.asState() + + val colorScheme = remember(accentColor, colorStyle.style) { ThemeProvider.INSTANCE.get(context).colorScheme } -// -// colorScheme.accent1 return colorScheme.toM3ColorScheme(isDark = darkTheme) } diff --git a/lawnchair/src/app/lawnchair/util/ImageViewWrapper.kt b/lawnchair/src/app/lawnchair/util/ImageViewWrapper.kt index 2b369890fd6..415671d9062 100644 --- a/lawnchair/src/app/lawnchair/util/ImageViewWrapper.kt +++ b/lawnchair/src/app/lawnchair/util/ImageViewWrapper.kt @@ -7,7 +7,7 @@ import android.graphics.Path import android.graphics.RectF import android.util.AttributeSet import androidx.appcompat.widget.AppCompatImageView -import app.lawnchair.theme.color.ColorTokens +import app.lawnchair.theme.color.tokens.ColorTokens import com.android.launcher3.R class ImageViewWrapper(context: Context, attrs: AttributeSet?) : AppCompatImageView(context, attrs) { diff --git a/lawnchair/src/app/lawnchair/util/LawnchairUtils.kt b/lawnchair/src/app/lawnchair/util/LawnchairUtils.kt index fc682b4f0cc..26cf5bd2b52 100644 --- a/lawnchair/src/app/lawnchair/util/LawnchairUtils.kt +++ b/lawnchair/src/app/lawnchair/util/LawnchairUtils.kt @@ -29,9 +29,15 @@ import android.content.pm.PackageManager import android.content.pm.ResolveInfo import android.content.res.Resources import android.graphics.Bitmap +import android.graphics.Canvas +import android.graphics.Paint +import android.graphics.RectF +import android.graphics.drawable.BitmapDrawable +import android.graphics.drawable.Drawable import android.net.Uri import android.os.Looper import android.provider.OpenableColumns +import android.util.Log import android.util.Size import android.view.View import android.widget.TextView @@ -39,12 +45,13 @@ import androidx.core.graphics.ColorUtils import androidx.core.os.UserManagerCompat import app.lawnchair.preferences.PreferenceManager import app.lawnchair.preferences2.PreferenceManager2 -import app.lawnchair.theme.color.ColorTokens +import app.lawnchair.theme.color.tokens.ColorTokens import com.android.launcher3.R import com.android.launcher3.Utilities import com.android.launcher3.util.Executors.MAIN_EXECUTOR import com.android.launcher3.util.Themes import com.android.systemui.shared.system.QuickStepContract +import com.google.android.renderscript.Toolkit import com.patrykmichalik.opto.core.firstBlocking import java.util.concurrent.Callable import java.util.concurrent.ExecutionException @@ -245,3 +252,41 @@ fun Context.getDefaultResolveInfo(): ResolveInfo? { val intent = Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME) return packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) } + +fun Drawable.toBitmap(): Bitmap { + if (this is BitmapDrawable) { + return bitmap + } + + val bitmap = Bitmap.createBitmap( + intrinsicWidth.takeIf { it > 0 } ?: 1, + intrinsicHeight.takeIf { it > 0 } ?: 1, + Bitmap.Config.ARGB_8888, + ) + val canvas = Canvas(bitmap) + setBounds(0, 0, canvas.width, canvas.height) + draw(canvas) + + return bitmap +} + +fun createRoundedBitmap(color: Int, cornerRadius: Float): Bitmap { + val bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888) + val canvas = Canvas(bitmap) + val paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + this.color = color + } + val rect = RectF(0f, 0f, canvas.width.toFloat(), canvas.height.toFloat()) + canvas.drawRoundRect(rect, cornerRadius, cornerRadius, paint) + return bitmap +} + +fun blurBitmap(source: Bitmap, percent: Int, factorThreshold: Int = 25): Bitmap { + try { + val factor = percent.toFloat().div(100f) * factorThreshold + return Toolkit.blur(source, factor.toInt()) + } catch (e: Exception) { + Log.e("LawnchairUtil", "Error bluring bitmap: $e") + return source + } +} diff --git a/lawnchair/src/app/lawnchair/views/ComposeBottomSheet.kt b/lawnchair/src/app/lawnchair/views/ComposeBottomSheet.kt index 067bb69fc0e..ba439e413b3 100644 --- a/lawnchair/src/app/lawnchair/views/ComposeBottomSheet.kt +++ b/lawnchair/src/app/lawnchair/views/ComposeBottomSheet.kt @@ -7,8 +7,10 @@ import android.view.ViewGroup import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.animation.Interpolator import android.widget.LinearLayout +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.asPaddingValues @@ -16,6 +18,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.ime import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme @@ -29,7 +32,7 @@ import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.dp -import app.lawnchair.theme.color.ColorTokens +import app.lawnchair.theme.color.tokens.ColorTokens import app.lawnchair.ui.theme.LawnchairTheme import app.lawnchair.util.ProvideLifecycleState import app.lawnchair.util.minus @@ -209,21 +212,28 @@ class ComposeBottomSheet(context: Context) : setImeShift(with(LocalDensity.current) { -translation.calculateBottomPadding().toPx() }) SystemUi(setStatusBar = false) - Surface( - modifier = Modifier - .fillMaxWidth(), - shape = backgroundShape, - color = MaterialTheme.colorScheme.background, + Row( + horizontalArrangement = Arrangement.Center, + modifier = Modifier.fillMaxWidth(), ) { - Box( + Surface( modifier = Modifier - .padding(contentPaddings) - .graphicsLayer( - alpha = 1f - (hintCloseProgress * 0.5f), - translationY = hintCloseProgress * -hintCloseDistance, - ), + .widthIn(max = 640.dp) + .fillMaxWidth(), + shape = backgroundShape, + color = MaterialTheme.colorScheme.background, + ) { - content(this@ComposeBottomSheet) + Box( + modifier = Modifier + .padding(contentPaddings) + .graphicsLayer( + alpha = 1f - (hintCloseProgress * 0.5f), + translationY = hintCloseProgress * -hintCloseDistance, + ), + ) { + content(this@ComposeBottomSheet) + } } } } diff --git a/lawnchair/src/com/android/systemui/monet/ColorScheme.kt b/lawnchair/src/com/android/systemui/monet/ColorScheme.kt index 865359db899..b4888e0e40f 100644 --- a/lawnchair/src/com/android/systemui/monet/ColorScheme.kt +++ b/lawnchair/src/com/android/systemui/monet/ColorScheme.kt @@ -16,83 +16,426 @@ package com.android.systemui.monet +import android.annotation.ColorInt import android.graphics.Color -import androidx.annotation.ColorInt import com.androidinternal.graphics.ColorUtils import com.androidinternal.graphics.cam.Cam +import com.androidinternal.graphics.cam.CamUtils +import kotlin.math.absoluteValue +import kotlin.math.max +import kotlin.math.min +import kotlin.math.roundToInt const val TAG = "ColorScheme" - const val ACCENT1_CHROMA = 48.0f -const val ACCENT2_CHROMA = 16.0f -const val ACCENT3_CHROMA = 32.0f -const val ACCENT3_HUE_SHIFT = 60.0f +const val GOOGLE_BLUE = 0xFF1b6ef3.toInt() +const val MIN_CHROMA = 5 -const val NEUTRAL1_CHROMA = 4.0f -const val NEUTRAL2_CHROMA = 8.0f +internal interface Hue { + fun get(sourceColor: Cam): Double -const val GOOGLE_BLUE = 0xFF1b6ef3.toInt() + /** + * Given a hue, and a mapping of hues to hue rotations, find which hues in the mapping the hue + * fall betweens, and use the hue rotation of the lower hue. + * + * @param sourceHue hue of source color + * @param hueAndRotations list of pairs, where the first item in a pair is a hue, and the second + * item in the pair is a hue rotation that should be applied + */ + fun getHueRotation(sourceHue: Float, hueAndRotations: List>): Double { + val sanitizedSourceHue = (if (sourceHue < 0 || sourceHue >= 360) 0 else sourceHue).toFloat() + for (i in 0..hueAndRotations.size - 2) { + val thisHue = hueAndRotations[i].first.toFloat() + val nextHue = hueAndRotations[i + 1].first.toFloat() + if (thisHue <= sanitizedSourceHue && sanitizedSourceHue < nextHue) { + return ColorScheme.wrapDegreesDouble( + sanitizedSourceHue.toDouble() + hueAndRotations[i].second, + ) + } + } + // If this statement executes, something is wrong, there should have been a rotation + // found using the arrays. + return sourceHue.toDouble() + } +} -const val MIN_CHROMA = 5 +internal class HueSource : Hue { + override fun get(sourceColor: Cam): Double { + return sourceColor.hue.toDouble() + } +} + +internal class HueAdd(val amountDegrees: Double) : Hue { + override fun get(sourceColor: Cam): Double { + return ColorScheme.wrapDegreesDouble(sourceColor.hue.toDouble() + amountDegrees) + } +} + +internal class HueSubtract(val amountDegrees: Double) : Hue { + override fun get(sourceColor: Cam): Double { + return ColorScheme.wrapDegreesDouble(sourceColor.hue.toDouble() - amountDegrees) + } +} + +internal class HueVibrantSecondary() : Hue { + val hueToRotations = + listOf( + Pair(0, 18), + Pair(41, 15), + Pair(61, 10), + Pair(101, 12), + Pair(131, 15), + Pair(181, 18), + Pair(251, 15), + Pair(301, 12), + Pair(360, 12), + ) + + override fun get(sourceColor: Cam): Double { + return getHueRotation(sourceColor.hue, hueToRotations) + } +} + +internal class HueVibrantTertiary() : Hue { + val hueToRotations = + listOf( + Pair(0, 35), + Pair(41, 30), + Pair(61, 20), + Pair(101, 25), + Pair(131, 30), + Pair(181, 35), + Pair(251, 30), + Pair(301, 25), + Pair(360, 25), + ) + + override fun get(sourceColor: Cam): Double { + return getHueRotation(sourceColor.hue, hueToRotations) + } +} + +internal class HueExpressiveSecondary() : Hue { + val hueToRotations = + listOf( + Pair(0, 45), + Pair(21, 95), + Pair(51, 45), + Pair(121, 20), + Pair(151, 45), + Pair(191, 90), + Pair(271, 45), + Pair(321, 45), + Pair(360, 45), + ) + + override fun get(sourceColor: Cam): Double { + return getHueRotation(sourceColor.hue, hueToRotations) + } +} + +internal class HueExpressiveTertiary() : Hue { + val hueToRotations = + listOf( + Pair(0, 120), + Pair(21, 120), + Pair(51, 20), + Pair(121, 45), + Pair(151, 20), + Pair(191, 15), + Pair(271, 20), + Pair(321, 120), + Pair(360, 120), + ) + + override fun get(sourceColor: Cam): Double { + return getHueRotation(sourceColor.hue, hueToRotations) + } +} + +internal interface Chroma { + fun get(sourceColor: Cam): Double + + companion object { + val MAX_VALUE = 120.0 + val MIN_VALUE = 0.0 + } +} + +internal class ChromaMaxOut : Chroma { + override fun get(sourceColor: Cam): Double { + // Intentionally high. Gamut mapping from impossible HCT to sRGB will ensure that + // the maximum chroma is reached, even if lower than this constant. + return Chroma.MAX_VALUE + 10.0 + } +} + +internal class ChromaMultiple(val multiple: Double) : Chroma { + override fun get(sourceColor: Cam): Double { + return sourceColor.chroma * multiple + } +} + +internal class ChromaAdd(val amount: Double) : Chroma { + override fun get(sourceColor: Cam): Double { + return sourceColor.chroma + amount + } +} + +internal class ChromaBound( + val baseChroma: Chroma, + val minVal: Double, + val maxVal: Double, +) : Chroma { + override fun get(sourceColor: Cam): Double { + val result = baseChroma.get(sourceColor) + return min(max(result, minVal), maxVal) + } +} + +internal class ChromaConstant(val chroma: Double) : Chroma { + override fun get(sourceColor: Cam): Double { + return chroma + } +} + +internal class ChromaSource : Chroma { + override fun get(sourceColor: Cam): Double { + return sourceColor.chroma.toDouble() + } +} + +internal class TonalSpec(val hue: Hue = HueSource(), val chroma: Chroma) { + fun shades(sourceColor: Cam): List { + val hue = hue.get(sourceColor) + val chroma = chroma.get(sourceColor) + return Shades.of(hue.toFloat(), chroma.toFloat()).toList() + } + + fun getAtTone(sourceColor: Cam, tone: Float): Int { + val hue = hue.get(sourceColor) + val chroma = chroma.get(sourceColor) + return ColorUtils.CAMToColor(hue.toFloat(), chroma.toFloat(), (1000f - tone) / 10f) + } +} + +internal class CoreSpec( + val a1: TonalSpec, + val a2: TonalSpec, + val a3: TonalSpec, + val n1: TonalSpec, + val n2: TonalSpec, +) + +enum class Style(internal val coreSpec: CoreSpec) { + SPRITZ( + CoreSpec( + a1 = TonalSpec(HueSource(), ChromaConstant(12.0)), + a2 = TonalSpec(HueSource(), ChromaConstant(8.0)), + a3 = TonalSpec(HueSource(), ChromaConstant(16.0)), + n1 = TonalSpec(HueSource(), ChromaConstant(2.0)), + n2 = TonalSpec(HueSource(), ChromaConstant(2.0)), + ), + ), + TONAL_SPOT( + CoreSpec( + a1 = TonalSpec(HueSource(), ChromaConstant(36.0)), + a2 = TonalSpec(HueSource(), ChromaConstant(16.0)), + a3 = TonalSpec(HueAdd(60.0), ChromaConstant(24.0)), + n1 = TonalSpec(HueSource(), ChromaConstant(6.0)), + n2 = TonalSpec(HueSource(), ChromaConstant(8.0)), + ), + ), + VIBRANT( + CoreSpec( + a1 = TonalSpec(HueSource(), ChromaMaxOut()), + a2 = TonalSpec(HueVibrantSecondary(), ChromaConstant(24.0)), + a3 = TonalSpec(HueVibrantTertiary(), ChromaConstant(32.0)), + n1 = TonalSpec(HueSource(), ChromaConstant(10.0)), + n2 = TonalSpec(HueSource(), ChromaConstant(12.0)), + ), + ), + EXPRESSIVE( + CoreSpec( + a1 = TonalSpec(HueAdd(240.0), ChromaConstant(40.0)), + a2 = TonalSpec(HueExpressiveSecondary(), ChromaConstant(24.0)), + a3 = TonalSpec(HueExpressiveTertiary(), ChromaConstant(32.0)), + n1 = TonalSpec(HueAdd(15.0), ChromaConstant(8.0)), + n2 = TonalSpec(HueAdd(15.0), ChromaConstant(12.0)), + ), + ), + RAINBOW( + CoreSpec( + a1 = TonalSpec(HueSource(), ChromaConstant(48.0)), + a2 = TonalSpec(HueSource(), ChromaConstant(16.0)), + a3 = TonalSpec(HueAdd(60.0), ChromaConstant(24.0)), + n1 = TonalSpec(HueSource(), ChromaConstant(0.0)), + n2 = TonalSpec(HueSource(), ChromaConstant(0.0)), + ), + ), + FRUIT_SALAD( + CoreSpec( + a1 = TonalSpec(HueSubtract(50.0), ChromaConstant(48.0)), + a2 = TonalSpec(HueSubtract(50.0), ChromaConstant(36.0)), + a3 = TonalSpec(HueSource(), ChromaConstant(36.0)), + n1 = TonalSpec(HueSource(), ChromaConstant(10.0)), + n2 = TonalSpec(HueSource(), ChromaConstant(16.0)), + ), + ), + CONTENT( + CoreSpec( + a1 = TonalSpec(HueSource(), ChromaSource()), + a2 = TonalSpec(HueSource(), ChromaMultiple(0.33)), + a3 = TonalSpec(HueSource(), ChromaMultiple(0.66)), + n1 = TonalSpec(HueSource(), ChromaMultiple(0.0833)), + n2 = TonalSpec(HueSource(), ChromaMultiple(0.1666)), + ), + ), + MONOCHROMATIC( + CoreSpec( + a1 = TonalSpec(HueSource(), ChromaConstant(.0)), + a2 = TonalSpec(HueSource(), ChromaConstant(.0)), + a3 = TonalSpec(HueSource(), ChromaConstant(.0)), + n1 = TonalSpec(HueSource(), ChromaConstant(.0)), + n2 = TonalSpec(HueSource(), ChromaConstant(.0)), + ), + ), + CLOCK( + CoreSpec( + a1 = TonalSpec(HueSource(), ChromaBound(ChromaSource(), 20.0, Chroma.MAX_VALUE)), + a2 = TonalSpec(HueAdd(10.0), ChromaBound(ChromaMultiple(0.85), 17.0, 40.0)), + a3 = TonalSpec(HueAdd(20.0), ChromaBound(ChromaAdd(20.0), 50.0, Chroma.MAX_VALUE)), + // Not Used + n1 = TonalSpec(HueSource(), ChromaConstant(0.0)), + n2 = TonalSpec(HueSource(), ChromaConstant(0.0)), + ), + ), + CLOCK_VIBRANT( + CoreSpec( + a1 = TonalSpec(HueSource(), ChromaBound(ChromaSource(), 70.0, Chroma.MAX_VALUE)), + a2 = TonalSpec(HueAdd(20.0), ChromaBound(ChromaSource(), 70.0, Chroma.MAX_VALUE)), + a3 = TonalSpec(HueAdd(60.0), ChromaBound(ChromaSource(), 70.0, Chroma.MAX_VALUE)), + // Not Used + n1 = TonalSpec(HueSource(), ChromaConstant(0.0)), + n2 = TonalSpec(HueSource(), ChromaConstant(0.0)), + ), + ), +} + +class TonalPalette +internal constructor( + private val spec: TonalSpec, + seedColor: Int, +) { + val seedCam: Cam = Cam.fromInt(seedColor) + val allShades: List = spec.shades(seedCam) + val allShadesMapped: Map = SHADE_KEYS.zip(allShades).toMap() + val baseColor: Int + + init { + val h = spec.hue.get(seedCam).toFloat() + val c = spec.chroma.get(seedCam).toFloat() + baseColor = ColorUtils.CAMToColor(h, c, CamUtils.lstarFromInt(seedColor)) + } -class ColorScheme(@ColorInt seed: Int, val darkTheme: Boolean) { + // Dynamically computed tones across the full range from 0 to 1000 + fun getAtTone(tone: Float) = spec.getAtTone(seedCam, tone) - val accent1: List - val accent2: List - val accent3: List - val neutral1: List - val neutral2: List + // Predefined & precomputed tones + val s10: Int + get() = this.allShades[0] + val s50: Int + get() = this.allShades[1] + val s100: Int + get() = this.allShades[2] + val s200: Int + get() = this.allShades[3] + val s300: Int + get() = this.allShades[4] + val s400: Int + get() = this.allShades[5] + val s500: Int + get() = this.allShades[6] + val s600: Int + get() = this.allShades[7] + val s700: Int + get() = this.allShades[8] + val s800: Int + get() = this.allShades[9] + val s900: Int + get() = this.allShades[10] + val s1000: Int + get() = this.allShades[11] + companion object { + val SHADE_KEYS = listOf(10, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000) + } +} + +class ColorScheme( + @ColorInt val seed: Int, + val style: Style = Style.TONAL_SPOT, +) { + val accent1: TonalPalette + val accent2: TonalPalette + val accent3: TonalPalette + val neutral1: TonalPalette + val neutral2: TonalPalette + + constructor(@ColorInt seed: Int) : this(seed, Style.TONAL_SPOT) + + val allHues: List + get() { + return listOf(accent1, accent2, accent3, neutral1, neutral2) + } val allAccentColors: List get() { val allColors = mutableListOf() - allColors.addAll(accent1) - allColors.addAll(accent2) - allColors.addAll(accent3) + allColors.addAll(accent1.allShades) + allColors.addAll(accent2.allShades) + allColors.addAll(accent3.allShades) return allColors } - val allNeutralColors: List get() { val allColors = mutableListOf() - allColors.addAll(neutral1) - allColors.addAll(neutral2) + allColors.addAll(neutral1.allShades) + allColors.addAll(neutral2.allShades) return allColors } - val backgroundColor - get() = ColorUtils.setAlphaComponent(if (darkTheme) neutral1[8] else neutral1[0], 0xFF) - - val accentColor - get() = ColorUtils.setAlphaComponent(if (darkTheme) accent1[2] else accent1[6], 0xFF) - init { val proposedSeedCam = Cam.fromInt(seed) - val seedArgb = if (seed == Color.TRANSPARENT) { - GOOGLE_BLUE - } else if (proposedSeedCam.chroma < 5) { - GOOGLE_BLUE - } else { - seed - } - val camSeed = Cam.fromInt(seedArgb) - val hue = camSeed.hue - val chroma = camSeed.chroma.coerceAtLeast(ACCENT1_CHROMA) - val tertiaryHue = wrapDegrees((hue + ACCENT3_HUE_SHIFT).toInt()) - accent1 = Shades.of(hue, chroma).toList() - accent2 = Shades.of(hue, ACCENT2_CHROMA).toList() - accent3 = Shades.of(tertiaryHue.toFloat(), ACCENT3_CHROMA).toList() - neutral1 = Shades.of(hue, NEUTRAL1_CHROMA).toList() - neutral2 = Shades.of(hue, NEUTRAL2_CHROMA).toList() + val seedArgb = + if (seed == Color.TRANSPARENT) { + GOOGLE_BLUE + } else if (style != Style.CONTENT && proposedSeedCam.chroma < 5) { + GOOGLE_BLUE + } else { + seed + } + accent1 = TonalPalette(style.coreSpec.a1, seedArgb) + accent2 = TonalPalette(style.coreSpec.a2, seedArgb) + accent3 = TonalPalette(style.coreSpec.a3, seedArgb) + neutral1 = TonalPalette(style.coreSpec.n1, seedArgb) + neutral2 = TonalPalette(style.coreSpec.n2, seedArgb) } + val shadeCount + get() = this.accent1.allShades.size + val seedTone: Float + get() = 1000f - CamUtils.lstarFromInt(seed) * 10f + override fun toString(): String { return "ColorScheme {\n" + - " neutral1: ${humanReadable(neutral1)}\n" + - " neutral2: ${humanReadable(neutral2)}\n" + - " accent1: ${humanReadable(accent1)}\n" + - " accent2: ${humanReadable(accent2)}\n" + - " accent3: ${humanReadable(accent3)}\n" + + " seed color: ${stringForColor(seed)}\n" + + " style: $style\n" + + " palettes: \n" + + " ${humanReadable("PRIMARY", accent1.allShades)}\n" + + " ${humanReadable("SECONDARY", accent2.allShades)}\n" + + " ${humanReadable("TERTIARY", accent3.allShades)}\n" + + " ${humanReadable("NEUTRAL", neutral1.allShades)}\n" + + " ${humanReadable("NEUTRAL VARIANT", neutral2.allShades)}\n" + "}" } @@ -111,8 +454,68 @@ class ColorScheme(@ColorInt seed: Int, val darkTheme: Boolean) { } } - private fun humanReadable(colors: List): String { - return colors.joinToString { "#" + Integer.toHexString(it) } + public fun wrapDegreesDouble(degrees: Double): Double { + return when { + degrees < 0 -> { + (degrees % 360) + 360 + } + + degrees >= 360 -> { + degrees % 360 + } + + else -> { + degrees + } + } + } + + private fun hueDiff(a: Float, b: Float): Float { + return 180f - ((a - b).absoluteValue - 180f).absoluteValue + } + + private fun stringForColor(color: Int): String { + val width = 4 + val hct = Cam.fromInt(color) + val h = "H${hct.hue.roundToInt().toString().padEnd(width)}" + val c = "C${hct.chroma.roundToInt().toString().padEnd(width)}" + val t = "T${CamUtils.lstarFromInt(color).roundToInt().toString().padEnd(width)}" + val hex = Integer.toHexString(color and 0xffffff).padStart(6, '0').uppercase() + return "$h$c$t = #$hex" + } + + private fun humanReadable(paletteName: String, colors: List): String { + return "$paletteName\n" + + colors.map { stringForColor(it) }.joinToString(separator = "\n") { it } + } + + private fun score(cam: Cam, proportion: Double): Double { + val proportionScore = 0.7 * 100.0 * proportion + val chromaScore = + if (cam.chroma < ACCENT1_CHROMA) { + 0.1 * (cam.chroma - ACCENT1_CHROMA) + } else { + 0.3 * (cam.chroma - ACCENT1_CHROMA) + } + return chromaScore + proportionScore + } + + private fun huePopulations( + camByColor: Map, + populationByColor: Map, + filter: Boolean = true, + ): List { + val huePopulation = List(size = 360, init = { 0.0 }).toMutableList() + for (entry in populationByColor.entries) { + val population = populationByColor[entry.key]!! + val cam = camByColor[entry.key]!! + val hue = cam.hue.roundToInt() % 360 + if (filter && cam.chroma <= MIN_CHROMA) { + continue + } + huePopulation[hue] = huePopulation[hue] + population + } + return huePopulation } } } diff --git a/lawnchair/src/com/android/systemui/monet/Shades.java b/lawnchair/src/com/android/systemui/monet/Shades.java index c2c2e280feb..1e4026d067c 100644 --- a/lawnchair/src/com/android/systemui/monet/Shades.java +++ b/lawnchair/src/com/android/systemui/monet/Shades.java @@ -57,9 +57,6 @@ public class Shades { shades[1] = ColorUtils.CAMToColor(hue, Math.min(40f, chroma), 95); for (int i = 2; i < 12; i++) { float lStar = (i == 6) ? MIDDLE_LSTAR : 100 - 10 * (i - 1); - if (lStar >= 90) { - chroma = Math.min(40f, chroma); - } shades[i] = ColorUtils.CAMToColor(hue, chroma, lStar); } return shades; diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index 526922e8409..475e319d6e0 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -166,7 +166,7 @@ import app.lawnchair.LawnchairApp; import app.lawnchair.compat.LawnchairQuickstepCompat; import app.lawnchair.icons.shape.IconShapeManager; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; /** * Manages the opening and closing app transitions from Launcher diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltip.kt b/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltip.kt index c45c66741dc..efdfb6c2bcd 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltip.kt +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarEduTooltip.kt @@ -28,6 +28,7 @@ import android.view.ViewGroup import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.animation.Interpolator import androidx.core.view.updateLayoutParams +import app.lawnchair.theme.color.tokens.ColorTokens import com.android.app.animation.Interpolators.EMPHASIZED_ACCELERATE import com.android.app.animation.Interpolators.EMPHASIZED_DECELERATE import com.android.app.animation.Interpolators.STANDARD @@ -53,7 +54,7 @@ constructor( private val activityContext: ActivityContext = ActivityContext.lookupContext(context) private val backgroundColor = - Themes.getAttrColor(context, com.android.internal.R.attr.materialColorSurfaceBright) + ColorTokens.SurfaceBrightColor.resolveColor(getContext()) private val tooltipCornerRadius = Themes.getDialogCornerRadius(context) private val arrowWidth = resources.getDimension(R.dimen.popup_arrow_width) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java index 00ba5180ac8..3c281ae9521 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java @@ -60,6 +60,7 @@ import app.lawnchair.hotseat.HotseatMode; import app.lawnchair.preferences2.PreferenceManager2; +import app.lawnchair.theme.color.tokens.ColorTokens; /** * Hosts the Taskbar content such as Hotseat and Recent Apps. Drawn on top of @@ -146,8 +147,7 @@ public TaskbarView(@NonNull Context context, @Nullable AttributeSet attrs, int d mItemMarginLeftRight = actualMargin - (mIconTouchSize - visualIconSize) / 2; mItemPadding = (mIconTouchSize - actualIconSize) / 2; - mFolderLeaveBehindColor = Themes.getAttrColor(mActivityContext, - android.R.attr.textColorTertiary); + mFolderLeaveBehindColor = Themes.getAttrColor(context, android.R.attr.textColorTertiary); // Needed to draw folder leave-behind when opening one. setWillNotDraw(false); diff --git a/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java b/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java index 2f3608f4b85..8311cf6fcc8 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java @@ -27,13 +27,12 @@ import com.android.launcher3.LauncherState; import com.android.launcher3.R; import com.android.launcher3.util.DisplayController; -import com.android.launcher3.util.Themes; import com.android.quickstep.util.LayoutUtils; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; import app.lawnchair.preferences.PreferenceManager; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; /** * Definition for overview state diff --git a/quickstep/src/com/android/launcher3/uioverrides/states/QuickSwitchState.java b/quickstep/src/com/android/launcher3/uioverrides/states/QuickSwitchState.java index 10d5257e9ca..1c9298d69ef 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/states/QuickSwitchState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/states/QuickSwitchState.java @@ -23,8 +23,8 @@ import com.android.launcher3.Launcher; import com.android.launcher3.R; -import app.lawnchair.theme.color.ColorTokens; -import com.android.launcher3.util.Themes; +import app.lawnchair.theme.color.tokens.ColorTokens; + import com.android.quickstep.views.DesktopTaskView; /** diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java index b5f49a39581..ef51d30499d 100644 --- a/quickstep/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java @@ -564,7 +564,11 @@ public void onUserUnlocked() { mTaskAnimationManager, mTaskbarManager::getCurrentActivityContext); } mInputConsumer = InputConsumerController.getRecentsAnimationInputConsumer(); - mInputConsumer.registerInputConsumer(); + try { + mInputConsumer.registerInputConsumer(); + } catch (Exception e) { + Log.e(TAG, "Failure registering InputConsumer", e); + } onSystemUiFlagsChanged(mDeviceState.getSystemUiStateFlags()); onAssistantVisibilityChanged(); diff --git a/quickstep/src/com/android/quickstep/fallback/RecentsState.java b/quickstep/src/com/android/quickstep/fallback/RecentsState.java index 82935dfb478..9e854f1f451 100644 --- a/quickstep/src/com/android/quickstep/fallback/RecentsState.java +++ b/quickstep/src/com/android/quickstep/fallback/RecentsState.java @@ -26,7 +26,7 @@ import com.android.launcher3.statemanager.BaseState; import com.android.quickstep.RecentsActivity; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; /** * State definition for Fallback recents diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 9c8e9700158..eb426902040 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -222,7 +222,7 @@ import app.lawnchair.LawnchairApp; import app.lawnchair.compat.LawnchairQuickstepCompat; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; import app.lawnchair.util.OverScrollerCompat; import app.lawnchair.util.RecentHelper; @@ -6249,6 +6249,7 @@ private void doScrollScale() { } public float getScrollScale(RemoteTargetHandle rth) { + if (mPageScrolls == null) return 1f; int childCount = Math.min(mPageScrolls.length, getChildCount()); for (int i = 0; i < childCount; i++) { View child = getChildAt(i); diff --git a/quickstep/src/com/android/quickstep/views/TaskMenuViewWithArrow.kt b/quickstep/src/com/android/quickstep/views/TaskMenuViewWithArrow.kt index b373911f3d4..b67540bcae4 100644 --- a/quickstep/src/com/android/quickstep/views/TaskMenuViewWithArrow.kt +++ b/quickstep/src/com/android/quickstep/views/TaskMenuViewWithArrow.kt @@ -29,6 +29,7 @@ import android.view.View import android.view.ViewGroup import android.widget.FrameLayout import android.widget.LinearLayout +import app.lawnchair.theme.color.tokens.ColorTokens import com.android.launcher3.BaseDraggingActivity import com.android.launcher3.DeviceProfile import com.android.launcher3.InsettableFrameLayout @@ -149,7 +150,7 @@ class TaskMenuViewWithArrow : ArrowPopup { FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT ) - setBackgroundColor(Themes.getAttrColor(context, R.attr.overviewScrimColor)) + setBackgroundColor(ColorTokens.OverviewScrimColor.resolveColor(context)) alpha = 0f } popupContainer.addView(scrim) @@ -205,7 +206,7 @@ class TaskMenuViewWithArrow : ArrowPopup { override fun assignMarginsAndBackgrounds(viewGroup: ViewGroup) { assignMarginsAndBackgrounds( this, - Themes.getAttrColor(context, com.android.internal.R.attr.colorSurface) + ColorTokens.Surface.resolveColor(context) ) } diff --git a/settings.gradle b/settings.gradle index c2692429fd7..1788748744d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -13,7 +13,7 @@ pluginManagement { // https://docs.gradle.com/enterprise/gradle-plugin/ plugins { - id "com.gradle.develocity" version "3.17.5" + id "com.gradle.develocity" version "3.17.6" } def isCI = providers.environmentVariable('CI').present diff --git a/src/com/android/launcher3/AppWidgetResizeFrame.java b/src/com/android/launcher3/AppWidgetResizeFrame.java index 74ed8f7b98c..db0031ec443 100644 --- a/src/com/android/launcher3/AppWidgetResizeFrame.java +++ b/src/com/android/launcher3/AppWidgetResizeFrame.java @@ -48,7 +48,7 @@ import java.util.List; import app.lawnchair.preferences2.PreferenceManager2; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; import app.lawnchair.theme.drawable.DrawableTokens; public class AppWidgetResizeFrame extends AbstractFloatingView implements View.OnKeyListener { diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index b5206aa08e2..7c96b7615bc 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -18,12 +18,9 @@ package com.android.launcher3; -import static com.android.launcher3.config.FeatureFlags.ENABLE_CURSOR_HOVER_STATES; import static com.android.launcher3.config.FeatureFlags.ENABLE_DOWNLOAD_APP_UX_V2; import static com.android.launcher3.config.FeatureFlags.ENABLE_ICON_LABEL_AUTO_SCALING; import static com.android.launcher3.graphics.PreloadIconDrawable.newPendingIcon; -import static com.android.launcher3.icons.BitmapInfo.FLAG_NO_BADGE; -import static com.android.launcher3.icons.BitmapInfo.FLAG_THEMED; import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound; import static com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_INCREMENTAL_DOWNLOAD_ACTIVE; import static com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_INSTALL_SESSION_ACTIVE; @@ -81,7 +78,6 @@ import com.android.launcher3.util.MultiTranslateDelegate; import com.android.launcher3.util.SafeCloseable; import com.android.launcher3.util.ShortcutUtil; -import com.android.launcher3.util.Themes; import com.android.launcher3.views.ActivityContext; import com.android.launcher3.views.IconLabelDotView; @@ -91,7 +87,6 @@ import app.lawnchair.font.FontManager; import app.lawnchair.preferences.PreferenceManager; -import app.lawnchair.theme.color.ColorTokens; import app.lawnchair.util.LawnchairUtilsKt; /** diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java index 41d563ba1a4..680d9cb809a 100644 --- a/src/com/android/launcher3/ButtonDropTarget.java +++ b/src/com/android/launcher3/ButtonDropTarget.java @@ -43,8 +43,7 @@ import com.android.launcher3.dragndrop.DragView; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.util.Themes; -import app.lawnchair.theme.color.ColorTokens; -import app.lawnchair.theme.drawable.DrawableToken; +import app.lawnchair.theme.color.tokens.ColorTokens; import app.lawnchair.theme.drawable.DrawableTokens; import com.android.launcher3.views.ActivityContext; @@ -122,7 +121,7 @@ protected void onFinishInflate() { private void setTextColor() { int normalColor = ColorTokens.WorkspaceAccentColor.resolveColor(getContext()); - int selectedColor = Themes.getAttrColor(getContext(), R.attr.dropTargetHoverTextColor); + int selectedColor = ColorTokens.DropTargetHoverTextColor.resolveColor(getContext()); setTextColor(new ColorStateList( new int[][] { new int[] { -android.R.attr.state_selected }, new int[] { android.R.attr.state_selected } }, diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index 9a55ad1e104..49b43095719 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -75,7 +75,6 @@ import com.android.launcher3.util.GridOccupancy; import com.android.launcher3.util.MultiTranslateDelegate; import com.android.launcher3.util.ParcelableSparseArray; -import com.android.launcher3.util.Themes; import com.android.launcher3.util.Thunk; import com.android.launcher3.views.ActivityContext; import com.android.launcher3.widget.LauncherAppWidgetHostView; @@ -92,7 +91,7 @@ import java.util.stream.Collectors; import app.lawnchair.preferences2.PreferenceManager2; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; import app.lawnchair.theme.drawable.DrawableTokens; public class CellLayout extends ViewGroup { diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 8997eeb678e..fef77acf545 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -41,6 +41,7 @@ import android.graphics.Rect; import android.graphics.Typeface; import android.util.DisplayMetrics; +import android.util.Log; import android.util.SparseArray; import android.view.Surface; @@ -1460,8 +1461,13 @@ private void updateAllAppsContainerWidth() { .firstBlocking(preferenceManager2.getDrawerLeftRightMarginFactor()); var marginMultiplier = allAppLeftRightMarginMultiplier * (!isTablet ? 100 : 2); allAppsLeftRightMargin = (int) (allAppsLeftRightMargin * marginMultiplier); - allAppsPadding.left = (int) (allAppsPadding.left * marginMultiplier); - allAppsPadding.right = (int) (allAppsPadding.right * marginMultiplier); + + // todo fix how drawer padding values are calculated in responsive grid type + int leftPadding = (int) (allAppsPadding.left != 0 ? allAppsPadding.left * marginMultiplier : marginMultiplier); + int rightPadding = (int) (allAppsPadding.right != 0 ? allAppsPadding.right * marginMultiplier : marginMultiplier); + + allAppsPadding.left = leftPadding; + allAppsPadding.right = rightPadding; } private void setupAllAppsStyle(Context context) { @@ -2434,4 +2440,4 @@ public DeviceProfile build() { mIsGestureMode, mViewScaleProvider, mOverrideProvider, mIsTransientTaskbar); } } -} \ No newline at end of file +} diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index d9556dab65e..f3e3f60243b 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -35,6 +35,8 @@ import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SWIPELEFT; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SWIPERIGHT; +import static app.lawnchair.util.LawnchairUtilsKt.toBitmap; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.LayoutTransition; @@ -50,6 +52,7 @@ import android.graphics.Point; import android.graphics.PointF; import android.graphics.Rect; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; @@ -69,6 +72,7 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import androidx.core.graphics.drawable.DrawableKt; import com.android.launcher3.Utilities; import com.android.app.animation.Interpolators; @@ -128,6 +132,7 @@ import com.android.launcher3.widget.dragndrop.AppWidgetHostViewDragListener; import com.android.launcher3.widget.util.WidgetSizes; import com.android.systemui.plugins.shared.LauncherOverlayManager.LauncherOverlay; +import com.google.android.renderscript.Toolkit; import com.patrykmichalik.opto.core.PreferenceExtensionsKt; import com.android.systemui.plugins.shared.LauncherOverlayManager.LauncherOverlayCallbacks; @@ -138,10 +143,12 @@ import java.util.function.Predicate; import java.util.stream.Collectors; +import app.lawnchair.preferences.PreferenceManager; import app.lawnchair.preferences2.PreferenceManager2; import app.lawnchair.smartspace.SmartspaceAppWidgetProvider; import app.lawnchair.smartspace.model.LawnchairSmartspace; import app.lawnchair.smartspace.model.SmartspaceMode; +import app.lawnchair.util.LawnchairUtilsKt; /** * The workspace is a wide area with a wallpaper and a finite number of pages. @@ -301,6 +308,7 @@ public class Workspace extends PagedView private final StatsLogManager mStatsLogManager; PreferenceManager2 mPreferenceManager2; + PreferenceManager mPreferenceManger; /** * Used to inflate the Workspace from XML. @@ -329,6 +337,7 @@ public Workspace(Context context, AttributeSet attrs, int defStyle) { mAllAppsIconSize = mLauncher.getDeviceProfile().allAppsIconSizePx; mWallpaperManager = WallpaperManager.getInstance(context); mPreferenceManager2 = PreferenceManager2.getInstance(context); + mPreferenceManger = PreferenceManager.getInstance(context); mWallpaperOffset = new WallpaperOffsetInterpolator(this); @@ -339,6 +348,18 @@ public Workspace(Context context, AttributeSet attrs, int defStyle) { setMotionEventSplittingEnabled(true); setOnTouchListener(new WorkspaceTouchListener(mLauncher, this)); mStatsLogManager = StatsLogManager.newInstance(context); + + if (mPreferenceManger.getEnableWallpaperBlur().get() && mWallpaperManager.getDrawable() != null) { + var blurWallpaper = mPreferenceManger.getWallpaperBlur().get(); + var blurThreshold = mPreferenceManger.getWallpaperBlurFactorThreshold().get(); + var wallpaperBitmap = mWallpaperManager.getDrawable(); + try { + mWallpaperManager.setBitmap(LawnchairUtilsKt.blurBitmap(toBitmap(wallpaperBitmap),blurWallpaper, blurThreshold), null, true, WallpaperManager.FLAG_SYSTEM); + mWallpaperManager.forgetLoadedWallpaper(); + } catch (Exception ex) { + Log.e(TAG, "error failed bluring wallpaper"); + } + } } @Override diff --git a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java index 6c660df61e1..ce9885a5190 100644 --- a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java @@ -25,6 +25,7 @@ import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_TAP_ON_WORK_TAB; import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; import static com.android.launcher3.util.ScrollableLayoutManager.PREDICTIVE_BACK_MIN_SCALE; +import static com.topjohnwu.superuser.internal.Utils.context; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -64,14 +65,12 @@ import androidx.core.graphics.ColorUtils; import androidx.recyclerview.widget.RecyclerView; -import com.android.launcher3.BaseDraggingActivity; import com.android.launcher3.DeviceProfile; import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener; import com.android.launcher3.DragSource; import com.android.launcher3.DropTarget.DragObject; import com.android.launcher3.Insettable; import com.android.launcher3.InsettableFrameLayout; -import com.android.launcher3.Launcher; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.allapps.BaseAllAppsAdapter.AdapterItem; @@ -88,7 +87,6 @@ import com.android.launcher3.views.BaseDragLayer; import com.android.launcher3.views.RecyclerViewFastScroller; import com.android.launcher3.views.ScrimView; -import com.android.launcher3.views.SpringRelativeLayout; import com.android.launcher3.workprofile.PersonalWorkSlidingTabStrip; import com.patrykmichalik.opto.core.PreferenceExtensionsKt; @@ -101,7 +99,7 @@ import app.lawnchair.allapps.LawnchairAlphabeticalAppsList; import app.lawnchair.font.FontManager; import app.lawnchair.preferences2.PreferenceManager2; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; import app.lawnchair.ui.StretchRecyclerViewContainer; /** @@ -309,7 +307,7 @@ protected void onFinishInflate() { 0 // Bottom left }; mBottomSheetBackgroundColor = - Themes.getAttrColor(getContext(), R.attr.materialColorSurfaceDim); + ColorTokens.SurfaceDimColor.resolveColor(getContext()); updateBackgroundVisibility(mActivityContext.getDeviceProfile()); mSearchUiManager.initializeSearch(this); } diff --git a/src/com/android/launcher3/allapps/WorkEduCard.java b/src/com/android/launcher3/allapps/WorkEduCard.java index e703d496135..283c9f086a4 100644 --- a/src/com/android/launcher3/allapps/WorkEduCard.java +++ b/src/com/android/launcher3/allapps/WorkEduCard.java @@ -24,12 +24,7 @@ import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; -import android.widget.Button; import android.widget.FrameLayout; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.core.view.ViewCompat; import android.widget.TextView; import com.android.launcher3.LauncherPrefs; @@ -37,8 +32,7 @@ import com.android.launcher3.model.StringCache; import com.android.launcher3.views.ActivityContext; -import app.lawnchair.font.FontManager; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; import app.lawnchair.theme.drawable.DrawableTokens; /** diff --git a/src/com/android/launcher3/allapps/WorkModeSwitch.java b/src/com/android/launcher3/allapps/WorkModeSwitch.java index ef363333b52..cdc067207e3 100644 --- a/src/com/android/launcher3/allapps/WorkModeSwitch.java +++ b/src/com/android/launcher3/allapps/WorkModeSwitch.java @@ -32,18 +32,16 @@ import androidx.annotation.NonNull; import androidx.core.view.WindowInsetsCompat; -import com.android.launcher3.BaseDraggingActivity; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Insettable; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.anim.KeyboardInsetAnimationCallback; -import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.model.StringCache; import com.android.launcher3.views.ActivityContext; import app.lawnchair.font.FontManager; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; import app.lawnchair.theme.drawable.DrawableTokens; /** diff --git a/src/com/android/launcher3/allapps/WorkPausedCard.java b/src/com/android/launcher3/allapps/WorkPausedCard.java index a8c52351bf9..e5c4aa42bed 100644 --- a/src/com/android/launcher3/allapps/WorkPausedCard.java +++ b/src/com/android/launcher3/allapps/WorkPausedCard.java @@ -25,15 +25,12 @@ import android.widget.LinearLayout; import android.widget.TextView; -import androidx.core.view.ViewCompat; - import com.android.launcher3.R; import com.android.launcher3.Utilities; -import com.android.launcher3.model.StringCache; import com.android.launcher3.views.ActivityContext; import app.lawnchair.font.FontManager; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; /** * Work profile toggle switch shown at the bottom of AllApps work tab diff --git a/src/com/android/launcher3/folder/FolderAnimationManager.java b/src/com/android/launcher3/folder/FolderAnimationManager.java index a8337911f43..a1f3125f857 100644 --- a/src/com/android/launcher3/folder/FolderAnimationManager.java +++ b/src/com/android/launcher3/folder/FolderAnimationManager.java @@ -48,12 +48,11 @@ import com.android.launcher3.Utilities; import com.android.launcher3.anim.PropertyResetListener; import com.android.launcher3.celllayout.CellLayoutLayoutParams; -import com.android.launcher3.util.Themes; import com.android.launcher3.views.BaseDragLayer; import java.util.List; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; import app.lawnchair.util.LawnchairUtilsKt; /** diff --git a/src/com/android/launcher3/folder/PreviewBackground.java b/src/com/android/launcher3/folder/PreviewBackground.java index aa05676c01a..35652f0ac45 100644 --- a/src/com/android/launcher3/folder/PreviewBackground.java +++ b/src/com/android/launcher3/folder/PreviewBackground.java @@ -50,13 +50,12 @@ import com.android.launcher3.CellLayout; import com.android.launcher3.DeviceProfile; import com.android.launcher3.R; -import com.android.launcher3.util.Themes; import com.android.launcher3.views.ActivityContext; import com.patrykmichalik.opto.core.PreferenceExtensionsKt; import app.lawnchair.preferences2.PreferenceManager2; import app.lawnchair.theme.color.ColorOption; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; import app.lawnchair.util.LawnchairUtilsKt; /** diff --git a/src/com/android/launcher3/graphics/Scrim.java b/src/com/android/launcher3/graphics/Scrim.java index db5856a88f9..8c5bf741e65 100644 --- a/src/com/android/launcher3/graphics/Scrim.java +++ b/src/com/android/launcher3/graphics/Scrim.java @@ -22,7 +22,7 @@ import android.util.FloatProperty; import android.view.View; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; /** * Contains general scrim properties such as wallpaper-extracted color that subclasses can use. diff --git a/src/com/android/launcher3/pageindicators/PageIndicatorDots.java b/src/com/android/launcher3/pageindicators/PageIndicatorDots.java index 8e0b5a73001..3a2433ad069 100644 --- a/src/com/android/launcher3/pageindicators/PageIndicatorDots.java +++ b/src/com/android/launcher3/pageindicators/PageIndicatorDots.java @@ -16,8 +16,6 @@ package com.android.launcher3.pageindicators; -import static com.android.launcher3.config.FeatureFlags.SHOW_DOT_PAGINATION; - import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; @@ -48,9 +46,8 @@ import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.config.FeatureFlags; -import com.android.launcher3.util.Themes; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; /** * {@link PageIndicator} which shows dots per page. The active page is shown diff --git a/src/com/android/launcher3/popup/ArrowPopup.java b/src/com/android/launcher3/popup/ArrowPopup.java index 02d81faade7..fb0e86dea5e 100644 --- a/src/com/android/launcher3/popup/ArrowPopup.java +++ b/src/com/android/launcher3/popup/ArrowPopup.java @@ -23,7 +23,6 @@ import static com.android.app.animation.Interpolators.EMPHASIZED_ACCELERATE; import static com.android.app.animation.Interpolators.EMPHASIZED_DECELERATE; import static com.android.app.animation.Interpolators.LINEAR; -import static com.android.launcher3.config.FeatureFlags.ENABLE_MATERIAL_U_POPUP; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -60,9 +59,7 @@ import com.android.launcher3.views.ActivityContext; import com.android.launcher3.views.BaseDragLayer; -import java.util.Arrays; - -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; import app.lawnchair.theme.drawable.DrawableTokens; /** diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutView.java b/src/com/android/launcher3/shortcuts/DeepShortcutView.java index 8df1fd7327f..d0bf5560682 100644 --- a/src/com/android/launcher3/shortcuts/DeepShortcutView.java +++ b/src/com/android/launcher3/shortcuts/DeepShortcutView.java @@ -36,10 +36,9 @@ import com.android.launcher3.Utilities; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.popup.PopupContainerWithArrow; -import com.android.launcher3.util.Themes; import com.android.launcher3.views.BubbleTextHolder; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; import app.lawnchair.util.DrawableUtilsKt; /** diff --git a/src/com/android/launcher3/states/HintState.java b/src/com/android/launcher3/states/HintState.java index db8af8a81f5..770ecfe0fe7 100644 --- a/src/com/android/launcher3/states/HintState.java +++ b/src/com/android/launcher3/states/HintState.java @@ -24,7 +24,7 @@ import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; /** * Scale down workspace/hotseat to hint at going to either overview (on pause) or first home screen. diff --git a/src/com/android/launcher3/util/Themes.java b/src/com/android/launcher3/util/Themes.java index f69fd76bc8e..e172d3e74d1 100644 --- a/src/com/android/launcher3/util/Themes.java +++ b/src/com/android/launcher3/util/Themes.java @@ -33,10 +33,6 @@ import androidx.annotation.ColorInt; -import androidx.annotation.ColorInt; - -import androidx.annotation.ColorInt; - import com.android.launcher3.LauncherPrefs; import com.android.launcher3.R; import com.android.launcher3.Utilities; @@ -44,7 +40,7 @@ import com.patrykmichalik.opto.core.PreferenceExtensionsKt; import app.lawnchair.preferences2.PreferenceManager2; import app.lawnchair.theme.color.ColorMode; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; import app.lawnchair.wallpaper.WallpaperColorsCompat; import app.lawnchair.wallpaper.WallpaperManagerCompat; import app.lawnchair.ui.theme.ColorKt; diff --git a/src/com/android/launcher3/views/RecyclerViewFastScroller.java b/src/com/android/launcher3/views/RecyclerViewFastScroller.java index 6d32a79faf0..20cc9da77f5 100644 --- a/src/com/android/launcher3/views/RecyclerViewFastScroller.java +++ b/src/com/android/launcher3/views/RecyclerViewFastScroller.java @@ -52,6 +52,8 @@ import java.util.Collections; import java.util.List; +import app.lawnchair.theme.color.tokens.ColorTokens; + /** * The track and scrollbar that shows when you scroll the list. */ @@ -145,7 +147,7 @@ public RecyclerViewFastScroller(Context context, AttributeSet attrs, int defStyl super(context, attrs, defStyleAttr); mTrackPaint = new Paint(); - mTrackPaint.setColor(Themes.getAttrColor(context, android.R.attr.textColorPrimary)); + mTrackPaint.setColor(ColorTokens.TextColorPrimary.resolveColor(getContext())); mTrackPaint.setAlpha(MAX_TRACK_ALPHA); mThumbPaint = new Paint(); diff --git a/src/com/android/launcher3/views/Snackbar.java b/src/com/android/launcher3/views/Snackbar.java index 3805231c660..ce15e5b77bd 100644 --- a/src/com/android/launcher3/views/Snackbar.java +++ b/src/com/android/launcher3/views/Snackbar.java @@ -37,7 +37,7 @@ import com.android.launcher3.compat.AccessibilityManagerCompat; import com.android.launcher3.dragndrop.DragLayer; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; import app.lawnchair.theme.drawable.DrawableTokens; /** diff --git a/src/com/android/launcher3/views/WidgetsEduView.java b/src/com/android/launcher3/views/WidgetsEduView.java index b12528bfda6..f34a3930267 100644 --- a/src/com/android/launcher3/views/WidgetsEduView.java +++ b/src/com/android/launcher3/views/WidgetsEduView.java @@ -25,7 +25,7 @@ import com.android.launcher3.Launcher; import com.android.launcher3.R; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; /** * Education view about widgets. diff --git a/src/com/android/launcher3/widget/AddItemWidgetsBottomSheet.java b/src/com/android/launcher3/widget/AddItemWidgetsBottomSheet.java index bfefaa70af5..cc3b850eaba 100644 --- a/src/com/android/launcher3/widget/AddItemWidgetsBottomSheet.java +++ b/src/com/android/launcher3/widget/AddItemWidgetsBottomSheet.java @@ -35,7 +35,7 @@ import com.android.launcher3.dragndrop.AddItemActivity; import com.android.launcher3.views.AbstractSlideInView; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; /** * Bottom sheet for the pin widget. diff --git a/src/com/android/launcher3/widget/BaseWidgetSheet.java b/src/com/android/launcher3/widget/BaseWidgetSheet.java index 743d5d3302f..2df15950c60 100644 --- a/src/com/android/launcher3/widget/BaseWidgetSheet.java +++ b/src/com/android/launcher3/widget/BaseWidgetSheet.java @@ -55,7 +55,7 @@ import com.android.launcher3.views.ActivityContext; import com.android.launcher3.views.ArrowTipView; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; /** * Base class for various widgets popup diff --git a/src/com/android/launcher3/widget/PendingAppWidgetHostView.java b/src/com/android/launcher3/widget/PendingAppWidgetHostView.java index 1c88c4a466f..06e30c0f432 100644 --- a/src/com/android/launcher3/widget/PendingAppWidgetHostView.java +++ b/src/com/android/launcher3/widget/PendingAppWidgetHostView.java @@ -51,6 +51,8 @@ import java.util.List; +import app.lawnchair.theme.color.tokens.ColorTokens; + public class PendingAppWidgetHostView extends LauncherAppWidgetHostView implements OnClickListener, ItemInfoUpdateReceiver { private static final float SETUP_ICON_SIZE_FACTOR = 2f / 5; @@ -79,7 +81,7 @@ public PendingAppWidgetHostView(Context context, LauncherAppWidgetInfo info, mDisabledForSafeMode = disabledForSafeMode; mPaint = new TextPaint(); - mPaint.setColor(Themes.getAttrColor(getContext(), android.R.attr.textColorPrimary)); + mPaint.setColor(ColorTokens.TextColorPrimary.resolveColor(getContext())); mPaint.setTextSize(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, mLauncher.getDeviceProfile().iconTextSizePx, getResources().getDisplayMetrics())); setBackgroundResource(R.drawable.pending_widget_bg); diff --git a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java index ecf3ebd74cc..bd4201fd228 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java +++ b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java @@ -40,15 +40,12 @@ import android.view.View; import android.view.ViewGroup; import android.view.Window; -import android.view.ViewOutlineProvider; import android.view.WindowInsets; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import android.widget.Button; import android.widget.TextView; -import android.window.BackEvent; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.Px; import androidx.annotation.RequiresApi; @@ -87,7 +84,7 @@ import java.util.stream.IntStream; import app.lawnchair.font.FontManager; -import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.color.tokens.ColorTokens; import app.lawnchair.theme.drawable.DrawableTokens; /** diff --git a/src/com/android/launcher3/widget/picker/WidgetsListHeader.java b/src/com/android/launcher3/widget/picker/WidgetsListHeader.java index 62d55f84536..7bb0cfb1ae1 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsListHeader.java +++ b/src/com/android/launcher3/widget/picker/WidgetsListHeader.java @@ -43,7 +43,6 @@ import com.android.launcher3.widget.model.WidgetsListHeaderEntry; import app.lawnchair.font.FontManager; -import app.lawnchair.theme.color.ColorTokens; import app.lawnchair.theme.drawable.DrawableTokens; /** diff --git a/src/com/android/launcher3/widget/picker/search/LauncherWidgetsSearchBar.java b/src/com/android/launcher3/widget/picker/search/LauncherWidgetsSearchBar.java index 3b4b604bd04..3eff95e6f30 100644 --- a/src/com/android/launcher3/widget/picker/search/LauncherWidgetsSearchBar.java +++ b/src/com/android/launcher3/widget/picker/search/LauncherWidgetsSearchBar.java @@ -29,7 +29,6 @@ import com.android.launcher3.popup.PopupDataProvider; import app.lawnchair.font.FontManager; -import app.lawnchair.theme.color.ColorTokens; import app.lawnchair.theme.drawable.DrawableTokens; /** diff --git a/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java b/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java index 34ac5613014..6819623eb4c 100644 --- a/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java +++ b/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java @@ -16,7 +16,6 @@ package com.android.launcher3.workprofile; import android.content.Context; -import android.graphics.drawable.Drawable; import android.content.res.TypedArray; import android.graphics.drawable.RippleDrawable; import android.util.AttributeSet; @@ -32,7 +31,7 @@ import com.android.launcher3.views.ActivityContext; import app.lawnchair.font.FontManager; -import app.lawnchair.theme.color.ColorStateListTokens; +import app.lawnchair.theme.color.tokens.ColorStateListTokens; import app.lawnchair.theme.drawable.DrawableTokens; /** diff --git a/systemUILog/build.gradle b/systemUILog/build.gradle index 714f50d1bf5..0acc7df4352 100644 --- a/systemUILog/build.gradle +++ b/systemUILog/build.gradle @@ -23,5 +23,5 @@ compileOnlyCommonJars() dependencies { compileOnly projects.systemUIPluginCore compileOnly projects.systemUICommon - implementation 'com.google.errorprone:error_prone_annotations:2.28.0' + implementation 'com.google.errorprone:error_prone_annotations:2.29.2' } diff --git a/systemUnFold/build.gradle b/systemUnFold/build.gradle index 0d4abf89977..f8d631b9930 100644 --- a/systemUnFold/build.gradle +++ b/systemUnFold/build.gradle @@ -40,6 +40,6 @@ dependencies { ksp "com.google.dagger:hilt-compiler:$daggerVersion" implementation "androidx.concurrent:concurrent-futures:1.2.0" - implementation "androidx.lifecycle:lifecycle-common:2.8.2" + implementation "androidx.lifecycle:lifecycle-common:2.8.4" implementation "androidx.dynamicanimation:dynamicanimation:1.0.0" }