From fc6b3e67ee4491de15aa8283904da9fbb50c5cde Mon Sep 17 00:00:00 2001 From: Pun Butrach Date: Mon, 8 Sep 2025 21:42:38 +0700 Subject: [PATCH] Migration LC15 BaseDraggingActivity -> LC16 BaseActivity Signed-off-by: Pun Butrach --- .github/workflows/ci.yml | 2 +- .github/workflows/close_stale_issues.yml | 2 +- .github/workflows/release_update.yml | 4 +- build.gradle | 6 +- lawnchair/res/values-ca-rES/strings.xml | 30 +-- lawnchair/res/values-el-rGR/strings.xml | 2 +- lawnchair/res/values-fa-rIR/strings.xml | 102 +++++----- lawnchair/res/values-it-rIT/strings.xml | 188 +++++++++--------- lawnchair/res/values-vi-rVN/strings.xml | 2 +- lawnchair/res/values/strings.xml | 2 +- .../app/lawnchair/override/CustomizeDialog.kt | 3 +- .../src/app/lawnchair/qsb/providers/Kagi.kt | 2 + .../qsb/providers/QsbSearchProvider.kt | 2 +- .../theme/color/tokens/ColorTokens.kt | 5 +- .../src/app/lawnchair/ui/OverflowMenu.kt | 2 + .../destinations/PreferencesDashboard.kt | 118 ++++++++--- .../destinations/SelectIconPreference.kt | 5 +- .../widget/LauncherWidgetHolder.java | 30 ++- 18 files changed, 299 insertions(+), 208 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 06ba220576..c0f00d3b61 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -82,7 +82,7 @@ jobs: with: submodules: true fetch-depth: 0 - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v6 with: python-version: '3.x' - name: Install Python packages diff --git a/.github/workflows/close_stale_issues.yml b/.github/workflows/close_stale_issues.yml index ed672da41e..65e69dfca0 100644 --- a/.github/workflows/close_stale_issues.yml +++ b/.github/workflows/close_stale_issues.yml @@ -7,7 +7,7 @@ jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@v9 + - uses: actions/stale@v10 with: stale-issue-message: This issue is stale because it has been open for 90 days with no activity. Remove stale label or comment or this will be closed in 7 days. stale-pr-message: This PR is stale because it has been open for 60 days with no activity. Remove stale label or comment or this will be closed in 14 days. diff --git a/.github/workflows/release_update.yml b/.github/workflows/release_update.yml index 73f8357966..7f462ffd62 100644 --- a/.github/workflows/release_update.yml +++ b/.github/workflows/release_update.yml @@ -51,7 +51,7 @@ jobs: - name: Rename artifact run: mv build/outputs/apk/**/**/*.apk "${{ github.event.inputs.artifactName }}" - name: Attest - uses: actions/attest-build-provenance@v2 + uses: actions/attest-build-provenance@v3 with: subject-path: ${{ github.event.inputs.artifactName }} - name: Upload artifact @@ -92,7 +92,7 @@ jobs: with: name: Release APK path: artifacts/release-apk - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v6 with: python-version: 3.x - name: Install Python packages diff --git a/build.gradle b/build.gradle index 3c90853963..d7001c1c16 100644 --- a/build.gradle +++ b/build.gradle @@ -4,9 +4,9 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { - id 'com.android.application' version '8.12.2' - id 'com.android.library' version '8.12.2' apply false - id 'com.android.test' version '8.12.2' apply false + id 'com.android.application' version "8.13.0" + id 'com.android.library' version "8.13.0" apply false + id 'com.android.test' version '8.13.0' apply false id 'androidx.baselineprofile' version '1.4.0' id 'org.jetbrains.kotlin.android' version "2.2.10" id 'org.jetbrains.kotlin.plugin.compose' version "2.2.10" diff --git a/lawnchair/res/values-ca-rES/strings.xml b/lawnchair/res/values-ca-rES/strings.xml index 4f2d23ce82..5e058dd880 100644 --- a/lawnchair/res/values-ca-rES/strings.xml +++ b/lawnchair/res/values-ca-rES/strings.xml @@ -38,23 +38,23 @@ Copia Enganxar Feta - Select all - Deselect all - Inverse selection + Seleccionar tot + Desseleccionar tot + Invertir selecció Carregant… Dismiss - Download update - Install update - View changes - You\'re up-to-date! + Descarregar actualització + Instal·lar actualització + Veure canvis + Estàs al dia! - Updates - Failed to load changes - No changes found + Actualitzacions + Hi ha hagut un error en carregar els canvis + No s\'han trobat canvis Build #%1$d → #%2$d by %1$s • %2$s • %3$s - just now + just ara %dm %dh %dd @@ -72,7 +72,7 @@ General "words" used throughout Lawnchair --> - Others + Altres Dinàmic Predefinits @@ -87,13 +87,13 @@ Graella Diseny - Show wallpaper + Mostrar fons de pantalla Fons de pantalla - Style + Estil Opacitat del fons S\'ha copiat al porta-retalls - Result copied to clipboard + Resultat copiat al porta-retalls Item removed What to show diff --git a/lawnchair/res/values-el-rGR/strings.xml b/lawnchair/res/values-el-rGR/strings.xml index 82903c1d70..97317a7642 100644 --- a/lawnchair/res/values-el-rGR/strings.xml +++ b/lawnchair/res/values-el-rGR/strings.xml @@ -573,7 +573,7 @@ --> - Έξυπνη αναζήτηση + Αναζήτηση ιστού και άλλα Αναζήτηση εφαρμογών Δεν βρέθηκαν εφαρμογές που να ταιριάζουν “%1$s Από το διαδίκτυο diff --git a/lawnchair/res/values-fa-rIR/strings.xml b/lawnchair/res/values-fa-rIR/strings.xml index 81df24e625..97da776478 100644 --- a/lawnchair/res/values-fa-rIR/strings.xml +++ b/lawnchair/res/values-fa-rIR/strings.xml @@ -42,25 +42,25 @@ لغو‌انتخاب همه انتخاب معکوس درحال بارگذاری… - Dismiss + رد کردن بارگیری به‌روزرسانی نصب به‌روزرسانی - View changes + مشاهده تغییرات شما به روز هستید! - Updates - Failed to load changes - No changes found - Build #%1$d → #%2$d - by %1$s • %2$s • %3$s + به‌روزرسانی‌ها + بارگیری تغییرات ناموفق بود + هیچ تغییری یافت نشد + ساخت #%1$d → #%2$d + توسط %1$s • %2$s • %3$s - just now - %dm - %dh - %dd - %dw - %dmo - %dy + همین الان + %dد + %dس + %dر + %dه + %dماه + %dسال مدیریت شده توسط Lawnchair ترجیحات @@ -87,7 +87,7 @@ جدول چیدمان - Show wallpaper + نمایش تصویر‌زمینه کاغذ دیواری سبک شفافیت پس‌زمینه @@ -114,7 +114,7 @@ فقط برنامه های ویژه را نشان بده پوشه من - To perform certain actions (such as locking 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, or to open the Recents screen, Lawnchair uses the performGlobalAction Accessibility service. + برای انجام برخی اقدامات (مانند قفل کردن تلفن شما) هنگام انجام یک حرکت، Lawnchair نیاز به دسترسی به قابلیت دسترسی دارد.\n\nLawnchair هیچ اقدام کاربر را زیر نظر نمی‌گیرد، اگرچه امتیاز انجام این کار برای همه سرویس‌های دسترسی لازم است. Lawnchair هر رویدادی را که توسط سیستم ارسال شود، نادیده می‌گیرد.\n\nبرای قفل کردن تلفن شما یا باز کردن صفحه اخیراً، Lawnchair از سرویس دسترسی اقدام جهانی استفاده می‌کند. %1$s (%2$d) %1$d x %2$d %1$s & %2$s @@ -139,7 +139,7 @@ تعداد سطرها و ستون‌ها حرکات ضربه‌ها و کشیدن‌ها - Recents screen + صفحه اخیر دکمه پاک‌کردن همه، شعاع گوشه‌ها درباره اطلاعات برنامه @@ -154,10 +154,10 @@ افزایش حداکثر اندازه جدول صفحه اصلی از ۱۰ در ۱۰ به ۲۰ در ۲۰ همیشه بارگذاری دوباره آیکون‌ها خودداری از استفاده از آیکون‌های ذخیره شده در آیکون پک‌ها - Icon swipe gestures - Perform actions when swiping left or right on icons instead of moving the home screen - Deck layout - Show a layout option to hide the app drawer and automatically add new apps to the home screen + حرکات کشیدن آیکون + انجام اقدامات هنگام کشیدن انگشت به چپ یا راست روی آیکون‌ها به جای حرکت دادن صفحه اصلی + چیدمان عرشه + نمایش گزینه طرح‌بندی برای مخفی کردن کشوی برنامه‌ها و افزودن خودکار برنامه‌های جدید به صفحه اصلی قفل/بازکردن جلوگیری از بسته شدن برنامه انتخابی با فشار دادن «پاک کردن همه» @@ -222,9 +222,9 @@ مربع دایره‌ای اشک - Four-sided cookie - Seven-sided cookie - Arch + کوکی چهار طرفه + کوکی هفت ضلعی + قوس شکل آیکون سفارشی ایجاد شکل آیکون سفارشی @@ -248,7 +248,7 @@ آیکون‌های پوسته‎‌ای خاموش صفحه اصلی - Home screen and app drawer + کشوی برنامه‌ها و صفحه اصلی هیچ بسته آیکونی پشتیبانی نمی‌شود افزودن قلم @@ -324,7 +324,7 @@ چه چیزی نشان‌داده شود تقویم - Date and time + تاریخ و زمان تاریخ زمان قالب ساعت @@ -362,19 +362,19 @@ ترجمه کمک‌کردن محصول - Design and development + طراحی و توسعه توسعه نگهداری QuickSwitch توسعه دهنده - Support and PR - Community - Telegram + پشتیبانی و روابط عمومی + انجمن + تلگرام اخبار - Legal + حقوقی سپاسگزاریها - Privacy policy - Active - Failed to check for updates + سیاست حفظ حریم خصوصی + فعال + بررسی به‌روزرسانی‌ها ناموفق بود - These settings will be ignored as Lawnchair isn\'t set as the Recents screen provider + این تنظیمات نادیده گرفته می‌شوند زیرا Lawnchair به عنوان ارائه دهنده صفحه اخیراً تنظیم نشده یکپارچه سازی سیستم ناسازگار دستگاه شما به گونه‌ای پیکربندی شده که ژست‌های حرکتی سیستم (معروف به Quickstep) توسط %1$s ارائه شده سازگار باشد، ولی این نسخه %1$s با اندروید شما سازگار نیست. برای ادامه استفاده از دستگاهتان، لطفاً به‌روزرسانی‌ %1$s را حذف نصب کنید یا %1$s را به‌عنوان ارائه‌دهنده اشاره سیستم غیرفعال کنید. پس‌زمینه نیمه شفاف @@ -564,7 +564,7 @@ توقف اجباری شعاع گوشه صفحه شعاع گوشه صفحه سفارشی - When you swipe up to open the Recents screen, 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. + وقتی برای باز کردن صفحه اخیرا، انگشت خود را به بالا می‌کشید، برنامه فعلی انگشت شما را دنبال می‌کند و به شکل یک کارت کوچک می‌شود. از این اسلایدر برای تنظیم شعاع گوشه کارت، زمانی که تقریباً تمام صفحه است، استفاده کنید تا با گوشه‌های صفحه نمایش شما مطابقت داشته باشد. نوار وظیفه نمایش نوار وظیفه (آزمایشی) - Search apps, web, and more + جستجوی برنامه‌ها، وب و موارد دیگر جستجو برنامه‌ها هیچ برنامه ای مطابق با \"%1$s\" یافت نشد از وب @@ -606,20 +606,20 @@ جست‌وجو برنامه جستجوی جهانی (روی دستگاه) جستجوی جهانی (با ASI) - Search engine name - Search engine URL + نام موتور جستجو + آدرس موتور جستجو آدرس اینترنتی پیشنهادات جستجو - %s will be replaced with the search query + % با عبارت جستجو جایگزین خواهد شد %s will be replaced with the search query. Results must be in JSON OpenSearch format. نشان‌دادن در نتایج جستجو - Apps and shortcuts + برنامه‌ها و میانبرها میانبرهای برنامه مردم نکته‌های پیکسل تنظیمات اندروید فایل‌ها - Photos and videos + عکس‌ها و ویدیوها فایل‌های صوتی همه فایل‌ها پیشنهادات وب @@ -627,9 +627,9 @@ ماشین حساب شروع جستجو برنامه‌ها، مخاطبین و موارد دیگر را پیدا کنید. جستجوهای اخیر شما در اینجا نمایش داده می‌شوند. - Find apps, contacts, and more. + برنامه‌ها، مخاطبین و موارد دیگر را پیدا کنید. - Search on + جستجو در رسانه، فایل‌ها و موارد دیگر مخاطبین و موارد دیگر با %1$s @@ -644,7 +644,7 @@ دسترسی به اعلان‌ها نیاز است برای نمایش نشان اعلان، اعلان‌های برنامه را برای %1$s روشن کنید - Contacts permission needed + مجوز مخاطبین مورد نیاز است To search for contacts, grant contacts and phone permissions to %1$s Music and audio access needed To search your music and other audio files, %1$s needs permission to access your media library. @@ -666,11 +666,11 @@ Multiple permissions needed To display wallpaper previews and include them in backups, %1$s requires the following permissions. This is due to system limitations for accessing wallpaper data. Manage all files on device - Read photos and videos - Cannot enable manage storage access + خواندن عکسها و ویدیو ها + نمیتوان دسترسی مدیریت حافظه را فعال کرد Due to Play Store policy, %1$s cannot request full storage access here. To access all files, please download %1$s from GitHub. Alternatively, you can grant access to photos, videos, and audio files individually in settings. بازکردن تنظیمات اعطای مجوز - Permissions needed - Tap to grant permissions + مجوزهای مورد نیاز + برای اعطای مجوزها ضربه بزنید diff --git a/lawnchair/res/values-it-rIT/strings.xml b/lawnchair/res/values-it-rIT/strings.xml index 8b9c521537..bd798a58bd 100644 --- a/lawnchair/res/values-it-rIT/strings.xml +++ b/lawnchair/res/values-it-rIT/strings.xml @@ -42,25 +42,25 @@ Deseleziona tutto Selezione inversa Caricamento… - Dismiss + Ignora Scarica aggiornamento Installa aggiornamento - View changes + Visualizza modifiche Sei aggiornato! - Updates - Failed to load changes - No changes found + Aggiornamenti + Impossibile caricare le modifiche + Nessuna modifica trovata Build #%1$d → #%2$d - by %1$s • %2$s • %3$s + di %1$s • %2$s • %3$s - just now - %dm - %dh - %dd - %dw - %dmo - %dy + proprio ora + %d min fa + %d ore fa + %d giorni fa + %d settimane fa + %d mesi fa + %d anni fa Gestito da Lawnchair Preferenze @@ -72,7 +72,7 @@ General "words" used throughout Lawnchair --> - + Altro Dinamico Preset @@ -87,7 +87,7 @@ Griglia Layout - Show wallpaper + Mostra sfondo Sfondo Stile Opacità sfondo @@ -99,7 +99,7 @@ Cosa mostrare Sfondi Caddy (Beta) - + Caddy Cartelle menu delle app Cartella menu Crea cartella @@ -114,7 +114,7 @@ Mostra solo app uniche La mia cartella - Per eseguire determinate azioni (come bloccare il telefono) quando si esegue un gesto, Lawnchair richiede l\'accesso all\'accessibilità.\n\nLawnchair non guarda nessuna azione utente, sebbene il privilegio di farlo sia richiesto per tutti i servizi di accessibilità. Lawnchair scarta qualsiasi evento inviato dal sistema.\n\nPer bloccare il telefono, o per aprire la Schermata dei recenti, Lawnchair utilizza il servizio di accessibilità performGlobalAction. + Per eseguire determinate azioni (come bloccare il telefono) quando si esegue un gesto, Lawnchair richiede l\'accesso all\'accessibilità.\n\nLawnchair non guarda nessuna azione utente, sebbene il privilegio di farlo sia richiesto per tutti i servizi di accessibilità. Lawnchair scarta qualsiasi evento inviato dal sistema.\n\nPer bloccare il telefono, o per aprire la Schermata Recenti, Lawnchair utilizza il servizio di accessibilità performGlobalAction. %1$s (%2$d) %1$d × %2$d %1$s e %2$s @@ -127,7 +127,7 @@ Impostazioni Generale Colori, Pacchetti Icone, Punti di notifica - Schermata principale + Schermata Home Feed, griglia, icone Dock Barra di ricerca, numero d\'icone @@ -139,14 +139,14 @@ Numero di righe e colonne Gesti Tocchi e scorrimenti - Schermata recenti + Schermata Recenti Pulsante Cancella Tutto, raggio dell\'angolo Informazioni Informazioni sull\'app Riavvia Lawnchair Funzionalità sperimentali - Personalizzazione del font + Personalizzazione dei font Qualche testo rimane invariato Personalizzazione del calendario di ‘A Colpo d\'Occhio’ Consenti la visualizzazione della data in calendari non gregoriani @@ -155,7 +155,7 @@ Ricarica sempre le icone Evita di utilizzare icone dalla cache dai pacchetti d\'icone Gesti di scorrimento icona - Esegui azioni quando scorri a sinistra o a destra sulle icone invece di spostare la schermata iniziale + Esegui azioni quando scorri a sinistra o a destra sulle icone invece di spostare la schermata Home Disposizione a Deck Mostra un\'opzione di disposizione per nascondere il Menu delle App e aggiungere automaticamente nuove app alla Schermata Home Blocca/Sblocca @@ -222,9 +222,9 @@ Supercerchio Goccia - Four-sided cookie - Seven-sided cookie - Arch + Biscotto a quattro + Biscotto a sette + Arco Forma personalizzata per le icone Crea una forma personalizzata per le icone @@ -247,8 +247,8 @@ Icone di sistema Icone a tema Disattivate - Schermata home - Schermata home e menu delle app + Schermata Home + Schermata Home e menu delle app Nessun pacchetto icone supportato Aggiungi font @@ -284,12 +284,12 @@ Stile dei colori Spritz - Tonal Spot - Vibrant - Expressive - Rainbow - Fruit Salad - Content + Sfumatura + Vivace + Espressivo + Arcobaleno + Macedonia + Contenuto Monocromatico Colori @@ -343,8 +343,8 @@ Tocca per configurare Per utilizzare %1$s, attiva i Punti di notifica. - Mostra nella schermata home - ‘A Colpo d\'Occhio’ può essere aggiunto manualmente alla schermata home inserendo il widget di Lawnchair + Mostra nella schermata Home + ‘A Colpo d\'Occhio’ può essere aggiunto manualmente alla schermata Home inserendo il widget di Lawnchair Fornitore di ‘A Colpo d\'Occhio’ Google @@ -370,11 +370,11 @@ Community Telegram Novità - Legal + Note legali Riconoscimenti - Privacy policy - Active - Failed to check for updates + Informativa sulla privacy + Attivo + Impossibile controllare gli aggiornamenti Segnalazione di un bug con Lawnchair - %1$s è crashata + %1$s è crashato Carica log del crash Caricamento fallito Caricamento… @@ -442,14 +442,14 @@ --> Rotazione della schermata Home - Consentì la rotazione della schermata home quando il dispositivo viene ruotato + Consentì la rotazione della schermata Home quando il dispositivo viene ruotato Sfoca lo sfondo (sperimentale) Intensità della sfocatura Soglia del fattore Deck Deck (Beta) Accedi senza sforzo alle tue applicazioni con Deck, l\'esperienza completa senza Menu delle App, progettata per semplicità e organizzazione fluida - Aggiungi le nuove app alla schermata home + Aggiungi le nuove app alla schermata Home Mostra il feed Nessuna app per il feed installata Feed @@ -458,16 +458,16 @@ Effetto di profondità nello sfondo Effettua zoom dello sfondo durante il passaggio tra aree diverse del launcher Ombra in cima - Griglia della schermata home - Blocca la schermata home - Sblocca la schermata home - La schermata home è bloccata - Impedisci modifiche al layout della schermata home + Griglia della schermata Home + Blocca la schermata Home + Sblocca la schermata Home + La schermata Home è bloccata + Impedisci modifiche al layout della schermata Home Mostra punti di paginazione Usa punti invece che linee per mostrare il numero della pagina Usa il nuovo stile popup - Usa lo stile popup di Material You, elastico e leggermente consolidato - Menu popup + Usa lo stile dei popup di Material You, elastici e leggermente consolidati + Menu a comparsa Voci del menu a comparsa Modifica le voci del menu a comparsa Selettore rapido sfondo @@ -552,7 +552,7 @@ Numero massimo di colonne nelle cartelle Numero massimo di righe nelle cartelle - Queste impostazioni saranno ignorate perché Lawnchair non è impostato come fornitore della Schermata recenti + Queste impostazioni saranno ignorate perché Lawnchair non è fornitore della Schermata Recenti Integrazione di sistema incompatibile Il tuo dispositivo è configurato per avere i gesti di sistema (noti come Quickstep) forniti da %1$s, ma questa versione di %1$s non è compatibile con la tua versione di Android. Per continuare ad usare il tuo dispositivo, disinstalla gli aggiornamenti di %1$s o disabilita %1$s come fornitore dei gesti di sistema. Sfondo traslucido @@ -564,7 +564,7 @@ Forza la chiusura Raggio di curvatura dell\'angolo dello schermo Raggio di curvatura dell\'angolo dello schermo personalizzato - Quando scorri verso l\'alto per mostrare la schermata recenti, l\'applicazione corrente segue il tuo dito, restringendosi in una scheda. Utilizza questo cursore per regolare il raggio di curvatura degli angoli della scheda quando è quasi a schermo intero in modo che corrisponda agli angoli del tuo schermo. + Quando scorri verso l\'alto per mostrare la Schermata delle App Recenti, l\'applicazione corrente segue il tuo dito, restringendosi in una scheda. Utilizza questo cursore per regolare il raggio di curvatura degli angoli della scheda quando è quasi a schermo intero in modo che corrisponda agli angoli del tuo schermo. Barra delle applicazioni Mostra la barra delle applicazioni (sperimentale) - Search apps, web, and more + Cerca app, web e altro Cerca tra le app Non è stata trovata nessuna app che corrisponda a \"%1$s\" Dal web @@ -585,13 +585,13 @@ Nessuno store né browser è installato Cerca sul web Cancella la cronologia di ricerca - Pulisci la casella di ricerca + Pulisci la barra di ricerca Ricerca Mostra la barra di ricerca Mostra la tastiera automaticamente Ricerca approssimativa - Mostra risultati simili a ciò che hai digitato per le ricerche tra le app + Mostra corrispondenze simili alle ricerche tra le app Suggerimenti Mostra app consigliate in cima al menu delle app Ricerca sul dispositivo @@ -600,17 +600,17 @@ Se viene digitato il nome completo Fornitore di suggerimenti web Mostra l\'icona del fornitore di suggerimenti web nella barra di ricerca - Fai corrispondere alla barra di ricerca della dock + Associa alla barra di ricerca della dock Cliccare sulla barra di ricerca della dock aprirà la ricerca dal menu delle app Algoritmo di ricerca Ricerca app Ricerca globale (sul dispositivo) Ricerca globale (tramite ASI) - Search engine name - Search engine URL - Dearch suggestions URL + Nome motore di ricerca + URL motore di ricerca + URL suggerimenti di ricerca %s sarà sostituito con la query di ricerca - %s will be replaced with the search query. Results must be in JSON OpenSearch format. + %s diventerà la query di ricerca. I risultati devono essere in formato JSON OpenSearch. Mostra nei risultati di ricerca App e scorciatoie @@ -619,17 +619,17 @@ Suggerimenti Pixel Impostazioni di Android File - Photos and videos - Audio files - All files + Foto e video + File audio + Tutti i file Suggerimenti dal web Cronologia delle ricerche Calcolatrice - Start searching - Find apps, contacts, and more. Your recent searches will appear here. - Find apps, contacts, and more. + Inizia la ricerca + Trova app, contatti e altro ancora. Le tue ricerche recenti appariranno qui. + Trova app, contatti e altro ancora. - Search on + Cerca su Media, file e altro Contatti e altro Tramite %1$s @@ -637,40 +637,40 @@ Numero massimo di app Numero massimo di persone Numero massimo di file - Numero massimo di impostazioni + Numero massimo d\'impostazioni Numero massimo di elementi per la cronologia di ricerca Numero massimo di suggerimenti Ritardo massimo dei suggerimenti dal web Accesso alle notifiche necessario Per mostrare i Punti di notifica, attiva le notifiche per %1$s - Contacts permission needed - To search for contacts, grant contacts and phone permissions to %1$s - Music and audio access needed - To search your music and other audio files, %1$s needs permission to access your media library. + Necessario accesso ai contatti + Per cercare tra i contatti, concedi a %1$s i permessi Contatti e Telefono + Necessario accesso a musica e audio + Per cercare la tua musica e altri file audio, %1$s ha bisogno del permesso per accedere alla tua libreria multimediale. - Photos and videos access needed - To search your photos and videos, %1$s needs permission to access your media library. - Access your full media library? - To search all your photos and videos, %1$s needs full access to your media library. - Grant full media permissions - Manage selected items + Necessario accesso a foto e video + Per cercare le tue foto e video, %1$s ha bisogno del permesso per accedere alla tua libreria multimediale. + Accedi alla tua libreria multimediale completa? + Per cercare tutte le tue foto e video, %1$s ha bisogno del permesso per l\'accesso completo alla tua libreria multimediale. + Concedi permessi multimediali completi + Gestisci gli elementi selezionati - External storage access needed - To search your files, %1$s needs permission to access your device\'s external storage. - Manage storage access needed - To display your files in search results, %1$s requires permission to manage all files on your device. This permission is used solely to list files and will not be used to read or change the content of your personal files. - To display wallpaper previews and include them in backups, %1$s requires permission %2$s. This is due to system limitations for accessing wallpaper data. - to read all files on your device - to manage all files on your device - Multiple permissions needed - To display wallpaper previews and include them in backups, %1$s requires the following permissions. This is due to system limitations for accessing wallpaper data. - Manage all files on device - Read photos and videos - Cannot enable manage storage access - Due to Play Store policy, %1$s cannot request full storage access here. To access all files, please download %1$s from GitHub. Alternatively, you can grant access to photos, videos, and audio files individually in settings. + Necessario accesso alla memoria esterna + Per cercare i tuoi file, %1$s ha bisogno del permesso per accedere alla memoria esterna del tuo dispositivo. + Necessario accesso alla gestione archiviazione + Per visualizzare i file nei risultati di ricerca, %1$s ha bisogno del permesso per gestire tutti i file sul tuo dispositivo. Questo permesso viene usato esclusivamente per elencare i file e non verrà usato per leggere o modificare il contenuto dei file personali. + Per visualizzare le anteprime dello sfondo e includerle nei backup, %1$s ha bisogno del permesso %2$s. Ciò è dovuto alle limitazioni di sistema all\'accesso ai dati dello sfondo. + per leggere tutti i file sul tuo dispositivo + per gestire tutti i file sul tuo dispositivo + Più permessi necessari + Per visualizzare le anteprime dello sfondo e includerle nei backup, %1$s ha bisogno dei permessi seguenti. Ciò è dovuto alle limitazioni di sistema all\'accesso ai dati dello sfondo. + Gestire tutti i file sul dispositivo + Leggere foto e video + Impossibile abilitare accesso alla gestione memoria + A causa della politica Play Store, %1$s non può richiedere l\'accesso alla memoria completa qui. Per accedere a tutti i file, scarica %1$s da GitHub. In alternativa, è possibile concedere l\'accesso a foto, video e file audio singolarmente nelle impostazioni. Apri impostazioni Concedi i permessi - Permissions needed - Tap to grant permissions + Permessi necessari + Tocca per concedere i permessi diff --git a/lawnchair/res/values-vi-rVN/strings.xml b/lawnchair/res/values-vi-rVN/strings.xml index 603e0a2506..9fbf07fd0b 100644 --- a/lawnchair/res/values-vi-rVN/strings.xml +++ b/lawnchair/res/values-vi-rVN/strings.xml @@ -48,7 +48,7 @@ Xem các thay đổi Bạn đã cập nhật rồi! - Updates + Failed to load changes No changes found Bản dựng #%1$d -> #%2$d diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml index 3e838a5aa6..54ea6ea252 100644 --- a/lawnchair/res/values/strings.xml +++ b/lawnchair/res/values/strings.xml @@ -682,7 +682,7 @@ Fennec Firefox Iceraven - Mull + IronFox Kagi Custom diff --git a/lawnchair/src/app/lawnchair/override/CustomizeDialog.kt b/lawnchair/src/app/lawnchair/override/CustomizeDialog.kt index f94dd66502..b074421610 100644 --- a/lawnchair/src/app/lawnchair/override/CustomizeDialog.kt +++ b/lawnchair/src/app/lawnchair/override/CustomizeDialog.kt @@ -145,6 +145,7 @@ fun CustomizeAppDialog( var title by remember { mutableStateOf(prefs.customAppName[componentKey] ?: defaultTitle) } + val launcherAppState = LauncherAppState.getInstance(context) // Lawnchair-TODO: We use rememberLauncherForActivityResult, but it was broke so intent was used. @@ -164,7 +165,7 @@ fun CustomizeAppDialog( val newTitle = if (title != defaultTitle) title else null if (newTitle != previousTitle) { prefs.customAppName[componentKey] = newTitle - val model = LauncherAppState.getInstance(context).model + val model = launcherAppState.model model.onAppIconChanged(componentKey.componentName.packageName, componentKey.user) } } diff --git a/lawnchair/src/app/lawnchair/qsb/providers/Kagi.kt b/lawnchair/src/app/lawnchair/qsb/providers/Kagi.kt index 73eea3a95f..e56d65a34d 100644 --- a/lawnchair/src/app/lawnchair/qsb/providers/Kagi.kt +++ b/lawnchair/src/app/lawnchair/qsb/providers/Kagi.kt @@ -14,6 +14,8 @@ data object Kagi : QsbSearchProvider( themedIcon = R.drawable.ic_kagi_tinted, themingMethod = ThemingMethod.TINT, packageName = "com.kagi.search", + className = "com.kagi.search.HomeActivity", + action = "WIDGET_SEARCH_TEXT", website = "https://kagi.com", type = QsbSearchProviderType.APP_AND_WEBSITE, sponsored = false, diff --git a/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt b/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt index 3bb1462106..7d09bfdb90 100644 --- a/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt +++ b/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt @@ -137,7 +137,7 @@ sealed class QsbSearchProvider( Firefox, Iceraven, Startpage, - Mull, + IronFox, Kagi, ) diff --git a/lawnchair/src/app/lawnchair/theme/color/tokens/ColorTokens.kt b/lawnchair/src/app/lawnchair/theme/color/tokens/ColorTokens.kt index a24e8c4057..e2a4cb068b 100644 --- a/lawnchair/src/app/lawnchair/theme/color/tokens/ColorTokens.kt +++ b/lawnchair/src/app/lawnchair/theme/color/tokens/ColorTokens.kt @@ -122,6 +122,7 @@ object ColorTokens { @JvmField val PopupShadeSecond = DayNightColorToken(PopupColorPrimary.setLStar(95.0), PopupColorPrimary.setLStar(15.0)) @JvmField val PopupShadeThird = DayNightColorToken(PopupColorPrimary.setLStar(90.0), PopupColorPrimary.setLStar(10.0)) + @JvmField val PopupArrow = PopupShadeFirst @JvmField val QsbIconTintPrimary = DayNightColorToken(Accent3_400, Accent3_100) @@ -150,8 +151,6 @@ object ColorTokens { @JvmField val WidgetAddButtonBackgroundColor = PrimaryButton - @JvmField val PredictedPlateColor = Accent1_300 - val SwitchThumbOn = Accent1_100 val SwitchThumbOff = DayNightColorToken(Neutral2_300, Neutral1_400) val SwitchThumbDisabled = DayNightColorToken(Neutral2_100, Neutral1_700) @@ -159,6 +158,8 @@ object ColorTokens { val SwitchTrackOn = DayNightColorToken(Accent1_600, Accent2_500.setLStar(51.0)) val SwitchTrackOff = DayNightColorToken(Neutral2_500.setLStar(45.0), Neutral1_700) + @JvmField val PredictedPlateColor = Accent1_300 + // Material 3 Expressive @JvmField val ExpressiveAllApps = DayNightColorToken(Accent1_100, Accent1_800) } diff --git a/lawnchair/src/app/lawnchair/ui/OverflowMenu.kt b/lawnchair/src/app/lawnchair/ui/OverflowMenu.kt index dfa7232610..1efdc69c2a 100644 --- a/lawnchair/src/app/lawnchair/ui/OverflowMenu.kt +++ b/lawnchair/src/app/lawnchair/ui/OverflowMenu.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.MoreVert import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf @@ -32,6 +33,7 @@ fun OverflowMenu( expanded = showMenu.value, onDismissRequest = { showMenu.value = false }, offset = DpOffset(x = (-2).dp, y = (-48).dp), + shape = MaterialTheme.shapes.large, ) { block(overflowMenuScope) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/PreferencesDashboard.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/PreferencesDashboard.kt index b8f84e2a34..af00bae3b8 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/PreferencesDashboard.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/PreferencesDashboard.kt @@ -15,7 +15,14 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Backup +import androidx.compose.material.icons.outlined.Science +import androidx.compose.material.icons.outlined.SettingsBackupRestore +import androidx.compose.material.icons.rounded.Backup import androidx.compose.material.icons.rounded.Build +import androidx.compose.material.icons.rounded.Refresh +import androidx.compose.material.icons.rounded.Science +import androidx.compose.material.icons.rounded.SettingsBackupRestore import androidx.compose.material.icons.rounded.TipsAndUpdates import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon @@ -28,6 +35,7 @@ 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.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.core.content.getSystemService @@ -255,37 +263,87 @@ fun RowScope.PreferencesOverflowMenu( }, ) { val context = LocalContext.current - DropdownMenuItem(onClick = { - openAppInfo(context) - hideMenu() - }, text = { - Text(text = stringResource(id = R.string.app_info_drop_target_label)) - }) - DropdownMenuItem(onClick = { - restartLauncher(context) - hideMenu() - }, text = { - Text(text = stringResource(id = R.string.debug_restart_launcher)) - }) - DropdownMenuItem(onClick = { - onNavigate(ExperimentalFeatures) - hideMenu() - }, text = { - Text(text = stringResource(id = R.string.experimental_features_label)) - }) + DropdownMenuItem( + leadingIcon = { + Icon( + painter = painterResource(R.drawable.ic_about), + contentDescription = null, + tint = MaterialTheme.colorScheme.onSurfaceVariant, + ) + }, + onClick = { + openAppInfo(context) + hideMenu() + }, + text = { + Text(text = stringResource(id = R.string.app_info_drop_target_label)) + }, + ) + DropdownMenuItem( + leadingIcon = { + Icon( + imageVector = Icons.Rounded.Refresh, + contentDescription = null, + tint = MaterialTheme.colorScheme.onSurfaceVariant, + ) + }, + onClick = { + restartLauncher(context) + hideMenu() + }, + text = { + Text(text = stringResource(id = R.string.debug_restart_launcher)) + }, + ) + DropdownMenuItem( + leadingIcon = { + Icon( + imageVector = Icons.Outlined.Science, + contentDescription = null, + tint = MaterialTheme.colorScheme.onSurfaceVariant, + ) + }, + onClick = { + onNavigate(ExperimentalFeatures) + hideMenu() + }, + text = { + Text(text = stringResource(id = R.string.experimental_features_label)) + }, + ) PreferenceDivider(modifier = Modifier.padding(vertical = 8.dp)) - DropdownMenuItem(onClick = { - openCreateBackup() - hideMenu() - }, text = { - Text(text = stringResource(id = R.string.create_backup)) - }) - DropdownMenuItem(onClick = { - openRestoreBackup() - hideMenu() - }, text = { - Text(text = stringResource(id = R.string.restore_backup)) - }) + DropdownMenuItem( + leadingIcon = { + Icon( + imageVector = Icons.Outlined.Backup, + contentDescription = null, + tint = MaterialTheme.colorScheme.onSurfaceVariant, + ) + }, + onClick = { + openCreateBackup() + hideMenu() + }, + text = { + Text(text = stringResource(id = R.string.create_backup)) + }, + ) + DropdownMenuItem( + leadingIcon = { + Icon( + imageVector = Icons.Rounded.SettingsBackupRestore, + contentDescription = null, + tint = MaterialTheme.colorScheme.onSurfaceVariant, + ) + }, + onClick = { + openRestoreBackup() + hideMenu() + }, + text = { + Text(text = stringResource(id = R.string.restore_backup)) + }, + ) } } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/SelectIconPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/SelectIconPreference.kt index c5b524997b..3e69889b33 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/SelectIconPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/SelectIconPreference.kt @@ -39,7 +39,8 @@ fun SelectIconPreference(componentKey: ComponentKey) { val iconPacks by LocalPreferenceInteractor.current.iconPacks.collectAsStateWithLifecycle() val navController = LocalNavController.current val scope = rememberCoroutineScope() - val model = LauncherAppState.getInstance(context).model + val launcherAppState = LauncherAppState.getInstance(context) + val model = launcherAppState.model val repo = IconOverrideRepository.INSTANCE.get(context) OnResult { item -> @@ -49,6 +50,7 @@ fun SelectIconPreference(componentKey: ComponentKey) { it.setResult(Activity.RESULT_OK) it.finish() model.onAppIconChanged(componentKey.componentName.packageName, componentKey.user) + launcherAppState.reloadIcons() } } } @@ -68,6 +70,7 @@ fun SelectIconPreference(componentKey: ComponentKey) { it.setResult(Activity.RESULT_OK) it.finish() model.onAppIconChanged(componentKey.componentName.packageName, componentKey.user) + launcherAppState.reloadIcons() } } }, diff --git a/src/com/android/launcher3/widget/LauncherWidgetHolder.java b/src/com/android/launcher3/widget/LauncherWidgetHolder.java index d5a19e9f09..550d585dfc 100644 --- a/src/com/android/launcher3/widget/LauncherWidgetHolder.java +++ b/src/com/android/launcher3/widget/LauncherWidgetHolder.java @@ -256,11 +256,31 @@ public class LauncherWidgetHolder { * @param requestCode The request code */ public void startConfigActivity(@NonNull BaseActivity activity, int widgetId, int requestCode) { + startConfigActivity(activity, widgetId, requestCode, 0); + } + + /** + * Starts the configuration activity for the widget with retry counter + * + * @param activity The activity in which to start the configuration page + * @param widgetId The ID of the widget + * @param requestCode The request code + * @param retryCount The number of retries attempted + */ + private void startConfigActivity(@NonNull BaseActivity activity, int widgetId, + int requestCode, int retryCount) { if (!WIDGETS_ENABLED) { sendActionCancelled(activity, requestCode); return; } + // Prevent infinite loops by limiting retries + if (retryCount >= 3) { + Log.e(this.getClass().getName(), "Too many retries for widget configuration, cancelling"); + sendActionCancelled(activity, requestCode); + return; + } + try { TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "start: startConfigActivity"); mWidgetHost.startAppWidgetConfigureActivityForResult(activity, widgetId, 0, requestCode, @@ -270,18 +290,22 @@ public class LauncherWidgetHolder { sendActionCancelled(activity, requestCode); } catch (IllegalArgumentException e) { // Widget ID became invalid, possibly due to two-step configuration some cases - Log.e(this.getClass().getName(), "Widget ID became invalid during configuration", e); - handleInvalidWidgetId(activity, widgetId, requestCode); + Log.e(this.getClass().getName(), "Widget ID became invalid during configuration (retry " + retryCount + ")", e); + handleInvalidWidgetId(activity, widgetId, requestCode, retryCount + 1); } } private void handleInvalidWidgetId(BaseActivity activity, int widgetId, int requestCode) { + handleInvalidWidgetId(activity, widgetId, requestCode, 0); + } + + private void handleInvalidWidgetId(BaseActivity activity, int widgetId, int requestCode, int retryCount) { // Remove the invalid widget deleteAppWidgetId(widgetId); int newWidgetId = allocateAppWidgetId(); if (newWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) { - startConfigActivity(activity, newWidgetId, requestCode); + startConfigActivity(activity, newWidgetId, requestCode, retryCount); } else { sendActionCancelled(activity, requestCode); }